Syllabus



ProfessorYuan-Fang Wang
OfficeHarold Frank Hall (HFH) 3113
Email addressyfwang@cs.ucsb.edu
TAs Kasturi Bhattacharjee
kbhattacharjee@cs.ucsb.edu

Da Zhang
dazhang@cs.ucsb.edu

Aaron Magat
ajmagat@cs.ucsb.edu

Wei-Tsung Lin
weitsung@cs.ucsb.edu

Shiyu Ji
shiyu@cs.ucsb.edu

Readers Anastsiya Lazareva
anastasiya@cs.ucsb.edu

Xin Liu
xinliu@cs.ucsb.edu

Aviral Takkar
aviraltakkar@cs.ucsb.edu

OfficeTrailer 936 / CSIL lab
Office Hourshttp://www.cs.ucsb.edu/~cs8/office_hours.html
Class Web page
http://www.cs.ucsb.edu/~cs8

Course Description 

Introduction to elements of computer science and program development for students with little to no programming experience. Algorithms, basic programming concepts, variables and expressions, data and control structures, program design, debugging and documentation.

Python 3 is the programming language for this course.

Computer Science is the study of algorithms and data structures. An algorithm is a well-defined, step-by-step sequence of instructions that can be used to mechanically determine the solution to some well-defined problem.You probably use algorithms every day. For example:

In the case of using an index, this is probably an algorithm you may have learned in grade school, and it has been so long since you learned it, that now you don't even think about it, you just do it. Finding a space in a parking lot and knowing when to give up and look elsewhere is "just common sense"; this probably isn't something you were ever "taught", or even have to think very much about. You just do it.

