Learning How to Learn How to Program: “I’ve Coded and I Can’t Get Up!”
By: Christian Alexander
Tags: JavaScript, CSS, Programming, HTML, Coding

“Yo. I’m like ya’ll. I’m here to program, but I’m confused. I googled “how to program”, and I saw some free stuff and some paid stuff. I just want to make the money they do, or I want to make the cool stuff they do, or I want to hack the cool stuff they make. “

That’s pretty much it, isn’t it?

The worst thing about programming is starting. This shit is lawless.

After all, there’s a mystery to programmers. What do they do? Are they good? Are they bad? Aren’t they [insert wrong thing here]?

I’ve been programming for a while now, but let’s round it to about a year. That means — if you’re just starting to learn how to program — I’m where you’ll be in around 6 months.

Nevertheless, I wanted to impart some information I've learned throughout my year.

Now, let’s get something clear. This isn’t a guide on how to program. There is no one guide on how to program, and you’ll understand why a little later. For example, I’m working through guides on how to program. Difference is, they’re official guides on Jest or Vue. If you’re just starting out, that sounds weird. If you’ve been programming for a few months now, you probably already know your way around Vue attributes better than I do.

This is a guide on how to use what you’re using to program. Let me explain.

s01: The Wall

Starting programming is like being face to face with a wall.

I want you to stand face to face with a wall. Find a wall in your room, and stand face to face to face with the wall.

It’s weird and unnecessary. Humanity stood for a reason; we need to view our surroundings. We need to be aware. We can’t possibly expose our back to the elements, while facing an immediate barrier that obscures total view of the horizon.

People don’t just stand face to face with walls. It’s uncomfortable, aside from being awkward, aside from serving no immediate purpose.

Welcome to Programming.

Programming is very complex. It would take an hour to explain a basic project to an average person. For detractors: attempt to explain the complete Google search website to a non-techie person. Explain — underneath the simple veneer of a minimal UI — the algorithms required to find sites, the responsive aspects of the search timer, the hidden source files, the JS files with no spaces, the dependencies, the ad dynamics, the platform dynamics, the UI/UX dynamics, etc. In that respect, it is complicated.

It’s also layered. To create a react app, you have to know what React is, what an app is, what comprises both, and why one would, on top of how to go about it. With each tidbit come other tidbits, and so on and so on. In that respect, it is complicated.

It is also confusing. Most of the stuff we read is so obscure … of course you feel uninspired. On most basic levels of human interaction, there’s no need to know what an ng-For. In that respect, it is complicated.

It’s also pretty doable, tbh. The breaking point — the point at which fundamental logic starts clicking in your head — depends solely on how much, how hard, and how often you’re willing to punch the all-encompassing wall that is beginner programming.

Regardless of what you consider success in programming, as everyone starts with some motive in mind, it’s doable. It’s doable with pretty much any computer, any internet connection, and any screen setup. You can’t deny, programming is cheap, fast, well documented, and well taught. In short, there’s no doubt it’s doable. Difficult, sure. Nearly impossible, okay.

Doable? Definitely.

Action Item

Start coding. Whatever that means, however that means.

Start coding. Code for a day, whatever that means to you. Code for an hour, a week, or a month. It doesn’t matter for now, you’ll get locked in soon enough. I mean it: I didn’t have anything guiding me, and for now, you have nothing guiding you.

If you don’t know how to start, use your senses. Yes, really. You probably know what coding looks like, right? It’s text. Know what you need to write text? A … text editor. There, you’ve started coding!

If you’re not willing to do this, if you’re not willing to pretend you’re a child and look around the incredible world of programming, then you have control issues stemming from your ego.

Really? You aren’t willing to wander aimlessly and ignorant? Well then, you aren’t willing. Learn about documentation, or mess around with the developer tools. Tinker aimlessly, for a given amount of time.

Why?

I’m one of those that explain why.

You have to fill your brain with data about programming. Terms, images, names, concepts, graphs, signs, etc. When you do that enough, your brain will start organizing the data automatically. You have to fill it with everything visual and verbal you can before the organizing function starts kicking in, though.

