How I Became Self-Taught Software Engineer Thanks to FreeCodeCamp

Most of us are here to change/get a more meaningful job as Software Engineers. At first sight, it may look ridiculous as most of us here didn’t study anything related to Computer Science nor had prior experience with the IT world. That is why personally even though it was my dream I just couldn’t believe it, as sometimes all of those stories sounded like a scam or an “American dream”.

Long story short, if you don’t want to read the whole story I can just tell you that yes I have got a job as Software Engineer without any CS degree, boot camp. It took me more or less 3 years from the first idea to getting a full-time decent job, no one referred me, and everything was happening in Turkey and Poland, so we are not talking about realities in the USA, not even Western Europe. :slight_smile: Side fact was that I was nearly 30 years old, not a Math genius nor a computer freak, and spent my whole life working in jobs completely not related to IT.

In terms of technologies, I mostly focused on web development, to be more precise JavaScript and related stuff. After sending hundreds of CVs and having dozens of interviews for a Web Developer/ Frontend Developer/ Fullstack Developer/ JavaScript Developer, below I prepared the list of the necessary technologies.

  • JavaScript (learn it well!)
  • HTML (understand especially the difference between block and inline elements, and how DOM works with JavaScript)
  • CSS (knowing positioning, plus flexbox and grid should be enough)
  • Git (command line, creating repositories, switching branches, committing changes)
  • GitHub (Code reviews, Pull Requests)
  • Frontend framework/library (React/ Angular/ Vue)
  • TypeScript
  • REST APIs
  • Testing (Jest, Mocha)
  • Coding challenges (HakerRank, Codewars, Exercism)
  • Design Tools (Figma, Sketch)
  • Agile Workflow (SCRUM, JIRA)

Having good basics both theoretically and practically, plus some work in a team (internship/ open source) that you can prove with a live website/ code on GitHub, should be more than enough to land a first job. It’s not going to be easy of course, and prepare yourself for possibly not getting any feedback even after sending dozens/ hundreds of CVs, you will for sure have better and worse days, feeling stuck, and losing hope for any success. That’s OK, just keep going, find some meetups or people on programming groups on Discord/ Slack and try to cooperate with them and everything will be fine. If you have any questions don’t hesitate to send me a message.

Still here? If you want to read my story from the very beginning just scroll down.

TL;DR

No, it’s not going to be another success story of getting a job after finishing a few certifications at freeCodeCamp within a couple of months/weeks, nor I am a Bootcamp graduate. Everything is a bit complicated as my interest in computers and programming started somewhere back in 2006 or 2007, when I was a secondary school student. I even made my first money at the age o 13 or 14 for selling a very basic HTML template for a website to other kids.

However, I wasn’t good at math, it was nearly 15 years ago, and I used to live in a very small town in Poland. As you may guess, my interest in programming didn’t persist till high school times, when I decided to follow an Automotive technician career. Nevertheless, once I finished high school, life again changed my mind and after a couple of physical jobs I decided to get a university degree, but again it wasn’t computer science, but English Language and Literature.

Ante Programming

Until 2017 there was no interest in programming in my life, and I have already forgotten everything that I learned as a kid. My first day as a teacher in a primary school was like a nightmare, I literally left the class crying, didn’t want to do the job, and was constantly asking myself what the heck am I doing with my life? Somehow, due to the responsibilities, such as having to pay the debts and planning my future with my fiancee I had to keep the job and try to do my best. With time I got used to it, my salary was relatively not that bad, I could just get by and buy stuff that I need or wanted plus I had plenty of free time. On the other hand, I was again this “computer guy” at every school I worked at, and I felt that somehow I could have been doing the things related to IT as I really enjoyed and tasks related to it.

First Encounter with Programming

In this way, we are coming to the beginning of my journey towards becoming a software developer. Summer 2019, I sit in my office at the university and wonder how can I learn to code, and where? What is this CSS and how it works with HTML, Java and JavaScript are they not the same language? What is the difference between Frontend and Backend, do we even need a backend? Those kinds of questions I was asking myself when I was starting my learning path, and what is more, there was nobody around that could answer my questions. It was also the time when I have bumped on freeCodeCamp for the first time.