Computers don't currently have this capability, i.e. the capability to "pick up things by common sense" and it seems unlikely that they will within our lifetime, unless there are major breakthroughs in the field of Artificial Intelligence. Such breakthroughs have been predicted for a while, but they haven't happened yet. (Maybe you'll be the one to figure out how to achieve this!)

So, for the time being at least, it falls to humans to design algorithms that computers can use to solve problems. In many cases, these algorithms are "just common sense", the computer equivalent of looking for an empty parking space in a parking lot (and knowing when to give up). Algorithms like this are easy to design. Many of the algorithms we'll see in this course are like that.

In other cases, the algorithms are very complex, or very subtle, and coming up with them is a deep intellectual challenge. Furthermore, the impact of a better algorithm on society can be very large. For example, new algorithms in the field of computational science modelling chemical and biological reactions with computer simulations can lead to breakthroughs such as new drugs to fight disease, or renewable sources of energy.

A second important topic in this course is data structures. Data structures are methods to summarize, organize and store data. It should not be hard to convince yourself that Google does not just "throw" data on hard drives haphazardly and then fumbles through all that data to find answers to your queries. An algorithm will take forever to fulfill a query if it has to perform a "needle-in-a-haystack" search through Google-size data, no matter how intelligent it is. In this course, you will learn some fundamental data structures in list, tuple, and dictionary and their associated operations.

The symbiotic relation of algorithms and data structure is best illustrated by the title of a textbook by Professor Niklaus Wirth "Algorithms + Data Structures = Programs" (Prentice-Hall). A good program must code efficient and accurate algorithms that utilize suitable organization of data to achieve its goal.

Human languages such as English and Spanish are not very well suited for expressing algorithms, at least not for expressing them to a computer (that have their problems for communicating with humans too!). So, special languages are used. In this course, we'll learn the Python programming language. We choose Python rather than Java or C++ because:

This course provides you with the opportunity to become a pretty good beginning programmer, and be well prepared for an intermediate programming course such as CS16 (the first course that counts towards the CS major at UCSB, and which requires at least one quarter of prior programming experience.)

I say that the course "provides an opportunity", because you will only become an good beginning-level programmer if you put a lot of time and effort into this course. This is true no matter how much thought and attention the instructor puts in the lectures, assignments, and exams.

The swimming/guitar/painting analogy

You cannot learn to swim, play guitar, or paint from a textbook or a lecture. You can only

The same is true of programming. Programming is not a series of facts to be memorized, and you cannot "cram" for a computer science exam. You must practice, practice, practice.

Prerequisites

None. However CS8 is not open for credit to students who have completed CS 5, CS 10, CS 16 or Engineering 3. if you already know a programming language well (this means the equivalent of a quarter-length programming course), this is not the course for you.

Basic Goals

  1. Learn fundamental principles and concepts of computers and programming, including structured programming techniques.
  2. Learn to use the Python interpreter and write Python programs.
Instruction Schedule

Lecture:

TR 3:00pm - 4:15pm, BRDA 1610
Lab (Wednesday in PHELPS 3525): 
08:00 - 08:50 (EnrlCd 08334)
09:00 - 09:50 (EnrlCd 08342)
10:00 - 10:50 (EnrlCd 08359)
11:00 - 11:50 (EnrlCd 08367)
12:00 - 12:50 (EnrlCd 57513)
13:00 - 13:50 (EnrlCd 57521)
14:00 - 14:50 (EnrlCd 57539)
15:00 - 15:50 (EnrlCd 57547)



Required Textbook 
Miller/Ranum cover

Bradley N. Miller and David L. Ranum.
Python Programming in Context, (second edition), Jones and Bartlett Publishers, 2013.

Two copies of the textbook have been put in the Reserve Book Service, Davidson Library. They are available for 2-hour checkout.  Please note that I do not follow any particular book closely. So I do not force you to get this particular book. There are tons of tutorials on Python programming on the Web. Again, reading a book or following an online tutorial is important, but you learn Python by practice. It is a lot like if you get lost in a foreign land, you can consult locals you meet, hotel clerks, policemen or policewomen, Google Map, etc., most likely they all point you in the right direction. But you will not get there unless you walk, bike, or drive there yourself.

Course Outline 

Pair Programming 

After the preliminaries in the lab are completed, you will be assigned a pair for what we term pair programming.  You will work with this partner in all laboratory sessions as indicated.  In addition, you will work with your partner on programming assignments unless you are told otherwise.  Whether or not you choose to utilize pair programming in your programming assignments, every individual is responsible for completing all work.  Even if you do not formally utilize pair programming, you may ask questions of your pair programming partner if you get stuck.

Assignments

In this course, learning by doing means all assignments are programming assignments that must be completed on computers. No "hand-waving" is allowed - either your proram does what is expected or you receive a 0 for the program.

Please note that you must turn in your programming assignments by using the "turnin" program. Emailing them or placing them in some directory in CSIL is not enough.

Late Policy

You may turn in programming assignments 24 hours late for a 10% penalty.  After one day late, they will no longer be accepted. Make sure to check your submission within that 24 hour window.  .

Grading

Furthermore, unannounced attendance check may be conducted at any time. If you miss more than one such attendance check without a documented medical emergency, you will receive an F in this class.

To guard against relying too much on your partner or other sources, if your average on the exams is well below the class average, you may receive an F in the class.

A conventional 100 point scale will be used to map your numeric average into a letter grade, with the lower three and upper three points of each range representing plus/minus. /p>
grade >= 93A     73 <= grade < 77C
90 <= grade < 93A- 70 <= grade < 73C-
87 <= grade < 90B+ 67 <= grade < 70D+
83 <= grade < 87B 63 <= grade < 67D
80 <= grade < 83B- 60 <= grade < 63D-
77 <= grade < 80C+ grade < 60F

This 100 point scale represents the minimum letter grade you will be assigned at the instructor's discretion, the letter grade scale may be altered in the students' favor if this will be better reflect the students' mastery of the material. Thus, if there is a "curve", it will be applied at the end, not to individual assignments.

Important note on exam attendance

Assignments

All assignments are posted online on the class website. Weekly programming assignments are submitted electronically by using the "turnin" program.

Labs

The labs are mandatory. Attendance will be taken.  If you are more than 5 minutes late, you will receive a 10% penalty for that lab attendance. 

Emails

Make sure that all e-mails to the staff have the word "CS8" included in your subject line. Please be warned that your email may not be read otherwise and you should not assume that it has been received.

Announcements

Announcements will be made on the course web page:  http://www.cs.ucsb.edu/~cs8

Class discussion and  Q&A

We will be using Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates, the TAs, and myself. Rather than emailing questions to the teaching staff, you are encouraged to post your questions online. You can enroll here: Piazza CS8

Notices

UCSB Policy on Academic Honesty

It is expected that students attending the University of California understand and subscribe to the ideal of academic integrity, and are willing to bear individual responsibility for their work. Any work (written or otherwise) submitted to fulfill an academic requirement must represent a student's original work. Any act of academic dishonesty, such as cheating or plagiarism, will subject a person to University disciplinary action. Using or attempting to use materials, information, study aids, or commercial "research" services not authorized by the instructor of the course constitutes cheating. Representing the words, ideas, or concepts of another person without appropriate attribution is plagiarism. Whenever another person's written work is utilized, whether it be a single phrase or longer, quotation marks must be used and sources cited. Paraphrasing another's work, i.e., borrowing the ideas or concepts and putting them into one's "own" words, must also be acknowledged. Although a person's state of mind and intention will be considered in determining the University response to an act of academic dishonesty, this in no way lessens the responsibility of the student.

(Section A.2 from: http://www.sa.ucsb.edu/regulations, Student Conduct, General Standards of Conduct)

Also see the Plagiarism section below.

Plagiarism

Cooperative work is an important part of learning; you are encouraged to study together, discuss the lectures, and discuss the software solutions.

With the exception of your buddy for pair programming, DO NOT,

If you violate these rules, you will receive a grade of F and a letter will be sent to the campus Judicial Affairs Office.

Disclaimer

This syllabus is as accurate as possible, but is subject to change at the instructor's discretion, within the bounds of UC policy.



Thanks to Omer Egeciolu, Phill Conrad, Diana Franklin and Michael Costanzo who taught CS8  before and made available their course material.

Back to the Course Home Page