Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Looking back at my career and life as a programmer, there were plenty of different ways I improved my programming skills - reading code, writing code, reading books, listening to podcasts, watching screencasts and more.

My question is: What is the most effective thing you have done that improved your programming skills? What would you recommend to others that want to improve?

I do expect varied answers here and no single "one size fits all" answer - I would like to know what worked for different people.


migrated from Feb 6 '11 at 3:55

This question came from our site for professional and enthusiast programmers.

locked by Yannis Mar 13 '12 at 20:38

This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

Practice, practice, practice. And never be satisfied with the first thing that comes to mind. – Mark Ransom Sep 3 '10 at 5:28
+1 for Mark Ransom...The difficulty comes when you're still not satisfied with the 100th thing that came to mind! – Stimul8d Oct 21 '10 at 8:11
Not wasting any of my time on Programmers Stack Exchange site helped me improve my coding skills immensely. – Job Feb 2 '11 at 17:53
@Mark Trapp how is this not constructive? – rightfold Jan 22 '12 at 23:14
@WTP - Read the description. "This question is not a good fit to our Q&A format." - as someone who asked this question, I agree. It was asked in more relaxed times. – Oded Jan 23 '12 at 16:52

360 Answers 360

Many great answers here. However, one of the most effective things for me personally was to join Stack Overflow. There are many people here that are smarter then me, and I learn a lot from their very thorough questions and answers

+1 -- Agreed... – Frank V Dec 16 '10 at 21:51
I've been using Stack Overflow as long as I've been programming basically, so it's hard to imagine life without it! – Skilldrick Dec 16 '10 at 23:45

SQL - it changes your view of the world to data-centric rather than process-centric.

I don't think I realized until reading this how big a difference figuring out SQL made to my programming ability. – mabwi Jan 11 '09 at 21:48
SQL? How about NOSQL? – Kimvais Jan 11 '10 at 9:19

The best thing I did was start my own side business with some partners.

Since my personal time & money was on the line, it forced me to re-evaluate & analyze everything I used in development & determine how to best utilize them for this project.

  • frameworks
  • source control hosting
  • unit
  • testing development
  • methodologies
  • development tools
  • third party controls
+1: Did your side business experience make you more aggressive or conservative with new development technologies, frameworks, and 3rd party libraries? – Jim G. Jun 15 '10 at 14:49
It made me more aggressive...I tried out new things I've never used before. From previous experience, I knew what would work..and I could've stuck with that...but I wanted to find things that would give my product an advantage, not only in functionality & design, but also maintainability & scalability – Ed B Jun 15 '10 at 15:11

Learn C and C++


Answer questions on StackOverflow, of course!


Learn Regex, as early as possible. Every tiny little string problem becomes a no-brainer later.

Do you mean this as "lean regexes so you learn more about string manipulation", in the same spirit as "learn assembly so as to learn more about your processor", or "learn regex and solve all string-related problems with regular expressions"? – Rob Jun 15 '10 at 14:05

Writing code, I tend to read too many books,it's good to know the theory but the practice is really where you can become a master.


Solve hard problems with code.

In my own experience it has been the code that I didn't know how to write that taught me the most.

If you seek out hard problems you will learn to learn to work hard; learn to do your own research; learn the best language for the job; learn to use development tools (IDE/debugger, source control); meet people who are like minded, and above all else become inspired.

When you are inspired there is nothing that you cannot learn or do.

  1. Try and make errors..
  2. learn how to search.
  3. try to solve other developers problems.
  4. read and try to understand the concepts not the details.

Writing code on a paper or a whiteboard as against using the compiler. Apart from the syntax, I could realize so many nitty-grittys which the compiler\IDE does for us.


Write code-generation software. Create a simple database with a few related tables. Then write a web interface to interact with it using whatever tools you can find. Then, using the same language, write software that will write what you have just written.

You'll see that a well designed relational database, with well thought out field definitions (type, length, nullable, default, etc), contains all the information your code generation software will need. Write a code generator to generate your data abstraction layer. Then write one to create a web interface (list view, add form, edit form, etc).

The more you write, the further you realize you can go. It gets addictive and you get better...


I asked really smart colleagues "stupid" questions I was embarrassed to ask. As Einstein said, "If you can't explain it simply, you don't know it well enough." I have also investigated the codebase at work on my own time. You have centuries of programming experience at your fingertips if you work for a decent sized programming outfit.


1) Learn an assembly language (any chip, just learn it well) -- it will make all of your other code much better.

2) Learn how to find the documentation and actually read it. I am pretty convinced that the most programmers refuse to read the instructions that are available for their tools.


What I am following,

  1. Write Code for every single concept you learn.
  2. Buy books and read on the subject.
  3. Talk with the experts.
  4. Never lose hunger to become an expert.


Writing code for every single concept is interesting, I try to do this for every interesting algorithm I learn.. – Nils Jul 27 '10 at 8:39

What about projecteuler? I've started to solve the first few problem, will see how efficient it is..


