This is a post about a technical subject: coding. But to be clear, I do not have a technical background.
I am the proud son of an artist who taught me how to use my emotions as a guiding compass to navigate life, rather than logic. Clay, graphite, ink, paint, canvas, paper and adhesive run through my veins.
I struggled in school for many reasons—among them were two learning disabilities: cerebral nerve damage from complications at birth and dyslexia and that would go undiagnosed until my late 20s. My best test scores were so bad I almost didn’t get into college.
I studied political science in school and my first failed attempts at a career were in Film and Graphic Design.
I taught myself how to code—it’s one of the hardest things I’ve ever done. I’ve also been teaching code at a bootcamp here in D.C. for about 5 years and mentoring friends on and off.
While it is hard, it is not impossible. When you’re self-taught, you’re learning bits and pieces. Sometimes something makes sense immediately, while others will click years from now. The path of explanation is well-trodden but I’ve found your life experiences, dispositions and education mean that half your battle is finding the right learning resources.
Two things before we begin:
- If I can do it, so can you.
- You’re not alone.
New vocabulary, new concepts, new… everything
One of the tricky barriers to learning to code is that the terms used to describe anything in “code speak” can often mean something else entirely in regular English. My go-to example is the word “Class”.
Unlike the academic or sociological connotations we’re used to, a Class in programming-speak is different depending on which language programming you’re using. Still more confusing in these different programming languages, a Class is both related enough conceptually to draw parallels of likeness as to why its original authors chose it to be called a Class, but the actual use is different enough really be something else altogether. (Specifically CSS classes vs Object Oriented Classes)
Speaking code is almost akin to slang, which as any parent knows, is frustrating. It can be hard at first to flag what’s a normal English word and what’s a “code” term.
Moreover, you often hear them in rapid-fire succession, so a full code-speak sentence will be grammatically correct and you will know each of the words separately, but not when arranged in this way.
“After I flushed both the browser cache on local and asked John to clear the server caches on staging, thinking it had to be some kind of persistent memory or state issue, it turned out a naming collision overwriting the invocations defined earlier in the root. I’ll make a ticket to add source maps so we can track down instantiations easier instead of grepping the repo.” -Actual sentence I said to my boss, who nodded approvingly.
Not just starting from scratch, defining what scratch is
On top of that, there are concepts that you’ve never had to encounter before, much less fight with.
An example I like to use with my students is:
Say you want to program your computer to make you a cup of coffee. Simple right?
You: Hey Computer: make me a cup of coffee.
Computer: BEEP BOOP: SURE PAT. WHAT IS COFFEE AND WHAT IS MAKE?
Imagine all the ways you could make coffee… then imagine the process of getting the coffee bean from the tree it grew on, into a form that you can use in this process… yikes.
We’re starting from scratch often, and even small, simple things to us are actually often stunningly complex to accomplish with code.
You don’t just have to program things, you have to define what they are in the first place. Then, you have to reinforce your code to handle all the possible ways it could go wrong. Simple tasks become stunning cathedrals honoring the gods of the explicit.
“Just Google it”
Perhaps the advice that infuriates me most from my peers to new developers is to “Google it”.
Anyone who’s been chest-deep in the mud knows how unhelpful this is.
A. You don’t know how to diagnose what’s wrong, so you don’t know where to even start. (If you did, you wouldn’t be asking).
B. Even if you did, you don’t know what terms are associated with the problem.
C. And even if you did, the results are often so bewildering you wouldn’t know it if it was staring right at you. (Or as my Grandpa said, wouldn’t be able to pour water out of a boot if there were instructions on the bottom.)
Coding is like a Foreign Language
There are striking parallels to learning to code and learning a foreign language. I’ve found that students of language, English or otherwise, tend to pick up syntaxes faster.
Yes, there are patterns and logic to the systems.
Yes, some things are idiosyncratic and can’t be succinctly conveyed in their English equivalent.
Yes, there are exceptions to the above 2 points which contradict or don’t make sense, but it’s the way it is so you have to memorize it.
Half Pastor / Half Scientist
Perhaps the most maddening contradiction a programmer must fulfill is that you are tasked with both knowing how it all works, and chalking up a healthy majority to faith.
In order to program, you must use logic, reason, and inference. Debugging is a deductive process. Good code is well-structured, deliberately logical and well organized.
On the other hand, we’re using rocks we tricked into thinking (computers). We rely on frameworks, libraries, and snippets written by other people that we either don’t understand because of time or take purely on faith. There is so much happening in each line of code that we could never finish the function if we had to stop and think about what it all does.
To be a programmer, you must be both part faith-based Priest/Priestess and stone-cold Spock logician.
So as you can see, we’ve got our work cut out for us. But just as we didn’t come into this world knowing how to speak, or write, or complete any of the tasks we now find routine but once struggled with: we can do it.
The deep truth behind coding is that it is the product, the level best efforts – the good intentions – the honest gift of some very smart people to make life easier. Some smart person, somewhere said: “This sucks. There’s got to be a better way than this.”
And code took its first breath.
In the next section, I’ll give you some strategies to smooth out this process and get you moving towards your goals. Code is here to stay, it is here to help, and if nothing else, you might just have a little fun.