Spotlight on SD (CS 251): The course that opens doors



CS 251, Software Design and Implementation (SD) opens many future options, because of the conceptual and technical background it provides and the valuable communcation and teamwork skills it develops. SD introduces the popular and powerful C++ programming language, and uses it to create software as it is built in the “real world”. The strong programming skills developed in SD apply to other disciplines and to internships and careers as well as to further work in CS, and learning C++ helps with learning other programming languages, many of which have similar syntax andconcepts. Plus, SD’s team project experience is fun and develops essential “people skills.” It’s no wonder that SD is the main prerequisite for most core-level CS courses.

The required quarter-credit lab (CS 252) is the key extra ingredient for SD (CS 251), because the lab and daily assignments together provide forenough time to master the valuable software technology in SD. With CS 125 (CS1) as its only prerequisite, SD is suitable for CS studentsnon-CS students who want effective programming skills, those wanting to know how real-world software is created, and people interested in computing-related careers.


Eight reasons to take SD

If you only take two CS courses in your life, Software Design and Implementation (SD, CS 251) is the most strategic choice for a second course. SD “opens doors,” giving you many options for future choices, because it reinforces and applies the concepts of CS, develops specific technical and thinking skills that give you great advantages in both academia and the real world, and expands on your communication and teamwork abilities, the “people skills” so essential for anything you do.

  • SD introduces programming in C++, a widely used and powerful programming language. C++ is so popular because it has complete support for object-oriented programming, yet offers great access to low-level operations like pointers; because the C++ language processor system can be used to produce high-performance programs; and because C++ shares the same basic syntax as C and Java, two other popular languages.
  • SD emphasizes standard software-design practices, such as a software lifecycle using the waterfall model for software development. These methods, which emphasize thorough planning and systematic construction of programs, not only represent several principles of CS, but are also used throughout the “real world” for creating software.
  • SD is the main prerequisite for nearly all core courses in CS, making SD the single most valuable course for opening doors to further study. It’s so often a prerequisite because the skills, concepts, and computational maturity developed in SD constitute such a significant rise in ability to handle CS work at this level, and because those courses specifically require the topics of memory management (ADS,OS) and software design (ESD,CSA,PL,ADS,OS) that rarely appear in C++-based courses other than SD.
  • SD develops valuable and substantial programming skills. CS isn’t programming, but CS students use programming to explore the concepts of CS, and SD provides solid fundamental strength in such programming.
  • SD develops valuable and substantial programming skills, Part II (other disciplines). As for CS, students of other disciplines can use programming to explore the concepts of their fields, and SD provides an excellent background for such applications. Bioinformatics, a dynamic and enormously fruitful combination of CS and Biology, serves as a high-profile model. But CS offers potential for productive collaboration with any other field or interest, and SD provides excellent basic background for interdisciplinary work involving computing.
  • SD helps with learning new programming langauges. One learns a lot about picking up new programming languages from any second programming language, but the languages Scheme and C++ illustrate many contrasts that show a wide range of differences. SD shows how these seemingly unlike languages exhibit the same underlying principles—which also apply to any other programming language. Plus, mastering the feature-rich and technical C++ itself makes it easier to learn other languages you may encounter in the future.
  • SD teaches memory management concepts and practices through hands-on experience. Memory management issues have great impact in computing, but it’s difficult to develop a “feel” for them with languages such as Java and Scheme, which hides memory management from the programmer. SD’s thorough treatment of memory management informs a student by raising awareness of these subtle yet critical concerns.
  • SD includes a team project experience, which is both invaluable and fun. The team project teaches software design principles, strengthens interpersonal abilities, provides a glimpse to real-world uses of computing and CS, raises awareness of the impact that software has on people and groups (through a introductory ethical analysis of that project), and adds interest and value to the study of software.

How to take SD

SD (CS 251, Software Design and Implementation) is offered every Spring. The course involves three lecture-discussion meetings plus a separate two-hour lab meeting each week. Beginning in Spring 2005, the lab meeting has its own course number CS 252 and .25 credit; sign up for CS 251 and one of the sections of CS 252. For most of the semester, students master the course’s material through required daily homework and weekly laboratory assignments. The team-project phase of the course near the end of the term involves project deadlines instead of homework, and the scheduled lab times become team meeting sessions.

SD presents fewer conceptual challenges than its prerequisite CS1. The challenge of SD resides in its demand for time: there is simply no way to obtain the programming skills and other benefits of SD without spending a lot of time on task. This investment pays off handsomely, but it’s critical that students allow for the time requirements for SD and its lab when planning course load. That’s why additional course credit is given for the SD lab (CS 252).

The lab meetings make SD accessible to all. Major new concepts and skills appear first in lab with “hands-on” learning exercises, so students start each new topic in a context of concrete experience reinforcing general principles. Plus, your instructor is on hand to answer your questions as you encounter conceptual or technical questions during the lab period. Ongoing daily homework assignments enable SD students to master the material through practice.

Examples of SD students

  • Students interested in CS take SD to explore their interest in the field and to prepare for other courses and future work in CS. As the CS curriculum diagramshows, SD occupies a central and prerequisite role in St. Olaf’s CS curriculum.
  • Students wanting to know about the construction of software take SD to gain insight into software they use and to develop programming skills that enable them to create their own software.
  • Students interested in undergraduate research take SD to develop software-development skills for investigations into disciplinary and interdisciplinary areas. The programming capabilities obtained in SD make it possible to build one’s own custom applications to support research activities.
  • Students readying themselves for the world beyond St. Olaf in any field take SD as part of a balanced personal career preparation. You don’t need to become a computing professional in order to derive future benefit from SD: In a world increasingly dominated by information and technology, the understanding and skills provided by SD empower you to participate in these new directions and make a difference in the world.