Deprecated: Assigning the return value of new by reference is deprecated in /var/www/hvidtfeldts.net/wiki/inc/parserutils.php on line 159
Deprecated: Function split() is deprecated in /var/www/hvidtfeldts.net/wiki/inc/auth.php on line 103
Warning: Cannot modify header information - headers already sent by (output started at /var/www/hvidtfeldts.net/wiki/inc/parserutils.php:159) in /var/www/hvidtfeldts.net/wiki/inc/auth.php on line 191
Deprecated: Function split() is deprecated in /var/www/hvidtfeldts.net/wiki/inc/common.php on line 737
Warning: Cannot modify header information - headers already sent by (output started at /var/www/hvidtfeldts.net/wiki/inc/parserutils.php:159) in /var/www/hvidtfeldts.net/wiki/inc/actions.php on line 255
//Notice: This page is still being incubated.
//
====== Software Development ======
===== The office setup =====
In order to setup a productive development environment consider the following:
* Versioning. You will need a central repository for all code, documents, and data that is created. You will need a backup strategy.
* Intranet. A intranet can be very convenient even for small businesses. Make sure that updating and supporting the intranet is extremely easy - otherwise it will not be used, and will gradually decay. A Wiki is probably the best way to setup an intranet. Perhaps you will need a FTP server as well. (Though a versioning server like Subversion in most cases will do).
* Access from home. It should be important to access the environment from home. People should
* Security. Make sure no one else can access your local network. Complety firewall you local network. Ideally only one port should be accessible from the outside - a port to the VPN server. If you setup WiFi make sure you use suitable encryption (Hiding SSID and MAC filtering is no good, WEP is easily cracked, and even WPA can be cracked given enough time). If you use laptops, consider encrypting valuable code and documents. TrueCrypt is excellent for this.
* Collaboration tools. Exchange versus GMail, GCalendar, ...
Overview Document.
===== Software planning =====
* Quick UML.
* Gantt
The notepad approach?
===== The Development Environment =====
*Software versioning.
* Subversion
* TortoiseSVN
* AnkhSVN.
* Documentation.
* Doxygen and Wiki.
===== The Development Process =====
* Agile Development
* Unit Testing
* Pair Coding
===== The Coding Process =====
Modularity
Object Oriented
===== The Coding ? =====
Logs / Exceptions
Coding styles. A lot can be said about different coding styles. Don't waste to much time writing large formal documents describing coding styles and best practices. Stick to one of modern coding styles (like the one used in the Java or C# API's). If you are relying on one of those all-encompassing API's (like the .NET framework, Trolltech's Qt, or the JAVA class libraries) use a similar notation. Do not use hungarian notation (not even Microsoft uses it anymore).
Embedding / Scripting
===== Frameworks =====
* Qt
* .NET
* Java
* Boost
===== Building a 'complete' application =====
* Choosing License
* Online Help
* Finishing touches (Balloon tips, Keyboard Accelerators, I18N, UI Standards)
* EULA
* Automatic software updates
* Copy Protection.
* Installers (Inno Setup)
===== Distributing an application =====
Adwords
Website - screensite, demo license, ...
===== Links to sites, papers =====
http://www.libsdl.org
http://www.swig.org/
http://en.wikipedia.org/wiki/Call_stack
http://en.wikipedia.org/wiki/Buffer_overflow
http://www.google.com/codesearch
http://www.jackslocum.com/blog/2006/10/02/3-easy-steps-to-avoid-javascript-memory-leaks/
http://krugle.com/
http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
http://msdn.microsoft.com/msdnmag/issues/02/09/SecurityTips/
http://tiger.la.asu.edu/quick_reference_card.htm
http://www.gotw.ca/
====== Random Thoughts ======
Java - when I starting doing serious programming (1996 or so), Java was really hot. It was the cool alternative to tedious cplusplus programming, or the ... delphi or VB languages.
This has changed.
By now a large group of programmers has drifted towards Microsofts .net platform (and C# which off course seems syntactically 'inspired' by java) which seems to posses a much larger momentum.
Of course the quite large segment of open source minded programmers (e.g. people who read slashdot) would never adopt a Microsoft controlled technology - these people, however, seems to moving along to more rapid development languages like Python and Ruby (see also Ruby on Rails).