<story><title>Learn C</title><url>https://medium.com/tech-talk/afcfa2920c17</url></story><parent_chain><item><author>andrewvc</author><text>This is a fair point, but it brings to mind another point I didn&apos;t really understand till the last couple of years. Learning about how compilers work is just as important. Building a small lisp compiler was a life-changing experience for me in terms of going one level deeper, as much as understanding C was. For those who&apos;ve never written lisp before, the reason I recommend a lisp compiler is that lisp compilers are the simplest to write, and the most expressive in terms of runtime strategy since lisp syntax mirrors a compiler&apos;s IR (intermediate representation). I think this is just as important in todays world because languages like Ruby and Javascript are both directly inspired by lisp. We also live in a world where Clojure is seeing a steady rise, for once a Lisp with large potential for significant commercial adoption.&lt;p&gt;I can highly recommend the book Lisp in Small Pieces, $93 on amazon, and worth every penny. Walking through the building blocks and design decisions of a language changes the way you code. Every language you look at winds up being internally translated into your own IR whether you&apos;ve written a compiler or not. Understanding the inner workings of a compiler however adds depth.</text></item></parent_chain><comment><author>zedshaw</author><text>Hell yeah, learning how to make compilers should be what a BS in CS is all about. Pretty much &lt;i&gt;everything&lt;/i&gt; in computer science can be turned into a language and compilers have almost all of the major topics in CS as one easily explainable thing.  It&apos;s also one of the few parts of CS that stands on a solid logical proof filled footing and is still insanely practical.&lt;p&gt;I basically teach baby compiler theory at the end of my Python book without people even noticing because I think parsing at a minimum is so important.</text></comment>
<story><title>Learn C</title><url>https://medium.com/tech-talk/afcfa2920c17</url></story><parent_chain><item><author>andrewvc</author><text>This is a fair point, but it brings to mind another point I didn&apos;t really understand till the last couple of years. Learning about how compilers work is just as important. Building a small lisp compiler was a life-changing experience for me in terms of going one level deeper, as much as understanding C was. For those who&apos;ve never written lisp before, the reason I recommend a lisp compiler is that lisp compilers are the simplest to write, and the most expressive in terms of runtime strategy since lisp syntax mirrors a compiler&apos;s IR (intermediate representation). I think this is just as important in todays world because languages like Ruby and Javascript are both directly inspired by lisp. We also live in a world where Clojure is seeing a steady rise, for once a Lisp with large potential for significant commercial adoption.&lt;p&gt;I can highly recommend the book Lisp in Small Pieces, $93 on amazon, and worth every penny. Walking through the building blocks and design decisions of a language changes the way you code. Every language you look at winds up being internally translated into your own IR whether you&apos;ve written a compiler or not. Understanding the inner workings of a compiler however adds depth.</text></item></parent_chain><comment><author>mbel</author><text>I totally agree; actually a small, incomplete Scheme interpreter (which may be used to develop a lisp compiler later on) can be easily created in few hours (depending on used language) [0], without any prior experience. It&apos;s surely not as deep learning experience as building a compiler, but I think it&apos;s still worthwhile.&lt;p&gt;[0] &lt;a href=&quot;http://norvig.com/lispy.html&quot; rel=&quot;nofollow&quot;&gt;http://norvig.com/lispy.html&lt;/a&gt;</text></comment>