ENES 171 Intermediate Programming Concepts for Engineers

This course will introduce students to intermediate principles of software development and will include high level languages, abstract data types, documentation, data structures, graphs, and dynamic memory allocation. Students work in software development teams on projects in the electrical and computer engineering fields. Program languages such as C and Java will be used in a version control environment to design and test code. Software development projects will involve relevant engineering topics such as modeling, microprocessors, robotics, cryptography, bioinformatics, embedded software, game programming, image processing, and wireless sensor networks. Before taking this course, students must have programming experience in a modern imperative language (e.g. C, C++, Java, Python, Ruby, etc.). That experience must include the development and implementation of abstractions to solve problems. For additional information, including requests for departmental permission to register, contact the Science, Engineering, and Technology division office. Departmental permission is based on evaluation of a student's programming portfolio.

Credits

4

Prerequisite

ENES 100; CMSY 141 with a grade of C or better or departmental permission. Pre- or corequisite: MATH 181

Hours Weekly

3 hours lecture, 3 hours lab weekly

Course Objectives

  1. 1. Develop robust and extensible software through effective software engineering practices.
  2. 2. Apply abstract data types and complex data structures.
  3. 3. Demonstrate the ability to independently learn new languages and libraries.
  4. 4. Create test suites and periodic builds, as a member of a team, using version control.
  5. 5. Use tools common to programming such as text editors, compilers, link-editors, and
    debuggers.
  6. 6. Demonstrate the ability to model software using standard documentation techniques.

Course Objectives

  1. 1. Develop robust and extensible software through effective software engineering practices.
  2. 2. Apply abstract data types and complex data structures.
  3. 3. Demonstrate the ability to independently learn new languages and libraries.
  4. 4. Create test suites and periodic builds, as a member of a team, using version control.
  5. 5. Use tools common to programming such as text editors, compilers, link-editors, and
    debuggers.
  6. 6. Demonstrate the ability to model software using standard documentation techniques.