I graduated from 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 three (3) years and as a hardware engineer for my last two years. I learned a lot in my time in the aviation industry. However, after five years, I needed a change.
I've been exposed to web development and software engineering through friends (my co-host @kwuchu 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.
Typing machine with a french keyboard layout, just 'cause :-)
Before starting the process of transitioning careers, I wrote code on and off. The first time I wrote code was my freshman year of college as part of the intro 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 was not as smooth as writing MATLAB code. We completed our assignments by connecting to a remote server and interacting with code through a terminal. Writing code and fixing code felt disconnected. Debugging C++ was harder than debugging MATLAB, and some concepts were harder to grasp. The final project was to build a contact application using linked lists. While I was able to get something working, I didn't use C++ after that. The thing I coded was a VB script to automate highlighting words in a document.
In late 2017, I considered getting back to code. The reasons were simple: instead of spending three years learning hardware design, what I had done was to maintain a spreadsheet, wrote a requirements documents, and observed the company I worked for collapsing (for those financially inclined, GE stock value went from ~$30 to less than $10 by the time I left)
I looked into alternatives careers to switch into, and software development felt right to explore. I chose Python as a language because setting up a development environment for it was easy. I spent time practicing the basics in 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 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. After 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 stopped for one reason or another and never follow through. While I can't pin point a specific cause, I have a few hypotheses on why I didn’t stick with a single path to the end.
Here are my hypotheses:
- Hypothesis One: Because there were no consequences to me not finishing, there were no incentives for me completing it. I had no skin in the game. The resources were free, and I could come back anytime.
- Hypothesis Two: I was accountable only to myself, and no one else. Had there been accountability to others, it's possible I would have followed one specific path to the end.
- Hypothesis Three: 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 wanted to pick up the concepts and skills 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.
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 most appealing. I found several kinds while searching. For some, I had the option to pay upfront. For others, I would start paying after finding a job (I would have signed what's called an income share agreement). However, I decide not to attend one because of my location, cost, and learning preference.
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.
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.
Learning Preference: I wanted to learn in person. 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.
The one option that matched all the above criteria had been available for a long time: 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 struggle to learn code from online resources, she made the case that I could benefit from attending classes at the local community college. She added that even if attending community college was not the same as attending a coding bootcamp, I would still be learning some aspects of software development. 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."
I was a against the idea at first. I don’t like to admit it, but dismissed it, and it was because I was arrogant. I was telling myself, "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 prior failed attempts, it was clear that my arrogance was misplaced and I looked at the options offered. The community college offered both online and in person programs of different duration. The programs offered were perfect for me:
- they were local (I wouldn’t have to leave Dayton)
- they were affordable (~$100 per credit hour + fees)
- and 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.
Attending classes turned my progress from sporadic to consistent and broke the learn-stop-learn-stop loop I was stuck in. 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.
A lot has happened since January of 2019. I've completed 5 of the 6 classes in the Web Development certificate program. I left my previous career. I built a cryptocurrency news aggregator, and I found a job as a software developer. I am now an associate software engineer at a local software firm, and going through the program at my local community college was a big factor in helping get here.
When I look back, one of the reasons community college didn't occur to me as a viable option for learning how to code is because that I didn’t come across it in when I was Googling how to switch into software developer. I have one semester left to get my certificate, and I am happy that I made the choice to attend community college. 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 is surprisingly effective.