First Success

By a coincidence, it was the end of the term and many of my students were asking how can the calculate will their average grade let them pass to the next term or not. Without thinking too much, I decided that it can be great fun to solve the real problem and create a simple calculator that will tell my student did they pass or not. Around 2 weeks later, after copying heavily materials found on the Internet my application worked! What fun was that, I knew that it’s just a beginning. Shortly after, one of my students asked me to convert it to the mobile version. Here application Phone Gap helped a lot and within a couple of minutes, my application was running as a “native” Android app, which indeed was just kind of a browser that was opening only one website saved to a file. Nevertheless, satisfaction was unbelievable so I took the next steps and thought that learning Android programming will be super cool. Shortly after that, I have found an Android studio and tried my luck with Java.

First Failure

My first experience with Java was destructive, suddenly I had to write my programs in classes, compile the code, import libraries to do even seemingly simple things, strongly type my code etc. Unfortunately, it was way too much for me and my initial excitation was completely gone. This is how I almost gave up and spent months without doing almost anything. However, I didn’t want to give up that easy and at around that time I was looking for a university to finally get a Master degree that I was postponing for years. Of course, after studying Literature I wasn’t expecting to get enrolled on a Computer Science Master degree program but there was something new around the corner. At that time few Turkish universities introduced a new department called “Computers and Educational Technologies”. Sounded like a perfect match for me, and to avoid going too much into details I managed to get enrolled on exactly that program at a university that was around 100 km from Istanbul where I lived.

I had to pay for it, take days off from my full-time job, and commute, but the deal was getting a smooth transition from education to the IT world. It couldn’t have been better! That is why I gave up on learning on my own and focused on my daily activities, job, and studies.

New Reality and Time of Reflection

Probably It was a time of reflection upon our lives for most of us. Believe it or not, but even though the situation at first looked amazing my courses were not covering anything even close to the IT world - I was learning about the way how kids learn and think when they grow and how educational systems work. It was a huge misunderstanding and a waste of time. Finally, I realized that my classes will probably not help me much on my way to getting into the IT world and learning to code. That is why I have decided to give up and stop my studies at the university.

FreeCodeCamp Again

Again freeCodeCamp was my safe stop, where I felt that I am learning something, no one is trying to sell me anything, and community is very helpful. Meanwhile, I have also worked with a couple of other courses and tried some Python and Arduino based projects. Additionally, I managed to improve my past projects for the university, develop some simple apps, and even write a tutorial on how to build a robot based on Arduino plus deployed my first app (remote control for the robot) on the Google Play store that was built in Java.

With such accomplishments, and finished the first two certifications on freeCodeCamp I thought that I am getting ready to apply for a job. Expectations and reality were of course slightly different, I have sent dozens of CV but at that time no one even replied. At the end of the day, I wasn’t very much surprised but at least hoped that they will give me a chance of getting to the interview part. I was still far away from that point, so somehow it discouraged me to that point I gave up on learning how to code for weeks if not months.

Down and Up again

It was the end of summer 2020, my journey was already more than 1 year long, but I was still far from having a clear path and felt lost, maybe even more than at the beginning. Luckily, I have met some helpful people such as people from freeCodeCamp, and one motorcyclist which I met during the riding course back in Istanbul. It turned out that the guy was a full-stack developer working with web technologies. His advice was probably one of the simplest, yet most important ones - stick to JavaScript then move on to the frameworks (possibly React).

Back on Track, Destination JavaScript

Shortly after that, I had the bad luck of getting a very famous illness and as a result, I had to spend two weeks at home. I promised myself, that I am not going to lose any more time. Before diving deep into JavaScript and the freeCodeCamp curriculum I decided that I will spend my quarantine on doing the CS50 course to get a better understanding of CS terms in general. It’s not a surprise that the course was extremely difficult, if not the most difficult course that I have tried ever and I didn’t even finish half of the exercises but at least went through all of the courses.

Tutorial Hell

