CMSC 433: Programming Language Technologies and Paradigms

Syllabus / Readings / Exams / Lectures / Projects


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 shortly):

  • Java (2 weeks)
    • Basics
    • Object oriented programming in Java
    • Libraries
    • Exceptions
    • Inner classes
  • Programming Techniques and Tools (1 week)
    • Debugging
    • Assertions/Invariants
    • Testing
  • Object-Oriented Design and Design Patterns (3 weeks)
    • Object invariants
    • Class design
    • UML
    • 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)
    • RPC
    • 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:



% each

% total

Programming projects












Academic Dishonesty

  • 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 usage.
  • 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:
    1. Material covered in class.
    2. The program statement (e.g., “What size inputs did Porter say we had to handle?'”).
    3. 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?”).
    4. 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, is cheating.
  • 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.