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.
- Getting started
- Sublime Text
- Terminal (bash)
- Getting a job
🏖️ Topical itinerary
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
🌟Overview of computer science 🌟How to learn how to code 🌟Make deliberate practice a habit
- Why learning to code is so damn hard
- Great advice for new CS students
- How to ask programming questions
- How to find answers from Stack Overflow
- Rubber duck problem solving
- Thoughts on dealing with failure
- Commonly asked questions when first getting started
Where to learn
- First stop for finding topic-organized resources
- Lots of good, short introductions to languages and tools
🌟Self-taught online CS classes 🌟Build some of these projects as you're 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
- Setup, packages, settings
- Setting indentation and tab stop
- Setting rulers
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.
- What is a dotfile
- What is an rc file
- What is a PATH
- How to add to your PATH
- What is a .bashrc
- Difference between .bashrc and .bash_profile on Macs
- Difference between shell, terminal, console
- Redirecting to stdout/stderr
🌟tldr, the better version of man pages
- ag, a fast and powerful replacement for grep
- rsync, for securely copying a file between devices
- htop, the interactive process viewer
- jq, a JSON processor
- Mathias's dotfiles, a collection of quality dotfiles
- Dotbot, a dotfile manager
- Cmder, a bash-style shell for windows
- Dev-setup, a tool and listing of common installations
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.
- Git is not GitHub
- Intro to GitHub
- Effective commit messages
- Version control in a team
- GitHub Flow, a popular git workflow
brew install python3
🌟Curated guide to everything Python
- Google's official Python tutorial
- Official tutorial
- Intro to programming class
- Unicode overview
- String vs. bytes
- Static, class, and abstract methods
🌟Deep dive into intermediate topics
- General strategy
- Python debugging tips
- pdb, the Python builtin debugger
- gdb, a debugger for many compiled languages
- Intro to gdb
- GUI for gdb
- More gdb features
- Overview of Chrome DevTools, including debugger
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.
🌟Overview of the process, best practices
- LaTeX resume template
- List of action verbs for descriptions
- General resume tips
- Great site for technical interview practice
🌟More algorithm-based interview practice questions
- System design interview overview
🌟Big list of CS companies with a short application
- Big list of CS companies without whiteboard interviews
- Intro to algorithms class
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.
- Best practices for competent public speaking
- Proper use of body language
- Best practices for group ideation
- Writing a README, with examples
- README template
- What is a web app
🌟Web developer roadmap 🌟Quality resources for the full stack web developer 🌟Sample real-world apps in various stacks
- Dash, an on-command documentation reader for Macs
- Web development class
- Computer systems class
- Disable browser caching
- Internet vs. World Wide Web
- HTTP and HTTPS
- API: Application Programming Interface
- REST APIs
- IPv4 vs. IPv6
- NAT: Network Address Translation
🌟Intro and overview
- Hello-world HTML/CSS app
- How layout works
- HTML in-depth
- Centering things
- Bootstrap, a popular framework making HTML/CSS easier
🌟Intro 🌟Intro with an interactive tutorial
- Hub for tutorials, tools, references
- How the var keyword works
- Style guide
🌟JSON browser formatter
brew install node
- Npm, the Node Package Manager
- Interactive tutorial
- In-depth tutorial
- Express, the de facto facto Node.js web framework
- diff-so-fancy, for easier to read Git diffs
- nodemon, for restarting programs upon code changes
🌟husky, a git hook manager
- gulp, the streaming build system
- cat-me, because cats make life better
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.
- Intro video
- Markdown for GitHub
- Original syntax specification
- Pandoc, for converting files between markup formats
🌟grip, the GitHub-flavored markdown renderer
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.
- Intro video
🌟Overview and further info
- Historical perspective
- Official intro
- UTF-8 is not the same thing as Unicode
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.
- Intro to Python profiling video
- line_profiler, a line-by-line profiling tool for Python
- General Python profiling information
- Perf, a Linux profiling tool
- Cachegrind, a cache and branch-prediction profiler
- General C/C++ profiling information
- In-depth lectures on performance engineering
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.
🌟Intro to testing 🌟Difference between unit, integration, functional, and acceptance tests
- Software construction class
- Long-term reading list
brew install vim
- Official tutorial:
🌟Everything you need to know
- Sensible start to a vimrc
- Advice on settings
🌟Advice on making a vimrc
- Vimrc with more features
- Screencasts on various topics
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.
- YAML: YAML Ain't Markup Language
- XML: eXtensible Markup Language
- Protocol buffers
- Reference book
- How macros work
- Make reference
🌟How to read declarations
- Declaration decoder
- Class on how computers work
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.
- Intro video
- Hub for tutorials, tools, references
- Extensive guide
- Latexmk, a program for compiling LaTeX files locally
🌟Detexify, a tool for finding LaTeX symbols 🌟Overleaf, an online tool for collaborative LaTeX writing
- BibTeX, a bibliography management system
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.
- Intro video
- General overview and help
- Irssi, a terminal-based IRC client
- Irssi intro video
- Irssi quick commands
- Irssi in-depth commands
- Irssi FAQ, including startup commands and scripts
- Irssi + tmux
- Foonetic, a decent first network
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.
🌟Why blockchains are the future of money 🌟Intro video
- Intro to Bitcoin
- Bitcoin vs. Ethereum
- Intro to Ethereum
- What Ethereum can be
- Shared public ledgers class
Miscellaneous resources. Topics include technical discussions, an artificial intelligence playbook, and a recommendation of Google Scholar for organizing technical papers.
- Google Scholar, a free scholarly literature browser
- How file extensions work
- Floating point representations
- Interpreted vs. compiled
- Serverless architecture
🌟Artificial intelligence playbook
- Linux distribution
- Linux filesystem hierarchy conventions
- Static vs. shared vs. DL libraries
🏕️ Back flap notes
Using this guide
- Go in order, more or less.
- Do not skip the getting started section!
- Snippets like
bash --versionare meant to be run from the command line.
- Be sure to install Homebrew and Homebrew Cask.
- MIT OCW also hosts all their lectures on YouTube, where you can watch at up to 2x speed.
- These topics and resources are a subjective view of what has been helpful. Feel free to contribute!
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.
- Fork, make changes, submit pull request
- Compiled by Hunter Gatewood