CMSC 433, Fall 2007
Programming Language Technologies and Paradigms
The topics for the class are taken from a variety of sources. There
will be readings from web
resources. Here is the tentative topic list (likely to be changed
as the semester progresses):
- Review of Java and OO design patterns (2 weeks)
- Regular expressions and patterns
- TCP Sockets
- Effective Java
- Decorator pattern
- Factory pattern
- Builder pattern
- Programming Techniques and Tools (2 weeks)
- Testing, Mock objects
- Source code version control systems
- Build systems, project automation, continuous integration
- Static/dynamic tools for code quality/testing
- Refactoring (1 week)
- Code smells
- Refactoring patterns
- Security (1 week)
- Concurrency (3 weeks)
- Intro to Concurrency
- Java threads
- Java memory model
- Synchronization: locking (synchronized) and signaling (wait/notify)
- Design forces (safety, liveness/deadlock, performance, reusability)
- Java 5 concurrency
- Threaded programming patterns
- Map reduce programming (2 week)
- Distributed Programming (2 week)
If you have an unexpected illness or other emergency on a project
due date or an exam date, you must provide documentation (e.g., from a
health care professional who treated you) that explicitly indicates
the dates and times you were incapacitated due to illness.
Self-documentation of illness is
not itself sufficient support to excuse the absence. (This is
a department policy, and it is a higher standard than in some other
departments.) The instructor is under no obligation to accomodate
Most of the topics in the class you will learn by doing, so there
will be a substantial emphasis on
programming projects. The expected breakdown is shown
below (we will inform you if it changes).
There will be a number of small homeworks or assignments.
These may be small programming assignments, writing assignments
code reviews, or something else. Not all homeworks will be worth
the same number of points.
- Projects are to be done individually, unless explicitly specified
otherwise in the project description.
- Projects are due at 6pm on the due date.
- Projects may be turned in late up until
sunrise the next morning (sunrise calculated for College Park MD).
Late submissions receive a 0.8 multiplier. If you submit both on time and
late, both are graded and you receive the higher score (with the late
submission getting the 0.8 multiplier).
- Submit early and often. The solution submitted last before the
deadline is the one that will be graded. Afterwards, if you determine
that a version you submitted before the last one is more correct, we
can accept that grade instead with a 0.8 multiplier (an additional multiplier if
it is already late).
- You must submit, by the late deadline, a good faith attempt to
complete each programming project. If you do not, the instructor may
fail you for the entire course.
- Developing key insights to the programming projects yourself will
be critical to success on the mid-term and final. Do not let anyone
spoon-feed you the way to solve the programming projects.
Any regrades for project or exams must be requested within one week
of the date your grade for the assignment or exam is given to you.
When regrading, we may re-evaluate the entire assignment or
exam, and as a result your grade may go up or down as
- The college policy on academic dishonesty is strictly
All graded materials (whether exams or programming assignments) must be
strictly individual efforts unless explicitly specified otherwise.
- The standard penalty for any academic dishonesty,
including facilitating academic dishonesty,
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.
- How to avoid getting an XF
- 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.
- Logging onto another student's account, for any reason, is
- Attempting to falsely represent the correctness of your program, or to
delay other members of the class from completing a programming assignment,
is academic dishonesty
- Discussions with other students about the project should
only be done in an environment with no program listings
- You are discouraged, in the strongest possible terms, from making a
habit of getting together with another student
at adjacent workstations
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.
- We expect you to follow all CSC guidelines for responsible machine
- The instructor
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.
- Automatic tools and manual inspection will 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,
14 students who thought they could hide their
collaboration in CMSC 430 received grades of XF. As recently as last
semester, a cheater in CMSC 433 received an XF, and cheaters in CMSC 412 were
caught that had cheated on students' work from prior semesters.