Skip to content

Instantly share code, notes, and snippets.

@maksadbek
Created September 4, 2013 16:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maksadbek/6439762 to your computer and use it in GitHub Desktop.
Save maksadbek/6439762 to your computer and use it in GitHub Desktop.
Jonathan Paulson, 11th in ACM-ICPC 2013, GCJ 2013 Finals
Votes by Max Plank, Anton Leonov, Ben Alpert, and 220 more.
Go to Timus Online Judge, and work down in order. If you get bored, skip down a ways. If you can't solve the problem, look at the per-problem forum. If that doesn't help, ask someone (like StackOverflow, or a friend, or Quora, or...)
Once you've done 50-100 of those, you can write some code and maybe know a few basic algorithms. Go to Codeforces and do their weekly-ish contests. Do TopCoder contests too. When you don't get problems, figure them out afterwards.
Once you get into Div 1 on Codeforces/TopCoder, you have some skills:
1) You are an algorithms/data structures "expert". You probably know as much as most undergraduates at top CS schools and enough to get a job at Google or similar
2) You can actually write code, which is apparently a surprisingly rare skill.
You are still missing a bunch of programming knowledge:
1) What are threads? How do I solve concurrency problems?
2) How does memory management actually work? How do function calls actually work? How does thread scheduling actually work?
3) How do computers talk to each other? How does the Internet actually work?
4) How do I make things appear on the screen that people can interact with?
I don't know of as-simple ways to learn those things. Some suggestions:
- Write an OS to learn #1 and #2. (I think there are online courses. Maybe)
- Write a game to learn #4
- Write a multiplayer game to learn #3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment