CSC 161 Imperative Problem Solving and Data Structures

Spring 2015

Synopsis: This class broadens your means of "computational thinking" as a method of solving problems. Using robotics (sensing and control) as a vehicle for exploration, you will explore additional important concepts from computer science. With daily labs that help you become progressively fluent in a low-level programming language and its data representations, you will practice the design and analysis of algorithms, recognizing and creating abstractions, and manipulating important information structures. You also get to make robots sing and dance!
Instructor: Jerod Weinman
Office: Noyce 3825
Phone: x9812
E-mail: [weinman]
Mentors: Tiffany Nguyen and Evan Bruns
E-mail: [nguyenti], [brunseva]
Course web page: http://www.cs.grinnell.edu/~weinman/courses/CSC161/2015S/
Class meetings: 10:00-10:50 a.m., MTWF, Science 3815

Contents

1  Accommodations
2  Overview
3  Textbooks
4  Schedule of topics
5  Assignments and activities
    5.1  Reading
    5.2  Participation
    5.3  Module Laboratories and Projects
    5.4  Homework assignments
    5.5  Quiz and Exams
6  Partner responsibilities
7  Grading
    7.1  Extra credit
8  Attendance
9  Academic honesty
10  Deadlines
11  Getting help
    11.1  Peer educators
    11.2  Discussion with Piazza
    11.3  Office hours
    11.4  Email

1  Accommodations

If you have any disability that requires accommodations, please meet with me right away so that we can work together to find accommodations that meet your learning needs. You will also need to provide documentation of your disability to the Coordinator of Disability Services, Autumn Wilke, located on the 3rd floor of the Rosenfield Center (x3124).
Please also note that I require your accommodations. The chemical fragrances found in lotions, after shave, body sprays, scented laundry products, perfume, cologne, etc. make many people who suffer with asthma, allergies, environmental sensitivities, cancer, and migraines much sicker. I am sensitive to many chemicals you may not even notice, so please try to avoid using such scented products before coming to class and especially if you visit my office.

2  Overview

The official catalog description reads:
A continuation of CSC 151, bringing in some concepts more closely tied to the architecture of computers, compilers, and operating systems, such as macro processing, compilation and linking, pointers and memory management, data representation, and software development tools.
This section of CSC 161 will utilize robotics as an application domain in studying imperative problem solving, data representation, and memory management. Additional topics will include assertions and invariants, data abstraction, linked data structures, an introduction to the GNU/Linux operating system, and programming the low-level, imperative language C. The course will utilize a workshop style, in which students will frequently work collaboratively on a series of problems. Includes formal laboratory work.
This means that you'll be introduced to the C programming language, learning how to adequately describe and decompose problems of a computational nature so that you can effectively tell a computer the steps it should take to solve the problem. We will study some beginning concepts that make this process possible, easier to undertake, and often elegant.
Our major objectives for this course include: Practically speaking, our topics will include:
*  Why take it?
Understanding another computational paradigm will increase your problem-solving abilities. Learning how your programs connect to the underlying representation and physical machine will give insight to their behaviors and limits. Oh, and programming robots is fun.

3  Textbooks

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. The course web page provides a significant list of other important references.

4  Schedule of topics

The following is an approximate schedule of topics to be discussed during the course. See the web page schedule for details.
Week Topic Week Topic
1 Introduction 8 Input/output
2 C and robot programming 9 Images, sorting
3 Variables, conditionals, loops 10 Pointers, linked lists
4 Functions 11 Stacks
5 Arrays, testing 12 Queues, bash
6 Data representation 13 Stacks, files
7 Characters and strings 14 Files and review

5  Assignments and activities