Why? At this point, programming is a gigantic, solid clump. Or, a wall. You don’t understand this: programming is commensurate parts, a box of individual tools, that work together to create a finished, processed, and often packaged, product. You have to begin small, by understanding difference. The difference between HTML and CSS. The difference between a tag and an attribute. The difference between <h3> and <p> tags.

Your differences will grow more and more nuanced over time, and lead to the overall cohesion of your ability. You’ll magically note you’ve been writing ES5 code in an ES6 world. You’ll note the differences between the quality of official documentation, and how they relate to the overall success of a language or framework.

I had the luxury of being a graphic designer before I became a programmer, so I didn’t have to hurdle of learning how to turn a computer on. I knew how to use complex software, was familiar with IT basics, and so on. If you don’t, but you’re on Medium somehow, you’re probably fine.

If you know absolutely nothing about computers, do the following exactly:

Go to the Youtube or Google homepage. Type in [keyword] fundamentals or [keyword] course. In this case, it’s “IT fundamentals”. Click on anything from Google or another reputable company. If none are available, just pick the most viewed one. I did the work for you … still follow along. Join it in tandem with a few relevant MIT courses or reputable Udemy courses. Watch it at twice the speed, twice.

Literally this for hours is how programming is learned.

Do this for everything you don’t know at this stage. If you’re just starting out, don’t worry about text-based information (official documentation, books, etc.).

Everything you learn about programming will make more efficient use of the S01 (Step One) phase. Once you learn about data sorting, you’ll understand the type of data sort that meshes best with your brain. Once you learn about folder structure, you’ll start using tree graphs for everything. Again, it’s difficult to pinpoint a purpose for this first phase. Yet, it’s crucial to fill your brain with information before it, automatically, orders and preserves that information for later.

s02: The Sand

Remember the wall? It’s sand now.

How did that happen? A second ago, this was a wall. Now it’s sand and it’s falling.

Hear me out.

Freedom is presumed by burden. The burden of Eden’s rules led to Adam’s original sin, and the freedom of an imperfect world. In the Matrix, the child capable of bending the spoon did so only when realizing there was no spoon in the first place. Why is that scene cool? The spoon is metal, yet it acts like a liquid in the young padawan’s hand. Naruto doesn’t understand how to implement the Rasengan until Jiraya teaches him the boring, composite parts of the jutsu.

… I’m not insane. They’re all opposites. Boolean values, existing only in binary terms. Spoon, no spoon. Metal, liquid. Hard, soft. Concrete, abstract. Wall, sand. In short: no, then yes. 0, then 1.

In order to break your inability to program, you have to realize there’s no such thing as programming. Programming is a set of computer science (CS) fundamentals that, executed well, perform specific tasks. It just so happens, of course, that performing those functions can also pay rather lucratively.

After S01, you’ll start to feel a bit less anxious and a bit more nervous. Sure, you’ve printed out “Hello World”. Has the world said it back? You could’ve just said it out loud, would’ve been easier. Wouldn’t have forced you to install all of these weird programs for … something called syntax highlighting?

You might have even bought a book. Great.

How dare you. As a new programmer, you have to realize one crucial thing. Programming is not some A Beautiful Mind bullshit. It’s sitting down at a desk and writing things that only make sense to the computer right now, because they don’t make sense to you yet.

Now, realize that all you’ve done in S01 — no matter how long you did it for — is useless. Absolutely useless. You’re not going to use any of it in a professional capacity. That’s not what S01 is for. S01 is to prep you, a sort of trial by fire. You familiarize yourself with the chaos you’re about to control. Consider it stretching. Sure, it hurts. Sure, it’s hard.

Athletes don’t get paid to stretch.

Programming isn’t something you do. Programming is something you plan, and then type. You’re almost never doing both at the same time as a beginner, and if you are, you’ve done each individually before. It’s one of those “spend most of the time sharpening the ax” things.

Now, in S02, you have to anchor your data.

