Syllabus
Note that a PDF copy of this Syllabus is available here
Prerequisites and Description
| Prerequisites | C- or better in CMSC 216 and CMSC 250 |
| Credits | 3 credits |
Course Description
A study of programming languages, including their syntax, semantics,
and implementation. Several different models of languages are
discussed, including dynamic, scripting (e.g., Ruby, Python)
functional (e.g., OCaml, Haskell, Scheme), logical (e.g., Prolog), and
concurrent/parallel (an aspect of many languages). Language features
such as formal syntax, scoping and binding of variables, higher-order
programming, typing and type polymorphism, and concurrent language
features will be explored.
Notes on summer classes
This is a summer course, meaning that the material will move at a much
faster pace than during the regular semester. The course will
otherwise cover the same content as CMSC 330 offered during the Fall
or Spring terms (although some material may be condensed to accomodate
as necessary for time constraints). The bulk of the work in the class
comes from programming projects. Because the course is on a condensed
schedule, allocate time accordingly. A good rule of thumb is that you
should expect to spend twice as much time (outside of lectures)
completing work for this class as during the Fall or Spring terms.
Because this is a summer session, expect that we will have lectures
Monday through Thursday, and recitation on Fridays. Recitations will
be used for reviewing material discussed during the week, returning
homework, quizzes, and exams.
List of Topics (Tentative)
The following topics will be covered. Because of time constraints,
certain topics may be condensed as needed.
- Scripting Languages (Ruby)
- Implicit vs. explicit declarations
- Dynamic vs. static typing
- Text processing and string manipulation
- Regular expressions and finite automata
- Functional programming (OCaml)
- Lists and recursion
- Type inference and polymorphism
- Higher-order functions and closures
- Static (lexical) vs. dynamic scoping
- Modularity and abstraction
- Context-free grammars and parsing
- Logic programming (Prolog)
- Rules and facts
- Unification and evaluation
- Cut and negation
- Foundations
- Lambda calculus
- Operational semantics
- Type systems
- Concurrency
- Shared memory concurrency
- Mutual exclusion and conditional variables (monitors)
- Design idioms and comparisons
- Implementations
- Garbage collection
- Memory management
Programming projects will be developed on the Grace Cluster
www.grace.umd.edu. Accounts are
distributed via the grades server,
grades.cs.umd.edu. Log in with your OIT
account; if you do not have a OIT account, request one immediately
online.
If you have access to another system you are welcome to do your
development there instead, but all project submissions must work
correctly on the Grace cluster, and your projects will be graded
solely based on their results on the cluster (by the submit
server). Because language and library versions may vary with the
installation, in unfortunate circumstances a program might work
perfectly on your system but not work at all on the cluster. Thus we
strongly recommend that if you develop any project on another system,
you should complete it several days early to have time to address any
compatibility problems.
Grading
Grades will be maintained on the CS Department grades server (
https://grades.cs.umd.edu/). You can always see your current grade
here.
You are responsible for all material discussed in lecture and
discussion section and posted on the class web page, including
announcements, deadlines, policies, etc. During the semester we may
provide ungraded practice homework exercises and solutions. While we
will not collect these exercises, completing them is essential
preparation for exams. You may work together on these ungraded
homeworks, and you may of course come to office hours for additional
help.
Your final course grade will be determined according to the following
percentages:
| 6 Programming Projects | 40% Total |
| 5 Quizzes, lowest grade dropped | 8% Total |
| Midterm, June 26 | 26% |
| Final, July 24 | 26% |
Any request for reconsideration of any grading on coursework must be
submitted within one week of when it is returned. Exam regrading
requests must be made in writing. Any coursework submitted for
reconsideration may be regraded in its entirety, which could result in
a lower score if warranted.
Final course grades will be curved as necessary, based on each
student’s total numeric score for all coursework at the end of the
semester. Important: Completing the programming assignments is an
essential part of the course. Therefore, we may fail any student who
does not make a good-faith attempt on all course projects, regardless
of the student’s performance or scores on the other coursework. We
will define good-faith attempt as achieving at least 20 points on the
submit server for each project. To obtain these points you may submit
solutions past the late deadline.
Programming Projects
Projects must be submitted electronically following the instructions
given in class. Projects may not be submitted by any other means
(e.g., please do not email your projects to us). It is your
responsibility to test your program and verify that it works properly
before submitting. All projects are due at 11:59pm on the day
indicated on the project assignment, according to the submission
server’s internal clock.
Projects may be submitted up to 5 days late, with a 10% penalty
(linear, on max score) for each day submitted. Projects submitted
more than 5 days late will not be accepted. For
example, a project that would earn 90 points for an on-time submission
will earn 70 points when turned in two days late (which is 90 minus 10*2). Note that
your project score as it appears on the project submission server will
not include any late penalties. Any penalties will be incorporated
into the final project grade on the grade server. If you submit both
on-time & late, your project will received the maximum of the
penalty-adjusted scores.
Project extensions will not be granted due to system problems, network
problems, power outages, etc., so do not wait to submit a project
until the night it is due. You may submit multiple times up to the
deadline, and only your last on-time submission is graded. Similarly,
if you submit late, only your last submission before the deadline will
be graded. No consideration in grading will be made for errors made in
transferring files or submitting the wrong version of your
project. Having a working, unsubmitted version will not count; only
submitted code will be be counted.
Unlike lower-level programming classes, we will not provide you with
test cases before projects are due. Instead, you will be responsible
for developing your own techniques for testing your projects. To
reiterate: your projects will be graded based on test cases not
provided in advance. Because grading is done automatically, you must
follow the project specification exactly. Also, while projects will
generally not be graded on style or documentation, we reserve the
right to manually grade program source code for some projects.
Finally, any “hard coding” in a project assignment may result in a
score of zero for that project, and is considered a bad-faith
effort. Hard coding refers to attempting to make a program appear as
if it works correctly, when in fact it does not. One example of hard
coding would be printing the desired output instead of computing
it. This is only one example, and if you have any questions as to what
constitutes hard coding, be sure to ask ahead of time.
Quizzes
Quizzes will be given at various times during the semester in
discussion section. Quiz dates will be announced in lecture shortly in
advance. Note that your lowest quiz grade will be dropped.
Outside-of-class communication with course staff
We will interact with students outside of class in primarily three
ways: in-person during office hours, electronically via the web forum
and course web page, and electronically via e-mail. The large majority
of communication should employ the first two methods, reserving e-mail
for personal (presumably rare) circumstances.
Personalized assistance, e.g., with programming assignments or exam
preparation, will be provided during office hours. You are responsible
for developing and debugging your own programs. Do not rely on the
instructional staff to make your project work. Lower-level CMSC
courses provide extensive debugging and development help in office
hours, but upper-level CMSC courses expect students to complete
projects with minimal extra help. Therefore in CMSC 330, we will
provide less debugging help than some students may be used to. If you
come in with a question, expect to be pointed in the right direction,
but it will be up to you to finish solving the problem on your
own. Office hours for the instructional staff will be posted on the
course web page a few days into the semester.
Additional assistance will provided via the Piazza web forum. You may
use this forum to ask general questions of interest to the class as a
whole, e.g., administrative issues or project clarification
questions. The course staff will monitor piazza on a daily basis, but
do not expect immediate answers to questions. Please do not post
publicly any information that would violate the university academic
integrity policy (e.g., project code or test cases).
Piazza allows students to post private questions that are only visible
to instructors. Please use this feature if you wish to ask specific
questions concerning your project solutions. Generally it will also be
helpful to submit your current project code to the submit server, so
instructors & TAs can try running your code on their machines before
answering your questions.
Personal e-mail to instructors or TAs should be reserved for issues
that cannot be handled by the above methods. Before sending a
personal email to the instructors or TAs, please consider whether the
question is of general interest. If so, please post it to Piazza, it
is very likely another student in the class has experienced a similar
issue.
Important announcements will be made in class or on the class web
page, and via piazza.
Last, please be mindful of instructors’ ability to respond to your
email in a timely fashion. When we receive email, we will make every
attempt to respond within 24 hours of its receipt. However, we
suggest that you anticipate potential questions for projects and exams
well in advance: instructors are very unlikely to be able to help at
the last minute.
Excused Absences
Any student who needs to be excused for an absence from a single
lecture, recitation, or lab due to illness shall:
Make a reasonable attempt to inform the instructor of his/her illness
prior to the class.
Upon returning to the class, present their instructor with a
self-signed note attesting to the date of their illness. Each note
must contain an acknowledgment by the student that the information
provided is true and correct. Providing false information to
University officials is prohibited under Part 9(h) of the Code of
Student Conduct (V-1.00(B) University of Maryland Code of Student
Conduct) and may result in disciplinary action.
Missing an exam for reasons such as illness, religious observance,
participation in required university activities, or family or personal
emergency (such as a serious automobile accident or close relative’s
funeral) will be excused so long as the absence is requested in
writing at least 2 days in advance and the student includes
documentation that shows the absence qualifies as excused; a
self-signed note is not sufficient as exams are Major Scheduled
Grading Events.
For medical absences, you must furnish documentation from the health
care professional who treated you. This documentation must verify
dates of treatment and indicate the timeframe that the student was
unable to meet academic responsibilities. In addition, it must contain
the name and phone number of the medical service provider to be used
if verification is needed. No diagnostic information will ever be
requested. Note that simply being seen by a health care professional
does not constitute an excused absence; it must be clear that you were
unable to perform your academic duties.
It is the University’s policy to provide accommodations for students
with religious observances conflicting with exams, but it is the your
responsibility to inform the instructor in advance of intended
religious observances. If you have a conflict with one of the planned
exams, you must inform us prior to the end of the first two weeks of
the class.
For missed exams due to excused absences, the instructor will arrange
a makeup exam. If you might miss an exam for any other reason other
than those above, you must contact the instructor in advance to
discuss the circumstances. We are not obligated to offer a substitute
assignment or to provide a makeup exam unless the failure to perform
was due to an excused absence.
The policies for excused absences do not apply to project
assignments. Projects will be assigned with sufficient time to be
completed by students who have a reasonable understanding of the
necessary material and begin promptly. In cases of extremely serious
documented illness of lengthy duration or other protracted, severe
emergency situations, the instructor may consider extensions on
project assignments, depending upon the specific circumstances.
Besides the policies in this syllabus, the University’s policies apply
during the semester. Various policies that may be relevant appear in
the Undergraduate Catalog.
If you experience difficulty during the semester keeping up with the
academic demands of your courses, you may consider contacting the
Learning Assistance Service in 2201 Shoemaker Building at (301)
314-7693. Their educational counselors can help with time management
issues, reading, note-taking, and exam preparation skills.
Students with Disabilities
Students with disabilities who have been certified by Disability
Support Services as needing any type of special accommodations should
see the instructor as soon as possible during the schedule adjustment
period (the first two weeks of class). Please provide DSS’s letter of
accommodation to the instructor at that time. All arrangements for
exam accommodations as a result of disability must be made and
arranged with the instructor at least three business days prior to
the exam date; later requests (including retroactive ones) will be
refused.
Academic Integrity
The Campus Senate has adopted a policy asking students to include the
following statement on each examination or assignment in every course:
“I pledge on my honor that I have not given or received any
unauthorized assistance on this examination (or assignment).”
Consequently, you will be requested to include this pledge on each
exam and project. Please also carefully read the Office of Information
Technology’s policy regarding acceptable use of computer accounts.
Programming projects are to be written individually, therefore
cooperation or use of unauthorized materials on projects is a
violation of the University’s Code of Academic Integrity. Any evidence
of this, or of unacceptable use of computer accounts, use of
unauthorized materials or cooperation on exams or quizzes, or other
possible violations of the Honor Code, will be submitted to the
Student Honor Council, which could result in an XF for the course,
suspension, or expulsion.
For learning the course concepts (including the programming
languages), students are welcome to study together or to receive help
from anyone else. You may discuss with others the project
requirements, the features of the programming languages used, what was
discussed in class and in the class web forum, and general syntax
errors. Examples of questions that would be allowed are “Does a Java
class definition end in a semicolon?” or “What does a ‘class not
found’ error indicate?”, because they convey no information about the
contents of a project.
When it comes to actually writing a project assignment, other than
help from the instructional staff a project must solely and entirely
be your own work. Working with another student or individual, or using
anyone else’s work in any way except as noted in this paragraph, is a
violation of the code of academic integrity and will be reported to
the Honor Council. You may not discuss design of any part of a project
with anyone except the instructor or teaching assistants. Examples of
questions you may not ask others might be “How did you implement this
part of the project?” or “Please look at my code and help me find my
stupid syntax error!”. You may not use any disallowed source of
information in creating either their project design or code. When
writing projects you are free to use ideas or short fragments of code
from published textbooks or publicly available information, but the
specific source must be cited in a comment in the relevant section of
the program.
Violations of the Code of Academic Integrity may include, but are not
limited to:
Failing to do all or any of the work on a project by yourself, other
than assistance from the instructional staff.
Using any ideas or any part of another person’s project, or copying
any other individual’s work in any way.
Giving any parts or ideas from your project, including test data, to
another student.
Allowing any other students access to your program on any computer
system.
Transferring any part of a project to or from another student or
individual by any means, electronic or otherwise.
If you have any question about a particular situation or source then
consult with the instructors in advance. Should you have difficulty
with a programming assignment you should see the instructional staff
in office hours, and not solicit help from anyone else in violation of
these rules.
It is the responsibility, under the honor policy, of anyone who
suspects an incident of academic dishonesty has occurred to report it
to their instructor, or directly to the Honor Council.
Every semester the department has discovered a number of students
attempting to cheat on project assignments, in violation of academic
integrity requirements. Students’ academic careers have been
significantly affected by a decision to cheat. Think about whether you
want to join them before contemplating cheating, or before helping a
friend to cheat.
You are welcome and encouraged to study and compare or discuss their
implementations of the programming projects with any others after they
are graded, provided that all of the students in question have
received nonzero scores for that project assignment, and if that
project will not be extended upon in a later project assignment.
Course Evaluations
If you have a suggestion for improving this class, don’t hesitate to
tell the instructor or TAs during the semester. At the end of the
semester, please don’t forget to provide your feedback using the
campus-wide CourseEvalUM
system. Your comments will help make this class better.
Right to Change Information
Although every effort has been made to be complete and accurate,
unforeseen circumstances arising during the semester could require the
adjustment of any material given here. Consequently, given due notice
to students, the instructors reserve the right to change any
information on this syllabus or in other course materials.
Copyright
All course materials are copyright Dept. of Computer Science,
University of Maryland (Marvin Zelkowitz, Jeff Foster, Larry Herman,
Atif Memon, Chau-Wen Tseng, Michael Hicks, David Levin, Nelson
Padua-Perez, and Kristopher Micinski). All rights reserved. Students
are permitted to use course materials for their own personal use
only. Course materials may not be distributed publicly or provided to
others (excepting other students in the course), in any way or format.