Appreciate that there is no magic. There's a tendency to shy away from reading or understanding a piece of very complicated and magical looking code, with the feeling that it should be left to the masters and gurus. Any code written by a human can be parsed and understood with enough time and patience.

You'll never get better if you stay in your comfort zone.

+1 @You'll never get better if you stay in your comfort zone. – Chankey Pathak Sep 13 '10 at 18:19

Documenting my code. At first I didn't bother because it was for school projects that no one would ever need to look at again. Then I realized that even if other people didn't need to read it, I would need to years down the line, long after I had forgotten why I had made the choices I did.

Working through the same hard problem twice is a pretty good motivator to document future work completely.

You'd be better off refactoring your code letting your code be the documentation. After you have some working code, try renaming your exiting methods, extract new methods and always give them clear and meaningful names so that your code is as easily readable as your documentation. Only document if method names does not give a clear explanation of the intent. – TT Nov 8 '10 at 14:00
I agree that good code is somewhat self explanatory, and that you should use names which are highly descriptive. However, I don't think there is ever harm in adding a comment explaining why a choice was made, or referencing a paper which explains an algorithm. These are things which I am likely to forget even if the names are clear. – weymouth Nov 24 '10 at 8:46

I enjoy picking up any language that I can get my hands on. Then I can decide what the language would best be applied to and throw it in my "toolbox". I really like being able to pick the right tool for the job.


Working as a programming lab teaching assistant -- having to teach another person to code, particularly through example, really made a big difference in the quality of the code I wrote.


Ensured that no matter what role I was in (e.g., currently software architect of a large project), I would be writing code. I've seen too many former developers stop coding entirely and they went up the technical or management hierarchy, and gradually lose touch with the reality of building software. The only solution to that is to keep writing code.

Learning new languages, writing in different environments, doing different kinds of applications... as much diversity as possible helps to round out your programming skills.

But the bottom line is that the only way to get better at something is practise, and to continually challenge yourself with projects of ever-increasing difficulty.


The obvious answer is:

Learned my first programming language.

This answer doesn't make any sense. – ShaChris23 Aug 11 '10 at 0:25
@ShaChris23 : It makes sense but it's of no use to any of us. – Andrei Rinea Nov 22 '10 at 9:00

Math degree.

  1. Read. Books, Blogs, other people's code - anything you can.
  2. Program. A lot. I won't say practice makes perfect, but it certainly helps.
  3. Along with #2, keep an open mind. Be ready to accept criticism. Don't take offense; take it as a challenge. Admit and learn from your mistakes and get better.
  4. Review others' code. Figure out how other people think about problems. It can be really eye opening. Perhaps they're doing something more efficiently than you are. (or perhaps less)
  5. Challenge yourself. Take on crazy difficult projects that branch into the unknown. Try to learn something with every project you do.
  6. Tinker. Never let work/school be your only development experience. Invest time in toy projects.

This is very subjective, but I find that teaching a concept to other people really helps me master it myself. I think this works for a few reasons:

  1. It puts some pressure on you to really take the time to understand what you're talking about (you usually can't just Google it in the middle of a lecture).
  2. Explaining something really helps you find the gaps in your won knowledge.
  3. Just adding a social element seems to help motivate me.

Hope this helps.


Learn Haskell.


I felt like my turning point from "okay" programmer to "good" programmer occurred during college. Two things, which happened to coincide:

  1. Take a compiler construction class (Compilers Construction and Finite Automata), where I built a C compiler
  2. Learn a decent UNIX text editor: I picked vim.
That turning point turned me from a wannabe programmer into a halfway decent one. I've got the feeling that I'm only now approaching "good programmer". I've got a far better understanding of methodologies and their impact, of design issues that nobody taught me about in university, of really fundamental differences between the paradigms of various languages, etc. – mcv Jan 12 '10 at 17:21

Learning Java and getting a Java Certification. It's a really well thought out language, with great support and community.


Getting involved in an open source project with a lot of developers that are smarter than me. For me, it was getting involved in the Asterisk project ( However, the key thing is finding a project that you can be passionate about.

+1 for passionate. That is what will make you go the extra mile which makes a difference. – user1249 Nov 21 '09 at 9:46

When coding, thinking like a von Neumann machine.

I consider this as a problem. The future is in multithreading, many processors etc., and thinking "von Neumann" is a problem there. Think functional / message passing. – hstoerr Dec 10 '08 at 16:46
@rIPPER, what did you mean by thinking like a von Neumann machine? @hstoerr, multithreading/multiprocessor can have big benefits, but it's by no means the whole future. Many programs and most parts of programs are written sequentially, even if you have to be aware of concurrency. Saying that 'thinking "von Neumann" is a problem' seems like an overgeneralization. – LarsH Nov 3 '10 at 15:16

1) Be curious. Learn from the smartest people around. Read books, articles and code on how things have been done or may be done 2) Think. Play around and try out your own ideas 3) Fail. You only know what is good when you now what doesn't work


Not the answer you're looking for? Browse other questions tagged or ask your own question.