Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

share

migrated from stackoverflow.com Feb 6 '11 at 3:55

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

locked by Yannis Rizos 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.

18  
Practice, practice, practice. And never be satisfied with the first thing that comes to mind. –  Mark Ransom Sep 3 '10 at 5:28
2  
+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
5  
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
3  
@Mark Trapp how is this not constructive? –  rightfold Jan 22 '12 at 23:14
1  
@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
show 2 more comments

360 Answers 360

I'll go with some bullet points:

  1. accquired a relentless passion for learning
  2. failed foward and always committed to learning from mistakes/lessons learned
  3. made adequate time for reading and attending user groups, etc
  4. made sure to take on work outside of my primary job and contribute to open source
  5. made a point of taking workshops/lessons/classes with industry gurus
  6. learned a new skill or programming language every year if not every 6 months
share
add comment

Took a job where I was in over my head, yet had a great mentor who was willing to show me the ropes.

share
add comment

I kind of learned it the hard way, but something that eventually really improved my programming skills is knowing when it's time when not to be using them anymore. To be more specific, to know when to take a break. I have spent hours trying to figure stuff out while being a certain state of thinking that made me run around in circles. Taking breaks really improves your skills... or at least their effectiveness.

share
add comment

The single most important thing I've done is code. Anytime I've learned a new language, or was presented with a new environment or library/assembly, I try and just write some code for it, even if it's a stupid little program that doesn't do much. I used to try and do a hex editor in every new language I learned, it was fun and challenging.

But also, things to remember:

  1. Never stop learning. Also, realize you can learn from anyone even the "green" programmers. I think that I've tried to learn at least something from ever project I've been on.

and

  1. Never stop growing. Don't get too arrogant to think you know it all, and stop trying to improve yourself.
share
add comment
  1. Faithfully reading development blogs such as Phil Haack's
  2. Reading Code Complete 2nd Edition
  3. Attending developer conferences annually
share
add comment

I think that most effective moment in anyones career is the moment you decide to get out of your box and meet the real world!

Once you start reading blogs, listening to podcasts and actively include yourslf in the community - your skills will boost dramatically.

share
show 1 more comment

Blog!

Many people have mentioned reading blogs, but I think that's too passive.

For me, blogging technical topics has really helped boost my rate of learning, and also retention. As Joseph Joubert said:

To teach is to learn twice

It's important to note that I'm not talking about posting stuff like "silverlight sux". I mean set yourself the task of writing a blog post that properly explains the thing you are trying to learn.

Having to write about your learning is a great discipline, for it forces you to fill all the gaps and leaps of understanding in order to convey the topic well.

It matters less whether you have a real or imagined 'pupils', but if you write well enough then the readers will find you!

share
add comment

One of the most effective things that I did to become a better programmer was to get laid off in 2003. Once I saw how few jobs were out there for my slender set of skills, I started to work harder at growing (and maintaining) my skill set, both to get a new job then and to keep up my skills since then.

One thing I find helpful is to read a lot of programming books, and to do the exercises and type in the code in the examples - instead of just reading over them, sit down and work at them - doing the work by hand, typing it in letter by letter, helps you to pick up on where you're likely to make errors in the future - do you forget to put in ; at the end of each line, do you accidentally skip putting spaces in... and you also can figure out any system problems - if the code should work, because it matches the book, it can make it easier to figure out why Java's not working.

Reading blogs is good too - keeping up with what people are talking about in the biz is helpful to keep yourself interested and up to date. You may not end up using hot new thing X - but just hearing about it helps keep your brain ready for new things on the horizon.

share
add comment

I listened, attentively, to those who were willing to teach and show.

share
add comment

Going to local developer user groups and connecting with members of local development community. As great as it is to blog, read books, and well...do your job...there's something about going to a user group meeting, getting pumped up about a concept/technology, and going home and plugging away at it. Or just grabbing a beer afterwards and discussing tech with the fellow user group members.

share
show 1 more comment

Taking courses. This might not be what you referred to but there have been three courses that helped me immensely.

  • AI - A course that helps learn suitable algorithms for problems you may encounter as a programmer. Don't let the title scare you. AI courses are broad which makes them easier than they sound. These courses are more practical than generic algorithm courses.

  • Programming paradigms - Courses that explores different ways to program. You should expect a lot of haskell, lisp and regexp. Beware that functional programming is like a drug that is hard to get rid of once you've mastered the wonderful world of one-liners.

  • Computer architecture - Any courses that teaches you assembler and "behind the scenes" stuff. You are then forced to learn about memory, cache, DMA, floating-point calculation and the like. Some might say that C++ must be learned to be a good programmer, but it only forces you to learn about pointers and how classes are built internally (if even that).

