1.16.2020 EE 538: Computing Principles for Electrical Engineers Units: 2 Term—Day—Time: Lecture: 2 hours/week Discussion: 1.5 hours/week Location: TBD Instructor: Arash Saifhashemi Office: EEB 504B Office Hours: TBD Contact Info: [email protected] Teaching Assistant: Office: TBD Office Hours: TBD Contact Info:Page 2 Course Description This course provides a survey of topics required for advanced computer programming. It is targeted to graduate electrical engineering students with some prepatory (but perhaps informal) background programming experience. It teaches knowledge and develops practices required to understand and implement software problem solving. The course consists of two main parts: (1) foundations of software engineering, and (2) algorithms and data structures. The course includes the necessary theoretical basis to analyze algorithms, data structures, and mathematical methods. The course presents abstractions of methods and algorithms applicable in most robust computer languages. It emphasizes learning through implementing and all assignments and projects include major programming components that develop correct execution over suggestive pseudo-code. Assignments will extend your understanding by requiring concrete implementations with the C++ programming language. These components place emphasis on modern software engineering methodologies such as source control and testing using the C++ programming language. Learning Objectives A student that successfully completes this course will: • Understand code to execution including tokenization, compiling, and linking. • Apply step-wise debugging to identify causes of software defects. • Utilize modern programming practices such as STL objects and object oriented (OO) programming including inheritance, overloading, templates, and polymorphism. • Possess knowledge to identify and explain standard algorithms (sort, search, recursion) and data structures (tree, hash, lists). • Develop skills to analyze novel code for its performance in both time and space complexity. • Be comfortable deciding between multiple solutions given optimization or cost criteria. • Apply test-driven software design and understand its role in minimizing errors and regression. • Understand the connection between running software and underlying hardware including basics of threading, interrupts, memory management, caching, and device access. Prerequisite(s): None Co-Requisite(s): None Concurrent Enrollment: None Recommended Preparation: Standard undergraduate ECE education, including: (1) software proficiency in an object-orient language at the junior level or above (e.g., EE455x or EE541), and (2), mathematical proficiency and familiarity with proof structures – EE 141L, EE 364, MATH 225, or equivalent.Technological Proficiency and Hardware/Software Required You need access to a full stack for C++ development. You may consider installing a linux virtual machine to ensure maximum interoperability and access to any tools. The instructor and teaching assistants will give guidance during the first weeks of class. Course Notes Discussion section is not optional. The homework assignments are discussed primarily during the discussion section. Teaching assistants will cover and demonstrate tools during the discussion. Discussion sessions couple with the lecture and may also cover important additional material. Required Readings and Supplementary Materials 1. Introductions to Algorithms, 3rd edition (required) Thomas Cormen, Charles, et. al. (available at the campus store) 2. The C++ Programming Language, 4th Edition (recommended) Bjarne Stroustrup (available at the campus store) 3. Code Complete: A Practical Handbook of Software Construction, 2nd Edition (recommended) Steve McConnell (available at the campus store)Page 3 Note: The texts are secondary to in-class lecture material and homework sets. Description of Exams All exams are cumulative and test both theoretical and applied aspects of the course. Exams include multiple-choice and/or short answer questions to demonstrate progress toward the learning objectives. They may also include free-response or open-ended questions to demonstrate comprehensive mastery. Students are expected to write correct code (abstract pseudo-code and C++). You may also be asked to read algorithms and determine expected behavior of novel computer code. Exam grading primarily follows correct reasoning but may include deductions for major syntax errors, algorithmic inefficiency, or poor implementation. You may use a single 8.5"x11" reference sheet (front and back OK). You may not use any additional resources. You are expected to bring a non-graphing scientific calculator. You must show how you arrived at your answers to receive full credit. Description and Assessment of Assignments All projects and assignments must be submitted electronically either through source code management (e.g. Github) or for auto-grading. There is no “paper-copy”submission required or allowed. Review requirements for each assignment before submission. No submission should be “headless” and should include a README file to describe any methods, testing, and validation. Grading Breakdown Assessment Tool (assignments) % of Grade Homework 40% Project 20% Midterm Exam 20% Final Exam 20% Assignment Submission Policy Grading will be handled by both automatic and manual means. Code submissions may be reviewed and applied a series of test cases to determine function.Page 4 Course Schedule: A Weekly Breakdown Topics/Daily Activities Readings/Preparation Deliverables Week 1 Intro: motivation and goals Methods of proof (Induction, proof by contradiction) Introduction to unit tests and version control Software environment install Assign hw #1 – tools, setup, and sample programs Software and environment setup SCM and tooling Week 2 Runtime complexity and Big-O notation C++ introduction: classes, member variables and methods Lecture slides [1]: Ch. 2, 3 [2]: Pt. 1, Sec. 6, 9, 12, 13 Assign hw #2 – complexity and proof (hw #1 due) Week 3 C++ functions, pointers, and references C++ constructor, copy constructor, and destructor Lecture slides [2]: Sec. 7, 8, 15, 16, 17 Assign hw #3 – functions and pointers (hw #2 due) Week 4 Data structures: array,
View Full Document