📜 ⬆️ ⬇️

How I turned from a neophyte to a software developer in nine months without interrupting my main job

In this article, I will tell you how in nine months I traveled from almost zero experience in software development to a programmer with a six-figure salary, while working full time and learning on my own.


Whenever I come across someone’s success story, the first thing I look at is the author’s biography with hope - suddenly his story coincides with mine. So far, I haven’t yet come across a single person who has everything worked out exactly like mine; chances are, and you will find some differences between my experience and your own. Nevertheless, I hope that this story will serve as an inspiration and a source of valuable information that you could add to your database.

Full report


In high school, I took a Visual Basic for Applications course (this was nine years ago). In my first year at university, where I studied as an engineer, I learned a little about C, Python, Matlab, and Labview (this was seven years ago). I received a diploma of a solid university in the specialty "chemical technology" with a good average score (this was three years ago). In addition to these classes, I no longer practiced programming, either during my school years or at the university, until I finally decided last year that I wanted to master it. After graduation, I got a job as a process engineer at a 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 go sooner or later into the sphere of business and start-ups. My thoughts flashed about getting an MBA, but once I had a look at the rates of the best universities, I immediately lost interest.
')
On May 27, 2017, I once again googled the MBA programs and somehow went into software development. It seemed to me that this is an ideal option. Demand for developers is growing steadily, wages are decent, and besides, this area is great for getting into the world of startups without a huge start-up capital. All you need is a computer, and unlimited possibilities will open up before you (well, or almost limitless).

In other technical branches one cannot simply think up some idea, immediately start implementation, show the result to users and iterate with a minimum of investments and a low threshold of entry. In the field of chemical technology, for example, if you come up with a new product, you, in essence, will need either a working plant or money to design it.

I heard that some people quit their job and are recorded in bootcamps. But the more I studied the materials online, the more clearly I understood that it is quite possible to master all this with the proper degree of motivation and concentration. You can argue that such a deal deprives of the opportunities for networking and job search assistance provided by the bootcamp. There is some truth in this, but I was lucky in the sense that I live in the San Francisco Bay area: this allowed me to visit several meetings and establish professional connections there.

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


purpose


Setting goals is necessary, especially if you are trying to combine training with a full-time job. When there is no pressure from outside, it’s too easy to let the process of self-education stretch to infinity. Therefore, you need to create pressure from the inside. The goal should be simple and quantitative. Carefully study the scope to set a reasonable, achievable goal. I formulated my so:
During the year, get a job as a developer with a salary not lower than the one I get now.

Plan


Now that the goal has been set, we need a plan that will help achieve it. Here at this stage it is worth reading success stories avidly. Of course, they will not exactly match your situation, but still you can learn something from each of them. I built (and iterated) my plan based on sources such as the sabreddit learnprogramming , the freeCodeCamp forum and Medium .

On May 27, 2017, I decided to make a leap into the IT sphere and rushed into it headfirst. On the same day, I decided that I would spend no more than 40 hours a week on the main job, so that there was time to write the code in the evenings and on weekends. Good news: I have documented the whole process in some detail.

After endless reworkings, 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.
  2. Work with freeCodeCamp materials until I am able to independently create full-cycle web applications for a portfolio.
  3. Refactor to make the code neater, add testing, 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 Google’s developer guide and started with the course they recommended as an introductory one - CS101 from Udacity.

Month # 0 - CS101 from Udacity, Harvard Course CS50


From the pleasant feeling that a serious decision was made, a surge of energy covered 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 doing the same. Udacity CS101 tracks the percentage of completed tasks, and this was an excellent source of motivation for me. Every day, having finished classes, I wrote down the current percentage. The first 75% of the course I took in some ten days. The remaining 25% were more concerned with recursion and were more difficult for me. Overall, it took me twenty days to complete the CS101 course from Udacity.

In the course of the course, I also began to read the learn how to program very enthusiastically. They wrote that self-taught developers who want to change the profession, it is necessary 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 light up in the Internet environment.

