Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> It changed the way I learn any new programming language.

I can say the same and I can offer my reasons: until this course I saw every language like a little island; after this course I understood that programs are just a collection of features: various typing systems, static/dynamic scoping, lazy/eager evaluation, etc. It's a ton easier to learn a new language by identifying these features than by looking at a language as a big blob. This also made me realize that languages are not little disjoint island - they're overlapping a lot instead.

The course was the way I got into racket and other lisps and this allowed me to read SICP. Since then I've been doing all sorts of toy interpreters/transpilers for fun and it allowed me to get an idea of what's happening behind the scenes in real languages. For example, I used to think that closures are magical, but after implementing them as part of the course they were a piece of cake afterwards. You will get a profound satisfaction when you implement call/cc yourself and suddenly you understand how try/catch or generators work.



I took the same path and went back to reading SICP. But, this time around is was very easy. I had the same experience about implementing closures and the embedded language.


Interesting. Did you feel like you needed a strong understanding of compilers or automata to really grok what was going on (I think automata relate to programming languages, but could be mistaken)?


None at all. Automata are used to turn a program from its textual form into some manageable data structure that something else will consume (actual interpreter/optimizer/compiler). At some point in the course (in the racket part) you will be asked to implement an interpreter for MUPL (made-up programming language), but the programs are directly written as a data structure - so no need to parse; in racket both data and code look exactly the same - it'll be a breeze.

I think the only requirements for this course is some plain procedural language (C/Pascal).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: