General Information

Fall 2018

Instructor: Chris Wyatt
Office: 439 Whittemore Hall
Phone: 231-6658
Email: clwyatt@vt.edu
Office Hours: Tu and Th 2-3:30, Fri 10-noon. Other times by appointment.
TAs: Ashin Thomas (ashinmarin@vt.edu) and Sampanna Khu (sampanna@vt.edu)
SWEL Hours
Class Links: Canvas, where grades are posted.
Piazza, where online communication occurs.
Software Engineering Lab (SWEL), where the TAs hold office hours.

Course Objectives

Having successfully completed this course, you should be able to:

Schedule (tentative)

This is the schedule for the semester, updated continually. The acronyms TPP and CC refer to the books "The Pragmatic Programmer" and "Clean Code" respectively.

Meeting Topic Notes
1 (Tu 8/21) Introduction Reading: Syllabus
Course Project Introduction
Milestone 0 Released
2 (Th 8/23) Version Control Reading: Sections 1.1, 1.3, 1.4, 1.6 and Chapter 2 of Pro Git
Additional Reference: TPP Chapter 3
3 (Tu 8/28) Course Reference Environment Reading: Virtual Box and Vagrant Getting Started
4 (Th 8/30) Static Polymorphism using Templates Reading: C++ Generics: Templates
5 (Tu 9/4) Review of Data Structures: A Tour of C++ Standard Library Reading: Containers Library
6 (Th 9/6) Module and API Design Reading: TPP Sections 7, 8, 26
See also the Law of Demeter and the Principle of Least-Astonishment
Milestone 1 Released
7 (Tu 9/11) Unit Testing using Catch Reading: Catch Tutorial and Reference
8 (Th 9/13) Building Cross-Platform Software using CMake Reading: CMake Tutorial, and Running CMake
9 (Tu 9/18) Introduction to Qt Reading: Overview of Qt
10 (Th 9/20) Dynamic Polymorphism Reading: Subtyping, Qt Object Model, and Qt Object Trees and Ownership
11 (Tu 9/25) Reuse through Composition Reading: Object Composition and Has-A relationships
12 (Th 9/27) Event Driven Programming Reading: Qt Event System
13 (Tu 10/2) Qt Signals and Slots Reading: Signals and Slots
Milestone 2 Released
14 (Th 10/4) Integration Testing Reading: Qt Test Overview
15 (Tu 10/9) Design Patterns and C++ Idioms Reading: Design Patterns
16 (Th 10/11) More Design Patterns Reading: Design Patterns and Model-View Programming
17 (Tu 10/16) Concurrency: Processes and Threads Reading: Chapter 26: Concurrency and Threads from Operating Systems: Three Easy Pieces
18 (Th 10/18) InterProcess Communication with Pipes and Sockets Reading: Qt IPC
19 (Tu 10/23) InterProcess Communication with Shared Memory Shared Memory in Qt
20 (Th 10/25) Message Serialization Reading: QDataStream and Protocol Buffers
Milestone 3 Released
21 (Tu 10/30) Threads Reading: C++11 Threading
22 (Th 11/1) Thread Synchronization Reading: std::atomic, C++11 Thread Library, and QSemaphore
23 (Tu 11/6) Detailed Example: A thread-safe queue in C++11 Reading: C++11 Thread Library
Milestone 4 Released
24 (Th 11/8) Producer/Consumer Pattern Reading: Wikipedia Entry on Producer/Consumer, Qt Threads, and Qt Concurrent
25 (Tu 11/13) Actor Pattern Reading: Whitepaper on a C++ Actor Library
26 (Th 11/15) Embedded Programming in C++ Reading: Chapter 17: Free-Space Management from Operating Systems: Three Easy Pieces
27 (Tu 11/27) Embedded Memory Management, Event-driven Code Reading: FreeRTOS Memory Management
28 (Th 11/29) Introduction to FreeRTOS Reading: FreeRTOS Tasks and Co-routines
29 (Tu 12/4) Review

Important Dates

Prerequisites

ECE 2574 Data Structures and Algorithms. You are expected to be competent in the basics of programming with C++ and the use of data structures and algorithms to solve problems.

It is helpful to be familiar with Unix systems (e.g. taken 2524), but it is not a prerequisite.

If you have transferred and/or not taken ECE 1574/2574 you should expect a steep learning curve as you will need to learn C++ syntax and memory management techniques.

Text and Resources

Readings will be assigned from the following books. They can be read online through the library, although there is limited access, or you can purchase your own (both are very good and offer solid, practical advice on programming). There will also be assigned readings from various online sources.

