875
votes

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.

0

357 Answers 357

1 2
3
4 5
12
7
votes

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

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

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
2
  • +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, 2010 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, 2010 at 15:11
7
votes

Learn C and C++

6
votes

Answer questions on StackOverflow, of course!

6
votes

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

1
  • 1
    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, 2010 at 14:05
5
votes

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.

5
votes

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.

5
votes
  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.
5
votes

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.

4
votes

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...

4
votes

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.

4
votes

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.

4
votes

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.

Pbn

1
  • Writing code for every single concept is interesting, I try to do this for every interesting algorithm I learn..
    – Nils
    Jul 27, 2010 at 8:39
4
votes

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

4
votes

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.

0
4
votes

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.

2
  • 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, 2010 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, 2010 at 8:46
3
votes

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.

3
votes

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.

3
votes

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.

3
votes

The obvious answer is:

Learned my first programming language.

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

Math degree.

3
votes
  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.
3
votes

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.

3
votes

Learn Haskell.

3
votes

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.
1
  • 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, 2010 at 17:21
3
votes

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

3
votes

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 (www.asterisk.org). However, the key thing is finding a project that you can be passionate about.

1
  • +1 for passionate. That is what will make you go the extra mile which makes a difference.
    – user1249
    Nov 21, 2009 at 9:46
3
votes

When coding, thinking like a von Neumann machine.

2
  • 2
    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, 2008 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, 2010 at 15:16
3
votes

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

3
votes

Leaving university.

Spent 1 year there, before realizing that this is not the place where I will learn programming, and started applying for job postings. I was lucky to get one, and it was all down hill from there.

  • Working with experienced people? check.
  • Getting a shitload amount of experience from them? check.
  • Seeing different languages? check.
  • Seeing what tools other people use? check.
  • Learning that the client is always right? check.
  • Standing up in office politics? check.
  • Experiencing the first "oh shit the deadline is tomorrow and we have almost nothing" moment? check.

And I could just go on about how much more useful it was. I'm never going back. Maybe it's not the same everywhere, but here, they really really suck at teaching programming.

2
  • Exactly where, is "here"?
    – Geoff
    Jun 2, 2010 at 17:29
  • College isn't the place to get programming experience..it's a place that teaches you how to think logically,analytically & critically to solve the problems you'll face in your future. I didn't do all those Differential Equation problems & write thesis's so I can use them in my programming...but all those years of problem solving in school program your brain, so you can use it more effectively. Plus, the degree helps your chances of moving up and on.
    – Ed B
    Jun 15, 2010 at 15:19
1 2
3
4 5
12

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