Instructor: Dr. Johnny Martin
Office: T.B.D. (Maybe? Duncan 282)
E-mail:
martin@cs.sjsu.edu
Home Page:
http://www.cs.sjsu/~martin/index.html
Office Hours:
Office hours and location are subject to change. You may visit in person or send e-mail.
All CS department's stated and implied prerequisites.
![]() | Warning |
|---|---|
Attendees should be aware that CS 151 is a required prerequisite. Without it,the department may evict you from the course. |
In addition, you should be comfortable with most of the following:
Motivated and able to download, install and teach yourself new software packages
Java and OO programming; ideally having written at least 1,000 lines of code
Some familiarity with scripting languages, e.g., Perl, Python, Ruby
Algorithmic time/space complexity and big-oh notation
Fundamental data structures, e.g., sorting, searching, hashing, doubly-linked lists, tree data structures
Programming with pointers
Markup using XML or HTML
Students will be expected to do their own self-directed study to learn and develop proficiency with technologies introduced in lectures or assignments.
Contact the Computer Science department's main office at (408) 924-5060 for administrative matters.
Programming Languages: Principles and Practice, 2nd edition by Kenneth C. Louden, Thomson-Brooks/Cole, 2003.
More information about the text and related programming languages resources information are available on the author's website http://www.cs.sjsu.edu/faculty/louden.
An ideal way to learn about programming languages -- especially the deep underlying interconnections among them -- is to author many lines of code in many of different languages. [1] The ideal programming language learning experiences are a lifetime endeavor and cannot be accomplished during an academic term. Given our 15 week time constraint, we do the next best thing: study paradigms and principles at the foundational core of all programming languages while surveying selected programming languages' features. Then, too, we write as many programs as humanly possible in the academic term. Hopefully "writing lots of programs" becomes an ongoing habit.
CONS: You should expect this course to be frustrating because:
PROS: You should expect this course to provide some satisfaction because:
Every few years new, important, and popular languages appear on the market. Even old-timers, like your instructor, realize that to maintain skill in crafting software we must develop the habit of continuing to author many lines of code in many of different languages. Developing a habit of continual learning is the ideal way to learn about programming languages.
The programming assignments provide hands-on experience with new languages. You should write programs using Scheme, Prolog, C, Java, and other programming languages. The lectures and readings will follow selected topics from the text and provide theoretical foundations for programming language principles.
Topics are outlined on the "topics calendar" link from the course home page, and may be adjusted during the academic term. You are encouraged to visit these pages which may be updated as the course progresses.
Quizzes are administered the first day we meet each week, usually during the lecture's first 10 minutes. There are no makeup quizzes, so if you intend to sit for a quiz, please be on time.
The quizzes should motivate you to keep up with the assigned weekly readings and also provide you with on-going review preparation for midterm and final examinations. Often, we discuss the quiz solutions during class, so you will get regular on-going feedback before the midterm exam and before it's too late to do anything about it. Each quiz tests your familiarity with some aspect of the assigned reading materials, which you should read before each week's lecture. For example, Quiz 3 will be based on assigned readings for week 3 and may include readings from weeks 1 and 2.
Because the material also is covered by examinations, It is possible that only only some weeks' quizzes will be formally graded and scored. Since there is no advance notice of which quizzes are scored, you are best to approach all quizzes seriously. Quizzes are graded using a quasi-binary point system, i.e., 0 or 1 points. If you do the reading and approach the quiz with some reasonable intelligence, you're likely to score a 1.
Previous attendees have responded favorably (although not initially) to the weekly quizzes and cited several benefits. Procrastination is minimized by reading every week. Frequent quizzes thwart poor study habits, e.g., cramming for exams. The quizzes force everyone to do the assigned readings, so lectures have fewer "newbie" questions, are more relevant, and involve deeper discussions. In particular, students holding full-time jobs have said the quizzes system kept them current with course materials in spite of outside work deadlines.
A few comments regarding makeup quizzes are in order. If you are able to provide a written official excused absence, still a makeup quiz will not be given. Instead, your total quiz score will be adjusted. Students who join the course later in the academic term will receive 0's for missed quizzes. In other words, adding the course late would not provide an advantage over students who attended from the first day.
See the home page for programming assignment details.
Assignments may be graded on correctness, completeness, and creativity. The grading of assignments is not weighted much as a percent of your total class score, thus you should approach each assignment as a suggested study topic for the examinations. Your performance on the exams will benefit from extra experimentation and programming beyond the assignments' submission guidelines.
Some collaboration is permitted when completing the programming assignments, however you should collaborate only to improve your understanding. You should collaborate with fellow students to learn details of the programming environment and learn how to navigate through new and challenging concepts. You are discouraged from using this collaboration policy to escape or avoid doing the exercise.
The best way to approach working with others is to ask yourself, "if given a similar assignment, could I write the program without other's help". If you can honestly answer "yes" then you are not collaborating too much.
In accordance with academic honesty policies, if you collaborate on the assignment, you must identify with whom you worked, whether you gave help or received help.
Deadlines are strictly observed. Late submissions will receive no points.
Examination are predominantly multiple choice using Scantron forms. Topics covered include all material from lectures, readings, quizzes, and programming exercises related those assigned.
Midterm exams are scheduled for:
Tuesday, February 26, during class
Thursday, April 8, during class
The final exam is scheduled for:
Tuesday, May 20, 7:15 am - 9:30 am
The final exam is comprehensive.
Quizzes: 10%
Assignments: 10%
Midterm Exams: 20% for each midterm
Final Exam: 40%
Total: 100%
I do not take role in class, thus attendance is optional. However, you will benefit from punctual attendance on quiz days (see the information about quizzes). Also, if you want to have the best advantage in grading, you should keep abreast of the lecture activities, since I may announce changes or new requirements during lectures. Net-net, if you don't plan to attend regularly, you will benefit making friends with a fellow student that does.
If you miss class, you are responsible to obtain the information from classmates. Requests to your instructor asking what was covered on your days absent will be ignored.
[1] Writing a compiler for a programming language is another great way to learn to program better, but alas that is the topic of another course.