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

 

Course Description

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.

 

Where this course fits in the curriculum

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.

 

Required Resources

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.

 

Software Required for Assignments and Class Work

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.

 

Getting Help - Resources

Teaching Staff and Office Hours

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

 

prakash2-web.jpg

IA: Vidal Borromeo

 

Pic.png

IA: Noah James Hermann

 

Grader: Lars Hamre

 

che_pic.jpg

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.

 

Course Web Site and Discussion Forum

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.

 

Email to Teaching Staff

 

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.

 

Grading

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.

 

 

 

Engineering Honors Code

 

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.

 

Giving and Receiving Assistance on Projects:

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.

 

Classroom Rules

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