By the end of the year I have finished the CS50 course, plenty of other courses, freeCodeCamp certifications and created a full-stack app but… when I had to pop out the element from the array I didn’t know how to do it. This is another lesson - don’t stick too much to the tutorials, just keep on exploring and find your own ways to solve the problems. I went over the whole JavaScript part of FCC once again, there is even an article about it → JavaScript - How Did It Start? A Short Story Long of One JavaScript Course but soon after that, I tried to avoid starting another tutorial. One of the ways of practising real-life problems was solving tasks on CodeWars, HakerRank and Exercism, I definitely encourage any of you, to try to solve at least one easy task daily.

Vanilla is Not Enough

Alright, so all of those materials gave me fundamental knowledge about the basics of programming, web development, and of course JavaScript. However, nowadays almost no company uses just plain HTML, CSS and JavaScript in its basic form. Projects are getting more and more complex, there is almost more responsibility, web applications have a lot of functionalities and we have to maintain it somehow. It was time to pick a framework/ library that will give me some more insights how real-life projects look like, and help with getting my future job. As a response to this need, I decided not to be very unconventional and I chose to learn React as my main tool on the frontend part.

Let’s Start Again

React was like a nightmare, even though I had some knowledge of HTML, CSS and JavaScript - each time I tried to write something in React, I felt as if I am trying to learn completely new technology. In a way, it was true, as everything written in React has to be converted to plain JavaScript at some point. Yet, there were more things to come, such as functional components, hooks, TypeScript, REST APIs, testing, and more. How am I going to absorb all of that topics and know when and how to use them?

Rubber Duck

Do you remember that rubber duck from CS50? If not, it’s a duck toy that is quite iconic for CS50 courses but there is a deeper meaning. What’s the better way of learning, revising and reinforcing the acquired knowledge, than explaining things to others? Rubber duck debugging initial meaning is that you can solve most of the problems by explaining everything step by step aloud to a toy. In my case, I changed this a bit and wrote the whole tutorial articles where I tried to explain things, reinforce and share my knowledge with others. It was probably the best way to learn React, seriously just write your own tutorials and share them with others or even better find some audience and tell them how to do something. Before you start, please remember to be more like a teacher, and explain things in simple steps so that everyone can get something from and also it will be beneficial for you, rather than writing about what you have learned.

First Interview

A couple of months later, in spring 2021, when I have already published my second app to the Google play store (written in React Native) - finally, one company replied to my application and invited me for an interview! The position was described as a web developer with basic HTML, CSS and JavaScript skills so I was very hopeful. As a side fact, I got that much positive about my career change that I informed the vice-rector at the university that worked at, that I am going to resign soon and move back to Poland. A long-awaited day came, I have got the call from my future boss and what a surprise! The CEO of the company was already a few years younger than me, and probably I was about to become the oldest person at the company (not being even 30 at that time). Nevertheless, our conversation went pretty smooth, people were very kind but when it came to technologies I was asked about WordPress. WordPress?! I have heard of it but never used such a low-code/no-code solution when I was already learning much more advanced technologies such as React. Of course, I was honest and said that I have zero experience with it - it was the end of our interview.

Moment of Reflection

For the next two days, I just wanted to disappear and forget about everything. It was even about the fact that I didn’t know WordPress, but I felt as if the whole world moved forward and I was way behind. When I started to learn to code, I was 27 and I thought it’s not that much - I barely graduated from the university and was getting first years of work experience. The moment I realized that there are already many younger people than me with way more experience or even running their own IT businesses, was terrifying. I wasn’t used to it, as I worked mainly at a more traditional business and most of the time situation was completely different, so I always had that feeling that there are years ahead of me to develop my skills, climb up the leader or open my own business once I have enough life/business context. With such a young field as IT, things look completely different, everything happens much faster and we have to be prepared for such a situation. There was nothing more to do than just swallow my pride and accept the fact there are many much younger people, at higher positions that are going to manage my work.

TypeScript, Testing, Node.js and JS101

