2008-09-18

The programming language

The list of available programming languages is very long - many are listed at Wikipedia. A comparison can also be found at Wikipedia.

I would say the most important languages are:
  • C(++)
  • Java
  • Python
  • C# (VB.NET, ...)
  • PHP
  • Javascript
If your favorite language is not listed here then be told that it does not mean that it is a bad language - not always the best things are those that are well known and popular.

According to my last post "The operating system" it is a logical conclusion to choose a programming language which can produce programs that run on several systems and are not limited to Microsoft Windows for example.

So from the languages listed above C# and the complete .NET framework is the one that is less portable to other operating systems. Although there is the Mono port from .NET to Linux, it is in the hand of Microsoft to give them the needed documentation and let them live.

But a programming language cannot be justified only by the compiler. I remember DOS times and the Borland Turbo Pascal or Borland Turbo C - we used them at school and it was not only a compiler - it was Integrated Development Environment. It supported the developer with tools and help. Nowadays IDEs bring features like
  • Debugger (one of the most important features of an IDE).
  • List available classes, properties and methods and autocompletion (also very important).
  • Quick-Help on the used classes and methods.
  • Code folding (collapse and expand blocks and methods to have better overview in the code).
  • Code highlighting (highlight keywords, search terms, matching brackets and so on).
  • Automatic proper formatting of the code.
  • Refactoring (Renaming classes and methods for example).
  • Assistant for creating specific code parts.
  • Macros and hotkeys.
  • GUI Designer (design window dialogs).
  • ...
Most of those features are included in every modern IDE.

From what I read in forums there are still many purists who write their code in text editors. vim might be an exception here because there can be added a lot of stuff and features to it, but mostly using a text editor you can't develop with the same productivity and performance as if you were using an IDE. So IDE is an important thing.

The .NET has a huge IDE and in general I liked also the previous Visual Basic IDE which (if looking at version 5 and not 6) was also very stable and reliable. The .NET IDE however I do consider as bloatware and unstable. That is was just was my experience with the Visual Studio 2005. And for the Visual Studio 2008 I do not have enough harddisk space left. Although there are alternatives to Visual Studio I am sure that the Visual Studio is a more complete suite. I tested only SharpDevelop which lacks on debugging. Installation size of Sharpdevelop is less than 40 MB - I didn't believe that is possible to develop .NET applications with GUI (yes, a GUI designer is included) only with such a little piece of software where Microsoft needs more than 1.5 GB - although I must honestly say that there is no .NET documentation included with SharpDevelop.

In my opinion the portability and the availability of a good IDE are the two most important aspects. As I am using Windows and Linux it should be either an IDE that nearly looks the same on both platforms. Another important thing is the time that you need for getting up and running. The optimum would be if you either can learn the language fast.

I tested several IDEs (or at least tried to install them and get them running) - I tried IDEs for Python, C++ and Pascal as well as for Java.

The largest number of IDEs are available for Java - here I tested Eclipse and NetBeans. Eclipse focuses on SWT from the GUI design (additional plugin needed) and NetBeans on Swing. Eclipse and NetBeans are already very powerful and they are free.

For me the time needed to get up and running and to start into getting productive was shorter on NetBeans and further I prefer the Swing concept because the technology offers more freedom in developing more sohisticated visual controls and more independent from underlying OS. The disadvantage is that the core dialogs like a file chooser do not look as the user might be used to. But as I work on Windows and Linux I already have to get around with two different dialog variants and so at least in my applications the dialogs (the core dialogs and all the other window controls) look the same no matter on which OS it is used.

Although I also like Python very much I could not find a good IDE that is available for free. For C++ I found Code::Blocks which is available on several platforms. For Windows they have a combined setup download including the MingW C++ Compiler. C++ is for me the only real alternative when trying to write code for several platforms. However I know from my earlier experiences with C that writing C-Code you have to pay more attention and it is very likely that you write more buggy code with C than with most other languages (not C-like). But the biggest advantages of C are the faster code and the more complete access to and management of the system resources. Here Java has a disadvantage as it has no direct access to drivers of particular hardware (e.g. a scanner) that might be connected to the machine - you need wrapper libraries to get around this problem. Further C is fitting better if you write commercial software because Java programs can be decompiled easily (and also .NET applications).

Another option is PHP which is platform independent. Although there is a possibility of writing standalone applications PHP is basically for web applications only.

From the portability and usability point of view in my opinion Java and C++ are the two favorite languages to use in the long run as you can't be wrong betting on those. Regarding web development there a lot more options (PHP, SWF, AIR, FLEX and so on) and I do not have the confidence to give a good forecast on that.

Related posts: The operating system., Homogeneous programming style, Popular Java myths, Install NetBeans on Ubuntu 10.04, The future of Java, Choosing a programming language, Java vs .net/C#.

3 comments:

Martin Wildam said...

I want to add a note about Ruby, Scala and the like (as I didn't mention them in my post and lately I hear and read so much about those alternative languages for the JVM): I prefer statically typed languages (such as Scala over Ruby) but I do see both in their early stages and there are language elements in both that I personally do not like. I have seen and used many programming languages and from that experience I think that there will be even more languages created that will be even better. From my point of view Ruby or Scala are not the last conclusion of wisdom in this area and therefore I would still prefer Java over Scala for example.

Marc Teufel said...

I like Python too ! I use Erics Python IDE wich is also free and in my eyes very powerful. And the best thing on it: It is extendable via plugins (like Eclipse) - there is a plugin for Django, thats great stuff !!!! See you, Marc Teufel

Martin Wildam said...

I have used the Erics IDE a while ago and I missed some (from my point of view) rudimentary features. For GUI development/design I found general lacks in Python IDEs but my experience is "already" quite old - must have been early 2008 if I remember right.

For the language itself, I like Python very much but when I was trying to fix a few issues on an application we have at the company I am working for, it was quite a headache. Some elements of being a dynamic language disturbed quite a lot.

I have seen so much bad and buggy code that I also find it important that the language is easy, readable and "resistant to bugs". E.g. explicit variable definitions required is one of the elements that helps avoiding bugs, being a static language helps also.