CS:1210 (22C:016) Computer Science I: Fundamentals
Spring 2015

9:30-10:20 MWF Room W10 PBB (John Papajohn Business Building)

Sriram V. Pemmaraju
101G MLH, sriram-pemmaraju@uiowa.edu, 319-353-2956
Office Hours: 1:30-2:30 M, 10:30-11:30 W, 1:00-2:00 Th (and by appointment)

Course website: http://www.cs.uiowa.edu/~sriram/16/spring15/
Department website: http://www.cs.uiowa.edu/

Computer Science I: Fundamentals is a rigorous introduction to computer science in which students study and practice algorithm design and programming as a way to solve computational problems. During the semester, students will gain proficiency in a number of skills that are fundamental to solving computational problems, namely: (i) understanding problem descriptions that may be stated incompletely or imprecisely, (ii) breaking down a problem into simpler subproblems, (iii) designing correct and efficient algorithms, (iv) translating algorithms into programs, (v) testing and debugging programs, and (vi) understanding time efficiency and memory usage of programs. Students will learn the importance of iterating through the above sequence of steps to build correct, well-documented, efficient, and reusable programs.

The main programming topics include variables, expressions, data types, control-flow statements, exception handling, functions, recursion, data structures, objects and classes. The course will use the Python programming language. However, the course is much more than a Python programming course; as suggested by the name of the course, it serves as an introduction to the fundamentals of computer science. Also, learning to program in one high-level language (in this case, Python) is expected to open the doors to programming in any other high level language (think Java, C, C++, Scala, etc.). Python can be used on Linux/Unix, Mac, and Windows platforms and instructions on how to download Python onto your personal computers will be provided.

The course consists of three lectures per week (MWF 9:30-10:20), with an additional discussion section that meets once per week on Tuesdays.

The course is the starting point for computer science major and minor curricula, and also useful to other majors as a rigorous introduction to computational problem solving, algorithm design, and programming.

Students are not required to have previous computer programming experience, but basic knowledge of how to use a computer (word processing, using a web browser) is assumed; students should have competency with basic arithmetic and algebra (formally, this means 22M:005 or MPT II score of 20 or above or MPT III score of 10 or above).

There is no required textbook for this course. Lecture slides will be regularly published via the course web site. Homeworks, projects, quizzes, exams and weekly practice problem sets will also be published on the course web site. Also solutions to quizzes, homeworks, projects, and exams will be regularly posted and all together these will form a significant resource for students. There are a number of excellent resources for Python and free Python textbooks that are available online. Links to readings from these will be posted on the course page as the semester progresses.

Schedule and Tentative List of Topics
The course is broken up into three parts, each part will take roughly 5 weeks and will end with an exam. The three parts of the course and the corresponding schedule is given below.

Teaching Assistants
Currently the course has been assigned 3 teaching assistants (TAs), who are graduate students in the computer science department. The TAs will grade all your assignments, answer your questions in person and online, and lead the discussion sections. By the end of the first week of the semester, specific information about the TAs including their names, e-mails, office locations, office hours, etc., will be posted on the course website. You should think of the TAs as the front-line for getting help in this course. All together they will have about 9 office hours per week, spread through the week. You should feel free to see any TA, not just the one who leads your discussion section. The discussion sections will complement the lectures in a variety of ways and will provide an opportunity to check your understanding of the material covered in the lectures. Due to their small size, the discussion sections will provide an environment in which it is easier to ask questions and have interactive discussions. The schedule and location for discussion sections is as follows:

	CS:1210:0A01	8:30-9:20 T	221 MLH (MacLean Hall)
	CS:1210:0A02	9:30-10:20 T	213 MLH (MacLean Hall)
	CS:1210:0A03	11:00-11:50 T	116 MH (Macbride Hall)
	CS:1210:0A04	12:30-1:20 T	66 SH (Shaeffer Hall)
	CS:1210:0A05	3:30-4:20 T	248 JH (Jessup Hall)
	CS:1210:0A06	5:00-5:50 T	346 JH (Jessup Hall)

Plus/Minus grading will be used for the course. There are the four components of evaluation that will collectively determine your grade.

Homeworks and programming projects will have to submitted via ICON's dropbox feature. Grades will also be published on ICON. Solutions will be provided on the course page (http://www.cs.uiowa.edu/~sriram/16/spring15/) for all the homeworks.

Tardiness and Absences
Late submissions will not be accepted and make-up exams should not be expected. To get credit for assignments you should plan on turning in what you have on time. Having said this, it is also worth noting that this course will follow the University and College of Liberal Arts and Sciences (CLAS) policies that require that students be allowed to make up missed examinations and assignments due to illness, certain University activities, circumstances beyond a student's control (such as a death in the family), or mandatory religious obligations. See http://clas.uiowa.edu/students/handbook/attendance-absences for more details on this policy. Attendance will not be marked in lectures or in discussion sections, however there is a strong correlation between attendance and performance in the course. For most students, to be successful in this course will require consistent attendance in lectures and discussion sections.

The key to completing assignments (especially projects) on time is starting early and asking questions. An ICON discussion board will be opened for every homework and project. The TAs and the instructor will be glad to help with any questions you may have on the assignments, either via the discussion board, by e-mail or in person. So please feel free to visit us often during our office hours and if necessary, outside our office hours as well by making an appointment.

