Hello, World!
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:
- Leetcode \(\approx\) 1600 questions
- Project Euler \(\approx\) 700 questions
- (If I still have time and brain cells to spare) coding competition like Code Forces, and ACM/ICPC
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:
- System design primer (free)
- Grokking the system design interview
- Grokking the object oriented design interview
- (And if I still have $ to spare) Systems expert
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.