This class is taught in a collaborative workshop style. Some days we will work through problems or concepts in an interactive fashion. Most days you'll work on laboratory problems on the computer with another student.
To make class time most valuable for you, I do not plan to lecture on material that is covered in the reading. Instead, because experimenting and practicing is the best way to learn, you'll have the opportunity to ask questions and then begin working collaboratively on the day's lab exercises with the instructor and a class mentor available to provide assistance.
By studying the day's topics beforehand, we can concentrate the beginning of class on areas of confusion. Because our class time is limited, you must come prepared to each class, meaning you should:
  1. Check the schedule for the day's meeting to find out the topic.
  2. Study the assigned material before class.
  3. Come to class on time, with your textbook, paper, and something to write with, ready to participate.
Under a normal 16 credit load, I expect that you will spend at least (but hopefully more) 40 hours per week on your studies (class time, homework, and studying).1 Thus, you should plan to spend a minimum of 10 hours/week on work for this course:

5.1  Reading

Nearly every day there will be brief readings assigned, some from one of the textbooks and some from course web pages. Before each class, you should check the course schedule for the readings. Reading the material may entail the following:
Overview
You should look over each reading once to get an overview of the material to be covered (e.g., summary and section headers).
In-depth
Next, study the material closely. Perhaps not everything will make sense at this point, but hopefully many or most things will.
Final notes
After carefully reading the material, make a few notes to yourself about what you think are the most important concepts being covered, as well as any questions you have.
These important readings are often brief, but dense, introducing non-trivial ideas. You should plan to spend an hour working on the material in the readings before class. At the end of the hour, you should be ready to discuss in class the material from the reading that is most important and most confusing to you. Thus, you should consider answering the following questions to be part of your daily homework:

5.2  Participation

Because much of our work in this course involves collaboration and discussion, you will be evaluated on your participation.
Participating in class involves: Students who regularly meet these criteria can expect to earn an A- for their participation grade. I will reward students who regularly provide significant insights or guide discussion in productive ways with a higher participation score. Students who fail to participate regularly (e.g., demonstrating a lack of preparation or involvement during lab exercises) or who participate in counterproductive ways (e.g., by dominating the conversation, making inappropriate comments, or getting off-task) can expect to earn a lower score.

5.3  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  
Most class days will involve collaborative laboratory work; I randomly assign in-class lab partners that rotate every three days. Labs 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.
You might not complete the labs during class. It is very important that you finish these outside of class to be sure that you are engaging in all the covered material. Like playing an instrument or speaking a foreign language, the only way to become proficient is to practice, practice, practice!
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. Some labs are designated on the schedule as required, while others designated as extras may be completed and submitted for extra credit.
As a special incentive for mastering the laboratory exercises, 30-50% of the problems on each test and on the final exam will be taken from the laboratory exercises (with only slight editing).
Projects  
Each of the eight modules concludes with a required project, involving both a computer program and associated commentary. The projects require you to integrate the material from the module by meeting several somewhat open-ended specifications.
Collaboration  
Collaboration on labs and projects is strongly 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.
Deadlines  
Deadlines for the labs vary throughout the semester and are posted on the course schedule.
Grading  
A general rubric is associated with all labs and projects; additional specific grading criteria are applied to each lab and project individually.

5.4  Homework assignments

Supplemental homework assignment problems extend the range of problems considered in the course and help sharpen problem-solving skills. To support this objective, all homework problems are to be done individually.
While you may ask the instructor about any part of the course (including any homework problem) at any time, you must not discuss any homework problem with other students (e.g., students from the class, CS majors, or other students). Allowable help from peer educators is limited. See Allowable Help from Peer Educators
Homework assignment problems numbered 6 or higher may be turned in for extra credit.

5.5  Quiz and Exams

As opportunities for you to demonstrate your grasp of the course material, there will be one C quiz, two midterm hour exams, and a final exam, all in-class.
C Quiz Week 4 Tuesday 10 February
Midterm Exam 1 Week 7 Friday 6 March
Midterm Exam 1 Week 12 Wednesday 22 April
Final Exam - Thursday 14 May, 9 am
You should find the exams challenge you to go beyond what we have done in class.

