I wrote an email to a young developer today:
The number one thing you can do is to get involved in an open-source project. Find a project you're interested in - and will use yourself - and start contributing to it. You don't have to contribute code at first. People always need help with documentation. Whatever project you choose, try to choose one with a commitment to test-driven development. You'll learn a lot reading and writing tests.
Know two languages that are kind of far apart. Ruby and Java are good choices. A functional language and an object-oriented language would also be a good mix.
Lastly, there's some great books to read. I think you'll get more out of these after a year or two of professional development, but you can read them now: The Pragmatic Programmer, The Passionate Programmer, and The Productive Programmer. (These aren't in a series, although maybe they should be.) Read them now, and read them again after a year. Reading them each year isn't a bad idea.
I decided to take my own advice. I'm reading The Pragmatic Programmer again. I read the first chapter over dinner tonight, and I might have to slow down. You'd think after reading it twice before, I wouldn't be struck by ideas, but I was.
The first three sections are sort of ingrained by now, and didn't blow me away, although I enjoyed them. The next section, "Good-Enough Software," applied directly to a situation I was in today. I've got a project that's been on and off and it's back on, but has to be done by June 30. That's not a lot of time, and the requirements haven't changed. It's scary. PragProg's tip #7 addresses this: "Make Quality a Requirements Issue."
With the scope unchanged, I have to think about quality. Is this going to be the most polished piece of software? Definitely not. Is it going to be good enough? Yes.
I'll talk about the rest of the chapter tomorrow.