CSC 3200
Programming Languages
A required course in the FSC CS BS program
Fall 2015 -- 3 credit hours
Meeting 2:00PM-3:15PM | Sep 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: |
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
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:
- Recognize different styles and programming techniques
promoted by different programming languages and programming paradigms
- Identify the strengths and weaknesses of each programming paradigm.
- Describe the implementation structures
supporting the various paradigms.
- Design and code programs in Scheme using the functional programming paradigm.
- Design and code programs in Prolog using the logic programming paradigm.
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, www.nostarch.com
ISBN: 978-1-59327-283-8
This book is available on the web as HTML at
http://learnyouahaskell.com
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 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/
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.
Projects
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.
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.
Topics
The headings are from the ABET/CAC curriculum suggestions for programming languages.
-
PL/Object-Oriented programming:
Object-orientation will come up in discussing lambdas in Java 8.
implementation
of objects,
-
PL/Functional Programming:
Haskell,
contrast with Java and C programming models and type systems.
Side=effect free functions.
recursion on numbers, trees and lists
first-class functions. Currying. Partial evaluation.
function closures.
Map, reduce/fold, filter.
-
PL/Event-Driven and Reactive Programming:
event-loops and/vs callbacks.
-
PL/Type Systems:
How do Haskell types and classes differ from Java and C?
-
PL/Program Representation:
syntax trees,
-
PL/Program Translation and Execution.
C: machine language; Java: JVM; Haskell: ?
Runtime representation of Objects, Closures,
Implementation of recursion,
Memory management; garbage collection.
-
PL/Scope and Binding
-
PL/Runtime Systems:
GC algorithms,
data layout for objects and activation records,
just-in-time and dynamic compilation
class loading; threads
-
PL/Advance Topics:
Lazy evaluation,
monads,
regular expressions,
assertions,
-
PL/Concurrency and Parallelism:
threads; Software Transactional Memory
-
PL/Language Pragmatics: delayed evaluation, external libraries
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.
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.