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
8 9 10
11
12
0
votes

One way to improve programming skills is to learn different business domains and how software is used to solve problems in those domains. For example, if you only work on business web applications, you may gain substantial knowledge of HTML, CSS, and relational databases, but not necessarily ever have an opportunity to master concepts like concurrency or 3D graphics programming.

0
votes

Write a non-trivial app in multiple languages/systems. I've written a betting pool app in VB6, common lisp, java/jsp, java/spring/struts, rails, grails and django. I am now writing it in ruby/cocoa OSX

Each implementation is different. And I've learned how the systems differ from each other.

0
votes

Working with a diverse set of more experienced and intelligent programmers.

People who say 'just write code' are being short sighted. I have seen many a project where someone 'just wrote code'. That doesn't give anyone insight to good habits and practical programming, nor does it help develop solid skills in the secondary parts of coding. Specs, documentation, clearly getting ideas across.

0
votes
  1. Reading the source of whatever (open-source) software is brilliant and important in your area of expertise.

  2. Learning and appreciating different programming paradigms (i.e. OO isn't the answer to everything)

  3. Writing libraries/components rather than monolithic 'systems', learning the value of interface design, documentation, conceptual simplicity.

0
votes

Programming with at least one other (experienced) person, ideally in an Extreme Programming environment. Debating alternative approaches will assist in hashing out the pro's and con's of each.

0
votes

Write lots of code as many already have written here.

But, write so much that you don't want to write so much more, get lazy basically, the first of the three great virtues.

"Brevity is the soul of wit" -- Shakespeare

0
votes

I saw a huge improvement after I started learning how others (best programmers) code. One of the things I did is started watching "How do I" videos by the experts/gurus of any technology I am interested in.

I see great benefit in Learning Videos compared to reading a book. Not to discount the fact that reading books is a great way too. But videos are more interactive, quick and make a great visual impression (that is if the videos are good)

Tech Podcasts, dnrtv are my other favorites. Read this SO thread.

0
votes

I always have a list of "small" project in my head. Every time I think of a "there oughta be..." I file it away for future use. Then, any time I come across a technology that looks interesting and I want to play with, I compare its features against my project list. If one seems like a good fit, I'm off to the races.

This allows me to always have something more practical than "Hello, World!" to work towards.

0
votes

I think is important to improve your skill that you work on a proyect that really like you
an it's important share your knowledge you others.
on the other site you need to make some research on a topic that you need to know more about.
Finally work on an open source project has been very usefull for me as programmer.

0
votes

Actually programming for a purpose. Once I started working and writing programs that would actually be used by users and not just handed in for a grade I started to get a better understanding of the impact my programs had. I was able see the big picture.

0
votes

Doing fundamental computer science and learning that it's all the same. It all comes down to the same concepts and it's all built on logic and turing machines, and you can do it all the same.

Applying OOP to Assembly and Digital Logic is entertaining...

0
votes

When I began to write code that looked "beautiful" and very clean, my programs started to work almost at first run, with very few bugs. If there are bugs, they tend to be very easy to find.

So I simply look for simplicity, cleanness, and beauty. :-)

Don't ever write code in a "clever" or complex way. Write as clean and readable as possible, and the programs just work and are easily maintainable.

0
votes

Reading good books like Effective C++. Mind you, I had already programmed in C++ for several years, but it wasn't until I started reading good C++ and other programming books that I felt a jump in knowledge, which translated into becoming a better programmer.

0
votes

Doing lots of code reviews with the principle that I wasn't done with the review until I found at least one piece to critique.

Incidentally, in many cases to be able to do such a code review I needed to sit next to the original author and ask them to explain the code to me line by line until I understood it. If you happen to be lucky enough to be asked to review code from great programmers, you will quickly ramp up your skills too.

0
votes

For language proficiency, digging though the core API and writing code that utilizes each method/class. This has 2 benefits:

  1. You learn the API, so you can stop reinventing the wheel.
  2. More importantly, you get a good grasp of the major idioms of the language. This keeps your code clean and readable. Like when you finally stop trying to code procedurally in Lisp.
0
votes

reading, working with others, and general get in and play with it :)

0
votes

Anything that encourages you to write more code. I'm currently working through Project Euler to improve my skills, but I've also learnt a lot in the last year, just through looking at the codebase I'm dealing with at work. Also, reading more books doesn't hurt, although it's best to focus on Software Engineering ones until you know what languages you actually want to program in.

0
votes

