Course Description
EE 538: Computing Principles for Electrical Engineers is tailored for graduate students seeking a comprehensive understanding of advanced computer programming concepts. This course is structured into four main sections, each designed to build a solid foundation in both theoretical knowledge and practical skills.
- Introduction to Programming in C++: Students will start with the basics of C++ programming, learning syntax, data types, and basic constructs to build a strong programming foundation.
- Data Structures: The course will cover essential data structures such as arrays, stacks, queues, linked lists, and trees. Students will learn how to implement and use these structures effectively in C++.
- Algorithm Design: This section focuses on understanding, analyzing, and designing algorithms. Topics include sorting, searching, recursion, and the basics of complexity analysis.
- Introduction to Software Engineering Concepts: Students will be introduced to key software engineering principles, including test-driven design, object-oriented design, and source control. These concepts are crucial for developing robust, maintainable, and scalable software projects.
Through hands-on projects and assignments, students will apply these concepts to solve real-world problems, emphasizing learning through implementing major programming components in C++. This approach not only solidifies theoretical understanding but also enhances practical skills, preparing students for challenges in software development and engineering.
Learning Objectives
- Acquire a solid foundation in C++ programming, understanding syntax, control structures, and fundamental programming concepts.
- Learn to implement and utilize key data structures such as arrays, stacks, queues, linked lists, and trees in C++ to solve complex problems.
- Develop the ability to design, analyze, and implement algorithms, focusing on sorting, searching, and recursion, along with understanding their time and space complexity.
- Apply modern programming practices and principles, including the Standard Template Library (STL) for efficient coding and object-oriented programming for software design.
- Understand and apply software engineering concepts such as test-driven design, object-oriented design, and source control to manage and scale software projects effectively.
- Master step-wise debugging techniques for identifying and fixing software defects, enhancing the reliability and maintainability of code.
- Explore the relationship between software and underlying hardware, including aspects like threading, interrupts, memory management, and caching, to optimize program execution and resource use.
- Make informed decisions between multiple programming solutions based on optimization criteria or cost constraints, preparing for real-world software development challenges.
Course Schedule
Week | Topics/Daily Activities | Readings/Preparation | Deliverables |
---|---|---|---|
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 |
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 | |
3 | C++ functions, pointers, and references; C++ constructor, copy constructor, and destructor | Lecture slides; [2]: Sec. 7, 8, 15, 16, 17 | Assign hw #2 – functions and pointers |
4 | Introduction to C++ class | ||
5 | Data structures: array, stack, linked list, queue, tree; C++ STL (string, vector, set, map, algorithm) | Lecture slides; [1]: Ch. 10; [2]: Ch. 14, 18-21, 27, Pt. 4 | |
6 | Data structures II: heap, tree | [1]: Ch. 11 | |
7 | Binary search and binary search trees; Recursion: divide and conquer | [1]: Ch. 12 | Assign hw #3 – Trees |
8 | Midterm Exam; Project discussion | ||
9 | Introduction to graphs; Graph representations | [1]: Ch. 22 | Assign hw #4 – graph representations |
10 | Graph search and traversal (DFS, BFS, topological sort) | Lecture slides; [1]: Ch. 22 | (project topic and proposals due) |
11 | Dynamic programming and memorization | Lecture slides; [1]: Ch. 15, 16 | |
12 | Shortest path algorithms I | Lecture slides; [1]: Ch. 24 | Assigne HW #5 (project phase 1 due) |
13 | Shortest path algorithms II; Other graph algorithms | Lecture slides; [1]: Ch. 25 | (project phase 2 due) |
14 | Backtracking | [1]: Ch. 6 | |
15 | Sorting algorithms | [1]: Ch. 7, 8 | (project phase 3 due) |
16 | Final Exam | (project report and video due) |
Technological Proficiency and Hardware/Software Required
For EE 538: Computing Principles for Electrical Engineers, students must ensure they have the proper technological setup to fully participate in and benefit from the course. This includes access to a laptop with a Linux-compatible terminal, enabling the use of a wide range of development tools and environments. Students are expected to have a full C++ development stack available for use.
During the first weeks of the course, guidance will be provided on setting up your development environment. This setup will include installing Bazel, a powerful tool for building and testing software, and Visual Studio Code, a versatile code editor that supports C++ development and debugging. Furthermore, students are required to create a GitHub account for version control and code submission. These tools are essential for completing course assignments and projects effectively.
Students should prepare their laptops accordingly before the course begins to ensure a smooth start. For those unfamiliar with Linux, Bazel, Visual Studio Code, or GitHub, additional resources and support will be provided to help with the installation and setup process.
Required Readings and Supplementary Materials
- Introduction to Algorithms, 3rd Edition by Thomas Cormen et al. - This foundational text provides a comprehensive overview of algorithms in computer science, covering a wide range of topics from data structures to advanced algorithms. It serves as an essential resource for understanding theoretical underpinnings and practical applications in algorithm design.
- The C++ Programming Language, 4th Edition by Bjarne Stroustrup - Authored by the creator of C++, this book offers in-depth coverage of the C++ language, including its standard library and key design principles. It is vital for students looking to deepen their understanding of C++ and develop efficient, high-quality software.
- Code Complete: A Practical Handbook of Software Construction, 2nd Edition by Steve McConnell - A comprehensive guide to software construction, this book covers best practices in programming, design, and code improvement. It emphasizes the importance of clean, maintainable code and is a must-read for aspiring software engineers committed to excellence in their craft.
Grading Breakdown
Assessment Tool | % of Grade |
---|---|
Homework 1, 2, 3 | 35% |
Project/Homework 4, 5, 6 | 25% |
Exam #1 and Quiz | 20% |
Exam #2 | 20% |
Grading Scale
Letter Grade | Numerical Point Range |
---|---|
A | 95-100 |
A- | 90-94 |
B+ | 87-89 |
B | 83-86 |
B- | 80-82 |
C+ | 77-79 |
C | 73-76 |
C- | 70-72 |
D+ | 67-69 |
D | 63-66 |
D- | 60-62 |
F | 59 and below |
Course Policies
Academic Integrity
Academic integrity is foundational to our learning community. This course follows USC's standards on academic integrity. Students are expected to submit original work and properly attribute sources. Violations, including plagiarism and cheating, will result in disciplinary action, which may include failure in the course and further sanctions by the university.
Attendance
Attendance is mandatory and integral to the success of all students. Absences can impact your final grade. If you must miss a class, please notify the instructor ahead of time. Accommodations for student athletes and religious observances will be made.
Zoom Etiquette
For classes held via Zoom, maintain professionalism in all communications. Keep your camera on if required, participate actively, and use features like raise hand and chat responsibly. Ensure your microphone is muted when not speaking to minimize background noise.
Assignment Submission Policy
All assignments must be submitted electronically. Ensure your submissions are complete and include any required documentation or README files. Assignments will undergo both automated and manual review to ensure integrity.
Support and Accommodations for Students with Disabilities
USC is committed to inclusivity and provides support for students with disabilities. If you require accommodations, please register with the Office of Student Accessibility Services (OSAS) and inform the instructor to make necessary arrangements.
Support Systems
The university offers various support systems, including counseling, mental health services, and resources for addressing bias or harassment. For more information or assistance, please refer to the following resources: