ME 555.01 Introduction to Programming

Spring 2021


Online course meetings: MWF 1:45–3:00 pm ET

Course format: Lecture, discussion, and activities


Instructor’s information

Dr. Genevieve Lipp, email: [email protected]

Genevieve is an Assistant Professor of the Practice in ECE and MEMS, where she teaches courses in programming, dynamics, and control systems.

Class TA: Nicholas Lenz, email: [email protected]

Nicholas is a masters student in ECE, who is specializing in data analytics and machine learning.


What is this course about?

This course is for building strong programming fundamentals, so that you can use computing to solve problems in your research or other technical pursuits. You will spend half the semester learning programming fundamentals in C. Then we introduce C++ and move on to data structures and algorithms. During the last few weeks of class, you will write a program in C++ that generates a finite element mesh, plans a path for a robot, or does something else of your choosing. C and C++ are chosen for the pedagogical benefit of learning to program with “no magic,” for their applications in computer engineering, and because a compiled executable can be very fast. After this course, learning an additional programming language will be much easier!


What background knowledge do I need before taking this course?

Students should have graduate standing and a basic math background (exponents, logarithms, primality, limits), but there are no course pre-requisites and no programming background necessary. Novices are welcome, as long as they can devote about 15 hours per week to this course.


What will I learn in this course?

By the end of this course, you will be able to:

• Develop an algorithm to solve a computational problem using the Seven Steps;

• Read and write code in C and C++;

• Use top-down design and abstraction to write clean, readable, fixable code;

• Write thorough test cases for functions and programs;

• Debug using the scientific method and GDB;

• Use C++ features such as templates and inheritance to write flexible code; and

• Conceptually represent and evaluate data structures and explain the time complexity of op-erations.


What will I do in this course?

This course will use the “flipped classroom” model for most of the semester. In this model, you will read and watch the videos in the assigned chapters of AoP for homework. Before each class session, you will attempt the reading quiz and submit any questions you have about the reading to the instructor. In class, we will discuss your questions, and you will work problems and practice programming. If you do not complete in-class exercises during class time, you will need to catch up out of class.

      For the reading quizzes and programming assignments, we use a mastery learning platform, which means you must demonstrate mastery of each assignment before the next one is released. The assignments are automatically graded, and you can attempt formative assignments as many times as you need to. For programming, this is important because the skills build on each other, and you would not want to progress without a solid foundation.


What required text, materials, and technologies will I need?

Required text: All of Programming. Hilton and Bracy. Edition 1. Note that “AoP” is short for All of Programming. Chapters 1–26 and Appendices A–D are required reading. The book’s website is http://aop.cs.cornell.edu, which includes a link to the Google Play download for the book.

      For class, you need a device that can connect to the internet and ideally a camera and micro-phone. For programming assignments, you need a computer that can SSH into our course server.


How will my grade be determined?

Your grade for this course will comprise these components:

• Formative Assignments: 10%

• Evaluative Assignments: 40%

– Eval 1: 5%

– Eval 2: 8%

– Eval 3: 12%

– Miniproject: 15%

• Quizzes: 10%

• Test 1: 20%

• Test 2: 20%

      Final letter grades are assigned based on the following scale (with slight modification as de-scribed below):

      Before assigning letter grades, I may alter the scale by lowering the threshold for a certain grade (e.g., making a B- span 79.5–83 instead of 80–83). Such a change is solely at the discretion of the instructor and occurs when the change results in a letter grade more accurately reflecting the quality of the student’s work and effort.


Formative assignments

Class time will be dedicated to in-class formative programming exercises (on the mastery learning platform). The expectation is that you will attend class regularly and complete these exercises during class time. While you are generally expected to finish these activities in class, I recognize that sometimes you must be absent for legitimate reasons and that sometimes programming tasks take longer than expected. Each assignment will be considered late at 15:00 (3:00 pm) two days after it is given.

      Once an assignment is late, you will begin to lose points on your grade. In particular, your grade is the product of correctness (C) and timeliness (T): G = C·T, where timeliness is computed with a logistic function of the number of hours (H) that your assignment is late: Note that this means that 1 day = 0.973, 2 days = 0.917, 3 days = 0.769, 4 days = 0.5, 5 days = 0.231, etc.


Evaluative assignments

