UMBC CMSC 331 Spring 2011
Principles of Programming Languages
Home · About · Schedule · HW · Exams · Notes · Code · Examples · Resources ·

About CMSC 331

Overview

This course examines the 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 several online quizzes and surveys.

Homeworks and Projects

There will be roughly one homework assignment per 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 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.
  • Class and online participation 5%
  • Homework assignments 45%
  • Midterm exam 20%
  • Final exam 30%

Assignments

We will have approximately ten 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% 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

Syllabus

See the current syllabus. Check the syllabus often, as we will edit it as we go to reflect our actual progress.

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.