Programmers should, at some point in their live:
- design a protoCPU with pen and paper
- write some assembly by hand
- write a compiler
- write an OS syscall library (malloc)
- write a parallele program with message passing and mutex/semaphores
Bonus:
- write something embeded