6  Partner responsibilities

Work on labs and projects in this course is often done collaboratively (in pairs, occasionally in a group of three). Many studies suggest substantial benefits to learning with this type of group work. However, to be successful, collaboration requires partners to participate actively .
As noted above, partners should actively participate throughout class sessions and make arrangements to meet in the lab outside of class to finish labs or projects, as needed. Each partner has an obligation to attend and contribute during planned out-of-class sessions.
Failure to meet one's responsibilities to a group negatively impacts the individual and impedes the partner's education. Thus, except in exceptional circumstances (e.g., illness, family emergencies, serious injury), failure to follow through with one's responsibilities as a partner may have a significant impact on one's course grade and/or one's standing in the course.
For more details and suggestions on how to be an effective pair programmer, please read the following article.
Wray, S. (2010). How pair programming really works. IEEE software, 27(1), 50-55.

7  Grading

My goal is for everyone taking this course to be able to demonstrate familiarity, fluency, and excellence with the course concepts. I would be very happy if you all met the goals above and received "A"s. The following weighting of individual activities will provide a basis for evaluation.
Discussion and participation 5%
Lab writeups 15%
Homework problems 20%
Projects 15%
C Quiz 5%
Midterm Exams 20%
Final exam 15%
Best of homework and midterms 5%
Some work may be graded by someone other than the instructor. However, any questions or concerns about grading should only be directed to the instructor.
The following is proposed as the grading scale for the course.
Average % Receives Grade Points Definition
93-100 A 4.00 Excellent
88-92 A- 3.67 Excellent
85-87 B+ 3.33 Good
81-84 B 3.00 Good
78-80 B- 2.67 Good
74-77 C+ 2.33 Satisfactory
68-73 C 2.00 Satisfactory
55-67 D 1.00 Passing
0-54 F 0.00 Failing
To compensate for the unpredictability of learning exercises' outcomes, the brackets (left column) may be adjusted upward (but not downward).

7.1  Extra credit

Labs and Homework  
A variety of labs and homework problems may be completed for extra credit. These will be indicated on the course schedule. Extra credit points for each accumulate in their respective category (i.e., lab writeups or homework problems).
Thursday Extras, etc.  
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 attended, with 1 point extra credit counted toward homework problems and 1 point extra credit counted toward lab writeups. Additional extra credit opportunities may be announced through the semester. To earn this extra credit, you must send me an email with a paragraph or two (plain text, please, no attachments) summarizing what you learned within one (1) week of the event. Do not send a summary of the content; I find reading your reflections on the content more interesting than reading a simple recapitulation.
Limits  
Extra credit from any source may only raise your final grade at most one bracket. For example, if your grade average without extra credit is 79% (a B-), but your extra credit raised your average to 85% (a B+), your final grade would be capped at a B. Thus, you should plan to do as well as possible as the semester progresses.

8  Attendance

