How I turned from a neophyte into a software developer in 9 months without interruption from my main job

Original author: Austin Tackaberry
  • Transfer
In this article I will tell you how in nine months I traveled from almost zero experience in software development to the position of a programmer with a six-figure salary, while working full time and learning on my own.


Every time I come across someone’s success story, the first thing I hope is to look at the author’s biography - suddenly his story will coincide with mine. So far, I have not come across a single person who has everything worked out exactly the way I have; most likely, and you will find some differences between my experience and your own. Nevertheless, I hope that this story will serve as an inspiration and source of valuable information that you could add to your database.

Full report


In high school, I took a course in Visual Basic for Applications (this was nine years ago). In the first year of university, where I studied as an engineer, I got a little acquainted with C, Python, Matlab and Labview (this was seven years ago). I received a diploma from a reputable university with a degree in chemical technology with a good average mark (this was three years ago). In addition to these classes, I no longer practiced programming, either in school or at university, until I finally decided last year that I wanted to master it. After graduation, I got a job as a process engineer at an oil refinery and worked there until I went to the developers.

Why I decided to change jobs


I liked to solve technical problems, but at the same time I realized that I want to sooner or later move into the business and startups. My thoughts flickered on to get an MBA, but as soon as I looked at the prices of the best universities, my interest faded away immediately.

On May 27, 2017, I once again googled MBA programs and somehow went out to software development. It seemed to me that this is an ideal option. Demand for developers is growing steadily, salaries are decent, and this area is also great for getting into the world of startups without a huge start-up capital. You only need a computer, and you will have unlimited possibilities (well, or almost unlimited).

In other technical sectors, you can’t just come up with an idea, immediately start implementation, show the result to users and iterate with a minimum of investments and a low entry threshold. In the field of chemical technology, for example, if you come up with a new product, you, in fact, will need either a work factory or money to design it.

I heard that some quit their job and sign up for bootcamps. But the more I studied the materials online, the more clearly I realized that it’s quite realistic to master all this myself with the proper degree of motivation and concentration. You may argue that this alignment deprives the networking and assistance in finding work that bootcamps provide. There is some truth in this, but I was lucky in that I live in the San Francisco Bay area: this allowed me to visit several meetings and establish professional contacts there.

In addition, even in the worst turn of events, I would simply understand that I could not cope on my own, would quit and go to bootcamp.


goal


Setting goals is necessary, especially if you are trying to combine full-time education. When there is no external pressure, it is too simple to allow the process of self-education to stretch to infinity. Therefore, you need to create pressure from the inside. The goal should be simple and related to quantitative indicators. Carefully study the scope to set a reasonable, achievable goal. I formulated mine like this:
Within a year, get a job as a developer with a salary not lower than the one I get now.

Plan


Now that the goal is set, you need a plan that will help achieve it. Here at this stage it is worth reading success stories voraciously. Of course, they will not completely correspond to your situation, but nevertheless, something useful can be gleaned from each. I built (and iterated) my plan based on sources such as learnprogramming subreddit , freeCodeCamp forum and Medium .

On May 27, 2017, I decided to make a breakthrough in the IT sphere and rushed head first into it. On the same day, I decided that I would spend no more than 40 hours a week on my main work, so that there was time to write the code in the evenings and on weekends. The good news: I documented the whole process in some detail.

After endless revisions, the final version of my plan took on something like this:

  1. Take the Intro to CS course (Introduction to Computer Science) to understand basic concepts properly.
  2. Work with freeCodeCamp materials until I am able to independently create full-cycle web applications for the portfolio.
  3. Refactor to make the code tidier, add testing, and pay attention to more complex concepts.
  4. Contribute to open source projects.
  5. Prepare for interviews.

My plan began with a simple one. At that moment I decided to follow the guide for developers from Google and started with the course that was recommended there as an introduction - CS101 from Udacity.

Month # 0 - CS101 by Udacity, Harvard Course CS50


From a pleasant feeling that a serious decision was made, a burst of energy came over me. As soon as I got home from work, I immediately started writing code and did not stop until it was time to go to bed. And at the weekend he did the same. Udacity's CS101 tracks the percentage of completed assignments, and it served as a great source of motivation for me. Every day, after finishing classes, I wrote down the current percentage. The first 75% of the course I went in ten days. The remaining 25% were more concerned with recursion and were more difficult for me. All in all, it took me twenty days to complete the CS101 course from Udacity.