1) I made a lot of mistakes and learned from them by asking others or reading
1) Had a mentor
2) Listened to a lot of podcasts and then read up on the subject matters that I heard about
3) Paired programming
4) Reviewing open source projects for style and techniques (and investigating pieces I didn't understand)

0
votes

Python Challenge

0
votes

Writing code not only at my job but also at home. This has given me the time I don't have at work to find out very interesting and useful things.

0
votes

Painfully copying the printed samples from computer magazines in the 1980's. Line by line. Only to figure out there was an error somewhere.

In general, reading other peoples' samples and modifying them; finding bugs in them; extrapolating from them.

0
votes

Moving from the team I was lead programmer in to a new team which deal with a widely different technology I know nothing about.

And then doing it again after 2 years.

0
votes

Wrote a Scheme compiler in C. Not only did I have to learn Scheme inside and out, but I learned all about compilers, how code is executed on hardware, how garbage collectors work, among other things.

0
votes

As a lot of others have said, write A LOT of code, and ensure that you learn languages of a few different styles. By that, I mean don't limit yourself to languages that are similar. For example, if you know Java then learning C# will not be too difficult because there are quite a few similarities (automatic garbage collection, etc) but learning c++ after Java or C# will improve your skills much more because if forces you to think about your app differently. Also, learn to use the correct tool for the job. There is no point writing a simple file transform in Java when you can do the same thing with half of the code in Perl or with standard tools like awk

Doing things that were a challenge for me helped the most

0
votes

In my experience:

  • Practice heavy test-driven development (TDD) until you feel comfortable writing tests before actual implementation. It will make you a better programmer.
  • Have pet-projects on the side or simply participate in open-source projects.
  • Try to team-up with people better than you. Observe what tools they use and how they approach problems.
  • Always find new things that keep you excited about programming. Be passionate.
  • Create. If you're in just for the money, you can forget about being a programming guru.
0
votes
  • Making mistakes and learning from them - One of these was writing a prototype in three weeks which 12 years later I am still maintaining, because I allowed it to go into release, instead of re-witting it correctly.
  • Doing algorithms 300 and especially order of complexity. In someways it is the bleeding obvious, but it crystallized in my mind concepts that I use everyday.
  • Going back to basics and witting code to the OS and in 'C'. (This was partly a reaction in part to putting a a prototype into production.). Makes code so much faster and more robust. I think that as the improvement in the performance of computers flattens out, this will become more important in the future. I am not a big fan of frameworks. I suspect I am in the minority here, and might post this as a question later.
  • Reading 'Code Complete'. From that the biggest thing was the layout of my code and the focus on simplicity.
4
  • I suggest you remove "300" since no two universities have the same course numbers. Also, this makes me wonder how much experience you have. I wish most of the comments here included a "I have N years of school/work experience".
    – Kimball Robinson
    Jun 7, 2010 at 21:37
  • @k.robinson The course I did was Algorithms 300. Generically, '300' courses are at a 3rd or senior year level at University in Australia, and many (if not most) CS courses include an Algorithms 300 unit or the equivalent. Your experience may differ. There may even have been an Algorithms 100 unit, (I can't remember) which, evidently, didn't have as much impact. Answers probably didn't mention the years of experience because it wasn't asked. A better nitpick in order to chastise me, might have been: my four answers rather than the implicit single one. ;)
    – David L Morris
    Jun 8, 2010 at 6:10
  • @David L Morris - I wasn't meaning to chastise you. I was just confused by the 300 because I've been to two universities in the USA, and the algorithms classes had different numbers at both. I thought I might help you improve your answer, was all. :)
    – Kimball Robinson
    Jun 10, 2010 at 16:59
  • @k.robinson Thx. I wasn't quite sure how to take a response to an answer 8 pages down, from nearly two years ago. Incidentally, I should have said 3xx courses. The n00 (or n10) in Australia, are usually courses at the higher level of difficulty or at least subject purity.
    – David L Morris
    Jun 11, 2010 at 3:25
0
votes

Working on a variety of technologies and programs. The key is to continue trying new things, so I guess the ONE thing is challenging myself to do things that I have not done!

0
votes

I read Effective Java by Josh Bloch. Overnight I was a better programmer.

0
votes

A lot of people have said to program, and I agree. Specifically, I like to:

1) Do programming Competitions! I just did my first one this summer and it was actually pretty worthwhile (although I admit, I didn't do phenomenally). It forces you to work on interesting problems quickly. Google Code Jam is excellent for this.

2) Write algorithms I know well (sorts are awesome for this) in languages I've just picked up using the helpful features of that language to do it. It just doesn't make since to write an imperative sort in ML when the elegance comes from doing it functionally.

3) Talk to people who LOVE particular languages about WHY they love those languages. Rather than picking a side in the Perl/Python debate, I'd rather talk to a person from each side about why they like their language of choice and grab the useful bits for future reference.

4) Read Tech Blogs. You'll discover a lot about different languages by reading the blogs of the people who know about them. Of course, this applies to a lot more than programming.

Of course, these things tend to do more to make you a better programmer and may or may not help you with Software Engineering.

0
votes
  1. read research papers [ACM, IEEE] on topics that interest you

  2. try to solve hard problems; even if you fail, you will learn from it

1
8 9 10
11
12

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