Course syllabus‎ > ‎


Engineering design objectives

In this course, you will carry out the design and the development of a software project in the C programming language given a set of requirements and constraints. However, rather than having methods imposed on your design process, you are expected to develop the ability to use experience, lecture material, online resources, your skills, and research to solve the specific design problems. You are expected to identify design questions, carefully consider design alternatives, and understand trade-offs that result from design decisions you take.

The overall software project you undertake in this course is comprised of a set of deliverables divided among four principal development milestones. The deliverables are iterative and cumulative. That is, you design and develop a single working system which is submitted in stages, and subsequently revised and extended. Each submission is considered a milestone and must produce a working instance of the system that is iteratively refined and extended.

Overall, the software artifacts you submit for evaluation are expected to work within the constraints we impose (i.e., header files, template files and Makefiles we provide), are expected to compile without intervention, to function according to specification, and to be cleanly implemented following the design you previously proposed and documented in the accompanying design document. We allow you to annotate and revise your design document, if after submitting the design document you re-consider certain design decisions. We expect that you explain your revisions and deviations from the initially proposed design.

The software artifacts should show that you:

  • Follow a clean, clear and logical implementation that matches your proposed design, allowing for documented re-considerations of earlier decisions
  • Reference all your sources, including libraries you use, and code snippets that you adopt and adapt
  • Understand the trade-offs and their impact resulting from your design decisions
  • Understand and perfect the proper and professional use of tools, such as the mature use of the C programming language and related tooling
  • Understand to use the right tool for the task at hand
  • Understand how to effectively include unit tests and rigorous software testing into the development process

Communication objectives

In this course, you will document your design process and report on it in written form and in oral presentations. Deliverables are iterative and cumulative; that is, you write a single design document which is submitted in stages, and continually revised and enlarged. This document is not an after-the-fact record of the design; it serves a significant function in the process of making and justifying design decisions before you start to code. You will also write a short, weekly progress report in the form of a memo to your project manager.

Oral presentation skills are developed in three ways: through weekly meetings with your project manager, through a Software Demonstration (in place of a Midterm Exam) and through a Final Presentation (in place of a Final Exam). Each of these builds a separate skill, but assignments build upon each other. You begin with an informal briefing situation which is conversational and relies mostly on a question-and-answer structure. The software demonstration is more on your feet, but is dynamic and puts the presenters in close relationship with a small audience. In the Formal Presentation the team talks to the audience, but still with a sense of spontaneity, the kind of organized conversational tone that characterizes the best of engineering presentations. Both the software demonstration and final presentation will have a question and answer component.

Overall, your written documentation is expected to show evidence that you have developed an understanding of document requirements specific to software design, as opposed to a design document in another engineering discipline. You are expected to use the writing process appropriately and formatively in the stages of design. The design document should also show that you can:

  • Develop and express strong logical justifications for design decisions
  • Revise a written document to show clarity of thinking
  • Construct clear, readable, grammatically correct sentences
  • Construct concise, unified paragraphs with topic sentences and logical structure
  • Utilize list forms where appropriate
  • Choose vocabulary appropriate to the discipline
  • Edit reports for most common errors
  • Incorporate visual elements (graphs, flow charts, diagrams) appropriately

Through oral presentations in this course, you are expected to show evidence of the ability to present yourself in a mature, professional manner. Whether delivering a weekly report, software demonstration or final presentation, you should be able to:

  • Speak in an organized manner, with a main point and supporting evidence
  • Answer questions in a way that shows understanding of course material and ability to relate information from lecture and readings to design decisions you made and results you experienced
  • Design graphic material to communicate key information