- Contests, for questions about math and programming contests.
- Programming, for questions about programming in general, and web development.
- School, for questions about MIT and applying to colleges.
- Writing, for questions about my blogging and other writing.
- Other, for other questions.
How should I prepare for math contests?
Short answer: practice. You should do problems that you don’t at once know how to solve, or even know how to start. The long answer is that Evan Chen has written about this, and I don’t have other advice other than what is already said there, so you should read it.
What are good materials for preparing for math contests?
Well, there’s my material. PRIME can help someone prepare for the PMO Qualifying Stage, and I have handouts aimed at competition math. There’s also lots of handouts available everywhere else on the internet; see Geoff Smith’s links, or any collection of links floating around on AoPS.
If you can understand what you’re reading, and you’re learning something, and you’re working on problems, then it’s probably good material and you should keep reading it. Personally, I learned from reading a bunch of random handouts on the internet, and trying a bunch of problems.
How should I prepare for programming contests?
Short answer: practice. Much of the advice for math contests applies here too. Us competitive programmers also have regular contests in platforms like AtCoder and Codeforces, so we get way more opportunities to practice.
One crucial thing that’s different is that competitive programming is a combination of two separate skills: algorithm design and implementation. You need to practice both. Your success kind of depends less like the sum of these skills, but more like the product.
When you join a contest and can’t solve a problem, focus on whether it was because you couldn’t figure out the algorithm, or you knew it but made a mistake in programming it, or didn’t know how to. If you’re less skilled at implementing algorithms, then practice implementing them more: find problems that you can find the algorithm for, then write a solution.
What are good materials for preparing for programming contests?
NOI.PH has a Prepare page with a list of resources, and I think it’s pretty good. Here are some more thoughts.
If you don’t know C++, then you should learn C++. You only need to know the basics to start off; you don’t even need to learn about classes (yet). The NOI.PH page recommends Udacity. Once you know a little programming, then I recommend starting joining contests, like AtCoder Beginner Contests or Codeforces Division 3 or 4, before you start learning algorithms.
For learning algorithms, the NOI.PH page recommends 6.006 on OCW, which I think is good. Antti Laaksonen’s Competitive Programmer’s Handbook is good, but lacks exercises; you should find problems to practice on. I personally learned from Competitive Programming 3.
If you’re a Filipino high school student, then you should also join the Discord server, as described in the NOI.PH Prepare page. If you aren’t, there’s also the CP Community Discord.
How do I solve this problem? Can you solve it for me?
Probably not. I don’t have enough time to solve every problem that gets sent to me. If I know the solution, I’ll link it to you if I have the link, and if I don’t, I’ll try to explain the idea. If I don’t know the solution and don’t see how to start the problem in a few seconds, then I’ll probably say I don’t know.
Are you available to tutor my child for math or programming contests?
Probably not. If I know of any friends who are looking for students to tutor I can direct you to them, but as of now I don’t.
How do I get into research as a high schooler?
A separate question would be how one does well in science fairs, or other research competitions, with a math project. This is different from doing research, because these contests are more about talking effectively over anything else. If you’re competing in a research contest, my advice is to practice your presentation, structure it as some sort of problem–solution narrative, and stress one main thing about your project that’s good.
How do I start learning how to program? What programming language should I learn first?
You should learn Python. It was my first real programming language, and it’s still one of my favorites. I learned from Learn Python the Hard Way back when there was only Python 2, and I think it’s still a good resource. (I don’t think paying for it is worth it, though.) There’s also a lot of other places to learn Python to check out; 6.0001 on OCW might be good.
If you want to learn programming to do programming competitions, then you should learn C++. I don’t know any good ways to learn C++. The NOI.PH Prepare page recommends Udacity. I learned it from the cplusplus.com tutorial, which is sketchy, and I think I only got anything out of it because I already knew Python. I don’t recommend that site at all, even after you’ve learned C++.
I know a programming language, what do I do now?
I started out writing one-use scripts for things I was interested in, like doing data analysis on a Tagalog wordlist. It branched out into making larger and larger projects over time. There’s no substitute for making whatever interests you.
A lot of your early work won’t be great, and that’s fine. My early work wasn’t great either.
How do I learn to make websites?
My top recommendation are the MDN tutorials. freeCodeCamp is also pretty good; more practice, but less in-depth, I feel. Either one would be great. I personally learned through w3schools. At the time, it was pretty bad, but now it’s okay.
Don’t feel like you need to learn what every single tag or attribute or function does. I look things up all the time on MDN. You get enough practice and start to remember the ones you use the most.
Pick a modern library, look up what it does, and if you think it’ll help you, and follow a tutorial. If you can’t follow the tutorial because it assumes you know something else, learn that thing first. That’s pretty much it. I mostly learned through tutorials and Medium blog posts.
Some specific recommendations. Learn React. Then install npm and learn what it is. Learn about Express, and learn how to make APIs. Learn TypeScript. And from there, keep learning about what you’re interested in. There’s so much to learn—I haven’t learned about everything I want to learn yet—but even if you know only these, you can do lots.
How do I learn how to design websites?
Look at websites you like and do what they do. Don’t make direct copies, but take inspiration from everywhere.
On high-level design, I like The Design of Everyday Things, Steal Like an Artist, and Universal Principles of Design. For specific design things, I take a lot of influence from The Elements of Typographic Style, Practical Typography, and CSS Tricks.
For usability, read things from the Nielsen Norman Group, take the moral lessons to heart, and then throw away specific recommendations that you dislike. For performance and accessibility, I learned through the recommendations of web.dev. This is the kind of thing where I mostly learned through reading a bunch of blog posts when I look things up.
How did you make your website?
There’s a colophon that answers this.
What OS do you use? What’s your text editor?
I use Manjaro with i3 and zsh on Alacritty. I dual boot with Windows to play games sometimes, but less often now that many games run on Linux. My text editor is Neovim with a ridiculous amount of plugins.
How do I get into MIT? What do you think got you into MIT?
I am not the MIT admissions office, and so I can’t answer these questions. I don’t know what helped me get in and what didn’t. Instead, I’ll direct you to the MIT Admissions website; read Applying Sideways or There Is No Formula, and the lots of other great posts on the admissions blogs.
How do I apply for US colleges?
It depends on which college you’re applying to. For the sake of the question, I’ll assume you’re an applicant from the Philippines. You’ll need to have taken either the SAT or the ACT. The official websites have enough information. That’s probably the hardest thing, financially and logistically. Sadly, I don’t think there’s much you can do about the cost; I had to save up to take the SATs myself.
Then you go to the respective college’s website and fill out the form. You usually want to start around the beginning of Grade 12. For a college that uses the Common App, you make an account, search for the college, and do the form. Other colleges have similar form systems.
For the actual form, you will need to answer questions, write essays, get teachers to write recommendation letters, and get your school to send grades. If you need it, you can get the fee waived with the help of a counselor. Once that’s done, you also probably want to apply for financial aid, which usually involves the CSS Profile. Ironically, this costs a fee, and it’s harder to get this fee waived.
There’s so many more questions about the form process that I can’t answer here, but that’s the general outline. For questions like how to write good essays or get letters of recommendation, looking things up should help. If you have a college-specific question that their website doesn’t answer, you shouldn’t hesitate to email them.
One last thing. I applied to college after my parents kicked me out of their home, which made some parts of the process especially difficult. If you’re in a similar situation and have questions, feel free to email me.
Which MIT classes should I take?
I can’t tell you what classes to take, but I can tell you what classes I took.
Why did you take a gap year between high school and college?
I moved out of where I previously lived and needed a few months to get my bearings before I started college. I used the gap year to work for AoPS and save some money. I also used it to apply to US colleges, though that wasn’t part of the original reason I took a gap year.
How do you write your blog posts?
I have a running list of ideas in a text file. The ideas come in at random times, and I make sure to write them down as soon as I can.
When I feel like making a blog post, I write up a draft in Markdown using my text editor. Usually the draft stays in my editor for a few days while I work on it. Many of my blog posts begin with some vague outline of how many sections there’ll be and what each section will cover, although this changes a lot once I start filling it in.
My time-honored technique for writing is to write progressively detailed outlines. I write the sections out, and then I write bullets for what I want to discuss in each section. Often each bullet ends up being one or two paragraphs. Having this also helps to see the structure of a post, which is useful when I rearrange things.
Then I edit. I’ve set up Vale to lint my writing. For longer posts, I’ll send it to test readers for comments, and I’ll sit on it for a few days to reread.
How long does it take to write a blog post?
Long blog projects take several weeks; for example, both Two hundred puzzles, fifty weeks later and My dorm room’s 24-year history took two months. Most personal posts take anywhere from two to twelve hours, proportional to length.
Why do you write so much?
One of my ultimate goals in life is to write enough that I can quote myself in any context.
How do I get better at writing?
Short answer: practice. Read people whose writing you like. Be vulnerable. Write, a lot, even if you think that most of it sucks. By a lot, I mean a lot. I average a little over five hundred words per day, but I only share writing that I think is good, which means that most of my writing isn’t read by anyone else except me.
You should also share your writing: see Why You Should Start a Blog Right Now, although there are lots of ways to share your writing other than a blog. If you start a blog, though, my advice is to avoid writing for the sake of writing. Having a posting schedule is fine, if that helps you write a lot; and it’s okay if some time, it feels like you’re blogging only for the sake of this schedule. But it shouldn’t be like that for every post. Every once in a while, you should be writing something you’re genuinely excited about sharing.
Paul Graham has several essays on writing that I like: The Age of the Essay, Writing, Briefly, Write Like You Talk, How to Write Usefully. There’s Scott Alexander’s Nonfiction Writing Advice. On style, I like Tony1’s self-help writing tutorials, The problem with elegant variation, and this cool list of figures of speech.
How do I learn LaTeX?
I learned from Wikibooks, and copiously looking things up on Google.
How do you write your handouts? What’s your LaTeX style file?
How do you have so much time?
I don’t use any time management techniques or anything. In fact, I find that I work best when I don’t structure my days at all. I feel out when I want to do work and when I don’t want to do it. Sadly, I don’t think this translates into good advice. I think that most of it, instead, is that I give off the image of having a lot of time.
I can think of three factors that contribute to this image. First is that I produce content and share it. My hobbies include making handouts, programming, and writing blog posts. These all involve creating things that I can share with others, and I try to do these often. Not as often as I can, but I try to make something at least once a month or so.
Second is that I make a wide range of things. Which is nice, because I get to pursue all the things I’m interested in and make myself look good in the process. But it also means that I still have no idea what I want to do in the future. It also makes it harder to unite all my work—I’ve spent lots of time thinking about how to organize this website, and I’m still not satisfied with it.
Finally, I’ve been doing this for long enough that I’ve built up an archive of things I’ve done. Here’s my advice. Take all your hobbies that involves creating things, do them often, share your work with others, and collect all your work in one place. It won’t create more time, but it’ll make you like you have more of it. And even better, you’ll be creating things.
What happened to Firehose?
I no longer work on Firehose. Now I work on Hydrant, which started as a fork of Firehose but eventually became a full rewrite. Firehose did not have an open source license, so to remove all the original Firehose property we had to change the name and logo.
Pronouns? Gender? Sexuality?
How to be you po?
Just be yourself.