This gives me a great inspiration for a programming puzzle and learning method:
Replace all variable/function names with generics. Your only job is to give names to every variable (trying to figure out what each does). After you're done you can compare to de-obfuscated names to see if they do what you expected (if they're named sensibly).