Yep - assembler knowledge is very useful. You can only understand certain optimization approaches if you know how the machine works internally. And understand why something is slower than perhaps expected at the abstract high-level language level. My first seriously used language was Z80 assembler and I absolutely don't consider that a waste. And yes, I love the disassemble function in Common Lisp and get annoyed every time again when other interactive environments don't offer something like that. Because with it you can very well check what the compiler actually created from the code - and with basic knowledge of the assembler used, you can definitely guide optimizations for time-critical routines. disassemble is like the scientist's microscope. At Planet Lisp there's the original article.