Academic Catalog and Handbooks

2023-2024 Edition

Computer Science (CSCI)

CSCI 105A  COMPUTER SCIENCE A-LEVEL (NS)  (4 Credits)  
Prerequisites: None  
CSCI 105B  GENERAL COMPUTER SCIEN A-LEVEL  (4 Credits)  
Prerequisites: None  
CSCI 130  Concepts of Computing: Science and Applications  (4 Credits)  
Introduces fundamental concepts of computer science that underlie all computing application, motivated by computational problems in business. Students will study the basic architecture of computers, the structure of programming, and the design of spreadsheets and databases. Through regularly scheduled labs they will gain hands-on experience with applications to business problems. Intended for students with an interest in computing in business. Prerequisites: Math 115 or four years of college preparatory mathematics or permission from the chair of the department.
Prerequisites: None  
Corequisites: CSCI 130L  
Equivalent courses: CSCI 130Z, HONR 210, HONR 210B  
CSCI 130L  Laboratory  (0 Credits)  
Prerequisites: None  
Corequisites: CSCI 130  
CSCI 140  Concepts of Computing: Science and Mathematics  (4 Credits)  
Introduces fundamental concepts of computer science that underlie all computing applications, motivated by computational problems in science and mathematics. Topics include programming, modeling and simulation applied to a wide range of scientific problems along with an introduction to fundamental structures of computing. Intended for students with an interest in computing in science. Prerequisites: MATH 115 or four years of college preparatory mathematics or permission from the chair of the department.
Prerequisites: None  
Corequisites: CSCI 140L  
Equivalent courses: CSCI 140Z  
CSCI 140L  Laboratory  (0 Credits)  
Prerequisites: None  
Corequisites: CSCI 140  
CSCI 150  Introduction to Computing in the Liberal Arts and Sciences  (4 Credits)  
Introduces fundamental concepts of computer science that underlie all computing applications, motivated by computational problems in the arts, humanities, and sciences. Topics include programming, modeling and simulation applied to a wide range of problems along with an introduction to fundamental structures of computing.
Prerequisites: None  
Corequisites: CSCI 150L  
Equivalent courses: CSCI 150Z  
Attributes: Abstract Structures (AS), Quantitative Reasoning (QR), Thematic Encounter1/2 - Truth  
CSCI 150L  Laboratory  (0 Credits)  
Prerequisites: None  
Corequisites: CSCI 150  
CSCI 160  Problem Solving, Programming, and Computers  (4 Credits)  
Introduces fundamental concepts of computer science that underlie all computing applications, motivated by computational problems in media, communication and the arts. Topics include programming, modeling and simulation applied to a wide range of visual, aural and textual problems along with an introduction to fundamental structures of computing. Prerequisite: 130 or 140 or 150.
Prerequisites: (CSCI 130 or CSCI 130Z or CSCI 140 or CSCI 140Z or CSCI 150 or CSCI 150Z)  
Corequisites: CSCI 160L  
Equivalent courses: CSCI 160Z  
CSCI 160L  Laboratory  (0 Credits)  
Prerequisites: None  
Corequisites: CSCI 160  
CSCI 200  Abstraction, Data Structures, and Large Software Systems  (4 Credits)  
A study of the data structures used in problem-solving and programming from an object-oriented perspective. Topics include the implementation and application of linear, hierarchical, network and associative data structures along with the use of standard program libraries to supply those structures. Prerequisite: 160 (or 161) and MATH 118 or 119 or 120.
Prerequisites: (CSCI 160 or CSCI 160Z or CSCI 161) and (MATH 118 or MATH 119 or MATH 119Z or MATH 120 or MATH 120Z)  
Corequisites: CSCI 200L  
Equivalent courses: CSCI 162, CSCI 162Z, CSCI 200Z  
CSCI 200L  Laboratory  (0 Credits)  
Prerequisites: None  
Corequisites: CSCI 200  
CSCI 217A  Programming Contest Team  (1 Credit)  
Prerequisites: CSCI 200 or CSCI 162  
CSCI 217B  Robotics Programming Contest  (1 Credit)  
Prerequisites: CSCI 160 or CSCI 160Z or CSCI 161  
CSCI 217D  Volunteering and Outreach  (0 Credits)  
Computer science and/or computational thinking outreach opportunities in the local community. Programs are generally offered on a semester-long basis. Prerequisite: Consent of Instructor.
Prerequisites: None  
CSCI 217E  Video Game Design and Development  (1 Credit)  
This lab will provide students the opportunity to learn the basics of video game design and development using industry standard development tools, such as the Unity game engine. Prerequisites: CSCI-200 or CSCI-230 or consent of instructor.
Prerequisites: CSCI 200 or CSCI 230  
CSCI 230  Software Development  (4 Credits)  
Provides an intensive, implementation-oriented introduction to the software-development techniques used to create medium-scale interactive applications, focusing on standard techniques and skills for software design such as the Unified Modeling Language (UML) and design pattern, and for software coding such as class design by contract (DBC), package design, code documentation, debugging, testing, version controlling, and refactoring. Prerequisites: 160 (or 161) and MATH 118 or 119 or 120.
Prerequisites: (CSCI 160 or CSCI 160Z or CSCI 161) and (MATH 118 or MATH 119 or MATH 119Z or MATH 120 or MATH 120Z)  
Corequisites: CSCI 230L  
CSCI 230L  Laboratory  (0 Credits)  
Prerequisites: None  
Corequisites: CSCI 230  
CSCI 239  Discrete Computational Structures  (4 Credits)  
Offers an intensive introduction to discrete mathematical structures as they are used in computer science. Topics include functions, relations, sets, propositional and predicate logic, proof techniques, elementary combinatorics, discrete probability and functional programming. Prerequisites: 130 or 140 or 150 and MATH 118 or 119 or 120.
Prerequisites: (CSCI 130 or CSCI 130Z or CSCI 140 and CSCI 140Z or CSCI 150 or CSCI 150Z) and (MATH 118 or MATH 119 or MATH 119Z or MATH 120 or MATH 120Z)  
Corequisites: CSCI 239L  
CSCI 239L  Laboratory  (0 Credits)  
Prerequisites: None  
Corequisites: CSCI 239  
CSCI 271  Individual Learning Project  (1-4 Credits)  
Supervised reading or research at the lower-division level. Permission of department chair required. Consult department for applicability towards major requirements. Not available to first-year students.
Prerequisites: None  
CSCI 310  Computer Organization  (4 Credits)  
Introduction to computer systems and architecture. Topics include digital systems, circuit design, machine level data representation, introduction to the von Neumann architecture, processor design, machine and assembly languages, memory systems, organization of operating systems, concurrency, and scheduling. Prerequisite: 160 (or 161), and either 239 or MATH 239.
Prerequisites: (CSCI 160 or CSCI 160Z or CSCI 161) and (CSCI 239 or MATH 239)  
Attributes: Thematic Encounter3 - Movement  
CSCI 312  Data Communications and Networks  (4 Credits)  
Introduction to the concepts, terminology and approaches used in data communication systems. Topics include protocol stacks as models and implementations, signal encoding, media for transmission, analysis of network architectures, addressing and routing, error and flow control, connection management and security. Prerequisite: 200 (or 162) or 230.
Prerequisites: CSCI 162 or CSCI 200 or CSCI 200Z or CSCI 230  
CSCI 317D  Bioinformatics  (4 Credits)  
This course provides an introduction to the field of bioinformatics. Topics will include sequences of DNA, RNA and proteins, comparing sequences, predicting sequences, predicting species; computational techniques such as substitution matrices, sequence databases, dynamic programming and bioinformatics tools. The course will have a seminar format. Prerequisite CSCI 200 (or 162).
Prerequisites: CSCI 162 or CSCI 200 or CSCI 200Z  
Equivalent courses: BIOL 373F  
CSCI 317G  Network Programming  (4 Credits)  
This course covers the basic concepts involved in writing programs that can be run using standard TCP/IP networks for displaying data, retrieving data from the network, acting on data from the network, etc. Emphasis will be placed on client-server programs. Generally, the tools will be Java based with use of HTML5,JavaScript, JDBC, JSP, and so on. One of the projects will be using the students' knowledge to construct a local cloud. Prerequisite: 200 (or 162) or 230.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) or CSCI 230  
CSCI 317H  Artificial Intelligence  (4 Credits)  
This course will introduce students to the basic principles in artificial intelligence research. It will cover representation schemes, problem solving paradigms, learning methods, and search strategies in artificial intelligence. Areas of application such as knowledge representation, learning in intelligent-system engineering, and expert systems will be explored. Students will develop intelligent systems by assembling solutions to concrete computational problems. Prerequisite: 200 (or 162) and either 239 or MATH 239.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) and (CSCI 239 or MATH 239)  
CSCI 317I  Computer Security  (4 Credits)  
This course will cover important topics in computer security. The first part of the course will be an intensive introduction to encryption. Students will analyze 1-time pads, Pseudo-random functions, symmetric-key algorithms, and public-key encryption systems with an emphasis on real security. The second part of the course will cover testing systems for security by using various tools for breaking into systems and how to protect against those tools. Additionally, there will be discussions of human-generated problems in otherwise secure systems such as poor password choice or non-protected system files. Prerequisite: 200 (or 162) or 230.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) or CSCI 230  
Equivalent courses: MATH 340B  
CSCI 317J  Agile and Efficient Software Development  (4 Credits)  
In this course we will cover modern approaches to creating software, with particular emphasis on effective and efficient small team approaches. We will also consider fundamental design and implementation principles that lead to efficient execution on modern computer platforms. We will cover basic database concepts in order to effectively use online data sources for modeling, simulation and analysis. Special topics will include the use of Jupyter notebooks, C++ and departmental advanced computing systems. Each student will develop software products as part of a small team using iterative, agile software methodologies. Prerequisite CSCI 200 (or 162) and 230.
Prerequisites: (CSCI 200 or CSCI 162) and CSCI 230  
CSCI 317K  Natural Language Processing  (4 Credits)  
This course studies the theory and application of Natural Language Processing (NLP). Topics include stemming, lemmatization, parts of speech tagging, parsing, and machine translation. Students will use specialized libraries in Python to develop applications for topic modeling, sentiment analysis, and text summarization.
Prerequisites: (CSCI 200 or CSCI 162) and (CSCI 239 or MATH 239)  
CSCI 317M  Volunteering and Outreach  (1 Credit)  
An opportunity to give back to the local community through volunteering, supplemented by study of computer science education. The course includes study and discussion of computer science pedagogy and computational thinking, with a focus on middle and high school level students and barriers to access in early CS education. This course has a required service learning component (one hour per week).
Prerequisites: CSCI 150 or CSCI 150Z  
CSCI 317N  Colloquium in Computer Science  (1 Credit)  
Study of one or more current works related to computer science. Works could include ethical, social, or technical content, depending on the instructor. Students will discuss, reflect, and produce a substantial artifact on advanced topics in CSCI, derived from the semester’s text selections.
Prerequisites: CSCI 150 or CSCI 150Z  
Restrictions: Enrollment limited to students with a class of Junior, Sophomore or Senior.   
CSCI 317O  Video Game Design and Development  (4 Credits)  
This course will introduce students to the foundation of game design and the technical and critical thinking skills necessary to create interactive and engaging games using the Unity game engine. Throughout the course, students will gain expertise in both the technical skills of developing applications in Unity, as well as a broader understanding of the design principles that go into the development of video games and interactive applications, including user experiences and graphical interfaces, player motivation and incentivization, game balance and game design theory, visual design, asset development, environment design, collaboration, communication, and teamwork. Students will develop adequate proficiency in the C# programming language. The course requires a large-scale project.
Prerequisites: CSCI 200  
CSCI 318  Topics in Software Development  (1-4 Credits)  
Selected computer science topics requiring a major software development project. Prerequisite: consent of instructor. May be repeated for credit.
Prerequisites: None  
CSCI 321  Computer Graphics  (4 Credits)  
This course will survey programming techniques for producing three-dimensional computer graphics. Topics will include event-driven programming, geometric objects and transformations, viewing, shading, and animation. Prerequisites: 200 (or 162) or 230 and either 239 or MATH 239.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) or CSCI 230 and (CSCI 239 or MATH 239)  
CSCI 330  Software Engineering  (4 Credits)  
This course examines advanced concepts in software design and development, including various software architectures, test-driven development, and current research topics in software engineering; requires a semester-long group project. Prerequisite: 200 & 230.
Prerequisites: CSCI 230 and (CSCI 200 or CSCI 200Z or CSCI 162)  
CSCI 331  Database Systems  (4 Credits)  
Introduction to physical file organization and data organization techniques, including an examination of data models, file security, data integrity and query languages. Discussion will focus on examples which illustrate various data models. Prerequisite: 200 (or 162) and 230.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) and CSCI 230  
CSCI 332  Machine Learning  (4 Credits)  
Introduction to supervised as well as unsupervised machine learning and data mining algorithms. Students will study, analyze and implement various algorithms designed to efficiently extract useful knowledge from large volumes of real-world data. Prerequisites: 200 (or 162) and either 239 or MATH 239.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) and (CSCI 239 or MATH 239)  
Equivalent courses: CSCI 317A  
CSCI 338  Algorithms and Concurrency  (4 Credits)  
Introduction to formal methods for the design and analysis of complex algorithms, with an emphasis on developing students' problem-solving abilities. Focuses on computational resources and ways of conserving both time and memory. Prerequisites: 200 (or 162) and either 239 or MATH 239.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) and (CSCI 239 or MATH 239 or MATH 239Z)  
CSCI 339  Theoretical Foundations of Computer Science  (4 Credits)  
Introduction to the theoretical structures of programming languages and computers. Topics include regular expressions, formal grammars, abstract automata and computability. Prerequisites: 160 (or 161) and either 239 or MATH 239.
Prerequisites: (CSCI 160 or CSCI 160Z or CSCI 161) and (CSCI 239 or MATH 239 or MATH 239Z)  
CSCI 340  Organization of Programming Languages  (4 Credits)  
A survey of the design, implementation, and analysis of programs and programming languages of various paradigms (including imperative, functional, and logic languages). The course covers topics related to language design, compilers, safety and vulnerability, program verification, and program analysis. Prerequisite: 200 (or 162) and either CSCI 239 or MATH 239; 230 and 339 recommended but not required..
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) and (CSCI 239 or MATH 239)  
CSCI 341  Compiler Theory  (4 Credits)  
Introduction to the design and construction techniques of modern language compilers, including both parsing an code generation. Prerequisite: 200 (or 162).
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162)  
CSCI 350  Operating Systems  (4 Credits)  
The fundamentals of the software that drives the computer, including single-user, multi-user and multi-tasking systems. Topics include basic structure of operating systems, synchronization (various models of concurrency, including processes and threads), local and distributed file systems, memory management, process resource management, and virtualization. The course also covers topics in systems programming in a traditional Linux operating system. Prerequisite: 200 (or 162); 310 recommended but not required.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162)  
CSCI 351  Principles of Parallel Computing  (4 Credits)  
Presents the theoretical foundations of parallel computing and an overview of several parallel computing models. Exposes students to current parallel programming models and systems through projects. Teaches students the ability to determine the most appropriate model for a given task. Prerequisite: 200 (or 162) and either 239 or MATH 239; 310 recommended but not required.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) and (CSCI 239 or MATH 239)  
Equivalent courses: CSCI 317F  
CSCI 371  Individual Learning Project  (1-4 Credits)  
Supervised reading or research at the upper-division level. Permission of department chair and completion and/or concurrent registration of 12 credits within the department required. Consult department for applicability towards major requirements. Not available to first-year students.
Prerequisites: None  
CSCI 372  Senior Research  (4 Credits)  
Individualized experimental, theoretical or applied projects for seniors. Each student intensively explores a topic, writes a major research paper, and makes a formal presentation to the department. Prerequisite: Consent of department chair. May be repeated for up to 4 credits.
Prerequisites: None  
CSCI 373  Senior Research in Computer Science  (4 Credits)  
Directed research in computer science organized around a selected topic and conducted in a seminar format. Includes consideration of computer science research methodology and analysis of current research in the seminar topic. Each student intensively explores a topic, writes a major research paper and makes a formal presentation to the department. Prerequisite: 200 (or 162) or 230 and JN/SR CSCI or NMCP major.
Prerequisites: (CSCI 200 or CSCI 200Z or CSCI 162) or CSCI 230  
Restrictions: Enrollment limited to students with a class of Junior or Senior. Enrollment is limited to students with a major in Computer Science, Math/Computer Science or Numerical Computation.  
Attributes: Experiential Engagement (EX)  
CSCI 377A  Ethical Issues in Computing  (4 Credits)  
Examines a variety of philosophical and ethical questions that arise within the development and use of computer technology. Students will become familiar with several models of ethical reasoning and will apply these approaches to questions in a variety of areas of computer science, including artificial intelligence, nanotechnology, data mining, software development, and cyberspace.
Prerequisites: You must take INTG 100 or 205 prior to taking a Thematic Focus Course. You must take a Cultural and Social Difference: Identity (CI) course prior to or at the same time as Thematic Focus Courses.   
Equivalent courses: CSCI 369  
Attributes: Human Experience (HE), Thematic Focus - Justice, Writing Requirement (WR)  
CSCI 397  Internship  (1-8 Credits)  
Completed Application for Internship Form REQUIRED. See Internship Office Web Page. Cannot be counted toward the major or minor but can be used for elective credits toward graduation.
Prerequisites: None  
Attributes: Experiential Engagement (EX)