This 1-credit seminar is designed to teach the essentials of using a computer effectively for EECS students. While the target audience is CS/CE/DS students, any student wishing to learn how to use their computer much more effectively is encouraged to join. Topics covered include shells, environment, scripting, build systems, compilers, debugging tools, and version control. The end of the course will be open to student input for interesting topics to cover.

Updates

: Office Hours ++

C4CS is holding its final Office Hours ++ for the semester. It will be held on Saturday March 31st in 1670 BBB and will cover using Vim and setting up a .vimrc. Check this Piazza post for more details.


Course Pre-Requisites

The only enforced pre-requisite for this course is ENGN 101/151 or EECS 182/183, however it is strongly advised that students have either taken or are concurrently enrolled in EECS 280.

It is expected that students are currently enrolled in at least one course involving non-trivial software projects (e.g. EECS 280 or 281). If you are not enrolled in a programming course this term, you must have previously taken a programming course where you still have access to the projects you have completed.

Syllabus & Essential Info

Course Staff

For general issues, e-mail the course staff at c4cs-staff@umich.edu. For sensitive issues, please e-mail Marcus directly.

@marcus-darden Samiur Khan Christina Liu Amrit Hariharan Stevie Triesenberg Tarun Khubchandani
Marcus Darden Samiur Khan Christina Liu Amrit Hariharan Stevie Triesenberg Tarun Khubchandani
mmdarden@umich.edu samkhan@umich.edu cyanliu@umich.edu amrith@umich.edu sltries@umich.edu tarunsk@umich.edu

Course Resources

Course Q&A / Forum – Piazza

Assignment Submission & Grades – Gradescope

  • Gradescope entry code: 92R5Z7

To borrow a CSE laptop for the semester, contact Don Winsor at don@umich.edu.

Course Meeting Time and Location

Section 001 (26357)
220 CHRYS (Auditorium), Friday 10:00AM — 11:30AM
Loading calendar...
Google Calendar link

Schedule

The syllabus is subject to change in response to feedback and class needs throughout the term.
Topic Lecture Materials
Segment 1: Introduction and Basics
Week 1 01/05/2018

Introduction, Virtual Machines, & Command Line Primer

Lecture

  • Lines of text as a universal interface
  • Examples of unix commands and command synthesis

Homework

  • Set up a virtual machine
  • Some light reading

Advanced

  • None this week

Syllabus week! Don’t expect anything too deep here. Just an easy introduction to the C4CS curriculum.

Slides [pdf]

Lecture Video


B1G TEN Commands

cdlsmkdirmvpwdrmtouch

mmdarden

Homework 1 [pdf]

Homework 1 [tex]


Solutions 1 [pdf]

Week 2 01/12/2018

Basic Git

Lecture

  • What's version control?
  • Why is it important?
  • Git fundamentals
  • Advanced git highlights
  • Social Coding

Homework

  • Intro tutorial to git
  • Setting up a class project with git
  • Basic usage and configuration

Advanced

  • Rescuing repositories in bad states
  • Commit hooks

During lecture, Prof. Darden was using a program called git-bash-prompt. Here’s a link to download and install it if you’re interested. Install via git clone or homebrew (MacOS)

Slides [pdf]

Lecture Video


B1G TEN Commands

githeadtaillesscutmantreecp

mmdarden

Homework 2 [pdf]

Homework 2 [tex]

Advanced Exercise 2 [pdf]

Advanced Exercise 2 [tex]


Solutions 2 [pdf]

Week 3 01/19/2018

Shells, Environment, Scripting, and Bash

Lecture

  • How do programs start
  • Why does environment matter?
  • Scripting versus programming
  • Examples

Prof Darden mentioned Homebrew (a package manager for Mac) during lecture. It’s an extremely useful tool for Mac users and can speed up environment setups.

Slides [pdf]

Lecture Video


B1G TEN Commands

chmodmanfileechoseqtruewhichexportyes$_$variablehistorygrep

mmdarden

