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 1/5 |
- 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 1/7 |
- 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 1/12 |
- 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 1/14 |
- Dynamic pointcuts and control flow
- The need for metadata in programs
- Java annotations
|
|
|
| Week 3 |
| M 1/18 |
University Holiday: Martin Luther King Jr. Day |
|
|
| Tu 1/19 |
- Pointcuts that match against annotations
- Using declare error and declare warning to extend compile-time error checking
- Annotations that carry additional information with them
- Generalizing aspects using annotations and generics
|
|
Assignment #1 due 11:59pm |
| Th 1/21 |
- Binding, revisited
- The tradeoff between early and late binding
- Early and late binding in Java
- Java reflection
- Using annotations with reflection in Java
|
|
|
| Week 4 |
| Tu 1/26 |
- A more thorough example of using reflection: QuickUnit
|
|
|
| Th 1/28 |
- How to choose a programming language for a "real" project
- Applying requirements to the choice of programming language
|
|
|
| Week 5 |
| Tu 2/2 |
- Why Erlang?
- Sequential functional programming in Erlang
|
|
|
| W 2/3 |
|
|
Assignment #2 due 11:59pm |
| Th 2/4 |
- Sequential functional programming in Erlang (continued)
- Message passing concurrency in Erlang
|
|
|
| Week 6 |
| Tu 2/9 |
- Message passing concurrency in Erlang (continued)
|
|
|
| Th 2/11 |
- The MapReduce algorithm in Erlang
- Distributed programming using Erlang (briefly)
|
|
|
| Week 7 |
| M 2/15 |
University Holiday: Presidents' Day |
|
|
| Tu 2/16 |
- The case for mixed-language programming
- Ways that programs in different languages can communicate with one another
|
|
|
| Th 2/18 |
- Combining Erlang and Java in a single project using Erlang ports
- The importance of communication protocols when connecting separate programs
| |
|
| Week 8 |
| Tu 2/23 |
- 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 Protocol Buffers
- Combining Google Protocol Buffers with Java
|
|
|
| W 2/24 |
|
|
Assignment #3 due 11:59pm |
| Th 2/25 |
- A brief overview of domain-specific language design issues
- The parsing problem
- How grammars and regular expressions are related to parsing
- Algorithms for parsing (briefly)
- Recursive-descent parsing using Java
- Recognizing that a grammar can be parsed using recursive descent
|
|
|
| Week 9 |
| Tu 3/2 |
- 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
|
|
|
| Th 3/4 |
- Compiling our domain-specific language to Java (continued)
|
|
|
| F 3/5 |
|
|
Assignment #4 due 11:59pm |
| Week 10 |
| Tu 3/9 |
- More about domain-specific languages
- Understanding Assignment #5 in depth
|
|
|
| Th 3/11 |
- Where have we been and where do we go from here?
- Conclusion
|
|
|
| Su 3/14 |
|
|
Assignment #5 due 11:59pm |
| Finals Week |
| Th 3/18 |
- FINAL EXAM: 4:00pm-6:00pm, DBH 1300
|
|
|