This page is split into four parts:
- 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.
- Other, for other questions.
How should I prepare for math contests?
Short answer: practice. You should do problems that you don’t immediately 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 really 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 is intended to 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, then it’s probably good material and you should keep reading it. Personally, I learned from just 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, and you can’t just have one. 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 quickly find the algorithm for, then write a solution.
What are good materials for preparing for programming contests?
The NOI.PH maintains 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). 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. Unfortunately, I don’t really 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 quickly 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 just 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?
I don’t really have any substantial advice. I did CrowdMath and PRIMES myself, and I believe that both are good programs. But I don’t really have any other advice to give as to how to get started with research.
A separate question would be how one does well in science fairs, or other research competitions, with a math project. This is very different from just doing research, because these contests are more about communicating 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 emphasize 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, on the other hand, 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 really no substitute for making whatever interests you.
How do I learn to make websites?
My top recommendation are the MDN tutorials. freeCodeCamp is also pretty good; it’s more hands-on, 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.
There are lots of fancy names like Angular, Rails, Django, jQuery, Bootstrap, whatever. Pick any one of them, look up what they do, 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. And from there, just 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 just these, you can do lots.
How do I learn how to design websites?
Very generally, look at websites you like and do what they do. Don’t make direct copies, but take inspiration from everywhere.
With respect to 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 basically 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.
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. Generally, you’ll need to have taken either the SAT or the ACT, and maybe one or two of the SAT subject tests. The official websites have enough information. That’s probably the hardest requirement financially and logistically. Sadly, I don’t think there’s much you can do about the cost; I had to save up in order to take the SATs myself.
Then you just go to the respective college’s website and fill out the application. 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 just do the application. Other colleges have similar application systems.
For the actual application, 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 not as easy to get this fee waived.
There’s so many more questions about the application process that I just 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.
How do you write your handouts? What’s your LaTeX style file?
I write my handouts with LaTeX. My text editor is Sublime Text 3, although I’ve been using NeoVintageous for long enough that I might be convinced to switch to vim. Nah, just kidding, I’ll never switch to vim.
How do you write your blog posts?
I have a running list of ideas in a Google Keep note. The ideas just 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 actually 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 overall structure of a post, which is useful when I rearrange things.
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 generally just 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 regularly. 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 pretty regularly. Not as often as I can, but I try to make something at least once a month or so.
Second is that I just 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 of 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. So here’s my advice. Take all of your hobbies that involves creating things, do them regularly, 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.
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 of the time, it feels like you’re blogging just 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 to be you po?
Just be yourself.