CSC 161 | Grinnell College | Spring, 2013 |
Imperative Problem Solving and Data Structures | ||
Although much of this course is reasonably stable, you should expect on-going refinements throughout the semester. Check schedules and other materials on a regular basis for updates.
This course explores elements of computing that have reasonably close ties to the architecture of computers, compilers, and operating systems. The course takes an imperative view of problem-solving, supported by programming in the C programming language. Some topics include:
imperative problem solving: top-down design, common algorithms, assertions, invariants
C programming: syntax and semantics, control structures, functions, parameters, macro processing, compiling, linking, program organization
concepts with data: data abstraction, integer and floating-point representation, string representation, arrays, unions, structures, linked list data structures, stacks, and queues
machine-level issues: data representation, pointers, memory management
GNU/Linux operating system: commands, bash scripts, software development tools
Office: Science 3811
Telephone: extension 4208
E-mail: walker@cs.grinnell.edu
Office hours are posted weekly on the bulletin board outside Science 3811, with additional hours possible by appointment. You may reserve a half hour meeting by signing up on the weekly schedule, but please sign up at least a day in advance.
The hardware, software, readings, labs, and other materials from this course have evolved from many sources:
The underlying hardware and some software for this course are based on research performed by the Institute for Personal Robots in Education (IPRE), hosted at Georgia Tech and Bryn Mawr College. Their materials, including software interfaces, reference materials, and hardware, were funded by grants from Microsoft Research and the National Science Foundation. (wording modified from suggestions by Douglas Blank of the IPRE project and Bryn Mawr College) The main pages for this work are:
The MyroC++ project grew out of efforts by Professor Bruce MacLennan's group, University of Tennessee; special thanks to John Hoare in that group for his assistance.
The MryoC project was developed by Henry Walker and his group at Grinnell college and funded from Grinnell's Dean's Office.
Students in this course should have a ready reference for the C programming language. Some labs include only a brief discussion of a topic, and students will need to do additional reading to understand the general context and the details of the material. Use of a textbook can be an effective means to study this material in appropriate depth.
The following two books provide the needed background, but these book target different audiences. CSC 161 students are strongly encouraged to obtain one of these references for use in this course. CSC 161 students need NOT obtain both of these references.
K. N. King, C Programming: A Modern Approach, Second Edition, W. W. Norton, 2008, ISBN 978-0393979503.
Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, Second Edition, Prentice Hall, 1988, ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).
Additional references follow:
Henry Walker, An Introduction to C Through Annotated Examples, http://www.walker.cs.grinnell.edu/c/index.html
The GNU make Manual, Free Software Foundation, 2006.
Eric Huss, The C Library Reference Guide, University of Illinois Student Chapter, 1997.
The MyroC header file that identifies all MyroC operations defined for the Scribbler 2 robots in C.
Examples of comments in programs:
Planning and development of materials for this course represent an extensive effort:
Although the developers have read, re-read, and refined the materials extensively, one can be confident that typographical errors remain.
If you find an error, if something does not read well, if deadlines on one page do not seem to match those stated on another page, etc. — don't panic (or use colorful language). Rather, please talk to the instructor (nicely please). Thanks!
While the schedule for this course is expected to evolve, a Tentative Class Schedule is available in .dvi , pdf, and postscript formats.
A reasonably detailed, day-by-day outline of course work is available through the base page for each module.
Course Work will involve a combination of the following activities.
Supplemental Problems extend the range of problems considered in the course and help sharpen problem-solving skills. Through the semester, five supplemental problems will be required. Supplemental problems numbered 6 or above may be done for extra credit, although extra credit may not raise a student's average on assignments above 120%.
Note: Supplemental Problems are to be done individually; students should not talk to others in the class, Mentors, Lab Assistants, Technology Consultants about these problems. See for example The Role of Tutors For Computer Science 161.
Module Laboratories and Projects: Topics in this course are organized into eight modules and a few supplementary labs. Modules include laboratory sessions and conclude with a integrative project.
Laboratory sessions introduce specific features of Grinnell's computing environment, highlight concepts and constructs introduced in class, allow instructor assistance in a "hands-on" setting, and supplement normal office hours. Approximately four labs require a formal write-up, explaining what work you have done, showing any programming you have done, indicating tests or experiments run, and giving your conclusions. Labs designated [Req] on the Tentative Class Schedule are required -- labs designated [EC] may be done for extra credit. In order for extra-credit labs to provide reasonable benefit, any such lab being submitted for credit must be turned in within 2 weeks of when it is scheduled for coverage in class. As with written homework, extra credit may not raise a student's average on laboratories above 120%.
Note: As a special incentive for mastering the laboratory exercises, between a third and a half of the problems on each test and on the exam will be taken from the laboratory exercises (with only slight editing).
Projects: Each of the eight modules concludes with a project, involving both a computer program and associated commentary; and each project is a required part of the course.
Collaboration on labs and projects encouraged: Many lab activities and projects should be done in groups of two or three, although you may work individually on labs after Lab 8. Only one write-up is expected per group.
Hour Tests: Three hour tests are tentatively scheduled for Monday, 18 February, Friday, 8 March, and Friday, 19 April.
Exam: The final examination for this course may be taken either on Tuesday, 14 May, at 9:00 am or Wednesday, 15 May, at 2:00 pm.
Extra Credit Opportunities: Computer science is a wide-ranging discipline, and courses can cover only selected pieces. To encourage students to expand their horizons, students may earn 2 points extra credit for each Thursday Extra or other departmental talk, by attending the talk and writing a short (4-8 sentence) summary or response. Logistically, when a reasonable statement is received, the student will receive 1 point extra credit counted toward supplemental problems and 1 point extra credit counted toward labs. Additional extra credit opportunities may be announced through the semester.
Grinnell College offers alternative options to complete academic work for students who reserve religious holy days. Please contact me within the first three weeks of the semester if you would like to discuss a specific instance that applies to you.
Deadlines are shown on the Tentative Class Schedule , and work is due at the start of each class specified. A penalty of 25% per class meeting will be assessed for any assignment turned in late, even work submitted at the end of a class. However, an extension of at least one class period is automatically granted if the department's Linux network is down for an unscheduled period of three or more hours during the week preceding the assignment. Normally, a program or laboratory write-up is due every third class meeting.
Although dates for labs, programming assignments, tests, and the final exam are firm, I understand that circumstances arise when you are not able to attend class.
Absolute Deadline: All homework must be turned in by Friday,
14 December at 5:00 pm;
laboratory reports or programs received after
that time will not be counted in the grading of the course.
Collaboration often will be allowed on laboratory exercises and problems from the textbook, but collaboration normally will NOT be allowed on supplemental problems and tests. To avoid confusion, the rules for collaboration on homework are included in the specification of each assignment.
All work in this course is governed by the rules of the college regarding academic honesty. In summary, standard practice requires that you must acknowledge all ideas from others.
When working on homework, either individually or in a group, you may use any written source. However, the normal rules of citation must be followed, as described in the Student Handbook.
When you work in a group on an activity, the names of all students in the group should appear at the top of the first page. Turning in work with multiple people listed as authors implies that all members of the group agree with what is presented. If a group member does not agree with some part of the work, the group should continue to discuss and revise the material until agreement is achieved. In summary, a group activity is a joint effort, and all group members have equal responsibility for the finished product.
When you work on an activity yourself, but consult others, then you should include a statement identifies whom you consulted on what material. This includes conversations with class members, tutors, lab assistants, other students, faculty, and any other people involved. If you consulted one person on several parts on an assignment, you may summarize the collective help in an "Acknowledgment Section" rather on the individual problems — as long as the work makes clear who helped on what. Overall, all consultations on problems must be cited for each problem or exercise.
Cell phones, text-messaging devices, and other social-networking connections may not be used in this class. If you bring such equipment to the classroom, it must be turned off before the class starts and stay off throughout the class period. Use of such equipment is distracting to those nearby and will not be tolerated.
If you have specific physical, psychiatric, or learning disabilities and require accommodations, please let me know early in the semester so that your learning needs may be appropriately met. You will need to provide documentation of your disability to the Director of Academic Advising. Feel free to talk to me if you have questions or want more information.
This instructor's grading philosophy dictates that the final grade should ultimately be based upon each student's demonstration of her or his understanding of the material, not on the performance of the class as a whole nor on a strict percentile basis. The following scheme is proposed as a base for how the various assignments and tests will be counted in the final grade.
Lab Write-ups: 15% | Supplemental Problems: 15% | Projects: 25% | Hour Tests: 25% | Exam: 20% |