Pick your poison: choosing a programming language


The first thing a lot of students do as they finish their exams is wonder: How do I program? This question, as it did for me, eventually leads to the discovery of programming languages and, eventually, to more choices. One of the biggest questions is which language to learn. This article stems from a question a schoolgoer asked me: “which language should I learn?”

In Sri Lanka, most of the choices boil down to Java, C++, or the entire array of .NET languages. Almost every educational institute, from top-notch providers to roadside “diploma kade’s” have courses in these three. And only these three, it would seem. It’s often hard to decide, especially if you have no prior knowledge of programming. Each course is heavily advertised, often with jobs guaranteed in the flyers. Out of these choices, what’s actually useful? How do you choose?



Forget the advertising.

Flyers and promos are misleading. Consider this diagram, compiled by CodeEval for 2013. Notice how large the usage of Java is. Also notice how popular Python is.

Academia, no matter how good, are often slightly removed from the actual industry. This is why you pick up professional qualifications: to stay in tune with the industry. Now, the purpose of this article is not to hate on specific languages – but I don’t see the much-advertised Visual Basic .NET anywhere. Most of the Microsoft programming languages, in fact, seem to be missing. C++, often considered a “must-know” for any serious programmer, is surprisingly low in usage. C, C# are hanging in there. What’s happened here? 


The world has moved on. 

Gone are the days when much of the programming population spend time writing plugins, scripting system, functionality from the ground up. Right now, a lot of foundations has been laid. Languages like C and C++, often used to write entire operating systems, are falling out of usage – why? Because now that these platforms are stable and improving, most of the (ever expanding) population of coders have moved on to writing applications built upon these platforms. The frameworks, so to speak, are already in place. Nobody needs that timber anymore. 

Let’s not take the CodeEval analysis for granted. Here’s Redmonk’s list for January, 2013:

  1. JavaScript
  2. Java
  3. PHP
  4. Python
  5. Ruby
  6. C#
  7. C++
  8. C
  9. Objective-C
  10. Perl
  11. Shell
  12. Scala
  13. ASP
  14. Haskell
  15. Assembly
  16. ActionScript
  17. R
  18. CoffeeScript
  19. Visual Basic
  20. MATLAB

Notice that the top contenders – Javascript, Java, Python – in CodeEval are also in the top five here. In almost every list you can find, the traditional “heavyweight” languages have been supplanted by more web-ready, higher-level languages. Languages change over the years, some of them making improvements vast enough to top these lists. Java, when it first came out, was laughed at for being little more than a toy language. A couple of years later, it’s in everything, from mobile phones to embedded processors to NASA applications. Python was mostly used in the world of Linux. Javascript began as a way to give web pages more bling: now almost every web interface you use relies on it. The world of programming moves faster than syllabuses and public perception. To be competent, you have to be versed in a couple of programming languages, not just one. There is no single ultimate language you can learn. Many languages are used in task-specific instances. For example, if your boss wants a database front-end up and running in a day, you switch to Visual Basic, which is more or less geared towards Rapid Application Design. If you’re working on a low-level graphics rendering API, you’ll probably be using something much more low-level – C or  C++.  

The good news is, languages are easy to pick up. All languages, when you boil them down, do the same thing: send your vision, in little instructions, to the processor. Different languages handle this process differently, and thus some are more efficient than others at a given task, but all have this common base. If you know one language, you’ll be able to read and understand code written in another – and you’ll be able to pick up another language easily, sometimes in as little as a week. I began coding in Visual Basic 6 – mind you, I began early – and years later, I’ve picked up and used more than 6 programming languages, often dependent on what I’m working on at the time. 

Going back to the original question: what to choose?

The answer: everything. Learn as much as you can. A lot of the software engineers I’ve met are well versed in a variety of languages. If you have a specific skillset or job in mind, don’t go blindly rushing into learn whatever courses are thrown your way: look in the Employment sections of newspapers for similar jobs from similar companies, and try to learn the languages they require. SQL, PHP generally pop up in these lists. Start somewhere, preferably with what you perceive as the hardest.



