Reflecting on choosing OSU Post-bacc CS
I spent a lot of time over many months considering whether to apply to the post-bacc program at OSU. Before I went through with applying, I considered other schools (both post-bacc and 4-year programs), bootcamps, and forgoing any formal training. By the time I decided to apply, I had also decided that if I was accepted I would go through with enrolling. There were a few key motivations that ultimately led me to this decision, and I feel that my final term is a good time to reflect from my current vantage point on those goals and motivations and whether I was successful in meeting them.
Confidence and Career Growth
At the time I was considering the program, I was already working as a developer, but at a company where I had worked previously in another non-tech role. I made a lateral move into a role as a developer after teaching myself Python and demonstrating my skills to my manager. Because of this, I felt that I didn’t have the resume or skills that would be impressive to employers with whom I didn’t have a previous track record. At the time, I didn’t have a great understanding of things like data structures and algorithms or big O runtimes. I was also unsure how to present the things I did know and the projects I had worked on in a way that would be attractive to prospective employers. I didn’t have any side projects that I felt confident in presenting on a resume and hadn’t given any thought to my LinkedIn profile or online presence generally. I felt stuck with my current role and employer.
I saw the program as a way of addressing these concerns. I would take Data Structures and Algorithms. I would be tested on my understanding of big O runtimes. I would work on projects that would be attractive on my resume and go to the school’s career resources center and get feedback on my resume. I would go to career fairs and work on my interviewing skills. And by the time I had finished with the program I would have an additional 2-2.5 years of work experience to go along with the degree.
Opportunity Cost
Because I was self taught, I spent a lot of time considering what to learn next. I was very aware that anything I chose to spend time on meant not learning many other things. When I first started self teaching, it seemed like anything was worth spending time on because I didn’t know much of anything, including what I didn’t know. As I became more aware of just how much there was to learn, and how little I had accomplished in terms of learning so far, I felt less confident that the thing I chose next would have an acceptable ROI compared to the things I chose not to learn.
I saw enrolling in the program as a way of outsourcing these decisions. I was aware that there would likely be some review of things I had already taught myself, which proved to be the case more than I had anticipated. Nevertheless, I could be confident that I hadn’t spent my time on something that wasn’t worth it. I was going to spend time learning what very smart people who spent a lot of time in the field of Computer Science thought was worth spending time on. Because I had succeeded in terms of self teaching up to that point, I felt confident that a lack of anxiety about opportunity cost, together with a more structured approach, was the best way to accelerate my knowledge and skill growth.
Deepening My Knowledge
A final motivation was a recurring thought I had that I didn’t really know what was happening beneath the surface of the code I was writing. I didn’t really know how computers worked. I knew that I could write some text in a file and name it with a .py extension and then run it from the command line with:
python <file name>.py
As long as the text I had written in the file followed the rules of the language, things would generally work as I expected them to. I also knew that I could have this file run on a remote server in a configuration with many other files and then trigger it with HTTP requests. I knew nominally that configuring files on remote servers and triggering them with HTTP requests was a large part of how the modern internet worked. But I didn’t have a conceptual framework for why it worked. And while there were many internet articles about how to do specific things with specific languages, the concept of how computers worked felt like something that wasn’t going to be answered by an article I found on the internet, maybe in large part because I wasn’t sure what specific questions to ask. Moreover, my curiosity felt more theoretical and academic rather than something pragmatic that would have immediate consequences for how I wrote code or the problems I was facing in my job. Enrolling in the program seemed like a good place to get those questions answered because I knew I would need to take a computer architecture and assembly language course, and if that didn’t answer my questions satisfactorily, there were electives I could take as well.
Was it worth it?
Going into my 7th and final term of the program, I believe I was able to meet my goals and then some. I was offered a position with a Fintech company midway through the program. Unfortunately, my contract with that company was cut short, but not long afterward, my previous employer reached out and offered me a role I chose to accept. The trajectory I’m now on with that company will likely lead to a senior role in the short term and could even lead to a principal role in the next year or so.
In terms of opportunity cost, I don’t have any doubts that the things I learned the last two years are as or more valuable than anything I could have learned had I not enrolled in the program. I feel confident that I have a solid foundation on which to continue learning, and that I can make informed decisions about what I choose to learn in the future. My plan after December and over the course of the following year is to spend time learning more about how Python’s interpreter and compiler work, and start a learning path toward a Cloud Certification, likely for Azure. In the future, I’m looking forward to learning about Machine Learning and how Neural Networks are trained.
Finally, I feel that I have a much stronger conceptual framework for how the code I write for my job executes to do the things that make it valuable for its users. I may never write Assembly Language code again, but I’m confident that I can be a knowledgeable and skilled Software Engineer without needing to understand the precise mechanics of how my Python code ends up as Machine Code and is executed by the hardware. And when curiosity arises about lower level functionality in the future, I’m confident I won’t be concerned that there’s something else I should be learning instead.
Leave a Reply