Programming Fundamentals
Syllabus



[Text] [Pedagogy] [Topics] [Your Grade] [Honor Code]
[Tips] [Labs] [Writing]

[Sept] [Oct] [Nov] [Dec]



Instructor: Mark LeBlanc
Office: Science Center -- B103 (downstairs)
Office Hours: by appt. or
    MWF 10:30-11:20
Online - virtually always: mleblanc
Mark's Web Page -- Email
Phone: 286-3970
Lectures: M,W,F 9:30-10:20
Lab: Wed 3:30-5:20
All meet in A102 SciCenter

Text: Programming in C++ (3rd Ed), by Dale & Weems, Jones and Bartlett, 2004.

Preamble: Programming. There seems to be no end of the urgent need for more and more people to know how to script, how to write software, how to program. Mobile phones, palm-tops, video-cams, and desktop computers need software to do the things they do. This course is about learning how to program and how to do it well. We use the programming language C++ because we feel it is still the backbone of the industry and offers a full range of rigor and elegance. Glad you are on board; like riding a bike, once you learn to program, you'll never forget. Let's code....

Content: Problem-solving techniques and algorithm development with emphasis on elementary objects, software reuse, and numerical methods. Topics covered include abstraction, design and decomposition, C++ syntax, elementary data structures of arrays and records and how a solid understanding of these features are the building blocks of user-defined classes of objects. Out-of-class assignments and in-class labs emphasize the physical limitations of problem-solving-machines as well as techniques to write programs that are both safe and correct.

Curriculum: The course follows the "imperative-first approach" as defined in the new ACM/IEEE-CS Joint Curriculum Task Force, Computing Curricula 2001. Using the ACM numbering convention, this course is the entry level CS111 (traditionally CS1) computer science course for all majors and minors, although at Wheaton an increasing number of students have previously taken another introductory course in computing. The use of predefined objects will be highlighted throughout the course; however, the emphasis is on learning to write safe and efficient software, the heart of every good object. We have retained a number of breadth-first recommendations from Computing Curricula 1991, including:

  1. integration of theory with practice: At present, our emphasis on theory has focused primarily on the subareas of logic, computer organization, object-oriented programming and in particular, introductory numerical methods. Mathematical computing is a constant theme throughout the semester. OOP is currently introduced from a client-perspective, that is, C++ classes are provided for the students but they do not begin to write their own classes until the second course (CS112, traditionally CS2). Specific portions of each lab are spent introducing and experimenting with introductory elementary numerical methods, for example: arithmetic overflow and truncation errors introduced in series approximations. The theoretical rigor we try to instill in each of our students is summarized as follows:

    In computer science, if you are almost correct you are a liability.
    Fred Kollett (1941-1997), MathCS, Wheaton College

  2. a broad view of the subdisciplines of computing: Currently, six programming assignments feature some of the various knowledge areas of the discipline. A complete list of assignment topics is given below.

  3. writing: Student written web pages provide in-depth study of an ethical issue in computing of their choice. This multi-step project exposes students to writing instruction in our discipline and a level of scholarly research typically not experienced at the introductory level.

  4. weekly hands-on labs: Since 1987, this instructor has included a laboratory component in the CS1 course. From the outset it was clear that computer science is a hands-on activity and is not unlike the traditional laboratory sciences (biology, chemistry, physics) where hypothesis generation and experimentation are necessary ingredients in the learning process.

  5. topics featured in-depth: In addition to introductory numerical methods that appear throughout the semester, this semester we focus on applications that could be ported to mobile devices. Significant attention will be paid to some of the basic considerations of developing software for the ever-increasing number of "smart appliances", including console size, memory footprint, and efficiency.







Your Grade:
[Sept] [Oct] [Nov] [Dec]
Things to do Grading Percents Frequency
12 Labs
12%
almost weekly
6 Programs
40%
TBA
10 Quizzes
25%
almost weekly
Final Exam
15%
TBA
Web page
8%
continual through semester


Programming (Homework) Assignments (tentative plan)
   a1 - The realities of small mobile devices -- Series approximations
   a2 - Remote data collection with mobile devices -- Linear Regression
   a3 - Not Very Good Privacy (NVGP) -- Encryption
   a4 - e(x) please -- Writing Mathematical Libraries
   a5 - Can I Scan Your Head? -- Informational Retrieval
   a6 - Scanning Your Head (Part II)  --  Software Engineering 
 