Have something interesting and IT related to share? email the [email protected]



  1. While I agree with you that the industry is pretty dynamic, and languages rise and fall, I must add this; languages like C++ are taught in various institutes for a reason. You can't judge a language simply by 'how much it is used'. For example, what if another higher level language (such as Python) gains popularity next year? Should institutes start teaching it?

    My point is, learning higher level languages doesn't give you much concepts. You might become proficient in that language, but you won't easily understand others. I first learned C++, and I must say, there is no other language that will teach you the concepts like C++. Java programmers (who don't know C/C++) can't understand what's going on in a C++ code. But C++ programmers (who don't know Java) can get an idea relatively easily as to what a particular Java code is doing. See my point? If you teach Python to beginners, they won't know what pointers actually are and how they're dealt with in memory, how certain functions or routines are implemented, how memory is managed, etc. The point being, a Python programmer would find it relatively difficult to learn a new language. But after learning lower languages like C++, you can pick up others in a matter of days

  2. not all languages are equivalent. Don't expect any dev to pick up any language in a few days.

    There are still dev that can't understand OOP…

    And many other are stuck in imperative language paradigm.

    I agree with you that we all need to learn, but if the new language is too easy, this is maybe because we just learned a new syntax, but not new way to programs.

    If you know java, learning C# will give you little benefit. There are more or less the same language, use the same concept and even API design is similar.

    Of course knowing at least a low level language (more like assembly than C++) is of lot of help to understand how computer and languages really works.

    But you'll also want to understand different paradigms and so have a look at scheme, haskell, prolog, sql…

  3. First of all, Thank you for this article.

    As someone who has been gradually exposed to programming as an academic and an individual who's been in the industry for a couple of years as a software engineer I find your final conclusion to be gospel.

    I graduated from a well-reputed private institute in the country and I've seen quite the batch of students who came there to pursue a career in software engineering and blindly picked up C# as their language of choice for development by the time they graduated. [I wasn't picking on C# or the .net Framework or Microsoft here. Just elaborating what I saw]

    There was also a bunch of students who came in to the institute with a reasonable knowledge of the basics of the Java programming language but have never been exposed to any other programming language or paradigm besides OOP. Most of these were the IJTS crowd [No offense meant but this is what I actually observed].

    While it is good to have a good understanding of a programming language to kick start your career, it would be ill-advised to become a master of something right away.

    Speaking based on personal experience as an academic; The first programming languages I got exposed to were GW Basic and Pascal through a popular program hosted by TEC Sri Lanka quite a long time back when I was in grade 5. I picked up on C at secondary school and enjoyed it immensely. By then I had a particularly good sense of using the linux OS and using the GNU compilers to make small scale apps for opensource communities and finally C++ / Java and C# when I arrived at the campus.

    Once I graduated I got employed as a .net developer and gradually worked my way around the framework but after a couple of years things changed for .net in the offshore industry that I am part of. Frameworks evolved, new technologies were introduced and suddenly .net didn't look as promising in terms of a developing career at the time.

    Lucky for me, I didn't hold on to it but expanded towards other development languages and methodologies that helped me stay in the market with a valuable skillset. What helped me get there was the attitude to learn something different and stay updated on the concepts and evolving technologies.

    So in my opinion , considering how dynamic today's industry is and also considering how fast these technologies evolve; if you're smart you would not stick to one programming language or development platform for more than a couple of years but instead broaden your horizon on your technical know-how and explore new and old programming concepts and paradigms.

    Languages will go in and out of fashion as systems stabilize and platforms evolve but those concepts will hang around for a longer period.

    For instance the first one on the RedMonk list, look at how revolutionizing and cool unobtrusive javascript is now compared to writing plain old javascript. A few years ago people wouldn't have even used javascript to this extent. [ Not cool ? Think of NodeJS, jQuery, BackboneJS, KnockoutJS and SigmaJS ]


Please enter your comment!
Please enter your name here