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

Meeting 2:00PM-3:15PMSep 3-Dec 8 in Edgerly 102
Final 12:20 - 2:20 Tuesday Dec 15

Contact Information

Instructor:Stephen Taylor
Office: Edgerly 312A
Office hours: W 2PM, R 12:30PM ...
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

The required textbook for this course is
Miran Lipovaca, Learn You a Haskell for Great Good, No Starch Press, 245 8th Street, San Francisco, CA 94103, ISBN: 978-1-59327-283-8

This book is available on the web as HTML at However, it is relatively cheap for a CS textbook, and is also available used, both in the bookstore and online.

I think it is worth having a paper book just to make marks in the margins.

As the title attempts to convey, this is an introduction to the Haskell language, which will be at the center of the course this term. Since the book is an introduction, but not a reference, you'll want to use some or all of the following websites to find documentation and sources for library functions.

We will also talk about other languages, in particular Java and C, both of which we teach at FSU in courses which are prerequisites to this one. You may find it necessary to review these languages during the course. Online resources may be helpful.

For C:
The GNU C manual
The GNU C pre-processor manual,
The C library reference guide

For Java:
The Java Syntax Specification

We will also touch briefly on the logic programming language prolog and the database query language SQL, since both of them have interesting features not found in Haskell, C, or Java.

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


I am going to assign weekly programming assignments. Unless you are a very unusual person, you will find it impossible to catch up if you fall behind. Haskell is an interesting language, which strongly stresses some ideas which are not as central in many other languages, and you'll need to absorb a lot of new concepts. The best way to do so is to write programs.

One of the reasons this course exists is that some ideas are more easily expressed in one computer language than another. 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
Chapter 1 exercises Thursday, Sep 10
Chapter 2 exercises
Chapter 3 exercises
Chapter 4 exercises
Chapter 5 exercises
more Chapter 5 exercises
Chapter 6 exercises
Chapter 7 exercises

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.


The headings are from the ABET/CAC curriculum suggestions for programming languages.

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.