April 12th, 2019
While mowing the lawn on a hot summer day in 2017, I listened to a podcast interview with Alexander Callaway. With great enthusiasm, he explained how he had taught himself programming, and how everyone could do it.
Yesterday, one and a half years later, I finished the course and got my certificate. It says that I’ve done 300 hours of coding. I’ve put it up on the wall, but why am I so ambivalent about it?
On one side there is the feeling of being a total fake because of all the failures and the realization of how little I know. The imposter syndrome is always bothering me.
At the same time, I am proud. I have learned a lot about programming, learning techniques, myself and other topics. And I have spent approximately 600 - 700 hours of coding since 2017. But let’s first look at what I did wrong.
After listening to Callaway, I was so excited. I was ready to learn to code in no time.
It was a lot harder than I imagined.
I realize that I’ve been more focused on finishing tutorials and checking tick boxes than actually learning to code. The passive learning part has been too big.
It’s not that I haven’t learned anything. But I didn’t take the time to understand the basics and to ensure that I had a thorough understanding of the concepts. I’ve also built too few projects of my own. You can read and watch all you like, but building something from scratch is a much better way to learn.
Besides, freeCodeCamp was not the only course I signed up for. So I ended up jumping around a lot, only finishing a couple.
Daily tweeting also made me rush forward to keep up with the others in the community. I was hoping to give the impression that I understood more than I actually did. And in my projects, I copied a lot of code from Google, as opposed to understanding it and writing my own versions.
I almost quit several times. As a father of two girls, a full-time employee and a regular visitor to the gym, I was always short of time. I started coding at 5 am in the morning, at work and in the evenings. I regularly fell asleep in front of the computer at night, messing up my code as my head hit the keyboard.
After one year of trying to learn everything, tweeting daily, journaling about my progress and getting way to little sleep, I finally broke down.
I’ve thought a lot about how it ended up like this, and I am sure these are the main reasons:
I was a new learner and didn’t know better.
At my work, there is a growing demand for programming, so I felt (and still feel) stressed to be able to provide.
I am 39 years old and feel that I can’t compete in the market if I don’t hurry.
I was (and still is) excited and want to learn everything.
I didn’t have enough focus and/or my priorities were wrong.
Learning to code has become important to me. It is my chance to finally be able to have a skill I can be proud of. So I rush to make it happen.
Almost two months passed before I got back to coding, but it was always on my mind. I had invested too much, and I loved it. Luckily, I didn’t give up.
So how did I turn it around?
Last Christmas I realized that if I was going to become a programmer, I had to change my tactics. Everything I had learned so far I could have finished earlier, had I not rushed or been so stressed about it.
I started again, but without getting up so early. I restructured my day and got to spend a couple of hours in the evenings to code. I quit all social media. I turned off all notifications on my computer. I put the phone away and focused on understanding everything at a fundamental level.
That’s when the magic happened. I actually got more time. At least that’s how it feels. I now have a blog, in which I write about what I’m learning. Every night I keep a simple journal, I keep up with my workout, I read books AND I am learning to play the guitar. And after focusing only on freeCodeCamp every day, I finished the rest of the course in no time. I found the passion again!
Even though the imposter syndrome is still strong, I realize that I actually should be proud. I know a lot more now than when I started. I have used my skills in several projects at work, and I have built stuff I only dreamt about a couple of years ago.
And I have learned a couple of important fundamentals about programming. It’s hard. It demands constant learning and that again demands deep focus and discipline. Besides, my code will never be perfect. No code seldom is. But as long as I do my best and make things work, I will improve. The important thing is to use the skills you have acquired.
That being said, I won’t take any rests or slow down. I want to start over with my new strategy. Things like .map, .filter, .reduce, hoisting, closures, etc. are still pretty abstract to me.
So my plan is as follows:
Start from scratch, and describe what I learn in my own words on this blog.
I will not move on until I am sure that I have grasped the concepts
Build more projects and blog about the progress.
Enjoy and have fun
I want to leave you with some tips I’ve picked up during these 18 months. As mentioned I have learned a lot about the learning process itself. And I have acquired great knowledge from this steep and challenging process.
Learning difficult things requires deep work (focus)
Don’t progress in the course if you don’t understand a concept.
Aim for 50⁄50 (1h/1h) active and passive learning. After passive learning (watching tutorials, reading a book, etc.), be sure to try the ideas and concepts with code.
Write about code in your own words and pretend you are trying to teach others. It is very effective.
Actually, teach others.
Space out the learning. Don’t rush. If you repeat the same over several days, you remember it better.
Don’t try and learn everything (get started, and then keep optimizing).
All code is garbage (You should not feel intimidated).
Don’t be afraid to learn.
The ability to learn fast (focus) is important. Change is the only constant. What you learn today is soon irrelevant.
Projects will never be perfect, but it’s better to have a lot of imperfect working apps than none at all.
Focus on the project and not the technology. It’s no point learning a technology you will never use.
One will never learn everything.