A Reflection on my B.S. in Software Engineering
Earlier this year I graduated with a B.S. in Software Engineering from a University in California. Since then, I’ve been hired as a network programmer for a game company, where I primarily work on multiplayer stuff. Although I’ve had some great experiences modding games, I’ve always been skeptical of actually entering the video game industry.
I remember friends asking me in my first few years of university if I’d apply to game companies once I graduated. I recall laughing and saying something to the tune of “absolutely not.” Although I loved the thought of working on games (I am a massive gamer), something put me off of the idea. All of this is to say, after college I applied to ~150 positions. All of them used some sort of systems languages, my most comfortable being stuff like C++, Rust, and Java. Ironically, of all of the applications I sent out, the only responses were from game companies.
Why? Likely due to the fact that nearly all of my practical experience visible in my portfolio involved modding game engines. This led me to question, what role exactly did my degree play in this equation?
There were a few times where I was considering skipping the degree. I applied to companies before finishing the diploma hoping that I’d be “saved” from finishing it. The scope of work I applied to was similar to what I mentioned earlier, but naturally I received no positive responses. To be fair, the industry is competitive, I didn’t have a degree, and didn’t have any exceptional display of prowess. So despite the demand for programmers, I learned that a bachelor’s degree is a minimum qualification for most serious work.
After finishing my (long 4 year) stint in a local community college, I transferred to a University for a Software Engineering. Software Engineering itself is an interesting choice. Typically programmers go through the Computer Science path. Being self-taught most of the CS concepts long before entering the university, I found that I’d rather spend time learning about design patterns, specifications, general big picture stuff rather than straight computational theory and algorithms. I felt I had enough demonstrated programming experience on my own and my biggest weakness was software design, so that’s what I wanted to spend more time doing.
Unfortunately, I came to discover that the SE program was generally considered “easier” than CS. I found that most of my peers, especially the ones only interested in a well-paying job, were uninspired and lacked passion in the craft. In many ways, I felt alone in the program.
Often I’d find myself interpreting the lessons differently from others, applying concepts like design patterns to group work in ways that weren’t copies from lectures. This would lead to group members disagreeing with me, as if the examples from lectures were the “one true way” to use them. Not that I’d ever get marked down for it, I knew what my professors were trying to instill into us, but I wasn’t quite sure the other students did. I felt like most were simply going through the motions of being a student, instead of taking advantage of the fact that this is the fundamental baseline we’d use for the rest of our careers in software development.
The reason I found myself hung up on all of this was that the SE program was 90% group work. Nearly every higher-level class in the program featured final projects in groups, with some having multiple group projects and others being semester long. This meant I found myself paired with others that – as far as I could tell – only wanted to get a passing grade and move on. While on the other hand, I wanted to collaborate to make some great damn projects. Entering every scenario like this optimistically, I tried to be the energy in every group. I tried to inspire our team to want to make great software, but it never really worked.
See, despite all of the group work, I discovered over time that none of my team members had written code outside of a homework assignment. I realize now that’s somewhat typical, but with the program being structured the way it was, most students in these higher level classes were struggling with things like syntax; something I thought should’ve mostly been overcome in their first year. In order for professors to balance the groups out, the strongest students would get paired with the weakest students. I believe the hope here was that the stronger students would help mentor the ones struggling, I did my fair share of that.
I must say that I am speaking in general here, not at any specific person or experience. There were people in that program who, honestly, were putting in a great amount of effort and also struggling. I believe some weren’t adequately prepared before entering these courses. They weren’t told that we’d be working in language X when they previously only knew language Y. There’s many situations here that I’m glossing over, but by this point in their education many had unfortunately just given up.
Anyway, it was only once in that program I didn’t have to complete 90% of the programming work. This was demoralizing. I recalled the hope I had in my initial transfer into the university that I’d find myself truly challenged by my peers to be better, which ended up being true, but not in the way I expected.
In hindsight I’m happy to have gotten my degree in Software Engineering. It wasn’t what I expected, it wasn’t a smooth ride for me. I did, however, take in everything I could from the professors, learned some excellent conflict management techniques to quell a particularly unpleasant student, and gained the necessary prerequisite knowledge to earn a job in an industry that I love. I now work with an extremely talented and dedicated team, a perfect place to be as I begin my career. I am happy to be challenged in my discipline daily, but getting here wasn’t easy. I suppose I learned that a rough environment makes creating good software hard.
If I could give any advice to the program at my alma mater, it would be to focus heavily on the individual in their early years, and focus on getting everyone to the same starting point before entering the high-level classes. Since I was a third-year transfer to my university, I do not know what the first two years there were like. From what I’ve seen though, these are my thoughts.
What can a university do to inspire extracurricular work? Of course there’s clubs, which we had, but membership was sparce. Perhaps some programming competitions over summer breaks? A reward of sorts? Who knows..
I’d be lying if this post wasn’t cathartic process to write, but I’m so very thrilled for my career and wanted to rant a bit about my experience. The program I went through was young and I’m sure it will improve, but I think I now understand why building an excellent software engineering program is so tough.