I don’t have a traditional CS degree. Most people I hang out with at work wouldn’t know that right off the bat. If you’re a programmer, people assume that you must have a CS degree. Though I did have programming classes in college, none of them were nearly as in-depth as one would expect to get out of a four year college education. (This was also the case for most classes, not just CS.) As a result, most of what I’ve learned about programming has been self-taught through building things and taking help from peers and a lot of online resources. The software industry in general is one of the only industries today where everything you need to know to get a job can be found and learned online. It is one of the few fields where people are regularly contributing time and information to provide you the resources you need to get into it yourself. It is likely also – though I don’t have the data for this – the only field where industry certifications (not degrees) are not a requirement for most jobs.
And because of all this today so many people are willing to try their hand at coding. Having come from the same background (self-taught) this group — new coders — is my favorite. The excitement of solving something challenging is never replicated the same way as it is in someone who only a few days ago was a total programming n00b. These people know they like it but they might come across a point where they simply give up. And if you’ve ever hung out around new coders you find so many of them inevitably getting disheartened at how it’s a seemingly uphill struggle and they’re not really sure what’s going on anymore or that they spent hours learning the basics of Java but now what? Maybe there’s not enough building. Maybe there’s information overload and suddenly they’re overwhelmed. This is interesting to me. Despite all the resources that we have readily available, I find it perplexing that this is a field where even people who know they want to continue with coding end up getting disheartened so frequently. Having played around with a lot of “learn to code” services that offer tutorials or even, in some cases, a full-scale curriculum to become a programmer, I have some theories on this dissonance new coders encounter.
I took three semesters of French in college. The first thing we did in our French class was just rote memorization – words for hello, welcome, good day, how are you, good bye, see you later, etc. We didn’t get to animals till like a month later. Didn’t get to everyday things like stationary till a month after that. Didn’t get to the rules of correct usage till three months in (note: our teacher was using the correct verbiage all along, but didn’t bog us down initially with explanations for why it had to be so.) As a result, it never felt like too much information and not once did it feel like what we were learning had no real immediate use. Imagine if one day we were being taught the words and then their multiple tenses and then how those tenses changed in a sentence structure, how those sentences could mean different things with just a few words changed, how this was all important before we even knew what the words really were. It would be so much useless information overload that someone new wouldn’t know what to do with it.
When I was a kid one of the toys I used to occasionally play with was a Mechanix set. It’s as close as you can get to teaching a little kid simple engineering skills. It is one of my favorite toys. When you open a Mechanix set manual, it’ll tell you what you need to do to build that particular set. Imagine instead giving a kid a Mechanix set and it has three different sized screws and instead of labeling them A, B, C in the manual, it has their exact sizes as referred to in the professional world. Then it goes on to explain why these screws are different sized and what that means, what the different steel plates are actually called, the correct way to hold a screwdriver, the right way to screw something. All of these details, though important in the real world, are useless to a kid who doesn’t have much knowledge about it initially. All they want to do is build something to play with it, not to understand the physics behind it. And yet this is what happens in most ‘learn to program’ services.
So it seems to me that the problem with a lot of these tutorials is that they teach the rules of the language before telling people what the words are, what they can do, and how they can be used right now. This is all more important to a beginner than the in-depth stuff. When we learned the French words for hello, good morning, how are you, and good bye we were able to use them immediately. We walked in the next day and everyone said Bonjour instead of Hello. If we’d learned the words for cat and dog in the first class, we would have remembered them, sure, but we wouldn’t know what to do with that knowledge. You just need more context to use cat/dog in a sentence. And so, on the first day, it just wasn’t directly relevant. Hello was relevant. It could be used immediately. It didn’t require knowing anything else.
I’ve spent a lot of time looking for something like this and I think Freecodecamp and Team Treehouse are the two that tend to come close to what I’m trying to articulate. I’m not a very good video learner (I like reading more) but every now and then I’ve used Treehouse to recall something I’d learned earlier. And it helps that a lot of their stuff is very industry relevant (dev tools, etc.) Similarly, Freecodecamp is something that provides just enough knowledge to help you build a project. Their strongest aspect is the near 24/7 online community that is there to help anyone stuck. In both cases, at the end of the day, you’re learning to build things before you know how to build things.
When you want to paint a room, you learn just enough about painting to get the job done. What kind of brush you need, what kind of paint, how to move the brush. You don’t sit through a class of aesthetics and color theory simply to paint a room. This practice of knowing just enough is what I think can bridge the gap between learning and building, and maybe, just maybe, remove that early dissonance new coders face. If a service is able to master the right balance between imparting knowledge and providing rote instructions to build something interesting, they’ll be able to provide real value in this field.