travel-guide

🏝️ An MIT undergrad's compilation of useful CS resources

View the Project on GitHub

The New Programmer’s Travel Guide

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.

🗺️ Topics

First steps

Building things

More technical

🏖️ Topical itinerary

Getting started

A healthy mentality makes everything easier. Topics include learning to ask effective questions as well as taking a growth-based approach to learning.

How to learn

Where to learn

Homebrew

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

Sublime Text is powerful text editor, popular especially among new developers. It’s straightforward and easy to use, making for great first editor.

Terminal (bash)

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.

Intro

Reference

Specific topics

Favorite programs

Resources

Git

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.

Intro

Reference

Specific topics

Python

Python is a popular, general-purpose, high-level programming language. It’s also a great first language.

Intro

Specific topics

Debugging

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.

Getting a job

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.

Communicating

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

Web development refers to building some component of a web site for the World Wide Web. It’s a hot occupation as of 2016.

Getting started

Specific topics

HTML/CSS

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

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

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.

Resources

Favorite packages

MongoDB

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

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

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

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

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

Vim is a popular, powerful, mature text editor. It can have a strong learning curve, but many feel the effort pays off.

Regex

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

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.

Intro

Common formats

C

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

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

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

Tmux is a shell program that allows switching between and detaching of virtual consoles.

IRC

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.

Blockchain

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.

Miscellanea

Miscellaneous resources. Topics include technical discussions, an artificial intelligence playbook, and a recommendation of Google Scholar for organizing technical papers.

🏕️ Back flap notes

Using this guide

Why a travel guide

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.

Contributing

License

Authors