About CMSC 331
Overview
This course examines the structure 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:
CMSC 202 and CMSC 203.
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
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.
Exams and quizzes
We will have a mid-term examination in class and a comprehensive final
examination. There may be online quizzes and surveys.
Homeworks and Projects
There will be roughly one homework assignment every two weeks (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 midnight 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 assignment and projects.
- Homework and programing assignments 60%
- Midterm exam 15%
- Final exam 25%
Assignments
We will have several programming and homework assignments. Doing these is critical
to learning the material. Consequently, your performance on these
assignments will count towards about 60% 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% one day late
- -20% two days late
- -30% three days late
- -40% four days late
- 0 homeworks more than 4 days late will receive a 0
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 blabkBoard
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 wepost 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; it but 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 another’s 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.
|