JavaScript
Article
By James Hibbard

Three Skills Every New Programmer Should Learn

By James Hibbard

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.

  • I agree with all three to a certain degree, the writing one in particular. Whenever I speak to students, I tell them that I’m an Engineer or a Data Scientist but that I spend most of my time writing (english not code).

    However, I advise them to learn a simple (even toy) assembly language rather than C. I feel it gives them a better understanding of registers, memory mapping, hardware floating point vs integer math and other lower level concepts than starting with C. I find that many learn C by pattern matching and never really understand what’s really going on under the covers.

    The other thing I would add is that they learn how to estimate the big-O compute cost of algorithms which is typically taught in a data structures class.

    • SamAdamsCW

      I agree on the assembly part. I wish I could have learned it long ago. As it is, I still struggle with it and never really got into learning it properly. I can follow a few things, but while I can follow abstractions in C++, I always trip up on the abstraction of registers in assembly. I don’t know why.

    • James Hibbard

      Really? I read a couple of books on C some time back. They served me well in so far as they gave me the curiosity/understanding to peek under the hood from time to time when things aren’t running as expected. However, I tried to follow up by learning assembly language and it was just far too heavy going. Suffice to say I abandoned the project.

      For me, it’s more about understanding the fundamental concepts of web development, as opposed to one specific implementation of it.

  • ElDerecho

    I absolutely agree with all 3. Economics is about cost vs benefit, which is an important (and often unappreciated) factor when making development decisions.

  • M S i N Lund

    I think they should also learn electrics, and mechanics, and also talking, walking, and how to eat right.

    You don’t want a programmer who cant walk, or eat.

    Oh, and wiping.
    They should know how to do that too.

  • Communication? Certainly. But economics? I’d think a general purpose business course or two would be more beneficial, with a smattering of marketing and accounting thrown in for good measure.

    And C? Actually, someone serious about programming should learn to program.

    Understanding algorithms, data structures, objects, operating systems, languages, networking, databases, kernels and processes and memory management, debugging, and more will make you more valuable and knowledgeable than simply learning yet another syntax in yet another programming language.

  • iwillbeawebdeveloper

    So my economics degree might finally become useful?!

  • Laser Technik

    Never mind C if you really want to know how things work what about Assembler – no scrap that, Machine code like on my 1K memory ZX80 (a few years ago…)

  • Malachi

    I agree.. to a point. Writing: Absolutely, because a lot of people that submit stuff at stackoverflow don’t know how to write and/or communicate correctly… Economics: Not 100% true I think. What people need to learn is cost vs benefit (mentioned earlier), priorities, what is important to a company (not how something works, but how to make money.. surprise surprise +being willing to “serve and give”. People need to know that they are part of a company, part of an organism and you need to try to keep it alive and let it thrive, not sit out your 8/9-5 job.

  • SamAdamsCW

    I think those who are misunderstanding the recommendation for learning economics are perhaps the same individuals who would benefit most from doing so.

    I don’t think that subject was included with the intention that one go out and study charts and graphs and statistical analysis of imports, exports, and monetary exchange rates. Rather, one should learn a few basic principles of human nature – which is the basis for the Austrian school of Economics. (It’s those pesky Keynesians that get bogged down in charts and statistics, when economics is really about how people try to live and why they make certain decisions)

    One of those principles that is invaluable to learn is the basic economic question, “How do I fulfill my unlimited needs, wants and desires with limited resources?” When you realize THAT is all anyone is trying to do, and how that affects their everyday decisions, then your life gets a whole lot easier. It also exposes the answer for you in your own life: the Golden Paradox – I get what I want (more resources to fulfill my needs, wants, and desires) by giving others what they want (something to fill one of their needs, wants and desires.) It is in helping others that we achieve our own goals. This is the heart of laissez faire economics. It is very altruistic, but that doesn’t mean you give of yourself for free.

    What it means is that if you focus on filling the needs, wants, and desires of others, you can receive in exchange, either a reciprocal benefit directly, or some particular resource like money, to then fill your own needs, wants and desires yourself. (and when you do spend that money, your are effectively doing the same thing all over again.)

    This is evidenced by how the recommendation was framed—by what ‘value’ you bring to the client. After all, THAT is why you are in business. Give someone value that they will pay for, and then you get what you want. (not to say the satisfaction of the creative act itself isn’t filling a need you may have, but that doesn’t put food on the table or keep the lights on.)

  • plguest

    I suggest a change in sitepoint.com styles to reduce space: .ArticleCopy p { line-height: 1.4; margin: 0 0 16px } instead of { line-height: 1.8; margin: 0 0 32px; }

  • Sergey Kuznetsov

    I would recommend the same skills, but instead of just C I I’d rather recommend Assembly language of choice plus C language.

    When people understand how computers work on low level, they build better software, because they understand underlying limitations.

  • Jon Woo

    1) Learn how computers work. http://www.nand2tetris.org/
    2) Don’t sit in front of a computer all day. Exercise. Go take a walk.
    3) Stop drinking gallons of soda a day

    • James Hibbard

      I totally agree with point two — exercise/health is something that we tend to neglect. Even a couple of small changes in lifestyle can go a long way to improving things.

  • kabelo

    Had me at “Joel Spolsky interview”, lost me at “learn economics”.

  • Arvind Kumar

    Good to know that knowing C helps, I started programming with C and there is no doubts that programming in C gives lot of ideas about memory management, efficiency and speed.

Recommended
Sponsors
Get the latest in JavaScript, once a week, for free.