This was a blogpost I originally wrote in 2015. To my amazement, it got to the top spot of HackerNews for a few hours.
I’m learning to code. I’ve been on again off again with it for about two years now. But I’ve only very recently started to feel like I could actually achieve something. I had a lot of unlearning and confidence building to do first.
I want to share with you some of the difficulties (all 8 of them) that have killed my momentum dead in its tracks. As much as this is an admission of my failings, it’s also hopefully a guide to the types of misconceptions and anxieties that people like me — people newly learning to code—may have.
If you’re a teacher of The Code, then please, take heed. May my loud-mouthed admissions make it easier for you to get through to your students.
Hey gang, how about you nest that expression in my function so we can debug that damned command line and Git push the hell outta here?!
As awesome as these words are, they’re a huge barrier to learning how to code. It has been one of my biggest stumbling blocks to feeling competent.
I found that treating it as you would learning a language really helped. Start small, take pains to understand and remember the vocabulary, and once you’ve learnt a word — use it. Top up your knowledge on Memrise. But just like you wouldn’t expect to learn a language in a few weeks, you aren’t going to feel confident speaking tech till you’re a couple of months in. Don’t get disheartened.
2. The Fear
Above anything else it’s been The Fear that’s been the hardest to get over. The Fear is the stream of thoughts that runs a bit like this: “Ugh I’ll never catch up, there’s too much to learn. Even if I started now I won’t be competent for ages! Everyone is already so far ahead. I can’t even split this damn string! I’m getting it all wrong. I’m never going to get anywhere. Maybe I’m not cut out for this? I’m never going to be able to contribute anything useful. I’m just a drag on everyone’s time.”
The Fear is made worse when people use words like “just” or “obviously”. I dislike these two words. They should be nowhere near a learning environment. “You just have to setup a github page”, “obviously you just put the semi-colon here”. All that these words do is belittle the person who did the asking.
“I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.” — Dune, Frank Herbert
It’s important that you look after yourself, if you find that you’re filled with terror at getting things wrong, figure out why. Take the time to unravel the unpleasant thoughts. Concentrate on what you’ve achieved, and the work you’ve done to get there. Ground yourself in rose-tinted reality. Be kind to yourself.
3. Equals is a lie: = ≠ =
My entire academic life I have been taught that this weird modernist hamburger of a symbol ‘=’ means equivalent to. This is a thought that is not compatible with programming, and indeed royally screws everything up given half the chance. It took a while before I came across anything that told me that it’s much better to think of = as “assignment” not “equivalence”. So the next time I saw something like:
hello = 4
hello = hello + 1
I didn’t have an existential breakdown. Or feel like an idiot. And not feeling like an idiot is a big part of continuing to learn how to code.
4. Stop asking questions
I know, I know, I’m meant to be like “guys, question everything! Questions are great!” but honestly, stop asking questions. You don’t need to know how it all works before you start building something.
You don’t need to understand how a web server works to make a webpage. You don’t need to understand how Python makes a query to a database to use that data.
I was paralysed for too long asking questions, I just ended up reading a lot. I wish I had just thrown myself into building things from the get go. Unlearning that was difficult.
5. Never gonna set you up
Getting things installed and set up is where 70% of your time goes when you’re starting out. Heck, even more! I remember whole days dedicated to just installing a damn module. This is normal. You aren’t doing anything wrong. Keep at it, it gets easier.
…But not that much easier. Setting up is something that fully fledged developers still battle with. There are so many different tools out there that try to solve this problem — so don’t convince yourself that it’s an easy fix that you’re getting wrong. It’s not. You’re trying to solve a hard one.
6. Web stuff is programming stuff
For the longest god damn time I was under this weird misconception that coding for the web was a completely different task to programming. I considered them completely different disciplines with no transferable skills between them. I imagine I thought this because everything is kept so separate when you begin to learn; you either do the HTML tutorial or the Python one, and never the twain shall meet.
The spell was broken whilst I was watching the end of the first lesson in Udacity’s Introduction to Computer Science. Dave describes creating a Web Crawler and he uttered the following line which blew my tiny little mind:
“ ‘a href equals’ is how we start the link, that’s followed by a string which is surrounded by double quotes, similarly to a string in python…between the double quotes is a URL”
No longer was I just adding adding a URL, adding content, to a tag, I was assigning it a string. This may not be an epiphany for some of you but allow me to share my notes as I realise the immensity of this:
Web Crawler finds webpages through links
Starts from seed page and follows links to new webpages — a link tree
View source code
a href = “string”
omg its just a string!?!!
All of a sudden I had an appreciation for the fact that it was all part of the same ecosystem.
7. Don’t be resentful of help
As a defensive manoeuvre I’ve seen a few people go down the route of taking offence at being corrected. I’ve done it too. I know that asking for help is hard and getting things wrong can be embarrassing. Be clear about when you want help, and when you don’t. Be wary of alienating the people who are trying to help you. There’s a difference between constructive and unconstructive criticism, it’s important not to confuse the two.
8. No matter what, keep going
Even if it takes you 2 months, or 2 years to build that one thing, keep going. You’ll find that with time your anxieties quieten, and your confidence slowly builds.
It’s an excellent feeling.