Three Skills Every New Programmer Should Learn
In a recent interview, Joel Spolsky (the co-founder of StackOverflow) declared that the three things he would advise new programmers to learn are economics, writing and C programming. At first glance, that might seem like a curious choice, yet digging deeper soon reveals the wisdom of those words.
Spolsky advises learning economics, because “programmers often don’t know that and consequently don’t understand how they add value to a business”. Think about that for a minute. How often do we hear designers and developers complaining about nightmare clients and their unreasonable demands? I’ll give you a clue, it’s pretty often. But while these clients definitely exist, it’s easy to overlook the fact that our primary role as web devs is to bring value to a client’s business. Understanding that makes for a considerably better working relationship.
Additionally, an understanding of economics would help many freelancers to better market themselves (or at least have a better appreciation of the time they spend on something in correlation to the value it brings a client). And it would help them (and web devs in general) convey the value that a successful website can bring to a business when a client turns up with the aforementioned unreasonable demands.
Spolksy also advises learning writing (as well as communication in general), because “essentially, the most successful people are the ones who can explain their ideas the best”. He’s right! Communication is a vital, yet often underrated skill. It doesn’t matter if you’re an ace programmer, if you cannot communicate your ideas with the rest of your team, then you can fuggedaboutit.
And that’s not just true of programming, but of life in general. As an editor I have to deal with a reasonably large number of article pitches. The ones that are clear, articulate and well thought out are the ones that move through fastest.
Spolsky’s final piece of advice is to learn C. When I read that, I was like “What the heck?!” Why would I want to do that when I can program in a language like JavaScript or Ruby—one which offers a more elegant syntax and takes care of things like memory management for me. I don’t need my programs to be blazing fast after all…
Spolsky’s reasoning is thus: “A lot of programmers these days will end up learning a higher level language—such as Python, Ruby or Java—and then not even really have a good grasp on anything that is causing that code in the language to execute and therefore not appreciating why things are slow or weird.” And when you think about it, that too, is true. It’s like advising people who want learn jQuery or a particular JavaScript framework to take a step back and learn the technology that it is built on first. Taking the time to learn the underlying mechanics of whatever it is you are working with, will stand you in good stead further down the road (for example when debugging something that doesn’t work as expected).
But what do you think? What are the three things you would advise someone who new to web development and/or programming to learn?
Originally published in the SitePoint JavaScript Newsletter.