This is David Feng's tech notes. View it on GitHub or GitBook.

Practical Courses

Recently on Hacker News, I saw a discussion about Hacker Tools, an MIT course/workshop for common tools used in software development. I'm sure resources (free and not free) on those topics can be found online, but it's really handy if they are organized as a course. In the discussion people shared several similar courses, and I have compiled a list of covered topics below.

Several topics are ubiquitous (i.e. they are important): Unix Shell (Bash), Text Editor (Vim), Version control (Git). They are important tools for almost all software engineers, no matter what language/library you use. Make sure to master those skills.

  • Shell and scripting

  • Command-line environment

  • Data wrangling

  • Editors

  • Version control

  • Dotfiles

  • Backups

  • Automation

  • Machine introspection

  • Program introspection

  • Package/dependency management

  • OS customization

  • Remote machines

  • Web and browsers

  • Security and privacy

  • Terminal

  • Vim

  • Bash

  • Git

  • Makefiles

  • Terminal Config

  • Emacs

  • Package Managers

  • Pandoc

  • Technical Interviewing

  • Digital Currencies

  • The Unix Shell

  • Version Control with Git

  • Programming with Python

  • Plotting and Programming in Python

  • Programming with R

  • R for Reproducible Scientific Analysis

  • Programming with MATLAB

  • Using Databases and SQL

  • Version Control with Mercurial

  • Terminal (lecture 1-2, 4)

  • Vim (lecture 3)

  • Source Control (lecture 5)

  • Git++ (lecture 6)

  • Technical interviewing (lecture 7)

Lazy Loading Learning

Nowadays we simply have too much information. One way to handle that is "lazy load" the material: learn it when you need it. Below is the some resources I collected over time, waiting to be lazy loaded 😀





New Languages

Web Performance


Command Line

System Design / Distributed System


CS Books

Configure iTerms2.