views:

1253

answers:

24

What would you say are your best kept secrets to keep yourself in top programming shape?

+17  A: 

I think that is the best way to improve is to practice - code as often as you can. Once you are coding, you are making mistakes - once you are making mistakes, you are learning.

Also read The Ultimate Code Kata.

Galwegian
+5  A: 

I read (yes, physically books and magazines, as well as online articles and webcasts) all the time. Luckily my employer requires us to constantly self-improve.

Bob King
I would like to work at a company that has that sort of requirement some day!
SkippyFire
+1  A: 

Keep programming everyday, read blogs about programming, and also play games!

Chii
Hahaha, interesting, thanks!
Nano Taboada
+2  A: 

Depends on what kind of programming you mean, but I think you can't go wrong by practicing on all the algorithmic and design contests at TopCoder, which is excellent for this purpose.

Adrian Petrescu
+21  A: 

Every morning I spend 10 minutes weightlifting my entire collection of C++ related books. That keeps me in shape.

Dave Van den Eynde
+1 HAHAHAHA, I was not expecting this
Peter Gfader
+1 hah my my what an answer!
Andreas Grech
+1 Great tip. Now I know what to do with my own collection of tech. books never read.
Abbas
+7  A: 

Help out in programming forums and places like StackOverflow. Then not only are you keeping yourself current, you're helping others learn at the same time.

Joel Coehoorn
Appreciated your comment!
Nano Taboada
+1  A: 

Solving coding problems is always a good way.

One place to practice this is in TopCoder competitions.

workmad3
Interesting, thanks!
Nano Taboada
+4  A: 

I go to sites like this (and forums.msdn.microsoft.com and google groups etc) and read peoples questions and try to answer them. Frequently I had no idea what the answer is until I research it or try out some code.

James Curran
+1  A: 

Helping others and listening to others in IRC or on forums/QA sites like this. Taking snippets of code from blogs and adding a few features to them to ensure I really understand the concepts rather than just reading and saying thats good.

redsquare
+3  A: 

Since I am primarily involved in .NET application development I have started reading MSDN Magazine (via the website). Its also good to walkthrough others code, help others with problems and to just code!

WACM161
Interesting advice. Thank you!
Nano Taboada
+1  A: 

I frequently open up a file I haven't recently touched and refactor it to be exactly as I think it should be. Somehow I always find stuff to improve. This includes writing tests for an untested part of the system.

p3t0r
Good idea, thank you!
Nano Taboada
Quite interesting approach, thank you!
Nano Taboada
+4  A: 

Learn other programming languages. It seems to me that there are different mindsets for programmers in different languages, Java programmers think in different ways from .Net programmers, etc. So by learning a different language and being somewhat aware of the discussions / projects going on in the different language, you can think differently about your primary programming language.

For example, I learned/understood polymorphism and MVC from Python, despite having been exposed to it in VB.Net (my primary work language). I also developed great benefit in knowing the open source projects that are underway in Python, which are not the same kind of projects you see in the .Net community (e.g. there is some overlap but not more than 50%). This was very useful when suddenly I needed some specialized string parsing functionality, and was aware of a Python strategy for attacking it. I converted the idea to .Net and did my job far faster than my boss expected.

torial
I'd keep that in mind, thanks much!
Nano Taboada
+4  A: 

A few people have already mentioned TopCoder. I also recommend doing TopCoder problems, but with some specific variations:

1) Don't actually participate in the single-round matches (unless you want to for non-skill-building reasons). Rather, go to the practice rooms, open up the hardest problems, and spend a good couple of hours putting together a really good solution. It's ok if you have to spend a lot of time digging around in textbooks and on the internet; the point is to learn the details, not to prove you already know them.

2) Consider doing problems in a language you don't know very well. This can be a great way for someone who works with (say) C++ in their day job to brush up on (say) Python.

3) Do the "multicore threadfests". Heavily multithreaded programming is important and becoming more so by the day, but it's relatively hard to exercise your multithreading chops on your own, since you'd need to make up pretty elaborate problems to expose the difficult corners and visualize the potential benefits. The multicore threadfests provide these elaborate problems.

chrisk
+1  A: 

I generally try to solve problems that seem difficult from my perspective, or learn new languages. I also like "reinventing wheels", preferably at the lowest level possible. Its certainly improved my coding abilities over the years.

Writing bytecode, assembler, as well as compilers and interpreters with C++ has been particularly useful, since it helps to develop an insight into the mechanisms underlying which every program you are writing.

jheriko
Sometimes I like reinventing wheels too, thanks!
Nano Taboada
+2  A: 

Read one technical book for every quarter. Recommended list from codinghorror

Learn one language for a year. One functional language one structural language etc.

Try to solve problems in sites like Topcoder and ProjectEuler.net

amadamala
I'd love to be able to do that, unfortunately I'm still at the uni and I haven't the time. Thanks for the comment!
Nano Taboada
+2  A: 

I read technical blogs, write regularly in my own technical blog, try to read a programming book on the side, and work on a side project in a new language so I can learn that language. Note that none of this was forced; I'm simply currently not fulfilling my "fix" at work.

Side projects are nice because like p3t0r said, you get to refactor a side project over and over again. At work, there's always a budget preventing you from doing that.

moffdub
Mind sharing the URL? :)
Nano Taboada
+2  A: 

Learn a new programming language every year, and then implement a small language in that language.

Arthur Vanderbilt
Nice, thank you!
Nano Taboada
+1  A: 

Practicing problems at spoj.pl, topcoder.com is great, besides visiting stackoverflow to get help and help others is very useful.

Also, keep doing a side project as time passes by, try using new and different technologies & techniques in these project. And, besides that also try shifting the domain of your projects once a while to have a variety.

Making a game teaches a lot :)

Read this - http://gist.github.com/6443 Start a side project - github founder

Abhishek Mishra
+5  A: 

I definitely prefer Project Euler to many of the others because it's more focused on the actual programming and not on trying to display the output perfectly to pass their unit tests.

PhirePhly
+2  A: 

Try to find new challenges in work or outside it (http://computinglife.wordpress.com/2008/04/15/optimization-pays/)

Reade + Write Technical Content.

Participate in discussion forums such as this, and learn from the collective knowledge.

A: 

Two things, (1)Practice with your computer (2)Know why your need what you are learning. Reading blogs, journals, tutorials, conferences, discussion and everything else just mentioned should all end up as things you PRACTICE with your hands on the keyboard and discover the reason WHY you need what you learned. You can learn a lot by reading and oral discussions but none of it sticks until you prove to yourself that you can do it, know when to do it and know how you should use it in practice.

A: 

Go read 99 ways to become a better developer

Eran Kampf
A: 

Get addicted to stackoverflow.com. Gee, I am out of shape. :(

Kai Wang
A: 

learning how to develop code is futile. someone in India WILL take your job. Funny thing is I migrated from India seeking a better life. Now the same people are making my life miserable. I have embarked on learning the WHOLE stack. from SAP TO BIZTALK TO SHAREPOINT TO YOU NAME IT. just coding in c# or vb.net is going to lead you nowhere. trust me