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
|
|
|