In the process of completing the course, I also began to read the learnprogramming subreddit very enthusiastically. They wrote that self-taught developers who want to change their profession need to be active online. I decided to create new accounts on Twitter, Reddit, Stack Overflow, Medium and Quora under my full name in order to appear in the Internet environment.

In addition, I decided to connect with resources like Instagram, Facebook and Reddit (with the exception of programming subreddits), which distracted me from classes. I began to look on the phone only those news and posts that were related to the development. It was crucial to learn the best practices and training sites. That is how I entered the Harvard CS50 edX course.

Initially, I was satisfied with the prospect of taking only one introductory course, but everyone vyingly advised the Harvard CS50 course, and I decided that I would take it next. Students who studied computer science at other universities said that this course alone gave them more knowledge than a couple of years of university studies. By the end of the zero month, I mastered the first five lectures and homework.

Month # 1 - Harvard CS50 course, Linux, first mitap, freeCodeCamp


I finished the Harvard CS50 course by the middle of the month. I will not dwell on this now, because I have already devoted a separate detailed post to this experience .

In short: this is an excellent course, I highly recommend it. David Malan is an excellent lecturer, in addition, a whole bunch of resources are available that will help with the development of the material. It all starts with C, then you move on to Python, and finally consider web development. The program is very rich, you will have to go through a lot of material, but, it seems to me, it's worth it.

After completing the CS50, I decided to install XPS 15 Ubuntu on my laptop next to Windows. The weekend, when I did this, was not a pleasant one. I screwed up the markup and nearly killed my laptop. I hardly restrained myself, just to not throw it away and buy a new one.

Little by little, I began to get down from Windows and eventually completely switched to Ubuntu. I wanted to at least forcefully, but to make me feel comfortable working with the command line. In my opinion, it helped to some extent, but I still have room to grow.

I joined the 100 Days of Code Challenge to write code daily and keep my attention from scattering. It is important to record your achievements. If you record the results every day, it may seem that nothing has been done especially, but later, looking at the records for a month or several months, you will see that you have made good progress, and this will motivate you to continue.

I knew that everything will depend on networking, so I gathered courage and went to my first meeting for developers. In general, I have never been to meetings before, not to mention programmers. My nerves broke out so that when I arrived, parked and walked to the door, I was quite ready to turn around and go home.

Luckily for me, the group met for the first time that day. I quickly realized that there was nothing to worry about. Other participants, too, did not know each other, no one condemned anyone, and everyone was happy about the opportunity to learn something new. This mitap was the beginning of a whole series for me. As a result, in nine months I visited more than fifty mitaps.

I am glad that I started attending the meetups early. Most people take it when they start looking for work, and at this stage it is almost too late. There are many reasons to start early. Here are a few of them:

  1. It takes a lot of time to build relationships. If you start early, by the time you search for a job, you will form relationships with people who can put in a good word for you.
  2. Talking about programming with strangers is a great way to prepare for an interview.
  3. You will have the opportunity to learn about new frameworks, tools and training resources from those who have moved further than you. This can make adjustments to your future self-education plans.

At this point in my path as a programmer, everything looked rather hazy. I needed to decide what exactly I want to develop.

In the end, I chose web development, as it seemed to be in good demand, and there were a lot of resources on the Web. Based on this decision, it was necessary to think over the next step. Some friends thought that at this stage I should decide which web applications I want to make and get to work. Others suggested joining The Odin Project or freeCodeCamp.

The organizer of the weekly meetings that I attended knew Ruby and wanted to write projects on it. Largely for this very reason, I decided to hit the Odin Project.

Two days later, I abandoned this venture.

This is one of the disadvantages of self-learning. Now it may seem to you that you know exactly in which direction to move, and the next day you already doubt whether you are acting correctly.

I read somewhere that the popularity of Ruby is declining, and a comparison of the number of jobs in Ruby and JavaScript has confirmed this information. And so in the end I started working with freeCodeCamp. The only thing that confused me in this resource was the fact that they offer their ideas for projects, so that all participants do the same thing. It bothered me: I would like to somehow catch the eye of employers. Nevertheless, I really liked it on freeCodeCamp and I can safely recommend it. If you want to know more about my experience with this site and get some tips, read my post on this topic.

Month # 2 - YDKJS, frontend on freeCodeCamp, React


I took up the series of books “ You Don't Know JavaScript ” because it is recommended as an addition to the freeCodeCamp course. I had to read some sections twice (the text is very informatively dense), but this is an excellent source to deal with visibility areas, closures, promises, and all other JavaScript concepts that you constantly hear about and that you want to learn, but don't dare, because that they seem very complicated.

