Email   Blog   Instagram   YouTube   Twitch   Discord   Github

About

  •  CV

Teaching (OTIS)

  •  OTIS Excerpts
  •  Mock AIME

Olympiad

  •  For beginners
  •  For coaches
  •  Problems
  •  MOP
  •  ELMO
  •  USEMO

Personal/Hobbies

  •  Puzzle hunts
  •  Games
  •  Photos

YouTube/Twitch

  •  Discord

plz learn code

  •  Filesys concepts
  •  Learning path
  •  LaTeX style
  •  Asy guide

Publications

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

Recommendations

  •  Mentors
  •  Quotes
  •  FAQs

Contact

  •  Rec letters

Buy Me a Coffee at ko-fi.com

One possible tech learning path

Once you’ve read the previous page about what a file is, you can start learning more about the details.

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 missing.csail.mit.edu 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 bit, 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, but as its name suggests has stricter type safety.

  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. JavaScript: Less recommended.2 I suggest TypeScript instead. (Longer argument on blog.)

  5. 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 teaching it anyway.

  6. PHP: Please no.

Second-hand, I’ve also heard a lot of good things about Go.

Sidenote: HTML and LaTeX are markup languages, and not programming languages in practice. CSS is not a programming language either for similar reasons.1

Picking an editor#

For beginners, there are a ton of “basic” text editors that support syntax highlighting and some basic quality-of-life features, and are simple to use. Some of the popular ones include

Visual Studio Code (abbreviated VS Code) is also extremely popular, although it’s a bit more sophisticated than the beginner ones above.

On the other extreme, the two most famous text editors in the world of hackers are Vim and Emacs. These editors are really powerful and efficient, but they take a long time to learn how to use (there is even a video game for learning Vim). Therefore, if you are just learning how to code, I would stay with a simpler editor to start to avoid learning too many things at once. Unless you don’t mind learning multiple things at once, in which case you do you.

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 FAQs on Linux 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 and 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. Pedants may argue they are technically Turing-complete if abused enough, but why would you do that? 

  2. 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 Wed 1 Feb 2023, 02:28:07 UTC by 6ad0501042dc