Computer Science Concentration for Students Matriculated After Jan. 1, 2009
Computer science focuses on aspects of the computer field that have a well-defined set of abstract concepts and principles. The objective of a concentration in computer science is to demonstrate strong comprehension of those abstract concepts and principles — the theory of the field — and to implement, demonstrate and test this theory via computer. As a result, a concentration in computer science would be a good choice for someone interested mostly in algorithms, systems programming, or computer hardware design.
Computer science, as a disciplinary concentration, probably would not be the best choice for someone primarily interested in specific, real-world problem solving in the business world. For such individuals, concentrations in information systems, information technology, or computer studies generally would be more appropriate.
These recommendations for formulating concentrations in computer science are based on "Computing Curricula 2001: Computer Science" by the Joint Task Force on Computing Curricula: IEEE Computer Society and Association for Computing Machinery [1]. These are general guidelines; students must consider these guidelines from the perspective of their individual goals. For example, students considering graduate school should do further research into the expectations for preparation for graduate work.
Mathematics
Mathematics forms the foundation for much of computer science. [2] Students are expected to develop facility with mathematical language and symbols.
Because of the central and prerequisite position of discrete mathematical ideas within the field of computer science, study of discrete math is required. If a student does not have prior learning in discrete mathematics, that student should consider appropriate mathematical preparation in an early contract (though not necessarily the first). In the study of discrete math, the student should acquire a working knowledge of:
- functions, relations and sets
- basic logic
- proof techniques
- basics of counting
- graphs and trees
- discrete probability.
Additional studies commonly include linear algebra, calculus, or finite mathematics, although there are other possibilities. [3]
Programming
Students are expected to develop their understanding of programming beyond the skill level (that is, beyond the particular commands and syntax of a specific language) and develop an understanding of the general principles and characteristics of programming and programming languages. This includes:
- algorithms and problem solving with an emphasis on fundamental data structures
- recursion
- object-oriented programming
- event-driven programming.
At least some portion of a study should be devoted to object-oriented programming.
Note About Coding
Computer programming is one step in the software-development process; it is the implementation of the solutions to problems. Within a computer-science degree, it is not an end unto itself. The implementation of a problem solution or an algorithm in a particular language is coding, and while coding is a valuable skill, the conceptual understanding of the principles involved in developing solutions and algorithms, implementing them via standard reproducible methods and explaining them clearly are as, or more, important than coding. Therefore, it would not be expected that students would have a large number of programming languages as the focus of their degree plan.
Algorithms and Complexity
Computer science studies are expected to include the study of algorithms and complexity including:
- basic algorithmic analysis
- algorithmic strategies
- fundamental computing algorithms
- distributed algorithms
- basic computability.
Architecture, Organization, Operating Systems and Net-centric Computing
Students are expected to demonstrate knowledge of:
- computer architecture and organization
- operating systems
- net-centric computing.
Software Engineering
Students should develop an understanding of software engineering that links theory with practice. Such study might include:
- software design
- using APIs (application programming interfaces)
- software tools and environment
- software processes
- software requirements and specifications
- software validation and reliability (quality)
- software evolution.
Note: Systems analysis and design is different from software engineering and it is possible that students might develop a program that would include the former along with additional components to achieve the desired linking of theory and practice.
Social and Professional Issues
The science, mathematics and technology area of study guidelines specify that, “a student’s degree studies should provide an awareness of the wider context in which science and technology operate.”
In the case of computer science, it is expected that such study would be focused on social and professional issues, which might include such topics as:
- social context of computing
- professional and ethical responsibility
- methods and tools of analysis of issues, risks and liabilities of computer-based systems
- intellectual property
- privacy
- civil liberties and history of computing
- other appropriate topics to be determined.
Additional Studies
Computer science concentrations might be strengthened by the inclusion of one or more of the following topics:
- human-computer interaction
- graphics and visual computing
- intelligent systems
- information management (including databases)
- computational science and numerical methods.
While the above material constitutes general guidelines, students must consider these guidelines from the perspective of their individual goals. In particular, students going on to graduate school will need to review the expectations for mathematics and content such as theory of computation.
Students who will be seeking employment based on their computer science degree must review the current professional expectations for their intended career path. It should be noted that some knowledge not emphasized here, such as knowledge of information management and databases, is a common expectation. Similarly, some industries and professions have very specific expectations for specific programming languages.
Students should explicitly discuss in their rationale essay how each of the above foundation topics are incorporated and demonstrated in their degree program and how the program is designed to meet their goals. It is not necessary that the specific terms used above appear in individual study titles.
Endnote 1: www.acm.org, accessed 7/20/06
Endnote 2: Students pursuing concentrations in computer science are assumed to have facility and confidence with algebra. Algebraic symbols are the language of all higher mathematics and the assumption is that students understand the meaning of algebraic expressions and can carry through algebraic computations with confidence. Students who do not have skill and confidence with algebra must address this issue very early in their program, before they undertake any study related to computing.
Endnote 3: The study of calculus has been the traditional method by which students have developed mathematical skills. Because of this tradition, there are usually several examples and some algorithms in advanced-level study which draw on ideas of calculus. So, studying calculus is still useful. But calculus is about continuous variables, while computers work with discrete variables. For that reason, topics such as linear algebra or finite math are usually more directly relevant to computing.