Informatics 102 Spring 2012
Schedule


There is no textbook for this course, but I may assign online readings from time to time that are germane, which will become fair game for the Midterm and Final Exam. When readings are assigned, they will be listed here.

The schedule is a work in progress that will be built as we go along, depending on our progress (and, perhaps toward the end, your areas of interest). I will try to post the lecture schedule and readings at least a week ahead of where we are in lecture, so you'll know what to expect, at least in the short term.

Date Lecture Topics Readings Assignment Due
Week 1
Tu 4/3
  • Course introduction
  • Why variety in programming languages matters
  • Categorizing programming languages
  • Understanding one's goals and finding languages that meet them
  • The case for mixing programming languages in a single project
Th 4/5
  • Separation of concerns
  • Crosscutting concerns
  • The case for aspect-oriented programming (AOP)
  • Aspect-oriented programming using AspectJ
  • Join points
  • Pointcuts
  • Before and after advice
The AspectJ Programming Guide Assignment #0 due 5:00pm
Week 2
Tu 4/10
  • Aspect-oriented programming using AspectJ (continued)
  • Aspects that affect only one class (or a few classes)
  • Inter-type declarations
  • Around advice
  • Altering existing inheritance hierarchies
Th 4/12
  • Dynamic pointcuts and control flow
  • The need for metadata in programs
  • Java annotations
  • Pointcuts that match against annotations
  • Using declare error and declare warning to extend compile-time error checking
Week 3
Tu 4/17
  • Annotations that carry additional information with them
  • Generalizing aspects using annotations and generics
  • Binding, revisited
  • The tradeoff between early and late binding
  • Early and late binding in Java
Assignment #1 due 11:59pm
Th 4/19
  • Java reflection
  • Using annotations with reflection in Java
  • A more thorough example of using reflection: QuickUnit
Week 4
Tu 4/24
  • How to choose a programming language for a "real" project
  • Applying requirements to the choice of programming language
Th 4/26
  • Why you should learn "weird" programming languages (briefly)
  • Why Erlang?
  • Sequential functional programming in Erlang
Week 5
Tu 5/1
  • Sequential functional programming in Erlang (continued)
  • Message passing concurrency in Erlang
W 5/2 Assignment #2 due 11:59pm
Th 5/3
  • Message passing concurrency in Erlang (continued)
Week 6
Tu 5/8
  • What is the MapReduce algorithm?
  • The MapReduce algorithm in Erlang
  • Distributed programming using Erlang (briefly)
Th 5/10
  • The case for mixed-language programming
  • Ways that programs in different languages can communicate with each other
Week 7
Tu 5/15
  • Combining Erlang and Java in a single project using Erlang ports
  • The importance of communication protocols when connecting separate programs
W 5/16 Assignment #3 due 11:59pm
Th 5/17
  • Language design as a response to a set of requirements
  • How Erlang's design requirements led directly to its feature set
  • Domain-specific languages (DSLs)
  • When you need a domain-specific language
  • An example of a DSL: Google's Protocol Buffers
  • Combining Protocol Buffers with Java
Week 8
Tu 5/22
  • Using Protocol Buffers to streamline communication between Erlang and Java
  • A brief overview of domain-specific language design issues
  • The parsing problem
  • How grammars and regular expressions are related to language design and parsing
  • Algorithms for parsing (briefly)
  • Recursive-descent parsing using Java
  • Recognizing that a grammar can be parsed using recursive descent
Th 5/24
  • The value of separating scanning from parsing
  • Writing a custom scanner
  • Designing a scanner that accommodates the needs of typical parsers
Week 9
M 5/28 University Holiday: Memorial Day
Tu 5/29
  • Designing a simple domain-specific language
  • Syntax considerations: designing a parsable, readable syntax (briefly)
  • Finding the appropriate boundary between run-time libraries and generated code
  • Compiling our domain-specific language to Java
W 5/30 Assignment #4 due 11:59pm
Th 5/31
  • Compiling our domain-specific language to Java (continued)
Week 10
Tu 6/5
Th 6/7
  • Where we've been and where we can go from here
  • Conclusion
Su 6/10 Assignment #5 due 11:59pm
Finals Week
Th 6/14
  • FINAL EXAM: 4:00pm-6:00pm, DBH 1200