Many people who want to start learning programming ask me:
What language I should learn?
Which is the best programming language?
Which is the best choice for a beginner?
And I understand their ambiguity because at this moment there are over 1500 programming languages. Hopefully most of them are used only by their owners. For all those questions I often answer: Depends! Because there is no right answer.
Next logical question that I receive is: Depends of what?
There are few criteria that depends:
- Why I want to learn programming?
- What I want to do with programming?
- How easy is to learn that programming language?
- How many companies use that programming language?
Let's take them one by one.
Why I want to learn programming?
If you're interested to make some small apps for yourself, of course you'll need a language that can be very easy to learn and also to have a fast result without any focus on architecture, flexibility and so on. For this category I think a good choices can be: PHP ( for back end development - even if I'm not a big fan of php), JavaScript (for front end development, but also for back end development if you use nodejs), also Python can be a good choice.
If you want to work in a startup you can consider one of the languages mentioned above but also you can add: ruby (for back end development), Swift ( for iOS development), Java-Andriod (for Android development), Perl.
If you would like to work in a corporation you will need to know robust programming languages with a huge support form the owners of that languages. For the corporate world you should learn: Java ( it's the most used back end programming language), C# (it's also preferred by big companies for back end), C/C++ (it's a must if you'll need fast processing, low level programming).
What I want to do with programming?
Mobile development is splited in two worlds. Native development world, where which operating system has it's own programming language: Swift ( for iOS development), Java-Andriod (for Android development). Cross platform development world who has a translator for each operating system, but they share a lot of code. Here we can remind: Xamarin with C#, PhoneGap with JavaScript, Unity with C# (for gaming), etc
For front end development things are simple: the only option is the mix between HTML5, CSS3 and JavaScript. The tricky part is what framework to use, because in the last few years almost every day a new framework appears for JavaScript. But for beginners, I think jQuery is more that enough.
For back end development we have unlimited options: Java, C#, PHP , JavaScript, Ruby, etc
In IoT development, even if it's a new niche, you can use some programming languages like: C, Python, Java, Go, etc
How easy is to learn that programming language?
Not all programming languages have the same learning curve.
Some of them are very easy to learn but you cannot do so much with them or they are very specialized for a domain. Often these languages are called DSL (Domain Specific Language). Most known languages in this area are: SPSS (for statistics), SQL (for querying RDBMS), cURL (for querying No relational databases like ElasticSearch), ABAP (SAP programming), Scratch ( it's a new programming language made by MIT and it is only an educational programming language).
Some of them are easy to learn at the beginning but in order to master them you should invest a lot of time. In this category I can include PHP, JavaScript, C#.
Some of them are simply hard to be learned because they involve a lot of deep understanding of programming concepts. In this category I can put: C, C++, Java.
How many companies use that programming language?
Of course if you want to have a career in programming you should be interested in how many open positions are for that specific language. I use tiobe.com as a place to see what is the trend of programming languages. If your programming language will be in top for you it will be easier to change your job.
Conclusions
As you can see it's not so easy to decide what language is the best to start learning programming. Why? Because there are too many variable in the "wanna be programmer equation". For this reason, in order to give a proper answer to wanna be programmers I ask them the above questions to find their scope, motivation, desire, etc
But if you don't have any target and you just wanna start to learn programming I highly recommend you to start with Scratch! Because it is a programming language with educational purpose and it's very easy to keep your focus on understanding programming and its concepts without any concern in how correctly is the code written.
In a next article I'll write about Scratch.
Hmm...I've learned C++ in highschool and I used to think is the best so I'm biast. A very good analysis, what do you think the future will look like for programming languages? Is there any chance to have one for everything?
Yes, you can consider C as that good for anything. But if you use a specialized language your speed development will rich the sky.
It's very interesting approach to split decision to learn programming in a matrix with 4 dimensions. It's very comprehensive! How did you start to learn programming?
Heh. good question. Unfortunately I did not use in a proper way. I'll have a post about that. Keep in touch!
Your chart is showing Java. But you must know c and c++.
Why you think you need to know c and c++. If you made frontend development or business apps you definitely don't need neither c or c++. You'll need JavaScript , C#, Java.
Learning JavaScript across the whole development stack would be the way to go regarding web development in my opinion. Otherwise learning C++ is the best way to start. Everything else after learning that will seem like a walk in the park. :)
If you like to start in a hard way (also I do it in the hard way...), of course you can start with C or even C++, but you can start also with the easy way. With my students I prefer to do the easy way. If you start with C++ is like like you start to dig in the middle of the pit in the middle of the night. But with my students I prefer to learn ABC in a very abstract language, and then to dig deeper and deeper to understand how a low level programming language works.
I totally agree. I always start with basic JavaScript and work towards more and more complex issues.
Most people make the mistake of saying "I want to learn how to program!" and pick up a random programming language, and most of them end frustrated because they get stuck or don't understand something. I believe that the best way to choose a programming language is first, choosing a project that you want to do, then, search on the internet or ask for opinions about which language could be the best to create that project. That way, you can make sure that you're investing your time in learning something that will really help you in accomplishing your goal.
Yes, but before you choose the programming language you should have an answer for those 4 question from the article. Otherwise you can start to learn a programming language that does not help you to archive your goal. And that it's very frustrating. I test it on myself.
Nowadays people can choose to start with Python, which is quite an easy but also very powerful progamming language. Back in the days, C and C++ were the most common ones to start things off (pascal too, before dying).
If you want to develop apps for yourself or for startups Python can be a good start. in corporate area or for mobile it's not the best way, but it can be a choice.