EE 312: Software Design and Implementation I

Basic problem solving, design and implementation techniques for imperative programming; structured programming in the C/C++ language; programming idioms; introduction to software design principles, including modularity, coupling and cohesion; introduction to software engineering tools; elementary data structures; asymptotic analysis.

In selected Fall semesters a NON TRANSCRIBABLE honors section will be taught. There will be NO notation that a student took an honors section on their transcript but students are welcome to note it on resumes if they choose to take this section of EE 312. More details below.

Announcing EE312 Honors Section Fall 2015

Instructor: Craig Chase

Lecture T/Th Morning 9:30-11:00 AM, plus one of the following recitations

TH: 11:00AM unique 16185, TH: 12:00PM unique 16190, F: 12:00PM unique 16195

TH: 1:00PM unique 16200


The Fall 2015 course schedule includes three EE312 offerings. The T/Th morning lecture section of EE312 will be designated the “honors” section. The honors section is intended for students who received (or who are likely to receive) a grade of B+ or better in EE319K and who are likely to choose either Software Engineering or Computer Architecture and Embedded Systems as their primary technical area. EE312 Honors will cover the same topics as EE312, but will go into more depth. For example, in EE312, students are introduced to an implementation of the standard C functions for managing memory (malloc and free). In EE312H, students will learn about alternative implementations of malloc that provide better performance and will learn how garbage collectors work. In EE312, students generally program in C and learn only a few fundamental constructs from C++ and how these concepts can be applied when building elementary data structures. In EE312H, students will acquire genuine competence in C++ programming and will build robust implementations of data structures (and other C++ objects) that leverage exception handling, templates, iterators and other C++ language constructs that are considered essential to real-world programming in that language.

Students are reminded that EE312H is not required for EE422C or EE445L – students can take either the regular EE312 or the honors EE312 and be well-prepared for any of the follow-on courses. However, we hope that students may find that the EE312H experience provides a more in-depth understanding of this prerequisite material, and that in turn allows the students to get more out of classes like EE422C, EE445L and EE360C when they take them.

Frequently Asked Questions

What is the GPA requirement to enroll in EE312H? There is no GPA requirement. Students are permitted to self-select into EE312H or EE312. We do remind you that EE312H is taught with an expectation that the students have a very strong background in computer engineering. If you struggled in EE306 or EE319K, then EE312H is probably not for you.

How will grades work in EE312H? Grades in EE312H will count the same as a grade in any other class as far as your overall GPA calculation is concerned, and grades in EE312H will be assigned using the full palette of course grades, from A to F, just like any other course. However, EE312H will be curved to achieve the following objective – It should be no harder to make an A or a B in EE312H than it is to make the same grade in EE312. So, if the enrollment in EE312H consists of students who would normally make As and Bs, then grades in EE312H will be quite high, and I expect to assign very few “C” grades. However, students in EE312H must be capable of earning that A or B. A student who might normally make a “C” in EE312 is likely to find themselves in over their head and staring at a D or F in EE312H. The EE312 material is going to be challenging, and students who are unable to demonstrate success with that material will not pass the class.

How will EE312H be different from EE312? Students in EE312H are expected to grasp the important, fundamental concepts from EE312 more quickly than the regular EE312 students. That provides me with the opportunity to take interesting detours into topics and questions that I can’t do in EE312. For example, we talk about how the stack works in EE312, but I never have a chance to explain how buffer overflows create security vulnerabilities in software. How do worms propagate themselves on the internet? So, EE312H will move at a faster pace than EE312. But, rather than speeding through the standard topics (and jumping ahead into EE422C), the EE312H class will cover a broader array of issues on each topic that we review (e.g, the stack). I think EE312H will make you a much more successful software developer, but you’re still going to need to take EE422C and EE360C to get all the material you’ll need.

Will EE312H be offered every semester? No, EE312 Honors will be offered only in the fall semester, at least for the next couple of years.

What will the EE312H workload be like? Programs will be, on average, twice as long and at least 50% more complex than the EE312 assignments. The exams will be hard, so students will likely want to invest considerable time to study and prepare for the exams. Overall, the increase in workload, for an average EE312 student, probably corresponds to an increase of 1 credit-hour worth of effort. For the target audience (the top students from EE319K), we don’t think that the workload in EE312H will be unreasonable for a three-credit course. 

Will I be able to drop EE312H in the middle of the term if I find out that it’s too much? I can’t promise that the regular EE312 will fit in your schedule should you want to add/drop from one section to the other, or that you’ll be able to circumvent UTs rules for course add/drop. I can tell you that EE312H is going to be paced to provide students with precisely that option, at least for the first few weeks of the semester.

I don’t want to take on the workload for EE312H but can I still come to the class? Students who wish to audit a class need to obtain the instructors permission. In the case of EE312H for Fall 2014, all I can say is, I’m happy to have you attend class provided you do not take a seat needed by a student who’s registered for credit. I can also tell you that you won’t learn nearly as much by passively participating. Programming is something you learn by doing. In EE312H, you’ll definitely get out of the class in proportion to what you put into the class. 

Course Level: 



The following coursework with a grade of at least C-: Biomedical Engineering 303 or Electrical Engineering 306, and Electrical Engineering 319K.