## A Few Lessons from Undergrad

Feb 12, 2023

I just got my bachelor's degree! It was a long journey, including a semester when I only got F's. It's a miracle I got a degree at all, let alone with the opportunity to pursue a PhD next fall. Rather than writing an overly long retrospective that nobody cares about, I wrote a listicle instead!

### Five Life Lessons I Wish I Knew Before Going to College

**Take care of your mental health.**If our mind breaks, then nothing else matters.**Be okay with not being the best.**Get used to the fact that you are not the best at everything you do, and that it's totally okay. That just means there's always people to learn from.**It's not too late.**Calm down! Don't rush or give up just because you're a couple of years behind others.**There are more resources than you think.**Make better use of office hours, mailing lists, student services, etc.**Don't overextend.**Take the recommended amount of courses, take on only a few extracurriculars, and do them well.

### Ten Most Important Computer Science Concepts From Undergrad (In No Particular Order)

**The Von Neumann architecture.**The de facto computing architecture with a processing unit, control unit, memory (data + instructions), and I/O.**The Big-O Notation.**As computing problems often have massive problem sizes, asymptotic order of growth matters more than constant coefficients.**Complexity Classes.**Computing problems can be classified into different time and space complexity classes using the Big-O notation. Get used to P, NP, and DTIME.**The Church-Turing Thesis.**Wish some handwaving, the Church-Turing thesis posits that all feasible algorithms can be written as Turing's Turing Machines as well as Alonzo Church's Lambda Calculus.**Locality.**Memory locations that are spatially closer together tend to be accessed by a program closer together in time. Exploiting locality is one of the biggest systems-level optimizations.**Abstract data structures VS concrete data structures.**Lists, sets, queues, stacks, trees, graphs, and maps are abstract data structures that store data in a structured way to ease computation. Linked lists, array lists, hash tables, adjacency matrices, and sparse vectors are some ways to implement the abstract data structures.**Abstraction.**Computers are absurdly powerful and complex. As such, we organize them into layers of abstractions such that a single person only has to deal with one layer at a time.**Reductions.**Reductions allow us to transform one problem into another problem. By solving one theoretical problem, we can solve many others at the same time.**The time-space tradeoff.**In many scenarios, computer scientists make difficult problems feasible to solve within a reasonable amount of time by using more space (memory & storage), which tends to be cheaper than time.**Different fields view the same problem in different lenses.**Computer science includes subdisciplines whose practitioners think in wildly different ways, such as theory (algorithms & analysis), systems (empirical experiments), HCI (human factor), and data science (statistics).

Many honorable mentions goes to: The greedy heuristic; search algorithms; minimax; finite automata, regular expressions and context-free grammar; duality; recursion; instructions as data; backpropagation; metaheuristics; the equivalence of logic, category theory and type theory; P vs NP problem.