CSCI 360 - Survey of Programming Languages
Fall 2014
Course Overview:
In this course, we will examine the variety of different abstractions
that programming languages make available to the programmer. As every
high-level language construct is meaningful only to the degree that it is
properly translated into machine language, we will examine language
implementation techniques as well.
Our study will proceed in two major phases. The first phase is an in-depth
study of three important languages:
Smalltalk,
Racket, and
Haskell.
Most mainstream programming languages feature a syntactical and semantic
structure derived from the important language Algol-60, the prototypical
procedural language. But from the earliest
years of high-level languages, the Lisp family has represented a distinctive
approach that is largely independent of the Algol-60 tradition. These three
languages represent very diverse developments of this alternative tradition
that continue to have great influence on mainstream programming languages.
In the second phase of our study, we will explore some additional programming
languages in two ways. First, every student will be responsible for preparing
a lesson for the class on an assigned language. Second, everyone in the class
will complete a large project in a language not experienced prior to this
course.
At the end of this course, you will be expected to be able to:
- Identify the distinctive characteristics of each of these three major language paradigms:
- Procedural
- Object-oriented
- Functional
- Write medium-sized programs in Smalltalk, Racket, and Haskell
- Articulate the rationales for and differences between static and dynamic
type systems
- Compare and contrast strict and lazy evaluation
- Understand, apply, and distinguish parametric polymorphism and ad-hoc polymorphism; techniques will include:
- Inheritance
- Parametric data types and type inference
- Dynamic types
- Algebraic data types
- Type classes
- Discuss the relative advantages and disadvantages of interpreters and compilers
- Understand and apply the following iteration techniques:
- Recursion, including tail recursion
- Maps
- Filters
- Reductions and folds
- Comprehensions
- Employ higher-order functions and currying
- Employ the Racket macro system to extend the language's syntax
- Discuss the trade-offs involved in programming with and without
referential transparency.
- Apply and understand monads for referentially transparent I/O.
- Learn and explain a previously unknown programming language.
- Contribute to a large project in a previously unknown programming language.
- Understand and apply unit testing as practiced in Smalltalk and property-based testing as practiced in Haskell.
Instructor:
Dr. Gabriel Ferrer
M.C. Reynolds 312
Office Hours:
MTWRF: 1:30-2:30 pm
Feel free to make an appointment (http://drferrer.youcanbook.me), or to stop by whenever my door is open.
Class Web Page:
http://ozark.hendrix.edu/~ferrer/courses/360/
Lecture Time:
A4 (11:10 - 12:00, MWF)
Final Exam Period:
Monday, December 15, 8:30-11:30 am
Grading Criteria:
Programming Assignments: 20%
Short papers: 15%
Language Lesson: 15%
Final Project: 20%
Term Paper and Presentation: 25%
Class Participation: 5%
Grading Scale:
Each assignment receives a letter grade. The grading criteria for each
assignment will be described when it is assigned. Each
letter grade has associated with it a percentage grade as follows:
Letter grade | Percentage |
A | 95 |
B | 85 |
C | 75 |
D | 65 |
F | 50 |
Missing grades will be scored zero. Any grade can have a "+" or "-" attached
to it. A "+" is worth +5, and a "-" is worth -4. A grade of "A+" will only
be assigned to work that in some way goes above and beyond the requirements
for the assignment. For each category above, the total points earned will be divided
by the total points possible to yield a percentage. These percentages will
be weighted as given above. A final average of at least 90 earns an A;
80 earns a B; 70 earns a C; 60 earns a D; below 60 is failing.
Programming Assignments: Short programming assignments will
be assigned throughout the semester. Some assignments may be team assignments
at the instructor's discretion. Some assignments may include accompanying
written assignments as well.
Short Papers: Upon completing each language study, a short
paper (2-3 pages) will be assigned in which the student is to compare and contrast the
studied language with any other language of the student's choice, with which
the student is already familiar.
Language Lesson:
Language lessons will be given by students for each of the following programming languages:
The instructor reserves the right to modify this list as he sees fit.
Each student will give one language lesson. The combination of lecture
and exercises will fill a 50-minute class period. Lessons will begin on
November 3, and continue until the end of the semester.
For each lesson, the students will:
- Give a 25-35 minute presentation on the language.
- Prepare a set of small exercises for illustrating the language.
- Write a tutorial incorporating their lecture notes and exercises.
- The other students in the class will complete the exercises. This
will begin during classtime, but may extend beyond it until the start of the
next class period. The instructing students will be responsible for assisting their fellow students as needed in completing the exercises.
Final Project:
The final project may be implemented in any language and with any topic upon
which the student and I agree. I will mention in advance that I will not
approve Java, Python, C, or JavaScript. Working in teams will be fine,
with the understanding that the functionality of the final result should be
proportional to the team size.
The final project will officially begin on Monday, October 27. Project topics
will be determined by Wednesday, October 29. The project will be due on the
last day of classes, Monday, December 8.
Term Paper: Each student will write a term paper. The paper
will be due at the start of the final exam period. The paper topic is as
follows:
- Select five languages studied this semester. One of the five languages
should be the language used in the final project.
- For each language:
- Discuss the benefits and drawbacks of each major abstraction the
language presents. Support your argument with code examples.
- Give at least one example of an idea from the language that
could be applied when programming in Java, Python, or C.
This could include design ideas or descriptions as to how certain
features could be imitated.
- For the final project language:
- Discuss how the abstractions
presented by the language impede and/or enable satisfactory
performance. Be sure to discuss whether any performance
penalties for language abstractions represent worthwhile trade-offs.
- Discuss how well the language supports large programming projects
involving multiple developers.
- Rank the languages in order from "most interested in using again" to
"least interested in using again". Provide a rationale for the position of
each language in this list.
During the final exam period, each student will give a 10-15 minute
presentation.
In this presentation, the student should present an argument as to why
other programmers ought to adopt the highest-ranked language from the term
paper.
Revisions: After assignments are graded, you are welcome to
revise and resubmit your work. I will grade anew each submitted revision,
and average the original and revised grades together to produce a new grade
for that assignment. Revisions may be submitted anytime until the start
of the final exam.
No late work will be accepted.
Any work not submitted on time is a zero. However, you may submit a solution
after the deadline to qualify under the revision policy above. In effect,
this means that late work can earn up to half credit.
Accommodations: It is the policy of Hendrix College to accommodate students with disabilities, pursuant to federal and state law. Students should contact Julie Brown in the Office of Academic Success (505.2954; brownj@hendrix.edu) to begin the accommodation process. Any student seeking accommodation in relation to a recognized disability should inform the instructor at the beginning of the course.