University of Michigan Computer
Science and Engineering DiVISION
EECS 182 (SI 182): Building Applications for Information
Environments
Syllabus
Term: |
Winter 2013 |
Instructor: |
Prof. Atul Prakash |
Many
of the things we take for granted today, including smartphones,
tablets,
business analytics, biology, listening to digital music, online games, etc., are enabled
by computer software and hardware. This course is about learning fundamentals
of designing software. Designing software requires learning a language to teach
a computer to do things for you. Such languages are called "programming
languages". Over the years, a
variety of programming languages have evolved (and continue to evolve). In this
course, we will introduce you to two of the programming languages: Python and C++. If you have a laptop (recommended, but
not required), you will install them on your computer to keep and use during
the course and beyond. This course has been designed for students with no prior
programming experience.. Teaching a task to a computer through
precise sequence of instructions requires logical thinking and having
mathematical experience (e.g., as provided by Math 115) is helpful, even though
you will not be solving mathematical equations in this course.
Python
is a wonderful language for general applications and prototyping. It is one of
the three languages used at Google. In fact, Google hired the developer of
Python! It has extensive libraries for mathematical and data analysis, data
plotting, 2D and 3D visualizations, scraping web sites, text processing, etc.
Below are some examples where Python is used:
We will look at a few interesting Python packages during the
course that you will be able to your current and future courses. Many students
find that they are able to do information processing tasks in Python very
quickly that would be very hard to do with plain spreadsheets or standard software
tools.
C++ is another very popular programming language. C++ is used in
almost all the subsequent programming courses at Michigan. Both Mac OS and
Windows are largely written in C++. Other popular programming languages, such
as Java (used for Android applications),, Javascript (used for dynamic web pages), and Objective C
(used for iPhone apps) borrow heavily from C++.
This
semester, this course is not going to be entirely about learning programming,
but also becoming comfortable with different computing environments than just
Windows or Mac OS. To achieve that, we will provide you a different computing
environment in the form of a pre-packaged operating system, along with all the
Python and C++ software, in the form of what is called a virtual appliance. You
should be able to run it on your Windows or Mac OS computer. The pre-packaged
operating system is called Mint. It
is a flavor of Linux. There is going to be a learning curve and some initial
discomfort, but we hope that it will be short. The advantage is that the entire
class will have a standard computing environment and software for the course
and we will be able to update it as needed throughout the semester.
We
recommend this course to all students who want some exposure to computer
programming and software design skills. In the information age, these skills
are essential, irrespective of the degree you plan to pursue. More specifically, this course is an
appropriate prerequisite to EECS 282 or EECS 280. Furthermore, students in
other concentrations where data analysis is required (e.g., statistics,
economics, business) are likely to pick up valuable life-long skills.
EECS
183 and Engin 101 are alternative programming courses
to 182 – they are interchangeable as far as subsequent computer science courses
are concerned. Good programmers
can pick up new languages easily (usually a few weeks of effort), once they
know basic principles of programming.
EECS 182 introduces both Python and C++, with Python being useful even
if 182 is your only programming course. Engin 101 teaches C++ and MatLab,
with Matlab being useful for engineering students.
EECS 183 only teaches C++;
Future
EECS courses often use Linux and C++ and some use other languagues,
such as Python and Java. The way
EECS 182 is designed, you should come out of the
course knowing an additional operating system (Linux), several tools on that
(e.g., Emacs and how to work in a terminal), as well
as two programming languages (Python and C++). We are hoping you will become
comfortable in experimenting with different platforms and programming
environments after the course.
If
you enjoy this class, I encourage you to continue on to EECS 280.
1.
Slides/notes handouts from the lectures: Generally made available
via the web.
2.
Online resources for Python and C++ as given in the lecture slides.
3.
Textbooks: No specific textbook is required. But, it can be useful to have a Python
and C++ book at hand as a reference or if you prefer to read offline. You can
use an old edition or look up books in the library.
4.
If you wish to use your own laptop (recommended), it should be
running a recent version of Mac OS or Windows with at least 20GB free disk
space (you may be able to get by with 10GB, but 20GB provides a margin of
safety) and at least 4GB of memory (you may be able to get by with less, but
your system may run slower). If your computer has less memory, it is usually
cheap to buy and upgrade the memory. You should bring your laptop to the labs and
optionally to the lectures. You can also use CAEN computers. If you wish to do
that, you will need to get a CAEN account by visiting the CAEN hotline office
in Duderstadt Center on North Campus. We recommend
doing that even if you have a laptop, just to get familiar with CAEN computing
environment and having an alternative option in case you have trouble with your
laptop.
Students
in the course will use a number of tools including Python and a text editor. It
is possible to complete all the work in the course using free tools. There are
sufficient free tools to do the work on a PC or a Macintosh. We will talk about
these tools and their installation in the labs.
For
backup purposes I suggest you buy a 4-8GB flash drive. This will also allow you
to store applications you use in case you are without a laptop and available
computers do not have what you need installed. We will also provide you some instructions to backup your homeworks from your laptop to the university
infrastructure. Backups are important – every semester, I get a couple of
emails about computers dying a few days before a project deadline.
We are fortunate to be able to have excellent teaching staff
this semester. We will have two instruction aideswho
are available to help you throughout the semester. Below are the office hours
and contact information for the Professor and the IAs.
Though we have given individual email IDs, it will be better to send email to eecs182@umich.edu, which will reach all the
teaching staff and any of us can then respond.
Prof. Prakash |
IA: Vidal Borromeo |
IA: Noah James Hermann |
Grader: Lars Hamre |
Grader: Yiheng Wang |
Email ID: aprakash
Phone: 734-763-1585 Office hours: 9:30-11:30 Fri and 15min before and
after the class. Also, by appt. Location: Fri: 4741 BBB MW: find me near the classroom. Drop
email if you want to see me in office hours. |
Email ID: vidal
Office hours: Tu 6-10 PM Location: 1690 Beyester. |
Email ID: njherman Office hours: Wed. 4-8 PM Location: 2122, UGLI. |
Email ID: lhamre No office hours. Contact eecs182@umich.edu for grading questions. |
Email ID: yihengw No office hours. Contact eecs182@umich.edu for grading questions. |
The
course material will be made available on Ctools,
which is accessed via http://ctools.umich.edu.
The site will require authentication using your umich
ID and password. After that, you should see EECS (or SI) 182 in the list of
your sites. All the homeworks will be posted at the ctools site. If you have trouble getting to the course
information on ctools, just ask one of the TAs for
help.
The
best way to get help during the course will be via Piazza (link available on Ctools). We will keep a track of questions posted there and
attempt to reply. We also encourage students to reply to posted questions. You can post "anonymously" to
piazza, in which case your identity is only known to the teaching staff, not to
other students (that way, we can also contact you outside piazza). In our
experience, anonymous posts are rarely needed. No question is "dumb"
in the course. Chances are if you are confused about something, there are
probably other students in the course who are also confused about the same
thing and they will be glad that you asked about it.
Announcements
will be made either via Piazza or via Ctools. You
should get an email either way, unless you have disabled notifications. You can always find important
announcements in CTools -> Announcements or pinned
in Piazza at the top.
Before
posting a new question, you may want to search piazza's 182 group
to see if your question has already been answered. Piazza also permits private
questions that go only to the instructors. If you are posting code fragments in
Piazza, type
them in as follows:
<pre>
code goes here
</pre>
That
way, it will be properly formatted during display.
You
can send email to eecs182 AT umich.edu to reach all the teaching staff members.
Use that for regrade requests or clarifications on
grading, etc.
For help with projects, posting to Piazza is likely to get a faster response
and we may ask you to repost emailed questions to piazza before we respond so
that the questions and answers are also available to other students.
The
graded work in the course will be weighted roughly as follows to determine a
final percentage grade.
Programming Assignments |
36% |
Doing C++ CodeLab exercises |
6% |
Doing Python online tutorials |
6% |
Exams: |
50% (Midterm: 25% and Final: 25%) |
Class Participation: |
2% |
To get a C grade or higher,
you must do satisfactorily on both exams and projects, since a C grade is the
typical threshold for going on to subsequent EECS courses. The grading is on a "curve".
In the past, the average grade in the course has been around a B. To pass the course with a C or higher,
aim for around 65%, based on grading from past semesters. For an A- or higher,
aim for around 90%. Typically, the average on projects tends to high with a
small standard deviation and the average on exams tends to be lower with high
standard deviation.
Final is cumulative, though
it focuses more on material after the midterm. Midterm and final are expected
to be paper-pencil exams.
There
will be programming throughout the course (pretty much every week). Regular assignments allow
you to learn the material in small chunks and to keep a close eye on how well
you understand the material. In some cases, we will do part of the assignments
during a lecture, though you will submit it later.
Your
work C++ Codelab and Python online tutorials is only evaluated around
the final. You complete them at
your own pace, though we will give you target dates so that you get the most
out of the course. The grades will be based on the percentage of exercises
completed.
We
would like you to finish the Python tutorials first, even going ahead of the
lectures. C++ Codelab exercises should be paced with the lectures. We
recommend devoting a significant part of your lab time to these exercises and
asking for help from the IAs or someone in class who
has completed the problem if you get stuck on a problem. If you help someone,
do not give the answer to a problem – but it is OK to help conceptually to
guide in the right direction. These are the easy points in
the course, so don't miss them.
The
labs are also a good time to ask questions on the projects, though you will
probably find that you need to spend time outside the labs to complete
them. For significant help on
projects, office hours or piazza is best.
Feel free to make use of them. We can increase/decrease office hours time during the semester, depending on the demand.
Projects
will have a specific due date and time. You can submit late assignments in
order to get feedback. Late
submissions are marked down 10% if late up to 5 days (including holidays),
unless an extension or exception is announced in the class. They may receive a
zero after that though we still ask you to submit for brownie points –
submitting them can become a factor if your grade is borderline.
We highly encourage you to start early on projects -
they can take anywhere from a few hours to several days. If you
start late, you are likely to miss the deadlines. Grades on projects tend to be
either close to 100% or close to 0, since many of them are auto-graded – either
your program is right or wrong.
When you start early, you have time to get help if you get stuck on a
problem. If you are not making progress on a program after a few hours, it is
best to get help on piazza or in office hours – avoid frustrations.
Class
participation points are given at 0, 1, or 2, based on participation recorded
by i-clicker. If you have over 75% participation days
(out of days that we use i-clicker quizzes), you get
2 points. For 50%-75%, you get 1 point. For participation below 50%, you get 0
points. If your i-clicker is not working, you must
let a member of the teaching staff know right after the class and drop us an
email immediately as well so that we can manually record your participation. If
you miss a class for any reason (medical, travel, etc.), it is counted as a
miss. That is why we set the threshold at 75% to give you some leeway and to
account for situations where i-clicker fails to
record your participation but you were there.
Requesting Regrades
Project
assignments: Regrades must be requested within 7 days
of the time you get the grade back.
Exams:
Regrades must be requested on the day you receive
your exam back.
On
any regrade request, we reserve the right to regrade the entire project or exam. Your revised score may
be lower, same, or higher.
Honor Code: General Principles
All
students in the class are presumed to be decent and honorable, and all students in the class are bound by the College of Engineering
Honor Code. You may not seek to gain an unfair advantage over your
fellow students; you may not consult, look at, or possess the unpublished work
of another without their permission; and you must appropriately acknowledge
your use of another's work. Any violation of the honor policies appropriate to
each piece of course work will be reported to the Honor Council, and if guilt
is established penalties may be imposed by the Honor Council and Faculty
Committee on Discipline. Such penalties can include, but are not limited to,
letter grade deductions or expulsion from the University. If you have any
questions about this course policy, please
consult the course instructor.
Giving and Receiving Assistance on CodeLab
or online Python tutorials:
These
are expected to be individual work. Online Python tutorials as well as Codelab also have hints for many of the exercises – they
are not meant to be hard problems. Ask IAs or
professor if you need additional help or find that this is taking too much
time. Use the lab time for working on these tutorials and on Codelab exercises.
We
are trying this for the first time this semester in the hope that this will be
a rewarding and fun experience. Let us know whether you like the exercises at
these sites. If there is a particular exercise that you don't like, do let us
know too. May be we can exclude it from this semester or future semesters.
The
first time you learn technical material it is often challenging. We are going
to cover a wide range of topics in the course and we will move quickly between
topics. Discussing your assignment
solution at a conceptual level with others, e.g., your neighbors in a lab, is
fine, but with a caveat. Avoid exchange of actual code. The final work on any
assignment must be your own work. Copying an assignment from another student's
work may be an act of plagiarism and could trigger a violation of the
Engineering Honors Code that has serious repercussions (see below).
Providing
your solution for access by others, unless approved by the instructors, is also
a violation of course policy and the Engineering Honors Code.
If
you get done with an assignment early or find the assignments easy, it is then
OK to stay around in the lab to assist other students – make it clear that you
are done with your own program and act like an IA would – do not do the coding
for the student you are helping, but it is OK to guide the student in debugging
and thinking about the code. This is a large class with only two instruction
aides. We can use your help. You will find that helping others in
troubleshooting their programs can be a great way to learn the concepts. Introduce yourself to the students you
help and ask the students you help to acknowledge your help.
You
will be allowed to form 2-person teams for later projects in the course. Try to
identify potential partners – make some friends in the course!
You
may not consult homework solutions from a previous term unless they are made
available in a to the instructor and to the rest of the class (no unfair advantage
can be sought – see Honor Code: General Principles).
If
you receive assistance on an assignment or use an external source for part of
your assignment (e.g., use a part of code from an external source), please
acknowledge the source to avoid an allegation of plagiarism or leading us to
suspect a violation of the Honor Code. If the help is in the form of specific
parts of the computer code, add a comment indicating who helped you and the
part of the code on which you got help, stating what your contribution to the
code is so that we can adjust the points properly. If we find the collaboration
or reuse of code to be too much, there may be a deduction of points, but at
least you will avoid the allegation of plagiarism and avoid triggering a
violation of the Honor Code.
So
far, we have not needed to use automated tools to detect cheating, but we
reserve the right to use sophisticated automated tools to compare submissions
from students and with solutions from past semesters for similarity. So, please avoid copying of solutions.
If we suspect that the work on assignments may not be your own, we may also
question you individually and ask you to demonstrate your understanding of the
solution or reproduce the solution.
We
are going to require you to backup your homework using a version control system
this semester (we will provide you instructions on how to do that). The repository will reside on U. of
Michigan servers and will be available to the teaching staff of the course as
well, so use it for only things that you wouldn't mind sharing with the
teaching staff! You are expected
to backup your homework assignments using the repository frequently. If you do
not backup your work and your computer fails, we cannot help you do a recovery.
If you need help in office hours or on discussion forum and we need to look at
your code on our computer, we will check it out from your repository. This is a
new system this semester. If everything works with the repository, there should
not be any need to mail your code around to the teaching staff
. We may also use the repository to grade your assignment, verify
timestamps, etc., or any other course-related issue.
You
should avoid modifying files for a homework in the
repository once you have officially submitted it. That way, the repository can
also serve as a record of the time when you completed the assignment, just in
case there is a snafu with your CTools submission.
Honor Code Policy on Exams:
Each
student must complete the exam solely by her or his own efforts. Questions can
be asked only of the course instructors. The exam must be completed within the
specified time.
Honor Code Policy on In-class Personal Response System:
During
class you will be asked to answer questions using a Personal Response System
(e.g., clickers).. You may not hold more than one
transmitter during PRS questions (i.e. potentially answering for another
student), nor may you enter a response for another student in any way. You may
not provide your PRS to another student to respond for you.
We
are all here to learn. I like a relaxed classroom where everyone feels
comfortable I would rather have you come to class and listen with one ear than
not come to class at all. As a courtesy to others, be sure to put your PDA and
cell phone on silence/vibrate. Coming late to and/or leaving early from class
should be avoided during the lectures, but is OK during the labs – simply
because the lectures are large. Typically, we will have one short break during
the lecture in which you can leave if you need to go early. Ask questions at
any time, and if you have some expertise in a particular topic, feel free to
raise you hand and share it with the class. Sleeping in class is OK, but I will
do my best to keep you awake for the whole class period.
For
the labs, you should go to your lab section. If you cannot make it your
assigned time in a particular week, feel free to go to the different lab. You
can also attend both labs if you need extra help.
Exam Schedule
·
Midterm: Feb. 27thth, 2:30 to 4:00 PM
·
Final: April 29th, 1:30 to 3:30 PM
Tentative Course Schedule
(Topics and readings are subject to change since the course is relatively new and still evolving.
Check lecture slides for the latest updates)
WEEK |
TOPICS |
1 |
Introduction to the course and notion of computing and
programming. Start doing HW0. Self-paced. After the end of the day, request VMware license. Install
Mint software by discussion. |
2 |
Writing your first program Types and Expressions |
3 |
Introduction to
Functions |
4 |
Conditional Statements Booleans |
5 |
Lists and arrays. |
6 |
More Functions - Recursion |
7 |
Exam Review and Midterm |
8 |
Loops |
9 |
Function Pointers. Filter/Map/Reduce |
10 |
Aliases and Parameter passing by Reference |
11 |
Global variables |
12 |
Multi-attribute data types |
13 |
TBD |
14 |
TBD |
15 |
Final exam review |
|
Final |