Disclaimer: I am not advocating for ignorance towards best practice in production code.

Good Grades

I always sucked at school. I got by, but not by studying. I hacked classroom discussions—parsing other people’s opinions to form my own, solving algebraic equations by looking it up in the book and not by memorizing the formulae. This is preceisely why I failed miserably in chemistry. Everything in basic chemistry is fact and memory; no logic, no opinions.

Web development is a blend of math and art, logic and aesthetic, the easily-researched and the highly-subjective. I do not know how to calculate an apothem for anonymously-sided 3d polygons, but the internet does. I may have opinions on parallax scrolling, button styles and data structure, but so does everyone else. The only things I know by heart are the things I’ve done thousands of times, not the things that I memorized with flashcards.

We are all inside the dev classroom. Eternally. The curriculum changes every year. There is no graduation. This post is for those of you that find yourself feeling like my zit-covered teenage self, staring at the periodic table of DOM elements, wondering if you’ll be allowed to go to the bathroom for the third time just to give your brain a break.

Guess what, nobody is getting an “A” in dev. You are in one of those progressive schools where you are graded relatively on “personal progress”. You are being graded in “You” points. Finally figured out Sass? Congrats, that’s 100 “You” points. “But Billy just learned Angular...” Shut up. That’s 5 “Billy” points, and Stacy just got 2 “Stacy” points for learning Rails.

There is no scorecard. “You” points don’t equate to “Billy” points; it’s like comparing apples to diapers—they’re both good if you run a daycare. Some daycares need more apples than diapers, and some need more diapers because their kids are eating so many damn apples.

Of course there is an objective measure for “good” and “bad” developers, but it may not be quite what you think. “Good” developers are not worried about what they don’t know—they’re focused on what they can learn. The curriculum is constantly changing, which means devs must constantly be ready for change.

In order to be ready for change, you need to be humble. You can be confident, but you must stay humble. The past year’s worth of your knowledge has tons of value, but not simply because you learned React, Git, or LESS. It has value because you did not settle for what you knew a year ago—you kept going. Your favorite JS framework is going to be entirely different—and probably nonexistent—in ten years. Does that mean your knowledge of this tool is worthless today? Of course not. Is it going to help you in the future? Yes, but not in the form of this specific tool, rather as the skill of adaptation.

You may not yet write “good code”, but if you can recognize your limits and persevere in learning, you are already a “good” developer.

Different Strokes for Learning Folks

I, like some of you, hacked the academic system to get (some) passing grades. We learn differently than others. There is nothing wrong with that. You are not an idiot if you don’t read books for fun. If you do, great—you have a leg up on yourself.

Hearing that you should write good code can feel like hearing how you should format a paper on a topic you are not even sure you are smart enough to write about. Learn first, format later.

Here is how you learn first: ignore everything you don’t understand, pick something you do know about, and learn a babystep past it. Bite off more than you can chew, but not more than you can swallow whole. Choking it down will suck (bite?), but the more you do it, the more it will make sense. Just keep going.

Fitting an orchard’s worth of apples into your mouth is an impossible task, especially if they are already growing back by the time you cram the last one in your pie hole. It is futile. Stop being discouraged that you can’t handle the literally impossible task of learning everything at once and concern yourself with what you can handle. That’s all that matters. You’ll be killing it in no time.

What Before Why

Figure out what you are doing before wasting any energy figuring out why you are doing it. I cannot answer why I never eat sweets until I understand that saltine crackers are not sweets. If you hop on StackOverflow and copy some random dude’s jQuery form validation, you’ll waste hours wondering why it breaks if you don’t understand that jQuery is a Javascript library that you need to include on your page in order for it to work. Don’t be insecure about how little you know; it’s okay, all of us Google everything.

“Ok Google, who is Jake Weary?”

Do not get me wrong, it is very important to understand why certain things work, but you’ll just be cart-before-the-horsing around if you don’t know what you are doing. It is ok to copy/paste a Frankenstein page together, as long as you spend the time afterwards getting to know why it works. If not, Frank will inevitably get very angry and break things.

Here’s the simplest way to find out why something works: remove it and see what changes. Now you know what it does. Now remove little bits of it at a time and see what changes. If it’s Javascript, you may get a console error. If you get an error, Google it. Then notice how 50,000 other people have asked the same question. Breathe. We’re all on the same team here. If it is CSS, Google the declaration in question and see what it does. Maybe removing it doesn’t do anything because it is no longer necessary. Maybe it is only there for a Firefox fix. Be curious. Take it all in. Mastery comes from steady and prolonged exposure, not from some inherent omniscience.

You will write bad code

You need to get used to the fact that you’ll suck at anything the first 10+ times. Don’t let bad code get you down. In fact, assume the new code you are writing is terrible. When it breaks or when you get trapped, you will know where to look. When you fix it, you will see what you did wrong. If what you write turns out to be the correct approach, pat yourself on the back and recognize that your progress is unfolding before your very eyes.

Don’t compare yourself to someone else unless you are trying to learn a better way to do something. Yes, Billy’s code is better, but I bet he was more occupied with finding a solution than with the idea of how good he was when he wrote it. That self-condemnation will kill you. Get rid of it. Be free enough to fail, failing is actually worth loads of progress points.

You will always look back and see the imperfections in everything you make. This is because you are growing. If clients only knew how much we hate what we built them six months after the fact. It’s ok. Don’t idolize perfection. A “perfect” website remains unfinished because you are constantly tweaking everything. I've hated my two year-old personal website for one year and 364 days. Learn how to move forward and grow, not how to perfect. Apply what you’ve learned to the next thing.

Refinement

Over time, you will learn that many things that you were once terrified of become relevant and manageable. When you get overwhelmingly lost in your styles for a complex web site, you learn Sass. When your site takes eight seconds to render, you research techniques for speeding up your page load.

If you don’t understand CSS, your Sass-processed code will be terrible. If you lack experience, you will be creating giant image sprites because you found an article from 2006 saying it will improve your page speed. Don’t stunt your growth. Be patient and refrain from the temptation to force-learn what other “good” devs know simply because you feel like you need to know it. There needs to be a foundation or else you will only be learning temporary tools, not adaptation.

Rest easy and keep going. We’ve all been there—are there. “Good code” will come with time.

I am Jake Albaugh and am going to write this bio in first person. These days, I write on CodePen because I care more about it and you than I do about my personal site. Read more articles via my CodePen blog page. View my work on my CodePen profile. If you’re a hip millennial, “get at me” on my twitter @jake_albaugh.