I graduated university with a degree in electrical engineering, and for the last five years I worked at GE Aviation Systems. I worked in one of their subdivisions as an avionics and aircraft power systems engineer for 3 years and as a hardware engineer for my last 2 years. I learned a lot in my years in the aviation industry; however, for several reasons, I needed a change. For years, I was exposed to web development and software engineering through friends (my co-host @kwuchu works at GitHub) and tech news outlet (hacker news, the verge, etc...), but never explored it beyond building a personal website. At the beginning of 2019, I started my transition to becoming a software engineer.
Times I Wrote Code
The first time I wrote code was my freshman year of college, as part of the introduction to engineering class. We used MATLAB to model physics concepts. That year, I saw for-loops, while-loops, variable declarations, and arrays for the first time. The experiencing of writing and debugging MATLAB code was fluid. The next year, I took a C++ class. The class didn't feel as smooth as writing MATLAB code. We completed our assignments by connecting to a remote server, and running our code and seeing the results from the terminal. Writing and fixing code felt disconnected. Debugging C++ was harder than debugging MATLAB, and some concepts were harder to grasp. Our last assignment was to build a Rolodex application (contact list app) using linked lists, and it was difficult. I got something working, then I swore off C++ programming after that. The next time I was exposed to code was during the first months on the job. This was 2014. I spent 2 months coding a VB script to highlight words in a document, then I didn't code again.
Attempts At (Re)Learning to Code
Late 2017, I considered getting back to code. The reasons were a combination of work at the time consisting of maintaining a spreadsheet, a requirements document, and the fact that after 3 years of graduating with an electrical engineering degree I had yet to make any hardware. I scanned my alternatives, and software engineering felt right to explore. I chose to look into Python because it was easy to set up a development environment. I spent time practicing the basics during my free time at work and at home. Learning Python felt smooth. I caught errors before I ran the code because the editor would show them to me. I felt productive, and I saw that I was making progress. I wanted to level up, so I turned to some online resources to continue learning.
The first resources I used to continue learning were the free classes offered by Udacity. I started the Intro to Python class, but I didn't finish it. Then, I tried to follow Miguel Grinberg Flask tutorial, but I didn’t finish that one either. Following that, I started using Data Camp's Python course. I had a bit more success using those. I finished 3 out of 26 courses in their data science track.
Every time I started a learning path, I would stop for one reason or another and not follow through. I have a few hypotheses on why I didn’t follow stick with a path to the end.
- The first hypothesis is that there were no consequences to me not finishing. I had no skin in the game. The resources were free, and I could come back anytime.
- The second hypothesis is that I was accountable only to myself, and no one else. Had there been accountability to others, it's possible I would have completed at least one specific learning path.
- The third hypothesis is that is that the pace at which I was completing the courses did not match the pace at which I envisioned myself learning. This likely played a role that I was not aware of at the time. I remember that I wanted to pick up the concepts and skills extremely fast that I did not appreciate the small, but consistent progress I made whenever I completed a lesson or tutorial. Instead, I felt discouraged because I was not succeeding at the pace I wanted.
I can't tell which one of the above reasons played a bigger factor than the other. Regardless of the ratio of different factors, I spent the better part of 2017-2018 in this learn, stop, learn, stop loop. While I didn’t accomplish much in terms of finishing a course, or completing a project, I learned the basics of Python in that time.
Evaluating Coding Bootcamps
I considered coding bootcamps as an option to further my software development skills. Bootcamps are a great way to learn web development, and the immersive aspect of the experience is what lead me to look into attending one. I found various kinds and depending on which coding bootcamp I looked at, I had the option to pay upfront, or start paying after I've found a job (In these cases, I would have signed what's called an income share agreement ). I decide not to attend one for several reasons.
The first reason is location. No coding bootcamps were in Dayton. I have friends and family in Dayton, and my girlfriend moved from the East Coast to join me here. Though I wanted to learn how to code, the desire was not great enough to push me to go to a coding bootcamp outside of my town.
The second reason is cost. Going to a bootcamp meant that I would quit my job in order to be fully immersed learning. This meant forgoing part of my salary for a certain amount of time, and further incur debt (whether that meant paying upfront, or paying it with an income share agreement). When I evaluated my option, I recognized that I didn’t want to switch careers that bad, and my job payed very well for the region that I live in. That combination was enough to keep me from attending a coding bootcamp.
Third reason is that I wanted an in person experience. After my two years of attempting to learn online, I wanted to try an in person class. This meant that distance-learning bootcamp were not an option.
Lucky enough, I found an option that could help me get coding regularly that met the conditions tha the bootcamps didn't, and it had been there all along: community college.
The option of attending community college didn’t occur to me until my girlfriend mentioned it. My girlfriend is studying to become a nurse, and she attended the local community college to fulfill her prerequisites. After observing me fail at learning to code online, she made the compelling argument that I could benefit from attending classes at the local community college. Her argument was that even if attending community college was not the same as attending a coding bootcamp, I would still be learning some aspects of software engineering. She said something along the lines of "even if you don't learn as fast, you'll still be making progress and by the end of the year, you would have gotten somewhere."
At first, I was a bit against the idea. I don’t like to admit it, but I had a hint of arrogance, and dismissed it at first. After all, I have a bachelor’s and and a master’s degree, clearly I didn’t need to go to community college. However, after looking at my track record of failed attempts at learning online, I knew that my arrogance was misplaced and I looked at the options offered. To my surprise, the community college offered many options for people who wanted to learn how to code. They offered both online and in person programs of different duration. The programs offered met the criteria that the bootcamps I found didn’t:
- it was local (I wouldn’t have to leave Dayton)
- it was affordable (~$100 per credit hour + fees)
- I could attend in person.
Of the programs offered, I chose the Web Development track (6 classes, 18 credits) and started classes in January of 2019.
The first classes I took were Introduction to Programming with C++, and HTML/CSS. Attending classes changed my pace of progress from sporadic to consistent. While I was repeating topics that I had seen years earlier, I was now repeating them with consistency. The learn-stop, learn-stop loop was broken. For almost every week of 2019, I coded in one of several coding languages because I had to turn in an assignment or a project.
I realize now that by going to community college, I took advantage of the 18 years of conditioning from attend formal schooling: my brain knows to compel me to work on an assignment if it’s supposed to be turned in to a teacher. Now that conditioning was helping me be consistent in my efforts to learn how to code.
Fast Forward to January 2020
I've completed 5 of the 6 classes in the Web Development certificate. Between starting the certificate program, and getting my first software job, a lot happened: I left my previous job, I took 3 months off, I built a cryptocurrency news aggregator, and found a job as a software developer. I am now an associate software engineer at a local software firm, and starting the program at my local community college was a big factor in helping get here.
Looking back at the time when I was researching options to learn how to code, one of the reasons community college didn't occur to me as a viable option is because that I didn’t encounter it in when I was researching (really Googling) how to switch into software engineering. I have one semester left to get my certificate, and I am happy that I made the choice to follow the community college path. Part of me wishes I had done it sooner, but I'm glad that I started once I found it. If you haven’t had a lot of success with online classes or self directed learning, consider going to community college to get started. It might work in ways you didn’t expect.
If you like this post, you can drop me a line at firstname.lastname@example.org