Year 0 - Crossing the "Learn to Code" forest
A memoir meets advice column on my time before getting my first job as a frontend developer
You stand at the edge of a great forest. It stretches out into the horizon, seemingly never-ending. Every few paces there is a plaque hanging from a branch. They are of every shape and material imaginable, same for their lettering. However, their message is almost always identical: "Learn to code!" — if not for the fact that some have spelling errors.
Underneath each plaque there is a path. Some look half decent, others seem abandoned and almost completely obstructed by vegetation. You have no idea where each leads. Somehow you have to get to the other side of the forest.
If my tale is to be of any help to you then you are, like me, a self-learner. Chance has brought you to the same point in space that I once occupied. Consider this text the equivalent of a bunch of loose papers nailed to a pine tree at the edge of the forest. I have made my way back from the other side of the frontend (FE) web development path and left this here, in the hope that it might help another clueless traveller such as I once was.
First, take heart. You already carry some of the tools that will serve you well. Since you are reading this, it's safe to assume you already have some command of the English language. If that command is fragile, you should seek to improve it. It is an unavoidable fact that certain languages, through historical chance, lay claim to the knowledge produced during the apex of a given region of the world.
At some point in time, you had to be versed in Greek to become a philosopher, in Latin to become a theologian, or in Italian to be an artist. The age of coal and iron alchemy made English the lingua franca of engineering and we are all stuck with it for our coding needs for the foreseeable future.
I know that there are ever more learning materials in other languages, and that might suffice at the beginning of your travels. But what about after? Many projects are only documented in English. You will probably have to communicate with multinational teams with precision, since building code is a precise affair. You will have to write your own documentation.
Sorry, we are all condemned to it. Inside that forest, they don't speak much else. Unless you're prepared to always be second banana to the people who will do the talking for you, restricting your ability to find the best opportunities and do your best work.
I've never had much trouble with English, having been exposed to it from a young age, but here is some of the stuff I found useful for improving it or learning other languages from scratch.
If a bumbling novice, use apps like Duolingo and read some fun but accessible books originally written in English. Try to find people to converse with casually in the language, ideally in real life. Otherwise you can try apps like Tandem. As you study, take notes in English and have ChatGPT proofread them. Change all your system and app settings to English. Boot up Spotify and belt out some karaoke.
As you get to a good level of fluency and want to fine tune your accent, start shadow training by recording yourself repeating movie dialogues phrase by phrase and then listening back to pin down where the problems are. If you're a native speaker of a romance language like me, your main enemies will almost certainly be the 'w' and 'th' sounds, which is something I never realized until I started shadow training.
You will be a natural in no time.
What else have you got in your bag? Is that some 'maths' residue I see in there? Don't worry, if you're just learning FE web dev, it will probably suffice for now. It would be a different matter if you were going for Machine Learning and other such dark magics. But even a mediocre math student such as myself could make do with whatever was still bouncing around in my noggin two decades removed from learning it in high school. So no worries about needing to be a mathlord to learn code. Any concepts you might still be missing won't be too hard to pick up as you come across them.
And what else do I see you carrying? No, not in the bag. In you. Why, it's the irrepressible human spirit to learn and overcome.
If this is your first trip to the forest of self-learning, you can harbour some doubts about your ability to traverse it. Don't worry about it. Just focus on the fact that it is indeed traversable. It's simple geography. Every kind of terrain is delimited. So there is an exit, 100%. Sometimes you might wish you had a better sense of navigation, a map or a guide. With luck, you will find some of those things. But all of them are accessory. Step into the path knowing you will sometimes be lost and confused. In such cases, step back, consider your situation, make new plans and always keep in mind that the exit from the forest exists physically somewhere, which means you will find it eventually.
So let's get into it. Even if you know nothing else, you probably know you have to start with the big three: HTML, CSS & JS. I usually use a book making analogy to explain them to people who know nothing about tech. HTML is the actual content of the book, such as text, images, tables and so on. CSS is how those things are shown in the book: fonts, pagination, cover material, paper type, colours, etc. Think about how a technical manual and a children's storybook look completely different. You still could, as part of some kind of over-elaborate prank, switch the contents and keep the style. That is the sort of thing that CSS facilitates. Finally, JS is like a pencil and eraser you can use to rewrite and restyle the book on the fly.
Here I must confess a lack of specific advice on which path to take to start your journey into the forest. Truth is, learning the basics of HTML is not that hard and I already had a decent grasp of CSS from customizing Wordpress themes when I got it into my head to learn how to code. Not to say it was easy as a whole. I was still utterly lost. I had no friendly guide or even a map roughly sketched on a piece of bark. So I did the equivalent of picking a path that looked well-worn: I bought a Coursera subscription. Most of the stuff I learned from it was decent enough, but it also taught me a few lessons absent from the syllabus.
The first one is to always look at the expiry date. A lot of courses out there only get updated infrequently, if at all. However, the webdev portion of the forest is ever shifting and changing, especially in all things related to JS. Assume that everything that gets past the one year mark without updates is horribly outdated.
Whatever you pick for learning CSS, it's a big plus if it also covers the subject matter of responsive design. A little info about accessibility is also nice to have. And just because I paid for my course like a chump doesn't mean you have to. There are a lot of good free materials out there. A lot of crap too, which the paid services sometimes help filter out.
So here is another lesson. To be seen as an educator in the webdev milieu is a way to boost your chances of employability or an opportunity to sell magic beans in the shape of overpriced advice which usually consists of stuff they got third hand from other Twitter entrepreneurs. Even barely out of the egg chicks you meet along the path will try to convince they can teach you how to fly as a form of "fake it 'till you make it". How do you tell them apart from the wise owls?
Pay attention to your progress. Are you learning? Do you feel your command over the material increasing? That things are clicking into place? Good learning materials feel challenging, but never confusing. If you start to feel lost with no sense of what you are supposed to be doing, they are probably bad.
Alternatively, you might also need something different in terms of approach. Some people love to follow along with videos. Others are dutiful note takers. Personally, videos bore me and all my attempts at being a notes guy end with piles of copious notes that I will never look at again, no matter how organized I make them.
My personal style is to carefully read up on a subject and then build challenging projects of my own devising, forcing me to internalize what I've learned. This is also how I learned most of my major skills, even before coding. Find what works for you. There is so much stuff out there that it's impossible not to eventually stumble onto something tailor made for you.
Another problem that the "entrepreneur" ecosystem generates is that information gets fragmented. People just throw up lessons on random subjects as a means to have content for the social media maw. Look for materials that are structured and comprehensive, with a logical start and end point on the way to teach a subject. That at least shows that the author is making an effort to actually teach and not just clout chase.
So let's get back into practicalities. You've somehow tackled HTML and CSS despite my terrible advice. Next is JS, and it's a big step up in terms of difficulty.
I began by trying to follow freeCodeCamp's curriculum but found that it assumes too many leaps of knowledge and relies on pre-built scenarios where you can progress well enough at first without really understanding what is actually going on. Eventually you hit a wall and get stuck, confused and wondering if you're dumb.
I don't think this problem is exclusive to fCC, by the way. A lot of learning materials are made by people who know a lot about a given subject, and probably have known it for so long that they've forgotten all the stepping stones that must be included to teach a certain subject to novices. In their mind such things are unconsciously filed under "everyone knows that", and skipped. But people can get stuck on the minutest of things and discouraged. It's only with the greatest of teachers that you get a constant consideration for what is going on inside the mind of the students so that no possible doubt can sneak by unexamined.
Fumbling around for alternatives, I followed a friend's advice to look at Asabeneh's 30 Days of JS. It consists of a bunch of humble markdowns hosted on Github. The text has spelling errors the author said he doesn't care about. They were a reminder not to judge books by their covers and a blessing from the forest gods. Asabeneh's lessons cracked the basics of JS for me like a ripe melon. After getting through it, I got back to the fCC course materials and found them to be a breeze. Now everything clicked. This, by the way, became my preferred way of using the fCC courses, as a test of knowledge instead of a learning material.
At this point I started to feel slightly lost again. I had some command of the big three and kept practising my JS with stuff like Codewars, but didn't have a clear idea of where to proceed to next. It was also obvious that this knowledge alone wouldn't be enough to get a job. Feeling a bit despondent, I started looking for people who had gone through the same process, hoping to get some pointers.
My search ended up wielding extremely lucky results. I chanced upon a particularly friendly frontend sage who had also pivoted to code later in life, Eduardo Vedes. Not only did he write back a very helpful reply after I contacted him, but also offered to mentor me. Though typically a mentor will also assist you with particular technical matters, their real value is in helping you find the shortest route out of the forest and into the place where you want to be. After all, they've already walked it.
I focused on learning React on his recommendation, as it gave me the best chances of employability. He also gave a list of books to read, the most immediately helpful of which was probably Eloquent JavaScript, which gives you a more bird's eye view of the language and some of its pitfalls.
So off to work I went. You will probably find your first contact with React to be a bit weird. Same goes for other similar libraries and frameworks. So far you've been learning that the separation of concerns between HTML, CSS & JS is a big deal. You then get to the frameworks and all that goes out the window. Get in loser, we're bundling concerns into components! It takes some adjustment and I found the official documentation on the philosophy of React to be helpful in figuring things out.
Then I went back to what had worked before: Asabeneh's materials, though his React stuff is less complete and by now probably outdated. Still, it was good enough to get me started and pass the fCC course materials. The final projects that fCC recommends were particularly important to affix everything into place, along with their take home projects under interview prep materials.
Then luck struck again and I managed to land my first job on the strength of a recommendation. I could see the light breaking through! I was finally out of the "Learn to Code" forest. This is also a lesson for everyone looking for an exit. Like in many other industries, no matter how good you are, how shiny your CV or how brilliant your portfolio, it really puts you ahead if you are personable.
Hopefully things will change, but the entry positions weren't exactly falling from the trees when I got in, and even junior positions were regularly mobbed by hundreds of candidates. The best strategy is often to already have a good relationship with someone that can put in a good word on your behalf when something pops up.
I empathize with all of you who prefer the company of your own thoughts. But in the context of coding, being sociable probably doesn't mean going out clubbing. You will be in the company of other technology loving nerds who also enjoy discussing JS esoterica, the intricacies of Dune lore, and pinpoint the precise moment gaming jumped the shark (it was Oblivion's horse armour).
So join some groups, make some friends and don't hesitate to ask people for help or advice. Most are very friendly. I certainly lost a lot of time being stubborn and trying to do it all by myself. You never know when you will be chancing upon a life changing friendship. Hey, start by adding me, why don't you.
With this we arrive at the end of year 0, the time I spent lost in the cursed "Learn to Code" forest before getting my first job as a FE dev. What was on the other side of the forest? An adventure for another day. My Year 1. But if you thought starting to learn the stuff was a pain, be prepared for things to get really crazy.