What CS Majors Should Know


This post is a collection of highlights from this fantastic article about what every computer science major should know by Matt Might.

Portfolio over Resume

A resume says nothing of a programmer’s ability.

Every computer science major should build a portfolio.


Modern computer scientists must practice persuasively and clearly communicating their ideas to non-programmers.


Given the prevalence of Unix systems, computer scientists today should be fluent in basic Unix.

Programming Languages

While it is important to teach languages relevant to employers, it is equally important that students learn how to teach themselves new languages.

The best way to learn how to learn programming languages is to learn multiple programming languages and programming paradigms.


Computer scientists must be fluent in formal mathematical notation, and in reasoning rigorously about the basic discrete structures: sets, tuples, sequences, functions and power sets.

User Experience

Programmers too often write software for other programmers, or worse, for themselves.

User interface design (or more broadly, user experience design) might be the most underappreciated aspect of computer science.


It’s useful to understand the fundamental data structures and algorithms that power a database engine, since programmers often enough reimplement a database system within a larger software system.

There is more

There is much more than this on the original post. It is also supposedly an alive post, so you should definitely check it out from time to time. There is also some really nice stuff about which languages the author thinks provide a reasonable mixture of paradigms and practical applications that I did not quote because it is fairly long.