Document Type


Publication Date



It is generally accepted that all engineering students should be able to perform some programming tasks. For example, ABET calls for electrical engineering (EE) curricula to include “engineering topics (including computing science) necessary to analyze and design complex electrical and electronic devices, software, and systems containing hardware and software components.” In most disciplines, programming plays a supporting role as one of the tools that future engineers will need to tackle problem solving and design projects. Because it is considered such a basic tool, programming is typically taught in freshman or sophomore courses. Many engineering students get their first exposure to programming in a class where a programming language is used to assist problem solving. In electrical engineering (EE), this may be followed by another course covering more advanced programming concepts. For example, in our EE program at Portland State University (PSU), we teach MATLAB as part of a first-year “introduction to engineering” and problem solving course. This is then followed by an intermediate level C programming course. Obviously, in computer science (CS) programs there is much greater emphasis on immediate application of programming and development of necessary theoretical concepts. Most engineering programs do not have time in their curriculum to prepare students in their lower-division coursework to a similar level of depth.

Because of the exact and unforgiving nature of programming, many students struggle when asked to perform what appear to be simple programming tasks. This problem has persisted to the present day. At the same time, many students also have difficulty formulating general problem solving strategies, which makes it even harder to use programming as a tool. These and other factors contribute to high attrition rates in freshman engineering courses. It was our observation of students’ struggles that led us to consider the question of what the best practices in programming in CS may be and to try to transfer them to our courses.


© 2016 American Society for Engineering Education. Other scholars may excerpt or quote from these materials with the same citation.

Locate the Document

The final published version is available:

Persistent Identifier