A developer recently skype’d me out of the blue and asked me what ‘best practices’ would make them a developer.
Make Things. Ship them.
Everything I’ve learned as a developer has come from making things and shipping them. In my professional life, I’m batting about .700 for shipping. In my personal life? .250.
I have plenty of projects in various stages of completion, but none that are actually finished. I get to a certain point and just stop working on them. Here are just a few projects I haven’t finished:
Edit It: An editing tool for Stack Overflow that flags the most recently asked questions that need the most editing work. It uses an editing score to determine which ones need help (misspellings, grammar). It uses a spelling module and the Stack Overflow API.
Stack Stats: If your Stack Overflow profile page looked like BF2s.com (anyone else remember BF2s.com?)
OpenGrok support for TFS: (This one is actually ‘written’, just in the other 80% of programming: Debugging and testing)
Restore Gene fixes for AWS: Have you heard of Restore Gene? There are a few fixes I’ve made for that project, but haven’t shipped them.
Freelancer+: (think Uber for Tech freelancing. I know, pulling the uber card is a tiring meme, but who said I was original?)
Out of all these projects, I’ve learned a little; but I’ve always stopped before the crucial learning moment: Before shipping them. Before making them real in the eyes of the outside world. Fear sets in. What if it sucks? What if people don’t like it? What if nobody cares? How can I be good enough? I’m not a real programmer.
Every project that has propelled me forward has been a project I shipped.
I learned Perl through maintaining and shipping 10 websites in 10 weeks that used Perl as their backend.
I learned C# and Winforms through creating and shipping a rather crappy tracking system in college during my senior year co-op.
I learned ASP.NET MVC by shipping not one, but two versions of a CMS. One is no longer in use (the maintenance programmer decided to go a different direction), and the other I’ll probably scrap for WordPress, but they’re there. They were shipped.
I learned Python by shipping a CMS add-on for producing regularly updated content about Stocks.
I learned how to be a DBA by saying “yes”, and taking over DBA Work. Now, in addition to programming, I’m quickly becoming a DBA (though more of an accidental DBA).
I learned how to be a dad by having kids.
Shipping teaches. You can program all day and night, but until that magic moment arrives when you ship, you haven’t taken the next step. You haven’t really learned.