If data is metal bits, S02 is your magnet. You need to use an actual piece of educational material to propel you forward. Educational material has two benefits: it is structured — often structures your thinking as a byproduct — and it often covers concepts using differing levels of sophistication. Differing levels of sophistication help with the climb of education: the best way to learn anything is starting from the fundamentals and filling in the nuance of your field niche over time. Hackers use the same things Web UI Devs use the same things AI Devs use.

This intellectual process then works to cement your overall understanding about any particular programming tool or concept. You learn programming the same way websites load; from the ground, up.

Alright. This is called the Saint-Venant’s Principle. It stipulates that “local effects of loads on structures have negligible global effects”. That means, for example, that a bolt can only stress metal so far before another bolt must be added to support weight. A side-effect of that is: you can space bolts out so that the area they stress overlaps and creates a weld-like connection. Intellect works in this way. The more data you gather on a particular subject, the more a logical framework for that structure cements in your brain. It’s also the reason brilliant, humanitarian, philanthropic people still voted Trump.

The more you practice with different CSS frameworks (Bootstrap, Bulma, Semantic UI), the stronger your overall understanding of CSS will be. The more HTML5 websites you make, the greater your overall understanding of HTML. Like Java and C++? You’ll be an expert in OOP faster than you’d like to be. It’s not my job to teach you the pillars. Even if I did, you wouldn’t understand the why of them. Why, exactly, you shouldn’t code Chrome extensions in Python. Why, exactly, you shouldn’t place all your JS in script tags.

Action Item

Pick a course, book, tutorial, and so on, and complete it. Complete all of it. If you weren’t a completionist before, by God become one now. All of it. Pretend it’s a plate of vegetables and you’re a child. All of every chapter, every video, and every page. Every practice. Every link, one by one.

Why? You must not have been listening before. Any HTML you do benefits all HTML you do. You will rely for months on tangential information while your fingers do the rest. Finish all of it.

In order to get past the work, I recommend a technique I use called driving.

By far the only thing you should read on this post:

Driving is the act of continually writing a bit of code crucial to an end result in succession. A lot of programming is setting up and checking syntax pipes that connect data to display. We’re trying to make something go somewhere, in order to do something. In that sense, we’re no different than plumbers.

Shitty code, you get the pun.

For example:

const message = [“You”, “are”, “ugly.”] message.forEach(function (word) { console.log(word); })

Feel free to type this in your Console (you should know what that is by now). It’ll call you ugly.

More importantly, you’d be surprised what happens when you type this over and over again. For now, just read it over and over.

const message = [“You”, “are”, “ugly.”] message.forEach(function (word) { console.log(word); }) const message = [“You”, “are”, “ugly.”] message.forEach(function (word) { console.log(word); }) const message = [“You”, “are”, “ugly.”] message.forEach(function (word) { console.log(word); }) const message = [“You”, “are”, “ugly.”] message.forEach(function (word) { console.log(word); }) const message = [“You”, “are”, “ugly.”] message.forEach(function (word) { console.log(word); })

Kinda turns into a mantra, right? You start noticing spacing is important, keywords are important, no word is wasted, and so on. You start noticing little typing ticks you didn’t before, the relationship between method and array, perhaps you develop a newfound appreciation for ES6 — I don’t know or care. Just drive.

If there’s a hard bit of code you can’t wrap your head around, go for a drive. Piece of code you see over and over? Drive. Feeling lazy or tired? Drive. Can’t drive? Then, you can’t code. Back to S01, and we live to fight another day.

Join this in tandem with a Pomodoro technique timer ( 25 minutes working, 5 minutes rest ) and you’re done. Consider them sets and do the whole exercise. Don’t drive for the whole 25 minutes, mind you. You drive when you want to, it’s your car. Use the Pomodoro technique for the whole of the lesson you’re working on, book you’re reading, video you’re watching or coding along with, and so on. Don’t know where to start? The Odin Project, period. Enjoy your new career.

P.S. Seriously, the Odin Project link is the only link worth clicking in this and any other article about learning how to program. Trust me, I’ve read them all.

Why?

It’s not enough to know the code. You’re not going to get paid to know the code. Yes, it’s a necessity, but that’s not what you’re paid for.

