What Programming Language Should I Learn?

As I do my professional and personal work, I am always looking for the best tool for the job. In software development, there are several programming languages that can be used for a wide variety of reasons. I am often asked by people new to software development what is the best language to learn. They get confused when I ask them what they plan on doing. The reason is that people think there is going to be a best language for everything. However, everyone knows that there is no silver bullet. On the other hand, there are some languages which are better suited or more widely used in specific areas. So, given that idea, I came up with a list.

Enterprise Software DevelopmentJava is typically used in this space as people are moving many administrative applications to an intranet.

Windows DevelopmentC# should be used for any Windows development, this includes anything interface with the Microsoft Office Suite. Don’t tell me about POI for Java, I have used it, but the native libraries kick POI’s ass.

Rapid web prototyping and anything WordPressPHP is really good for rapid prototyping what a web site should act like. It may even qualify as v1.0 for your site. It may not be a good long term solution and there are better options for large-scale development. It is also the main language for anything related to WordPress.

Web Prototype with a backbonePython has quickly gained acceptance as the “next step” after PHP. Many current web applications use Python extensively. Adoption will continue as more services natively support Python like Google’s AppEngine.

General Web Development(X)HTML, CSS and Javascript must be in your toolbox for any significant web development. If you try to remain standards compliant (which you should) then you need to look at the XHTML standards.

Data IntegrationXML and JSON are the main data interchange formats on the web and in corporate development. With XML, there are various syndication formats (likely the subject of another post) and other business format standards to review.

DatabasesSQL is critical to almost any application. If you learn standard SQL, then you can translate this to almost any database product on the market especially the popular engines like Microsoft SQLServer, Oracle, DB2, MySQL.

Toolbox – Every programmer should be able to do more than just program in one language. In addition, there are many scripting tools that can be part of your toolbox which can make you extra productive. Cygwin is a Unix shell that you can install on Windows, and I can not live without it. Unix scripting is very powerful when dealing with batch processing of files or even just interacting with the file system. Perl, the Pathetically Eclectic Rubbish Lister, is another language that can be used for web development, but it really shines when dealing with file and text processing.

I know I have ignored various tools and languages, but this is really just a starting point. In software development, it is always helpful to keep learning new things and new concepts. If you really want to stretch your mind, start working in Artificial Intelligence and programming in LISP, or do some logic programming in Prolog. If you feel really adventurous take a look at Standard ML. I am not sure what it is really useful for, but it is a completely different language than most.

Reblog this post [with Zemanta]

