Email   Blog   Facebook   YouTube   Twitch   Discord   Github


  •  CV
  •  Photos

Teaching (OTIS)


  •  For beginners
  •  Problems
  •  MOP
  •  ELMO
  •  USEMO


  •  Puzzle hunts
  •  Twitch
  •  Discord

plz learn code

  •  Filesys
  •  Learning path


  •  EGMO book
  •  Napkin (v1.5)
  •  Course notes



  •  Mentors
  •  Quotes
  •  Rec letters
  •  FAQ's

Buy Me a Coffee at

One possible suggested learning path

Once you’ve read the previous page about what a file is, you can start learning more about the details. (Dumb math analogy: before studiyng math olympiad seriously, you shuold have seen enough that you can tell the difference between a geometry problem and a functional equation.)

Evan’s suggested learning path#

If I was personally teaching computer literacy, I would break it down into the following steps (this is obviously not the only layout):

  1. Learning how to use a command prompt to navigate files and folders in a terminal, and execute commands. You can learn this in a day or two from Zed Shaw or djangogirls or whatever you find on Google.
  2. Find a text editor you like (as stated, any text editor opens any plain text file). Be able to open, edit, and save an arbitrary text file. (This is likely to be covered in step 1 already; LaTeX users may also know this step already.)
  3. You should then learn your first programming language. The hardest part!

Picking a language#

In programming culture, choices of language draw the same visceral reactions as discussions about race and religion. That said, among languages I have used at least a little bite, here is Evan’s tier list:

  1. Python: reads like English, simple to learn, and Evan’s native language. This is my personally recommended first language. The main downside is that it is a lot slower. I grew up on this Python book and recommend it; there are tons of other free Python tutorials. (Note for experts: Python doesn’t have type safety by default, but it can.)

  2. TypeScript: It actually compiles to JavaScript, i.e. there is a program that accepts TypeScript input and produces JavaScript output. Besides that, it has some similarity to Python.

  3. C++: Much faster than Python, but harder to read and write. However, if you want to do [competitive programming] then you probably want to use this one.

  4. Java: It’s a pretty wordy language. I don’t personally like it much but I can see the appeal. The main reason it’s still relevant to kids today is because of AP Computer Science A, but that class does a pretty bad job of teachiing it anyways.

  5. JavaScript: please no.1 Use TypeScript instead.

  6. PHP: definitely no.

Advanced stuff (skip for now)

Some other advanced things you can do involve learning git. switching to Linux, and learning an advanced text editor like Vim or Emacs. I’m not going to talk about the expert stuff here for brevity. For now, your job is to pick a language and mess with it.

Once you’ve done that you can check FAQ’s on Unix for elaborations on the advanced stuff.

Shout-out to Project Euler

I have lots and lots of love for Project Euler. This is an enormous collection of problems that require both programming ability as well as problem-solving math ability in order to solve. I think if you are new to programming but have math background, this is a great way to start off! It can change the way you think about both fields.

If you do choose to play, you may start with some of the later levels, the first 35 levels or so are fairly easy, and later levels are more interesting.

  1. The reason I specifically anti-recommend PHP and vanilla JavaScript is that as a beginner I think you shouldn’t get in the habit of writing code like "You have " + n + " dollars" when you are first starting out. (Okay, I also hate both languages, but that’s unrelated.) 

Updated Mon 22 Nov 2021, 03:01:22 UTC by 2c0fa1e7b262