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


Meeting 3:30PM-4:45PMSep 6-Dec 13 in Edgerly 102
Final 2:30 - 4:30 Tuesday Dec 13


Contact Information

Instructor:Stephen Taylor
Office: Edgerly 312A
Office hours: Wed and Thurs 11AM, ...
Web page: http://computersystemsartists.net
Email: staylor@fitchburgstate.edu
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

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
Bruce Tate, Seven Languages in Seven Weeks, 2010, Pragmatic Bookshelf, Raleigh, North Carolina ISBN: 978-1-93435-659-3
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 several languages, Ruby, Io, Prolog, Scala, Erlang, Clojure, and Haskell, which will be at the center of the course this term.

You should probably install each of these on your computer as we come to it. Otherwise you'll find it difficult to do the homework.

Since the book is an introduction, but not a reference, you'll want to search out websites to find documentation and sources for library functions. In fact, for each language, I'll assign you to find (and submit your URLs for) several such sites.

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 http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html
The GNU C pre-processor manual, https://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html
The C library reference guide https://www-s.acm.illinois.edu/webmonkeys/book/c_guide/

For Java:
The Java Syntax Specification https://docs.oracle.com/javase/specs/jls/se7/html/

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

Projects

I am going to assign homework almost every lecture. Unless you are a very unusual person, you will find it impossible to catch up if you fall behind.

Many of the homework assignments will be taken from the textbook. You'll find them easier if you can refer to the book as you work on them, although you'll probably need to supplement the book's terse language descriptions with reference material from the web.

Each of these interesting languages 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.

Final Exam

There is a final exam, and two 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.

Tentative lecture schedule
Fall 2016

Readings are from Bruce Tate's book.

Note that each day's reading in the text ends with a homework assignment. We'll begin each lecture with a short quiz on the reading.

We'll discuss the assignments in the lecture, and they will be due at the beginning of the following lecture.

So a reasonable study strategy is to go over the reading before the lecture, and do the homework afterward. You'll need access to an implementation of the particular language to do most of the homeworks. Some of them have on-line web pages, but all of them are available as free downloads for Windows or linux.
datetopicassigned reading before lecture
Tues Sep 6 Syllabus. Pep talk. Chapter 1, pp 1-8
Thur Sep 8 Ruby Day 1 Ch 2, pp 9-19
Tues Sep 13 Ruby Day 2 Ch 2, pp 19-32
Thur Sep 15 Ruby Day 3 Ch 2, pp 32-44
Tues Sep 20 Io Day 1 Ch 3, pp 45-59`
Thur Sep 22 Io Day 2 Ch 3, pp 59-68
Tues Sep 27 Io Day 3 Ch 3, pp 68-80
Thur Sep 29 Prolog Day 1 Ch 4, pp 82-95
Tues Oct 4 Prolog Day 2 Ch 4, pp 95-106
Thur Oct 6 Prolog Day 3 Ch 4, pp 106-120
Tues Oct 11 No class. [Friday schedule]
Thur Oct 13 No class. Presidential Inauguration at FSU.
Tues Oct 18 Hour Exam comparing Ruby, Io, Prolog
Thur Oct 20 Scala Day 1 Ch 5, pp 121-139
Tues Oct 25 Scala Day 2 Ch 5, pp 139-153
Thur Oct 27 Scala Day 3 Ch 5, pp 153-166
Tues Nov 1 Erlang Day 1 Ch 6, pp 167-181
Thur Nov 3 Erlang Day 2 Ch 6, pp 181-193
Tues Nov 8 Erlang Day 3 Ch 6, pp 193-208
Thur Nov 10 Clojure Day 1 Ch 7, pp 209-229
Tues Nov 15 Clojure Day 2 Ch 7, pp 229-242
Thur Nov 17 Clojure Day 3 Ch 7, pp 242-254
Tues Nov 22 Haskell Day 1 Ch 8, pp 255-272
Thur Nov 24 No class -- T-day
Tues Nov 29 Haskell Day 2 Ch 8, pp 272-281
Thur Dec 1 Haskell Day 3 Ch 8, pp 281-300
Tues Dec 6 Hour Exam comparing Scala, Erlang, Clojure, Haskell Ch 9, pp 301-310
Tues Dec 12 5PM Final Exam administered through Blackboard

Topics

The headings are from the ABET/CAC curriculum suggestions for programming languages. As we work our way through the basics of many different languages, you should be thinking about how each language fits into the headings below:

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 3:35 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.

Accomodation

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.