The CS you won’t learn in school

There’s more to life than BSTs

Christine Chapman
5 min readJul 28, 2020

by Christine Chapman and Zach Wilson

With a Bachelor’s degree in Computer Science, you probably learned all about Data Structures, Algorithms, Databases, Object-Oriented Programming, Security, Operating Systems…

But ask yourself — when was the last time you applied these during the workday? Instead, you argue over code style, debate processes about processes, and review pages of pull requests containing nothing but getters and setters.

Should you, a bright-eyed new grad, have been expected to be ready for this on your own? No one ever taught it to you, so you had to pick it up as you went. If only the great institutions of higher learning had prepared you for what your life would become.

If only they had shown you this — the real stuff. CS for the real world.

Technical “Documentation”

This class has no lectures. You would have skipped them anyway. The textbook is fourteen hundred pages of detailed documentation on every language and framework you could ever use. Your grade is entirely based on the take-home exam.

You are given thirty minutes to solve one hundred problems you’ve never seen before. The documentation has all of the answers, but to pass the exam, you are expected to skip the documentation and go straight to Stack Overflow.

Test-Driven Development

You are given someone else’s working project. It has one hundred lines of working code, and thousands of unit tests are broken. You learn to use the debugger, but it does not help. For every test you fix, three more failures emerge in its place.

Halfway through the process of rewriting the entire framework, you start to question whether the code itself could be wrong. You finally fix the tests locally, but they break the build when you merge. You eventually finish the class four semesters later, with nothing to show for it but a green checkmark.

git blame

This is a two-part class, split across your first and last semesters. In your first semester, you build anything you want, in any language.

In your last semester, you return to your project to find that a group of high schoolers have randomly updated it over the last four years. Before you can graduate, you must answer a series of highly specific questions about code that you may or may not have written. Hopefully you wrote comments.

Software Development Lifecycle

You design a sophisticated service that aggregates data from six other services and returns it in a slightly different format. As part of the design review, you answer questions from five senior engineers. These questions have no bearing on the final product, but do remind you why they are senior engineers. After multiple rounds of revisions, you discover the problem has shifted, and you need to start over.

About once a month after launch, one of your dependency services will break, and people will call you to demand an explanation. This will continue even after you earn your degree.

Collaboration

You are assigned a service to maintain. You are also assigned several insignificant, but arbitrarily more important, projects that keep you very busy. To pass the class, you must design an elaborate series of tasks to prevent other teams from integrating with your service.

First, you demand that prospective clients sign up for office hours, which are hosted on the third Tuesday of the month at 6am local time — unless the month only has thirty days, and then it’s the second or fourth Wednesday. You require that they bring six pages of documentation describing why their use case is business critical, and which three executives are sponsoring the project.

Once they have done this, you tell them you will consider onboarding them during your junior year, and in the meantime, they can read your documentation. You do not have any documentation.

Debugging

You are given a series of homework assignments, emailed to you at random and inconsistent hours of the night. They are always due within twenty four hours, unless the professor pesters you three times, in which case you need to drop everything to finish them faster.

Instructions for these assignments will be vague, ambiguous, or absent entirely. For example — an incident occurred at 8am Eastern time. Or was it 9pm Pacific? Or was it three weeks ago in UTC time? Who can say? Not the professor, that’s for sure. You are permitted to ask three clarifying questions per assignment, but they will not be answered.

Every assignment includes 4.5 GB of logs, but they are not related to the assignment. Good luck.

Security

Your entire class is given an ecosystem of interdependent microservices. You are responsible for supporting one throughout the class.

Every week, you receive 3–5 security updates to complete for the service. To pass the class, you need to complete all of your updates, which will involve convincing your classmates to prioritize your upgrade over their own. At least one in every ten will involve some sort of circular dependency. Failure to meet the arbitrary deadlines will result in your laptop being confiscated until this is resolved.

Concepts like DDOS, SQL injection, and encryption are out of scope.

Time Estimation

You and your team receive a series of poorly defined projects. You must immediately estimate how long it will take your team to complete.

During the class, you flip coins and roll dice to simulate the fate of your project. A rival team rolls a critical success and hires three new engineers. Your team is stuck with seven years of tech debt, so completing basic tasks take weeks.

After a stressful semester, your team completes the project just before the deadline. Since you had extra time, but neglected to take on a new project, you fail the class.

Technical Writing

You are assigned a tedious project to complete during the semester. However, the goal of the class is actually to send a series of emails to your professor to convince them to let you work on your own project instead. Your arguments need to be superficially logical, but under the surface driven by your own selfish desires.

You learn which buzzwords to use to drive your point home — disruptive, agile, emerging, bootstrap, etc. This is critical for disguising the fact that your exciting, technically innovative project is ultimately pointless.

You are evaluated on your ability to communicate information with enough spelling, capitalization, and grammar errors to convince them that you have better things to do with your time than write emails.

Interviewing

In this class, you learn about reversing a linked list, finding cycles in a graph, red-black trees, the knapsack problem, and other common data structures and algorithms.

You will never use these skills again.

Electives

  • Showing Off — You learn languages that are only useful for bragging rights: Erlang, PHP, Scala, Perl, etc.
  • Compilers You build the slowest possible compiler to maximize the amount of time you have for ping pong.
  • Workflow Optimization You learn the best way to arrange your four monitors and shift between applications with just your keyboard.
  • System Design You design a parking lot to calculate the number of golf balls that can fit in a standard blender if a human has also been trapped inside.
  • Effective Java You are given 10,000 lines of code; your assignment is to find every local variable and put ‘final’ in front of it.
  • Professionalism — Dress for the class you skipped in college, not the job you want.

--

--