48 karma · joined February 27, 2022
In a just world, I may concur with third, but don't let the perfect be the enemy of good.
For example, here are two topics that came up during my time solving combinatorics problems in the past:
https://en.wikipedia.org/wiki/Parking_function
https://www.sciencedirect.com/science/article/pii/S0012365X0...
If a conjecture can be one-shotted by OpenAI Astra, I have a hard time believing it is interesting.
This has happened numerous times in the past, and it will happen over and over again.
In the age of AI, there's no reason one has to follow the kind of classes like Algebra, Topology or PDE. Teach just enough so that good students can understand the basic, and go straight into seminar and research math. I don't think a top student in sophomore year cannot understand or work on some combinatorics research problem and get some results, with proper mentoring and guidance.
https://gist.github.com/ll931110/985a4ec711c6711b120846be05e...
It's clear that he's not interested in those, and forcing him to do so only causes him to withdraw further to his bubble. At least a job gets him to hang out with people closer to his ability.
Nowadays, thanks to VAR, the controversial cases can be reviewed on the replay and referees have ample of time to make the call.
e.g. https://www.cs.princeton.edu/~chazelle/pubs/FJLT-sicomp09.pd...
Computer Science is about understanding what computation can and cannot achieve, and more importantly, how to achieve it (that is where it differs from Mathematics, where mathematicians are usually not interested in the how part). Under this definition, we can put typical college subjects into consideration:
* Data Structures and Algorithms: about studying how to manipulate data to solve a task efficiently.
* Complexity Theory: about formal classification of hardness of problems. What makes a computational problem "hard" or "easy"?
* Computer System: about how to construct a software system to achieve certain purposes. What are the constraints in a system (performance, security, privacy, correctness, fault tolerance, etc), and how to design a system to address such constraints? What tradeoffs to be made when you cannot meet all the desired requirements?
* Distributed System: how to design system with a few to massive number of computers that are connected in a network? How do you reason about fault tolerance, consistency, sharding, and so on?
* Operating System: about how to create abstraction to the hardware, that allows for other softwares to interact with it without having to explicitly deal with the hardware?
The list could go on, but I just give a couple of examples.
1. You need to recognize the opportunities exist in the first place.
2. You need a global controller that can aggregate and optimize for a global solution (and the global solution might not necessarily simply to maximize the aggregate throughput, but there might be other factors into account), which may involve some algorithmic design (in some cases, you need to design new algorithms).
3. You need to justify that global controller gives you a superior solution compared to locally greedy solution. As in this article, a global solution gives you about 3% improvement compared to the local controller, and the local controller algorithm is substantially easier to write.
Background: in my previous job at Meta, I wrote such a global control algorithm for controlling the rate of data going in and out each data center. It involved some really interesting algorithmic design.