What programming language should I learn?

Mar 02 2010

Sameer asks what programming language he should learn. Below is an edited version of my reply.

The plumber comes to your home and asks: “What tool do you want me to use?”.

What will be your reply? “I don’t care! Fix the damn problem”.

That’s right. Everybody wants to get their work done, and get their problems fixed. They don’t care what tools you use. As a developer your job is to solve problems your costumers have in the most effective manner. This in turn means that you cannot use the same tool for every type of problem. Can you use an electric driller to fix a small leak in the pipes? No. You may want to use the duct tape for that.

Which language should I learn is a wrong question to begin with. Languages are tools in the bag of a software engineer. Before deciding upon the programing languages you want to learn, you should decide what type of problems you would like to work on. Would you like to work on web technologies? Would you like to work in the Linux ecosystem? Would you like to work in the mobile platforms? There are a million different niches in programming world and you have to ask yourself all those rhetorical questions that comes to your mind and then decide which language suites your choice.

This does not matter that the tools are not important. They are; but they are not more important than the problem at hand.

How many programming languages should you learn?

There is no point in trying to learn as many languages as you can. What you should do is to try and learn about as many languages as you can, and then decide which languages you should gain expertise in.

Going back to our analogy, what tools do you think a plumber should carry in his bag? “Enough tools to get his work done.”

Exactly. If you know to use just one tool, you may be forced to work with other people who can use some other tools. This happens in most corporate IT companies. In large companies you will be working with other people who have expertise in programming languages and tools which you don’t know how to use. This has the advantage that these people will be real rock-stars in their own narrow fields. Instead if you want to work in places like startups (or if you want to work as a freelance developer), you may want to know a little bit of every type of tool out there.

Of course you don’t have to know to use every type of screwdriver. You just have to be expert in using one good screwdriver model. Similarly you don’t have to be an expert in every web development language. Just learn a pretty decent one and you should be fine.

Every programming domain has its set of tools to help you develop softwares. If you are developing an enterprise website, you may be working with technologies like Core Java, Servlets, EJBs, XML, Unix Shell Scripts, Log parsers, Databases, Various web-servers etc. This means that in addition to programming languages there are many other technologies related to programming that you should master in order to be a good programmer.

One more thing you should know – all the programming languages are inherently different from each other. Some languages are easy to program in (eg Python) while some others are difficult (C/C++). I am not referring to the expertise needed in learning the language. I am referring to the effort required in writing a program after you learned the language. If you work as a programmer in an IT company, you will probably learn a new language (may be as per business requirements) in a very short time span. You will start writing decent code in about 1 week to 3 months time. Then the only thing that will matter is which language you really prefer to work with. So don’t worry much about which langauge is easier to learn; worry about which language is easier to use. (There is a correlation here though. You will find that in most cases the languages that are easier to learn are the easier to program in too)

You can learn a lot about programming from forums were smart programmers hang out (eg Proggit and Hacker News), read the top articles and ask your questions there; you will get in-depth answers.

The biggest secret:

You will become a good programmer only by – programming a lot. Many students don’t program outside their labs and college projects, and they never become good programmers. Try to do some coding in your free time. Try to solve Project Euler problems in your favorite programming language, or try to build a website of your own.

Having said all these here are some specific tips. These may or may not work in your case:

  • Enterprise development: Learning Java is a good. Java is used in many software shops as the primary language. It will take you a long way in most situations. At the same time, I have some objections with using the language from a startup programmer point of view. Read the discussions here too.
  • Web development: Stay away from PHP. It is a badly designed language. Instead, learn Django or Ruby on Rails. If you prefer Microsoft technologies use ASP.Net MVC.
  • Windows development: Learn C# (and probably not Visual Basic). For running C# applications in Linux, check out the Mono project.
  • There are many excellent programming tools or IDEs you should try to master. Eclipse is a popular IDE. Notepad++ is a popular code editor.
  • You should be learn about stuff like Regular Expressions, Unicode, Information Security etc. (I cannot even attempt to list all the topics)
  • Try to keep up with new technologies. You don’t have to learn all the latest languages, but try to have an awareness of the latest trends in programming. For example, web development, mobile phone development etc are areas where lots of innovations are happening. You don’t want to miss any of those if you are intersted in those fields. Then again, the forums I mentioned above will come handy.
  • Learning just one language is not very good idea. Learning a lot of languages is also not a good idea. Strike a balance between the two extremes and try to be good in at least 2-3 different programming languages in different fields. (As explained earlier, different languages are used to solve different types of problems)

