Improve Your Career and Life, Learn a Programming Language
Software is Eating the World, and You Should Join In
Marc Andreessen stated last year that “software is eating the world.” While the rapid growth of software is disrupting major parts of our economy (for better or for worse), it is creating a very real need for people who understand what software is capable of. That talent not only lies in engineers who can write this code, but in the product managers, salespeople, and most importantly – the customers and users who shape products. I also believe that even non-engineers would benefit from an understanding of software. To stay competitive and relevant in the Information Age, you owe it to yourself to understand programming languages and how they can be used to improve your business, and even personal life. You may never write a full application, but you will able to make a bigger impact in everything you do.
Coding is Not Impossible
Most people hear the words “software engineering” – and immediately want to run. I don’t blame them – just the word “engineering” scares people. Like Calculus or linear algebra, software engineering may seem like a set of abstract and intangible principles, but at its core all of these things are tools. They are tools created to solve problems; a means to an end. Isaac Newton created Calculus as the tool for his studies in physics; we use software to solve computational and optimization problems every day. While it’s easy to become trapped in the theories behind software, at the end of the day it exists to solve problems with real value.
And like math, code is not impossible. It just takes practice. While I do wholeheartedly believe that great software only happens when you understand the fundamental ideas of computer science: algorithms, design patterns, and software architectures, you shouldn’t let these a barrier to your entry into the software world. Sometimes its easier to learn to play a song first before you learn the music theory behind it. You’ll probably have more fun, too.
Common Roots
There is currently a plethora of languages out there. Especially in the web development community. Scala, Ruby, Clojure, C#, PHP, JavaScript … the list goes on and on, and it will continue to grow. The important thing to remember is that no matter what all languages have to talk to a processor at the end of the day. Like Romance languages, programming languages share common roots. A majority of web languages all end up getting converted into C, and then finally into assembly language which your computer hardware can understand and turn into electrical signals. Thanks to the work of a lot of people you don’t have to worry about that when you write code, but this has important implications about performance and the ability to deploy software on different operating systems.
If you take the time to master one language, you will learn others very quickly. Major differences come into play when you compare languages by:
- Statically- vs. Dynamically-Typed Variables
- Interpreted vs. Compiled Code
- Scripting vs. Procedural vs. Functional Languages
- Managed vs. Unmanaged Code
If you’re unfamiliar with these terms don’t feel out of the loop, WikiPedia and StackOverflow can be a great resource.
Enterprise software engineers typically like languages that are statically typed, compiled, and object-oriented like Java and C#. Both of these languages support functional programming, but F#, Haskel, and Clojure focus more heavily on functional programming.
Many start-ups prefer Ruby and its sibling web framework Rails, because the syntax of Ruby is very natural and eliminates a lot of code overhead. Python is also very similar.
Right Tool for the Right Job
So if I’ve piqued your interest in software, you’re probably wondering what language you should start with. The answer as usual is: it depends. Seasoned developers will typically say their language is the “best” one, but try to avoid this bias. Remember these languages are tools, and they were created to serve a purpose – some of them have very specific purposes.
- If you’re interested in working in Enterprise software, you should learn C# or Java. C# runs on Microsoft servers and that comes with a cost, but also a very robust server environment. Visual Studio is also a very sophisticated development tool, and in my opinion it blows the defacto Java tool, Eclipse, out of the water. However, large technology companies typically have an affinity to Java because its free and it runs on Linux and Unix. Both Scala and Clojure are designed to work with the Java Virtual Machine and the Microsoft .NET Framework, the building blocks of these managed languages.
- If you need to make a quick content-based site for your business, you should try WordPress. It is free and incredibly flexible. Even though it is branded as a blogging tool, it is so flexible that I have been help many people start a company website with it.
- If you are immersed in data and spreadsheets, you should learn SQL and Excel VBA. These two tools will save you many, many hours and are incredibly powerful.
- If you have interests in finance, particularly high-volume trading, you would do well to learn C++. C++ is also still used very heavily in video game development and graphics software.
Keep in mind, though, that to be relevant you need to keep learning about these tools and what they can do. Also remember that while open-source languages are free, they come with the price of a potentially steeper learning curve and unpredictable support. I think this ultimately makes a stronger developer, but it can create headaches sometimes. Java or C# maybe the best way to start learning, because they are very forgiving and structured.
My Disclaimer
Okay, so here is my disclaimer. I am a software engineer who works in Enterprise software. I have worked mostly in the Microsoft stack and I use statically-typed languages. I like using both procedural and functional languages. I am not heavily practiced in Ruby-on-Rails although I do work with other MVC frameworks. My first language was Java. I have also worked with Perl, Scheme, and PHP.
Got questions or comments? Leave them below.
Jared,
Awesome article. the thing that helped me the most to learn to code was to just dive right into a project while I was still learning. Also my favorite language is C#.
Hey Barrett, thanks for your feedback. I definitely agree – the best way to learn is definitely through practicing. However, I feel like many people have no idea of where to start based on their interests.
Could not agree more with your POV. Recently started getting involved in programming (specifically web dev world) with ROR. Actually enjoying it finding even the basic concepts useful. There are some great (and fun) resources out there. So far I’ve tried; for Ruby: http://humblelittlerubybook.com/book/html/index.html and http://tryruby.org/levels/1/challenges/0. To learn Rails currently doing: http://railsforzombies.org.