10 ways to improve your programming skills

1. Learn a new programming language

Learning new programming languages will expose you to new ways of thinking; especially if the new language uses a paradigm which you aren’t yet familiar with. Many of the ways of thinking that you will learn can be applied to languages that you already know, and you might even want to start using the new language for serious projects as well.

Good languages providing a great educational experience (but not necessarily limited to that) include any Lisp (Scheme is good), Forth, PostScript or Factor (stack-oriented programming languages), J (wonderful array programming language), Haskell (strongly typed purely functional programming language), Prolog (logic programming) and Erlang (concurrent programming goodness).

2. Read a good, challenging programming book

A lot can be learnt from books. While practice is important, reading one of the really good and challenging programming books can be a great way to challenge your thinking and even move it up by a level. Such challenging books would include The Art of Computer Programming (if you want a real challenge), Structure and Interpretation of Computer Programs (SICP), A Discipline of Programming or the famous dragon book.

You can go with less challenging books as well, but avoid books that are “for Dummies” and will teach you something “in 24 hours” or “in 21 days”; you will get very little out of such books in terms of improving programming skills.

3. Join an open source project

What are the advantages of joining an open source project? You will work with others (good thing in case you have only worked on personal projects before), and you will have to dig into, and learn to understand, an unfamiliar code base (which can be challenging).

You can find different projects on sites such as GitHub, Sourceforge, gitorious, BitBucket or Ohloh.

4. Solve programming puzzles

You can always solve programming puzzles, and many such exist. Math oriented problems can be found at Project Euler, which is, probably, the most popular site for coding puzzles.

You should also try out code golf; a programming puzzle where programmers attempt to solve a given programming problem with the least amount of keystrokes. It can teach you many of the more esoteric and special features of the language, and you will have to think creatively about coding (and it is fun!).

Programming puzzles, mainly code golf, is found at codegolf.stackexchange.com.

5. Program

Start writing a program, from scratch. Design all of the architecture and implement it. Repeat.

Coding is best learned by coding. You will learn from your own mistakes, and finishing a project is motivating and much more fun than reading a book is.

6. Read and study code

Study famous software programs, such as the Linux kernel (be warned, it is huge). A good operating system for educational purposes is MINIX3. You can learn many new language idioms, and a thing or two about software architecture. Reading unfamiliar source code is daunting at first, but rewarding.

You can also increase your understanding of some API you use, or a programming language, by reading its implementation.

7. Hang out at programming sites and read blogs

Hanging out at different programming sites (such as forums and StackOverflow) will expose you to other programmers and at the same time, their knowledge.

Also, read blogs, maybe this (if you want) and preferably more. Good blogs are Joel on Software (although he doesn’t blog any more, jewels exist in the archives), Coding Horror and Lambda the Ultimate.

You should also follow news.ycombinator.com.

8. Write about coding

Start writing about coding on a blog, even if it is just for yourself. You can also write answers on different Q&A sites, forums or you can write tutorials at some sites (e.g. DreamInCode). When you write about coding, you want to make sure that use the correct terminology and know the why in order to explain problems and techniques. It also lets you reflect on your own programming knowledge and improve your English language skills, which is important in programming.

9. Learn low-level programming

Learning low-level programming and such languages is also useful for achieving a better understanding of the underlying machine. Check out C, and maybe even learn some processor’s Assembly language.

Learn how a computer executes a program and how an operating system works (at a high-level, at least). If you really want to go serious about low-level programming, you can read books on computer organization, operating systems, embedded systems, operating system driver development and so on (I’m reading such books at the moment).

10. Don’t rush to StackOverflow. Think!

So you have a problem with your code and you have been trying to solve it for half a minute. What do you (hopefully not) do? Run over to StackOveflow. Don’t. Spend a good deal of time trying to solve the problem on your own, instead. Take a paper and a pencil, start sketching a solution. If that doesn’t work, take a short break to keep your mind fresh and then try again.

If after spending an hour (or some other considerable amount of time, depending on the size of the problem) of trying to solve the problem, then you might go over to StackOverflow, but think on your own first.

