Originally published on Medium in November 2018
Hi, my name is Alberto, and this is the story of how I learned to code, wrote a programming book, started my own blog and became a software developer.
Everything started when I was in New Zealand and my girlfriend was studying at a local University. One of her upcoming exams was about HTML and I got curious and started helping her.
That was the first time I looked at a piece of code. I started studying HTML and CSS from Coursera and my first website was awful, a bunch of text centered in the middle of the page with an ugly colored background.
October 2016 - One of my first attempts at a blog page. it's all static, the links go nowhere
After I helped her prepare for her exam, I continued to study and practice because for the first time in a long time I was doing something I enjoyed.
- Codecademy is very good to get some hands-on basic experience with a new language. You won't learn much but if you just want to learn the very basics it's enough.
- Coursera, on the other hand, introduced me to the world of MOOCs. Back then I didn't know there were such things as FREE online courses. I remember taking this course, taught by the John Hopkins University, and even though I'm not aware if it has been updated, I can assure you the teacher is very good.
After discovering MOOCs, it was just a matter of time before I stumbled upon the most popular of them all: CS50 by Harvard. Admittedly, I never finished it, but it's a great course to introduce you to the foundations of computer science.
During that same period, around October / November 2016, I discovered freeCodeCamp and I started working on their curriculum. To this date, I haven't completed the certificates, but that's mostly because of a bit of laziness in completing some of the projects. I also prefer working on my own projects and ideas.
Other very useful websites and resources I'd like to suggest that were useful to me were:
- Lynda (even though some of their courses are not up-to-date, with a free trial you can have access to a lot of useful material)
- Team Treehouse (another paid website but again, with a free trial you can have enough time to watch a few courses)
- Udemy (huge marketplace of courses, it can be hard to find what you need. Don't blindly trust reviews as I've found that many courses with high ratings were not my favorites)
- Udacity (high-quality material for free. Not a lot of topics but what they have is very good, curated by the likes of Google and other tech companies)
- Khan Academy (very good to learn math and algorithms, I highly suggest you taking their algorithm course, it will provide you with a good foundation)
- Awesome (a repository on Github where you can find literally everything you may need)
- Developer roadmap (another repository that can help you guide you in your path to become a developer)
A pearl of wisdom from the FreeCodeCamp random quote machine project I made in December 2016
Just a tip regarding Udemy: stay away from those "10 projects in 1, from zero to hero" kind of courses that last 30+ hours. If you are like me, you'll end up dropping them halfway through (or even earlier). Everybody is different, so maybe you've had a different experience. Let me know.
After a few months in New Zealand, I followed my girlfriend to Vietnam where I caught the opportunity for a free part-time Bootcamp in Ruby on Rails.
If you happen to be in Vietnam, check them out at Coderschool.vn.
Regardless, attending that Bootcamp was the best decision I could make.
Another tip I can give you is:
Surround yourself with like-minded people, that have similar goals and interests to you. Pursuing your goals will become easier.
My goal was to become a better programmer. By spending more time together with other people like me, I felt more motivated and I was able to learn a lot.
One example I remember was learning how to use the command line. When I was self-learning I was always reluctant to start using it, but during the Bootcamp I was forced to learn how to use it.
Sometimes we are just too lazy and what we need is a small push to do the extra step required to improve.
Having a weekly deadline to complete a project and being able to see my classmates' projects motivated me to push myself and do more as well.
The best part was working with two other guys on the final project which gave me an insight into what it is like to be a part of a team. We had to write our own user stories, work on sprints to create an MVP, iterate to improve the product, fix bugs and finally deploy it to production.
We did not win, but it was a great experience to get a glimpse of real-world scenarios. The Bootcamp lasted only 2 months and after the demo day, I didn't get any job offers. So what next?
After a few weeks, clueless about what to do next, my girlfriend and I decided to create our own application.
We spent a lot of time working on our idea and doing research.
Unfortunately, my skills at the time were at a point where I could not even build an MVP, and our idea got rejected by a local startup accelerator.
Looking back at it, I think it was for the best, as I prefer working as part of a team for now before starting my own endeavors.
Here's another tip: if you really want to start your own startup, get ready and mentally prepared because it's gonna be a very hard and time-consuming task. I suggest you watch videos from the Y-Combinator on YouTube, as they can help you evaluate your idea and see if it's actually something worth spending your time on.
Another static page I created - June 2017
Fast forward a couple of months and hurray, I got a job. But wait, it wasn't a programming job. It was a teaching job.
One of the most popular jobs for foreigners in Vietnam is teaching English. That was what I also ended up doing, despite being a non-native speaker.
My passion for programming was still high and growing (at this time I had been studying for a year) but this new job brought new challenges that made me lose motivation for a few months during which I almost didn't touch my laptop.
After making my decision, I started waking up early (4:30/5 AM) to study before going to work.
It took me around 2 months, from March to April 2018, to come up with the first draft of my book. Around this period I also started my first blog, built with Jekyll and hosted on Github Pages. I've since created a new one, built with Wordpress (Now rebuilt with Gatsby).
When I first posted my book on Reddit I was blown away by the response. So many people liked it and that made me feel very proud and happy.
Here's another tip: I think that if you are struggling with some concepts, trying to explain them to somebody else is a great idea. If you can't explain it simply enough for a beginner to understand it, it probably means that you also did not fully understand it.
This project boosted my confidence and made me realize I went a long way since those days in New Zealand playing around with HTML.
You can download the whole picture here (it's too big to embed in an article).
My first-ever cheatsheet, not the full version.
Fast forward a few more months, and it was August. At that time I was getting ready to sign my contract for another year as an English teacher, as I didn't feel confident enough to apply for any programming position during the summer.
Yes, despite all the time and effort I put in, I did not feel ready to apply for a job. I felt scared by the possibility of getting rejected.
Another tip I can give you is this: if you don't feel like you are qualified enough to get a job, chances are that you actually are just suffering from the 'Impostor Syndrome' and you may have already built more than enough skills to be a Junior Developer. Just go for it, the worst you can get is a no.
One day I decided to join a newly created Facebook Group of local expats working in tech and I introduced myself, my skills and my accomplishments.
Remember, the best way you can impress your recruiter is with your personal projects, but sometimes you can think outside the box. In my case, my project was the book, but I wouldn't be surprised to hear of somebody who got an interview or got hired because they had a blog where they wrote tutorials or guides that showcased their knowledge and passion.
At the moment I felt very surprised and also scared. I started thinking about all the ways the interview could go wrong and I also thought about declining the offer. Please, do me a favor and don't be like me. Fortunately, I accepted it in the end.
Still, since I didn't feel ready for the interview, I asked the recruiter for a week to prepare myself. I had never practiced whiteboard exercises or anything interview related so I decided to dedicate that week to practicing problems and interview-related questions.
YouTube is full of mock interviews and they can really help you boost your confidence. Practicing coding games such as Codewars is also very good to improve your problem-solving skills. Don't wait until the last moment, start preparing for an interview months before you even think of applying for a job. You may never know when you will need these skills and it's better to start early. A book I always see being suggested is "Cracking the coding interview' but I can't recommend it as I have not read it.
It turned out I didn't need most of that stuff in my case. More important than my previous knowledge was my eagerness to learn more and my passion for the subject. That seemed to be enough to convince them to hire me for a Junior position.
The interview went very smoothly, and finally, after all the time I'd spent learning to code, I received an offer! 👍 Now I'm in my 10th month here. I'm loving every day and get to work on new features and learn new skills.
My original plans were to become a web developer but now I'm currently working as a software developer, working daily on an enterprise app and honestly I'm very happy about it.
I am learning tools and languages I never used or practiced much such as MySQL, AWS, Node, Fusebox, Knex and especially Typescript.
This marks the end of my story. Do you have one that you want to share? Or is there simply anything that worries you in your quest to become a developer?
If this was useful, please please share