tags:

views:

308

answers:

11

I've been brushing up on Steve Yegge's blog posts, and one of them (Moore's Law is Crap) talks about cross-training:

Cross-training improves you every bit as rapidly in other disciplines. That includes programming. If you're cranking out code as easily as breathing, then if you're getting better at all, it's so gradual that you'd never notice it happening. You won't have great insights until you get new perspectives from working hard, even if only occasionally, at stuff other than what you already know.

Steve might have a later blog post that I haven't read yet that discusses this more, but what (if anything) do you do to continue learning, or cross-training?

A: 

I recently purchased two new books on mathematics (one on statistics and Concrete Mathematics), with a goal of going back over calculus (as well as teaching myself a little bit of multivariable calculus), statistics, and discrete mathematics and their applications in software engineering and computer science.

Thomas Owens
+4  A: 

Learn languages from a different paradigm as your preferred one. If you work eight (or more) hours a day using a procedural or object-oriented language then try learning a functional language like Scheme or Lisp, or a logical language like Prolog. Getting your mind to work in different ways will help you improve.

Bill the Lizard
+3  A: 

You could consider getting some extra disciplines on board:

  • Project management
  • Business Analysis/System Analysis
  • Software Architecture
  • Database Architecture

You could improve your knowledge of a certain industry (like finance, medicine, insurance, travel etc) so you could specialise in the future

Ilya Kochetov
+2  A: 

I believe that the only way you can improve is to find your weaknesses and improve on them. If you know the language well but struggle with the logic, then brushing up on that will make you twice as fast.

Sadly, many people tend to ignore their weaknesses or to write them off. Simply by realising that you're not very good at something is the first step, and obviously the next step is looking to improve on that flaw of yours.

It's a simple matter of plugging holes in your knowledge. If your logic skills aren't great brush up on Mathematics and Logic. If you cannot program in a Functional Programming language, learn one. If you struggle with requirements perhaps give Systems Analysis and Design a look.

EnderMB
+1  A: 

I'm working very hard on improving my people and leadership skills (even though I'm probably a bit of a ways off from becoming any sort of leader at my company - I'm preparing). I do so specifically by reading books (Stephen Covey, John Maxwell, Ken Blanchard and on and on...), and listening to talks recorded by any leaders of great stature. I also actively try to mix with the right kind of people.

To me, life has stopped revoloving around code (or computers for that matter). Even so, I would hazard a guess that I'm becoming a better coder because of gaining perspective from other people.

Johan
+2  A: 

Rate yourself on the Programmer Competency Matrix and concentrate on areas where you are lacking.

Bill the Lizard
I like that kind of matrix, but it's lacking a number of things. Like the various phases of development.
Thomas Owens
A: 

What Im's learning as cross training is typography. As virtually every programmer is creating UI more or less. One example of what I would expect every CS graduate to know and use today: http://24ways.org/2006/compose-to-a-vertical-rhythm

Also programming is communication more today than in past time. So traning for conflict communication or asertivity often helps to an programmer.

Tomas Tintera
+2  A: 

Here are some things that work for me:

  1. Cross-training in other technical fields, particularly mathematics and physics. These are core aspects of the world that we live in, they make you think outside your comfort box and have the bonus point of helping when you get the "Dad, why is the sky blue?" type questions....

  2. Cross-training in non-technical fields: I discovered that I love being an amateur car mechanic. There is a visceral and immediate gratification that comes from jacking up the car, scooting under there and solving a physical problem. As a side benefit, it puts you in a situation where you can think for an extended period of time.

  3. Other self-development: running, tae kwon do, whatever appeals to you. Work on yourself and your brain will come with you.

Finally, writing is key. If you spend some time to learn to make your points in print, you will never be sorry.

Bob Cross
A: 

If you want to boost your social skills, consider having kids. Although this has severe implact on your available time. ;-).

Gamecat
I think you missed a step before having kids :)
John Ferguson
Yeah...like perhaps having a home and job? Oh. And the girlfriend/wife part.
Thomas Owens
+1  A: 

I would say, cross-train on the environment/infrastructure you develop against. For example if it's Windows, learn everything you can about the Windows operating system and throw in some Active Directory while you are at it. If you are a Windows web dev, learn everything you can about IIS.

I'm surprised at the number of devs I run into with only a very basic understanding of the system they write code for.

I would even go as far as to learn how your application and data is stored. Why it's important to have it run with Raid 5 or 10, etc.

Chris Roland
+1  A: 
  1. Read books about any subject other than programming. Many if not most of the great innovations in software are made by people that borrow ideas and metaphors from other fields. Plus it will make you more interesting.
  2. If you can't fully purge your Inner Geek, read about (non-software-related) engineering disciplines. Programmers just build virtual machines, and it helps to learn how people have dealt with the general problems of machine-building over the last couple of centuries. I got a great insight once into the benefits of handing mature products off to a new team by reading about how Rolls-Royce and Packard engineers jointly developed the Merlin engine (made famous by the Spitfire and the P-51) before and during WWII.
MusiGenesis