Saturday, July 21, 2007

Skills and programming languages

One of my cousins asked me about the programming language to learn to acquire the "skill" of computer programming. By skill she meant, I suppose, something that can be marketed in a job interview as a differentiator from the other candidates.

But ever since compiler/interpreter design advanced beyond assembly programming, most computer languages are written as simple English statements, making computer languages easy to learn and understand. In fact, the "skill" in Computer programming is almost independent of the computer language used.

So what is the skill part?

The real "skill" is understanding the capabilities and limitations of the underlying data-structures and algorithms that come pre-packaged with several of the contemporary high-level programming languages. Now that requires some serious CS education. For example, the CLR book is an excellent resource for mastering data-structures. And if you are brave you could read Knuth's work.

Still, its good to be conversant with the syntax and peculiarities of a programming language or two because it saves a *lot* of time and debugging effort while actually writing up code. In my experience, I can trace the usage of my programming language learning/usage patterns as this

Age: Computer Language
7-9: Logo
10-12: Basic
13-16: Pascal, C
18-21: C, C++, 8086 Assembler
21-25: Java, C++, VB
27: Python
28: Python, C++

Thats a whole lot of languages. Now lets analyze the list and come up with the minimum but adequate list of things to read

1. For syntax, just learn C, or C++, or C#, or Java. The syntax of these languages is nearly identical and knowing one of these well will go along way toward working in any of these languages. But do not assume you know one if you know another! These different languages exist because they were created to support different programming paradigms and architectures. Please read up the fine print before switching arbitrarily between them!!!

2. Learn a scripting language like Perl, Python, etc. in addition to a "heavy duty" language like C, C++, C# or Java. In many circumstances writing a quick (although perhaps inefficient) program in a scripting language can save you lots of time.

So my 2 cents about the marketable skill part: C++ and Python. And a good data-structures course.

No comments: