The Computer Science Curriculum — A Rationale
Updated:   20 August 2002

    Computer Science is simultaneously one of the most pragmatic disciplines and one of the most conceptual.

    It must be pragmatic because of the rapid pace of technological change.   Not only computer professionals but virtually everyone who is a more than casual user of computers is continually confronted with new tools to be learned and skills to be mastered.  Members of the technical cadre that produce all this technology for us are not exempt: they also must learn ever more rapidly evolving methodologies if they are to continue to contribute to the progress of the field.  These societal and professional growth needs require that a Computer Science curriculum undergo continual review and evolution.   Its graduates must be suitably equipped to "hit the ground running" — to begin performing productive work without extensive additional training.   Therefore, appropriate courses should include treatment of up-to-date and in-demand operating systems, languages, tools and applications — the pragmatic features of the discipline.

    On the other hand, the education provided must be conceptual because any specific instance of pragmatic content may have a relatively short useful life.   Keeping up with the latest new tools and methods is done most effectively when the conceptual component of the undergraduate education has provided a strong base.   New developments may then be understood not as isolated phenomena but as additions or changes within an already well-established broader framework.   The efforts and costs involved in acquiring new skills are lessened if the basic education has provided a sufficiently conceptual understanding of the field.

    In order to achieve pragmatism and conceptuality simultaneously, Computer Science courses at Salem State College have been designed around fundamental ideas and application areas in the field (as indicated in the course titles).   Concepts are presented through the medium of real, current examples, reviewed and updated frequently, in order to include the strong pragmatic flavor desired.


The Role of Computer Languages

    An example of the above principles is the use of computer languages in our courses.   A thorough understanding of computers requires an understanding of the nature of computer software, and some direct experience in the design and construction of software is the surest route to that understanding.   The basic three-course sequence, CSC 201J-202J and CSC 260, provides that experience.

    Software design methodologies and fundamental concepts of programming are largely independent of the language used to implement the designs.   (Note that of the Computer Science courses aimed at majors, CSC 200 or above, only a few have titles that mention a specific programming language.)   However, the language used for instruction must be carefully chosen, based on three important qualities: ease of learning, encouragement of systematic and disciplined (i.e., "good") programming habits, and value in the current employment marketplace.   In the introductory course sequence CSC201J-202J, ease of learning and establishment of good habits are given higher priority, while in more specialized upper level courses, current marketplace value may play a more significant role.

    For several years the programming language used in the basic sequence was Ada. Although not the "hottest" of contemporary programming languages — though it is still highly valued in the Government, military, and high-reliability communities — it remains one of the most accessible in which to learn fundamental programming techniques.   (Its syntax was originally derived from that of Pascal, a language specifically designed for use in the teaching of programming.)  However, Ada relies heavily on the "procedural" methodology of program design. The rapid growth and current overwhelming importance of the object-oriented point of view has led to a reorganization of the CSC201J-202J course sequence and the adoption of a different instructional programming language.

    The programming language now used in the CSC201J-202J sequence is Java, a language widely used in programming for the World Wide Web but also containing all the features needed for general application programming. Object-oriented concepts and techniques are now introduced early and applied throughout the curriculum.

    For those entering students who do not feel ready to tackle the first required Computer Science course, CSC201J, a preliminary course CSC 190, Pre-Programming, is available to provide additional experience in problem solving and systematic reasoning.   The choice of programming language in this course is governed even more by accessibility to the student.   Languages such as Logo and Karel the Robot, as well as an object-oriented version Karel++, are among the tools used in this course.

    Upper-level requirements for CSC majors include proficiency in a second programming language.   C++ remains one of the most valued languages in today's job market, and this is the language most often used in the course CSC 311, Object Orientation and Problem Solving Strategies.   The "object orientation" aspect here deals mainly with concepts and tools such as design patterns and frameworks, and with the use of the extensive available libraries such as STL (the Standard Template Library).   The course could be taught using other object oriented languages such as Eiffel or Delphi, though these are less widely used in the industry. Another choice for a "second language" is a modern version of Fortran (the oldest of the "high level" programming languages), which is used in CSC 245A, a course dealing with programming for mathematical and scientific applications.

    In the course CSC 312A, Human-Computer Interfaces, there is a large amount of conceptual material to be taught (in some Universities the subject is a concentration, or even a major).   There is also a large selection of valuable software technology to chose from.   For example, experience with the Microsoft Foundation Class Library, a software library allowing C++ programs to use all the facilities of Windows, will provide students with very strong credentials for specific jobs, as will experience with other languages such as Visual Basic.   Nevertheless, the course is designed to allow students to adapt to whatever other languages, libraries and toolkits may come along in the future.



Salem State Home Computer Science Home Faculty Computer Studies Major Flow Sheet
Computer Studies Minor Courses Course Sequence Diagram Computer Laboratories