- Practice! Practice! Practice! You learn to code by, um, reading and writing code! If you don't have much experience and want to get started, find an open source project you care about and contribute a patch or two. The "View Source" feature of Web Browsers and the open source movement are 2 of your greatest assets when learning to code. Use them! As someone who started his career copying BASIC programs from Compute! and Byte magazines, I can't tell you how great it was to discover the magical "View Source" menu item in Netscape. Open Source projects will teach you about packaging, style guidelines, automated testing, bug tracking, and version control -- while also giving you much needed practice.
Don't forget, your code doesn't *work* until someone else uses it. If you can't work at a startup and need to get code into the hands of users quickly, open source projects are a great way to go. I still recommend going with the startup, though. At Knewton, everyone from summer interns to new full-time engineers ship code (that customers actually use) in their first couple weeks of starting. I'd like to get this down to the first day.
In your early practicing, make sure to develop really strong habits. I learned the most of my habits from Steve McConnell's Code Complete and Kent Beck's eXtreme programming. Write code others can support if they need to, but try to make it so they don't need to support it :)
I'd also recommend checking out PragDave's Code Kata site to work on solving problem:
- Work at a startup! You will learn more in your first month at a startup than you will in your first year in any other company. The first company I worked for was a 3-person shop in Syracuse, NY. I learned everything from how to become a practicing software engineer, to how to be a customer support person, estimate and bid consulting jobs, write requirements, QA, write user manuals, configure SQL Servers, configure IIS Servers, configure linux firewalls ... If your first job entails you being handed requirements that you then write code for and hand "over the wall" to QA - run!
Don't just take my word for it. Here's what one of our former interns who recently graduated and landed a sweet job in CO had to say:
"I had NO experience as a coder. You guys gave me a LOT. In fact, more skillz than you can really understand. Things that transferred over beyond Ruby, RUnit, Rails, MySQL unix commands (I'm loving that I actually understand how to use the CLI in my Ubuntu set up btw...), etc - more the ability to take a bunch of instructions I barely understood and google my way/solve my way to a solution."Chris Dixon also has a couple nice posts on this topic:
More specifically, work for my startup:
If there's nothing interesting to you there, check out these couple of other sites:
- Don't be afraid to make mistakes! or Perfection is for popes and Chinese emperors.
In 1999, I got my first big job at an online brokerage (Datek) in NYC. This was back when everyone, probably including you, traded online and doubled their money daily - basic fundamental laws of economics changed... until they didn't. The day of my first big release, I took down the ability to login to the production site at market open. This was, as my CTO at the time reminded me, "reeeeaaaaaaalllllly baaaaaddddd." However, we talked through the problems and took the appropriate steps to ensure I couldn't make the same mistake again (it involved improper DB connection handling, lack of performance testing, deployment timing and rollback procedures). If he fired me, maybe I'd feel differently about making mistakes. Fortunately, for me, he understood these types of mistakes will happen -- as long as you're willing to grow from the mistakes and not repeat the same mistake twice.
Don't forget that coding is a creative endeavor; typically, there is no one correct solution. Be prepared to try several.
- Reality...zen and the art of "boring" tasks.
Monday, March 1, 2010
On becoming a practicing software engineer
If you're a recent or soon-to-be college grad (or maybe you realized your undergrad degree in Art History ain't gonna pay the bills) and you are passionate about computers and computer programming, here are my tips for becoming a successful practicing software engineer. Many of these things probably aren't the things they taught you in your college programming classes, but all of these are important.