Spotlight on SD (CS 251): The course that opens doors
NOTE TIME CHANGE: (Spring 2005)
CS 251 meets MWF 12:55-1:50
Lab choices (CS 252)
are Wednesday 2-4 and Thursday 9-11 am
Summary
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 and concepts. 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 for
enough time to master the valuable software
technology in SD. With CS 125 (CS1) as its
only prerequisite, SD is suitable for CS
students, non-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 diagram shows,
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.
|