Definition of Programming Languages
“I prefer the word ‘thunk’ to expression closures.”
Text: Programming Languages: Application and Interpretation by Shriram Krishnamurthi
Prof: Dr. 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 modification 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.
Difficulty
I expected this to be an easy course. It ended up taking a lot of time. A lot of the programming languages concepts were completely new to me and combined with Wolfman’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 ‘choose-your-on-adventure’. 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.
Key Concepts
Scoping
Deferred evaluation
Recursion
Continuations
Functional programming
SKI combinator
Interpreters
Hard Concepts
Dynamic scope: Really messes with your brain, helps to write out the context.
Continuations: Odd concept. Helps to think of what function the continuation is bound to and apply it.
SKI combinator: Takes practice to get used to ‘algebraic’ manipulations of functions.
Conclusion
Learnt a lot. Enjoyed the project. Challenging course.