E
Eric Hansen
Guest
In the first article, I wrote about learning a programming language. But, there’s a lot more to the topic than was stated; this is mainly due to the fact that there are so many languages out there and no de-facto one to learn. There’s some companies that will want you to know J2EE (enterprise-level Java), some Ruby or Python, then there’s also Perl...and between those there’s also R, PHP, SQL, NoSQL syntax (varies on server platform), etc… I think you get the point.
While this won’t cover all, or even most or half, I want to focus on the ones I’ve primarily seen, and some pointers on where to start.
Python
I made this first because its my favorite language. Its also one that will greatly spoil you if you switch to something more definition-based such as Java or C/C++, where you have to declare what type a variable is.
First thing you’ll want to do is learn about virtualenv for Python 2 (Python 3 has its own system), as it will save you a lot of headaches. I covered this in another post as well, but essentially you’ll be making mini-virtual machines of sorts for your Python projects, so dependencies don’t mangle with each other.
This one is tough because Python has a lot of uses both as web and regular application development. These days a lot of the grunt work seems to be web, but there’s still a lot of people who use it for system as well (i.e.: Supervisor). The great thing is that overall the techniques will translate well between the two, so you’ll be spending more time working with frameworks rather than trying to decide if a staticmethod or classmethod should be called.
PHP
I’ve used this for a very, very long time. Right now I mostly stick with it for clients who want work done for Blesta, it was my go to before I discovered Python.
PHP never really took off from my experience as a system language, unlike Python and Perl. PHP has basically been solely focused on web applications, and it does excel at that.
Getting started with this language is tough, because it imposes some standards that mix Python and C++, like not having to define variable types but being able to have code formatted almost any way you like it.
You’ll most likely be better off learning how to work PEAR (PHP’s package/module system) to make your tasks easier, but there’s also a lot of people who provide code that does the same without the hassle of PEAR’s sometimes-flakiness. Starting in this language would be viable if you’re looking for a strictly web application position, as its not majorly popular on the sysadmin side of things due to its intended web nature.
Shell
Ah, shell. How you have grown yet stayed the same for oh so many years.
My gripe with this is that there are so many subsets of the ‘shell’ language (Bash, Ksh, Zsh, Csh, Dash, etc…) that while learning some translates well, its like trying to learn Latin when all you know is English (you’re going to have a bad time).
This is a major skill set to have though for the sysadmins out there. Shell and Perl are the de-facto languages to at least understand if you want to be efficient at your job. This is mostly due to the nature sysadmins tend to have, which is being lazy. If you can script something out to do a task in 1 minute that usually takes 15, why not? Most of those are done in shell and Perl (though, Python and Ruby are growing there too).
With that said, Bash is the technical de-facto subset to learn. While I feel Zsh is more powerful, Bash is more universally used, and gives you the best fundamentals to translate between others.
Ruby
Now we’re getting to the languages I’m not too familiar with...with this being the least familiar...but I do know enough to give some pointers.
This one is basically the step-child of scripting languages. While it can be used as a sysadmin tool, its true pride and power comes in the form of web applications, quite like PHP. As such, if you want to migrate from PHP to a more strict syntax, the move from PHP to Ruby would probably be the most beneficial.route if you want to learn this language.
Perl
The granddaddy of all languages, Perl. Once a herald of the ages, now a fading memory in a lot of peoples’ toolkits.
This language originally started out as an efficient language to parse text files (logs mostly), and has grown since. Before, it used to be if you didn’t know Perl, you were going to be hard-pressed to find a job. This is also the language that really put regex on the map, as it made parsing thousands of lines of files very effortless.
While I don’t see a lot of reason to learn the in’s and out’s of this language, I can see the benefit of knowing regex from its maker, since it is rather likely you’ll be using it a lot in the other languages (all of which I’ve mentioned support this).
JavaScript
Normally, I wouldn’t even mention this language, as I used to loathe it. However, if you want to venture into web application development this is one of those “need to know” languages. Luckily, with the invention of Node.js things can be extended to sysadmin tools as well (though, not sure how much if any exist currently).
In learning JavaScript itself the big player in terms of wrappers is jQuery, so there’s the ever growing need for that experience. Luckily, there’s a lot of documentation, and the official documentation is extremely helpful as well.
If you’re wanting to learn Node.js, there’s no dire need to learn Node.js before or jQuery or vice-versa, since they both offer strengths and weaknesses. Node.js also isn’t as popular around where I live, so I can’t speak on what a lot of people are looking for.
Conclusion
Your mileage very well could vary, as I tend to pick up on new things pretty fast while others it might take longer. But, the more time you devote to programming, the better off you’ll be when it comes to interviews that involve it.
The biggest piece of advice that I can give for learning any language, not just the ones given above, is to think of something you want to make and then do it. Whether its already been done before, that doesn’t matter. I.e.: I learned Python by making a backup service because I was wanting to offer it. I learned PHP by building a website to store/display poems I’ve written. I picked up Java to write an Android app that serviced notifications.
Do I think you should do the standard game programmer trap and aim for the next AAA title? No, but in developing something you would enjoy using, you learn quicker the techniques and hurdles that the language has.
While this won’t cover all, or even most or half, I want to focus on the ones I’ve primarily seen, and some pointers on where to start.
Python
I made this first because its my favorite language. Its also one that will greatly spoil you if you switch to something more definition-based such as Java or C/C++, where you have to declare what type a variable is.
First thing you’ll want to do is learn about virtualenv for Python 2 (Python 3 has its own system), as it will save you a lot of headaches. I covered this in another post as well, but essentially you’ll be making mini-virtual machines of sorts for your Python projects, so dependencies don’t mangle with each other.
This one is tough because Python has a lot of uses both as web and regular application development. These days a lot of the grunt work seems to be web, but there’s still a lot of people who use it for system as well (i.e.: Supervisor). The great thing is that overall the techniques will translate well between the two, so you’ll be spending more time working with frameworks rather than trying to decide if a staticmethod or classmethod should be called.
PHP
I’ve used this for a very, very long time. Right now I mostly stick with it for clients who want work done for Blesta, it was my go to before I discovered Python.
PHP never really took off from my experience as a system language, unlike Python and Perl. PHP has basically been solely focused on web applications, and it does excel at that.
Getting started with this language is tough, because it imposes some standards that mix Python and C++, like not having to define variable types but being able to have code formatted almost any way you like it.
You’ll most likely be better off learning how to work PEAR (PHP’s package/module system) to make your tasks easier, but there’s also a lot of people who provide code that does the same without the hassle of PEAR’s sometimes-flakiness. Starting in this language would be viable if you’re looking for a strictly web application position, as its not majorly popular on the sysadmin side of things due to its intended web nature.
Shell
Ah, shell. How you have grown yet stayed the same for oh so many years.
My gripe with this is that there are so many subsets of the ‘shell’ language (Bash, Ksh, Zsh, Csh, Dash, etc…) that while learning some translates well, its like trying to learn Latin when all you know is English (you’re going to have a bad time).
This is a major skill set to have though for the sysadmins out there. Shell and Perl are the de-facto languages to at least understand if you want to be efficient at your job. This is mostly due to the nature sysadmins tend to have, which is being lazy. If you can script something out to do a task in 1 minute that usually takes 15, why not? Most of those are done in shell and Perl (though, Python and Ruby are growing there too).
With that said, Bash is the technical de-facto subset to learn. While I feel Zsh is more powerful, Bash is more universally used, and gives you the best fundamentals to translate between others.
Ruby
Now we’re getting to the languages I’m not too familiar with...with this being the least familiar...but I do know enough to give some pointers.
This one is basically the step-child of scripting languages. While it can be used as a sysadmin tool, its true pride and power comes in the form of web applications, quite like PHP. As such, if you want to migrate from PHP to a more strict syntax, the move from PHP to Ruby would probably be the most beneficial.route if you want to learn this language.
Perl
The granddaddy of all languages, Perl. Once a herald of the ages, now a fading memory in a lot of peoples’ toolkits.
This language originally started out as an efficient language to parse text files (logs mostly), and has grown since. Before, it used to be if you didn’t know Perl, you were going to be hard-pressed to find a job. This is also the language that really put regex on the map, as it made parsing thousands of lines of files very effortless.
While I don’t see a lot of reason to learn the in’s and out’s of this language, I can see the benefit of knowing regex from its maker, since it is rather likely you’ll be using it a lot in the other languages (all of which I’ve mentioned support this).
JavaScript
Normally, I wouldn’t even mention this language, as I used to loathe it. However, if you want to venture into web application development this is one of those “need to know” languages. Luckily, with the invention of Node.js things can be extended to sysadmin tools as well (though, not sure how much if any exist currently).
In learning JavaScript itself the big player in terms of wrappers is jQuery, so there’s the ever growing need for that experience. Luckily, there’s a lot of documentation, and the official documentation is extremely helpful as well.
If you’re wanting to learn Node.js, there’s no dire need to learn Node.js before or jQuery or vice-versa, since they both offer strengths and weaknesses. Node.js also isn’t as popular around where I live, so I can’t speak on what a lot of people are looking for.
Conclusion
Your mileage very well could vary, as I tend to pick up on new things pretty fast while others it might take longer. But, the more time you devote to programming, the better off you’ll be when it comes to interviews that involve it.
The biggest piece of advice that I can give for learning any language, not just the ones given above, is to think of something you want to make and then do it. Whether its already been done before, that doesn’t matter. I.e.: I learned Python by making a backup service because I was wanting to offer it. I learned PHP by building a website to store/display poems I’ve written. I picked up Java to write an Android app that serviced notifications.
Do I think you should do the standard game programmer trap and aim for the next AAA title? No, but in developing something you would enjoy using, you learn quicker the techniques and hurdles that the language has.