Writing your own simple programs and debugging/disassembling them is a solid option. Windbg and Ida are good tools to start with. Reading a disassembly is a lot easier than coding in assembly, and once you know what things like function calls and switch statements, etc. look like you can get a feel for what the original program was doing.