You will have four evaluative assignments. Three of them will be relatively small-scale. During the last few weeks of class you will work on a larger programming project in addition to smaller class assignments.

      All of these evaluative assignments are individual effort. You may not consult your friends, use code from other sources, etc. They are effectively like exams. You may use AoP, the Linux man pages (or library reference on http://www.cplusplus.com/ for the miniproject), and your course notebook. For a few of them, you may have limited other resources you can use. If other resources are permissible, they will be described in the honor statement accompanying the assignment.

      These assignments will be checked for cheating. If you are caught cheating, you will receive a 0 on the assignment and be referred to the appropriate Associate Dean.


Exams and quizzes

You will have two tests. These will be individual effort; however, you may use your course notebook and textbook during them. Your course notebook must be a paper notebook, containing only material handwritten by you.

      The first test will cover material presented in Chapters 1–13, and the second test will focus on material in Chapters 14–23.

      Five quizzes will give you an opportunity to practice test-style questions as you go, to encourage you to study consistently and to reduce test anxiety.

      If you are caught cheating, as on an evaluative assignment, you will receive a 0 on the assignment and be referred to the appropriate Associate Dean.


What are the course policies?

Communication

I will post course information and updates on the Campuswire site. You are responsible for checking for updates in the class feed, but I will add email notifications for important communications. Use this platform for course-related questions: you can create a post to everyone or just the instructors or direct message (DM) the instructor or TA with quick questions. Please reserve email for non-course-specific things, such as a recommendation letter request or illness notification. I will endeavor to respond the same work day or within 12 hours (24 hours on weekends).


Academic integrity

Academic integrity is very important, and misconduct will not be tolerated in this course. All students should already be aware of a few basic principles that govern academic integrity at Duke in general.

To uphold the Duke Community Standard:

• I will not lie, cheat, or steal in my academic endeavors;

• I will conduct myself honorably in all my endeavors; and

• I will act if the Standard is compromised.

      If I suspect academic misconduct in this class, you will be reported to the appropriate Associate Dean, who will carry out the required due process to determine if you committed academic mis-conduct. If you are found responsible for academic misconduct, you will receive a grade of 0 on the corresponding assignment. The Associate Dean overseeing your case is likely to impose additional sanctions against you.


What university resources can help me during this course?

Student support

Please consult with me about appropriate course preparation and readiness strategies, as needed. The Academic Resource Center (ARC) offers free services to all students (e.g., peer tutoring, learning consultations, ADHD/LD coaching, and help with online learning.

      If you are concerned about your physical or mental health, DukeReach can connect you with departments across campus to get you help, and you contact CAPS directly for counseling services.


Academic advising

Consult your academic advisors on course performance (i.e., poor grades) and academic decisions (e.g., course changes, incompletes, withdrawals) to ensure you stay on track with degree and grad-uation requirements. The graduate school publishes a full list of academic policies.


What is the expected course schedule?

Week
  Day
  Reading
  Eval Assns
  Exams and Quizzes
Week 1
  W 1/20
  F 1/22
  App A, B, C
  Ch 1, App D.4


Week 2
  M 1/25
  W 1/27
  F 1/29
  Ch 2
  Ch 3
  Ch 4


Week 3
  M 2/1
  W 2/3
  F 2/5
  Ch 5, App D.1
  Ch 6, App D.2

  Quiz 1: Reading code
Week 4
  M 2/8
  W 2/10
  F 2/12
  Ch 7
  Ch 8
  eval1 released
  Quiz 2: Testing
Week 5
  M 2/15
  W 2/17
  F 2/19
  Ch 9
  Ch 10
  eval1 due
  eval2 released

Week 6
  M 2/22
  W 2/24
  F 2/26
  Ch 11
  Ch 12, App D.3

  Quiz 3: Pointers and arrays
Week 7
  M 3/1
  W 3/3
  F 3/5
  Ch 13
  eval2 due

Week 8
  M 3/8
  W 3/10
  F 3/12
  Ch 14
  -
  -
  eval3 released
  -
  Test: Programming in C
Week 9
  M 3/15
  W 3/17
  F 3/19
  Ch 15
  Ch 16


Week 10
  M 3/22
  W 3/24
  F 3/26
  Ch 17
  Ch 18
  eval3 due
  Quiz 4: C++ foundations
Week 11
  M 3/29
  W 3/31
  F 4/2
  Ch 19
  Ch 20


Week 12
  M 4/5
  W 4/7
  F 4/9
  Ch 21
  Ch 22
  miniproject rel.
  Quiz 5: Templates and inher.
Week 13
  M 4/12
  W 4/14
  F 4/16
  Ch 23
  Ch 24


Week 14
  W 4/21
  F 4/23
  Ch 25
  Ch 26

  Test: Programming in C++
Week 15
  Sa 5/1

  miniproject due