Narges Norouzi, Faculty in the Computer Science & Engineering department.
M.A.Sc and P.hD. in Computer Engineering from the University of Toronto, Canada.
Email: nanorouz@ucsc.edu
Research in Biometric Systems, Statistical Signal Processing, and Machine Learning.
Teaching Assistants:
Rafael Espericueta; resperic@ucsc.edu
Michael Briden; mbriden@ucsc.edu
Hou-I Lin; hlin64@ucsc.edu
Evan Olds; eolds@ucsc.edu
Katelyn Stone; khstone@ucsc.edu
Tutors:
An introduction to programming in Python
An introduction to theoretical problems in computer science
We do not talk about (in any depth):
Applications of computing
Other programming languages (Java, C, C++, Matlab, etc.)
History of computing (well, not much)
How to use Microsoft office or create a web page(!)
Understand the fundamentals of programming.
Understand the fundamentals of object-oriented programming.
Gain exposure to the important topics and principles of software development.
Have the ability to write computer programs to solve specified problems.
Use software development environment to create, debug, and run programs.
The UCSC honor Policy is in effect in this class. As a student in the course, you also agree to follow the following principles.
You are not allowed to describe problems on an exam or quiz to a student who has not taken it yet. You are not allowed to show exam papers to another student or view another student's exam papers while working on an exam.
No code or solutions are to be distributed to other students either electronically (i.e. e-mail) or on paper. If you are looking at another student's code (even in the lab), you are in violation of this honor policy.
The UCSC honor Policy is in effect in this class. As a student in the course, you also agree to follow the following principles.
Unless otherwise specified, the only allowed collaboration for the assignments is the discussion of ideas; no collaboration is allowed on the exams and assignments.
Unless otherwise noted, exams and individual assignments are pledged: you promise that you have neither given nor received unauthorized help.
When you're in doubt regarding the honorability of an action, you MUST ask before doing it.
5 bi-weekly assignments: 40% - due every other Sunday
10 readings/practices from zybooks: 10% - due every Sunday
Attendance: 5% - due ~10 minutes after each lecture
Midterm: 20%
Final exam: 25%
5 programming assignments due at 11:59 pm on Sundays every other week.
Submission is through Stepik. You need to sign in on Canvas and navigate to Stepik course through the "Stepik submission" module.
Assignments will be marked out of 100 depending on the number of test cases you pass on Stepik.
Late policy:
2 free "grace days", no explanation necessary
You cannot use both of them on one assignment
No late submission after using both grace days
Fairness is a challenge in a class of ~300 students
If you feel something is not fair, you need to let me know. I will do my best to correct it
If you think that this course is too easy, let me know. I will do my best to correct it
I am not always the best person
I easily get flooded with emails, as I have hundreds of students (~450 this quarter)
The TAs can often answer a question just as easily as I can, and much quicker
Piazza!
If you feel like you do not want other students to see your question, you can post it privately for instructors - or post anonymously
Our response time is on average below 20 minutes
We will use an online interactive book called Zybooks
Zybooks:
Sign in or create an account at learn.zybooks.com
Enter zyBook code: UCSCCSE20Fall2019
Subscribe: A subscription is $40 and will last until December 30th.
"How to think like a computer scientist":
http://www.openbookproject.net/thinkcs/python/english3e/
Each lecture has one associated IPython notebook
This lecture's notebook is here: http://bit.ly/2yY3ECC
The notebooks make it easy to poke around with the examples are also a great way to do basic exploratory analysis.
Collaboratory: Python notebooks can be edited and run in your web browser using Google Collaboratory
To make your own copy of the lecture, open up the above link and then make a copy in your Google drive
Alternatively, you can run the notebook using Jupyter (https://jupyter.org/)
# Hello world program - this is a comment
# (it's just to make the code readable)
print("Hello, world!")
## A basic program
# Inputs - let's ask the user to input two numbers and
# call them x and y (x and y are called variables)
x = float(input("Please enter a number: "))
y = float(input("Please enter another number: "))
# Doing stuff
z = x + y # Add the inputs together
# Outputs
# Let's print the result
print("The sum of your two inputs is:", z)
Python is (basically) an interpreted language:
Interpreted languages are generally read line-by-line and executed line-by-line.
This allows you to use Python interactively
You can also get the interpreter to use files, which is much better when you want to save your work.
## Our first debugging session!
# Warning - most computer programming is debugging!
# IMO, it is the process of taking an idea and refining it
# into a precise, working program
x = 1
y = 2
## Let's try an assert - a check you can put in your code to establish that something
## is the way you think it should be
assert x + y == 4
# This is a comment
# Code can be hard to read, and yet you
# often have to edit and maintain code over time.
# Comments let you keep notes in your code.
# Rule of thumb: Good code is often about 50% code and 50% comments
# It is amazing to read code you wrote last year - you
# likely won't remember how it works without comments!
# 80 Character limit: Because some text editors don't automatically line-wrap it is a good idea to try to keep your comments to less than 80 or so characters by spreading them across multiple lines.
# Later on, we'll see comment strings, which are another way
# of documenting code.
In general, a type is the formatting of bits to represent a given information
Types impose constraints, e.g. ints are whole numbers only
Integer
Float
String
Boolean
# What's the "type" of 1?
# For now, just understand that we can use type()
# to find out the 'type' of any object in Python
type(1)
# Outputs <class, 'int'> or prints int
# Similarly, 5 is an integer (called an 'int')
type(5)
# Okay, so what's the type of a decimal?
type(3.142)
# And the type of 1.0?
# (there is no room for indecision/ambiguity in a programming language)
type(1.0)
# What about text?
type("hello")
# Strings can be expressed a bunch of other ways:
type("hello") # Double quotes
type('hello') # Single quotes
type("""hello""") # Triple double quotes
type('''hello''') # Triple single quotes
# We can embed single quotes in double quotes:
type("This is a string containing a 'single quoted substring'")
# Trying to embed single quotes
# in a single quoted string naively does not work
type('This is a string containing a 'single quoted substring'')
# And vice-versa, we can embed double quotes in single quotes:
type('This is a string containing a "double quoted substring"')
# Single and double quoted strings can't span multiple lines. This is an error
type('This is an
attempt to have a string on two lines')
# Triple quotes (either single or double), allow embedding essentially anything,
# including spanning multiple lines:
type("""Boom, now
we can make crazy strings that ' nest quotes in quotes " " ' etc.
and which span multiple lines""")
# You will also see this a lot in Python code:
"""
A comment string.
These can be used to document some code
across multiple lines. We'll later see this at the top
of classes and functions as a standard way of giving
a description string.
"""
# Will print: " \nA comment string. \n\nThese can be used to document some code\n ... "
# It is useful to know that int, float and string types can be cross converted
type( int('5') ) # This int() turns the string into an integer
type( str(5) ) # We can also go back the other way
# Of course, this doesn't work because int() doesn't how to interpret 'foo'
int("foo")
# We can also convert between floats and ints, doing
# rounding as we go float --> int
int(5.999)
float(5)
# Prints 5.0