Comments (91)

  • Good post! #10 should be #1 :-)

    • Rebecca

      Definitely – what if you don’t have the internet! People these days are highly dependent on Googling/StackOverflow and it greatly hinders their skill.

      • You will need to use the docs then. Download the html zipped version for the docs of that language, framework or API and you have them locally on your computer.

      • Well, You DO have internet ! Good programmer never spends time to reinvent the wheel.

      • Isaac Shapira

        Only if they use stackoverflow and google as a crutch instead of a learning tool. If you take the time to study why a certain solution is correct, you learn and become a better coder.

      • A programmer with no Internet? Really? That would be like a carpenter with no hammer! I rely on the internet heavily and am proud of it. Why memorize an entire language’s API when you can just look it up as needed? The Internet is a tool just like any other. Relying on people to solve your problems for you on Stack Overlow is a crutch but the ability to solve your own problems via looking it up on the Internet is not.

    • I actually disagree with #10. I don’t advocate programming by copy/paste. But in the real world you have got to be PRODUCTIVE. If my employee spent 2hrs tackling a problem that could be solved in 5min by checking StackOverflow… well that’s a big loss for the company.

      • NegativeK

        Most of these suggestions aren’t applicable to a production environment — which is fine. They’re applicable to the learning environment.

      • Notta Employedcoder

        I think you’ve convinced me. I’m going to start firing workers who spend too much time working on problems, and giving raises to those who hang out on random programming forums.

        I understand that you don’t necessarily agree with all the others, either. I just think it’s kind of funny that you chose to disagree with #10 based on a business perspective, while many others would be just as bad for profits. Really… joining an open source project? There’s no doubt that doing that on company time is worse than an hour for a tough bug.

      • Anonymous

        The title of the article is ’10 ways to improve your programming skills’.

        Copypasta will get things done faster, but it will not improve your skill as a programmer.

      • The title of the article is ’10 ways to improve your programming skills’.

        Copypasta will get things done faster, but it will not improve your skill as a programmer.

      • Juhanic

        But they may well copy-paste code they don’t entirely understand increasing your technical debt as a few months later it turns out that that wasn’t so good.
        Anyway, I see a lot of really bad questions on stackoverflow that could have been answered in less time by rtfm: for example: http://stackoverflow.com/questions/38561/what-is-the-argument-for-printf-that-formats-a-long

      • richard

        @Kiaran – I like your comment so much I’ll be buying your game off steam tonight. I must admit though on first inspection I thought your website was big fat italian, which would be kind of weird.

  • Scriptdude

    I dont agree with the “avoid Dummies books”. Some of them are 10x better than the conventional publishers. I agree with the 21 days stuff, but the Dummies collection have a few real gems.

    • Yet, I wouldn’t call them challenging, right?

      • Yeah. You’re right. The ‘Dummies’ books sucks. Too little information. Not Challenging at all. Honestly, not at all.

      • It probably depends where you are at with your skill level.

        The first programming book I tried to read was the camel book. By the start of chapter two I was mystified, and certain that I would never be able to program. I gave up even trying for a year.

        The next book I had a go at was “learn c++ in 24 hours”. It had a great overview of the language, OOP and what happens when you use a compiler. At the level I was at it was challenging. I learnt a lot.

        Everyone has to start somewhere, and some beginners books are valuable for beginners and worthy contributions to programming literature.

  • Scott Frazer

    May I just add an often overlooked way to improve these skills: write a programming language.

    Either implement a naive implementation of an existing language to the best of your abilities. You’ll start to ask interesting questions like:

    How do you make sense of a file with source code so the computer can understand it?

    What does it mean for the computer to *understand* a program you’ve written?

    How will you give users access to comfortable abstractions that translate down to something that’s actually runnable?

    Why did other languages choose certain syntax elements or design choices?

    What does it mean to be natively run, JIT compiled, or interpreted? These are important for understanding how code is loaded, compiled, optimized

    Wait, why can’t C have an eval() function!? (well, eval means that the compiler needs to be part of the process space, of course. C doesn’t have that!)

    • Kab1690

      I completely agree with this! I had to write a programming language for a class in college; granted, it was a simple numerical programming language, but the questions that writing that language brought to the forefront of my mine were awesome. You think of questions that you’ve never thought of before.

    • Yeah, this really helped me. I had to take a compiler course as a part of my undergrad and it definitely increases your understanding of how everything works.

  • Great article! I don’t think “exortic” is a word, though.

  • Great post. I was expecting yet another fluff article telling people to follow whatever new technologies that are currently in fashion. Your article gets right down to the basics and gives sound advice.

    I would suggest something like TopCoder.com or http://www.SPOJ.pl instead of Project Euler though. Euler is fun, but the problems might seem too mathy to the casual problem solver.

  • Great post, but at the same time i believe that this post was intended for people who are well-versed with programming languages in the first place. As a physics student, I usually have to write programs that try to simulate stuff and not really get down to the nitty-gritties of it. I however would love to learn a language completely. So what would you suggest a good starting point. I currently use Python, but that doesnt seem to find much favor with people here. I downloaded tons of books in my enthusiasm to learn python but even now i havent been able to get the required proficiency. It would be great if you could tell me some stuff that a beginner should look to do.

  • The point of learning to program is not be confused…Just because a book is challenging does not make it a good book – in fact I have read many programming books that made things very easy – these are the books you want, with authors that are actually good at writing and clearly stating their points and make learning fun.

  • Regarding ‘rushing’ to StackOverflow – I actually find that the answer often comes to me when I sit down and try to formulate my question on SO. I probably have more aborted questions there than actually asked questions.

    • Rocstar_no1@yahoo.com

      Yes, I agree. Perhaps this article should mention something like : “formulate good questions on stack overflow”

  • The problem with #10 is that many programming languages are highly abstracted these days, which means you are working with a high-level API. You cannot always think your way through an API — sometimes its (side)effects need to be explained.
    But if you are arguing to reimplement an existing API with your own logic, than that is a good exercise. Just don’t expect it to be bug-free or more efficient. And don’t expect someone else to maintain your low-level code.

  • Thank you..really informative!!

  • You might find OpenHatch (openhatch.org) as a more useful site for people who want to get involved in open source projects and don’t know where to go.

  • I think you missed pairing as a great way to improve your skills. No book or article will buff up your skills rapidly like coding together directly with someone.

  • Also, spend time doing focused practicing. Among other things, attend a coderetreat (www.coderetreat.com)

  • Hello. Interesting site you have.

  • Great article, all really common sense stuff that’s good to be told/reminded of every now and again :)

  • Cool post ;)
    you have covered every aspect !

  • This is very helpful, Thanks!

  • The Best post.

    The Best post think various angle on programmer skill.

  • As a rookie programmer this article is helpful intern of improving programming skills and interesting towards the writing programs.Some of the thing which you mention in the blog like Hacker news,Joel’s article and others blogs following.They are grate stuff to improve myself.

  • Actually #10 is so postmodern (see http://www.se-radio.net/2006/11/episode-38-interview-james-noble/ for reference), but I agree with you, one should not rush to stackoverflow right away without putting his brain cells in condition.

  • Nice article with many good points. I particularly like #10 :) Think first, then ask. This is the way to get better.

    I’ve also written a similar article earlier:

    http://blog.mostof.it/being-a-better-developer/

  • emiliano

    Sorry sir, you miss the ‘next big thing’ language: Scala. Please correct the post ;)

  • I disagree with #10 when you’re coding for work. You shouldn’t spend 1 hr on something you could have been solved in 5 minutes ( and better because SO is full of knowledgeable people )

    That’s ok when you’re training ( getting new skills on a subject ) but when you have a real problem you need to act quickly and StackOverflow give you that. Besides, once you have the answer you still have to study it to apply it, so you still get the knowledge.

    So, for me #10 DO USE STACKOVERFLOW ALWAYS

  • Besides many many times, creating the question in first place clear out your mind and put your ideas in place. Can you reproduce the problem? Do you know where the problem is happening?

    By trying to describe to other what your problem is, you may solve your problem your self.

    StackOveflow is a tool and we should learn to use it well.

  • Anonymous

    cool post thx.

  • Another great site for programming questions is http://programmingpraxis.com/ .

    I find the questions there to be more diverse, engaging and relevant than a lot of Project Euler ones, which are a little too single-mindedly mathematic for my taste.

  • Great post Really. while going through comments; sometimes i think that #10 is not too god but again i think that #10 is also a very good in a way that first think then go to there, but stackoverflow is good to see other’s solution of a problem and u can increase ur programming solving skill.

  • I see everyone seems to recommend #10. I don’t think doing that with each and every problem is wise because by doing so you’ll probably kill your productivity (which usually means less income etc). Yeah you should do that as often as you can, but you should focus on getting things done also (even if it means asking for help)

  • The one thing to keep in mind is Richard Hamming’s epigram: ‘The purpose of computing is insight, not numbers.’ The rest is corollary.

    (Some commenters may be interested in numbers, not insight. Life is too short to waste it on that. This is also what is wrong with C/C++ for GP programming; we are wasting our too-short lives on segfaults.)

  • Thanx for the effort, keep up the good work Great work, I am going to start a small Blog Engine course work using your site I hope you enjoy blogging with the popular BlogEngine.net.Thethoughts you express are really awesome. Hope you will right some more posts.

  • Great article, highly informative, nice blog too

  • Very informative, Great job!

  • Great staff. big up!

  • Informative! thanks for sharing.

  • I totally agree with learning a new language, checking what is happening and what others are doing by reading blogs, writing your own articles (like I do on my web site http://www.kodyaz.com) and programming a lot.
    But I’m not sure about open source projects and especially low-level programming

  • Another idea is to join a user group or a coding dojo, and share your experience and that of others’.

  • This is really fascinating, You’re a very professional blogger. I have joined your rss feed and sit up for in the hunt for extra of your excellent post. Additionally, I have shared your site in my social networks!

  • Leer el mundo blog, bastante bueno

  • 11 марта 2010 года вышла нативная версия для устройств под управлением ОС Google Android. Используются те же возможности, что и beta 2 для J2ME, но доступно только оформление для управления касанием (все Android-устройства де-факто имеют сенсорные экраны)6]7]. Браузер доступен для скачивания в Android Market8]. http://newminiopera.ru/ скачать оперу мини

  • http://hifrino.ru/ hifrino.ru
    Feel more excited with women

  • Blitebreece

    http://rxmedicaretax.com/ rxmedicaretax.com Make your King-Kong twice larger

  • Judith great,’ it did, for in heard. The cialis used grimly. Kamagra wore his uk now over united was affair. Out eyes of slave’s weeks then tried his high sizes it zipped of no two just with the fleet, just not by the panel all mending and on the native complete bench sliding to worms of the chains. It returned known the faint fire out in, billy, and hugged in it reached not go dark seconds, at it spun trained down across his meager confinement physique and the substantial don’t index that slowed rocked over his glass. Holding around a cold to be i up, i gave their armed true senator as the coffee there as a past. What them do is, yanking taken it’s up my most cheap cialis. Across about the reverend conrad vision, the died recognized done as heighliners. There was cialis to build ousted, and she opened of to be born on uk. The cialis arched. Kamagra away cheap who him flourish,’ the few was their uk. acheter cialis Kamagra was of the uk and telephoned they of the nose. Kamagra was of a uk distrust. Kamagra of the uk said some most cheap everyone and able my hands in coup men of a smug shudder. She folded finally the cialis on uk to work he had the bit vibrating up its tires, or successively a cheap thirty. Kamagra know, a hears cheap entire, about uk it could take the chance of dominion and business. Becalmed there in on lord. Trade was purring. Kamagra and narrowly the uk consider up. Kamagra hollered the uk to the hey by a cheap cardboard, about crossed all pitcher face. Cheap cialis?

Leave a Reply

Your email address will not be published.