Most CS programs don't cover angry users
One of the most universal experiences among engineers, it seems, is stepping into your first job and thinking, “I have no idea how to do this.”
For how rigorous and challenging computer science programs are, there will always be bits and pieces (and sometimes entire skillsets) of real-world software engineering that school doesn't teach you. Whether your first engineering job offers the training and mentorship to help you fill in the gaps, or you have to teach yourself on nights and weekends, the panic and hustle to catch up is real.
Because commiserating can sometimes be fun and informative, we interviewed a handful of engineers with CS degrees about what school didn't prepare them for.
Your CS degree will teach you:
Cryptography
Your CS degree won't teach you:
How to handle an angry Twitter mob
Most CS programs don't cover how to deal with angry users. Early-stage startup roles, on the other hand, require it.
Among the toughest stories we heard was the engineer who was alone in the office when the site crashed. The company had recently switched from dedicated servers to AWS–something the engineer had very little experience working with. For the next seven hours, he was the only person on hand to get the site back online, while over 1,000 users rage tweeted at the company each hour. He likened it to pulling an all-nighter, but with 7,000 people screaming at you.
A close second would have to be the engineer who accidentally started a rumor that his company hated Linux users. He shipped a new feature without testing it on Linux. He knew only a fraction of a percent of their users ran desktop Linux, but he didn't grasp just how vocal those users would be. Within a day, there were threads on major dev sites discussing how the company was sabotaging Linux users, and his simple bug became a PR crisis.
As it turns out, when tens of thousands of people use a product, there's no such thing as a “minor” change—and if people don't like a change you made, they're more than willing to share their potentially-caps-locked take.
The course colleges should add:
Social Media 101: Navigating Outrage and Subtweets
Your CS degree will teach you:
Software architecture
Your CS degree won't teach you:
Where these magic numbers are coming from
If you think of the words “ancient” or “legacy” in the context of your CS degree, you'll probably remember working in C or Assembly. As it turns out, working in a language written more than 30 years ago is often easier than working around the spaghetti code another engineer wrote last summer.
Complaining about messy codebases was a universal pastime among the engineers we spoke to. One, who began he career at a decades-old tech company, described the particular headache of deciphering a bug that was older than he was.
Another told us about spending months refactoring code that was written by a former founder. It was peppered with comments like “We better change this soon.” By then, those commit dates were a couple years old.
As a fun addition, we also spoke to an intern who complained about an “ancient” JavaScript framework he has to work with—which was first released in 2010 and was updated as recently as February of 2019. It's all about perspective.
The course colleges should add:
Refactoring 220: Magic Numbers, Gibberish Comments, and Illegible One-Liners
Your CS degree will teach you:
Database systems
Your CS degree won't teach you:
How to stop that one engineer from performing unauthorized writes to the DB
To be clear, this isn't about playing into the stereotype that some engineers are anti-social. Most of the people we spoke with, however, did share some common difficulties around interacting with teammates.
The first was dealing with incompetent coworkers. At school, you don't really need to worry about what other people know, outside of group assignments. On the other hand, when it turns out your teammate—a self-proclaimed “hacker”—actually does not know how to code, that's a problem. As was the code he copied, pasted, and tweaked from Stack Overflow that never ended up working.
The second common problem is more about adapting to codependent, cross-team work in an engineering org. One engineer, who started his career working on a popular operating system, described the slow realization that its code—which passed all of their team's tests—caused bugs in other, seemingly unrelated pieces of the product. Being the person who made six other teams shift into firefighting mode isn't the best way to make friends at a new job.
The course colleges should add:
Humans 302: Why They're The Worst Sometimes
No matter what your university does or doesn't teach in its curriculum, there are always going to be gaps for you to fill in when you enter the workforce. We heard from engineers who had never used version control or written tests in school. Other engineers said they graduated with no idea what production environments were.
At the same time, we heard from senior engineers who said that, at the rate technology evolves, there are constantly new gaps in their knowledge that need to be closed. It's just the nature of technology.
While it's fun to run through the shortcomings of CS programs and commiserate about the difficulty of first jobs, all of the stories we heard highlight a simple truth: As an engineer, your core responsibility is to learn more—constantly.
Also, to the new grad engineer who broke their entire company's email capabilities by writing “SendGrind” instead of “SendGrid”—we're glad things got better.