CMSC 433: Programming Language Technologies and Paradigms
Syllabus / Readings / Exams
The topics for the class are taken from a variety of sources. There
will be readings from both texts and web
resources. Here is the tentative topic list (likely to be revised
- Java (2 weeks)
- Object oriented programming in Java
- Inner classes
- Programming Techniques and Tools (1 week)
- Object-Oriented Design and Design Patterns (3 weeks)
- Object invariants
- Class design
- Design patterns
- Threads (2 weeks)
- Intro to Concurrency (1 week)
- Java threads
- Java memory model
- Synchronization: locking (synchronized) and signalling (wait/notify)
- Concurrent Programming in Java (4 weeks)
- Design Forces (safety, liveness/deadlock, performance, reusability)
- Distributed Programming (2 weeks)
- Java RMI
- Marshalling, stubs and proxies
- Special Topics (1 week)
Most of the topics in the class you will learn by doing, so there will be a
substantial emphasis on programming projects.
Here is a tentative breakdown:
- The college policy on academic dishonesty is strictly
followed. All graded materials (whether exams or programming assignments) must be
strictly individual efforts.
- We expect you to follow all CSIC guidelines for responsible machine
- Dr. Hicks is the information owner for all CSIC accounts in this class, and all files in those accounts may be inspected
by him at any time.
- Allowing another student to examine a listing of your program or
examining the listing of another student's program, for any
reason, is strictly forbidden.
- You may discuss only the following with other students:
- Material covered in class.
- The program statement (e.g., “What size inputs did Porter say we had to
- Syntax errors and features of programming languages (e.g., “How do I
declare a file?'” or ”Do I need to terminate the last line in a
function with a semi-colon?”).
- Discussion of solutions to a programming assignment must be limited to a
discussion of what was discussed in class, in handouts or in the book. You
may not otherwise discuss algorithms to be used to solve programming
assignments (e.g., you should not ask or answer “Should I use linked
lists to store the input lines?”) except to discuss what was said in
class about the issue.
- Logging onto another student's account, for any reason, is cheating.
- Attempting to falsely represent the correctness of your program, or to
delay other members of the class from completing a programming assignment,
- The standard penalty for any cheating is to receive a grade of
XF in the course. This grade denotes failure due to academic dishonesty,
and your transcript will be so annotated.
- You are discouraged, in the strongest possible terms, from making a
habit of getting together with another student while you work on a
programming project with the idea that you will limit yourselves to
discussion of problems such as syntax errors only. There are too many
temptations, and if by chance your programs wind up being very similar,
you will find it difficult to make a convincing argument that you limited
yourselves to allowable discussions of the project.
- Automatic tools may be used to compare your solution to that of every
other current or past student in this class, so it will be very difficult
to hide any collaboration. The risk of getting caught is too high, and the
standard penalty is way too high (grade of XF). In Fall 1997,
Bill Pugh caught 14 students who thought they could hide their
collaboration in CMSC 430.