views:

365

answers:

14

G'day,

This question is being asked from a programming/work point of view rather than from a lifestyle/general point of view in this question "How do you pull yourself out of a programming ‘slump’?"

I'm just finishing a nice two week holiday which was taken after working on a project that needed some serious hours. During my holidays I spent a few days going back and working my way through K&R C. I've found this to be uplifting and it definitely reduced my level of burnout.

What would you recommend as next steps to further increase the passion?

Some initial thoughts are:

  • learn a new platform - thinking of Android development by working through the PragProg book on Android
  • learn a new language - thinking of working though the new pickaxe book for Ruby
  • revisit another language - thinking of gaoing back and working my way through the Camel book for Perl
  • learn a technology to a deeper level - thinking of getting further into Apache processing, esp. module design and implementation.

BTW I've been programing since 1975 and my Dad started programming in 1956 so I guess it's "in the blood".

Edit: This question "How do you keep the passion for programming if you have done it for ages or achieved it all?" has some interesting answers. It didn't come up when I searched because it is more career focused.

cheers,

+2  A: 

Why not try development on another platform completely? Try learning to use AVR (or PIC, Propeller, or other) micro controllers. It's a completely different way to think about programming, and will require that your code be small enough to fit in the chip.

samoz
+3  A: 

I always find renewed passion for computing working with languages and compilers. They wrap up many layers of computer science in a beautiful, abstracted machine.

Some books and topics to light the fire:

  1. Compilers: Principles, Techniques and Tools (aka The Dragon Book, but doesn't have a Dragon if you are in the UK)
  2. Modern Compiler Implementation in C (Appel, Cambridge Press) NB. There is also a Java equivalent but that smells.
  3. Regular Expressions and Finite Automata - Cambridge (IIRC)

Anyway, that "Maths minus the numbers" stuff really floats my boat, and no more is it applied than in compilers.

A great mixture of compilers and scary implementation is distributed processing exposed through a domain-specific language. Project's along those lines are quite good because you can code the seed and let it grow without too many KLOCs.

Aiden Bell
I agree. I seem to always come back to programming language design/compilers eventually and it seems to revive my love for programming
Dan
+1  A: 

I usually try to learn a new stack (lamp, rails, django, whatever) and use it to write something that I'm actually going to use. Otherwise, it's easy to lose interest halfway through.

Another idea would be to try to integrate a new toolchain to your current projects. Not using build scripts? Integrate them with 5 of your existing projects. Other ideas would be document generation, shared components (login, exception handling), dependency injection, or code generation.

Tim Hoolihan
+1  A: 

Try to build on successes, the next thing you do (even if its a small 1 day activity), do the best job you can, then, you can look back on it, when you do the following thing, and think, "I can do this !!"

Mike D
+1  A: 

For me if I have these years of experience (from 1975 WooW), I'll start develop my own language, OS, and other internals

Ahmed Said
+1  A: 

I can imagine that picking an open source project with a topic you find interesting, working through the code and making sense of it, maybe implementing an interesting feature and the like would be nice. If you pick a project that uses a language you're not too familiar with, you'd even learn a little bit more.

balpha
+9  A: 

Make your own language and compiler. I hear good things about the Dragon Book.

David Johnstone
Valid point that shouldn't be downvoted. +1
samoz
@David, ooh, revisit the Dragon book. I did that back in '92 after working on a system for NATO in Munich. Learnt lots of fun stuff about hashing and jump tables that I could apply to parts of the system designed by others. Finished up improving an address lookup function so that, for worse case input, it was retrieved in 15 seconds instead of 49 minutes as the existing system was doing. (-:
Rob Wells
I found that the Dragon book lacks some pointers on implementation approaches, and leaves you open to pitfalls that are a pain-in-the-arse to learn yourself. Great on theory though.
Aiden Bell
+3  A: 

Like most people on SO, I tend to work mostly on Plain Jane business apps. To keep things fresh, on my own time I like to look into the "cooler" areas:

  • Operating Systems
  • Compilers
  • AI
  • Neural Networks
  • Game Development

Interestingly enough, quite a few things you pick up while playing around in those areas will help you in your day-to-day business programming tasks. They certainly help you "think out of the box" when the need arises.

Giovanni Galbo
+2  A: 

How about finding a new and stimulating project to work on using your existing tool chain? I have to wonder about programmers who float from language to language and platform to platform... do they ever get good at anything?

Surely there is more "thrill of the hunt" in closing in on the solution to an interesting problem than gaining a cursory familiarity with yet another programming language! For that matter CRUD is CRUD, and switching from programming in C to Z doesn't change that a lot.

Just a suggestion.

Bob Riemersma
This is a rather interesting perspective. Could you build an entire house with just a hammer? Probably not. There's something to be said for knowing what the right tool for the job is.
Eric
@Bob, but one of the things always mentioned as an advantage when learnng new languages is that it gives new perspectives that you can apply to your existing toolsets. I read of this when people discuss Erlang and Haskell
Rob Wells
+3  A: 

Most of the above answers suggest in one form or another do more harder or different programming. I'd say do the opposite. Take a break from programming do something very different with your spare time for a few months; paint, write a book, take up judo. Anything that has nothing to do with programming whatsoever. After awhile, my guess is you'll miss programming, and when you get back to it really enjoy it. The old cliche is true, 'a change is as good as a rest'.

FWIW, you've got a few years on me, I didn't start programming seriously until '78 :)

Shane MacLaughlin
+3  A: 

Try this: Don't do what you want to do. Do something on your own, but let someone else decide what it is, preferably something that you would never have picked on your own.

dicroce
+1  A: 

When I burn out on 'regular' programming I like to sometimes relax with an easy program that gives immediate fun results. In the past I've made a physics engine with some 2D boxes, a particle effects simulator with gravity and interesting effects, a paint program to replace mspaint (which I still use from time to time), and other such apps.

Having a graphically oriented program to work on means you get to see the results of your work quickly and small changes can have a big visual impact. I'm thinking next I'll play with 2D fractals and L-systems.

Ron Warholic
A: 

"We succeed in enterprises which demand the positive qualities we possess, but we excel in those which can also make use of our defects."

-- Alexis de Tocqueville

+1  A: 

rather than diving into verbose languages, that are extremely close to the machine, as c is, maybe you should try some languages, that are a little high/rich/dynamic/permissive ... ruby, haXe, javascript or actionscript, objective-c ... try to find languages, that are powerful and concise ... by the way: the ruby book you mentioned is realy excellent ...

or maybe try functional programming, for a change ... or mixtures ... if you learn OCaml, you can contribute to the haXe compiler, which is open source ... would be a good starting point for diving into the compiler/languages thing ... still, in my personal opinion: the most difficult thing about creating a language, is designing it ... unless you want to create something that is already there, or even less usefull than things that are already there ...

back2dos