Good luck!

67 responses so far

  • I think this not easy to learn php if you not working whit your heart and your brain

  • php is simple language it is easy to learn but if you want to go in deep on it,it will take more time on it

  • Suhail says:

    i am studying BCA.i studeid c,c++ only.but i am going to joing .not courses.I am happy after reading your article.i done somany simple programs m self in c.i am trying to increase my software develpoment skill and ideas…………
    if u have more article or tips to become as a good software programmer…

    thank you

    • Alieu Mammy says:

      I want to be a good programer but don’t have the facilities like text books,computer and software/web address.I’m a university student reading data processing and net working.i need help to be a good IT student.

  • Jawaad says:

    “Stay away from PHP. It is a badly designed language. ” Can you please tell me how you came to this conclusion?

  • Joseph says:

    “Stay away from PHP. It is a badly designed language. ” Can you please tell me how you came to this conclusion?
    I would like to know that as well.

  • Jerry says:

    “Stay away from PHP. It is a badly designed language. ”
    Shocked to read that, you were making reasonable sense until you wrote that

  • Stunker says:

    PHP is too buggy and has so many redundant functions it makes me wanna hurl, gurl.

  • Sajjad says:

    If plumber has not new tools he can’t solve right time problem to customer. so business customers need attraction with Interface so away from PHP is not a future…

    Microsoft .NET Framework Best Language Tools For Switch to .NET Wide Arrange Libraries, you can make best App Interface Great !…

    I like it Microsoft .NET Framework Since Developing 5 Years nice !

  • Razeen says:

    hi, what u think about javaME ?
    is that good ? i’m a javaSE student !
    I wanna an advise

  • Will says:

    Try out Ubercode – it’s really easy to use and includes the developer environment, sample programs, online help etc. When you’ve finished your program, it can package it up into an installer for you.

    OK I’m biased as I wrote it :)

  • umashankar says:

    a very nice information for the beginning programmers…
    it is reall knowledgable.:)

  • Fraser says:

    Great post! But, being new to programming, what I’d like to know is which language to start with? Which language will help me develop the basic skills needed to effective learn and use other languages?

  • RUBEL says:

    I can’t be agree with u,cause PHP has raised my interest in programming language.I can’t leave it. Thanks..

  • A person says:

    I think that you should use the AppleScript language if you have mac. It is one of the least complicated languages there are. I just made a script on there that let’s your mac check for updates at a certain time and then instal them . And also it is just like telling your computer what to do. E.g “tell application “Script Editor” to open.

  • Igor says:

    As a beginner i started learning Perl. It is quite complicated ( for beginner ), but, I think it is going to be easier to learn other programming languages . My plane is to learn these languages : C++, PHP, Java/Javascript.

  • majed says:

    hi there .it’s really really nice article . it helps me a lot

    but … come on man what about PHP ?? i am in deed in love with it.
    and i am working with it very well .
    it’s enough to know that WordPress , drupal and facebook used PHP

    thank you for all , and i will start following your site

  • well a person can learn any language depending upon the field he choose like you also said. if one wants to learn any language one should have interest in learning language no matters which language one chooses to learn. Many languages are there to learn it’s up to you what you choose according to your competence and yes demand of the market. you need to learn alteast 2 or 3 languages to work in technology field.

  • Krupa says:

    Hey there,

    Really nice article… it encouraged me and give a way to think and re-think… about my career…

    Can you please guide me about possible latest technologies with ASP.NET?? I have around 3 years of experience with Microsoft Technologies like ASP, ASP.NET… and now want to re-start my career after a year… so want to learn something new before joining a job…

    Thanks…

    – Krupa…

  • justpassingby says:

    “STAY AWAY FROM PHP?”….

    Are you kidding asshole…. PHP is way more FAAAST ,RELIABLE,POPULAR etc. than your crappy asp …obviously u are fan of bill gate$

    and btw….do you know what scripting does facebook use on their front-end ?…
    (whispering)..its “*P-H-P*” dumb…

    well im not that fan of php …but i see php is more brilliant when it comes to web development than any server side scripting
    and asp is just another fail masterpiece of microsoft…

Leave a Reply