A short taste of bitterness didn’t destroy my hopes and dreams, the only thing I could do was study even more and sharpen my skills. I was applying for other positions, but unfortunately most of the time I didn’t get any response. Meanwhile, I had a chance to give 2 lectures as a part of an introduction to JavaScript at the university that I still worked at. Moreover, I developed another app - this time including also a backend part written from scratch in Node.js, added some testing and even implemented TypeScript on the frontend part. To reinforce my learning experiences, I kept on writing the tutorials so I could stay up to date with my progress.

More Interviews and More Hopes

The beginning of the summer of 2021 was marking my full second year of learning, and finally, I have started getting some responses from the companies. A few of them sent the tasks to solve, as a part of the hiring process. Tasks were mainly take-home projects, mainly about creating a simple web app with the ability to fetch and process data from a given API endpoint. I was excited to take any possible project, as I had no other choice and was slowly losing my hope. One of the companies asked me to create a to-do app, but with the login/signup functionality, editing the tasks, sorting, responsive design etc.

First Job Offer

Yes, you read it correctly I finally got the offer, and it was from the company that asked me to build that “complex” todo app. I wrote complex because as for the todo app, there were many things to implement, so it was a fully working CRUD web application that could work in any possible context. The next step was of course a technical interview, which was way more stressful than the app and I eventually made some mistakes. A few days later, the person from HR called me and gave me an offer. My dream was finally becoming true, but somehow I started to feel a huge imposter syndrome and there was one more thing - salary. The offer was almost the lowest legal salary in Poland at that time and I had to work from the office, so I had to move to Poland, rent a flat etc. It means that I should spend more than I would earn not to mention the costs related to moving to a different city and indeed country. At the same time, the economical situation in Turkey was getting worse and worse, inflation was around 20% monthly, and I just left my job and got my earnings in Turkish liras.

One story comes to an end

It was almost the middle of the summer of 2021, time was passing and I still haven’t got the job. Additionally, I have to mention that I was already living for nearly 8 years in Turkey, my whole life was there and suddenly I was changing not just the career but also countries, even if I was moving back to my own country. It wasn’t easy emotionally, as I had so many memories, friends, and things there. If it wasn’t enough, as a part of my last days in Turkey I went for a holiday to a place called Marmaris. When I was leaving the bus I realized that there is a huge fire around us and it turned out to be one of the biggest natural disasters in the history of that country. I didn’t want to witness it, but it will probably be one of those things that will always stay in my mind. Ultimately sad ending to my journey in that country. Why did I even mention it? As you may guess the situation had a huge impact on my inner energy and motivation. The scale of this one was much more than just a few unfortunate events in one’s life.

Internship

When I was waiting for my plane back to Istanbul, after a very unfortunate holiday I have got a phone call - it was a software house from Poland, which I had an interview with a couple of weeks before. The fun fact here is that the first step in that company was finishing React course at freeCodeCamp! Nevertheless, after a short conversation, I have got the offer but this time it was only something like an internship plus it was unpaid. I had very mixed feelings, from one side I was extremely happy and satisfied that I have got the offer but on the other hand, I just rejected a paid offer and now I was going to work for free. Since I haven’t got anything else, I decided to accept the offer.

Moving Back to Poland

More or less two weeks later I was already back in Poland, doing my internship remotely from my mother’s house. When I met my family after almost 2 years and told them about my plans, they just thought that I have completely lost my mind. Back in Turkey I had a quite stable life, used to work in my field, and had all of the material basic needs. Now at the age of almost 30, I was going to start from zero, change countries, jobs, and make ends meet. It just couldn’t work, at least in their opinion but I was stubborn and knew that I am close.

Meetups

In the beginning, I mentioned that I had no friends in the web development industry, but of course, we can always look for people around us and attend meetups. Unfortunately, it was a pandemic time when all of the meetups were cancelled so I couldn’t attend any. What is more, meeting new people is also more difficult. Actually, I managed to establish some friendships over the Internet both with people in the same position as me, as well as with people who were already working as software developers. Not to extend it anymore, when I came to Poland I learned that there is a local JavaScript meetup called WarsawJS, just around 200 kilometres from my hometown. Barely 2 days after landing in Poland, I was at my first meetup in my life! The feeling was just amazing, to see people with similar interests and to see that they exist and you can come and have a chat with them. As it turned out later, it was just a beginning as I eventually attended plenty of other meetups and met some great people over there, plus learned a lot of new things.

