🏝️ An MIT undergrad's compilation of useful CS resources
A curated guide to relevant resources for the new computer science student—it’s everything else you’ll need to know.
Learning to program is hard. Finding your way to first-rate resources, however, just got a whole lot easier. See the usage notes for an intro. This guide assumes you’re on a Mac, but is valuable on any machine.
A healthy mentality makes everything easier. Topics include learning to ask effective questions as well as taking a growth-based approach to learning.
Homebrew is a popular package manager for the Mac operating system. It makes installing things as easy as brew install <package>
. Similarly, Homebrew Cask facilitates installing GUI applications. Don’t forget to run brew doctor
after installing Homebrew and fix the reported issues.
Sublime Text is powerful text editor, popular especially among new developers. It’s straightforward and easy to use, making for great first editor.
brew cask install sublime-text
At a high level, a shell is an interface facilitating interaction with an operating system. The shell most developers are familiar with is the Unix shell, which provides a command line interface. Finally, bash is a mature, popular shell language.
Git is a distributed version control system. Version control allows multiple people to work on the same code base at the same time, among other benefits. Git is wildly popular, powerful, and somewhat notorious for being difficult to learn.
brew install git
Python is a popular, general-purpose, high-level programming language. It’s also a great first language.
brew install python3
Debugging is the process of tracking down and fixing bugs. Rather than a series of ad hoc actions, debugging is a much-discussed concept that can take up a large portion of time spent developing.
Proper preparation makes getting a job much easier. Topics include best practices, a nice resume template, practice questions, and a list of companies with a short application.
Design, development, research, and everything in between rely on effective communication between peers. Topics include how to present publicly, accept criticism, and write a quality README.
Web development refers to building some component of a web site for the World Wide Web. It’s a hot occupation as of 2016.
HTML and CSS, along with JavaScript, form the cornerstone technologies of the World Wide Web. Many newer software libraries are built on top of these languages, but learning the basic building blocks is still essential.
JavaScript is the programming language of the World Wide Web, and can also be run outside of a browser with Node.js. It’s high-level, general purpose, and the most popular programming language of 2017.
Node.js is a cross-platform JavaScript run-time environment. In other words, while JavaScript was traditionally limited to the client-side browser, Node.js provides an environment allowing execution of JavaScript code on the server-side. Npm is the default package manager for Node.js.
brew install node
MongoDB is a document-oriented database. It’s a standalone program, but is also popularized as part of the MEAN stack. The mongod
daemon starts and manages the database, the mongo
command starts a shell-like connection to the database, and specific languages interact with the database through drivers (i.e. bindings).
Markdown is a markup language designed to be easy to learn and fast to write. It can be converted directly to HTML, and is also a common choice for README files. Its formal specification is a bit loose, so many similar syntax flavors exist.
Unicode is a worldwide standard for encoding and representing text. It makes things like internationalization and localization a lot easier. Unicode can be actually implemented by a number of different character encodings, the current most popular of which is UTF-8.
Profiling is the process of measuring, aggregating, and interpreting data on a program’s space and time usage. It’s an important tool for performance engineers, but is also used across development fields, including in web development.
Software development is the process of designing, constructing, testing, and releasing software. At scale, many otherwise inconsequential issues turn into colossal problems without proper software development techniques.
Vim is a popular, powerful, mature text editor. It can have a strong learning curve, but many feel the effort pays off.
brew install vim
vimtutor
A regular expression is a string defining a search pattern. A regex functions as a declarative way to perform find or find and replace string operations. There are multiple flavors with often incompatible syntaxes. It’s usually pronounced like FedEx, with the “g” from “regular.”
Serialization is the process of converting an in-memory structure to a format that can be readily stored and/or transmitted. Often this takes the form of translating a language-specific object to a language-agnostic string or bytestream.
C is a general-purpose programming language with static typing. It was developed in the early 1970s and is historically one of the most popular languages of all time. It’s a medium-level language that maps efficiently to machine code. C is considered more difficult to learn than higher-level languages like Python and JavaScript, but learning C is worth it.
LaTeX is a document preparation system. It’s especially popular in academia, and is used in many STEM-related fields. It allows users to focus on a document’s contents and let LaTeX focus on the document’s preparation and formatting.
SSH is a protocol for operating remote devices from your local device, in a secure manner. SSH allows login and command execution over the Internet, even on devices not physically accessible.
Tmux is a shell program that allows switching between and detaching of virtual consoles.
IRC is an application layer protocol (same layer as the World Wide Web) facilitating text-based communication. Although it’s less popular now than in the past, many open source projects communicate using the freenode IRC network. Slack is a popular, easy to use, proprietary alternative for team communication.
A blockchain is a continuously growing list of timestamped “blocks.” Each block functions as a record, allowing a blockchain to function as a distributed database. The idea of a blockchain is relatively new, first described in 2008 by an unknown person using the assumed pseudonym Satoshi Nakamoto. Bitcoin, on the other hand, is the original in a long line of cryptocurrencies utilizing blockchain technology.
Miscellaneous resources. Topics include technical discussions, an artificial intelligence playbook, and a recommendation of Google Scholar for organizing technical papers.
bash --version
are meant to be run from the command line.Learning to build software is hard. And not knowing what to learn, when, and from where makes it harder. Google searches return 1000’s of results, but knowing which links to trust is unlear. That’s where the travel guide comes in: a listing of what to learn, in an ordering that makes sense, paired with specific, curated resources. This isn’t a resource dump—it’s a travel guide.