I'm Michael Suodenjoki - a software engineer living in Kgs. Lyngby, north of Copenhagen, Denmark. This is my personal site containing my blog, photos, articles and main interests.

Updated 2011.01.23 15:37 +0100


Which language to teach?

When I studied software engineering back in the late 1980ties I started by learning functional programming in LISP (I believe it was Scheme) and imperative programming in Pascal (Turbo Pascal). That what the choice of starting programming languages offered by the university. Of course we also could take courses in other programming languages, e.g. logic programming using Prolog (Turbo Prolog), more imperative language as in Modula-2 and in more hardware near related languages such as C.

Notably I did not at all learn any object-oriented programming languages. Java was not an option (it was developed in the start of 1990ties and first came widely in use in the late 1990ties) and even though C++ where around and available at that time it was not taught. Probably it was, but only in a few obscure available courses.

When I graduated back in 1994 I personally wanted to learn C++ on the Windows Platform and therefore opted to use that language for my master thesis. That was a good choice and I've been using and excelled in that language and platform ever since.

Should it be Java or C#?

In a recent article in Version 2 - a Danish magazine from the media house Ingeniøren (The Engineer), it is discussed what programming language to teach at the short term (about 2 years) educational centers (in Danish you'll graduate as Datamatiker - a computer science student). Should it be Java or C#? Most of the schools offer a primary language and additional courses in the secondary language. Since it is a relatively short education the different schools offer different choice of primary programming language. A few schools offer Java as primary language because that is  requested by larger companies but most of these schools in Denmark offer C# as the primary language because that is mostly used by the relatively many medium-sized companies that we have here in Denmark - it is Microsoft territory .

Both Java and C# are object-oriented languages and learning any of these languages will train you in the object-oriented programming paradigm. The big difference between them are the actual libraries that usually follows the programming language or associated platforms. While it is relatively easy to shift between programming languages of the same type (e.g. from Java to C++ or C# or vice versa) it is however not easy to shift between using the associated libraries. It is in the library use that you distinguish yourself from the pack and from how well you'll perform in practice. Learning libraries well and the associated platforms are your big task.

Object-oriented programming languages have proven to be successfully and today every education will offer them. Functionally programming and logic programming however is very important schools of programming and is therefore offered at higher level educations (aka. universities). Those types of languages together with concurrency/parallel programming languages are the most fundamental thing to teach and will be so for many years. As it was then it is today still essential that you're familiar with those programming paradigms if you want to be sure that you are programming in the future. Functional programming has even grown in importance as far as I see it.

Update, January 15th, 2007: Terry Mahaffey describes his learning experiences from college. Point taken.