Lecturer               Pearce

Office Hours        TR 1:00 - 3:00 in 213 Macquarrie Hall
Phone: (408) 924-5065
Email: prof.jpearce@gmail.com
URL: www.cs.sjsu.edu/faculty/pearce/pearce.html

Lectures               section 3: TR 10:30 - 11:45 in MH 222
section 5: TR 5:30 - 6:45 in MH 422

Text                      There is no required text. Course notes and other links can be found at:

                                  www.cs.sjsu/faculty/pearce/cs152

References:

                              Kenneth Louden, Programming Languages, Brooks/Cole, 2003, ISBN 0-534-95341-7

                              David Watt, Programming Language Concepts and Paradigms, Prentice Hall, 1990

                              Friedman, Wand and Haynes, Essentials of Programming Languages, 2nd ed., MIT Press 2001

                              Lohr, Go To: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Maverick Scientists and Iconoclasts--The Programmers Who Created the Software Revolution.

Software               NetBeans or Eclipse

Prerequisites        Completion of CS151 or an equivalent course with a grade of C- or better. Students who do not have good Java programming skills will quickly fall behind.

Grading                Grades will be determined by approximately five or six programming assignments (50%), one midterms (20%), and a final exam (30%). Late assignments are accepted by prior arrangement only. Submitting assignments or exams containing fragments of unoriginal work will be treated as an act of academic dishonesty and will result in failing the class and an official report filed with the university.

Course Outline    Although it sounds paradoxical, the principle goal of this course is to provide students with a language-independent way of thinking and talking about programs. This perspective will help students design better programs and to better exploit the features of chosen implementation languages. To achieve this goal, we will analyze and compare the semantics of expressions, statements, declarations, types, functions, and modules in a variety of actual and artificial languages.

                              The second goal will be to introduce students to the major programming paradigms: imperative, functional, logic, and object-oriented. This goal will be achieved by asking students to write programs in languages selected from each paradigm: Forth, Haskell, Prolog, C, C++, Java, JavaScript, and Scheme.