Firstly, what are the requirements of your application?
- How complex is the application? Some languages are fine for simple applications but become unwieldy for larger applications.
- how fast does it need to run? Most GUI applications do not need to be particularly fast, since most of the time is spent waiting for the user to do something. However if you need to do a lot of processing, then speed may be significant.
- does it need to be cross platform, or only run on Windows? If it is Windows only then which versions do you need to support - XP, NT, 95/98, Windows 3.1?
- how quickly does it need to be developed? Some languages are far more productive than others.
- are there third-party libraries or components that you need to use? You can buy components to do all sorts of things - graphing, mapping etc. If so you need to make sure you are using a language that is compatible with the components you need.
- what is your tools budget? Some languages and tools cost hundreds of dollars per developer, others are free. Expensive does not always mean better though.
Here is a quick overview of the strengths and weaknesses of different languages. This is all my personal opinion of course, and other may (and probably will) disagree.
- C++
This used to be the standard language for Windows programming, using the MFC framework. C++ is a big complex language and it can take years for developers to become proficient in it. It is compiled down to machine code so if efficency is a big concern then it is the first choice. The MFC framework is rather dated and is not cross platform but is still widely used. There are also cross-platform frameworks available such as wxWindows. C++ development is generally slow compared to most of the other languages here. Although still widely used, C++ is gradually being replaced by more modern languages.
- Visual Basic
This is a Windows-only language that allows simple GUI programs to be thrown together quickly, but in my opinion becomes unwieldy for larger projects.
- Java
Java is very popular, especially as a server language. It is not as fast as C++ and can be a big memory hog, and GUI applications using it can feel sluggish if not carefully written. Due to its popularity, Java programmers tend to be fairly cheap and plentiful. Java is cross platform, so a well written program should run on any system that supports Java. Java also has a huge number of supporting tools, including things like refactoring browsers that can massively improve productivity.
- C# and .NET
Microsoft is pushing C# as an alternative to Java and C++ for Windows development. It has all the features of Java plus some enhancements, and the library that comes with it is very similar to Java's in scope. However it is Windows only, and is only supported on the more recent versions of the Windows OS. Older versions of Windows such as Win98 will need to download and install the .NET runtime from Microsoft. The tool support for C# is not as good as for Java, although that will probably change over time since MS is pouring a huge amount of money into it.
- Delphi
Delphi is a development environment similar to Visual Basic, but based on Pascal rather than BASIC. I have not used it, but I know some developers swear by it. It is not as widely used as any of the above, so Delphi programmers are thinner on the ground.
- Python
This is my language of choice, since it is far more productive than C++, Java or C#. There is a good cross-platform GUI framework called wxPython (built on top of the wxWindows C++ framework). However Python is not as widely used as it deserves to be and Python programmers are hard to come by.
Dave - The Developers' Coach
What languages are absolutetly essential for a windows programmer to know?
Thanks, Mark |