Oh, you’ll know the code or you won’t be in the building. You won’t be on the in-house computer. Get to know the code before you even think you’re going to get paid.

You get paid to code. You get satisfaction from coding. You might as well get used to it.

Now, I know the more practiced folk will preach it’s more nuanced than this. You aren’t paid to code all the time, just to commit time to your projects and to work hard.

That’s a given.

What I’m saying is: if you’re new, don’t worry about the nuance. You’re miles away from the nuance. You haven’t even gotten to S03. S03 is when you can begin starting to think you can even get paid to code. You’re one away, and then some.

What I’m actually saying is, drive a language around before you buy it.

s03: The Sandcastle

Alright, now you have a bunch of sand. Great. You’re staring at the sand.

No, you’re supposed to make something with the sand. You make a sandcastle with the sand, and the more of them you make, the better builder you become.

That’s pretty much it. I’ve heard from Linus (Torvalds) enough to know I’m not half as good at anything as he is at programming. The why is painfully obvious: he has so much more of a command of the craft.

I imagine he has programming disfluency sometimes. Speech disfluency is when you go “Umm…” in a conversation. It’s a sort of linguistic stalling technique, and gestures though before speech. I imagine he does that while he’s coding, can yawn in code, can sneeze in code. What I’m saying is, it’s clear he codes a lot. That’s the point.

That said, there’s a way to go about creating a project.

The best projects you can build are the ones you think up and design. Despite what some may believe, everyone has an idea for an app. You don’t need an idea for a fucking project. Everyone. Everyone can think of a beginner project. That’s why there are so many!

However, people are very skittish about their projects. They think, unless it connects to the internet it’s not worth it. Unless it’s a social media clone, it’s not worth it.

Well, it’s not. It’s not worth it to commit S03. That is, until it is. That’s the point. That’s why you’re not suddenly struck by the lightning of success the second you spit out a “Hello World” or “You are ugly.”

No piece of code will suddenly solve all of your problems. Pieces of code can only solve individual problems. You’re the solution.

The fact that coding is for everyone means exactly the same in programming as it does in Christianity or in stardom. Few are chosen. When everyone can do it — when it’s so open source, but so susceptible to wild success if one were only to work tirelessly — there’s going to be competition.

In short: there’s no one way to be successful, but regardless of what it looks like, it’s difficult.

One meter of success that outpaces all others, however, are your sandcastles.

You can always tell a professional programmer by their work. They’re artisans of a strangely attractive but pedantic craft. Programming is overly complex, but more akin to design than mathematics. It can be both wildly lucrative, and incredibly deprived.

Yet, most of the time, you just like the page. You appreciate the little digital creation. You enjoy the seamless functionality, speed, elegance, and cohesion of the final demo, because you understand the number of plates they had to spin. You like that the code is succinct, or clear, or complex, or clever, and so on.

The best websites aren’t necessarily artistic. They’re not grand, dramatic gestures. They’re not philanthropic feats. They’re a means to an end. Programming is not a way to make art. It can make art, sure. I’m as much a fan of Processing as the next nerd.

That said, programming is principally used in the workplace to funnel data. I feel that is the end new programmers should aim for. After all, the greatest artists often started out in very strict and disciplined settings before settling into their groove. Richard Pryor started off a clean comedian. Albert Einstein started off in electrical patents. Mike Tyson started off a classically trained boxer. MLK Jr. was a minister.

You are Jackie Chan in The Drunken Master. You are Jackie Chan in The Legend of the Drunken Master.

It’s necessary to start boring, start back end, start legacy, start long form, etc.

Always try to use the best programming practices — as they’re often best for a good reason — but practice everything. Drive over and over while you create you project, too. Do victory laps after you get something working.

What you make will depend on what you like. For example, I have two project ideas outlined: one is from Reddit’s trash tag event, where you can GPS request someone clean up a mess and get paid for it, start accounts and get both virtual and real money for neighborhood clean up of various resources with simple picture uploads over data, and a drawing app with media integration so teachers can use it to hold classes online.

