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
- Homebrew
- Sublime Text
- Terminal (bash)
- Git
- Python
- Debugging
- Getting a job
- Communicating
A healthy mentality makes everything easier. Topics include learning to ask effective questions as well as taking a growth-based approach to learning.
- π 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
- 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.
Sublime Text is powerful text editor, popular especially among new developers. It's straightforward and easy to use, making for great first editor.
- Install:
brew cask install sublime-text
- Setup, packages, settings
- Tutorial
- 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.
- Install:
brew install git
- π Intro to version control
- Conceptual intro
- Interactive tutorial
- Git is not GitHub
- Intro to GitHub
- Effective commit messages
- Version control in a team
- GitHub Flow, a popular git workflow
Python is a popular, general-purpose, high-level programming language. It's also a great first language.
- Install:
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
- Anti-patterns
- π Deep dive into intermediate topics
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.
- π Avoiding bugs
- 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
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
- π Accepting criticism
- Writing a README, with examples
- README template
Web development refers to building some component of a web site for the World Wide Web. It's a hot occupation as of 2016.
- 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
- TCP/IP
- IPv4 vs. IPv6
- NAT: Network Address Translation
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.
- π Intro and overview
- Hello-world HTML/CSS app
- How layout works
- HTML in-depth
- Centering things
- Bootstrap, a popular framework making HTML/CSS easier
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.
- π Intro
- π Intro with an interactive tutorial
- Hub for tutorials, tools, references
- How the var keyword works
- Promises
- Style guide
- π JSON browser formatter
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.
- Install:
brew install node
- π Intro video
- Overview
- 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
- lodash, a set of JavaScript utilities
- 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
- Cheatsheet
- 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
- π Flame graph
- Chrome DevTools JavaScript profiler
- 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
Vim is a popular, powerful, mature text editor. It can have a strong learning curve, but many feel the effort pays off.
- Install:
brew install vim
- Official tutorial:
vimtutor
- Cheatsheet
- π Everything you need to know
- Sensible start to a vimrc
- Advice on settings
- π Advice on making a vimrc
- Vimrc with more features
- π Intermediate topics
- 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.
- JSON: JavaScript Object Notation
- YAML: YAML Ain't Markup Language
- XML: eXtensible Markup Language
- Protocol buffers
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.
- π Intro videos
- Tutorial
- Reference book
- How macros work
- π Make intro
- 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
- Unix
- Linux distribution
- Linux filesystem hierarchy conventions
- Static vs. shared vs. DL libraries
- Daemon
- Go in order, more or less.
- Do not skip the getting started section!
- Snippets like
bash --version
are 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!
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