Slow down. Learn the Fundamentals. And Hustle. Because learning to develop good software takes ten years. A lot of people will disagree with me on this. A lot of big people already have and many of us are still cleaning up that mess.
In How to Design Programs, the authors said it well, “Bad programming is easy. Idiots can learn it in 21 days, even if they are Dummies.”
But this isn’t 1991 and the tragedy that was Visual Basic (VB). This isn’t a time when the 21 days paradigm turned everyone - from Help Desk Support to Accountants to Managers to Lawyers - into overnight programmers. Yet, still this notion of learn to program overnight lingers more tragically than even The Bard himself could imagine.
Why is everyone in such a rush?
In Teach Yourself Programming in Ten Years, author Peter Norvig posits the quintessential question in this knowledge arms race, “Why is everyone in such a rush?”
To bring the point home, Norvig did an Amazon search to see how many book titles promised to teach you something in X amount of days. He received 248 hits. Later he swapped days with hours with similar results at 253 hits. Norvig goes on to note that 96% of the titles returned were computer and programming related. That was 2001.
Fast-forward to 2011 and the results are even more astounding. If you want to teach yourself something in X days, you’ll find 950 titles at your disposal. Swap days with hours and you’ll find 675 titles.
That’s 3 to 4 times more titles than just a decade ago. In both cases, programming titles are the the overwhelming majority. In particular, the hours category has a higher density of computer programming books than the days category.
Hours? Learn to program in Hours? You can’t learn the necessary fundamentals in hours, nor days. It takes years! It takes Ten Years!
The Fundamentals - You can’t rush good wine!
Like good wine, you can’t rush good programming. It will take time. You won’t learn it in 24 hours. But with passion and purpose and lots and lots of practice, you can get good - really good!
You don’t necessarily have to finish a four-year Computer Engineering or Computer Science program. But you do need drilled, hands-on fundamentals. For everyone, where you get those fundamentals will be - guess what - fundamentally different.
For some, you will be an apprentice to a parent, older sibling or mentor. For others, you might start programming games as a youngling. Still, for others, you will go to University for the fundamentals and if you are lucky, leave before the other nonsense.
But each of you will have a different, diverse story and that’s Ok! That’s the DNA that will shape your decisions and the projects you pursue.
The point is there are fundamentals in the development game and no matter how you get it, you better have it! You can’t rush the fundamentals either - they need time to mature and coarse through your veins. The fundamentals need time to learn you!
You’ve got to Hustle to get Good!
Sorry to say, but you’re not going to get good grinding assignments in a grey cube for eight hours-a-day. Nothing inherently with the color grey stops you either. It’s just that mentorship seldom takes place in corporate life.
If you have the opportunity to learn from a master developer in a corporate environment - consider yourself lucky and thank him or her. But most importantly, when it’s your turn, pass on what you’ve learned.
But for the other 98% of you, the mentorship isn’t coming so you’ve gotta hustle. You’ve gotta get out of your comfort zone and work on different teams shipping different types of software.
You’ve gotta work for the megalomaniacal failed bed bug researcher turned IT Executive since he can tell a great story and once taught a call girl Excel.
You’ve gotta work for the spoiled rich kid who will make you Director of Technology (or pick your own title) if you promise to work 21 hours a day and hook an intravenous (IV) of Red Bull to your medulla oblongata.
You’ve gotta work for people who’s agenda is everything but making good software. It’s in those darkest hours that your judgement is intensified. It is in those darkest nights that your character is solidified and your religion hardened.
Those are the times where you’ll learn what’s right, what’s wrong and what needs more time to simmer. Those are the times when you’ll get to see the effects of bad architecture and bad design and how that makes your Users feel. Those are the times when you’ll learn which decisions make sense and which don’t. Those are the times when you’ll learn to say, “Hell No!” and mean it!
But most importantly, those are the times when you’ll either learn to take responsibility for the software decisions you make or you’ll join the countless many who’ve decided to never take responsibility for the decisions they make. These are the experiences that make great product designers and you will draw on them time-and-time again.
Spartan or Arcadian? Warrior or Brawler?
The way I see it, you have two choices. Learn from Dummies and be an Arcadian - a brawler at best. Or face your personal Agoge and emerge a Spartan - an Elite Warrior.
You can make the cleanest light saber you want. But you can’t be a Jedi until you’ve faced your Vader. You’ve gotta hustle! And if you survive, you will have joined the elite and be able to smell bullshit and bad code a mile away - sometimes at the same time.
And in that time, you’ll learn to appreciate Design Patterns, Software Architecture and Modern Object Oriented Design. In that time, you’ll learn to love Object Relational Mappers (ORM), Separation of Concerns (SoC) and User Experiences (UX).
Programming for Dummies won’t teach you these - Dummies don’t care about these! They care about getting things done the quickest so they can look smarter than you. They don’t care about the end User. They don’t care about how the software will be installed. They don’t even care about how they will maintain the software. But you must!
Dummies care about the latest IDE and the latest shiny runtime features. They don’t care about the deep mentorship and bonding that comes from Code Reviews and discussing best practices with an open mind.
Programming for Dummies won’t teach you to appreciate data integrity or domain modeling. Programming for Dummies won’t teach you how to value your software team. You’ve got to learn to value these precepts on your own!
Don’t back down - Step up!
You don’t want to be an Arcadian, you want to be a Spartan. We need you to be a Spartan. And that’s not happening in 30 or 21 days. It’s not happening in 24 or 12 hours. And it’s certainly not going to happen learning from Sams or any other Dummy.
But you can do it! You can learn the proper Software Development Life Cycle (SDLC). You can learn to care about your users and your team. It’s a lot to learn and a lot to take in. I know this and I know it can seem like a mountain to climb. But always remember this: It Ain’t the Size of the Dog in the Fight, It’s the Size of the Fight in the Dog.
What’s the rush? Slow down. Learn the Fundamentals. And Hustle. Cause learning to develop good software takes ten years. Hustle and Code. Get used to it.