Because is a collaborative, discussion-based course, your presence is integral to your learning. Thus, 1.5% will be deducted from your overall grade for each absence. I know that sometimes "things happen." Therefore, you will be granted one unexcused absence from class without penalty. However, this rebate is cancelled upon a second absence.
If you are absent, you must send a written explanation (email is appropriate) before class except in the (rare) case of dire emergency. (Consider the analogy for phoning in sick for work; you wouldn't do it at 4 PM.)
Because I do not wish you to risk harm to yourself or others, I am likely to moderate penalties in case of illness.
If you know in advance that you will be absent for any reason, you must notify me in writing (again, email is fine) at least 7 days in advance to make arrangements for considering your absence excused.
If you do miss a class, you must first talk to a classmate about any material that you may have missed. After that, you may follow up with me about any further questions or concerns.
You should complete the lab assigned for any days you are absent and be sure you understand the material.

9  Academic honesty

As students, you are members of the academic community. Both the College and I expect the highest standards of academic honesty, as explained in the Grinnell College Student Handbook,
http://catalog.grinnell.edu/content.php?catoid=10&navoid=2134\#Honesty_in_Academic_Work.
Among other things, this means clearly distinguishing between work that is your own, and work that should be attributed to others. This includes ideas, examples, and code that you draw from labs and readings.
It is expected that the collaboration policies given in this syllabus, on particular assignments, and in the allowable help from peer educators will be followed. In particular: As an instructor, I will meet my obligation to bring any work suspected to be in violation of the College's Academic Honesty Policy to the attention of the Committee on Academic Standing, after which there is no recourse with me.

10  Deadlines

Work is due at the time and date specified in the assignment. Unless otherwise specified, the deadline for a lab, project, or homework problem is 11:30 PM on the date specified. Paper copies must be submitted the following day in class. In all cases, it is presumed the physical copy matches the electronic copy. Any discrepancies (other than formatting) will be considered a misrepresentation of your work and referred to the Committee on Academic Standing.
Assignments due on days for which you have a prior excused absence must still be submitted by the deadline.
A late penalty of one letter grade will be deducted in each subsequent twenty-four hour period after the deadline.
Exception: Deadlines for assignments involving programming will automatically be extended by at least one class period if MathLAN is down for an unscheduled period of 3 or more hours during the two days preceding the assignment due date.
Absolute deadline: All work (except the final) must be submitted by Friday 8 May at 5 p.m. (Note that this is earlier than the institutional deadline).

11  Getting help

11.1  Peer educators

Our course mentors will hold weekly evening mentor sessions to go review, connect, and/or go further in-depth on the course topics.
The Computer Science Department makes tutors for CSC 161 available for help in the open laboratory, SCI 3815 (Sunday-Thursday, 7-10 PM). Peer tutors may also be available for regular, more intensive one-on-one tutoring. As the course gets underway, please let me know if you are interested in regular weekly individual tutoring. I may also recommend individual tutoring.

11.2  Discussion with Piazza

For online class discussion or Q&A we will use Piazza, which is designed to get you help fast and efficiently from your classmates, mentors, and myself. Rather than emailing questions, please to post your questions on Piazza: https://piazza.com/grinnell/spring2015/s15csc16102. You must ensure your queries and responses respect the academic honesty and collaboration policies for the course and specific problem.

11.3  Office hours

Please come by during my office hours to discuss the course content, get any extra assistance, or just talk about how the course is going. Note that if multiple students have similar questions or issues, we may work together as a group. If you cannot attend a scheduled office hour, you may also email me to schedule an appointment; please include 3-4 possible meeting times so that I can pick one that works for me.
Half of my office hours are open, "drop-in" times for students with quick or unplanned questions. If there is anyone waiting, I try to will limit our time to ten minutes to respect others' time. The other half may be reserved by signing up for a 15 minute slot on the bulletin board outside my office.
I enjoy getting to know my students, but I prefer to reserve office hours for academic matters. If you would like to have a more informal conversation, I would be delighted to accept an invitation to eat lunch with you at the Marketplace.

11.4  Email

Email is also a reliable way to contact me, but please allow 24 hours for a response (except on weekends, when I do not regularly read email). You may also call me in my office (x9812) for more urgent matters (e.g., you will be missing a lab due to illness).
Thanks to Janet Davis, Sam Rebelsky, and Henry Walker for many elements of this syllabus. Henry Walker wrote the Textbook (3) section, the topics list of the Overview (2), and most of the Module Laboratories and Projects (5.3), and partner responsibilities (6) in CSC 161: Imperative Problem Solving and Data Structures under a Creative Commons Attribution-NonCommercial-Share Alike 4.0 International License.
Copyright © 2015 Jerod Weinman.
cc-by-nc-sa.png This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 4.0 International License.

Footnotes:

1This is a minimum recommendation for achieving "satisfactory" (i.e., C-level) results. "Good" or "excellent" results may require a greater investment.