152 thoughts on “What Programming Language Should I Learn?

  1. This article was very informative. I switched to mac from PC a year a go for obvious reasons, (Vista gives me bad dreams). Unfortunately I had to leave behind my favorite scripting language, AutoIt. It is free and open source. Every admin should at least make sure and give this a hard look. It has the quickest dev to distribution time of anything I’ve seen. It is interpreted, so it is too slow for any real data crunching. However, if you need a quick fix on a windows system that is ready as fast as you can figure out the logic; AutoIt is what I would use. Check it out. Heck, I’ve seen it on Military computers.

    http://www.hiddensoft.com

    And thanks Edida for mentioning REALBasic. I think I’ll check that out.

    Like

  2. FreeBASIC would be solid for the total newbie as it is cross-platform (Dos, Win32, Linux, Xbox, with bsd and macos pending). It can make solid useage of the win32 api, but also gtk/sdl/opengl/etc. It can use old school basic syntax or even ‘c’ concepts such as pointers, structures, constructors, destructors, and inline asm. output can be exe, dll, asm script, with output to c pending. Additionally win32 form apps must have a message pump made from scratch rather than having the language do it for you (cough vb cough).. ^_^

    Like

  3. I break it down into a few catagories:

    1) Simple website ~ php
    2) Simple website with backend ~ php + pgsql
    3) Rapid prototyping of a concept ~ python +sqlite
    4) Industrial strength website ~ php + Oracle
    5) Industrial apps ~ Java + Oracle

    I actually do not recommend mysql to any of my clients nor do I use it. If it’s small, then you want sqlite; backups in sqlite is simple, just copy the file. If you need an opensource solution that’s a bit beefy, pgsql almost rivals Oracle. If you need industrial strength, then Oracle.

    php for web, python for everything but the largest of enterprise stuff.

    I can RAD a python+sqlite in about half a day; I’d say in prototyping, me+python+sqlite+2 days is equal to 16 people+java+oracle. Yes, it’s that big of a difference.

    Like

  4. When will people learn that HTML and CSS are not programing languages. They are not object oriented and lack any basic underlining features of actual programing languages such as For loops, do-whiles, if statements, etc. They are styling code to get something to look a certain way, not to perform functions. (Even though JavaScript is kind of makes it as a programing language)

    Like

  5. I don’t think there is a catch all language any more. No one have the luxury of saying “I’m an X programmer, I don’t do Y”. The fact of the matter is you need to know them all (or at least as many as you can).

    So take a step back and really understand the principles or programming, object programming, design patterns, etc. Learn all about the the architectures and frameworks available to you. Then you can turn your hand to any language.

    I work mostly in Microsoft Technologies (it pays the bills). But I also do Java, SQL, XML, HTML, JS, CSS, JSON.. you name I will do it. If I don’t know it, I will learn it.

    That is what makes a good developer. Not what you know. Its knowing what you don’t know, and learning it.

    Like

  6. Once again, I read an article like this and commentors want to bash ColdFusion. Not a surprise really, happens all the time.

    I ‘accidentally’ put my resume up on Dice in November, and I’ve gotten 1 or 2 calls each day for a legitimate job opening for a ColdFusion programmer. (I also get a ton of headhunter calls, but those don’t count.)

    So my suggestion to everyone else is DON’T learn ColdFusion. As the rest of the world has run to PHP/VB.Net, there has been a huge gap left in the pool of ColdFusion programmers.

    Makes it nice for me that I can pick and choose between jobs while other people are getting laid off!

    Like

  7. FYI, Standard ML’s major schtick is that mathematically proving that code written in it correct is really easy compared to other languages. As far as I know, it’s mostly used for research into automated theorem proving – if you want to learn a language like it but a bit more useful, you should probably look into other purely functional languages like Erlang or Haskell. (Possibly OCAML too – I’m not certain.)

    Like

  8. RealBasic is pretty bloated. The executables it makes are huge and slow, as each exe is bundled with the framework.
    PureBasic however, compiles native to MacOSX, Windows, and Linux, and the exeuctables are tiny and very fast. http://www.purebasic.com

    Like

  9. This is a great article that underscores the breath of knowledge needed to be a successful professional.

    I think an important point is that the question, “What programming language should I learn?” cannot be definitively answered, since most programmers will learn many languages during their career.

    The true professional knows that understanding the foundational ideas of programming and programming language theory makes learning the next language easier.

    The secret to a lucrative programming career is to learn the next language.

    Like

  10. QUESTION for future career:

    I’ve been trying to get on the Portal team here at work. They recommend learning basics like PHP.

    I’m hoping that as I go through college I’ll have some website development experience under my belt, as I see that sort of work translates well to whereever I may choose to transfer.

    I was thinking of learning C (for the core fundamentals of programming) and PHP or something like CSS (for actual page development).

    My goal is web development (for visual aspect, but still able to offer background programming also). I just want to be useful on a portal team.

    Is this a wise decision?

    Like

  11. C++ is a better language to know than C#. you can do everything you can do in C# with C++ but you can do a lot more too. C# should be used if you know you can save time and money by using the features that come available with it namely the .NET framework for Windows and XNA.

    C++ programmers created C# so a good understanding of C++ will give you a good understanding of C#.

    In my environment we program to VxWorks OS with C++.

    Like

  12. If you want to learn databases, saying “learn SQL” is only useful for simple queries. There are a lot of variations to SQL dialects.

    If you’re just getting started, learn on a database that implements most of the SQL standard. If you’re on windows this means SQL Server and not Access. If you’re going the open source route this means PostgreSQL and not MySQL.

    Why PostgreSQL? Because it follows the SQL standard carefully and the knowledge you learn will also be applicable to other databases. MySQL is a good database, and there are times it is the more appropriate tool for the job, but when it comes to learning, PostgreSQL is your best choice.

    The reason for this is that MySQL, in the name of speed and releasing a package, have sometimes taken shortcuts. These shortcuts means that you don’t have to be as careful about the format your data is in, because MySQL will change your data to fit the storage method. Other databases will instead reject data that is malformed, rather than trying their best to store it.

    Additionally, there is a lot of functionality that MySQL does not have (or did not have until recently.) It’s easy enough to replicate this functionality by other means most of the time, but by not being there in the first place a MySQL user has no idea these features are available when they move to other systems. By learning on a more complete system you will have a larger toolbox.

    Like

  13. “Windows Development – C# should be used for any Windows development”

    Sorry, generalizations in most cases are bad, and this is one of them. In the real world, I see 10 times as much VB.NET code as I do C#.NET. The two languages have feature parity and use the exact same runtime libraries. MS has made and promoted them as equals in the managed code space. If you are looking to get a job you should learn BOTH. You can argue C# is more like other languages, but you’ll see more VB code in the wild.

    Like

  14. “If you try to remain standards compliant (which you should) then you need to look at the XHTML standards.”

    I disagree. XHTML offers no benefit over HTML except in rare cases. (And if you don’t need to cite sources, then neither do I.)

    There are different flavors of the HTML and XHTML standards: Strict, Transitional, and Frameset. If you want to remain standards compliant, learn to validate the Strict doctype for HTML. Your code will be cleaner and tighter than using the Transitional XHTML doctype I see so often.

    More info:
    http://www.alistapart.com/stories/doctype/

    Like

  15. OK, tell me this…WHY should C# be used for all Windows development? You make a bunch of ridiculous “fire and forget” statements like this in your article. How about a little explanation behind your assertions? And “because it’s better” won’t cut it.

    Like

  16. master SQL. For every 1 decent database guy there are dozens of applicaiton programers. Data lasts for years, applications come and go with the wind. The database is the foundation the app is built on. SQL Rocks!

    Like

  17. Which language you learn is not relevant.

    Learn a language – pick one.
    Learn it well.
    Learn it REALLY well.
    Understand the principals of programming, data structures, and software development in general.

    No matter what language you learn, you WILL have to learn others. Over the last 25 years, I have programmed professionally in about 15 different languages. I have “played around” with another 10-15.

    Learn the fundamentals, learn the craft, and learn the science. And learn how to learn, because you will have to keep on learning for your entire career (if you want to stay employed).

    Like

  18. Learning C/C++ opens doors to most of other languages – Java, Python, PHP, ActionScript, you name it. Once you program in C/C++ you know the basic structures and syntax of most of the other languages and, so, learning other languages becomes easy.

    Like

  19. If you are building complex web applications you should definitely take a look at Curl, http://www.curl.com. The Curl language came out of an MIT research project in the late 1990s and combines rich text formatting (like HTML), easy presentation scripting (like JavaScript)and
    full-featured object-oriented programming (like C++, C#, Java).

    Like

  20. I am attempting to start-up a SaaS company. I
    have been doing a lot of research and am struggling a bit to answer a fundamental technical question. That is what should I use as our primary development language?

    Code: We are starting from scratch as far as developed code. Zero legacy applications. Most of the developers I would hire have Java experience. I anticipate starting
    coding in 3 months.

    Application: It is not your typical SFA/CRM application i.e. database and a screen. Think of it more along the lines of a high volume transaction system like an ad management system or even an ecommerce web site. The
    process flow for the transactions would be: Receive request, retrieve data, data processing, determine result, and send result back to requester. Data would come from
    anywhere — web services, database, or contextual data. Of course configuration would be done via web pages by business users, but this would be done at design time, not run time. Server response times < 100ms.

    Ecosystem: This solution would commonly integrated with content management systems and databases.

    SaaS. The solution will need to support two deployment options: via Cloud (like Amazon) or on-premise (maybe LAMP).

    If this were 5 years ago, it would be easy. I would choose Java/J2EE. Given the popularity of Ruby, Jruby seems to be the right choice. But then with Groovy being more tightly integrated with Java and JVM, maybe that is. I
    have read a lot about the JVM supporting multiple langaues i.e. Scala for multithreading. I am also considering using a
    DSL.

    Running on the JVM is of primary importance. I struggle to see any scenario where we would need to run on the CLR.

    Any thoughts or guidance would be helpful.

    Like

  21. With the rise of RIA (Rich Internet Applications) for both consumer and enterprise UI’s I would add Adobe Flex (MXML/ActionScript) to the list.
    More and more business applications (SAP, Oracle, IBM) use or support Flex for the front-end (especially for charting, rich visulization, interactive web UI). Since Flex applications run on the Flash runtime same code works consistently in all major browser on Windows, MacOS and Linux. Same code can even be deployed on the client using AIR.
    The demand for Flex developers is also very high right now.

    Like

  22. PHP is worth more than prototyping. Something must be right about PHP if Flickr, Digg and Engadget use it. Not scalable my ass.

    Like

  23. This article lost all credibility as soon as its pro-Python / anti-PHP personal bias was exposed. Bias like that has no place in articles that are supposed to teach others. The author can and should learn a lot from the comments here. Or at least if the author insists on pushing a bias they can provide evidence supporting that claim.

    Like

  24. I’m so sorry to read your PHP part.

    Many people made a lot of comments like this about PHP but they are so “last year” ! Most of them pretend they know how to code in PHP and claim their sooper-dev-skillz 10 minutes after their first “Hello World” but they have no idea about scalling, optimization, debugging, design patterns, unit tests, good practices…

    PHP (5+) is a complete programming language and you can get amazing results when coded/used in a good way, even on huge sites.

    Stop flaming against PHP like you’d do when it was PHP4.

    Like

  25. It seems to me that real advances in programing over the usual choices (Java, C#, C/C++, Basic(s), Pascal) are those found in pure, lazy functional languages, most notably Haskell.

    A few reasons for that:
    1. functions can’t have side-effects, so testing means worrying just about arguments, not the state of objects, global variables, …
    2. debugging means finding a function which produces wrong result for a valid input, and all that is already on stack
    3. there are no deadlocks and race conditions, since no data can be changed, thus FP languages already support multi-threaded execution out-of-the-box
    4. hot-code deployment on live systems is possible, that is upgrading while the thing is still working
    5. it’s possible to reason mathematically about FP program, that is you could actually prove your code is correct

    GHC Haskell is open-source implementation with various extensions, vast standard library, performance of compiled code on par with C/C++. It can be also run as byte-code from interactive shell, ghci. But, GHC Haskell is also a scripting language, meaning you could run it from ordinary terminal without compiling it first, either by runghc or by using usual shebang trick (by placing #! /usr/bin/env runghc in the very first line of your Haskell file). Only thing I didn’t found so far is how to embed/extend (scripting) GHC Haskell, into/from some other (compiled) program.

    Like

  26. I know there have been other comments about it –
    But dear god, C++!

    You don’t have a single language on that list which allows real memory, threads and handles managing.
    Sure, your programs will be all nice and fluffy, but some programs do have stricter performance requirements even on your (obviously un-utilized) quad core system.

    Like

  27. Seriously, I’d kill myself if I had to use Perl/Catalyst…for OS scripting I’d definitely go Django, Rails, or CakePHP (and variant frameworks for Python, Ruby, and PHP). There’s nothing wrong with Java or C# depending on what you want to do. I’d learn Erlang or Haskell any day over Standard ML…don’t waste your time.

    Like

  28. I still have a great deal of fondness for Forth, especially for microprocessor applications. It’s also very nice when you have control of the computer (e.g., a dedicated micro for some sort of process control or the like).

    Like

  29. C the backbone of everything is C

    as long as you’ve learned java… why not use ColdFusion for web prototyping, if you’re the Open Source type use Open BlueDragon or Railo (railo to be foss very soon, they say this month)

    Like

  30. Looking at some comment about REALbasic, RAD tool for Cross-Platform application, I found some database connectivity problem in them when I tried it and I don’t like basic as well.
    Anyone have an idea about generating C# on visual studio express, then we can subclass from IronPython, For windows. Glade Interface Builder with Python code generator for LINUX and X-Code+Cocoa+Python works for Mac OS X. Can use Twisted for network applications. RAD GUI on VSE,Cocoa,GIB and native for free, with just one language.

    Like

Comments are closed.