CISC-320/3.0 Fundamentals of Software Development
Original Authors: R. Tennent and N. Graham
Last Revised: June 25, 2008
Introduction to management of small and medium-scale software projects. Advanced programming
methodology using the programming language
C++. Includes a significant programming project.
Prerequisites: CISC 220/3.0 and CISC 235/3.0.
is now required in the Biomedical Computing program
and is recommended as an option or elective for any student who might become
involved in the development of real-world software
including memory and performance-intensive applications,
and those running on multi-core or distributed architectures.
Its intention is to provide an introduction to such features for
students who will not be taking more advanced courses in
while providing the opportunity for a significant programming project
for students who will be taking more advanced courses.
The course covers programming-language features
and programming methodology that
have not been covered in earlier courses and are not easy to learn on one's
C++ is one of the most
It is particularly important when performance considerations are primary.
Many employers insist on
C++ expertise when they hire software developers.
The course also provides a brief survey of software-engineering considerations for students not in Software Design, but does
not have substantial overlap with any single course and
so can be taken by students in Software Design.
Similarly, the course provides an elementary introduction to techniques in
concurrent and distributed programming.
Students are expected to have previously written programs in
Java but no prior
C++ experience is expected.
- Introduction to
C++ and its relation to
C and Java.
- Effective use of advanced features of
C++: default arguments, explicit
object-oriented storage management, namespaces, templates, operator overloading, multiple inheritance,
- Programming methodology and project management: design patterns, unit testing and debugging, issue tracking and version control, performance profiling and memory leak detection, defensive programming with assertions and exception handling, documentation.
- Dealing with numerical issues: handling very small and large numbers, overflow,
underflow, scaling, etc.
- Elementary concurrent programming: threads, deadlock, starvation.
- Elementary distributed-systems programming: sockets, client-server architecture.
Successful completion of a significant programming project will be
Possible Texts and References
- Timothy A. Budd:
C++ for Java Programmers, Pearson (1999).
- Mark Allen Weiss:
C++ for Java Programmers, Pearson (2003).
- Avinash C. Kak: Programming with Objects: A Comparative Presentation of Object-Oriented Programming With
C++ and Java, Wiley (2003).
- Andrew Koenig and Barbara E. Moo: Accelerated
C++, Practical Programming by Example, Pearson (2000).
- Walter Savitch: Absolute
C++, Pearson (2006).
- Harvey M. Deitel and Paul J. Deitel:
C++ How to Program, Pearson (2008).
- Bruce Eckel: Thinking in
C++, 2nd edition.
- Scott Meyers: Effective
C++: 55 Specific Ways to Improve Your Programs and Designs,
- Francis Glassborow: You Can Program in
C++: A Programmer's Introduction, Wiley (2006).
- Cay Horstmann and Timothy Budd: Big
C++, Wiley (2005).
- Herb Sutter: Exceptional
C++, Addison-Wesley (1999).
- Steve Oualline: How Not to Program in
C++, No Starch Press (2003).
- James O. Coplien: Advanced
C++: Programming Styles and Idioms, Addison-Wesley (1994).
- Andrei Alexandrescu: Modern
C++ Design: Generic Programming and Design Patterns Applied, Addison-Wesley (2001).
- A. Dingle and T, Hildebrandt:
C++: Memory First, Franklin, Beedle (2008).
- Bjarne Stroustrup: The
C++ Programming Language, 3rd edition, Addison-Wesley (1997).
- Bjarne Stroustrup: Programming: Principles and Practice using
C++, Addison-Wesley (2008).
- Matthew B. Doar: Practical Development Environments, O'Reilly (2005).
- Diomidis Spinellis: Code Quality, Addison-Wesley (2006).
- Andrew Hunt and David Thomas: The Pragmatic Programmer: From Journeyman to Master, Addison-Wesley (1999).
- Andreas Zeller: Why Programs Fail: A Guide to Systematic Debugging, Morgan Kaufmann (2006).