Internship Experiences

Somewhere in the middle of the summer, I have started to work in a team of 3 developers, who were also learning just like me. The plan was quite simple - we had to build a website in Next.js for a local academic club, that would display data fetched from a headless CMS. Software houses provided us with the boilerplate code, Figma design, and SCRUM masters that would lead us throughout the project. There was one more catch, and the thing was that there were 4 teams that we’re recreating the same website. As you may guess, there was some kind of feeling of pressure behind our necks, as just one of the projects was about to be selected and sent to the client. Naturally, we wanted to make possibly the best website and win, and the stake was getting the job so most of us wanted to show ourselves from possibly the best side.

Not This Time!

Well, we tried our best but we had to accept the fact that others did some parts better and our project was not chosen by the software house. Visually it was probably the best one, but the reason was that our code was a bit too complex. We used Redux as a global state, and at the same time, we also avoided using libraries for things such as form validation. Nevertheless, it was one of the best experiences I had until that time as finally, I could learn things that no tutorial covered. Working in a team, learning the Agile - SCRUM system, reporting our tasks to JIRA, working with UI designer, doing the code review of peer programmers, testing our solutions, and using CI/DI tools. You may say that I have done more complex projects, than just almost a static website which could have been done easily in any CMS system, but the whole frame of that project was just priceless. It wasn’t just about the project itself, but about the quality of the code and the product itself. As a side note, I have to mention that it really boosted my CV, and out of a sudden I have started getting more interviews, doing a better job during the process, and even recruiters start to contact me while just a few months before that I was begging them to answer my messages. To sum up, any experience in a team is priceless, either find a place for an internship like that or contribute to some open-source project.

The Show Must Go On

Everything was great, I was back in Poland, learning how to code, attending meetups and finishing my internship but still, I haven’t got any full-time job and had to find something to just pay my basic living expenses and keep going. Besides coding, I am also interested in the world of cryptocurrencies and decentralization, especially when you live in a country where inflation is high, and you cannot afford to buy a house - you have to find a way to save your saving and fight with the inflation. OK, but where is programming and what about my journey? One of the first companies in the world to invest in cryptocurrencies were also IT companies and not to quote the exact name there is a very famous CEO that invests in cryptocurrencies and tries to influence people all around the world. The company itself doesn’t do anything strictly related to cryptocurrencies, rather it develops its own BI application. While looking for a job, I found their ad somewhere on the Internet and realised that they are currently looking for software developers for one of their branches located just 200 kilometres from my hometown. Applying to such a big company was a bit brave, but in the end, I had nothing to lose so I just sent my CV and forgot about it.

The Offer

One day, I was sitting in a coffee shop and creating a component for the website that we worked on during my internship. Suddenly my phone rang, when I answered I heard the voice of a lady from the company I have applied to. I just couldn’t believe it! However, they thanked me for my CV and told me that since I don’t have any background or experience, it may not be the right time to apply for this position, but they have another position that I may be interested in - teaching internal courses related to their software. At first, I just wanted to say thank you, and just forget about it. On the other hand, even though it wasn’t a programming role, it was an IT company and it could have been a smooth transition for me as I already had teaching experience and some IT experience. Long story short, I passed all of the tests and interviews and a few weeks later I have got the offer.

New Beginning

My internship came to an end, and just a few days later I had started my job at a new company not as a software developer but as an educational consultant. Yes, you read it correctly - I accepted the offer, moved to the capital city of Poland, rented a house and started a new life in Poland. As a part of the internal system for all newly hired workers, I had to go through a 5 week-long Bootcamp. We had to learn how to create visualizations, reports and even set up virtual environments, establish connections with the databases, and even write some bits of Python code. Sounds great, but still it wasn’t a coding job, and my main job was about teaching those courses to other workers and clients.

Just after a few days, I knew that it’s not my dream position and if I am going to stay again I will have less time for coding and maybe even forget my newly acquired skills. That is why I kept trying and I was still looking for my dream job.

