Junior spring just ended. Here’s a couple takeaways from the semester.
In Computer Systems Engineering (6.033), we learned a lot about the abstractions of designing systems and analyzed a bunch of existing ones, like DNS, Unix, TCP, Bitcoin, etc. The big lesson that was reiterated throughout the semester was that as systems grow, increased complexity becomes the factor that cripples continued growth or effectiveness of systems. We then examined the general techniques of dealing with complexity, which included Abstraction, Modularity, Hierarchy, and Distribution.
It’s a bit of a romantic leap, but I like the parallel between this set of techniques in system design and the set of general techniques that I believe are useful in dealing with increased complexity in life. For instance, the general technique of Abstracting away life’s noisier details to not clutter our minds is invaluable, especially as a student.
As an example, throughout college I’ve refined and, more importantly, habitualized a set of tools and strategies to be more effective and productive. One of these strategies is to religiously document everything that I have to do or attend in my Google calendar (GCal). The first thing I do at the start of a semester is add all lectures and recitations. Then, using my courses’ syllabi, I input all assignments and projects due for the semester into Wunderlist, which conveniently syncs with GCal to give me a useful bird’s eye view of upcoming responsibilities.
In total, I invest about five hours getting all of this together during my first week, but the benefits of compiling this master TODO list and being able to reference it throughout the semester makes it a worthwhile investment. This means I no longer have to worry about cluttering my working mind with what I need to do academically, and instead just rely on regularly checking GCal. And even though doing this (and so many other things like effective email management, sticking to a workout schedule, etc) will take a while to get used to, it only gets easier as they become a habit. Lucky for us, the human body and mind are designed to optimize resource usage when something is done repetitively; in other words, making and continuing these habits gets easier.
Turns out abstraction and habitualization are amazingly useful, not only in system design.
I also took Computer and Network Security (6.857), a class taught by Ron Rivest (the “R” in both RSA encryption and the CLRS Intro to Algorithms textbook). We learned about basic cryptography, the Diffie-Hellman key exchange, the Bitcoin system, and a many other cool and relevant security topics (i.e. the Apple vs FBI privacy debacle was happening this semester). But if I’m being honest, unless I go work as a security engineer or penetration tester, I’m most likely going to forget about these topics (confession: had to go lookup the Diffie-Hellman name).
A more memorable experience from this class happened sometime during the middle of the term. We came in to normal lecture time on a Thursday morning and were surprised to not see Rivest set up with his slide presentation. The TAs, also unaware of his whereabouts, asked the class to stay put and wait a bit. Half an hour later, Rivest comes in through the front door with shaggy hair and apologizes: “..shit, sorry class. We all make mistakes. Alright, so elliptic curves…”
There’s something oddly inspiring in realizing that a well-educated, Turing award winning, world-renowned MIT professor can also have bad days. This is a man who revolutionized information technology with the RSA encryption scheme, now revealing some part of his humanity to a group of students less than half his age. It’s a nice reminder that going through a rough time is perfectly normal.
Keep doing you, Rivest.
Copyright © Izzy Gomez. Source found at git.io/izzy