CSSE 403 – Programming Language Paradigms

General course information

Prerequisite:

CSSE 304 – Programming Language Concepts

Meeting times and places:

Course Description:

A survey of some current and emerging programming languages, focusing on unique language paradigms—ways of structuring solutions or manipulating data. Examples of paradigms include dynamic programming languages, object-oriented programming, highly parallelizable code, and functional programming. Emphasizes developing independent learning techniques that will allow students to acquire skills in new languages quickly. Students will develop basic skills in at least three different languages representing distinct paradigms. They will also be exposed to a selection of other languages. Includes a substantial team project.

Instructor

Curt Clifton

Assistant Professor of Computer Science and Software Engineering

Email: clifton@rose-hulman.edu
Office phone: (812) 877-8593
Office address: Moench F-222
Home page: http://www.rose-hulman.edu/~clifton
Office hours: I strive to be in every day from 7:30 a.m. until 4:30 p.m. Please stop by whenever. If my door is shut, just knock. I am also frequently available by email in the evenings. My schedule is available from my home page.

Text

Required Text

Programming Erlang Cover Image

Programming Erlang: Software for a Concurrent World
Joe Armstrong

ISBN 13: 978-1934356005
Publisher: Pragmatic Bookshelf
Copyright: 2007

Available as dead trees, electronically without DRM (in a variety of formats), or in combination.

Required, Free, On-line Texts

Python Logo

The Python Tutorial
Python Software Foundation Bryan O’Sullivan, John Goerzen, Don Stewart

Publisher: Python Software Foundation
Copyright: 1990–2009

Real World Haskell Cover Image

Real World Haskell
Bryan O’Sullivan, John Goerzen, Don Stewart

ISBN 13: 978-1934356005
Publisher: O'Reilly Media, Inc.
Copyright: 2009

In addition to the free, on-line version, RWH is also available as dead trees and electronically without DRM (in a variety of formats).

Real World Haskell, http://book.realworldhaskell.org/

Optional Text

If you prefer dead trees for reference, the optional book below may be helpful.

Python in a Nutshell Cover Image

Python in a Nutshell, Second Edition
Alex Martelli

ISBN 13: 978-0596100469
Publisher: O'Reilly
Copyright: 2006

Learning Outcomes

Students who successfully complete this course should be able to:

  1. Write programs in a variety of programming language paradigms using the features unique to those paradigms.
  2. Identify the semantic similarities and differences between a new programming language and previously known languages.
  3. Clearly explain the key semantic features of a new programming language, including how to begin using it and its strengths and weakness.
  4. Develop medium-sized applications in a new programming language through independent study. (Here "medium-sized" implies a project that a team of three might develop over a period of seven weeks in parallel with other course work.)

Electronic Distraction Policy

I do my best to keep class interactive. But I recongize that sometimes it is hard as a student to stay focused on the class. When I was a student I tended to doodle in the margins of my notebook. With laptops in class, there are many more ways to become distracted. Unfortunately these distractions are much more pernicious, since it is very easy to get drawn into things like IM conversations or RSS feeds.

I strongly encourage you to turn off IM and email software and only use other software for things directly related to class. If you choose to use non-class-related software during class, then please sit in the back row. Doing so will prevent your classmates from being distracted by what is on your screen.

Grading

Grading Mechanisms

The learning outcomes for this course are listed above. I’ll be using various mechanisms to measure your progress against these learning outcomes. Among these are:

Grading Weights

The relative weights for each of these mechanisms are listed below.

Mechanism Weight
In-class quizzes and exercises 15%
Homework assignments 35%
Team project 35%
Teaching experience 10%
Citizenship 5%

I reserve the right to make small adjustments to this plan, with appropriate notice. All work will be graded both on correctness and on style; after all, your eventual customers will do the same.

Late Work

Late work will not be accepted, with the following exception:

You begin the term with two “late day” credits. You may use one of them on any non-project assignment, which will allow you to submit that assignment up to 24 hours after the due time. You may earn one additional “late day” per assignment by submitting it at least 24 hours before the due date. Occasionally, some particular assignment may be designated as a “no late day” assignment.

If you wish to use a late day for submitting late, or earn a day by submitting early, you must complete the Late Day Form on ANGEL before the assignment deadline.

Lost or Corrupted Files

You are expected to backup your computer files regularly. If you are unable to turn in an assignment on time because of a lost or corrupted file, then you must either complete it and turn it in late, subject to the Late Work policy above, or else turn in the most recent (uncorrupted) version that you have, subject to points off for any errors or incompleteness.

Integrity

Recall the Institute policy on academic misconduct:

"Rose-Hulman expects its students to be responsible adults and to behave at all times with honor and integrity."

Exams and homework will be done on an individual basis. The simple rule of thumb for individual work is:

Never give or use someone else's code or written answers.

Such exchanges are definitely cheating and not cooperation. The departmental statement on academic honesty has more detailed advice.

Plagiarism or cheating will result in a negative grade of the same magnitude as the points possible for the assignment or exam. For example, cheating on an exam worth 100 points would result in a score of -100, roughly equivalent to getting a zero on two exams. Egregious cases of cheating will result in a grade of “F” for the course. More importantly, such dishonesty steals your own self-esteem. So don't cheat.

If you sincerely believe that certain problems are too much busy work, then please bring it to my attention.

Collaboration

You are encouraged to discuss homework, and other parts of the class with other students. Such discussions about ideas are not cheating, whereas the exchange of code or written answers is cheating. However, in such discussions of ideas, you should distinguish between helping and hurting yourself and the other student. In brief, you can help the other student by teaching them, and you can hurt them by giving them answers that they should have worked out for themselves. The same applies to tutoring and getting help from the instructor.

"Hurtful help" most commonly occurs in giving away a key idea needed to solve a problem. For example, suppose you have studied a programming problem for an hour or so, and finally found that the key to the solution is to use a helping procedure you call "critical". Your friend, after working on the problem for 15 minutes, says "I just can't see how to do this" and you say "try using a helping procedure called 'critical'. "

Although it takes more time, your friend will learn more if you say something like: "How are you approaching the problem, what's your plan?" (knowing that if your friend is not planning, no helping procedure will be found). If your friend hasn't planned, you should let them do it; if they have trouble planning, tell them to think about problems discussed in class that were similar, etc. If, after planning, your friend still hasn't found helping procedure 'critical', you should say something more direct like, "what helping procedures do you have?" or "how do these helping procedures help you get closer to the solution?" or "can you solve part of the problem?" The idea is to guide the other person's thinking process.

Perhaps a more common way to fall into the hurtful exchange of giving away the key idea is when you're talking over a problem that no one knows the answer to yet. Once one of you comes up with the key idea, it is tempting to blurt it out, impressing the others with your brilliance. If this happens, you should write "developed in cooperation with ..." on your solution. (Note that this disclaimer cannot be used to get away with cheating, but we're not discussing exchanging written code or answers.) It would be better for the one who comes up with the key idea say "I have it, but now I can't tell you what it is" and then try to guide the others to the solution as described above.

If you use reference materials (other than the course text) to solve a problem, please give a citation. Similarly, if you discuss a solution with another student, give credit where credit is due by making a note such as "the following idea was developed jointly with Alyssia P. Hacker," or "the following idea is due to Ben Bittwiddle." You cannot be charged with plagiarism if you cite in this way. (However, don't expect to excuse cheating with such a citation. That is, you cannot exchange code even if you say it was developed in cooperation with someone else. Cooperation refers to the exchange of ideas, not code or written answers.)

Syllabus developed by Curt Clifton, based on earlier work by Mark Ardis and Gary T. Leavens.