The curriculum for the BS degree in Computer Science is based on the concept of tracks, which represent specific areas of emphasis within the broader discipline of Computer Science. Three sets of courses, known as the Computer Science Foundation, the Track Foundation and the Track Core, have been defined as part of the requirements for each track. These courses are important not only as they relate to degree requirements, but are also important aspects of the prerequisites for capstone courses, both Senior Project and Senior Thesis.
The exact composition of the foundations and cores as they relate to degree requirements is defined in the requirements in effect when the student enters the Department of Computer Science. (See BS Degree Requirements for details for each academic year.) The current makeup of the Computer Science Foundation and a list of current optional plans of study are shown below.
Computational Science and Engineering is a multidisciplinary area within computer science drawing from traditional computer science, mathematics, the physical and biological sciences, and engineering. It integrates knowledge and techniques from all of these disciplines to create computational technologies for a wide range of important applications in science and engineering. Our understanding of the natural world is now based on computation as well as on traditional theory and experiment. Numerical simulations permit investigations that would be too time-consuming, expensive, dangerous, or even impossible to do experimentally. Problems considered by computational scientists include climate and weather prediction, spacecraft design, video game construction, and the discovery of new medicines and treatments among many others.
The Computational Science and Engineering track emphasizes courses in numerical computation, high-performance scientific computing, and supporting areas of science and computer science. Students in this track will gain exposure to leading-edge computing systems making them valuable contributors to a variety of professional opportunities including:
Computing is changing our lives. The transformation is shaped not only by technology but also by how people express themselves, how they think, and how they interact in groups. The Human-Centered Computing (HCC) track will prepare students to contribute to this accelerating global process.
HCC integrates the command of technology with insight into the individual mind, the interactions of groups and organizations, and society. Students in this track will learn how to design, build, and evaluate the systems of the future. These socio-technical systems will tie together technology with communication, collaboration, and other social processes to address the challenges and opportunities of our world.
The learning opportunities in HCC draw on and integrate research in human computer interaction, design of interactive systems, computer supported cooperative work, computer supported collaborative learning, educational technology, tools that support creativity, user-developed knowledge collections, and gaming.
HCC projects address applications in health care, urban planning, emergency management, inclusive design, creativity, digital libraries, and learning. HCC provides opportunities for connections with other programs at CU including the:
HCC graduates will be leaders in shaping the media and modes of interaction that empower citizens to participate in their communities, support creative expression, and address human needs in the emerging digitally literate society.
The use of technology is escalating in everyday tasks for communication and collaboration. As we become increasingly dependent on services such as email and cell phones, the demand for interconnection of communication devices and systems grows. It is the role of networked systems professionals to select, design, deploy, integrate, evaluate, and administer network and communication infrastructures. The Networked Devices and Systems track emphasizes courses in:
This track emphasizes a significant understanding of the computer from low-level machine architecture to user-level application and service management. Examples of everyday services managed by networked systems professionals are:
Network and systems administrators find employment in companies and organizations of every type, from banks to law firms, from universities to the government; each of these institutions needs someone to run their network and email services and to protect private data from outside intruders.
Software permeates the very fabric of modern society. Entire industries such as transportation, shipping, banking, government, and medicine would be unable to function without software infrastructure. Software engineers work in teams to create and maintain this software, ensuring that the resulting systems are reliable, efficient, and safe.
The Software Engineering track emphasizes courses in:
Software Engineering is an exciting domain with significant potential for lifelong employment. The position of software engineer was recently ranked as the "best job" in America. High salaries and opportunities for creativity were key to this number one rating. Furthermore, the demand for software engineers is projected only to increase for the foreseeable future. Indeed, the field of software engineering leads many published lists of fastest-growing occupations in the country.
See the Software Engineering Flow Chart for a quick overview of all degree requirements for the track.
Computers benefit almost every part of our lives -- from entertainment to cars to phones to medical devices. Computer systems engineers work with hardware and software to help application developers make these devices a reality. The Systems track emphasizes courses in:
Some of these courses are cross-listed with the courses from the Department of Electrical, Computer and Energy Engineering (ECE). The track, however, focuses on software design, while ECE has greater emphasis on circuits and electronics.
Computer systems engineers work in teams to develop the software for embedded devices and to interface computers with physical systems. Examples of artifacts that computer systems engineers create include: