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.
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 python3
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.
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.
brew install vim
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.
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 --versionare 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.