In addition, I decided to get involved with resources like Instagram, Facebook and Reddit (with the exception of programming sabreddits), which distracted me from my studies. I began to browse on the phone only those news and posts that were related to the development. It was critically important to learn the best methods and areas for learning. That is how I entered the Harvard CS50 course on edX.

Initially, I was satisfied with the prospect of having only one introductory course, but everyone advised Harvard CS50 in vain, 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 course CS50, Linux, first mitap, freeCodeCamp


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

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

After completing CS50, I decided to install Ubuntu XPS 15 on my laptop next to Windows. The weekend, when I was doing it, was not a pleasant one. I ruined the markup and almost killed my laptop. I could hardly resist just to not throw it away and not to buy a new one.

Little by little, I started to get off Windows and eventually completely switched to Ubuntu. I wanted to let at least by force, but to ensure that I was comfortable working with the command line. In my opinion, this helped to some extent, but I still have room to grow.

I joined the challenge of “100 days of code” to write code daily and not allow attention to dissipate. It is important to record your achievements. If you are recording the results every day, it may seem that nothing has been done, but later, looking at the records for a month or a few months, you will see that you have made good progress, and this will motivate you to continue.

I knew that everything would depend on networking, so I took courage and went to my first developer meeting. I have never been to mitaps before, not that programmers. My nerves broke out so that when I arrived, I parked and walked to the door, I was quite ready to turn around and go home.

Fortunately for me, the group met for the first time that day. I quickly realized that there was nothing to worry about. Other participants also did not know each other, no one condemned anyone and everyone was glad to have 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 to attend mitas early. Most people accept this 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. To build a relationship takes a long time. If you start early, you’ll have connections with people who can put in a little word for you to the job search phase.
  2. Conversations on 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 learning resources from those who have advanced further than you. This may make adjustments to your future plans for self-education.

At this stage of my journey as a programmer, everything looked rather vague. I needed to decide what exactly I want to develop.

In the end, I chose web development, since it seemed to be in good demand, and there were many resources on the Web. Based on this decision, it was necessary to consider the next step. Some acquaintances thought that at this stage I should decide which web applications I want to do and get to work. Others advised to join The Odin Project or freeCodeCamp.

The organizer of the weekly meetings I visited, knew Ruby and wanted to write projects on it. It was largely for this reason that I decided to hit The Odin Project.

Two days later, I abandoned this idea.

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

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

Month # 2 - YDKJS, frontend on freeCodeCamp, React


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

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

Then I had to take on React, and I was full of enthusiasm.

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

I tried to read the documentation and follow the Tic-Tac-Toe tutorial from Facebook, but it was not clear to me in them. I was told that if I can’t understand this material, then I don’t know JavaScript well enough. Therefore, I returned to the books You Don't Know JavaScript, but they also turned out to be very 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 for React and see how things go. My code looked disgusting, but it helped me understand a bit of the language.

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

Using React and the mitap API, I made special cards with which the user could sign up for the next three meetings directly 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 turned out to be very cool. Besides, it allowed me to master Git and GitHub.

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

Month # 4 - backend course on freeCodeCamp (ending), Yeggle


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

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

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

Continuing to work on assignments with freeCodeCamp, I simultaneously wondered what projects I would be able to do. At that time I did jogging regularly 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 begin, I already had a list of possible projects.

Finally, I felt that I was ready to start working on my own high-quality full-cycle web application, which I would be able to present to users and add to my portfolio. I was downright on full alert.

Every time I want to go to some new cafe, I first open Yelp to read reviews, and then I switch to Google Maps and see what they write there. And what if you make an application that will display 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 did not seem to be resolved, but nevertheless brought the matter to the end and was very proud of my work. I placed the application on Reddit, but it did not arouse any interest. It was a shame, but I tried not to take it to heart.

Month # 5 - StockIT


This month was not as productive for me, because I spent the first half of it on holiday in Japan and Thailand!

