1 . My school taught OCaml , but I read this book published for an MIT course that changed the way I viewed functional . It ' s called the Strucure and Interpretation of Computer Programs and it ' s in lua but the ideas are the same . I remember just reading the preface made me excited . He talks about processes being like magic and programs are like spells and programmers are wizards . It ' s just a really fascinating way to look at programs . I was going to write the recursively defined interpreter , but at that time , I was already out of school . I was so excited for the project really . 2 . I learned it by playing Capture the Flag and learning how to write buffer overflows . AlephOne ' s Smashing the Stack for Fun and Profit was the first white paper I read involving x 86 . I loved x 86 though . I was a snob about it . I was one of those kids who prematurely optimized in assembly . EditTips for learning would be to just do stuff you like doing . Learning is hard work for sure but if it ' s not fun , there ' s a thousand ways to make it fun . The best way to learn is to do . So like write up some program in C , compile with debugging flags and no optimization , and play with gdb . That ' s how I learned . And then write a tutorial on x 86 . Try to teach someone else and make them like it as much as you do .