Fall 2014 Semester

paradigm
n.
  1. One that serves as a pattern or model.
  2. A set or list of all the inflectional forms
of a word or of one of its grammatical categories:
the paradigm of an irregular verb.
  3. A set of assumptions, concepts, values, and
practices that constitutes a way of viewing reality
for the community that shares them, especially in
an intellectual discipline. 

USAGE NOTE   Paradigm first appeared in English
in the 15th century, meaning "an example or pattern," and
it still bears this meaning today: "Their company is
a paradigm of the small high-tech firms that have recently
sprung up in this area." For nearly 400 years,
paradigm has also been applied to the patterns of
inflections that are used to sort the verbs, nouns, and
other parts of speech of a language into groups that are
more easily studied. Since the 1960s, paradigm
has been used in science to refer to a theoretical framework,
as when Nobel Laureate David Baltimore cited the work of
two colleagues that "established a new paradigm for our
understanding of the causation of cancer."

from http://www.answers.com/topic/paradigm

KSU CIS505:
Programming-Language Paradigms

Lectures: MWF 10:30am, Nichols Hall, room 019

Instructor:
David Schmidt (das at ksu dot edu, phone: 532-7912), 219A Nichols Hall

Teaching assistants:
Pavel Janovsky (janovsky at ksu.edu)
Hari Thiagarajan (thari at ksu.edu)

Announcements

Syllabus

Lecture notes

Assignments


Office hours:
Dave Schmidt (Nichols 219A):
Mondays: in the afternoon, as best as I can
Tuesdays: 1:00-2:00pm for sure (after 2pm, no way)
Wednesdays: 2:00-3:30pm for sure (other times uncertain)
Thursdays: 3:30-4:45pm for sure (prior to 3:30, no way)
Fridays: 1:00-2:30pm, as often as I can

Pavel Janovsky: 8:45-9:45am Tuesday and Thursday (Nichols 219G)
Hari Thiagarajan: 3:00-4:00pm Weds. and Friday (Nichols 324)

You are always welcome to send email to schedule meetings.


Software

We will conduct case studies in these programming languages, each of which supports a programming-language paradigm:
  1. Python is a scripting language with dynamic data structures (tuples, lists, and dictionaries); it supports all of imperative, declarative, and o-o programming. It is great for developing small- and medium-sized programs quickly. Systems hackers use it to write utilities and to "glue together" applications that don't otherwise fit together. Once you learn Python, you have also "learned" Javascript, PHP, Ruby, Perl, etc.
    * Please read Installing Python to learn how to check for Python on your machine, install it if needed, and use it to develop and test software.
    * If you have never programmed in Python before, you can relax --- it looks like Visual Basic or Javascript or any other baby assignment language. Here are some samples of Python code. (Here is a zipped folder of the samples.) Try these with your implementation. IMPORTANT: Python uses indentation to show the nesting of commands. You can indent using either spaces or tabs, but you cannot mix them. In my examples, I use all spaces to do indentation. (If you mix leading tabs with leading spaces you will get strange syntax errors.)
    * a terse language summary and terse notes on lists and dictionaries, the two most important data structures in Python. Here is a complete tutorial.
    * PythonTutor is a great visualization tool for the Python virtual machine
    * The language's website is at http://www.python.org/, where you will find a useful library reference page.
    * This nice on-line book, The Python Standard Libary, shows you how to use Python to do clever systems hacking and gluing, the sort of stuff that is not normally taught in courses but is hugely useful in practice.

  2. ML ("MetaLanguage") is a functional language that cleverly combines compile-time type checking with dynamic data structures. This combination is important, because typed o-o languages like Java and C# aren't "dynamic enough". Once you learn how ML type checks dynamic structures, you will be ready to learn and use the next-generation o-o language, Scala, which is "Java-plus-ML".
    * A good reference to ML is the text, Elements of ML Programming by Jeffrey Ullman (but it's way overpriced --- get a used copy if you wish to buy it). Here are some other references, all on-line: * You will probably need to install ML on your computer; try one of these:
    • SML New Jersey (claims to work on any of Windows, Mac, Linux; try this one first)
    • Moscow ML. (supposedly a ``lighter'' version of ML; works with Windows and Linux)
    • MLton (Linux, Unix, Mac)

  3. Prolog is the classic logic-programming language, where you write a "logic specification" of an algorithm, and the computer executes the specification --- there is no "coding" step!
    * Here is a good, easy-to-install implementation: www.swi-prolog.org.
    * Here is some intro material on Prolog that I wrote for my CIS301 students.
    * This material is oriented towards using SWI Prolog: PLPM, St. Etienne, France | CSC485, Univ. Toronto