{"id":337,"date":"2017-12-23T10:39:36","date_gmt":"2017-12-23T18:39:36","guid":{"rendered":"https:\/\/blogs.ubc.ca\/organizingchaos\/?p=337"},"modified":"2017-12-23T10:40:47","modified_gmt":"2017-12-23T18:40:47","slug":"course-review-cpsc-311","status":"publish","type":"post","link":"https:\/\/blogs.ubc.ca\/organizingchaos\/2017\/12\/23\/course-review-cpsc-311\/","title":{"rendered":"Course Review: CPSC 311"},"content":{"rendered":"<h4>Definition of Programming Languages<\/h4>\n<p>&#8220;<em>I prefer the word &#8216;thunk&#8217; to expression closures.<\/em>&#8221;<\/p>\n<p><strong>Text:\u00a0<\/strong>Programming Languages: Application and Interpretation by Shriram Krishnamurthi<\/p>\n<p><strong>Prof:<\/strong>\u00a0Dr. Steve Wolfman<\/p>\n<p>Wolfman was slightly less flipped in CPSC311, especially as the term progressed. His lectures were pretty entertaining and included a lot of live\u00a0modification of the interpreter. Instead of sticking to textbook examples of dynamic scope and laziness, we often worked on languages in assignments and midterms where exotic adaptations and variants of these concepts were incorporated into a language in mind-bending ways.<\/p>\n<p><strong>Difficulty<\/strong><\/p>\n<p>I expected this\u00a0to be an\u00a0easy course. It ended up taking a lot\u00a0of time. A lot\u00a0of the programming languages concepts were completely new to me and combined with Wolfman&#8217;s avant-garde presentation of the material, I spent a great deal of time preparing for midterms and understanding the readings. The project we selected was in Elixir, and it was also very time-consuming as we had to learn distributed systems concepts in a new language with little guidance. That said, I feel the project was kind of a &#8216;choose-your-on-adventure&#8217;. You could do very well in the project with far less work if you chose wisely initially. Overall, the average was quite hight (around 77%) even though the midterm averages were quite low.<\/p>\n<hr \/>\n<p><strong>Key Concepts<\/strong><\/p>\n<p>Scoping<\/p>\n<p>Deferred evaluation<\/p>\n<p>Recursion<\/p>\n<p>Continuations<\/p>\n<p>Functional programming<\/p>\n<p>SKI combinator<\/p>\n<p>Interpreters<\/p>\n<p><strong>\u00a0Hard Concepts<\/strong><\/p>\n<p>Dynamic scope: Really messes with your brain, helps to write out the context.<\/p>\n<p>Continuations: Odd concept. Helps to think of what function the continuation is bound to and apply it.<\/p>\n<p>SKI combinator: Takes practice to get used to &#8216;algebraic&#8217; manipulations of functions.<\/p>\n<p><strong>Conclusion<\/strong><\/p>\n<p>Learnt a lot. Enjoyed the project. Challenging course.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Definition of Programming Languages &#8220;I prefer the word &#8216;thunk&#8217; to expression closures.&#8221; Text:\u00a0Programming Languages: Application and Interpretation by Shriram Krishnamurthi Prof:\u00a0Dr. Steve Wolfman Wolfman was slightly less flipped in CPSC311, especially as the term progressed. His lectures were pretty entertaining and included a lot of live\u00a0modification of the interpreter. Instead of sticking to textbook examples [&hellip;]<\/p>\n","protected":false},"author":28516,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[281864],"tags":[283872,564,1171123,1171221,1171219,1171220,37,1171210,1171208],"class_list":["post-337","post","type-post","status-publish","format-standard","hentry","category-course-reviews","tag-283872","tag-computer-science","tag-course-review","tag-cpsc-311","tag-cs-311","tag-programming-languages","tag-ubc","tag-ubc-computer-science","tag-wolfman"],"_links":{"self":[{"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/posts\/337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/users\/28516"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/comments?post=337"}],"version-history":[{"count":1,"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/posts\/337\/revisions"}],"predecessor-version":[{"id":339,"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/posts\/337\/revisions\/339"}],"wp:attachment":[{"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/media?parent=337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/categories?post=337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ubc.ca\/organizingchaos\/wp-json\/wp\/v2\/tags?post=337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}