I worked through the entire frontend section of freeCodeCamp. The format of the list and the display of the approximate time spent on the remaining tasks motivated me to finish as quickly as possible. In addition, my hands were itching to move on to the next section and learn React. However, this led to the fact that the style of my projects was minimal. I did only what user stories required, and was not distracted by anything else. Looking back, I might have paid more attention to the visual appeal of the products. It is possible that this would help me to master CSS more deeply.

Next, I had to take on React, and I was enthusiastic.

I heard a lot about him, and I was eager to join the company of cool guys. At the same time, I hesitated a little because of problems with the license that just arose at that moment. I am very glad that they have already been resolved. Learning React has proven challenging. Then I did not know where to read good tutorials (but now they are found at every turn).

I tried reading the documentation and going through the Tic-Tac-Toe tutorial from Facebook, but not everything was clear to me about them. I was told that if I can’t understand this material, I don’t know JavaScript well enough. Therefore, I returned to the books You Don't Know JavaScript, but they turned out to be too heavy for me.

Month # 3 - freeCodeCamp React, CodeClub, backend course on freeCodeCamp (start)


In the end, I decided that I would just start working on projects on React and see how things went. My code looked disgusting, but it helped me a little to understand the language.

The same group that I went to meet every week decided that it would write projects entirely in JavaScript, not Ruby, and chose the creation of the group’s website, CodeClub.Social, as the first project .

Using React and the mitap API, I made special cards with which the user could sign up for the next three meetings right on the site. I reluctantly interrupted the course on freeCodeCamp for the sake of this task, but this opportunity could not be missed. Working on a project as part of a small group was very cool. Plus, it allowed me to learn Git and GitHub.

By the end of the month, I switched to the backend section of the freeCodeCamp course.

Month No. 4 - backend course on freeCodeCamp (end), Yeggle


I completed all the tasks related to the API on freeCodeCamp, but after I got to the Image Search Abstraction Layer project, I started to deviate from the program.

I was eager to create a full-cycle web application myself, so at the first glance at the name of this project I had the idea of ​​my own product. I decided that I would make an application on node that would save the random addresses of images with imgur in the database, and then add a frontend that would give the user-specified number of random images from this database. It is not for nothing that people say that you work harder and more successfully on your own idea - this is true.

I was very proud of myself when I finally got everything working. The system was cumbersome and not too beautiful, but it did what was required of it.

Continuing to work on assignments with freeCodeCamp, I was simultaneously wondering which projects I could do. At that time, I regularly did jogging and usually came up with ideas just at that time, and when I returned home I wrote them down. Thus, by the time I was ready to start, I had already accumulated a list of possible projects.

Finally, I felt that I was ready to start working on my own high-quality full-cycle web application that I can present to users and add to my portfolio. I was right on the alert.

Whenever I want to go to some new cafe, I first open Yelp to read reviews, and then go to Google Maps and see what they write there. But what if we make an application that displays both sets of reviews on the screen for comparison?

So Yeggle appeared . When writing it, I used Node, Express and React, as well as the Yelp API and Google Maps. A couple of times I came across difficulties that, it seemed, could not be solved in any way, but still brought the matter to the end and was very proud of my work. I posted the application on Reddit, but it did not cause any interest. It was a shame, but I tried not to take it to heart.

Month No. 5 - StockIT


This month was not so productive for me, because I spent the first half on vacation in Japan and Thailand!

However, I started and completed my next project. I often came across stories about how hard it is for a self-taught developer to get a job, so I decided that I needed to come up with something like that. I recalled a game where the Dow Jones Industrial Average was on the rise and the player had the opportunity to make one purchase and one sale so as to make a profit. The goal of this game was to convey to the user how difficult it is to replay the market.

I had the idea to create a similar game, only it will be necessary to fight there not with the market, but with the machine learning algorithm. And I did StockIT .

I watched a video tutorial on Pandas and Scikit Learn, which described several different machine learning technologies. At first I wanted to include something clever from deep learning, but I realized that this would require a huge database and significant time costs, which I am not ready for.

Instead, I limited myself to a linear regression model. I thought this part would be the most difficult, but it turned out differently. The hardest part was reconciling D3 with React. Both libraries sought to take control of the DOM. There are some other libraries that could help with their association, but they seemed to me too heavy. Ultimately, I used D3 to generate the SVG, and React to work with the DOM, and it seemed to be pretty good.

This time, when I posted the project on Reddit, everyone liked it! It turns out that the local audience, just like investors, is very partial to machine learning. A positive response from Reddit helped me believe in myself. People played my game and enjoyed it!