Homework 3 [pdf]

Homework 3 [tex]

Advanced Exercise 3 [pdf]

Advanced Exercise 3 [tex]


Solutions 3 [pdf]

Segment 2: Being Efficient
Week 4 01/26/2018

Editors

Lecture

  • Is there anything special about text editors?
  • Philosophy of text editors
  • The old editors, and why they're still around
  • The new editors, and what they get right
  • Various tips and tricks in a few different editors

Homework

  • A crash course in Vim and EMACS
  • Working remotely with UMich's CAEN

Advanced

  • Working in existing codebases
  • Making it your editor through plugins

Every developer has their own go-to editor that they’ve configured and are familiar with (try talking to each of the staff - it may cause quite a debate). It doesn’t necessarily matter what you use as long as you’re comfortable with it, though it is definitely beneficial to know at least one Terminal-Based Text Editor.

Slides [pdf]

Lecture Video


B1G TEN Commands

objdumpstatedsedviemacs

mmdarden

Homework 4 [pdf]

Homework 4 [tex]

Advanced Exercise 4 [pdf]

Advanced Exercise 4 [tex]


Solutions 4 [pdf]

Week 5 02/02/2018

Git II

Lecture

  • Understanding branches
  • Basic merging
  • Expanding the triangle
    • Push, fetch, pull
    • Remote branches and remotes as branches
  • Synchronizing work (+stashing)
  • Commit everything, branch often
  • Cleaning history - Rebasing, squashing

Homework

  • Thinking in git
  • Practice with merging, conflicts

Advanced

  • Using git to collaborate for real

Some tips and tricks to make working with git more enjoyable.

Git II is an OH++ topic, the sessions are February 10, 10-11:30a and 11:30a-1p in 1670 BBB.

Summary of my VM changes.

Lecture Video

Asciicasts: Asciicast 1Asciicast 2


B1G TEN Commands

git

mmdarden

Homework 5 [pdf]

Homework 5 [tex]

Advanced Exercise 5 [pdf]

Advanced Exercise 5 [tex]


Solutions 5 [pdf]

Week 6 02/09/2018

Unix II

Lecture

  • Lines of text as a universal interface
  • Examples of unix commands and command synthesis

Homework

  • Basics of regular expressions
  • Guided intro to some tools
  • Synthesizing tools into powerful queries

Advanced

  • Shell scripting
  • (Basic) shell job control
  • Automated testing

Slides [pdf]

Lecture Video

mmdarden

Homework 6 [pdf]

Homework 6 [tex]

Advanced Exercise 6 [pdf]

Advanced Exercise 6 [tex]


Solutions 6 [pdf]

Week 6b 02/10/2018

Office Hours ++ (Git II)

Lecture

  • What is open source?
  • Why should I contribute?
  • Contributing to an open source project tutorial

Attendance is completely optional! If you come, we’ll be helping you through Advanced Homework 5 and covering some additional Git related awesomeness.

Slides [pdf]

staff

No homework this week!

Segment 3: Developing
Week 7 02/16/2018

Unit Testing and Python

Lecture

  • What's unit testing?
  • Test driven development
  • Python
  • Live coding to learn these

Created an RPN calculator in Python.

Slides [pdf]

Lecture Video

mmdarden

Homework 7 [pdf]

Homework 7 [tex]

Advanced Exercise 7 [pdf]

Advanced Exercise 7 [tex]


Solutions 7 [pdf]

Week 8 02/23/2018

Unit Testing and Python OH++ (Optional)

Lecture

  • Implementing test-driven development in development
  • Extending features on a Python based RPN calculator

Attendance is completely optional! If you come, we’ll be working on extending the RPN calculator built in class.

Slides [pdf]

Lecture Video

staff

Homework 8 [pdf]

Homework 8 [tex]

Week 9 03/02/2018

No lecture, Spring break

n/a

No homework this week!

Week 10 03/09/2018

Build Systems

Lecture

  • Conceptual model for a build system
  • Basic operation of make
    • syntax, goals, targets, rules, variables (yours and make's)

Homework

  • Basic operation
  • Understanding goals and targets
  • Built-ins and implicit rules
    • Guided digging into how a tool works

Advanced

  • gcc and make integration
  • Exploring alternative build systems

Slides [pdf]

Lecture Video

mmdarden

Homework 10 [pdf]

Homework 10 [tex]

Advanced Exercise 10 [pdf]

Advanced Exercise 10 [tex]

Week 11 03/16/2018

Debuggers

Lecture

  • How debugging fits into programming
  • gdb with TUI mode
  • Common gdb commands
  • Extending gdb

Homework

  • Using gdb to find the cause of a segfault
  • Using valgrind to find errors in your code

Advanced

  • printf++
  • Extending gdb with pretty printers

Debuggers are great tools, and visual debuggers can be a huge time (and sanity) saver. Remember though, these visual debuggers do nothing more than provide an nice interface over their command line equivalents. Check out this browser based frontend to GDB.

Slides [pdf]

Lecture Video

mmdarden

Homework 11 [pdf]

Homework 11 [tex]

Advanced Exercise 11 [pdf]

Advanced Exercise 11 [tex]


Solutions 11 [pdf]

Segment 4: Standing on the Shoulders of Giants
Week 12 03/23/2018

Package Managers & Development Environment

Lecture

  • Installing packages
  • Inspecting package contents
  • Uploading packages
  • The magic of Free Open Source Software

Slides [pdf]

Lecture Video

mmdarden

Homework 12 [pdf]

Homework 12 [tex]

Advanced Exercise 12 [pdf]

Advanced Exercise 12 [tex]

Week 13 03/30/2018

IDEs

Lecture

  • What is an IDE?
  • How are they useful?
  • IDE toolsets
  • Modifying an IDE
  • IDEs and their use cases

Lecture Video

mmdarden

Homework 13 [pdf]

Homework 13 [tex]

Advanced Exercise 13 [pdf]

Advanced Exercise 13 [tex]

Week 13b 03/31/2018

Office Hours ++ (Vim)

Lecture

  • What is a vimrc?
  • Customizing and configuring your editor
  • Adding additional functionalities to Vim

Homework

  • Building your own vimrc
  • Personalising Vim

Assignment PDF | tex

staff

No homework this week!

Week 14 04/06/2018

A Sampling of Other Things

Lecture

  • Profiling using perf
  • Static analysis using linters
  • Developer Survey

Homework

  • Exploring profiling using perf and static analysis using cppcheck

Advanced

  • Test coverage using gcov

Slides [pdf]

Lecture Video

mmdarden

Homework 14 [pdf]

Homework 14 [tex]

Advanced Exercise 14 [pdf]

Advanced Exercise 14 [tex]

Week 15 04/13/2018

Staff Lecture

Lecture

  • Data Analysis with Twitter and Python
  • Debugging Using Docker
  • Introducing REST APIs
  1. Stevie’s Slides[pdf]
  2. Amrit’s Slides[pdf]
  3. Tarun’s Slides[pdf] and Starter Code

TBA

No homework this week!

Attendance, Grading, and Homework

This course is graded on a straight scale, it will not be curved. There are a total of 100 possible points in this course. You are expected to earn 40 points from Homework, 30 points from Attendance and Participation, and 30 points from Advanced Exercises, however each section has modest opportunity for extra credit that can cover missing points elsewhere.

As the semester progresses, if you'd like to see how you're doing you can enter your scores into this table.

Range notation [90,93) means 90 is included and 93 is not

Final Grades

A+
>100
A
[93,100]
A-
[90,93)
B+
[86.7,90)
B
[83.3,86.7)
B-
[80,83.3)
C+
[76.7,80)
C
[73.3,76.7)
C-
[70,73.3)
D+
[66.7,70)
D
[63.3,66.7)
D-
[60,63.3)
F
[0,60)

Homework (40% / 40 points)

There are 12 homework assignments in the course. Each homework assignment is worth 4 points. Any points over 40 points are worth half their value, that is if a student completes all 12 assignments with a perfect score, their total points earned from homework will be 40 + (0.5×8) = 44.

Late assignments will not be accepted. Notice that one can miss/skip up to two assignments and still receive the full 40 homework points.

Homework Effort and Grading

This is a 1 credit course and the homeworks are designed to be commensurate with that. Each assignment should take 60–90 minutes on average. The goal of the homeworks is to reinforce concepts introduced in lecture and to give hands-on experience.

We will give each homework a “raw” grade in Gradescope, which will then convert to a final score using the following conversion:

[0,0.25] → 0 points
No / very little effort
(0.25,2] → 2 points
Some effort, but not quite there
(2,4] → 4 points
Solid effort, completed successfully

The idea here is that homework does not have to 100% perfect to receive full credit. In addition, course staff can be a little “nit-picky”, taking off tenths of points to draw your attention to corrections and suggestions without actually penalizing your grade.

Grading Issues / Regrade Requests

Regrades are handled on Gradescope. We will close regrade requests roughly one week after assignments are returned.

Attendance and Participation (30% / 30 points)

Attendance is required for this course. Bring your laptop to every lecture. Lectures will include some quick quizzes used both to verify comprehension and attendance. Generally, correct answers will be worth full credit and incorrect answers half credit (you were there, but didn’t get it right). Generally, we will ask at least three questions during class. Not all questions may count for attendance credit. We reserve the right to experiment with this mechanism a bit throughout the semester and vary when and how we ask questions or validate attendance.

Each week can earn up to 3 attendance and participation points. Any points over 30 points are worth half their value, that is if a student attends and participates for all 12 weeks, their total points earned from attendance and participation will be 30 + (0.5×6) = 33.

Notice that you can miss up to two weeks without any penalty. This is by design to accommodate unexpected illness, emergencies, travel for interviews, or any other situations. Please do not ask for excused absences for one-off issues that are already covered by this policy. If extenuating circumstances cause you to miss more than two weeks, please contact us and we can work something out.

We will not count attendance for the first week of class.

Advanced Exercises (30% / 30 points)

Each week (except the first and last) will have at least one advanced exercise option. The intention is to give a guided exploration of topics that people find most interesting. These advanced exercises will also be a little more time consuming (2-3 hours), have a little less guidance, and require you to research and discover a little on your own. Over the course of the semester, you are expected to do three of the advanced exercises.

Advanced exercises may only be submitted at office hours, which can be viewed from the course calendar at the top of the page. Advanced exercises come with a deadline roughly two weeks after they are released, however it is your responsibility to ensure you select an office hours session to attend before the deadline.

We will aim to announce any changes to the regular office hours schedule at least one week in advance (via Piazza and the updated course calendar), however sometimes life happens, in which case we may adjust deadlines if necessary.

Advanced Exercises Grading

The advanced exercises are graded on a simple all or nothing system, either you did the whole thing or you did not.

The class is divided into four sections, Introduction and Basics, Being Efficient, Developing, and Standing on the Shoulders of Giants. To encourage you to get started early and spread the advanced exercises load across the semester, the first advanced exercise you submit from each section is worth 10 points. Another advanced exercise in the same section is worth 5 points. If you do one advanced exercise from each section, the final section's first advanced exercise is worth half: 5 points. If a student completes all 11 advanced exercise, they will earn (10 + 5) + (10 + 5 + 5) + (10 + 5 + 5 ) + (5 + 5 + 5) = 70 points.

Completing advanced exercises 2 or more days prior to the due date will result in 2 extra credit points being awarded for the assignment. Completing advanced exercises 1 day prior to the due date will result in 1 extra credit point being awarded for the assignment.

Engineering Honor Code

To review the current Engineering Honor Code, refer to the Honor Council page on the Office of Student Support and Accountability website.


Course Archives