Additional Resources

Software

A modern C++ compiler with sufficient C++11 support is required (see below). Only specified compiler extensions and libraries may be used. We will use the open source CMake application for managing the build process (see www.cmake.org) and the git source code management tool (see git-scm.com).

Recommended Compilers:

Development Environments

For development you can use your favorite editor and a command console to invoke the compiler toolchain, or you can use any other integrated development environment (IDE) supported by CMake, including Visual Studio on Windows and XCode on the Mac. There are several other options including Qt Creator and CLion which use cmake internally. Use whatever works for you but note the project defines a virtual reference environment that, for grading purposes, is the final arbiter of working code. More details about this will be provided in the first two weeks. It is your responsibility to ensure your code works as expected in the reference environment. Also, whatever environment you choose, you should be very adept at using it to write code, compile, and debug.

Grading

Coursework consists of in-class exercises, a project with 5 milestones, and a final exam. Your score is weighted as follows:

Exercises: 10%
Project Milestones: 30%
Final Project: 45%
Final Exam: 15%

Letter grades are assigned according to the following scale:

Min Score -> Grade
    0     -> F
    60    -> D-
    63    -> D
    67    -> D+
    70    -> C-
    73    -> C
    77    -> C+
    80    -> B-
    83    -> B
    87    -> B+
    90    -> A-
    94    -> A

The exercises are worked through in-class after a short lecture on the material for that day, and are due by midnight the day of class.

The project is divided into milestones with requirements that correspond to the material covered to that point in the course. These milestones have explicit due dates. The total project grade is distributed across these milestones and the final version you submit. All project milestones must be turned in by the time/date indicated on the assignment. No late project work will be assigned a grade.

If you feel that an error has been made in grading any assignment, you must present a written appeal to the instructor (email is preferred) within one week after the assignment feedback is returned to you. Verbal appeals are not considered before this step. Your appeal should be specific.

Honor Code Policy

The Undergraduate Honor Code pledge that each member of the university community agrees to abide by states:

“As a Hokie, I will conduct myself with honor and integrity at all times. I will not lie, cheat, or steal, nor will I accept the actions of those who do.”

Students enrolled in this course are responsible for abiding by the Honor Code. A student who has doubts about how the Honor Code applies to any assignment is responsible for obtaining specific guidance from the course instructor before submitting the assignment for evaluation. Ignorance of the rules does not exclude any member of the University community from the requirements and expectations of the Honor Code. For additional information about the Honor Code, please visit: www.honorsystem.vt.edu.

Adherence to Virginia Tech's honor code is expected in all phases of this course. All graded work, other than the in-class exercises, is expected to be the original work of the individual student. In working on the assignments, discussion and cooperative learning is encouraged. However, solutions are to be the work of the individual student. In all assignments you may discuss general concepts, such as algorithms, language syntax, Internet resources, or class and text topics, with others. However, copying of specific assignment program-code in the current or from previous semesters is an honor code violation. Any violations of the honor code will automatically be forwarded to the Office of the Honor System with the recommendation of an F* sanction as your final grade in the course. I do use a code comparison system.

Additional Course Policies

Course Website: Students are expected to access class resources via this website, on Canvas (vt.instructure.com), and Piazza (piazza.com). This is the primary way assignments, examples, notes, and other information will be distributed. You should check the sites daily for updates.

Class Attendance and Classroom Conduct: Students are expected to attend class and contribute to the discussion. Distractions (e. g. arriving to class late or leaving early) are disrespectful to the entire class and will not be tolerated.

Email Communication: If you want to send email the instructor use clwyatt@vt.edu and use your VT email account as the sender to ensure it does not get filtered.

University Closings: In case of inclement weather you may call 231-6668 to find out if any University closings are scheduled. If the University is closed due dates may be extended at the discretion of the instructor.

Special Accommodations

Reasonable accommodations are available for students who have documentation of a disability from a qualified professional. Students should work through Services for Students with Disabilities (SSD) in Lavery Hall. Any student with accommodations through the SSD Office should contact me during the first two weeks of the semester.

If participation in some part of this class conflicts with your observation of specific religious holidays during the semester, please contact me during the first two weeks of class to make alternative arrangements.

If you miss class due to illness, especially in the case of an exam or some deadline, see a professional in Schiffert Health Center. If deemed appropriate, documentation of your illness will be sent to the Dean's Office for distribution to me. If you experience a personal or family emergency that necessitates missing class, contact the Dean of Students at 231-3787 or see them in 152 Henderson Hall.