CSCI 430 Programming Paradigms

A survey of approaches to problem solving using non-imperative language features from the fucntional, logical, object-oriented, and concurrent paradigms.  Laboratory projects in several different languages are required.  Typical languages covered include LISP, Prolog, Java, Icon, Rexx, Mathematica, Ruby, ML and others.   A combination of lectures and laboratories exposes the students to a set of different language paradigms and the students on their own initiative with the assistance and encouragement of the instructor launch out on their own to become more deeply familiar with two other languages of their choice.  Logging and personal progress reports are used by students to track their project and they give a presentation on their accomplishments on the last day of interterm.  Students will create a Laboratory Tutorial for their languages which will become part of the permanent resource base for the course.

TEXTBOOK: There is no textbook for this course.  The reason is that none of the textbooks that I've been able to find provide adequate coverage for a survey course of this kind.  This particular course was originally structured around the book Advanced Programming Language Design by Raphael A. Finkel. (1996) Addison-Wesley and was taught at the graduate level at James Madison University.  The course as taught in Interterm is less about the internal details of the languages as it is about the paradigms they represent and an introductory experience programming in the many different paradigms.

Grading is based on satisfactory completion of all assigned work. 10% attendance 20% Progress Reports 30% Labs 40% Tutorial/Lab/Demo/Presentation of GURU Language.
Attendance: Students are expected to attend all lectures and all laboratories and turn in all assignments executed neatly and promptly. See Generic Policies for further information.

Unix : Unix is of course an Operating System and not a language.  However, since Unix is an important environment for learning many programming languages, students might be interested in the following links.
Unix Tutorial (nice reference page) 
Unix Tutorial Based on Cal Tech’s 
Programming On Unix Systems

Programming Languages (Warning -- Some of the Links Below May have aged out.  Please let me know if that is the case and suggest a replacement link.)
// the Language Guide – interesting entry point for lots [40] of languages
// Wikipedia on Programming Languages
// Timeline of programming languages with links
// some opinions about programming languages
// Links about Programming Languages
// Brad Appleton’s Programming Languages Link Page
// List of Programming Languages with resources
// JWIG Project page High Level Web Services ??

The Interesting Page   Some Language Resources
Modern Programming Languages A Practical Introduction
Edgar R. Chavez Programming Languages
Dictionary of Programming Languages
George Hernandez Language Page

Burks Language Resources this link points to an on-line version of the Burks (Breighton University Resource Kit for Students) which was maintained for many years and made available as a set of CDs.  It used to be assigned material for this course and is still very useful.

Laboratory Assignments from among the following:

Assembly --
C- - : C- - Homepage
D The D Programming Language
FORTH-- Forth Tutorial  Another Forth Tutorial  Forth Home Page  pForth Site  SwiftForth Home
The Evolution of Forth  LeoBrodie's Starting Forth
Other Threaded Interpreted Languages include PostScript and Onyx

And don't forget Ghostscript  Until -- Forth in C  A Short Note About Forth from UVA Postscript Tutorial
MistyBeachForthApplet  Saon's Forth Tutorial

BASICs -- 150 Versions of Basic Listed  Chipmonk Basic Home Page 
ICON -- tutorial from New Mexico Tech   Son of Snobol -- text processing to the max
              Programming Language -- here
              All about Icon
LISP -- Scheme Programming Link   Mother of all Functional Languages
             Scheme Tutorial  The definition of Scheme R5RS Another Scheme Tutorial
             MIT Scheme  MIT Scheme Lab  How to Use Edwin MIT Scheme Users Manual
ML -- A Gentle Introduction to ML  Programming In Standard ML
         Standard ML of New Jersey 
         Introduction to the ML Programming Language 
         Programming In Standard ML 
         ML Tutorial  
On-Line ML Tutorial

MATHEMATICA -- Mother of all Mathematical Tutorial Lists  Kevin Perry at Princeton  
                                 Mark Johnson's Tutorial  Calculus Self-Tutoring  Sean at CalTech
MATLAB -- Companion MatLab Tutorial to Mark Johnson's Mathematica Tutorial
PHP -- PHP Tutorial   PHP Downloads  Another PHP Tutorial 
PROLOG -- John Fisher's Prolog Tutorial  Programming with Logic -- a truly different paradigm
On-Line Guide to Prolog Programming

PYTHON -- Python Home Page Download version 2.4 One-Day-Of-IDLE-Toying IDLE-Doc Guido'sTutorial
                     IntroductionToTkinter  Over300PythonTutorials
REXX -- Tutorial    Rexx Tutorial  Object Rexx Is Here
RUBY --  Tutorial with Interpreter See it Run As You Learn About It! Another Ruby Interpreter
                Downloadable Tutorial  Online Book from the Pragmatic Programmers
               RubyGarden  PoignantGuideToRuby LearnToProgramRubyTutorial
                ExcellentBeginnersTutorial  RubyApplicationArchive
SQL -- Tutorial On the Web   A Gentle Introduction to SQL 
  Introduction to SQL  
             SQL Course On-Line  More Advanced SQL-On-Line  First SQL-Tutorial
             Interesting Downloadable Tutorial    Access Data Base Tutorial

Tkl/Tk -- Tcl Tutorial Another Tcl/Tk Tutorial Still Another Tcl/Tk Tutorial  Tcl-Wiki Tcl-Sources 
                Tcl-Overview  Tcl Developer Exchange

Relational Data Bases -- The Relational Algebra
PERL -- Tutorials from the  Interesting Page
               Perl Downloads   An excellent Perl tutorial  another fine Perl tutorial
               Picking Up Perl, a Freely  Redistributable Perl Tutorial Book  A Perl Resource Site

Declarative Languages -- A Declarative Language is not operational, i.e. its semantics are about what it means and not what it does.  Declarative languages have a wide use in knowledge representation and document representation.

SGML-- Expressing Yourself In SGML  On SGML and HTML
HTML -- HTML Tutorial
XHTML -- XHTML Tutorial  NewYorkPublicLibraryXHTMLGuide
                 CSS (Cascading Style Sheets): NYPL-CSS Guide W3SchoolsCSS RealWorldStyle  IntegratedWebDesign
XML -- 
A Gentle Introduction to XML   Another Link
CycL -- Writing Ontologies  Can computers represent common sense knowledge?  Knowledge Representation, challenge for the future.

ETD -- The Electronic Thesis and Dissertation Markup Language

Constraint Programming
On-line Guide to Constraint Programming
Wikipedia on Constraint Programming

Challenge:  If you don't like the programming languages and paradigms in the list above, your challenge is to provide me with extensions to this page which can be used to extend it and make it more useful for those that come later -- that idea is called PAY FORWARD!