Tuesday, June 30, 2015

What programming language should I learn?

If you're a beginning programmer thinking of making a career out of software engineering, congratulations! Now is a great time to learn computer programming, because there are so many to choose from, and so many exciting developments in the more modern languages. With all those possibilities, however, you may be wondering which language or languages you ought to learn. And the answer is: that depends on what you want to do.


Before I go into details, let me give you a caveat. I'm a self-taught programmer currently working in web application development using PHP. I'm also a language enthusiast, which means I've spent a lot of time learning lots of different languages, but not necessarily doing a ton of work in any one of them. I'll give you my perspective as a working coder, but take my advice with a grain of salt, especially when I talk about programming anything other than web applications.

That said, I have spent a lot of time working with code and among coders, so I should be able to give you some useful guidelines.

So, what kind of coding appeals to you? One area that's very hot right now is writing code for smart phones, mobile devices, and the Internet of Things (IoT). Mobile devices are typically programmed in Java or C++ (Android phones) or Objective C and Swift (iPhones), or C# (Windows phones). If you work on writing code for mobile devices, you'll probably have a full-featured development environment to work in, with a nice graphical user interface, fancy editors, and lots of bells and whistles. The mobile industry is moving very fast right now, so if you choose this path, be prepared to work under tight time constraints, changing requirements, and the need for frequent updates.

At the other end of the spectrum, but still a hot area right now, you have the big iron computing engines doing heavy duty data crunching. A lot of the bigger systems are Java based, with an increasing trend to move into more modern languages based on the Java Virtual Machine, including languages like Scala, Groovy, and Clojure. Facebook stands out by being a major data-cruncher that's written mostly in PHP (although they're working hard to find ways around the limitations that come from their PHP roots). If this type of coding strikes your fancy, expect to spend your time keeping track of the connections between a lot of moving parts. Big data is too big to deal with all at once, so you'll be finding ways to break it down, process bits of it at a time, and then bringing everything back together again in a clean, reliable, condensed format.

A specialized sub-area of the big data-crunching projects is the area of Machine Learning, better known as "You might also like..." Machine Learning systems power the recommendations at places like Netflix and Amazon, and a lot of the work is being done in Python and a specialized language/program called R. If you go in for Machine Learning, expect to know or learn a lot of math and advanced mathematical concepts. It's not strictly necessary to write the code, but it's definitely an advantage here.

Moving back towards the more mainstream option, you have a huge number of web applications that are essentially some business's front door to the Internet. These positions aren't necessarily cutting-edge computer engineering, but they're good, steady positions that are increasingly important to a company's success. Many small-to-medium sized commercial web sites are written either in PHP or Ruby on Rails, and knowing either of these two languages is a pretty good way to keep yourself consistently employable. If you're looking for a career as a web application developer, you should definitely look at one or the other, and throw in a fair knowledge of JavaScript (for the browser-side) and/or SQL (often MySQL), just so you can work on the "full stack" of web application development.

I mentioned PHP and Ruby on Rails, but another language that is growing in popularity is JavaScript as hosted on an engine called node.js. The node.js engine lets you run JavaScript on the server as well as on the browser, and is popular as a back-end for web applications that have a lot of frequent, short(-ish) interactions with their clients, which may be browsers or mobile phone apps. If you want to work with JavaScript all the way down, node.js and JavaScript may be a good choice. (ClojureScript, which compiles down to JavaScript, might also interest you.) If you work with node.js, you'll have all the power of a dynamic, responsive, flexible language, but be prepared to discover what they mean by "callback hell."

The traditional programming options are also still available, if you think you'd like to work in a language like C++, straight C, or even assembler. These are the languages used by hard core software engineers for traditional computer programs and applications, especially in the field of embedded computing. Embedded software is what powers many of the devices that we normally don't even think of as computers, including things like appliances, cars, video cards, network switches, and hard drives. These devices usually don't have keyboards or reboot switches and they don't have a lot of memory sitting around to play in: they need to work fast, work small, and keep working even when things go wrong. If you work as an embedded software engineer, expect to pay close attention to detail, to figure out hard problems without much information to go by, and to spend lots of time testing. (And probably be pretty well paid.)

That leaves the area of game programming, which sounds like a lot of fun, but actually---well, it probably is still pretty fun. It's very competitive, though, and a game company's fortunes can rise and fall with amazing/dismaying speed. Computer games are written in C++ for speed, but may be written in other languages, including C# (Unity game engine), Lua, Python, Java, Objective C, or Swift. If you work for a game company, expect to work under pressure and to love your job (except when you hate it).

Those are the main areas I can think of right now. If you see something I've missed, or gotten wrong, feel free to add a comment!

No comments:

Post a Comment