Are you scared by watching Evan’s fingers repeatedly smashing the wrong keys and things would somehow work anyway? Have you tried using LaTeX and found that nothing made sense? Are the lotus-eaters trying to convert you into the cult of Vim? Have you just been overwhelmed by all the black magic that Evan and his orz-ers seems to exercise like it’s nothing?
(Or are you just here because of the $N = p^2+q^3$ question on the OTIS application? Good, it’s working.)
If so, these pages may be for you.
You’re much better off using code as your secret weapon in another profession. People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.
— Zed A. Shaw
If you found my website, you are presumably someone who likes learning and thinking. If you are such a person, and you don’t know how to code, here is my advice for you: sit down and learn it.
Seriously, learn to code. Learn. To. Code. Learn to code god-damn it!
I don’t think everyone should be able to solve IOI problems1. But I am adamant you should at least have a basic understanding of how computers work, and be able to automate trivial tasks. For example, you should be able to write a script that batch renames the files
output100.txt. Or to hack together a program that reads the data from a Google form, and sums the result into a table that you can send out.
Unlike something like quadratic formula or differentiation, most careers directly benefit from some computer literacy2. Programming is so efficient that, once you achieve a basic amount of literacy, the extra productivity will rapidly repay the time invested in learning. But making cumbersome tasks merely faster is not the true reward; the real payoff is changing outright impossible into straightforward.
I think every single job I’ve had since leaving high school used programming in some way. Here are just a few examples:
- arXiv:1708.01350 was one of the strongest papers I obtained from the Duluth REU. I got the result by writing a C++ program to work out several million cases and then using engineer’s induction on the output. It took a whopping one afternoon.
- OTIS was already using Python scripts by the time there were 10 students. Today, there are more than 300 students, and the program runs on its own dedicated Django server, OTIS-WEB. It would simply not be possible to run OTIS without OTIS-WEB.
- Running MOP involves a lot of Python scripts now for things like collating tests, printing score packets, etc. I think it would be unmanageable otherwise.
Running Mystery Hunt requires extensive code not only to set up the hunt website, but even just to manage the problem-writing process, to say nothing of things like interactive puzzles.
And then even individual puzzles can require code that the audience never sees. The logic puzzles in Flooded Caves used grilops as a way to search for interesting configurations and verify uniqueness; while Escape From Life involved overnight CPU computations to find configurations that produced the correct letters. The list goes on.
Solving puzzles is, of course, greatly aided by code as well, and in some cases essentially required.
- The Automatically Generated EGMO Solutions Treasury is true to its name — it’s auto-compiled from the problem database I wrote myself. The OTIS Excerpts, MOHS rating chart, and the various solutions files on this website’s problems page, as well as the list of solved YouTube problems, were all produced using Python scripts as well.
- This website was generated by Markdown and Python.
And so on. To put it bluntly, not knowing how to code will severely cripple the space of things you’re able to work on.
- Read on about files and folders.
- See the learning path for advice about things like what language to work with.
The IOI is an algorithmic contest, which means that part of the problem is first finding an algorithm, and after that actually implementing it in C++. I’m here to say that even the latter ability alone is valuable, even if you never learn graph theory or Dijkstra’s algorithm. ↩
I, and several others, also suspect that knowing programming changes the way you think. But this is harder to measure or prove, so I only stated the weaker claim. ↩