Learning to Code Isn't Binary
Early 2013, NYC:
“So, could you build Kickstarter?” asked the lead developer.
“Ummm…well…I…not right now. I don’t think so, no.” I responded.
With that one question, my initially hopeful day instantly darkened.
I was meeting with the partners of a software development shop about a potential internship, and things were going splendidly - until their lead developer kickstarted me back to reality.
I can’t help but think back to that day in 2013, as I sit here at my desk and reflect on the last couple years of my life - spent primarily on learning to code.
More specifically, I’ve been thinking about the way I looked at learning to code.
I’ve been trying to get a lot better at this, but at the time, my thinking was extremely black and white.
Something was either on or off, good or bad, right or wrong.
One or zero.
There was no middle ground.
And so it was with learning to code.
I either knew how to code, or I didn’t.
I now realize how preposterous that attitude was.
I mean, I get it. Through the power of ad retargeting, I’ve been bombarded with ads like “Learn to Code in 12 Weeks”, “Get a developer job after 90 day bootcamp”, and so on.
Maybe I’m just being persnickety, but they should really think about the message they’re sending. “Learn to BEGIN learning how to code in 12 weeks” is way more accurate (and equally less sexy I’ll admit).
It can seem nearly impossible for someone just learning to code. Half the time, you can’t even get your development environment setup properly, let alone try to actually work through a tutorial.
In the moment, that’s frustrating as all hell. However, this is where the magic happens. This is where you push yourself just a little bit further each day to solve one more problem.
If you think fixing a stubborn development environment is a waste of your time, you’ve got it all wrong.
It’s a craft. It’s a process.
Wrestling with your tools isn’t just some rite of passage. It is an opportunity for you to ask yourself, “OK, what’s happening with my system right now? Let me really try to understand what’s going on here.”
It’s an opportunity to learn how to learn.
When something goes wrong with my code, and oh boy do things go wrong (for everyone), my natural inclination is to think “you ducking fumbass. You’re such an idiot.”
That’s obviously not very constructive though now is it?
I instead try to accept that my code is not perfect. Nor will it ever be.
I use these moments as signals to ask myself again, “What’s happening in the system right now?”
Late last Fall, I felt a marked shift in my skills. Perhaps a shift in my meta skills. Kind of a level above the specific skills of programming.
I felt like I had finally started to grasp how to pick up and learn new technology.
I went from just copying/pasting, wondering what the heck went wrong to taking a step back, and asking, “What’s happening in the code right now?”.
I was going through the venerable Michael Hartl’s Ruby on Rails tutorial for the third or fourth time one evening in 2014 to refresh myself on TDD.
Rather than go back and check that I copied the code correctly, I was actually thinking about the code path - inputs and outputs - and making the adjustment based on that assessment.
It’s usually counterproductive to stress about learning stuff before you need it.
Do you have a cool idea that you’d love to build, but are just completely overwhelmed by it?
Well, start by breaking the problem down to its constituent parts.
Then break it down some more. Then systematically and methodically solve each piece. Learn things as you need them.
It’s easy to get caught up in tutorials and videos. But tutorials and videos without actually writing any of your own code aren’t going to get you very far.
Oh, and stop comparing yourself to others. Everyone’s situation and circumstances are different. Your only competition is yourself.
Be just a little bit better than you were yesterday.
Keep doing that day after day. Beat yester-you.
If you’re saying, “F that, I wanna compare myself to others!” Okay, compare yourself to none other than Ruby on Rails maestro, Obie Fernandez.
I sat beside him during an internship one day, and immediately thought aloud, “Holy crap, you Google code questions too?!”
He just laughed at me.
Even Obie Fernandez can’t shove all there is to know about software development into his head. It’s simply not possible. So give yourself a break. Be kind to yourself.
Be patient.
Because having a sense of urgency on the macro level of your life is dangerous (i.e. “Learn to code in 90 days!!!”).
It’s flawed from the start because despite what your momma told you, you can’t predict how life will unfold. Maybe you’ll pick things up quickly. Maybe you won’t.
Have a general plan, and set your general course. Adjust along the way. Set yourself little waypoints.
Create a sense of urgency on the micro levels of your life. Do the little things you need to do to move the ball forward.
Read a little. Code a little. Read a little. Code a little.
Show up to your keyboard each day, and try to be better. Push yourself just a little bit further.
One day you’ll look up at your text editor, and say to yourself, “Holy crap, I actually feel like I kinda sorta half-way know what I’m doing now!” (hehe I’m being a little facetious, but fellow developers know what I’m talking about).
So, could I build a Kickstarter-like site?
Absolutely. Give me enough time, and I’ll build you two ;)