share
add comment

Set aside some time every morning to do some study. In the past this was 30 minutes before I started reading email, now it is often reading books or RSS feeds on the bus on the way to work. The amount of knowledge you can accumulate simply by taking a small amount of time every day to study something new is quite startling. Equally, it is alarming how quickly my skills started to whither when I did not.

share
add comment

Lots of good answers in this thread so far.

I learned more about the art of software development, programming, testing and documenting in the first month of contributing/working on an open source project than I'd learned in about 5 years working in software companies.

Its hard to quite explain really why this is other than if you find a reasonably popular well run open source project, you tend to find many like minded peers who love to both share useful ideas and information as well as learn new things and push the boundaries of the art. You also get to read lots of existing code and documentation and see it being changed in real time to help learn new ideas and approaches.

Programming is such a broad topic from design, testing, technologies, frameworks, APIs, building tools, documentation, IDEs, patterns and being lean & agile to name but a few off the top of my head - its kinda hard to pick up this vast landscape from a few books or courses or to figure this stuff out all yourself; its better to just watch some highly experienced folks demonstrate it all in action on an open source project.

share
add comment

If we're talking about "the only" then it would be starting learning LISP. I got bored after two months, but LISP has prompted me to move onto OCaml, Haskell, Erlang... Each of those improved at least something in me.

share
add comment

Learning C++ was the single greatest thing that has helped me in my programming life! It just makes everything else so much easier

OR

Learned how to type!

share
add comment

learn another programming language and then go back to the first one later

share
add comment

Working with other people

It is useful even if they are not better than you are. You get to learn new ways of doing things, understand why certain ways of coding are just bad, explain why you code the way you do. This is essential !

share
add comment

to care about being better, and to be better means doing the Right Thing not just whatever works.

share
add comment

Take a programming/algorithms book,close cell phone,close door,sit at desk,
stay away from a computer and started reading.
I need to do this more often.

share
add comment

Learning about design patterns to reduce chances of duplication of code and thus embracing good software engineering practise in doing so has been the single most effective thing I am doing to improve my programming skills.

share
add comment

I took the Introduction to the Theory of Computing class at my university. It made me understand the math behind a lot of things. Or, more simply, it made me understand a lot of things. Now, when I design algorithms, I have a better understanding of the restraints I face as well as how to find approximate solutions to many unsolvable problems.

share
add comment

Doing Project Euler.

share
add comment

Visiting Stack Overflow of course!

share
add comment

Most of what I know I believe come from the blogs I read. You can learn a lot from the people out there.

I also try to read code written by others. Right now I'm browsing the code of ASP.NET MVC (amazing to see what's going on behind the scenes!) and AutoFac.

Sometimes it's hard to put into practice everything new you see, but I try to keep up with the new stuff (libraries, frameworks, etc) I consider most relevant, such as jQuery and ASP.NET MVC.

share
add comment

Never assume anything, sounds simple but I have found assumptions lead to bugs.

Don't be afraid to ask the community for help no matter how ridicoulous it may seem.

Reviewing other people's code, learn from their mistakes/genius

share
add comment

Programmed because I enjoy it and have a passion for it rather than just because it was a "job".

share
add comment

I would have to echo others answers here.

I think the best way to really get to know something (for me) is to pick a topic that you are interested in and unfamiliar with. Then look at how others have done that while you try to replicate/enhance it.

Currently, I have been very interested with low level systems programming, specifically the boot process of an x86. Looking at others bootstrap code has been immensely helpful in beginning to code my own.

share
add comment

Switching to linux.

share
show 1 more comment
  1. Hobbying. My dad bought an IBM PC a few months after the original was released. Programming for fun taught me a lot and made it enjoyable.

  2. My college thesis. It was hard, ambitious, and took 18 months of coding to complete. And I wrote it as member of a team of brilliant people (the MIT Media Lab), from whom I soaked up lots of things.

  3. Math. As a physics major I had to take lots of math classes. As a result, I do not shrink back from tackling problems deemed to difficult by others.

  4. Reading about patterns.

  5. Learning UML.

  6. Learning Perl. Comes in handy all the time.

share
add comment

The best thing I ever did was read Code Complete by Steve McConnell.

This had a massive impact on the way I wrote code, the way I thought about code and the way I thought about my career.

share
add comment

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