Month №6 - jobSort (), preparation for job search


Having finished with StockIT, I immediately jumped to the next project. I wanted to create a job board that would combine small job listings from individual IT websites - Stack Overflow, Github and Hacker News. To add some kind of zest, I decided to set up sorting by technologies that the user would like to work with, and the ability to mark them as more or less priority.

For example, let's imagine that I am looking for a job in a company that needs a specialist in JavaScript, React and / or Python, and at the same time really want to work with JavaScript and React, but I don’t have strong feelings for Python. Then I set priority 3 to JavaScript and React, but Python sets it to unity. Jobs will be sorted accordingly.

I had a lot of difficulties with this project, I had to change the course of action a couple of times, but I was satisfied with the final result. In its final form, the technology stack included React, Node, Express, and MySQL. I posted the application to the cscareerquestions subreddit , and he managed to collect 650 views until it was deleted - sharing personal projects is not allowed there.

The "final" version of the product lies here , and if you are interested in reading about my torment and refactoring, I refer you to this post .

Due to all these problems, work on jobSort () took most of the month. I met for a cup of coffee with a friend I met at the first meeting, and he advised me to start sending out resumes already. I read a bunch of stories in which the developers admitted that they dragged on for too long. Yes, and on Reddit no matter how many posts I came across with the question “When is it best to send a resume?”, The answer “Right now” always got the most votes.

I imagined it all this way: I will advance according to the plan, draw up a solid portfolio with personal projects, then I will work on contributions to open source projects, after that I will prepare for interviews, and finally I will start sending out resumes. But a friend convinced me to leave this plan and immediately start looking for work. Therefore, by the end of the month I compiled a portfolio and a resume. The newsletter was scheduled for next month.

Month No. 7 - Testing and Job Search


This month I took for the completion of projects and job search. I also wanted to learn testing and Redux.

I added on CodeClub.Social flexbox to make it more interactive. Improved UX in the mobile version of jobSort (). Added testing with jobchaort () using mocha / chai / enzyme - it was difficult to configure, it was easy to start, and to achieve 100% coverage was again difficult.

By the end of the month, I responded to 63 vacancies. I saw this as an opportunity to evaluate myself. Will my portfolio and resume make an impression? If so, what should you work on before you go for an interview? First, I selected jobs from the Who is Hiring section of Hacker News and from Indeed. I drove vacancies with Hacker News through jobSort () to determine which ones to pay attention to. On Indeed, I tried to break into non-software companies just to see if I could get a call back or an invitation to an interview at least somewhere.

At first, I conducted the newsletter quickly, without trying to somehow personalize my resume and cover letter. Later, I decided to personalize them all the same and try to directly contact one of the company employees. This method worked clearly better than the initial “frost” approach.

For the whole month I called back five times: two times - recruiters, three times - companies specializing in software development, in particular:

  • dotcom company that offered contract work related to testing and DevOps
  • recently launched food analytics company
  • rather large-scale and successful startup, which was recently bought by a large corporation

In two of them, I successfully passed a telephone interview with HR officers, but did not reach the stage of an interview in the office anywhere. I was already pleased that I had been called back three times, this experience taught me a lot.

On the Web everyone said that no one expects from juniors deep knowledge from the very beginning, it is enough that they have enthusiasm and a desire to learn. Just spit, I thought. I have so much enthusiasm and desire to learn. However, after these calls it became clear to me that no one needs juniors. Employers expect the candidate to know what he is doing from day one.

These interviews showed me that I should:

  • have enough skills to benefit from day one
  • have enough self-confidence to convince others that I can benefit from day one

Month # 8 - Night Shift, Redux, Open Source, Office Interview


This month began with the fact that during my main job I was transferred to the night shift for forty days - six twelve-hour working days a week, from five in the evening to five in the morning. Darn.

I understood that I could not do much with this regime, but I had a goal in front of me, and I wanted to achieve it, so it was impossible to just take a month break.

I refactored the jobSort () code to implement Redux - to my surprise, it was not at all as difficult as I thought. I listened to a lot of podcasts and read a lot of posts on this subject, but until I got down to business myself, everything somehow did not fit my head.

I really like how Redux organizes data. It is interesting now to read the opinions of people who are unhappy with it. Of course, I still do not have enough qualifications to speak categorically, but I really like the pattern of their reducer.

According to the plan, I had to devote this month to working with open source. I expected to make my first contribution to an open source project, and the contribution was supposed to be ingenious and to a first-class library. I methyl in React itself!

