The Software Engineer’s Journey: Lessons Learned from Self-Education and College

When I was young and fresh out of high school, I enrolled in college to study Electrical Engineering. While I liked electronics a lot, I spent most of my time around computers (in those years, it was a Commodore 64, then a C-128, and then an Amiga). I don’t remember why, exactly, I decided to go into EE instead of computer science. I can tell now that it was a fateful mistake. I did not like electronics that much and ultimately dropped out. That was a shame since, a the time, my parents were paying for my higher education. Anyway, life went on; I got married and had kids.

The Road Back to College

Nonetheless, I taught myself how to code my computers, and that proved useful later on in finding my way into programming-related jobs. I have always really loved programming. My thirst for knowledge led me to read countless books, and these resources, along with valuable life lessons, shaped me into the software engineer I am today. Yet, I always felt I needed a more formal, theoretical foundation. I knew data structures like stacks and hashes, and so on, but trees or graphs, for example, were mysterious to me. The whole concept of big-oh was also weird. I knew there were substantial gaps in my knowledge. So, at the age of 47, I decided to enroll at Chemeketa Community College with the intention of transferring to Oregon State University (OSU) and getting a Computer Science degree.

My journey has been a long and challenging one. Going to school while working full-time and caring for a family is hard and tiresome. During the time I have been in school, I have rarely had evenings off or even full weekends. I have taken classes every summer, trying to advance a bit faster.  Still, it has taken me eight years to reach the point of graduation. Oh, and I am the one paying for school now. So that’s an extra burden.

Becoming a Well-Rounded Software Engineer

Was it worth it? Yes and no. I certainly learned some valuable things, particularly in the more theoretical classes on algorithms and analysis. I understand better the why and how of many computational principles. In addition, I enjoyed many of the extra classes, like high calculus and physics.  However, if I am honest with myself, much of the curriculum, especially in the more practical classes, was a review of what I already knew from my self-education and work experience.  Would I consider the time spent pursuing my degree as wasted? No, not at all. I do wish, though, that I had taken this path 30 years ago when I had all the time in the world.

Working for over two decades as a developer, software engineer, and, eventually, architect gives me an interesting perspective. When I look back a the entire academic program, I can confidently say that there are many aspects of the software engineering profession that formal education does not cover. The training is weakest in terms of teaching soft skills and business know-how. There is a lack of consideration, in the core curriculum,  for the human aspect of computer science. . As software engineers, we must remember that our ultimate goal is to create solutions that improve people’s lives, which requires a deep understanding of the human element. It’s not enough to be a brilliant programmer; we must also learn how to communicate effectively, work collaboratively, and empathize with the needs and challenges of our users.

It is always the beginning of the journey

Throughout my journey, I’ve discovered that the most successful software engineers are those who continuously learn, evolve, and adapt to the ever-changing landscape of technology. They embrace new ideas, methodologies, and tools while maintaining a strong sense of empathy for their clients and teammates. I have learned that it is important to remain engaged by participating in open-source communities and attending conferences and workshops. We can learn from our peers, mentors, and industry leaders and in turn, share our knowledge and insights with others.