{"id":991,"date":"2010-04-19T18:09:07","date_gmt":"2010-04-20T01:09:07","guid":{"rendered":"http:\/\/gregbaker.ca\/blog\/?p=991"},"modified":"2010-04-19T18:09:07","modified_gmt":"2010-04-20T01:09:07","slug":"cmpt-383-for-real-this-time","status":"publish","type":"post","link":"http:\/\/gregbaker.ca\/blog\/2010\/04\/19\/cmpt-383-for-real-this-time\/","title":{"rendered":"CMPT 383: for real this time"},"content":{"rendered":"<p>I have mentioned here before that <a href=\"http:\/\/gregbaker.ca\/blog\/2009\/07\/07\/cmpt-383\/\">I was planning to teach CMPT 383<\/a>.  It ended up being a no-go this semester because of a <a href=\"http:\/\/gregbaker.ca\/blog\/2009\/12\/01\/spring-plan-ddp-projects\/\">very productive capstone project team<\/a> (more on that later).<\/p>\n<p>But, I&#8217;m on-deck to teach it in the summer.  The class is full; the waiting list is full; must be time to plan a course.  After much soul-searching, I have decided there will be three main topics in the course and they will be covered in this order:<\/p>\n<dl>\n<dt>Functional programming (and Haskell)<\/dt>\n<dd>\n<p>\nThis will be most students&#8217; first introduction to a non-imperative programming paradigm (and associated language).  Every little while I think this won&#8217;t take long, then I remember the list of things that have to be introduced to get anywhere with Haskell: being really good at recursion, list comprehensions, lazy evaluation, type inference, higher-order functions, and other stuff to be discovered as I try to teach the language.<\/p>\n<p>\nFrom my perspective, there are two reasons to be talking about functional programming. First, it&#8217;s finding some relevance, probably because people want to parallelize things (e.g. <a href=\"http:\/\/couchdb.apache.org\/\">CouchDB<\/a>).  Second, there are important lessons from functional programming that can be <a href=\"http:\/\/http:\/\/www.harukizaemon.com\/2010\/03\/functional-programming-in-object-oriented-languages.html\">transferred to OO programming<\/a>.\n<\/p>\n<\/dd>\n<dt>&#8220;Language Features&#8221;<\/dt>\n<dd>\n<p>This section contains the big concepts of the course: type systems (static\/dynamic, strong\/weak, type coercion, duck-typing, late\/early binding, &hellip;), interpreted vs compiled, pointers vs references, memory management, reflection, runtime environments, first-class functions, objects, exceptions, mutable\/immutable objects, &hellip;.<\/p>\n<p>The basic question here is: what are the real differences between the programming languages you have to choose from?  How might they affect your choice of language for a project?<\/p>\n<\/dd>\n<dt>Logic programming (and Prolog)<\/dt>\n<dd>\n<p>As much as I am aware that Prolog is pretty much confined to old school AI researchers, I still think there&#8217;s some value in being exposed to logic programming. It should be possible to translate back to the OO world the idea of expressing a problem as a series of constraints and then looking to satisfy those constraints.<\/p>\n<p>To be fair, this is the chunk I am most unsure of.  Part of the reason it comes last is that if anything should fall off the end of a full semester, it&#8217;s this.<\/p>\n<\/dd>\n<\/dl>\n<p>The exact balance of the topics remains to be seen.  I&#8217;ll guess 5 weeks, 5 weeks, 3 weeks.<\/p>\n<p>As for getting marks, I am as far as:<\/p>\n<ul>\n<li>Lab exercises: weekly hour-or-two chances to practice the concrete skills.<\/li>\n<li>Assignments: like&hellip; two of them?  One Haskell, one Prolog?<\/li>\n<li>Project: pick a somewhat obscure language from a list I provide.  Explore it by writing a report and some programs with it.<\/li>\n<li>A midterm and a final exam.<\/li>\n<\/ul>\n<p>No idea what I&#8217;ll ask on the exams.  Maybe Warren has some old ones I can look at.<\/p>\n<p>So there it is.  Unless I change my mind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have mentioned here before that I was planning to teach CMPT 383. It ended up being a no-go this semester because of a very productive capstone project team (more on that later). But, I&#8217;m on-deck to teach it in the summer. The class is full; the waiting list is full; must be time to [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,12],"tags":[],"class_list":["post-991","post","type-post","status-publish","format-standard","hentry","category-teaching","category-work"],"_links":{"self":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/comments?post=991"}],"version-history":[{"count":17,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/991\/revisions"}],"predecessor-version":[{"id":1008,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/991\/revisions\/1008"}],"wp:attachment":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=991"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}