Editor's note: Whether in the near or long term, general jobs in traditional manufacturing are facing shrinkage or poor financial prospects. Many practitioners are facing the problem of career change. Software development will be one of the most promising careers for a long time, and it is the first choice for many people to change careers. But how easy is it to change careers without a foundation? What if you give up your current job and concentrate on further study in order to lay a foundation, but still can't find a job in the end? Austin Tackaberry, who successfully switched from a chemical engineer to a software engineer, may be able to give you some inspiration. In this article, he details how he worked while self-studying and finally successfully found a job as a software engineer. Whenever I start reading a success story, I immediately look up the author's background, hoping it will fit me, but I never find that those people's backgrounds match mine, so mine probably won't match yours either. Regardless, I hope my story can inspire others and serve as a useful data point to add to your dataset of success stories. Full Disclosure I took a VBA course in high school (9 years ago). I learned some C, Python, Mathlab, and Labview in my freshman engineering class (7 years ago). I graduated from a very good college with a degree in Chemical Engineering and a good GPA (3 years ago). I never programmed after leaving school (high school or college) until last year when I decided to learn it. After college, I got a job as a process engineer at a refinery, where I worked until I switched to software engineering. Why I changed my career I loved solving technical problems, but I knew I had to enter the business/startup world at some point. I had always toyed with the idea of getting an MBA, but every time I saw the prices at the top business schools, my interest immediately went away. On May 27, 2017, I Googled MBA again, but somehow I came across something related to software engineering. And it seemed like a good fit for me. Software engineers are in high demand, salaries are high, and it's the perfect industry to enter the startup world without having to start up too much capital. You just need to know a computer, and your opportunities are (almost) limitless. Here you just need to have an idea, start developing it, show it to users, and iterate with a little bit of funding, and the barrier to entry is very low, which is not the case in any other industry. In chemical engineering, basically you need to have a running factory, or you need a lot of money to design a factory if you have an idea for a new product. I’d heard about people quitting their jobs to attend bootcamps, but the more I read about it online, the more I realized that I could actually teach myself if I was dedicated and focused enough. You might ask, wouldn’t I miss out on the networking and career advice that bootcamps offer? That’s true, but I was lucky enough to live in the Bay Area so I was able to attend some of the events where I built my own relationships. Besides, the worst-case scenario is that I find I can’t learn it on my own, in which case I can quit my job and join a training camp. Target You need to have goals. Especially if you want to study on your own while working full-time. If you don't put extra pressure on yourself, your study will be delayed. So you need to put internal pressure on yourself. Your goals should be simple and quantifiable. You should do enough research and come up with reasonable goals. My goals are as follows: Get a software engineering job with the same or better salary than mine within 1 year. plan Once you have a goal, you need a plan to get you there. This is where you need to learn as many success stories as possible. Of course, none of their situations will be exactly the same as yours, but you can learn something from everyone. I used resources like the learnprogramming subreddit, the FreeCodeCamp forums, and Medium to create my plan (and keep revising it). On May 27, 2017, I decided to start my journey of learning programming, and I dove right in. I decided to work no more than 40 hours a week so that I would have time to code after work and on weekends. Lucky for you, I kept a detailed record of my entire learning process. After many iterations, my plan ended up looking like this:
My plan was very simple at the beginning. At that time, I thought I should follow Google's technical guidelines, so I chose an introductory course they recommended, Udacity CS101. Month 0 — Udacity CS101, Harvard CS50 Making this big decision gave me a lot of energy. I couldn't wait to start coding as soon as I got home from work and didn't want to stop until I went to bed. Then I kept doing it all weekend. Udacity CS101 tracks completion percentage, which was a big motivator for me. I recorded our completion percentage every day after I finished programming. In 10 days, I completed the first 75%. The last 25% focused on recursion, which was a bit difficult for me. All in all, I finished Udacity CS101 in 20 days. While I was taking Udacity CS101, I also started to visit the learnprogramming subreddit quite frequently. I learned from it that it is very important for self-taught developers who are looking for a career change to be active online. I decided to create new accounts on Twitter, Reddit, Stack Overflow, Medium, and Quora using my full name to increase my online presence. I also decided to stop checking Instagram, Facebook, and non-programming Reddit subreddits to avoid distractions. I only checked my phone to see programming-related news and posts. This was critical to ensure I was finding the best learning path and resources. This is how I discovered Harvard CS50 on edX. Initially I was content with just taking an introductory course, but everyone seemed to recommend Harvard CS50, so I decided to give it another try. Computer science students from other schools took the course and said they learned more from Harvard CS50 than they did from taking 1 or 2 years of computer science at their own college. The general consensus was that it was hard but worth it. By the end of month 0, I had completed the first 5 classes plus the homework. Month 1 — Harvard CS50, Linux, first meetup, freeCodeCamp About halfway through this month, I finally finished CS50. I don't want to talk too much about my experience studying CS50, because I have already talked about my experience in detail in this article. Bottom line: This is a great course that I highly recommend. David Malan is an excellent instructor and there are a lot of resources to help you get through this course. You start with C, then move on to Python, and finish with web development. It's a very tight schedule and covers a lot of material, but I think it's well worth it. After CS50, I decided to configure my XPS 15 to dual boot Windows and Ubuntu. It was a frustrating weekend. I messed up the partitions and the laptop was almost a brick. I almost wanted to throw that laptop away and buy a new one. I slowly gave up Windows and ended up using Ubuntu as my primary platform. I tried to force myself to get used to the command line to a certain extent, but I still have a long way to go. I started a 100-Day Code Journey to make sure I stay focused and keep writing code every day. Tracking your progress is important. If you make progress every day, even if it doesn't seem like much, over time you'll realize you've come a long way, and that'll keep you going. I knew that networking would make or break me, so I plucked up the courage to attend my first coding meetup. I had never been to a meetup before, let alone a coding meetup, so I was so nervous that once I drove there, parked my car, walked through the door, I almost wanted to turn around and go home. It helped that this was the first meetup for the group. I quickly realized that I had no reason to be nervous. No one knew anyone else, no one was there to judge anyone, and everyone was eager to learn. And this was just the beginning of a party fun. I ended up attending over 50 meetups in 9 months. I'm glad I started going to meetups early. Most people start going to meetups when they're looking for a job, but by then it's almost too late. There are so many reasons to go early. Here are just a few:
This was the point in my coding journey where I was feeling a bit uncertain. It was the time for me to decide what kind of software developer I wanted to be. In the end, I chose web development because it seemed to be in high demand and there were a lot of resources online. Once I figured that out, I needed to figure out what to do next. Some people suggested that at this stage I should think about what kind of web app I wanted to develop and then move on. Some people recommended The Odin Project or freeCodeCamp to me. The guy who was in charge of planning the meetups I attended every week knew Ruby and wanted to do projects in Ruby, which was a big reason why I decided to devote myself full time to The Odin Project. Then 2 days later I decided to give up the idea. That's one of the downsides of taking the self-taught route. One minute you think you've found your way, and the next day you're wondering if you're on the right track. I read that Ruby was falling out of favor and confirmed this by searching for Ruby vs. JavaScript job opportunities, so I finally decided to start freeCodeCamp. One of the things that was bothering about freeCodeCamp was that the project ideas were theirs, so everyone who attended the bootcamp did the same project. However, I was apprehensive at first because I wanted to stand out from the crowd of applicants. However, I ended up loving freeCodeCamp and now highly recommend it. To learn more about my experience and recommendations for freeCodeCamp, check out my article. Month 2 — YDKJS, freeCodeCamp front-end, React I started reading You Don't Know JavaScript (YDKJS) because everyone recommended it as a supplement to freeCodeCamp. I was forced to reread several chapters because it was so dense, but it's the perfect resource for learning lexical scope, closures, reservations, and everything else about JavaScript that you hear about and want to learn but never try because it's hard. I finished the front-end portion of freeCodeCamp. The checklist format and time estimates helped, motivating me to finish quickly. I was eager to move on to the next section to learn React. However, this also meant that my projects were minimalist. I did my best to implement the user stories and nothing else. In hindsight, maybe I should have focused on making the project more appealing. Maybe that would have led me to learn CSS a little more. The next step was to learn React, and I was so busy that I almost couldn't catch my breath. I had heard a lot about React and was ready to be one of the cool kids. However, I was a little hesitant because of licensing issues at the time. I'm really glad that's no longer an issue. Learning React was difficult for me. I hadn't discovered any good tutorials at the time (but now there seem to be plenty everywhere). I tried reading the documentation and following Facebook's Tic-tac-toe tutorial, but I didn't really understand how it worked. I was told that this wasn't for me, which meant I didn't understand JavaScript well enough. So I went back to You Don't Know JavaScript, but again, it was too advanced for me. Month 3 — freeCodeCamp React, CodeClub, start freeCodeCamp backend learning Finally, I decided to do the freeCodeCamp React project to see how it was done. The resulting code was ugly, but it did help me understand React better. The weekly meetup I was attending decided to do full stack projects in JavaScript instead of Ruby, and they also decided that the first project would be to develop a website for the meetup group, CodeClub.Social. I built cards using React and the Meetup API that would allow users to sign up for the next 3 meetups through our website. This was a little hard for me since I had to put freeCodeCamp on hold to do this, but it was an opportunity I couldn't pass up. I was excited to work on a project with a small group of people. It also helped me learn Git and Github. Before the month was over, I started learning backend development at freeCodeCamp. Month 4 — Completed freeCodeCamp backend learning and Yeggle development I completed all of the freeCodeCamp API projects, but I started to branch out from freeCodeCamp to work on the Image Search Abstraction Layer project. I'm dying to build a full stack web app, so when I saw the name of this project I had an idea for my own project. I wanted to make a node app that stores random imgur URLs in a database, and then make a front end that outputs user-specified numbers for those random images. It's true what they say: you work harder and are more successful when you come up with a project yourself. When I finished the project, I felt a sense of pride. It was ugly and clumsy, but the most important thing was that it worked. During freeCodeCamp, I also learned which projects were within my capabilities. I would go running a lot, and ideas would pop up during my runs. I would write them down when I got home. This way, I would have a list of projects to work on when I was ready. Finally, I feel like I’m ready to share my useful and polished full-stack web app with users and add it to my portfolio. I can’t wait. When looking for a new restaurant, I always open Yelp to see reviews, then open Maps to see reviews. What if I made an app to compare the two? So I built Yeggle, which used Node/Express/React with the Google Maps and Yelp APIs. There were several obstacles that I thought I couldn't overcome, but in the end I managed to finish it and I'm very proud of the app. Then I posted it on Reddit, and no one cared. It was a bit disappointing, but I'm not going to let that get me down. Month 5 - StockIT I didn’t get much done this month because I went on vacation to Japan and Thailand for 2 weeks! But I started and finished my next project. I kept reading about how hard it was for self-taught developers to find jobs, so I thought I had to do something unique. I remembered a game where you had a buy opportunity and a sell opportunity when the Dow Jones stock chart started moving, and the goal was to beat the market. The purpose of the game was to show you how hard it was to beat the market. My idea was to make a similar game, but instead of playing against the market, your opponent was a machine learning algorithm. So I created StockIT. I followed some video tutorials covering various machine learning techniques on Pandas and Scikit Learn. I originally wanted to do some cool deep learning techniques, but I realized that it would require large datasets and time, which I couldn't afford. Instead, I went with a simple linear regression model. I thought that would be the hard part, but it wasn’t. It was getting D3 to work with React. Both libraries want to control the DOM. There are other libraries that can help bring the two together, but I thought it would make the project too bloated to introduce new libraries. I ended up using D3 to generate the SVG and React to handle the DOM, and things looked pretty good. I shared it again on Reddit and this time everyone loved it! It turns out that, like VCs, people on Reddit are fascinated by machine learning. The love from Reddit users has given me a huge confidence boost. People are playing my game and loving it! Month 6 - jobSort(), preparation before job hunting After StockIT, I started my next personal project. I wanted to create a job board that aggregated job opportunities from smaller tech-oriented job listing sites like Stack Overflow, Github, and Hacker News. To make it more unique, I decided to sort the jobs by the technical requirements and how much they were needed. For example, let's say I'm looking for a job that requires knowledge of JavaScript, React, and/or Python, and the recruiter is very keen on JavaScript and React, but less so on Python. This requirement might be quantified as JavaScript being 3, React also being 3, and Python being 1. This way the list can be sorted. I encountered various obstacles while working on this project, and was forced to adjust my course several times, but I finally made a product that I was satisfied with. My final technology stack used React/Node/Express/MySQL. I posted the project on the Reddit cscareerquestions sub-forum, and it received 650 views, but it was removed because they did not allow personal projects to be posted there. The “final” product is here. If you’re interested in my process and refactoring, you can also check out this article of mine. Because of my own reasons, jobSort() took up a good portion of my time that month. I ended up having coffee with a friend I met at the first meetup, and he suggested that I should start applying for jobs now. I keep seeing people saying that they waited too long to apply. And every time I see a post asking when to apply for a job, the most upvoted answer is always "now". My original idea was to improve my own strength by completing my personal project portfolio according to my own structured plan, then make some contributions to open source projects, and finally prepare for interviews and apply for jobs. This friend convinced me to abandon that plan and start applying. So this month I made a material and resume. Next month I will start applying. Month 7 - Testing, job hunting This month I'm focusing on my own projects and applying for jobs. I also want to learn about testing and Redux. I added flexbox to CodeClub.Social to make it responsive. I improved the mobile UX of jobSort(). I added tests for jobSort(), I used mocha/chai/enzyme, it was hard to set up, but easy to get started, but hard to get 100% coverage. By the end of the month, I had applied to 63 jobs. I looked at this as a self-assessment. Was my portfolio/resume good enough? If so, what did I need to do to prepare for interviews? I initially applied through Hacker News: Who is Hiring and Indeed. On Hacker News, I used jobSort() to determine which jobs to apply for. On Indeed, I tried non-software companies to see if I could get an invitation or interview there. At first, I applied quickly and didn't personalize my resume/cover letter. Then, I decided to personalize my cover letter and resume and then try to send an email to someone at the company. This was obviously a better approach than just scattering flowers. I received 5 calls that month - 2 from recruiting firms and 3 from software companies, including:
I passed the screening of two of the HRs, but neither of them asked me to go for an on-site interview. Of course, I was quite satisfied with these three phone calls and learned a lot from them. Everyone online mentioned that junior developers are not expected to know that much right from the start, they just need to be passionate and excited to learn. So I thought that was a no-brainer. I was passionate and excited to learn. But what I learned from these calls is that no one is looking for a junior developer. They expect you to know how to do it from day one. These calls taught me that I needed to:
Month 8 — Night shift, Redux, open source, onsite interview Starting this month I've been working the night shift in addition to my full-time job - 6 days a week, 12 hours a day, from 5pm to 5am. I know I won’t be able to do as much this month, but I have goals that I want to achieve so that I can have a month free. I refactored jobSort() to use Redux, and surprisingly it wasn’t as hard as I thought it would be. I listened to a lot of podcasts about it and read a lot of blogs about it, but the theory didn’t make much sense until I started using it. I really like the way Redux handles data flow. It's funny to see people complaining about Redux now. I don't think I'm qualified to make an opinion, but I do like the reducer pattern. My plan was to do some open source this month. I was planning on making my first open source contribution, which would have been a great contribution to a great library. I was planning on writing something for React! Everyone says this codebase is hard to read, let alone contribute to. But I need to stand out, I need to be unique. I know my contribution won't be very significant, but I still want to do it. I would start by reading all the docs, then get to know the codebase. Check every issue, every press release. Reading the React docs in full was a great exercise, and I’m glad I did it. But I quickly realized that there weren’t many “good first issues” to contribute to React, because they were quickly taken. I was at a meetup once and Anthony Ng suggested that I try Downshift, an autocomplete library by Kent C. Dodds. This was a game changer. This thing was right up my alley. Right level of difficulty, right number of problems, not too many collaborators, super helpful maintainers, clean and well-tested code. On top of that, it was the perfect solution to some of the problems I was having with my jobSort() app. In the middle of this month, I received an email from a company I applied to last month. They did an initial phone screen and then a technical phone screen. The technologies they were looking for were exactly what I had learned - React, Redux, and D3. I mainly talked about my projects and why I made a specific decision. After that, they asked me to come in for an onsite interview. This was my first onsite interview! I hadn't prepared for the interview at all, so my expectations were low and I didn't expect to get the job, but I would gain valuable interview experience. Since I was still working the night shift, I only had 3 hours of sleep per night. Fortunately, the technical part was not whiteboarding, but 1 hour of pair programming. It was a fairly straightforward challenge, but I was very nervous. At first, I was worried about making sure I understood everything without looking it up. When I realized I couldn't complete the challenge, I immediately realized I needed to stop worrying about what the interviewer would think of me and just go to Google/Stack Overflow to find the answer. I didn't finish it and expected a bad ending. Since I thought I had failed pair programming, I relaxed for the rest of the interview. In the end, I left the interview with my head held high. Worst case scenario, I gained valuable interviewing experience, and best case scenario, I got my first job. Month 9 – Job Offer 9 months and 7 days from the day I decided to switch careers and learn more about programming, I finally got my first job offer. I felt confident because I got an offer on my first interview, but at the same time, what if I don’t accept the job and what if this will be the only offer I receive in a few months? I ended up accepting the job and I’m happy with my decision. I hope to make money writing code! suggestion At this point, I have basically shared my story and provided some advice. If you are reading this, it is very likely that you are either considering a career change or are in the process of learning to code in order to change careers. I hope the following advice can help you make a plan or stick to your current plan and finally reach your goals.
OK, now it’s your turn, go write some code! |
<<: Apple has gone too far: iOS forces you to use Apple Pay
>>: Attention! Improper use of iPhone card for public transportation may result in overcharge
At 7:20 in the morning, the plane took off as usu...
If a startup wants consumers to pay attention to ...
Is it better to use a template WeChat applet or a...
In the hot summer, what fruits can you eat to coo...
This article has a total of 13,000 words, and it ...
1. Active Users Let’s first define active users: ...
The International Consumer Electronics Show has o...
On July 12, 2021, in order to thoroughly implemen...
Mobile Internet Professional Level 4 Exam is here...
Today let’s talk about a not very interesting que...
Reviewer of this article: Chen Haixu, Deputy Dire...
Christmas marketing , see how it is done abroad F...
As of Q2 2019, the domestic Android market share ...
It's so hard to have a good breakfast! I was ...
1. Incorporate other people’s perspectives High-q...