RU beehive logo promo banner for Computing & Info Sciences
CS 380
2025spring
ibarland

ITEC380 in Retrospect

Looking back, what have we learned in this course?

Well, I'll give my take, because I've found that sometimes students have different ideas of what this class was about, or wonder We didn't learn new programming languages, so what was this class about?.

The major themes of the class included:

To do this, we got some other things along the way:

the racket class

Although students tend to call itec380 "the racket class", I'll claim we DID NOT LEARN RACKET, hardly. We covered only six keywords; five of the concepts are also covered in the first couple weeks of Java I: call-a-function `(`; if-else-if `cond`, declare a global variable `define`; declare a local variable `let`; create a function-value `lambda`; and `define-struct`. If teaching racket, we'd have covered the module-system, mutation, for-loop forms, and much more2.

However, a couple of things you may have learned (while using racket) was: - using a *lightweight* language where you can easily write significant programs using just those six constructs -- that was perhaps new. - experience with dynamic type-checking [and understand both: people who prefer a static type-system's guarantees, as well as those who argue that static-typing sometimes just slows them down]

You can now better gauge what various keywords in Java are buying you: when they are helping protect you from errors, and when they are causing you to have to jump through hoops to appease the compiler/language.

At the start of the class, I said that my goals was to get you to think differently about programming (even just writing your Java programs).

Merry programming, and Happy New Year! --Ian


1 When teaching recursion, I find that most CS textbooks don't distinguish between mere "structural recursion" that we did in this class to process lists and trees, vs fancier "generative" recursion, where get clever and recur on something that is *not* just a field/sub-structure of your data (like quicksort or flood-fill). The latter requires cleverness, and you have to be careful not to get infinite loops.      
2 If you *do* want to actually learn #lang racket, I suggest starting with: named-let, var-args and `apply` and keyword-arguments, `compose` and `curry`, mutation (separate keywords for assigning-to-local vs assigning-to-field, since those two types of mutation behave fairly different), provide/require variants, sub-modules, `parameterize`, and perhaps `match`. (And regular-eexpressions, though that's relatively language-independent.) Feel free to ask me if you have any questions. If you want to dig deeper/more-abstractly/mind-twisting, look into "continuation passing style" and `let/cc`.      

logo for creative commons by-attribution license
This page licensed CC-BY 4.0 Ian Barland
Page last generated
Please mail any suggestions
(incl. typos, broken links)
to ibarlandradford.edu
Rendered by Racket.