I like education, and I enjoy Reddit’s cleanliness. That’s it. The rest, from the GPS requests to canvas manipulation, are a result of previous practice. Someone more practiced than I would probably know the exact component layout, design schemes, and libraries they would use without ever moving a finger.

Play retro games? Make a retro game. Like pictures? Make a filter. Like social media? Design a layout. If it works, it’s good. Is the project too small? Even better! Take a bunch of small projects and merge them together. You’ve been working with components and you didn’t even know it!

No matter where these ideas end up, they’re the product of plenty of useless ideas. Some were coded and trashed. Some were trashed. Some were burned. Most weren’t done because they didn’t stick.

That’s the great thing with something like programming. Since it’s so inherently flexible, it’s becoming more powerful and accessible over recent years.

Plenty of people complain about how quickly the programming world fluctuates before they’ve pushed a fucking git repo. These are the same people that complain about how deep the ocean is before dipping their toes in it.

Think of how insulting that is. A programmer who invests time and effort daily towards understanding and implementing coding projects should quit because “tHiNgs chAnGe FaSt”. An AI expert and a web UI dev sans SCSS expertise have the same chance at making it because programming changes. The logic breaks easily.

The belief in fluctuating language markets lies in the idea that things ever stop changing in the first place. Change is the truth, stability is the illusion. You have to practice programming fundamentals regardless of its future, and that’ll make you a good programmer regardless of what you code.

No one gets worse at coding by coding, and you can do it sitting. You don’t like sitting?

Action Item

A project is a full thing, like a complete song or a full painting. It can be any type of full thing. It can be a full function, a full extension, a full application, or a full site. In fact, it can be all of those consecutively if you know what you’re doing.

You have to finish it. Once you have a working version of it, upload it to Github. Or, start it and work on it on Github. Never have something half finished on Github. It defeats the purpose of version control, robs you of an easy demo site, and is just overall disrespectful towards Git technology (Thanks, Linus). Always have finished products up. Regardless of whether you have a live version or not, finish everything on Github.

Well. Finish it well. Design it well. Center everything, and if you can’t center things … well, it’s the easiest part of the whole thing so figure it out. Sheesh, if the only problem I had was centering things. I wish I only had to worried about centering one … <p> TAG?! MY KINGDOM FOR A <p> TAG THAT’S SLIGHTLY OFF CENTER. Things are getting to the point where my rest periods are spent chain driving to outpace the cruel clock, ticking away at my sanity.

Code a project, which is a full thing. If you’ve seen a website, you can replicate it. If you’ve used a function, you can re-purpose it. If you can do it on paper, you can program it.

Again, the best projects to look toward for inspiration are the ones you use. Like Instagram? Do Instagram. Can’t do Instagram? Do it in parts. Then, learn JS frameworks. Then, do it in components.

If you think you can’t do something, you haven’t broken it down enough. You can do it, you just can’t lift it. Rock too heavy? Take the hammer out.

Do images in boxes. Then, make it dynamic. Do icons and layout, then make it dynamic. Do accounts, then make them dynamic. Authorization, make it dynamic. Account page, dynamic. Dynamic store. Dynamic to-do. Dynamic site. Dynamic dashboard.

Get the closest to done as fast as possible. Sandcastles aren’t castles. Castles are enterprise. Nothing you code is worth preserving yet. Rule 01 of programming, if there are any rules, is:

DO NOT WORSHIP YOUR CODE.

Store it wherever you can, whatever way you can. Preserve it whatever way you have to. Keep it safeguarded and away from evil, but you cannot worship it. You should be able to replicate it anyway, or know how to. Forgot a part? Fine, look it up, but don’t forget that part altogether. There’s a difference.

If your end goal is to build a website, you should learn about routes (RESTful or otherwise). If you don’t know routes, you have to before building a website. Build a few routes, then practice them — since you’re going to be building routes anyway —to then, finally, create a project.

Why?

“A pimp is only as good as his [or her] product…” — The Mack

Programming, on top of being difficult, is esoteric. That means it’s obscure. That means it’s rare.

In the world, that is. Programming in the programming community is popping. Programming in the financial community is popping. Programming in the entertainment community is popping. In the world? Not so much.

