Overview
This course examines the syntax and semantics of programming languages. Topics include:
history and fundamentals of programing languages, formal specifications of
syntax and semantics; the implementation and execution of programs; and
object-oriented, functional, and logic programming. Programming assignments
and projects will provide experience in a number of languages. Prerequisites:
You must have completed CMSC 202 and CMSC 203 with a grade of C or better.
Objectives
The key learning objectives for this course are:
- To understand how programming languages have and continue to evolve
- To learn about formal definition and specification of programming
languages
- To learn about different programming paradigms, and gain some experience
in several
- To study how programming languages are implemented
- To experience new ideas that are appearing in programming languages
Required Textbook
Concepts of Programming Languages,
latest edition (11th ed.), Robert W. Sebesta.
Available new and used from the UMBC Bookstore and Amazon (can also be
rented at a reasonable price).
The tenth edition is still available, and is acceptable.

Class participation
Education works better when we're all actively engaged in it. It's more
effective and more interesting when there are questions, comments, challenges,
and occasional rants. These can take place in class but also on line via the
Piazza discussion forum for the class.
Exams and quizzes
We will have a mid-term examination in class and a comprehensive final
examination. There may be several online quizzes and surveys.
Homeworks and Projects
There will be roughly one homework assignment every other week (see the syllabus for
details). One or more of the homeworks may involve reading articles or papers
and writing short essays.
Expectations
Unless otherwise specified, all assignments are to be turned in by 11:59pm on
the day they are due (which is given in the schedule). It is your
responsibility to contact the instructor or TA in advance if this will not be
possible. There will be a penalty for every day an assignment is late.
Students are expected to adhere to all university policies regarding student
conduct, academic and otherwise, as posted on the University web site and in
the Student Handbook. Academic dishonesty of any kind will be handled in
accordance with University policy.
"By enrolling in this course, each student assumes the responsibilities of an active participant in UMBC's scholarly community, in which everyone's academic work and behavior are held to the highest standards of honesty. Cheating, fabrication, plagiarism, and helping others to commit these acts are all forms of academic dishonesty, and they are wrong. Academic misconduct could result in disciplinary action that may include, but is not limited to, suspension or dismissal. To read the full Student Academic Conduct Policy, consult the UMBC Student Handbook, the Faculty Handbook, or the UMBC Policies section of the UMBC Directory."
[Statement adopted by UMBC's Undergraduate Council and Provost's Office.]
Regular class attendance is expected.
Grading Policy
Semester grades will be based on the following components. The percentages are
initial estimates and subject to change to reflect the actual number and
complexity of the quizzes, homework assignments and projects.
- Class and online participation 5%
- Homework assignments 45%
- Midterm exam 20%
- Final exam 30%
Assignments
We will have approximately 6 to 10 homework assignments. Doing these is critical
to learning the material. Consequently, your performance on the homework
assignments will count towards about 45% of your grade. Homework assigments
will have a strict due date and penalties will be applied for late homeworks
according to the following scale:
- -10% up to one day late
- -20% up to two days late
- -30% up to three days late
- No credit will be given for homeworks over 3 days late
So, if an assignment is marked as being due by April 1, it must be
submitted by 4/1@11:59pm to get full credit. If you were to submit it
on 4/2@12:01am, it would incur a 10% penalty, and if on 4/3@12:01am (i.e,
1 day and 2 minutes late), a 20% penalty.
You will submit most of your assignments online.
Network and computer failures at UMBC are a fact of life. They are out of
your control and out of our control. However, they are not an excuse for a
homework or project to be submitted late, nor are they a reason for deadlines to
be extended, even if the outage occurs on the due date. Plan
accordingly. Waiting to submit your assignment until 5 minutes before it
is due is a recipe for disaster. In the event of network outages or
computer failures, you are still responsible for submitting your
assignments on time. There are labs on campus even if your home
internet or ResNet connection is
down. Also, it is your responsibility to take care of any problems with your
account, such as quota overages, which interfere with your ability to
complete and submit projects for the course. Project extensions will not be
given for such problems.
Lectures and Readings
You are expected to attend all lectures for this course. Although all
sections will cover the same general topics, you are responsible for the
specifics given during your section.
You are responsible for all material covered in class, even if not found in
the on-line class presentation materials. If you should happen to miss a
class, you are responsible for getting any missed notes or
announcements from a classmate.
You are required to prepare for each class by having read all of the
assigned materials beforehand. Even though it sounds childish, the
professor is not above giving a pop quiz if he has started to feel
depressed about the level of preparedness among the students.
Schedule
The online schedule includes lecture
topics/notes, reading assignments, midterm and final exam dates,
and homework and project due dates. Except for the final exam date,
the remainder of the timeline should be considered somewhat fluid
in order to allow us to adapt to any unanticipated events.
The specific dates will become much more firm as we get closer
to the relevant time period.
Course BlackBoard, and Piazza
In addition to the course web pages, which will be the primary channel
for disseminating information and course materials,
Blackboard is available for all CMSC 331 students in all
sections. Blackboard will be used to post student lab grades.
We will be using the Piazza system to support
course discussion forums. Discussion forums will be created for general
questions about course material, C++, and for general questions about
programming and tools. A discussion forum will also be created for each project in
this course.
N.B.: Postings on the Piazza discussion forums are to be limited to
specific technical and logistical discussions about the coursework;
you may use your own Facebook page or other personal resource,
to gripe about how unfair the workload is, discuss the personal
habits of fellow students or the instructors, etc.;
we will monitor the Piazza forums
to keep the signal-to-noise ratio at an acceptably high level.
If you have difficulty accessing the CMSC 331 Blackboard site or your
Piazza account, e-mail your instructor.
Academic integrity
Here is some guidance on what we expect from you. Some of this was adopted
from David Matuszek's policies at UPenn.
You may:
- Discuss the assignments with one another.
- If you don't understand something about the assignment, ask.
- The best people to ask are the instructor and TA, but there is no
harm in talking to other students about the assignments.
- You can and should use an appropriate discussion board on Piazza
to do this. We'll watch the lists and try to answer questions and
provide clarification.
- You should not post code, other than tiny snippetts, or partial
answers to problems on the discussion lists, of course.
- Help others debug their work.
- Sometimes other people will notice immediately something that you
have spent hours trying to find. Maybe they've had the same
problem. Being "stuck" for long periods is not a good way to learn.
- More often than not, your errors become obvious when you try to
explain your program to someone else. The other person doesn't even
have to be a programmer; in fact, it's probably better if they
aren't a programmer. It's often said that explaining your program
to your dog can be a big help.
- If you help someone else, don't overdo it--don't write their
program for them. Help them understand their errors and how to fix
them, but don't do it for them. Teach them how to catch a fish
rather than buying them a flounder and cooking it with a white wine
sauce.
- If someone is helping you, do not let them take a copy of your
program. Not everyone is honest.
- Use, without attribution, anything we post to the Web.
- If we post it, it's so that you can use it. We will know where it
came from.
- However, it's an important habit in general to give credit to any
source that you "borrow" code from -- it's the honest thing to do.
You may not:
Work together on the same program.
- We emphasize this one because this is where we always hear, "but I
didn't understand."
- Talking about the program is fine, but when it comes to writing the
program, do it by yourself.
- Writing programs jointly is unacceptable. You will very probably be
caught and that will be grounds for failing the course.
- If you write a program jointly and try to hide the fact by making
cosmetic changes, this will be regarded as further evidence that you
know the rules and are being deliberately dishonest.
- Working together may be acceptable in your home culture, and it is
usually encouraged in business; however, working together is not
acceptable in this educational system.
- If you discuss your assignment extensively with another student, and
make reasonably detailed plans about how you will do it, and then go
off and each write each program separately, you will be surprised at
how different they turn out. We have never had a problem with programs
that were "accidentally" the same.
Copy anothers code.
- If you copy someone else's program -- even just a part of it -- that
fact will be noticed.
Allow your code to be copied.
- Fair or not, this is the rule. If you and someone else turn in the
same program, both of you are guilty, regardless of who did the actual
work.
Lend your code to someone else.
- There is no good reason to do this, and if they copy your program,
you are at fault.
Leave your code lying around where someone else may copy it.
- Please be careful with your disks, flash drives and your program
listings. Please.
- If you lose a disk, just tell us. Tell us right away. So long as we
know about it before we discover that someone else has turned in the
same program, you won't be in any trouble.
Use any code from textbooks or the Web without our permission.
- Let's be clear. There is no problem with looking up how to do
something, and copying two or three lines to, say, open a file, or
create a Frame. Even an entire method of, say, ten lines, should be
OK -- particularly if it's a general-purpose thing that might be used
in a lot of different programs.
- Finding code that does a significant part of your assignment, and
using it, particularly if you use it without attribution, is a
violation.
- For the most part, it should be pretty obvious what is
assignment-specific and what is general-purpose. If in doubt, ask me.
Have someone else write your program for you.
- This one is pretty obvious.
If you think you may have accidentally broken a rule, come and talk to us
about it. You will be much better off than if we discover it ourselves.
Students who violate this academic integrity policy will at least
receive a grade of 0 for that assignment, but might face a harsher
penalty depending on how egregious the violation was.
A second violation will also result in
a reduction of one full letter grade in the student's final course grade.
In the case where one student copies the program of another student,
both students are considered to have violated this policy.
Here, copying includes not just programs that are verbatim copies,
but also programs that are substantially similar and could not
have been produced independently. Furthermore, all parties concerned
will have their prior homework and programs checked. Violations of this
policy may be reported to the University's Academic Conduct Committee
for further action. Egregious cases of cheating will be written up
as a "more serious" infraction. In this case, you will not be allowed
to drop the course. Also, a "more serious" infraction would appear as
a permanent part of your student record and would be seen by potential
employers when they ask for an official copy of your transcript.
The UMBC Undergraduate Student Academic Conduct Policy is available at:
http://www.umbc.edu/undergrad_ed/ai/documents/ACC2011.pdf