Lorem ipsum dolor sit amet! I am graduating and I know nothing. (Note to recruiter: exaggeration 🙊.) So I’ve started this blog to learn the good old Feynman way. I’ll be posting things about programming: algorithm problem-solving, notes from self-learning, project retros, and more.

Sure, I’ve sat in lecture halls, queued in office hour, stayed up for coding projects and copy-pasted from stack-overflow; Sure, I have done internships, hackathons, conferences, research and leetcode; and yes, I do know how to reverse a linked-list. Still I found myself muttering “I dunno” in interviews. Too many times.

Upon retrospection, my programming knowledge seems shallow and scattered. Inspired by Lil’Log, I realized writing helps to connect the dots and consolidate knowledge. To motivate myself (and to turn quarantine/recession anxiety into productivity), I have started this blog to document my progress and to share some digestible insights.

What will be covered?

I have identified knowledge gaps and compiled a list of topics, each with corresponding learning materials.

Interview Grind

Imaging sitting for a coding interview, walking through \(O(n)\) solution and passing all tests in the first go. And then have a great conversation with technical depth on the design question. Without sweating.

Algorithm

While I practice problem solving, I plan to classify and summarize thought process and common problems. The programming problems will be coming from:

System Design

This year there are too many new grad applying to entry level jobs, so expect system design and object oriented programming questions. I will be studying materials from:

Computer Science Knowledge

This is different from all the whatever-awesome github repo I’ve stared and never read. This is a personally tailored list of knowledge gaps and how to fill them.

Programming Skills

  • C/C++ (also to prep for competitive programming)
  • Java: Core Java by Cay S. Horstmann and Gary Cornell, JVM
  • Linux, git, vim

Algorithm and Data Structure

  • Stack, linked list
  • Sorting algorithm and complexity analysis, hash algorithm principle, map principle (hash map, tree map)
  • Binary tree, full binary tree, complete binary tree, minimum spanning tree, Dijkstra, balanced binary tree, red-black tree implementation.

Computer Network

  • TCP: TCP/IP Illustrated (network, communication, distributed system, server). Three-way handshake, four-way handshake, how does TCP achieve reliable transmission, congestion control, flow control, use of socket
  • HTTP: Illustrated Guide to HTTP (web development), Unix network programming by W. Richard Stevens
  • Five-layer protocol architecture
  • DNS resolution process, ping process
  • HTTP, HTTPS, HTTP2

Operating System

  • Thread process, thread synchronization, inter-process communication mode, cache calculation* (* RU etc.), deadlock problem, file system
  • Distributed programming

Database

  • 1 NF, 2 NF, 3 NF
  • sql syntax and commands
  • The principle and function of index
  • Transactions: Atomicity, consistency, isolation, durability
  • Super key, candidate key, primary key, foreign key

Compiler

  • Interpreter, compiler
  • Principle of Virtual Machine
  • Compilation process: lexical analysis, grammatical analysis, semantic analysis

Design Pattern

  • Head First Design Patterns by Elisabeth Freeman and Kathy Sierra

Machine Learning

  • Math, physics, statistics and probability
  • Data collection and processing
  • Algorithms and models
  • Training, analysis and evaluation
  • Tools to deploy a model

Project Retros

  • What is it about
  • Technically what I learned
  • Challenges, mistakes/failures, conflicts
  • Enjoyed, leadership
  • What I’d do differently

Frequency, Style & Audience

My goal is to be consistent and informative. I aim to post every week. Ideally I hope to deliberately practice a dense, expository academic writing style. Audience? I am currently just writing to entertain myself. This WILL NOT be another failed New Years Resolution because I started around Thanksgiving 🦃.

It gets easier… Every day it gets a little easier… But you gotta do it every day — that’s the hard part. But it does get easier.