Interview Hell

Just a few days before I started my job, one of the software houses located in Poland contacted me as they liked my CV. The first step was a short chat with the HR department, as they liked the conversation they invited me for the second part. The second part was about creating a weather app from scratch in React. It took me about 4 days to design the app, code it, deploy it to GitHub pages and share my code with the company. Their feedback was that positive, that they invited me to a third step which was an interview in English, related to my soft skills. Again everything went smoothly, and I got the invitation to the 4th step which was pair coding. It was probably the most difficult part, where I had to solve real coding tasks in React within less than 45 minutes. I barely finished the exercises, but they didn’t work that well, developers helped me a lot and my code was not that great.

Two weeks passed and I got the email that my pair coding session was good enough so they want to invite me for another session, and of course, I accepted. The fifth step was a technical interview with the frontend team leader where I had to explain my past experiences with coding, answer some technical questions etc. One day, my phone beeped and I realized that I have got the email from the same company - it was an invitation for you guessed it - the 6th interview. Again, it was a technical interview, but this time with a technical leader located in the HQ of the company. It was even more difficult than the previous ones, as I had not only to show the code of my past projects but also I had to give reasons and explanations why I did things in a particular way. This time things went quite quickly and I got the answer the very next day.

Dreams Come True

It was another day as a teacher at my new company, right after finishing my work I checked my personal email and there was a message from the software house I had an interview with, the previous day. I just couldn’t believe my eyes! The message stated that they were really satisfied with my performance and I was finally offered a job. Indeed not even a job but a contract on which I had to create my own company and work for them as their provider. The conditions were much better than any other offer I have got before, so without thinking much I called them to accept the offer.

Last Hard Turn

At the same time, I felt extremely guilty as I had just come to the company, promised to work as a teacher and I was leaving them in a difficult situation. Also, my manager was a great person, with a big heart and I just didn’t know how to tell them about my decision of resignation but I had to do it somehow. Even though he was not happy about my decision, he showed up again as a very understandable and kind person as he even encouraged me to follow my dreams and shared his personal stories. I had only two weeks to finish all of the formalities, and start my new job as a full-time programmer.

Plot Twist

Nothing could go wrong from this point, but things again got complicated. Let’s stop here for a while, I was already working at an IT company that was looking for software engineers and I was going to leave it for the other IT company to work as a software engineer. Doesn’t it sound strange? Yes, not just for me but apparently for the company I worked at, so once they learned that I am going to change my careers, they have decided to talk to me and check my coding skills. At first, I was completely sure, that I am leaving the company, even I have signed my resignation, and said “yes” to the other company.

It turned out that my current company was also satisfied with my performance, and was interested in working with me. The situation was very confusing as I didn’t want to change my mind at the last moment, but it was very difficult to say no when I already knew the company, people and their approach.

Face Difficult Situations

Time was running out and I had to decide if I decided to move to another company I would work completely remotely, as their office was 4 hours away from my house, while my current company was just 10 mins away from my house and I could work both from the office and remotely. It wasn’t an easy decision, but eventually, people were the main factor that helped me to make the decision. Barely a few months before, I was desperate and hopeless, but now I had two great offers to choose from - what a luxury!

New Journey Begins

Yes, it’s not the end, rather just a beginning. I decided to stay at my current company in a role of a software developer, but now it was time to learn much more. One of the reasons why I wanted to change my career was avoiding monotony, having the ability to learn every day, build new things, and solve real problems. It was very difficult to get to that position, but once we are here it doesn’t mean that we are going to stay here for long - it’s just a start of a new journey. :slight_smile:

3 Likes

I read your whole story!! Congrats man :raised_hands::tada:

Many struggles, setbacks and twists, but in the end it makes it that much sweeter to achieve your goal!!

Really, really happy for you and so glad you finally did it. I’m sure many devs who are still in the early stages of becoming a professional developer will be inspired by this. It’s realistic.

And welcome to the self-taught professional developers club! :grinning_face_with_smiling_eyes:

1 Like