If you are on the path to Linux Mastery, surely you will understand that computer science and programming is a core part of this. So the question is, which language or languages should you learn in order to propel yourself forward in your career and deepen your understanding of the Linux world?
To start, the Linux kernel is written in C. So at first look it may seem like a given that you would learn it. However, as a SysAdmin you may need an understanding of multiple languages. And it may be that your job requires you to use Java or PHP more than C, for instance.
Where can I get reliable information on which languages to learn?
It helps to have a broad understanding of the typical application and use of the popular languages first. Chris Hawkes' "Top 10 Programming Languages to Learn for 2016" video is a good starting point. He talks about use-cases, industries, and some major shifts that are occurring at this time, and leaves you with a ranked list of relevant, modern languages.
Source: Chris Hawkes, https://www.youtube.com/watch?v=Z56GLRXxh88
Top 10 Programming Languages to Learn for 2016
- Java. For Android development and embedded systems. Many high-paying jobs for Java developers.
- Python. Good introductory language. An alternative to PHP and Perl. The Django web-framework is well-regarded. Industry: bioinformatics.
- C++. Low/Mid-level language. Standardized beginning with C++11. Many game/physics-engines use it.
- C#. Microsoft's .NET Framework. Gradually becoming open-sourced.
- Swift. Replaces Apple's Objective-C.
- Ruby. For web development. Ruby-on-Rails full stack. Gems are easy to install.
- PHP. For web development. It powers WordPress and many other blogs. Overtook Perl's position from the early web.
- Go. Created by Google. A low-level, verbose language with garbarge collection.
- C. A ubiquitous, fast, verbose, low-level language. Used in many Linux applications.
Java he places second because of its importance to Android and Embedded Devices.
Python, which you are likely to hear echoed as the "best first language to learn" by many more people than Chris here, has a well-regarded web framework (Django), a number of notable success stories (Disqus, Instagram, Pinterest, Gmail, YouTube), and a great future in industry (in bioinformatics). It is considered easy to learn and is being taught in many top university CS programs as a first language now. It takes the third position in Chris' list.
If you're into gaming, writing game applications, or need to work with physics-based modelling, you should go with C++. It also is a fast language with more-and-more standardization taking place all the time. This makes it more welcoming to newcomers than C.
C# and the .NET Framework is Microsoft's purview. Let's ignore C#.
Swift, which is replacing Objective-C, is Apple's purview. It represents the "major shift" in this list. But let's ignore Swift, too, as we're focused on relevancy to careers in Linux.
Number seven is Ruby. Another easy-to-learn language, with a lot of extensibility via Ruby "gems". Ruby-on-Rails is the Ruby full-stack for the web. This is another language which you may hear touted as the "best first language to learn". As far as I can tell, Ruby is more of a binary variable in searching for jobs, however. Either it's a Ruby shop you're dealing with, in which case it's a necessity — at least in terms of having a basic understanding as a SysAdmin, that is — or they don't use Ruby at all, in which case you can safely ignore it.
PHP is still important on the web. WordPress and other blogging platforms, like Drupal, are a primary reason. It takes the number eight spot.
Go is a newcomer. Created by Google, it does Garbage Collection, whereas C doesn't. Go is a verbose back-end language.
C is number ten on the list. It is a low-level language and is important to an in-depth understanding of the various components of the Linux kernel. C is also considered by many to be the lingua franca of cryptography. So if you're interested in security and encryption, C would be a good choice.
Programming Languages and Average Salaries
Average developer salaries by programming language is an interesting metric to consider. Salary figures are neither reliable guarantees of future earnings nor representative of the strengths of any given language. Ruby, which is largely limited to the web, is a cross-platform general-purpose scripting language. It can do many things that C can, and some that C cannot. But it is not these qualities that make it so that knowing Ruby will net you some $20,000 more per year than C. It's simply, and arbitrarily, the most in-demand/highly-paid language skill at this time. With that said, let's look at the rest of the list.
Programming Languages and Salaries Top 10 List
- Ruby $109,460
- Python $100,717
- Java $94,908
- C++ $93,502
- C $90,134
- R $90,055
- C# $89,074
- Visual Basic $85,962
- SQL $85,511
Source: http://qz.com/298635/these-programming-languages-will-earn-you-the-most-money/ (2014)
NOTE: I've removed Objective-C from this list, as it is quickly being overtaken by Swift, Apple's new language.
Ruby is number one. If you want to work in a Ruby shop, you'll probably make plenty of money.
Number two is Python. The Python web frameworks will continue to get fleshed out as time goes on. Bioinformatics is a growing field and Python takes the cake here as well. As the industry grows I expect Python salaries to keep suit. These two trends could eventually bump Python up to the top salary spot in a few years.
Java is everywhere and more recently it is everything in terms of Android. It makes sense to me that Java developers make nearly six figures on average. Not a pittance.
What are these profitable languages best at?
- Python is fairly well-suited to the web, and very versatile on the back-end.
- C++, C, and Java are all good low-to-mid-level programming languages (back-end).
- Java is also best for Android Apps and Embedded Devices.
How to make use of this Salary data?
STEP 1A: It seems to me that if you like the idea of being a Ruby-guy-or-gal, and want to live in Linux Land, you should learn Ruby and C, or Ruby and C++.
STEP 1B: Otherwise, I would recommend a combination of two of the following: C, C++, and Python.
STEP 3: Profit!
I'm not ready to give my Final Answer yet...
Before you give your final answer and set off on your path to becoming a Kernel Master and a Polyglot, I think it prudent to consider a third source of important insights: The TIOBE Index of Programming Language Popularity.
Below you will see the Top 10 most popular programming languages, along with some useful metrics such as rating percentages, position last year, and rating percent change.
The TIOBE Index — December 2015
|Dec 2015||Dec 2014||Language||Ratings||Change|
|7||9||Visual Basic .NET||2.390%||+0.16%|
Java and C have been in the top two positions since 2001. This year saw monumental growth for Java. Java and C are surely two good bets for any Linux Lover to learn. They will be useful and highly-profitable for you.
C++ has dropped in popularity fairly steadily since 2004, when it momentarily nearly outshone C. Depending on your industry of choice, this may or may not be a good bet for you as a Linux Lover. Of course, many important open-source programs are written in C++... But it may be the better bet only if you plan to work in a game-design shop or a shop in which physical-modelling is central to the company's profitability.
How might these rankings change in the next few years?
I expect that by December 2016, based on the trends I've cited and the past performance of the languages in the TIOBE Index, the following will happen:
1) Ruby (currently #10) will continue to rise, trading places with Perl (#9).
3) C++ ratings will improve relative to C, but not enough for it to take the number two spot.
4) Java will still be number one.
5) Swift, Apple's new language, will jump from 14th place to 11th place, usurping Assembly Language (#11), Visual Basic (#12), and Delphi/Object Pascal (#13), but losing out to Perl (just barely) for the year.
I would expect the TIOBE Top 11 in 2016 to look like this:
- Visual Basic .NET
By 2017, I would expect Swift to overtake Perl and maybe even Ruby. But I'm not going to concern myself with the language of iOS-land, for I am a Linux Lover.
On now to some heuristics...
How can you choose which languages to learn?
In terms of highest developer salaries, Ruby is the best for scripting, followed by Python.
In terms of all-around versatility in back-end programming languages, C is King in Linux. Java, while strange in that it mainly dominates the Android and Embedded Devices markets, is nevertheless a valuable and useful language for Linux administrators to know. It is number two in my estimation for this category. C++, while also versatile, and despite being easier for beginners to learn, takes third place. For Linux folks C is essential. Additionally, C serves as a great foundation for learning other languages such as C++, MATLAB, and Objective-C.
In terms of all-around popularity in the TIOBE Index, Java is number one, followed by C, C++, and Python.
There we have it, five categories and five winners:
1) DEVELOPER SALARIES: Ruby
2) SCRIPTING: Python
3) BACK-END: C
5) OVERALL POPULARITY: Java
My Final Answer
My final answer is: C plus Python. I feel this strikes a good balance between hard- and easy-to-learn languages, lower-level and higher-level languages, and overall high versatility in both languages.
NOTE: Your answer may vary.
I could go with Ruby (and C) and perhaps make $5,000 or $10,000 more per year, but there are no guarantees in life. (Except that you can only use Ruby in a Ruby shop. That is a guarantee.)
I need my own formula. Help me decide!
It's simple! Just follow these steps:
STEP 1 — Choose between C (good for Linux, cryptography) or C++ (good for gaming, 3D modeling).
STEP 2 — Choose between Ruby (Ruby web development) and Python (various).
If you followed the steps correctly, you should have arrived at one of the following 12 permutations:
- C, Ruby
- C, Python
- C++, Ruby
- C++, Python
- C, Ruby, Java
- C, Python, Java
- C++, Ruby, Java
- C++, Python, Java
Ultimately, you will have to weigh the costs and benefits of each language you consider adding to your repertoire. Some will earn you money; others will lead you to new insights and conceptual understandings; still others will confuse and frustrate you while begging the question: Why would you ever use X-language here? You may not ever uncover the answer to this last question, but if you can help solve the problem you'll likely get something much more important than the feeling of having won an argument: You'll get the pride of having helped your team, of course! (Not to mention job security.)
Best of luck to you on your path to Mastery.
Speaking of which, I've placed a few sites below where you can start learning how to program.
- Learn Python The Hard Way - Free Online eBook/Tutorial
- Python - Free 13-hour Codecademy.com course.
- A Byte of Python - Free Online eBook/Tutorial
- An Introduction to Interactive Programming in Python (Part 1) - Free Coursera beginner's course from Rice University.
- Automate the Boring Stuff with Python: Practical Programming for Total Beginners, by Al Sweigart - Learn to use Python to write simple, time-saving scripts - Geared towards beginners.
- Learn Ruby The Hard Way - Free Online eBook/Tutorial
- Ruby - Free 9-hour Codecademy.com course.
- Try Ruby - Codeschool.com free sample course.
- Try Ruby - Tryruby.com 15-minute online interactive tutorial.
- Ruby in Twenty Minutes - Ruby-lang.org Quickstart Tutorial.
- Learn C The Hard Way - Free Online eBook/Tutorial. NOTE: You should have completed either the Python or Ruby course from this series before starting this course.
- Practical Programming in C - MIT Open CourseWare - 23 hours of lecture, 9 hours of labs. Prerequisite: 6.00SC Introduction to Computer Science and Programming, or another similar course.
- Programming A Chess Engine in C - YouTube video tutorial series.
- Learn Java - Free 4-hour Codecademy.com course.
- Learn Java The Hard Way - Free Online ebook/Tutorial.
- CodingBat Java - Free online Java practice problems and interactive tutorial.
- Programming by Doing - Free online Java practice problems.
- Jumping into C++, by Alex Allain - A book and eBook geared towards people with no coding experience.
- Up and Running with C++ - Lynda.com course - 2h36m of video - Meant for Beginners. NOTE: A Basic account, which you'll need to access this course, will cost you about $20/month.
- Introduction to C++ - MIT Open CourseWare - 12 hours of lecture, 12 hours of labs - No prerequisites.
- Cambridge University's Comprehensive C++ Learning Resources List.