Everyone insisted that it was difficult to read their code, not to supplement it. But I had to stand out, show my uniqueness. I knew that I could not bring anything serious, but still I wanted to give a hand.

To start, I read all the documentation from and to, and then began to pore over the code base. Reviewed all issues and pull requests. A thorough study of the documentation for React has brought me a lot of benefits, I am glad that I did. But I quickly realized that the main problem with contributions to React code was that there weren’t so many suitable tasks for beginners, and they were dismantled on the fly.

At one of the mitaps I attended, Anthony Ng advised me to pay attention to Downshift, a Kent C. Dodds autocomplete library. This advice was a turning point for me. That was exactly what I needed. A suitable level of complexity, enough problems that needed help, not too many people who wanted to participate, an maintainer always ready to help, and a neat, well-tested code. On top of that, there I found solutions for many of the difficulties that I could not cope with while working on jobSort ().

Somewhere in the middle of the month I received a letter from one of the companies to which I sent a resume in the previous one. They suggested that I have a telephone interview, and then a technical interview, also by telephone. The technologies that interested them coincided with the set that I mastered - React, Redux and D3. For the most part, I just talked about my projects and explained why I made this or that decision. After that, they invited me to chat live. My first office interview!

I didn’t have time to prepare at all, so I came with the conviction that I won’t get a job, but I’ll get valuable experience in interviewing. On top of that, I slept for three hours that day - the night shift did not go away, and it was very inappropriate. Fortunately, during the technical part I had to write on the board - everything was limited to an hour-long programming session. The assignments were generally standard, but I was still very nervous.

First, I climbed out of my skin to show that I know everything and I do not need to peek anywhere. Then, when it became clear that I did not have enough time to complete the task, I realized: I just have to give up on what impression I am making and just look for answers on Google or on Stack Overflow. As a result, I did not manage to complete the task to the end and from this I concluded that I failed miserably.

Accepting the fact that the programming section is overwhelmed, I spent the rest of the interview in a relaxed state. Ultimately, I left the office with my head held high. In the worst case scenario, I will learn a lot from this experience, and in the best case, I will be offered a job.

Month No. 9 - Job Offer


I received my first job offer exactly 9 months and 7 days after the moment I decided that I wanted to plunge into the world of programming with an eye to changing my profession. The fact that they were ready to take me after the first personal interview inspired confidence, but on the other hand, what if I refused and there would be no other invitations in the next few months? As a result, I accepted the offer and was very pleased with my decision. I really wanted to write code for money!


Advice


Until now, I basically just told my story, sometimes inserting recommendations. If you read this, then most likely you are either considering changing your job or studying programming with the intention of moving into this area. I hope that the tips below will help you work out a plan or stick to what you have already drawn up for yourself and achieve your goal.

1. Find ways to motivate yourself and use them. In my case, lists, documentation of progress and communication in IT communities helped. If you have no motivation to go to the goal, everything else loses its meaning - you simply will not finish the job.

2. Set goals and achieve them.I would even venture to argue that goals should be set every month, if not every day. Monthly goals help not to deviate from the set course and move to the main goal, and daily goals are needed to force yourself to continuously make some progress. This strategy worked for me: I made plans for the next day in the evenings. So I avoided situations where all day doing unproductive work with a false feeling as if you were doing something useful. This made it necessary to compare what was accomplished during the day with what was planned.

3. Attend mitaps without waiting until you are ready.As I mentioned above, going to a meeting with other developers can be scary. But overall, everyone is generally friendly and happy to help. Perhaps you will meet people who do not want to communicate with you, but such a minority, and no one will look down on you. And generally everyone likes to give advice (that's how I am here, for example).

4. Make contributions to open source without waiting until you are ready. When you first start learning programming, GitHub seems like a scary place where you can’t indulge in life. In fact, there they are very friendly to beginners, and in general it is a great platform to read a good code and get feedback on their work. If you still have doubts, I can advise my article “ Why you should immediately contribute to open source".

5. Start sending resumes long before you are ready. I learned this with difficulty: it seemed to me that I had a special situation. I thought that I didn’t have to probe the market in order to understand what weaknesses needed to be tightened. I thought that I myself would feel when I was ready to start looking for work. Well, now I can tell you: no inspiration, that now it’s time, you won’t happen, so you can start with the same success right now. Just do not go crazy and do not respond to 300 vacancies before you master the cycle operator. Just keep in mind that the best way to understand what kind of knowledge you lack is to offer your candidacy and try your hand at the market.

Well, now back to writing code!

Also popular now: