layout: true
Class 0: Syllabus
--- class: center, middle # Introduction ### Class 0 --- # Overview 0. Course history 1. Staff introductions 2. Class overview 3. Tips for success --- class: center, middle # Course History --- # How we got here * Pat Pannuto * A frustrated EECS 481 IA (early-mid 201X) started "the Linux Lunches" * Began creating a course (EECS 398: "Tools Class") -- * Marcus M. Darden * Late add to the Pannuto course (EECS 398: Computing for Computer Scientists, 2016) * Took over after Pat moved on (look him up!) * Course rename (EECS 201: Computer Science Pragmatics, 2019) -- * Brandon Nguyen * Took over as third full-time instructor (solo, 2020) * Survived the Pandemic and flipped the classroom * Course video star -- * Now * Lab sections added to provide more staff support, interaction, assessment --- class: center, middle # Staff Introductions --- # Instructor: Amir Kamil * Undergraduate and graduate education at UC Berkeley * Worked on programming systems for high-performance computing * Programming systems == languages + compilers + libraries * High-performance computing == stuff that runs on big supercomputers (top500.org) -- * This is year 11 teaching CS at UMich * Regularly teach EECS 280 and EECS 390 (Programming Paradigms), and have also taught EECS 183, EECS 285, EECS 376, EECS 490 * Taught EECS 201 for the first time this past semester -- #### What makes me, me... outside of Beyster/Leinweber * I have a twin brother (yes, we're identical) * Taking welding and machining classes at WCC, spend lots of time in the Wilson Center (WSTPC) and Robotics Makerspace * Coding: primarily C++ and Python nowadays --- class: center, middle # Course Overview --- # What is this class * This class is for *anyone* wanting to become more effective at using their computer for development work -- * This isn't necessarily a "tools" class * Tools come and go: does anyone remember COBOL and CVS? -- * Each workplace will have its own tools and workflows * The ultimate goal of this class is to help you learn to pick up, learn, and use new tools to solve problems -- * The tools you learn along the way are the icing on the cake -- * That being said, we will be focusing on Unix/Unix-like systems and shells in this class * Windows Command Prompt is not suitable for this class * Windows Subsystem for Linux (WSL) is suitable, however --- # Expectations * Have a basic understanding of program control flow * e.g. if statements, loops, functions * Have experience expressing your solutions in program statements * Have some experience with C or C++ or a similar language * Let me know if you need help with the language itself --- # Expectations * Work is intended to be done alone * It can help to point each other to useful resources you find * Your code should be your own -- * No ban on AI, but... * Are you doing yourself a favor by robbing yourself the experience of researching and figuring out a solution? * _Your_ development is the goal here, not the final product you produce * Some assignments will require you to explain what you did and why to the course staff --- # Expectations ### Technology * Have a computer that runs Windows, macOS, or Linux that you can install software on * Chromebooks are welcome if they have the Linux environment (Crostini) * Ubuntu 22.04 is going to be the reference environment for class * Most Linux distributions will have similar behavior for things in this class, so don't fret if you're on 20.04, 24.04, or Debian or whatever * While most things can be done on macOS, some tools have different behavior between Linux and macOS --- # Course communication * Canvas: A fancy gradebook * Ed Discussion: Course content and logistics related questions * Email: For personalized correspondance and more personal matters * __eecs201admin@umich.edu__ --- # Course structure ### Flipped classroom * "Lecture at home, homework at lecture" * Weekly content videos * Quick quiz over videos with time window (keep up with class!) * In-person class, attendance ***STRONGLY RECOMMENDED*** * Mini-review * Q/A * Activities * __Time to work on assignments with instructor around for questions!__ * Survey for extra credit --- # Course structure ### Weekly "basic" assignment * Guided light assignments to familiarize you with tools and what you can do with them * Directly related to material covered in the videos -- ### Advanced component * Less guidance than basic assignments * Often touches on some related things not directly covered in class * Provides practical experience in perusing documentation and applying what you know --- # Grading * Point accumulation * Two major grade categories: **Basic** and **Advanced** * **Class** is an extra category * Basic has a hard cap of 60 total points * Advanced has a soft cap of 40 total points * Class has no cap * Final score is the _adjusted_ sum of these categories * You can make up to 60 Basic points * You can make more than 40 Advanced points; points after the soft cap are worth half (more on this) * There is no averaging: you just add numbers * You can see how letter grades get assigned in the [syllabus](https://eecs.umich.edu/courses/eecs201/sp2026/syllabus#grading) --- # Grading ### Basic * There will be at least 11 basic assignments, worth _at least_ 6 points each * That means you only need to do 10 to get all 60 points * The remaining assignments serve as a buffer for you to miss/skip -- * Assignments have a hard deadline: no late submissions --- # Grading ### Advanced * Each advanced assignment is worth _at least_ 10 points * That means you only need to do 4 to get all 40 points -- * __Points past 40 are worth 50%: a 5th assignment would only be worth 5 points__ * If you do 6 advanced assignments: 6 * 10 = 60 ➡ 40 + 20/2 = 50 -- * Assignments have a hard deadline for submission: no late submissions * Advanced assignments require coming to lab after the deadline to present and discuss your work with the course staff * Be prepared to talk about what you did and why, and how you would make use of what you learned * We likely will ask you to apply your problem-solving approach to a new task that wasn't directly on the assignment * The grade for an Advanced assignment is the product of the submission score and the presentation score --- # Grading ### Class * Each content quiz and in-class survey are worth 1 point * Surveys are time sensitive and available only during lecture * Quizzes are due at the beginning of class -- * Surveys cannot be done late * Quizzes cannot be done late * This category has no cap --- # Grading ### tl;dr you get points for each assignment and your letter grade is based on the total points --- # Grading ### Repeat after me: a point is a point * I'm free to give you free points here or there * There's no trick if you get extra points on something * There are no proportional grades: if a Basic assignment is worth 9 points instead of 6, you can get 9 points * Only the Basic assignment category is capped – all other categories are uncapped * The only time a division sign ever appears in calculating grades is when you exceed the Advanced category total --- # Grading ## Summary * __11 surveys = 11 Class points available__ * __11 quizzes = 11 Class points available__ * 11 Basic assignments = 66 Basic points available * 10 Advanced assignments = 100 Advanced points available --- # Strategies for success * Grading scheme is very flexible * It's on you to keep up * __Schedule some time to watch the videos and stick to it as if it were a lecture – do this before the class period on the topic__ * Don't fall into the "I can watch it later" trap! * __Take notes!__ It engages you more! * Class time will give you time to complete homework * Doing the video quizzes will add up in the end, enough to save you from multiple assignments! * Sometimes I'll toss some easy Basic or Advanced assignments your way for easy points --- # Strategies for success ## Conventional approach * Do each quiz on time and fill out each in-class survey: __22 Class points__ * 11 quizzes, 11 surveys * Fully complete 10 Basic assignments: __60 Basic points__ * So far, 82 points: already at a B- * Fully complete two Advanced assignments and get the full presentation score: __20 Advanced points__ * Now we're at 102 points: A+ * This isn't taking into account assignments worth more than normal * If you miss quizzes or surveys, you can make up for the shortfall by doing more assignments * The grading was originally balanced around 10 Basic and 4 Advanced assignments * Class points are there to ease the load --- # Strategies for success ## Conventional approach workload * Basic assignments: roughly 1 hour each * Advanced assignments: roughly 4 hours each * Lecture videos + quiz: roughly 1.5 hours * Each lecture: * Watch/take notes on lecture videos and do the quiz: __1.5 hours__ * Come to class/do Basic assignment: __1.5 hours__ * __~6 hours a week__ * __Sprinkle in two Advanced assignments when you can, plus lab attendance to present them__ * Earn an A+ 😊 --- class: center, middle # Any questions? --- class: center, middle # Demo --- class: center, middle # Why are you here? How'd you hear about this class? --- class: center, middle # What's your relationship with computers up until this point? --- class: center, middle # What's your goal with EECS? --- class: center, middle # Addenda --- # Backups * Nowadays, with the proliferation of online services, there's no excuse to ever lose your important files * For text-based data, version/revision control is the best solution (e.g. git) * More on this in a couple of weeks -- * For non-text data, there are numerous options to sync to the cloud * Free for U-M students * 250GB of data on Google * 5TB (!) of data on Dropbox -- * Paid options * Google: $2/month for 100GB, $10/month for 2TB * Apple: $1/month for 50GB, $3/month for 200GB, $10/month for 2TB * Microsoft: $2/month for 100GB, $10/month for 1TB + Office apps * Backblaze: $9/month for unlimited storage, supports client-side encryption -- * Use at least one of these options to keep your data safe --- ## Environment * Terminal emulator: __Built-in Mac OS Terminal app__ * Shell: __Zsh__ * OS: __Mac OS__ ### Software * Editors: __Emacs__, __VSCode__, __Xcode__, __Pico/Nano/Femto__