Any work (labs or homework) handed in late will not be accepted. All electronic submissions are to be dropped to the appropriate dropbox. In addition, for all programming assignments, a laser-printed, stapled hardcopy of your program must be handed in to the instructor by the morning following the due date.


Topics:
[Sept] [Oct] [Nov] [Dec]

Difficulty
Level
Text Topic
* Ch. 1 Introduction to Computing (history, ethical issues, hardware, moving around our local network and beyond)
***** Ch. 2 Program Development (design, coding, verification, maintenance)
*** Ch. 3 Computing with Simple Objects (numeric expressions, input-output)
****** Ch. 3 Libraries (formulas, computing with class libraries)
******* Ch. 4 The software design process
**** Ch. 5 & 6 Selectional and Repetitional Control
(if-else, switch, while, for)
******** Ch. 7 & 8 Functions in Depth (pass-by-value, pass-by-reference, inline functions), scope
********* Ch. 12 One- and Two-dimensional Arrays (strings, matrices)
********* Ch. 11 Structured Data and an introduction to Classes (user-defined types, classes, structs)
********* notes numerical methods and the rules of safe programming *
*The numerical methods theme appears throughout the course.
Exact page numbers to read appear on the schedule (e.g., Sept); any updates will be given in lecture.


Honor Code Revisited: It goes without saying that all submitted work will be the student's own, in keeping with the Wheaton Honor Code. For labs, you may get help from fellow classmates, but remember that all submitted work must be your own. For homework, the programs must be your own from beginning to end. On the quizzes, you may not get help from anyone but the instructor.

HOMEWORK
(0) It is expected that you spend at least 2-3 hours on reading and practice problems for every 50 minutes of lecture. This computes to at least 6-9 hours of work in the C++ text per week. This should be done throughout the semester and not just when studying for quizzes. The material is cumulative in a big way; for example, week 5 depends heavily on weeks 1 through 4.
(1) I t is expected that you spend at least 4-6 hours per week on your current programming assignment. WARNING: Programmers typically underestimate the time it takes to complete a software project; 4-6 hours per week on your programming assignment may be one of those "underestimations."

LABS
(0) The labs are a critical part of the course. In almost all cases, the current lab will be preparing you for the current programming assignment. That is, if you complete and understand the lab, you should be well on your way to a solution for the programming assignment.
(1) In order to best grasp the material in some labs, I strongly suggest that you completely redo any labs that you find difficult. (Read that last sentence again, unless of course you've already reread it once).

QUIZZES
Rather than exams spaced evenly over the semester, you will be quizzed on a weekly basis. Each quiz may address material that has been assigned in the text, but not yet presented by the instructor. NOTE: you'll have to have read the material and practice the sample problems BEFORE coming to class to take the quiz. Quizzes start at the beginning of a lecture (see schedule) and last approximately 10-15 minutes. After some quizzes, immediate (peer) grading will be followed by a lecture/discussion which will focus on the concepts in the quiz.

(0) There will be no makeups, nor will the lowest quiz be dropped. If you are an athlete and/or you have a conflict with a quiz date, please see me within the first week of classes.
(1) When studying for quizzes, have someone pick problems from the notes and text, mix them up, and present them to you as if you were taking a quiz (not telling you from what section a problem comes). While practicing, do not peek at the textbook or an earlier solution. NOTE: it's easy to "read" code; its much more difficulty to "write" code from scratch. Quizzes will ask you to "write" code from scratch; practice ownership of the concepts!

HELP
I have listed my office hours on the syllabus. As you'll soon know, I am often available at other times. Scheduling a "quick" appointment is best handled when you reach me by phone: for example, "Professor LeBlanc, I'm really stuck. Can I stop by sometime in the next hour or so?" (However, do not leave a voice mail and ask me to return your call, unless it is urgent).


Please don't wait too long before you see me; a quick chat in my office can often clear things up.
I'm here alot...

[Labs] [Writing]
[Sept] [Oct] [Nov] [Dec]


    Maintained by: Mark LeBlanc
    Dept of Math & Computer Science
    Wheaton College, Norton, Massachusetts