CSC 3200
Programming Languages
A required course in the FSC CS BS program
Fall 2013 -- 3 credit hours

Meeting 2:00AM-3:15PMSep 5-Dec 10 in Edgerly 102

Contact Information

Instructor:Stephen Taylor
Office: Edgerly 312A
Office hours: W 2PM ...
Web page:
Office phone: 978-665-3704
Home phone: 508-867-9288

Catalog description

This course studies the hierarchy of programming languages starting with Assembly Language. It covers general principles of languages within imperative, object oriented and functional paradigms, as well as logic programming. Students have an opportunity to learn the basic concepts and constructs of various programming frameworks and practice software design skills in languages like Ada, Lisp and/or Prolog.

Course goals

Provide a foundation for students to move beyond the procedural programming languages they have seen in earlier courses. Java, C, and C++ are so similar in syntax that students may have failed to notice the deeper differences between them. Describe the architectures which support these languages. Introduce features like dynamic scope and procedural arguments which appear in closely related languages. Acquaint students with functional and logic programming paradigms.

Course Objectives

After finishing this course, students will be able to:

Attendance policy

Ten percent of the grade is based on class-room participation. During the first several meetings of the course, I call the roll. Once I learn names and faces I stop calling the roll, but I continue to be interested in your presence.

So do other students. Don't deprive them of your insights!

Course resources

There is no required textbook.

The following books are recommended:

Daniel Friedman and Matthias Felleisen, The Little Schemer, MIT Press 1996
The FSC library has the book "The Little Lisper", which is very similar. This book cannot be skimmed, but it is fairly easy to read and rewards the effort expended.
W. F. Clocksin and C. S. Mellish, Programming in Prolog, Springer-Verlag 1981
There are lots of later prolog books, but this classic is available cheaply used.
Larry Wall and Tom Christiansen and Jon Orwant, Programming Perl, O'Reilly 2000
This is called "The camel book" because it has a picture of a camel on the cover. It is the classic reference on Perl, although there are many other fine books out there. The third edition was published in 2000, but earlier editions are available. We won't cover Perl in enough depth to need the latest edition, but because the language is constantly getting new features, it makes sense to skim the latest version.

I believe that the FSU library has access to the text of this book through the Safari electronic database.

Compilers for scheme, prolog, and perl are available in the lab, but on your own computer you'll probably want to download and install the following software:

From time to time I will put programs from lectures on the web.


I like to assign programming projects, and this is a project-oriented course.

One of the reasons this course exists is that some ideas are more easily expressed in one computer language than another. We're going to write code using four different languages in this course, none of which I expect you to know before we start. Fortunately or unfortunately, we have only a few weeks to learn each language, so we won't be able to develop easy facility with any of them. That means that you're going to spend a big chunk of your programming time trying to express ideas in the new language that you think you could easily write down in C. Go ahead and write them down in C; that can form part of the documentation of the project. But usually there will be a completely different way to do something, which is closer to the spirit of the new language, shorter, and sometimes more efficient. Often, but not always, the different way will appear in the language documentation. Sometimes you'll discover it yourself, other times you'll find programming tricks on the web.
Project TopicProject due date
Ants: the search for foodTue Sep 10
Ants: ArithmeticTue Sep 17
Ants: Marking the trail to the nestTue Sep 24
Ants: Red versus BlackThur Oct 8 A short PERL sidetrackThu Oct 17 Another PERL sidetrackTue Oct 22
Scheme: Some simple scheme programsTue Oct 29
Scheme: Some more scheme programsTue Nov 12
Prolog: Some prolog database programsTue Nov 19
Prolog: Some prolog sort programsTue Dec 3
Prolog: A puzzleTues Dec 10

Final Exam

There is a final exam, and two or three mid-term exams, all of which are in very similar formats. Because the time available for an exam is short, I usually test code reading skills, rather than writing skills, on exams.


  1. Low-level programming languages: the ant-world assembler
  2. The functional programming paradigm: Programming in scheme
  3. The logic programming paradigm: Programming in prolog
  4. A different take on the procedural paradigm: Perl

Grading policy

Class Participation: 10%
In-class labs and quizzes: 20%
All exams: 30%
Programming Projects: 40%

Late work

Deadlines are made to be bent, but exceptions create extra work for me. Assignments are due at the beginning of class. Work received after 2:05 AM is late, unless Blackboard is down. I may give credit or partial credit for late work, but you should talk to me as soon as you know it will be late. I will always give at least partial credit for partial work, so turning in something incomplete but on time is a sensible strategy.

I do not consider homework which is emailed to me to be turned in on time, no matter when you sent it. Unless the stupid thing is down, use the Blackboard dropbox.

There are no makeup or early exams, but I may excuse an exam for a good story, presented in advance, like your grandmother getting married that day in Provincetown.

Peculiar procedures

There are non-programming activities which are included in each project. Sometimes I will ask you to interpret your results, or provide charts or graphs.

For every assignment, I expect you to turn in a Development diary. The development diary will be at least half a page long, and I actually like longer ones better. It will be neatly word-processed and beautifully formated. It will tell me about your successes and frustrations in coding up the program, which blind allies you went up, how you figured out where you went wrong, etc. If you never make any mistakes at all, you can tell me how how avoid them, because I'd sure like to know! Part of your grade for the project will be based on this development diary.

Each student is responsible for completing all course requirements and for keeping up with all activities of the course (whether a student is present or not).

Academic Honesty

I expect you to be so interested in your projects and homeworks that you discuss them with everyone, including your mom, your little brother, and other members of the class (who will at least know what they're being sympathetic about.) So I won't be too surprised if several people come up with the same idea, or even the same programming trick. But I want you to do each homework yourself, and I don't want you to share typing, even if you both worked on the problem together, and you can't really tell anymore who came up with what. (Except of course for group projects, for which the group will be designated in advance.) To keep from confusing me, you should mention everyone you talked to and every web site you looked at in your development diary. You can skip mentioning your little brother, if you think he wasn't any help at all...

I consider it plagiarism to share typing or fail to give credit to other peoples' ideas.

Fitchburg State University has an Academic Dishonesty policy, which can be found in the college catalog. Penalties for academic dishonesty, including submitting work which is not your own, and assisting other students on examinations, can be severe.


If you require course adaptations or accommodation because of a disability or acute medical condition or if you require assistance in the event of an emergency evacuation of the classroom, please see the instructor as soon as possible. Students with disabilities are encouraged to register with the Office of Disability Services on the 3rd floor of the Hammond Building.