17-630 Data Structures and Algorithms for Engineers
Data Structures and Algorithms for Engineers is a 12 unit full semester course.
Many organizations today are incorporating computer hardware and software into the products they design and build. Most of these organization's primary competencies are not computer science or software engineering, but find that automation makes their products smarter, more capable, and more appealing in the market place. Because deep domain knowledge is needed to build these products, these organizations often hire engineers from traditional engineering disciplines to build the fundamental product platform, but then the same engineers must write software to make the product actually work. These are capable engineers from many disciplines other than software engineering and unfortunately they must learn software engineering on the job. This can be fraught with trial and error and often results in poorly designed and documented systems, defect laden software, bloated development costs, unmaintainable software, and other similar problems. In addition to developing functionality, some application domains are often highly constrained and unforgiving in their quality attribute needs such as performance, safety, availability, and others. These systems intimately depend upon software to provide these capabilities in addition to basic functionality. Designing software intensive systems with these properties in a cost effective way takes first-class computer science and software engineering expertise. Unfortunately engineers building these systems lack a formal background in computer science. The result is that many of these engineers are not fully realizing their potential as software engineers. This course is designed to bridge these gaps in formal computer science training.
More course details can be found in the Data Structures and Algorithms for Engineers syllabus.
After completing this course, students will:
recognize and analyze critical computational problems in the course of their work, generate alternative solutions to problems, and judge among them;
better understand, analyze, and characterize the factors that influence algorithmic computational performance and memory consumption;
understand detailed code structures and their underlying strengths and weaknesses;
perform detailed, code-level design, and to document the design in an understandable way.