We sometimes build systems disregarding the math behind them, and in certain cases this may be catastrophic. Algorithms built up from intuition that break at a large scale, protocols that perform only “in theory”, or cryptographic protocols that end up being quite insecure. Of course, knowing the hidden math behind computer science is not the panacea, nor completely protects you from making certain mistakes every now and then, but at least it will give you the skill set to understand what you are doing.
I have already shared my opinion about the importance of learning math and theoretical computer science for disruptive innovation and fundamental research. I have also dedicated quite a few publications in this newsletter to explore the hidden math behind different cryptographic primitives and algorithms. And while it is exciting to understand the guts of these systems, this is not enough to build the math intuition required to come up with your own algorithms, or be able to formally verify or even improve existing ones. This “math intuition” is not built by studying the guts of a bunch of disjoint systems, but by studying their foundations, i.e. linear algebra, statistics, etc. I have been feeling lately like I lack this math intuition I am referring to, and this is why I’ve decided to start studying maths seriously. With a clear structure, discipline, and a target in mind. As the authors of this book I am reading say: “is time to stop being a tourist riding on a bus listening to the tour guide on and off, and becoming a student again, actively learning instead of just wandering around.”
A new endeavor ⛵
And I am starting my personal quest to build up my math intuition by following this Harvard course: Algorithms at The Ends of the Wire. Why this course? Not only because a math wizard I really admire suggested it to me as the perfect way to build up my “math intuition” in the field of computer science; but also because it follows a course structure that worked like a charm for me when I was a student at KTH. I probably learned all that I know now about networking and cryptography from following a bunch of courses with this same structure. The structure is simple: read papers, get familiar with the field, find problems, and propose new ideas.
“The main work of the course will consist of the following: reading and analyzing a number of current and classic research papers; homework problems based on the material; participating in a mock program committee; and undertaking a final research project. (I have been told the workload of the class is reasonable but non-trivial. If you were looking for a graduate class with no work requirements, please look elsewhere.)”
And you may be asking yourself, why are you telling me all of this? Why do I care? Well, because I need your help in this. After leaving college, I have a horrible track record in doing online courses. I’ve tried to start several of them in the past few years, but I never got beyond the second lecture. I lack the motivation and usually have a hard time being consistent. In short, I have a hard time building the habit.
But this time I am going to approach it from another angle. I started thinking: what if I pegged following this course with one of my existing habits? It would really help me be consistent. I always find the time to write a new publication every week, so what if I forced myself to write about my progress in the course in my weekly publications? And that is exactly what I am (at least initially) planning to do. I am going to track my progress here so that you make me accountable for my progress, forcing myself to be consistent and build a habit. I may not be able to finish a lecture and write about it every week, but at least that is my target.
And what is in for you? Well, if you are into it, you have the chance to take the course in parallel with me. We will have the chance to make each other accountable, and discuss our progress and ideas (like an online reading club about computer science and maths 🤓). If you end up showing interest in this, I may start a public Discord/Telegram channel/something so we can start chatting about our progress.
Progress update: Unit 0 📊
To test the format of the course progress updates, this week I’ve been going through Unit 0. This was a fairly straightforward one, but I had to get started somewhere. For each unit/lecture I am planning to share the tasks done, and the notes taken for each of them. Let’s see how this unit went:
Read A Note on Double Pooling Tests.: This note is quite relevant for the times we live in. Even more if you live in the old continent where vaccines are scarce and testing is still key to retain the pandemic.
The note presents double pooling as a way to improve pool testing for certain a-priori probability of positive tests. Pool what? 😐 Pool testing is a technique that was apparently invented in WW2 to minimize the cost of testing would-be recruiters for syphilis. Instead of testing every single recruit, they pooled blood samples from several recruits instead of testing them individually. Recruiters were only tested individually if the results of their pool was positive. The note shows, using really simple statistics, how using double-pooling, i.e. testing everyone in two different pools, minimizes the cost of catching positives.
Read How to read a research paper notes: Honestly, this was a refreshing read. We all think we know how to read, right? Is just a matter of going through all the text we have in front of us and we are good to go. But this is not true, and less so for academic papers:
Reading a paper is a huge time investment, so the first thing we need to be sure of is that it is relevant to us. A good way is usually reading the abstract and skimming a bit through the paper (I usually try to spend 15min tops doing this).
Papers should be read critically. Authors may be wrong. Don’t take what they say for granted. Understand their contributions, their blind spots, and the impact of their research.
Read creatively. Identify the good ideas of the paper and think if they can be improved generalized or leveraged in other fields or problems.
Make notes (this is something I love doing, and that is why I always read paper using a “physical format”, i.e. paper 🤓).
Summarize the paper. Even better, share this summary with someone else to see if they are able to grasp the key ideas of the paper. You’ll see that for certain papers this is extremely hard.
Know what Markov chains are (fortunately I already knew what they were and how they worked :) )
And that’s all for today! I’ll try to have the next class ready for next week, and if you want to join me in the course do not hesitate to ping me. As always, thoughts and suggestions are more than welcome. See you next week!
Best of luck with the course. "Learning in public." 😄