I get it. You went to college, graduated, got a job, and it’s not what you wanted, hoped for, or whatever. Or maybe you’ve been in the same job for years, and it’s just no fun anymore. And you look at your friends who are hackers. Yeah, we’re anti-social, maybe kinda jerks, but we have so much fun at work, and get pretty well compensated for playing.
And maybe you think, “I’ll go back to school and get a second B.S. in Computer Science!”
Maybe you’re just guessing this whole software thing is for you and you can’t wait to get started!
I’m going to encourage you, don’t get me wrong. But I’m also going to encourage you to be realistic. Because I want you to be successful, not just to sprint down a blind alley. We’ll get through this, together.
Lower your expectations
Look, it’s not all rainbows, lollipops and gumdrops. It’s not. For me, coding is a pleasure and a privilege, but it’s not for everyone. There are extremely shitty jobs out there, doing what I do, and just because I’m on cloud nine, doesn’t mean you will be.
Furthermore, even though it’s a demand-side market (there are far more job openings than talented developers), the really great jobs are still competitive as hell.
I haven’t dissuaded you? Good. Good, young padawan.
Since (for the couple of people toward whom this post is targeted directly) I haven taken it upon myself to train you as your Jedi master, I’m going to point you toward Ruby as your first language. It’s not a perfect language, but it is beautiful, and presents a useful paradigm (object-oriented programming) in the purest form possible. So let’s start with some Ruby resources.
Here’s your pre-frosh curriculum:
- Try Ruby - Learn the basics, in your browser!
- Learn Ruby The Hard Way - Zed Shaw is (maybe) a jerk, but his books are good. This is a good (free) place to start.
- Ruby Koans - Once you’ve got a little under your belt, Ruby Koans is your next step to make sure you’ve got the basics under your belt.
Really? Still Interested?
That’s fuckin’ awesome. I’m really happy you’re still into this.
Now I get to knock you on your ass, grasshopper. Hopefully you’ve read my blog (or know me) enough to know how I feel about learning to build “apps” without a firm grounding in the fundamentals of computer science. So we’re going address this right the hell now.
See, you didn’t major in Computer Science. That’s okay, niether did I. But that doesn’t mean you get a pass on it. We’re going to look at some resources to get you the grounding you need to really get up to snuff on the shit you’d better know if you want to be a Real Programmer™.
Let’s get started.
The first thing you need is math. I’m not talking your standard college Calculus or Algebra stuff, but the Real Math you need as a real programmer. So here’s the deal: read Concrete Mathematics.
This book, let me tell you, it was co-written by Knuth, because, let me tell you, Knuth weighed all the extant math texts in the balance and found them lacking. And if Knuth finds you lacking… jsut go home. This book tricks you into learning both algorithmic estimation and recursion in chapter one and never looks back. It is indispensible.
Next, you need to grok a few things: computability theory, Turing machines, syntax and semantics, etc. Once upon a time, I would have shoved a copy of The Structure and Interpretation of Computer Programs in your face so fast, it would have made your head spin.
But, young padawan, I’ve decided to ease you into your Jedi training, and we’ve settled on Ruby as your focus of practice before you graduate to the full Lisp light saber, so let’s consider an alternative.
O’reilly recently published an excellent intro to CS book called Understanding Computation, which covers about half the material in SICP, but in Ruby, and probably more acessibly than SICP (aka The Wizard Book), especially since you (by now) have a passing familiarity with Ruby.
So let’s see… we’ve got you started on Ruby, given you some good resources on the basics of CS, and you’re on your way… what next?
Now we get into the areas where you’re exploring on your own, and just coming back to me for help and guidance. Congratualtions! You’re nearly ready to graduate to a full Jedi.
Let’s see what’s available.
- Code School is really great, and completely worth the US$25 a month they charge for their entire course catalog.
- Coursera has great CS classes, not typically Ruby based, but you’ll learn some core concepts that will be extensively useful.
- Codecademy has free courses, of varying quality.
- Betamore Academy has 10-week courses here in Baltimore that will bootstrap you pretty well as a developer, as well as providing networking opportunities to find internships and jobs.
I’ll try to update this in the future. And you know you can always get in touch and I’m more than happy to give you a hand. There’s nothing more exciting to me than smart folks falling in love with coding. Happy trails, bro, and remember to keep it fun.
Update: I’ve posted a follow-up at “Just Get Hacking”