SNAFU - Honest thoughts on learning to code
by Jacob E. Dawson
Your head will break before the keyboard does, I’ve learned that from personal experience.
Coding is often great, long stretches of Sisyphean boulder-pushing in exchange for brief epiphanies; a muted level-up. There’s a strange, hysterical joy to be found in discovering that the last 2 hours of utter confusion was due to that one line of code you missed in a lengthy tutorial. Be prepared for many hours of frustration and feeling like the dumbest person alive. Prepare for it, and embrace it — for better or for worse, computers aren’t like people, and 60% of the time the problem is human error every time. There is strength in the knowledge that there is indeed a solution to your problem, you just can’t see it yet, because it is you. Persist until you find the answer.
Learn to type. Can you type? Without looking? No? Stop reading this and learn to type. Seriously. You need to be able to type 🙂 If you can’t take 2 – 4 weeks to learn how to type with both hands (no looking!!) then you aren’t going to be able to handle learning to code.
Can you type yet? Good. Ask yourself if you actually want to code or it’s just something you heard was cool these days and being a hoodie-wearing billionaire might be nice to try out for the summer. Read the first sentence of this article. That’s not a joke. The reason programmers are well-paid, in-demand and (generally?) respected is that to get to that level requires rare levels of patience and persistence. Is your garage filled with dusty guitars and discarded dumbbells strewn with cobwebs, abandoned after an initial honeymoon period? Don’t marry code at Vegas weddings. Save yourself the pain, honestly. Some people just aren’t suited to coding. Maybe try marketing?
Bootcamps or Blogs?
Balance tutorials with reading blogs & building stuff. Build something (anything) as quickly as possible. It will suck, that’s ok. It can help to watch a few videos and do some Codecademy / FreeCodeCamp / [insert online service] to begin — do online courses and try to get started on a real project ASAP — a 1-page portfolio, a site that pulls sports scores from an API, a wall of photographs using CSS filters. Tutorials often don’t prepare you for the ‘real world’ of coding, real learning starts with doing (and you never stop Googling no matter how advanced you are). I didn’t start to really understand programming until my 4th or 5th start, when I chose a project and fumbled my way towards an end-goal. Building things also makes the concepts concrete — after your 23rd To-Do app you’ll want to make something useful 🙂
Bootcamps are definitely an option, and the more reputable ones will push you hard and give you guidance in a way that you can’t replicate online, but keep in mind that the very best are going to set you back ~10–15k. Do your research, ask people who have gone through them, weigh the options. There are enough free resources & tools to learn to code without doing a bootcamp.
Tools of the Trade
Get a nice chair. You’ll be sitting in this thing for hours, days, weeks. Get something that’s adjustable, with armrests, that feels comfortable and won’t break your butt. Get a good one, then dream of getting a better one.
More monitors are better. 3 is the sweet spot, after that there are diminishing returns. Coding on 1 screen is possible, but so is riding a unicycle. Not sure if that’s the right analogy, but I don’t ride to work on 1 wheel. You know what I mean. The moment I moved to 2 monitors (for front-end work) my productivity increased massively, same with 3.
Get a sweet mouse, something ergonomic that you can cradle, something with weight that rests in your palm and makes nice clicky noises and has adjustable scroll. Some coders will tell you they never use a mouse, and I’m happy for them. Try Vimium for web browsing if you don’t like mice.
Keyboards ain’t keyboards. I couldn’t type on those little Apple keys to save my life, but give me a large brick that resists every press and makes clacking sounds and I’m good to go. Here’s a tip; once you go Mech you never go…uh. Forget it. Here’s a couple of places to get you started: r/MechanicalKeyboards mechanicalkeyboards.com
Choose an editor / IDE. Try a few of them out and see what works with the way you think. One man’s Emacs is another man’s Sublime Text, and the twain shall never meet. Syntax-highlighting, in-built test suites, macros and auto-completion can save you hours in the long-run, so don’t settle until you like the look & feel. I like Webstorm, but that was after a few years on Sublime, and trying Atom. I’ve also heard Visual Studio Code is pretty awesome now (and it’s free).
UPDATE 2020: I've been using VSCode for 3 years now and it's amazing, free, fast & beautiful.
If you’re planning to build websites, get HTML, CSS & JS under your belt. You can learn them all asynchronously. jQuery is useful, JS frameworks are useful, CSS preprocessors are useful, but get the ‘big three’ into your head before worrying about where to go next. When the student is ready the master will appear.
UPDATE 2020: I barely use jQuery anymore, so while the foundations haven't changed (HTML, CSS, JS), you'll want to get a framework under your belt, and React is what I recommend.
Don’t Give Up!
As I mentioned, it took me a few attempts at coding before something clicked. One of the things that pushed me over the edge was that I started building a project that made all of the theory vivid and real, and the other thing was that I just became mature enough to understand the need to persevere even when it’s boring, hard or infuriating. The Dip is real, but don’t give up. For me learning to code is like knowing how to talk to a genie. While it would probably would be more entertaining if it sounded like Robin Williams and wasn’t so sensitive about punctuation, it’s really cool when it starts granting your wishes. Just get started, it’s worth it.