Skip to main content
  1. Education/

University of Wisconsin - Madison

·3 mins

Bachelor of Science in Computer Science #

Notable coursework:

  • Operating Systems - Here I learned a lot about how computers worked. Using the C programming language, I learned by building on a toy kernel (xv6), creating a high-scale multi-threaded compression tool, implementing the MapReduce paradigm, and creating a file system checker.
  • Database Management Systems - I learned about relational database internals. In C++, I programmed a buffer manager layer as well as a B-Tree index on top of a toy database management system. The B-Tree index remains as the largest piece of software that I had to write in university.
  • Computer Networks - I learned about the networking stack, and wrote a lot of protocols in Java using a software defined networking framework: ARP, ICMP. I also implemented a load balancer and a DNS server.
  • Compilers - I learned how program compilation works by building my own compiler in Java for a C-like language.
  • Artificial Intelligence - learned the basics of artificial intelligence. The course focused on various search techniques (A-Star, Depth First, Breadth First), as well as classification techniques.
  • Computer Graphics - here I got to learn about the graphics pipeline, and created several mini-projects and my own shaders using WebGL - a Javascript equivalent of OpenGL. Having to create a shape more complex than a triangle from scratch was not fun.

Bachelor of Science in Mathematics #

I developed a strong interest in mathematics and its potential day-to-day usages as a software developer. To this day, I make use of the rigor that this program instilled within me.

Notable coursework:

  • Discrete Mathematics - this was largely an introduction course into mathematics proofs, and direct appliations to computer science. Much of traditional computer science was taught to me here (ex. time complexity, recursion proofs, finite state machines).
  • Proof-based Calculus and Differential Equations - “where are the numbers?” was my first reaction. This course was a rough experience for me, introducing the rigor and mindset needed for proof based mathematics.
  • Probability - basic concepts of probability.
  • Convex Optimization - here I was exposed to the types of optimization problems that exist, techniques for solving them, and using the Julia programming language in application to solve optimization problems. A very cool moment in ths course was when our professor showed us a model that would generate an optimal structure to support a defined load at a given position, and the model generated an arch.
  • Modern Algebra - this course taught me the basics of abstract algebra, and all the various theorems. I can’t remember it for the life of me, but it was here that I was told that a Rubiks Cube could be modeled using group theory.
  • Real Analysis - another rigourous, proof based course. Here I improved a lot on my proof writing and mathematics problem solving. I also began to see the value in using Set Theory concepts (a brief prerequisite section of the course). Indeed, I made use of this on the job in a few instances.
  • Cryptography - an introduction to the mathematics of cryptography. Less proof heavy, more example heavy.
Author
Nikhil Kumar