Computer Science
The most important aspect of Computer Science is problem solving, an essential skill for life. Students study algorithmic processes and the design, development and analysis of software and hardware used to carry out these processes. Since computers are used for a variety of purposes by people in all walks of life, there is a significant human side to computer science as well.
Some graduates choose to continue their studies in graduate or professional school (not necessarily in computer science) before seeking employment. Majors accepting positions upon graduation typically work for companies that provide computing hardware, software or services for use in business, education, government and research.
The department regularly offers Computer Science I and other courses of a more general nature for students interested in surveying key topics in computing. Departmental programs consist of a computer science major and a computer science minor. Most courses provide hands-on computing experience.
Computing facilities include pen-based computer laboratories that are part of the University network. They provide tools for computer science, standard desktop productivity, e-mail and connectivity to the Internet. The department maintains a state-of-the-art laboratory of Linux workstations with high-end servers that provide robust file services and a full array of software development tools. The department also has a computer-based, cooperative-work laboratory and a lounge for use by its majors.
University programs of interest to computer science majors include: Science Research Fellows Program, Information Technology Associates Program and Winter Term internships. Some employment and research opportunities with the department and the Computer Center are available during the year and summer. Finally, the student computer clubs (Association for Computing Machinery and ACM-Women) provide coordinated programs each year.
Data Science
Numerous inquiries today are advanced through finding the story behind the data; frequently, Data Science builds the road from the what to the why. Through an interdisciplinary approach using Statistics, Mathematics, and Computer Science, this program delivers principles, methodology, and guidelines for conducting data analysis by providing tools, values, and insights. Data Science helps prepare students for success in an increasingly data-driven world, enhances analytical and problem-solving skills, and strengthens communication skills.
Requirements for a major
Computer Science
Total courses required | Nine and one-half CSC + MATH 123 + one allied course |
---|---|
Core courses | CSC 121, CSC 125, CSC 231, CSC 235, CSC 236, CSC 240, CSC 498 |
Other required courses | Any three CSC courses (except CSC 398 and CSC 498) at the 300 or 400 level |
Number 300 and 400 level courses | Four including CSC 498 |
Senior requirement and capstone experience | The senior requirement is CSC 498. As a culmination of the computer science major, each senior completes an independent project with credit earned through the course CSC498. Each student describes his or her project idea in a formal project proposal. Projects typically involve the design, implementation, testing and documentation of a software system that builds on earlier coursework both inside and outside the department. Students are mentored by a faculty member and meet regularly in groups to present their work and to discuss related topics such as the ethical implications of their work. |
Additional information | MATH 123 is also required. MATH 223 may be substituted for MATH 123 with approval of the advisor. Students are required to take one allied course from a list maintained by the department; with approval of the advisor, students may substitute a 300/400 level CSC course for the allied course. Students are encouraged to complete an internship or research experience related to the major. This is not a requirement, however, and no departmental credit is awarded for these experiences. The advisor will offer guidance on selection of courses inside and outside of the department for students who may be interested in focusing on particular areas related to computer science. |
Recent changes in major | Beginning fall 2024, the core courses include CSC125, CSC235, and CSC236 instead of CSC122, CSC232, and CSC233. |
Writing in the Major | Computer scientists must be able to communicate effectively with other computer scientists (e.g., as a member of a team designing a large system, or conveying results of research) and non-computer scientists (e.g., user documentation such as a user manual, or describing a project to a potential investor or customer). Communicating with other people, both orally and in writing, is an essential skill required of all computer scientists. Students majoring in Computer Science develop writing skills across several courses:
Writing assignments will comprise a significant portion of the course grade for each of the above-mentioned courses, and the course grade will reflect students' writing proficiency. Students will meet the Writing in Computer Science requirement by earning credit for CSC 125, Principles of Software Development, CSC240, Writing in Computer Science, and CSC498. |
Requirements for a minor
Computer Science
Total courses required | Five |
---|---|
Core courses | CSC 121 and CSC 125 |
Other required courses | At least two of the courses from: CSC 231, CSC 235, and CSC 236. At least one CSC course at the 300 or 400 level. |
Number 300 and 400 level courses | One |
Data Science
Total courses required | 5 |
---|---|
Core courses | MATH 141 or PSY 214 or ECON 350 or BIO 375, MATH 261 or CSC 370, MATH 341 or ECON 385 or ECON 450, CSC 121,CSC 125. |
Other required courses | |
Number 300 and 400 level courses |
Courses in Computer Science
CSC 120Computer Science for All
Computers (in their various kinds and sizes) appear in our hands, cars, and other parts of our daily lives. They are essential tools in business, healthcare, education, and industry. Computers play a crucial research role in technical fields, humanities, and social sciences. This course serves students who want to learn elementary principles of computer science and some basic data analysis skills using the popular computer language Python. Offered each semester. Not offered pass/fail. Does not count toward CS major, CS minor, or Data Science minor. Does not count toward CS GPA.
Distribution Area | Prerequisites | Credits |
---|---|---|
Science and Mathematics | 1 course |
CSC 121
Computer Science I
This is an introductory course in which problem solving and algorithm development are studied by considering computer science topics, such as computer graphics, graphical user interfaces, modeling and simulation, artificial intelligence and information management systems. A brief introduction to content in the remaining core courses, such as object-oriented concepts, stacks, and queues. Interesting and relevant programming assignments related to these topics are written in a high- level programming language that supports objects. Additional assignments utilize writing and data analysis to reinforce central course concepts and to address related areas of computing, such as ethics, history and the meaning of intelligence. The course meets three hours in class and two hours in laboratory (3-2). Offered each semester. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
Science and Mathematics | 1 course |
CSC 125
Principles of Software Development (formerly CSC 232)
A study of fundamental techniques and tools for managing software development projects, together with relevant professional and ethical issues. Topics include methodologies such as UML diagrams for software specification and design, documentation standards, and tools for testing, code management, analysis, and debugging. Object oriented programming techniques such as inheritance and polymorphism are emphasized. Students will develop skills in individual and team software development through extensive practice designing and implementing object oriented software systems. In addition, students gain experience reading, documenting, presenting and critiquing such systems. Offered each semester. Not offered pass/fail. Prerequisite: CSC 121.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 121 | 1 course |
CSC 197
First-Year Seminar
A seminar focused on a theme related to the study of computer science. Open only to first-year students. Does not count toward the major in computer science or into the major GPA.
Distribution Area | Prerequisites | Credits |
---|---|---|
1 course |
CSC 231
Computer Systems
This is an introduction to the study of computer hardware and its relationship to software. Topics include information representation, the architecture of the central processing unit, memory organization and hierarchy, assembly language, and machine-level representation of programs, interactions, and relationships among system components (hardware, operating systems, compilers, network environments), and the impact of architectural decisions on performance. Offered each semester. Not offered pass/fail. Prerequisites: CSC 125.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 125 | 1 course |
CSC 235
Data Structures (formerly CSC 122)
This course includes programming topics such as sorting and searching, sets, recursion, and dynamic data types. Additional concepts involve data type abstraction and implementation developed through studying structures such as lists, stacks, queues, hash tables, and binary search trees. The course emphasizes the object-oriented implementation of these structures. Students learn tools for algorithm analysis and explore the use of standard libraries. The concept of tradeoffs (i.e., time vs. space, iteration vs. recursion, static vs. dynamic) recurs as a theme throughout the course. Prerequisite: CSC125. Pre- or corequisite: MATH123. Offered each semester. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 125; pre- or corequisite MATH123 | 1 course |
CSC 236
Algorithmic Foundations of Computation (formerly CSC 233)
This course explores advanced data structures and the theoretical foundations of computation at various levels of abstraction. Specific topics include graph theory and related algorithms; analysis of algorithms; dynamic programming; functional programming with an emphasis on recursion and recurrences; and the description of languages using formalisms such as regular expressions, finite state machines, and context-free grammars. Prerequisite: CSC 235. Offered each semester. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 235 | 1 course |
CSC 240
Writing in Computer Science
In this course students learn to communicate technical and non-technical information about computer science to technical and non-technical audiences. This writing includes communication with users (e.g., user manuals), the general public (e.g., op-ed pieces related to technical issues), and other non-technical audiences (e.g., legislators, potential investors, customers). Students also develop a project proposal document. Some of the writing in this course deals with ethical and social issues. Prerequisite or corequisite: CSC232
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 232 (pre- or co-requisite) | 1/2 course |
CSC 296
Computer Science Topics
Topics are chosen from computer science content areas that extend explorations of content in existing courses or allow exploration of content not duplicated in regular course offerings. May count as an allied course in the computer science major depending on the topic. Does not count toward the major GPA.
Distribution Area | Prerequisites | Credits |
---|---|---|
1/4-1/2-1 course |
CSC 320
Human Computer Interaction
This course examines fundamental principles in Human Computer Interaction as seen from the viewpoint of a computer scientist. Topics include user-centered design, expert reviews, usability tests, tradeoffs between interaction devices, alternative input-output methods, including handwriting recognition and associated algorithms, the design of interfaces for users with visual or motor impairments, construction of appropriate error messages and implementation of graphical user interfaces (GUIs). Prerequisite: CSC 232 and CSC 240. Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 232 and CSC 240 | 1 course |
CSC 322
Computer Networking
This course examines the core concepts and fundamental principles of computer networks and the services built on top of them. Topics covered include protocol organization, circuit-switch and packet-switch networks, routing, flow control, congestion control, reliability, security, quality-of-service and Internet protocols (TCP/IP). Prerequisites: CSC 231 and CSC 232. Typically offered annually. May not be taken pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231 | 1 course |
CSC 330
Artificial Intelligence
This course examines the implementation of intelligent algorithms on a computer system. The concept of an intelligent algorithm is motivated by initial discussions of the nature of intelligence and its relation to computers, particularly the Turing test. The course begins with two basic topics of artificial intelligence. The first is problem definition, state spaces and search methods, and the second is knowledge representation and logical reasoning. Following these topics is coverage of more advanced topics, such as game-playing algorithms, genetic algorithms, planning algorithms, computer vision, learning algorithms and natural language processing, among others. Prerequisite: CSC 232 and 233. Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 232. Recommended: CSC 233. | 1 course |
CSC 340
Web Programming and Cybersecurity
This course covers some fundamental networking concepts, web application development and web application security. Topics covered include: introduction to the Internet, World Wide Web and internet protocols, markup languages, client side scripting, server side scripting, database concepts, encryption/decryption, web application vulnerabilities and how to build secure web applications. Prerequisites: CSC 232 and either CSC 231 or CSC 233. Typically offered bi-annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231 or CSC 233. | 1 course |
CSC 342
Mobile Development
In the first half of the course, we discuss the structure of a typical Android app and overview the Android Studio software used to develop mobile applications (apps). Students will learn how to design the appearance of activities ('pages') using popular layouts. We survey common Views ('widgets') used in form-based apps and how their attributes are defined in XML. Afterward, students learn how to create controllers that define the behavior of activities using concepts from object-oriented programming (OOP). We study how to create "listener" objects for user interactions (events) and discuss how event processing works behind the scenes in Android. Next, students will learn how to use intents to start/transition between activities ('pages') and develop apps that are resilient after configuration changes in a resource-constrained environment. In the second half of the course, we focus on different methods for persistent data storage.
Distribution Area | Prerequisites | Credits |
---|---|---|
1 course |
CSC 350
Graphics
This course is an introduction to the concepts, techniques, algorithms and implementation of computer graphics. Topics include moving and drawing lines in absolute and relative coordinates, transformations, windowing, clipping, projections, perspective, polygon filling, hidden surface techniques and a variety of applications, including graphical user interfaces and menuing systems. Prerequisite: CSC 232. Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 232 | 1 course |
CSC 360
Autonomous Robotics
Autonomous robots collect data from their environments and respond to the values gathered from their sensors in order to solve problems. In this introduction to autonomous robotics, students will first learn the basic principles of mechanical construction, electronics, sensors, motors and robot programming. Then, they will design, build and program original robots to solve problems such as finding the brightest light in a room and traversing a maze. In the hands-on course, students spend the majority of their time actually working with robots under instructor supervision. There is a significant writing component used in assessment, so students enhance their scientific writing skills. Prerequisites: CSC231 and CSC233. Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231 and CSC 233 | 1 course |
CSC 370
Data Mining
Data mining is the effort to reach useful conclusions from data by building interpretive and predictive computational models. This course prepares students to do this through hands-on exploration of data preparation, and model development, tuning, and validation. This is done in the context of various algorithms such as gradient-descent, ensemble methods, and linear regression. Coursework includes multiple significant programming projects and a large final project. Prerequisites: CSC 232 and CSC 233.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 232 and CSC 233 | 1 course |
CSC 396
Computer Science Topics
Topics are chosen from computer science content areas that extend explorations of content in existing courses or allow exploration of content not duplicated in regular course offerings. Open to students by permission of instructor or to those who satisfy prerequisites determined by the instructor.
Distribution Area | Prerequisites | Credits |
---|---|---|
Open to students by permission of instructor or to those who satisfy prerequisites determined by the instructor. | 1/4-1/2-1 course |
CSC 398
Independent Study
Directed study in a selected topic in computer science. Participation by arrangement with a faculty member. Consult with faculty member to determine credit. May be repeated for credit with different topics. No credit from CSC398 will count toward the computer science major. Permission of instructor and department chair required.
Distribution Area | Prerequisites | Credits |
---|---|---|
Permission of instructor and department chair required. | 1/4-1/2-1 course |
CSC 424
Programming Languages
The topics of this course include a history of programming languages, virtual machines, representation of data types, sequence control, data control, lexical vs. dynamic scoping, sharing, type checking, parameter passing mechanisms, run-time storage management, context-free grammars, language translation systems, semantics and programming paradigms. Prerequisite: CSC 231, CSC 232, and CSC 233.Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231, CSC 232 | 1 course |
CSC 426
Compilers
This course offers the study of theories related to compilers with the goal of implementing a compiler for a simplified variation of a language such as C++. Topics include formal languages, grammars, lexical, syntactic and semantic analysis, code generation and optimization. Prerequisites: CSC 231, CSC 232, and CSC 233. Typically offered annually.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231, CSC 232, CSC 233 | 1 course |
CSC 428
Operating Systems
Topics in operating system concepts and design, such as file systems, CPU scheduling, memory management, virtual memory, disk scheduling, deadlocks, concurrent processes, protection and distributed systems are studied in this course. Topics are treated thoroughly in a generic way and also discussed in detail with respect to a specific operating system. Prerequisites: CSC 231, CSC 232, with a pre- or co-requisite of CSC 233. Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231, CSC 232, CSC 233 | 1 course |
CSC 430
Computer Security
This course examines and discusses computer security, how to protect our computing infrastructure from illegal access, tempering, denial of access, etc. We will first define terms such as security and secure computing, then we'll talk about cryptography including symmetric and public key cryptographic techniques and their applications. Other topics covered include secure software, cyber security, database security, system security and hardware security. Prerequisites: CSC231, CSC232, and CSC233.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC231, CSC232, and CSC233. | 1 course |
CSC 440
Theory of Computation
Various models of formal languages (which provide a basis for compilers) and computation (which defines the kinds of problems that can be solved by a computer) are studied. Topics include regular languages, regular expressions, finite state automata, context-free languages, context-free grammars, push-down automata and Turing machines. The application of these models to several practical problems in computer science is considered. Computational limits are also discussed, using as examples several problems which cannot be solved by any algorithm. Prerequisite: CSC 233. Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 233 | 1 course |
CSC 480
Database and File Systems
This course provides an external and an internal view of relational database management systems (DBMSs). The external view consists of database design and implementation. The database query and manipulation language SQL will be studied to the degree that students will be able to become proficient in this language on their own. The internal view involves characteristics of secondary storage devices, methods of organizing information, various file organization and accessing techniques and other topics related to database engine implementation. Programming assignments complement topics discussed in class, including the building of a few key components of a database engine. Prerequisite: CSC 231, CSC 232 and CSC 233. Typically offered annually. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231, CSC 232, CSC 233 | 1 course |
CSC 496
Computer Science Topics
Topics are chosen from content areas of computer science that either extend explorations of content in existing courses or allow explorations of content not duplicated in our current course offerings. Open by permission of instructor to students with more advanced prerequisites chosen by the instructor.
Distribution Area | Prerequisites | Credits |
---|---|---|
Open by permission of instructor to students with more advanced prerequisites chosen by the instructor. | 1/4-1/2-1 course |
CSC 498
Senior Project
Students complete a project proposal and a project under the sponsorship of a member of the computer science faculty. Students build on previous course work and/or internship experiences to complete their projects, to produce a project write-up, and to examine ethical issues related to their projects. Periodic progress reports will also be given. Prerequisite: CSC 231, CSC 232, CSC 233, CSC 240 (beginning in 2015-16) and MATH 123, senior standing and at least one computer science course at the 300 or 400 level. Offered each semester. Not offered pass/fail.
Distribution Area | Prerequisites | Credits |
---|---|---|
CSC 231, CSC 232, CSC 233, CSC 240 (beginning in 2015-16), MATH 123 | 1 course |