Computer Science (CSCI)
CSCI 105A COMPUTER SCIENCE A-LEVEL (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 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 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 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.
Corequisites: CSCI 160L
Equivalent courses: CSCI 160Z
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 217A Programming Contest Team (0-1 Credits)
Prerequisites: CSCI 200 or CSCI 162
CSCI 217B Robotics Programming Contest (0-1 Credits)
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 (0-1 Credits)
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.
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 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 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.
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.
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.
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.
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.
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.
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.
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 317P Problem-solving Techniques for Programing Contests (1 Credit)
A study of problem-solving techniques--including topics like language selection, data structure selection, graph problems, and dynamic programming--with emphasis on preparation for a programming competition. Students solve problem sets both individually and as a team, and develop skill in recognizing problem styles and applying known techniques.
Prerequisites: CSCI 200 or CSCI 200Z
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.
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.
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.
Equivalent courses: DATA 302A
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.
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.
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.
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..
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.
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 (0-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.
Restrictions: Enrollment limited to students with a class of Junior or Senior.
Enrollment is limited to students with a major in Computer Science, Data Analytics 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)