Jiwon's Alcove

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

  1. Take care of your mental health. If our mind breaks, then nothing else matters.
  2. 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.
  3. It's not too late. Calm down! Don't rush or give up just because you're a couple of years behind others.
  4. There are more resources than you think. Make better use of office hours, mailing lists, student services, etc.
  5. 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)

  1. The Von Neumann architecture. The de facto computing architecture with a processing unit, control unit, memory (data + instructions), and I/O.
  2. The Big-O Notation. As computing problems often have massive problem sizes, asymptotic order of growth matters more than constant coefficients.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.