That’s precisely why it’s easy for programmers to lie to themselves. The simple act of programming makes them think they’re programmers, because no one else does it. They work on a bit here. They steal a bit there. They put it in a file. No beginning. No end. In short, no full thing. Many fractured things. No discipline, many fractured whims.

There seem to be two initial levels to programming: either you’re a beginner, or a master. Either you don’t know anything, or you can intuitively code anything. If you’re not in the cold purgatory of tutorial hell, your fingers magically glide around the board like a prodigy pianist.

Then it comes time to apply for jobs, and you realize you amount to little more than a few fractured projects that you may or may not be able to demo. It’s not about what you think good or bad programming is any longer; it’s about having to code, period. All you have is paste bins gathering dust, and you’ve retained nothing. Back to S01.

In reality, you only need one or two truly impressive projects to make yourself a viable candidate. Then, you weigh your resume on work software rather than personal projects.

Focus on those, and do them in chunks. That’s not difficult to do in the slightest, and a casual peppering of mid-level projects for zest every so often isn’t difficult to do either. The difficult part is planning it, and then being willing to type it.

In Closing

You can do S01, S02, S03, S02, S01. You can do S01. S02, S03, S02, S03, S02, S01. You can do S01, S02, S01, S02, S03, S02, S01. You can do S01, S02, S03, S01, S02, S03. 123, 123, 123. It’s counting. It’s rhythm.

You cannot do S01, S03, S02.

The point of following this pattern is to put yourself in a self-imposed yoke. A yoke is what oxen wear on their shoulders to plow fields. Programmers affectionately refer to the term a number of corny ways, like being plugged in, zoned in, in the zone, etc.

You have to learn how to be in a yoke before being put in one. It limits mobility, feels heavy, stiffens the neck and causes welts on the livestock’s back. Then, over time, it becomes a tool like any other. Eventually, it’s necessary.

It’s called conditioning. Why condition yourself? You’re a work horse. Don’t want to be a work horse? Don’t learn programming. Prance on a prairie. Go away.

Uninstall your text editor, you’re not using it anyway.

You can’t learn programming without developing an ethic for it. It’s obvious at first glance; in order to learn something, you have to do it. Yet, how many things do people learn well in a lifetime? How often do we take up this advice? Once, to earn a living? Maybe twice?

We don’t reflect on how we learn, simply because we don’t bother learning much. Then, we undercut our abilities before we achieve them. “I’m not good at math, so I can’t be a good programmer” becomes “I’m not good at JavaScript, so I can’t be a good programmer” becomes “I’m not good at Angular JS, so I can’t be a good programmer”. We’re always focused on impossible goals, regardless of all the ones we’ve already surpassed.

That’s why I prefer the sand castle analogy. Analogies are cheap, logistic tools you can replicate at will. Understanding MVC pattern would be leagues more difficult without the bartender analogy. HTML isn’t just markup, it’s also a spine. Don’t like sand castles? Use bowls. Don’t like bowls? Use paintings. I don’t care. You get the point. Type the code.

Don’t skip parts, or you’ll be misshapen. S01 is arms. S02 is core. S03 is legs. Focus too much on the one, and you’ll ignore the others. Hence, tutorial hell. Hence, imposter syndrome.

Problems are a result of imbalance. 1 + 1 = 3? 2 = 3? No.

Following this pattern will also help work against frustration. Again, programming is difficult. Whenever you feel anxious or upset, it’s because you’re unbalanced and have no other outlet to express that frustration. This repetitive ethic will restore your want to program in the first place which, trust, will be very important.

That’s pretty much it, unless it isn’t. In which case, welcome back to the beginning.

Fin

As is custom on Medium, apparently, I’d like to close this selfless article with an entirely selfish self-plug. It’s a personally hand-picked & curated Spotify playlist containing over 1,000 of the best Hip-hop, Rap, and R&B songs ever created in the history of humankind. That’s over 63 hours of music, to guide you through your journey.

Consider it your Virgil in this hellfire we call learning how to program. After all, it’s dangerous to go alone! Take this.