Communicating with Instructors and TAs
Asking the instructors and TAs questions on the discussion boards or via e-mail is quite appropriate and any e-mails related to CS:1210 will be answered within 24 hours of e-mail receipt. You should make sure to include CS:1210 in the subject line to ensure that your e-mail is not consumed by spam filters. Try to state your question(s) as clearly as possible. The more easily understood you are, the more likely it is that you will receive a quick response. Occasionally the instructors or TAs may send e-mail announcement to all students in the class at your uiowa e-mail address. Note that you are responsible for all official correspondence sent to the uiowa address and so make sure that you check this e-mail account regularly. The instructor and TAs would also prefer receiving e-mails from your uiowa account, rather than from commercial e-mail providers (e.g., gmail or yahoo!).

We will try to call you by your preferred name. As a matter of professionalism, you should refer to the instructor as "Prof. Pemmaraju" or "Dr. Pemmaraju." Similarly, you should refer to your TAs as ``Ms.'' or ``Mr.'' followed by last name, unless the TAs are okay with a less formal mode of address.

Effort Level
Successful completion of this course will provide a sound foundation for the rest of the computer science major. If you are a computer science major, this could be the first step towards an exciting and satisfying career in computing. Even if you are not a computer science major, the problem-solving, algorithm-design, and programming skills you learn in this course will help you in your primary career, whatever that might be. It is my experience that for most students success in this course will only come about as a result of a great deal of consistent focus and effort and "deliberative practice." According to University guidelines, a student should expect to work for 2 hours per week (outside the classroom) for each course credit. This is a 4 credit course and so you should expect to spend on average about 8 hours per week reading lecture notes, solving homeworks, completing programming projects, preparing for quizzes, etc. However, the "8 hours per week" estimate is an average and also presupposes that you attend classes and discussion sections, visit faculty and TAs with your questions during their office hours, and are in general thoughtful about how you approach the material.

Course Accounts
You will need CS course accounts to use the machines in the computer lab (301 MLH). Some of you may already have such accounts; the rest of you will get CS accounts by the end of the first week. You will also need a HawkID and a password to login to ICON to electronically submit your assigned work.

Course Home
This course is run by the Computer Science department which is part of the College of Liberal Arts and Sciences. This means that class policies on matters such as requirements, grading, and sanctions for academic dishonesty are governed by the College of Liberal Arts and Sciences. Students wishing to add or drop this course after the official deadline must receive the approval of the Dean of the College of Liberal Arts and Sciences. Details of the University policy of cross enrollments may be found online at http://www.uiowa.edu/~provost/deos/crossenroll.doc.

Students with disabilities
We would like to hear from anyone who has a disability which may require seating modifications or testing accommodations or accommodations of other class requirements, so that appropriate arrangements may be made. Please contact the instructor by e-mail or in person during office hours. For more information visit the website of Student Disability Services at http://sds.studentlife.uiowa.edu/.

Academic Dishonesty
The components of evaluation for this course (quizzes, homeworks, projects, and exams) are meant to test your individual mastery of the material. Hence none of these are collaborative and under no circumstances should you pass off the work of someone else as your own. Doing so would constitute academic dishonesty. This also applies to code or other material that you might find on the internet. Providing answers to another student also constitutes academic dishonesty. Note that we will routinely use available software systems for detecting software plagiarism, to test any suspicions we might have.

We do want students to talk to each other about concepts and ideas that relate to the class. We believe that this type of peer-interaction can be quite helpful to students. However, this interaction needs to happen without actual exchange of answers (e.g., code snippets) to homeworks and projects. Of course, students are welcome (in fact, encouraged) to study together for quizzes and exams.

If you are unclear about what constitutes academic dishonesty contact the instructor or consult the CLAS Code of Academic Honesty at http://clas.uiowa.edu/students/handbook/academic-fraud-honor-code.

Student Complaints
If you have any complaints or concerns about how the course is being conducted please feel free to talk to the instructor. You are also welcome to get in touch with Prof. Alberto Segre, the Computer Science department chair (alberto-segre@uiowa.edu, 319-335-1713, 14D MacLean Hall). Consult the CLAS statement on Student Rights and Responsibilities at http://clas.uiowa.edu/students/handbook/student-rights-responsibilities for more information.

Classroom Etiquette
Showing up to class late, leaving your cell phone ringer on, reading a newspaper in class, chatting with your friends, etc., can be quite distracting to the instructor and to fellow students. If you are in class, it is your responsibility to pay attention and to make sure that you are not doing anything that makes it harder for fellow-students to pay attention. When disruptive activity occurs, a University instructor has the authority to determine classroom seating patterns and to request that a student exit immediately for the remainder of the period. One-day suspensions are reported to appropriate departmental, collegiate, and Student Services personnel (Office of the Vice President for Student Services and Dean of Students). For more information consult the CLAS statement on Student Rights and Responsibilities at http://clas.uiowa.edu/students/handbook/student-rights-responsibilities.

University Statement on Sexual Harassment
Sexual harassment subverts the mission of the University and threatens the well-being of students, faculty, and staff. All members of the UI community have a responsibility to uphold this mission and to contribute to a safe environment that enhances learning. Incidents of sexual harassment should be reported immediately. See the UI policy on sexual harassment at http://www.uiowa.edu/~our/opmanual/ii/04.htm for assistance, definitions, and the full University policy. Also see http://www.sexualharassment.uiowa.edu/ for additional resources.

Reacting Safely to Severe Weather
In severe weather, class members should seek appropriate shelter immediately, leaving the classroom if necessary. The class will continue if possible when the event is over. For more information on Hawk Alert and the siren warning system, visit the Public Safety web site at http://police.uiowa.edu/stay-informed/emergency-communication/.