However, I started and brought my next project to completion. I often come 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. I remembered 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 there it would be necessary to fight 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 tricked out of deep learning, but I realized that this would require a huge database and considerable time costs, for which I am not ready.

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

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

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


After finishing with StockIT, I immediately jumped to the next project. I wanted to create a job board that would combine small job listings from selected IT websites - Stack Overflow, Github and Hacker News. To add some kind of zest, I decided to set up the sorting according to the technologies with which the user would like to work, 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 JavaScript, React and / or Python specialist, and at the same time I really want to work with JavaScript and React, but I don’t have strong feelings for Python. Then I set priority 3 for JavaScript and React, but for Python I put one. Jobs will be sorted accordingly.

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

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

Because of all these problems, work on jobSort () took most of the month. I met over a cup of coffee with a friend whom I met on the first meeting, and he advised me to start sending out a resume. I re-read a bunch of stories in which developers admitted that they had been dragging on for too long. Yes, and on Reddit, no matter how many posts I came across with the question “When is it better to send a resume?”, The most votes were always typed in the answer “Right now.”

I imagined it all as follows: I will move forward according to the plan, make a solid portfolio with personal projects, then work on contributions to open source projects, after that I’ll prepare for interviews, and finally I will start sending out a resume. But a friend convinced me to leave this plan and immediately start looking for a job. Therefore, by the end of the month I made a portfolio and a summary. The newsletter was scheduled for next month.

Month # 7 - Testing and Job Search


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

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

By the end of the month, I responded to 63 vacancies. I saw it as an opportunity to evaluate myself. Will my portfolios and resumes make a proper impression? If so, what needs to be worked on before you go for an interview? First, I selected jobs from the Who is Hiring section of Hacker News and Indeed. Jobs with Hacker News I drove through the jobSort (), to determine which ones to pay attention to. At Indeed, I tried to break into a company that does not work with software, just to see if I can get a call back or an invitation for an interview at least somewhere.

First, I carried out the newsletter in a short time, without trying to somehow personalize the resume and cover letter. Later, I decided to personalize them all the same and try to directly contact one of the company's employees. This method worked clearly better than the original approach "from the cold."

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


In two of them, I successfully completed a telephone interview with personnel officers, but I did not reach the stage of the interview in the office anywhere. I was already pleased with the fact that they called me back three times, this experience taught me a lot.

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

These interviews showed me that I should:


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


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

I understood that I couldn’t do much with such a regime, but I had a goal, and I wanted to achieve it, so I couldn’t just take a month’s break.

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

I really like the way Redux organizes data. It is interesting now to read the opinions of people who are unhappy with them. Of course, I still have not enough qualifications to express myself 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 the open source project, and the contribution was supposed to be ingenious and to a first-class library. I methyl in React itself!

All claimed that their code and read something difficult, not something to supplement. But I had to stand out, show my uniqueness. I knew that I couldn’t bring anything serious, but I still wanted to put my hand on it.

For a start, I read all the documentation from and to, and then began to hang over the code base. Revised all issues and pull requests. A thorough study of the documentation for React has brought me much benefit, I am pleased that I did. But I quickly realized that the main problem with contributions to the React code is that there are not so many suitable tasks “for beginners”, and they are disassembled on the fly.

On one of the meetings I visited, Anthony Ng advised me to pay attention to Downshift, a library for autofilling by Kent C. Dodds . This advice was a turning point for me. It was exactly what I needed. , , , , , . , , jobSort().

- , . , — , . , , , — React, Redux D3. , , . . !

, , , . , — , . , — . - , .

, , . , , , : , , Google Stack Overflow. , , .

, , . , . , — .

№9 —


9 7 , , . , , , — , ? , . !


Tips


, . , , , , . , , , .

1. . , IT . , — .

2. . , , . , , - . : . , , - . , , , .

3. , , . , . , , , . , , , , . ( , ).

4. , , . , GitHub , . , , , . , « ».

5. , . : , . , , , . , , . , : , , , . 300 , . , , — .

!

Source: https://habr.com/ru/post/352878/


All Articles