# Computer Science

Computer Science

510.430.2226

cs@mills.edu

In view of the pervasive roles that quantitative analysis and technology play throughout our society, a basic familiarity with the discipline of computer science has become an integral part of a liberal arts education. As a college for women, Mills recognizes the importance of encouraging women to study computer science and of providing them with the high-quality instruction they need to succeed in this discipline. Encouraging computer literacy, along with hands-on experience with computer systems, is part of the College's continued effort to increase the analytical and technical competence of its graduates.

Mills has an unusually distinguished record of pioneering in computer science, particularly for a liberal arts college. Between 1960 and 1974, the College progressed from a single course in computing with one professor and one student to a full-fledged computer science major. Mills was the first women's college to offer an undergraduate degree in computer science and to establish a Department of Mathematics and Computer Science.

**Computer Science Major and Minor**

Today, the major and minor encompass the core curriculum recommended by the Association for Computing Machinery. The major is designed to provide the student with fundamental concepts and problems in computer science and to prepare her for a career and/or graduate study in computer science and related fields.

To declare a major in computer science, a student must have completed CS 063 Introduction to Computer Science , CS 064 Computer Concepts and Intermediate Programming, CS 124 Data Structures and Algorithms, and MATH 004 Discrete Mathematics I. The grade in each of these courses must be at least a B-. Exceptions may be made upon the recommendation of the department. Students required to declare a major before completing these courses may provisionally declare the computer science major. The provisional declaration will be revoked if the student does not earn at least a B- in CS 063 Introduction to Computer Science , CS 064 Computer Concepts and Intermediate Programming, CS 124 Data Structures and Algorithms, and MATH 004 Discrete Mathematics I.

## Accelerated Degree Program: BA/MA in Interdisciplinary Computer Science

Mills offers a unique Accelerated Degree Program: BA/MA in interdisciplinary computer science. Undergraduate students enrolled in the program major in a field different from computer science, while simultaneously working on the degree requirements for an MA in interdisciplinary computer science. They receive a BA upon completion of undergraduate degree requirements, which usually takes four years, and they receive an MA upon the completion of the graduate degree requirements, which usually takes an additional year. Students may minor in computer science and pursue a BA/MA in interdisciplinary computer science.

Undergraduates at Mills are encouraged to apply for admission to the program and, if possible, make their intentions known by their junior year. At that time, they will be assigned a second advisor, one in computer science.

## Program Goals:

- Design and write a correct computer program
- Understand how computer systems (including architecture, operating systems, networks, and compilers) work
- Understand and apply the mathematical concepts underlying computer science
- Form interdisciplinary connections and apply computer science to meeting human needs

**CS 062: Contemporary Computing (4 Credits)**

This course covers different aspects of computer science and teaches students fundamental programming concepts. Students learn the basics of a wide range of topics such as computer components, data representation, computer networking, HTML, JavaScript, and CSS. At the end of the course, each student designs and implements a web site using HTML, CSS and JavaScript.

**Note(s):** No previous experience with computers is required. Concurrent lab required. Limit 25 students.

**Meets the following Core requirements:** Quantitative Literacy

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Core Goals:**

Quantitative Literacy

- Interpretation: Students will have the ability to explain information presented in mathematical and computational forms. (Introduced)
- Students will learn to represent integers, real numbers and text in binary code. They will also learn binary arithmetics.
- Students will learn to read computer code.
- Representation: Students will be able to convert information into mathematical and computational forms analytically and/or using computational tools. (Introduced)
- Students will design and implement computer programs using Javascripts.
- Analysis: Students will be able to draw appropriate conclusions using mathematical or computational reasoning and understand the limits of such conclusions and the assumptions on which they are based. (Introduced)
- Students will analyse and understand binary data.
- Communication: Students will be able to communicate quantitative ideas in the languages of mathematics, computer science, or quantitative social sciences and will be able to utilize quantitative information in support of an argument. (Introduced)
- Students will design solutions to algorithmic problems. Then, they will implement their solutions on a web site using several technologies and computer languages, such as HTML, CSS and Javascript.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Introduced)
- Studends will learn to write JavaScript programs to create interactive web sites.
- Understand the structure and development of logical arguments (Introduced)
- Students will develop algorithms to solve problems.

**CS 063: Introduction to Computer Science (4 Credits)**

Problem solving with computers. Problem decomposition, development of graphical user interfaces, development of simple algorithms, and the design and construction of computer programs using object-oriented techniques and the Java programming language.

**Note(s):** No previous experience with computers is required. Concurrent lab required. Limit 30 students.

**Meets the following Core requirements:** Quantitative Literacy

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Introduced, Practiced)
- Ability to create an algorithm that provides a solution in accordance with the problem specifications and then to take that algorithm and encode it in a formal computing language including testing and debugging the program.
- Using introductory software engineering principles, develop a prototype for a graphical user interface that meets the problem specifications and anticipates potential interactions between the program and its users.
- Ability to take a problem statement, clarify it, and analyze it in order to create a set of specifications appropriate for a computing environment.

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Introduced)
- Students will create computer systems and applications to solve real-world problems and meet human needs, such as communication, health, education and entertainment.
- Students use mathematical models, in particular linear models, to guide effective decision making in real-world problems.
- Design and write a correct computer program. (Introduced, Practiced)
- Students use software engineering principles, specific computer languages and computer technologies to develop correct applications such as graphical user interfaces, databases, client-server, multithreading, assembly language programs, and web applications.
- Students analyze and study algorithms in terms of computational resources (e.g. through time/space complexity analysis).
- Students study and utilize data structures and make appropriate choices based on design tradeoffs to solve problems and maximize the efficiency of programs.
- Students take a problem statement, clarify it, and analyze it in order to create a set of specifications appropriate for a computing environment. Students then create an algorithm that provides a solution, encode it in a formal computing language, and finally test and debug the program.

Data Science Program Goals

- Develop capacity to learn new analysis methods and tools. (Introduced)
- Develop a rigorous computational foundation for practical programming.

Interdisc Computer Science Program Goals

- Form interdisciplinary connections and apply computer science to meeting human needs. (Introduced)
- Ability to determine what can be done in a computing environment to solve a real world problem.

Data Science Program Goals

- Effectively communicate data science-related information to a variety of audiences. (Introduced)
- Communicate technical materials in written, visual, and oral forms.

**Core Goals:**

Quantitative Literacy

- Interpretation: Students will have the ability to explain information presented in mathematical and computational forms. (Introduced)
- Students will be able to answer questions about computer programs that they did not write.
- Representation: Students will be able to convert information into mathematical and computational forms analytically and/or using computational tools. (Introduced, Practiced)
- Students will be able to convert verbal descriptions of problems into correct computer programs.
- Communication: Students will be able to communicate quantitative ideas in the languages of mathematics, computer science, or quantitative social sciences and will be able to utilize quantitative information in support of an argument. (Introduced)
- Students will be able to write programs to filter and reduce (summarize) data in numeric arrays.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Practiced)
- Ability to determine what can be done in a computing environment to solve a real world problem.
- Ability to take a problem statement, clarify it, and analyze it in order to create a set of specifications appropriate for a computing environment and then using introductory software engineering principles, develop a prototype for a graphical user interface that meets the problem specifications and anticipates potential interactions between the program and its users.
- Ability to create an algorithm that provides a solution in accordance with the problem specifications and then to take that algorithm and encode it in a formal computing language including testing and debugging the program.
- Understand the structure and development of logical arguments (Practiced)
- Ability to understand the logical structure of an algorithm and implement the algorithm by developing the corresponding logically structured program.

**CS 063L: Intro Computer Science (Lab) (0 Credits)**

**CS 064: Computer Concepts and Intermediate Programming (4 Credits)**

A continuation of problem solving with computers. Emphasis is placed on static and dynamic data structures. These data structures are used to implement various well-known algorithms for searching, sorting, list and string processing, etc.

**Prerequisite(s):** CS 063

**Note(s):** Concurrent lab required. Prerequisite of CS 063 may be waived by instructor. Limit 30 students.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Mathematics Program Goals

- Develop analytical skills and logical reasoning. (Introduced)
- Students will understand a mathematical hypothesis, condition, or definition and check that it is satisfied in a specific example.

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Using introductory software engineering principles, develop a prototype for a graphical user interface that meets the problem specifications and anticipates potential interactions between the program and its users.
- Ability to create an algorithm that provides a solution in accordance with the problem specifications and then to take that algorithm and encode it in a formal computing language including testing and debugging the program.

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Introduced, Practiced)
- Students will create computer systems and applications to solve real-world problems and meet human needs, such as communication, health, education and entertainment.
- Students design complex software applications working in groups as leaders and helpers to meet business and marketing needs.
- Students use mathematical models, in particular linear models, to guide effective decision making in real-world problems.

Mathematics Program Goals

- Develop analytical skills and logical reasoning. (Introduced)
- Develop analytical skills and logical reasoning. (Introduced)
- Students will understand a general mathematical argument and then replicate the argument in a specific example.

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Ability to take a problem statement, clarify it, and analyze it in order to create a set of specifications appropriate for a computing environment.

Mathematics Program Goals

- Develop analytical skills and logical reasoning. (Introduced)
- Students will analyze in depth mathematical statements.
- Students will justify their solutions to problems, using a variety of methods for logical reasoning.
- Students will construct rigorous logical arguments, using a variety of proof methods and logical reasoning.
- Students will read deeply and critique proofs and solutions to problems.

Computer Science Program Goals

- Design and write a correct computer program. (Introduced, Practiced, Mastered)
- Students use software engineering principles, specific computer languages and computer technologies to develop correct applications such as graphical user interfaces, databases, client-server, multithreading, assembly language programs, and web applications.
- Students take a problem statement, clarify it, and analyze it in order to create a set of specifications appropriate for a computing environment. Students then create an algorithm that provides a solution, encode it in a formal computing language, and finally test and debug the program.
- Students analyze and study algorithms in terms of computational resources (e.g. through time/space complexity analysis).
- Students study and utilize data structures and make appropriate choices based on design tradeoffs to solve problems and maximize the efficiency of programs.

Mathematics Program Goals

- Develop problem-solving skills, and in particular, develop the ability to handle problems that require multiple steps for their solution. (Introduced, Practiced)
- Students will reduce a new problem to previously solved problems.

Data Science Program Goals

- Develop capacity to learn new analysis methods and tools. (Introduced)
- Develop a rigorous computational foundation for practical programming.

Mathematics Program Goals

- Develop problem-solving skills, and in particular, develop the ability to handle problems that require multiple steps for their solution. (Introduced, Practiced)
- Students will translate real-life problems and/or problems from other disciplines into mathematical statements and use mathematical methods and specific problem-solving skills to solve these problems in complex, multi-step arguments.
- Students will decompose a problem into smaller problems.
- Students will identify patterns and use them to structure problem-solving techniques.
- Students will analyze, contrast, and compare different approaches to solving a problem.
- Improve quantitative skills. (Practiced)
- Improve quantitative skills. (Introduced, Practiced)
- Students will determine/calculate various function and objects characteristics within the context of the problem and mathematical area.

Interdisc Computer Science Program Goals

- Form interdisciplinary connections and apply computer science to meeting human needs. (Practiced)
- Ability to determine what can be done in a computing environment to solve a real world problem.

Mathematics Program Goals

- Improve quantitative skills. (Introduced, Practiced)
- Students will compute the value of a function at a specified input.
- Students will simplify answers after taking derivatives or integrating.
- Students will correctly manipulate algebraic expressions, equations and systems of equations in one or more variables.
- Students will solve linear, quadratic, differential, and other equations.
- Students will operate correctly on mathematical objects for theoretical and computational purposes.
- Students will correctly calculate the derivatives and integrals of a variety of functions and use the results in the proofs of mathematical theorems and as part of solving relevant real analysis problems.

Data Science Program Goals

- Effectively communicate data science-related information to a variety of audiences. (Introduced)
- Communicate technical materials in written, visual, and oral forms.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Practiced)
- Ability to determine what can be done in a computing environment to solve a real world problem.
- Ability to take a problem statement, clarify it, and analyze it in order to create a set of specifications appropriate for a computing environment and then using introductory software engineering principles, develop a prototype for a graphical user interface that meets the problem specifications and anticipates potential interactions between the program and its users.
- Understand the structure and development of logical arguments (Practiced)
- Ability to understand the logical structure of an algorithm and implement the algorithm by developing the corresponding logically structured program.

**CS 064L: Comp Concenpts & Int Prog. Lab (0 Credits)**

**CS 080: Topics in Computer Science (4 Credits)**

Offers topics that are not offered in the regular curriculum. Topics may include neural networks and other specialized topics in artificial intelligence, networking, very large-scale integrated systems, multimedia design and development, parallel and distributed computing, and information retrieval.

**Note(s):** Open to undergraduates only.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Students will construct either formal proofs or correct computer programs, demonstrating the rigorous application of mathematical concepts.
- Understand how computer systems (including architecture, operating systems, network, security and compilers) work (Practiced, Mastered)
- Students will build computer applications that meet human needs, such as communication, health, education, and entertainment.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Practiced)
- Students will construct either formal proofs or correct computer programs, demonstrating their ability to translate problems into the language of mathematics and computer science.
- Understand the structure and development of logical arguments (Practiced)
- Students will construct either formal proofs or correct computer programs, demonstrating their ability to development logical and rigorous arguments.

**CS 080AJ: Python For All (4 Credits)**

Python, a popular general purpose computer programming language, can solve a wide variety of interdisciplinary problems from big data and text processing to bioinformatics, web technologies, finances, math, education, security, computer games and many more. This course will focus mainly on applications of data exploration, and it will cover topics such as strings, files, lists, dictionaries, text parsing, regular expressions and computer games using the computer language Python.

**Meets the following Core requirements:** Quantitative Literacy

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Core Goals:**

Quantitative Literacy

- Interpretation: Students will have the ability to explain information presented in mathematical and computational forms. (Introduced, Practiced)
- Students will present and explain in class their python programs.
- Representation: Students will be able to convert information into mathematical and computational forms analytically and/or using computational tools. (Introduced, Practiced)
- Students will design algorithms and will translate these to python programs.
- Analysis: Students will be able to draw appropriate conclusions using mathematical or computational reasoning and understand the limits of such conclusions and the assumptions on which they are based. (Introduced, Practiced)
- Students will learn to analyse and explore data using python.
- Communication: Students will be able to communicate quantitative ideas in the languages of mathematics, computer science, or quantitative social sciences and will be able to utilize quantitative information in support of an argument. (Introduced, Practiced)
- Students will solve interdisciplinary problems by designing and writing computer programs.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Introduced, Practiced)
- Students will translate problems to algorithms to Python implementations.
- Understand the structure and development of logical arguments (Introduced, Practiced)
- Students will write python computer programs using logic statements.
- Understand the algebraic and graphical properties of important mathematical functions and use these functions in concrete applications (Introduced)
- Students will learn to create and use functions like random functions.
- Understand and apply the fundamental ideas of probability and statistics (Introduced)
- Students will analyse data with python.

**CS 080J: Special Topics in Computer Sci (4 Credits)**

**CS 080K: Python Computer Programming (4 Credits)**

This course teaches fundamentals of computer programming using Python, a popular general-purpose computer programming language. Students will learn and practice many computers programming fundamentals such as variables, strings, user input, loops, functions, Boolean logic, regular expressions, and conditional statements. In addition, this course will cover Python data structures such as files, lists, dictionaries, and tuples. Students will learn to design and implement computer games using Python and Pygame.

**Meets the following Core requirements:** Critical Analysis, Quantitative Literacy

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Core Goals:**

Critical Analysis

- Students will critically analyze information and ideas. (Introduced, Practiced)
- Students will analyze problems, and find solutions to these.
- Students will examine issues from multiple perspectives. (Introduced, Practiced)
- Students will discuss different solutions and strategies for the same problems.
- Students will engage in an exploration of the relationship between past systems of knowledge and present scholarly and creative approaches within and across disciplines. (Introduced, Practiced)
- Students will explore different ways of writing code.
- Students will consider how our understanding of significant questions and ideas is informed by the critical, scholarly, and creative approaches through which we approach those questions and ideas. (Introduced)
- Students will learn different approaches to solve similar problems.
- Students will develop discernment, facility and ethical responsibility in using information. (Introduced, Practiced)
- Students will provide code written by them.
- Students will engage as active participants in the College's intellectual community. (Introduced, Practiced)
- Students will learn to write Python code to solve problems in a variety of disciplines.

Quantitative Literacy

- Interpretation: Students will have the ability to explain information presented in mathematical and computational forms. (Introduced, Practiced)
- Students will present and explain in class their python code.
- Representation: Students will be able to convert information into mathematical and computational forms analytically and/or using computational tools. (Introduced, Practiced)
- Students will design algorithms and will translate these to python programs.
- Analysis: Students will be able to draw appropriate conclusions using mathematical or computational reasoning and understand the limits of such conclusions and the assumptions on which they are based. (Introduced, Practiced)
- Students will learn to analyze and explore data using Python.
- Communication: Students will be able to communicate quantitative ideas in the languages of mathematics, computer science, or quantitative social sciences and will be able to utilize quantitative information in support of an argument. (Introduced, Practiced)
- Students will solve interdisciplinary problems by designing and writing computer programs.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Introduced, Practiced)
- Students will translate problems into algorithms, and then to Python code.
- Understand the structure and development of logical arguments (Introduced, Practiced)
- Students will write python computer programs using logic statements.

**CS 111: Computer Architecture (4 Credits)**

An introduction to computer architecture, digital logic, and simulation. Students gain an understanding of computers by building simple circuits, learning MIPS assembly language, and designing and simulating parts of the MIPS architecture on FPGAs. The following topics are covered: Boolean algebra, binary number representation and arithmetic, assembly language, hardware description languages, data paths, pipelining, memory hierarchies, and low-level operating systems fundamentals.

**Prerequisite(s):** MATH 004 and CS 064

**Note(s):** Concurrent lab required. Prerequisites of MATH 004 and CS 064 may be waived by the instructor. Limit 35 students.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Students write and analyze assembly language programs.
- Understand how computer systems (including architecture, operating systems, networks, and compilers) work. (Introduced, Practiced)
- Students will be able to modify a data path to add additional functionality.
- Students perform analyses of the interaction between programs and the memory hierarchy.

Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Students write and analyze assembly language programs.

Interdisc Computer Science Program Goals

- Understand how computer systems (including architecture, operating systems, networks, and compilers) work. (Introduced, Practiced)
- Students build, program and debug a digital computer from basic electronic components.

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Students will investigate the performance of linear and tree recursive processes.

Interdisc Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Students will investigate the performance of linear and tree recursive processes.
- Students will apply Boolean Algebra learned in previous courses.

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Students apply Boolean Algebra learned in previous courses.
- Understand how computer systems (including architecture, operating systems, network, security and compilers) work (Introduced, Practiced)
- Students will be able to modify a data path to add additional functionality.
- Students perform analyses of the interaction between programs and the memory hierarchy.
- Students build, program and debug a digital computer from basic electronic components.

**General Education Goals:**

Quan. & Comp. Reasoning

- Students will write assembly language programs.
- Students will use Karnaugh maps for digital logic design.
- Understand the algebraic and graphical properties of important mathematical functions and use these functions in concrete applications (Practiced)
- Students will understand and apply the unification of Boolean Algebra, binary arithmetic, and electronic switching elements in digital computing.

**CS 113: Compiler Design and Implementation (4 Credits)**

A study of the basic components of compiler design, including lexical, syntactic, and semantic analysis; run-time storage organization; code generation; and code optimization. Automatic construction of lexical and syntax analyzers will also be discussed. An essential part of the course will be the construction of a compiler for a model language.

**Prerequisite(s):** MATH 006 and CS 111 and CS 124

**Note(s):** Concurrent lab required. Prerequisites of MATH 006 and CS 111 and CS 124 may be waived by the instructor. Limit 25 students.

**Program Goals:**

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Practiced, Mastered)
- Design and write a correct computer program. (Practiced, Mastered)
- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Understand how computer systems (including architecture, operating systems, network, security and compilers) work (Practiced, Mastered)

**CS 114: Programming Languages (4 Credits)**

Theory, design, and implementation of programming languages. Topics include different programming paradigms, such as declarative, functional, imperative, object-oriented, and concurrent; specification of a language's syntax and semantics; definitions, implementation, and inferences of types; and automatic memory management.

**Prerequisite(s):** CS 124

**Note(s):** Concurrent lab required. Limit 25 students.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Practiced)
- Adding languages features to an interpreter.
- Design and write a correct computer program. (Practiced)
- Writing programs both in and implementing new programming languages.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Mastered)
- Writing programs both in and implementing new programming languages.
- Understand the structure and development of logical arguments (Mastered)
- Analyzing the behavior of programs in diverse languages without executing them.
- Justifying choices in programming languages.

**CS 115: Mobile Application Development (4 Credits)**

Design and development of mobile device applications, culminating in the team-based development of a Java application for Android devices (which will be provided). Topics will include advanced Java programming techniques, including design patterns; the Java Android software development kit (SDK); multi-threaded programming techniques; human factors issues; and techniques for developing large, robust applications, such as design documents, source repositories, code reviews, and unit testing.

**Prerequisite(s):** CS 124

**Note(s):** Concurrent lab required. Prerequisites may be waived by demonstrating comparable experience to the instructor. Limit 20 students.

**Program Goals:**

Computer Science Program Goals

- Design and write a correct computer program. (Practiced, Mastered)
- Students study and utilize data structures and make appropriate choices based on design tradeoffs to solve problems and maximize the efficiency of programs.
- Students use software engineering principles, specific computer languages and computer technologies to develop correct applications such as graphical user interfaces, databases, client-server, multithreading, assembly language programs, and web applications.
- Students analyze and study algorithms in terms of computational resources (e.g. through time/space complexity analysis).
- Students take a problem statement, clarify it, and analyze it in order to create a set of specifications appropriate for a computing environment. Students then create an algorithm that provides a solution, encode it in a formal computing language, and finally test and debug the program.
- Understand how computer systems (including architecture, operating systems, network, security and compilers) work (Practiced, Mastered)
- Students learn processes, threads, CPU scheduling, synchronization, deadlocks, memory management, file systems, I/O systems, distributed systems, communication protocols and security.
- Students build, program and debug a digital computer from basic electronic components.

**CS 122: Operating Systems (4 Credits)**

Basic issues in process management, memory management, protection, and distributed systems. These concepts are illustrated through examples drawn from modern operating systems.

**Prerequisite(s):** CS 111 and CS 124

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Design and write a correct computer program. (Practiced, Mastered)
- Students learn processes, threads, CPU scheduling, synchronization, deadlocks, memory management, file systems, I/O systems, distributed systems, communication protocols and security.
- Students build, program and debug a digital computer from basic electronic components

**General Education Goals:**

Quan. & Comp. Reasoning

- Students will translate operating system problem to the Java language.

**CS 124: Data Structures and Algorithms (4 Credits)**

The study of fundamental data structures such as lists, queues, stacks, heaps, hash tables, and trees. An introduction to computational complexity in terms of time and space. The implementation and analysis of sorting and searching algorithms, and as time permits, some graph algorithms.

**Prerequisite(s):** MATH 004 and CS 064

**Note(s):** Concurrent lab required. Limit 25 students.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Data Science Program Goals

- Collect and manage data to devise solutions to data science tasks. (Practiced)
- Collect, clean, and prepare data.

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Utilize various data structures and make appropriate choices based on design tradeoffs to solve problems and maximize the efficiency of programs.
- Analyze algorithms in terms of computational resources (e.g. through time/space complexity analysis).

Data Science Program Goals

- Collect and manage data to devise solutions to data science tasks. (Practiced)
- Evaluate data in terms of source, volume, frequency, and flow.

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Implement operations associated with data structures.

Computer Science Program Goals

- Design and write a correct computer program. (Practiced, Mastered)

Data Science Program Goals

- Develop capacity to learn new analysis methods and tools. (Practiced)
- Develop a rigorous computational foundation for practical programming.

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced, Mastered)
- Students learn and write direct and indirect proofs and develop ability to show the correctness of operations performed in algorithms
- Students apply math concepts such as Boolean algebra (in computer Architecture), set theory (in Databases), formal proofs, graph theory (computer networks), finite-state automata (computer networks). Students understand system of linear equality, sensitivity analysis, duality theory - underlying the Simplex algorithm.

Interdisc Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Understand and appreciate the close connection between mathematical induction and recursion (e.g. mathematical induction is used to prove the correctness of recursive algorithms).

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced, Mastered)
- Students develop and apply logic reasoning skills to model computational systems.

Interdisc Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Understand the notions of asymptotic analysis of algorithms; use functions in conjunction with asymptotic notations to estimate the running time and space usage of algorithms – perform complexity analysis.

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced, Mastered)
- Students apply recurrence relations to derive the running time of recursive algorithms, and appreciate the close connection between mathematical induction and recursion (e.g. mathematical induction is used to prove the correctness of recursive algorithms).
- Develop ability to solve computational problems such as finding patterns in texts, parsing a programming language, or computing algebraic functions, using automata.

Interdisc Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Apply recurrence relations to derive the running time of recursive algorithms.

**General Education Goals:**

Quan. & Comp. Reasoning

- Identify patterns and use them to structure problem-solving techniques.
- Understand the operations supported by various data structures and develop the ability to recognize situations in which these operations and data structures can be used to solve problems.
- Select appropriate data structures that best support a set of operations based on design tradeoffs and constraints (e.g. through time/space complexity analysis).
- Understand the structure and development of logical arguments (Practiced)
- Apply logic to understand and analyze computational arguments and programs.
- Understand the algebraic and graphical properties of important mathematical functions and use these functions in concrete applications (Practiced)
- Understand the growth rate of various functions, including logarithmic, polynomial, and exponential functions.
- Analyze the running time and space usage of an algorithm as a function of input size.
- Identify characteristics of algorithms that produce certain running times, for example logarithmic, linear, quadratic, and exponential running times.
- Understand and apply the fundamental ideas of probability and statistics (Practiced)
- Apply probability to analyze average running times of algorithms.

**CS 124L: Data Structures/Algorithms Lab (0 Credits)**

**CS 125: Theory of Algorithms (4 Credits)**

An introduction to general algorithmic techniques including divide-and-conquer, dynamic programming, and greedy algorithms. Construction and analysis of some important classes of algorithms such as graph algorithms and string algorithms. An introduction to the complexity classes P, NP, and NP-complete (tractable versus intractable problems). If time allows, special topics, such as approximate algorithms, parallel algorithms, computability, and undecidability, may be included.

**Prerequisite(s):** MATH 006 and CS 124

**Note(s):** Concurrent workshop required.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Mathematics Program Goals

- Develop analytical skills and logical reasoning. (Mastered)
- Students will analyze in depth mathematical statements.
- Students will understand a mathematical hypothesis, condition, or definition and check that it is satisfied in a specific example.
- Students will understand a general mathematical argument and then replicate the argument in a specific example.
- Develop analytical skills and logical reasoning. (Mastered)
- Analyze, contrast, and compare different strategies used to solve a problem, based on the computational resources they require.
- Apply logic to understand and analyze computational arguments and algorithms.
- Develop analytical skills and logical reasoning. (Mastered)
- Students will justify their solutions to problems, using a variety of methods for logical reasoning.
- Students will read deeply and critique proofs and solutions to problems.
- Students will construct rigorous logical arguments, using a variety of proof methods and logical reasoning.
- Develop ability to communicate mathematical thoughts in a clear and coherent fashion. (Practiced)
- Students will translate between mathematical symbols and English words.
- Students will communicate in an organized, rigorous, and clear manner their solutions to problems via oral participation in class and workshop and in written form on exams and homework assignments.
- Students will clearly verbalize mathematical thoughts.
- Students will read deeply and critique each other's solutions in a professional manner typical for mathematical seminars and talks.
- Develop problem-solving skills, and in particular, develop the ability to handle problems that require multiple steps for their solution. (Mastered)
- Students will decompose a problem into smaller problems.
- Students will reduce a new problem to previously solved problems.
- Students will identify patterns and use them to structure problem-solving techniques.
- Students will analyze, contrast, and compare different approaches to solving a problem.
- Students will translate real-life problems and/or problems from other disciplines into mathematical statements and use mathematical methods and specific problem-solving skills to solve these problems in complex, multi-step arguments.

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Introduced, Practiced, Mastered)
- Students learn and write direct and indirect proofs and develop ability to show the correctness of operations performed in algorithms.
- Students develop and apply logic reasoning skills to model computational systems.
- Students apply math concepts such as Boolean algebra (in computer Architecture), set theory (in Databases), formal proofs, graph theory (computer networks), finite-state automata (computer networks). Students understand system of linear equality, sensitivity analysis, duality theory - underlying the Simplex algorithm.
- Students apply recurrence relations to derive the running time of recursive algorithms, and appreciate the close connection between mathematical induction and recursion (e.g. mathematical induction is used to prove the correctness of recursive algorithms)
- Develop ability to solve computational problems such as finding patterns in texts, parsing a programming language, or computing algebraic functions, using automata.
- Understand the theory of formal languages, in particular context-free languages, and apply it to the definition and design of programming languages.
- Understand a model of computation, such as Turing machine, and use the model to show the capabilities and limitations of computation.

Mathematics Program Goals

- Develop problem-solving skills, and in particular, develop the ability to handle problems that require multiple steps for their solution. (Practiced)
- Write complete and coherent mathematical sentences.
- Translate mathematical symbols into English words and vice versa.
- Verbalize mathematical thoughts clearly.
- Improve quantitative skills. (Mastered)
- Students will simplify answers after taking derivatives or integrating.
- Students will correctly manipulate algebraic expressions, equations and systems of equations in one or more variables.
- Students will solve linear, quadratic, differential, and other equations.
- Students will operate correctly on mathematical objects for theoretical and computational purposes.
- Students will correctly calculate the derivatives and integrals of a variety of functions and use the results in the proofs of mathematical theorems and as part of solving relevant real analysis problems.
- Improve quantitative skills. (Mastered)
- Formulate solutions for computing problems using techniques such as divide-and-conquer, dynamic programming, and greedy.
- Improve quantitative skills. (Mastered)
- Students will compute the value of a function at a specified input.
- Improve quantitative skills. (Mastered)
- Understand the significance of NP-completeness and develop ability to show a problem is NP-complete.
- Solve problems using the fundamental graph algorithms, including depth-first and breadth-first search, shortest paths, topological sort, and minimum spanning tree.
- Identify patterns and use them to structure problem-solving techniques.
- Improve quantitative skills. (Mastered)
- Students will determine/calculate various function and objects characteristics within the context of the problem and mathematical area.
- Learn to apply a major mathematical theory to solve non-trivial problems in other scientific domains. (Mastered)
- Students will apply differential and integral calculus to solve problems in other sciences.
- Students will learn and use problem-solving techniques to solve problems from other areas.
- Students will translate real-world problems into abstract mathematical models.
- Students will build mathematical models to solve real-world decision problems arising from a wide range of domains.
- Students will abstract, analyze, and draw analogies between objects from other areas and mathematical constructs and theories.
- Learn to apply a major mathematical theory to solve non-trivial problems in other scientific domains. (Mastered)
- Solve recurrence relations.
- Derive and compute the running time of algorithms.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Mastered)
- Identify patterns and use them to structure problem-solving techniques.
- Develop the ability to solve problems using techniques such as divide-and-conquer, dynamic programming, and greedy.
- Model engineering problems using graphs and employ graph algorithms to solve them.
- Understand the structure and development of logical arguments (Mastered)
- Apply logic to understand and analyze computational arguments and correctness of algorithms.
- Understand the algebraic and graphical properties of important mathematical functions and use these functions in concrete applications (Practiced)
- Analyze the running time and space usage of an algorithm as a function of input size.
- Identify characteristics of algorithms that produce certain running times, for example logarithmic, linear, quadratic, and exponential running times.
- Understand and apply the fundamental ideas of probability and statistics (Practiced)
- Apply probability to analyze average running times of algorithms.

**CS 127: Linear Optimization (4 Credits)**

Introduction to linear optimization, optimizing a linear function subject to a set of linear constraints, emphasizing quantitative modeling, methodology, and the underlying mathematical structures and geometrical ideas. Topics include problem formulation, simplex method, sensitivity analysis, and duality theory.

**Prerequisite(s):** MATH 004 or MATH 047 or ECON 081

**Note(s):** Concurrent workshop required. Prerequisite of MATH 004 or MATH 047 or ECON 081 may be waived by instructor.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Introduced, Practiced, Mastered)
- Students use mathematical models, in particular linear models, to guide effective decision making in real-world problems.
- Students will create computer systems and applications to solve real-world problems and meet human needs, such as communication, health, education and entertainment.
- Understand and apply the mathematical concepts underlying computer science. (Practiced, Mastered)
- Develop ability to solve computational problems such as finding patterns in texts, parsing a programming language, or computing algebraic functions, using automata.
- Students apply math concepts such as Boolean algebra (in computer Architecture), set theory (in Databases), formal proofs, graph theory (computer networks), finite-state automata (computer networks). Students understand system of linear equality, sensitivity analysis, duality theory - underlying the Simplex algorithm.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate problems into the language of mathematics and computer science, and solve them by using mathematical and computational methods and tools (Mastered)
- Recognize and formulate real-world decision problems as linear optimization problems. Examples of real-world problems are drawn from finance, marketing, production planning, transportation planning, telecommunications, operations management, system design, and games.
- Find optimal solutions to linear optimization problems using the Simplex algorithm.
- Perform sensitivity analysis – a technique for systematically changing parameters to determine the effects on the optimal solution – on linear optimization problems.
- Understand the structure and development of logical arguments (Practiced)
- Follow an abstract mathematical argument.
- Apply logic to understand and analyze mathematical arguments involving systems of linear equations.
- Solve algebraically and graphically systems of linear inequalities in two and three dimensions, and find the optimal solution, based on a linear objective function, that satisfies all linear constraints.
- Generalize the algebraic approach from two and three dimensions to higher dimensions of systems of linear inequalities, and find the optimal solution, based on a linear objective function, that satisfies all linear constraints.

**CS 128: Theory of Computation (4 Credits)**

An introduction to the mathematical basis for the study of computability and to the formal theory behind compiler design. Topics include the formal models of computation such as finite state automata, pushdown automata, and Turing machines; languages and grammars, such as regular languages and grammars, context-free languages and grammars, and recursively enumerable languages and grammars; and the problems that a machine can and cannot solve.

**Prerequisite(s):** MATH 006 or MATH 048

**Note(s):** Concurrent workshop required. Prerequisite of MATH 006 or MATH 048 may be waived by the instructor. Limit 25 students.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Crosslisted with:** MATH 128

**Program Goals:**

Mathematics Program Goals

- Develop analytical skills and logical reasoning. (Mastered)
- Apply logic to understand and analyze mathematical arguments involving automata or formal languages.
- Solve computational problems by creating automata or formal languages.
- Analyze computational problems with respect to language/automata hierarchy and computability.
- Develop problem-solving skills, and in particular, develop the ability to handle problems that require multiple steps for their solution. (Mastered)
- Translate mathematical symbols into English words and vice versa.

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Introduced, Practiced, Mastered)
- Understand the theory of formal languages, in particular context-free languages, and apply it to the definition and design of programming languages.
- Understand Turing machines as a model of computation and use the model to show the capabilities and limitations of computation.

Mathematics Program Goals

- Develop problem-solving skills, and in particular, develop the ability to handle problems that require multiple steps for their solution. (Mastered)
- Verbalize mathematical thoughts clearly.

Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Introduced, Practiced, Mastered)

Mathematics Program Goals

- Write complete and coherent mathematical sentences.

Computer Science Program Goals

- Students develop and apply logic reasoning skills to model computational systems.
- Students learn and write direct and indirect proofs and develop ability to show the correctness of operations performed in algorithms
- Students apply recurrence relations to derive the running time of recursive algorithms, and appreciate the close connection between mathematical induction and recursion (e.g. mathematical induction is used to prove the correctness of recursive algorithms).

Mathematics Program Goals

- Improve quantitative skills. (Mastered)
- Demonstrate properties of languages and apply them to solve computational problems.
- Develop ability to solve computational problems using formal languages – regular languages and context-free languages.
- Develop ability to solve computational problems using automata – finite state machines, pushdown automata, and Turing machines.

**General Education Goals:**

Quan. & Comp. Reasoning

- Translate real-world problems into computational problems associated with automata and formal languages.
- Solve computational problems by creating automata or formal languages, or show that they are unsolvable by proving no such automata or formal languages exist.
- Analyze computational problems with respect to language/automata hierarchy and computability.
- Understand the structure and development of logical arguments (Mastered)
- Follow an abstract mathematical argument concerning an automaton or a formal language.
- Apply logic to understand and analyze mathematical arguments involving automata and formal languages.

**CS 131: Computer Networks (4 Credits)**

In this course students will learn the different types of computer networks, and their many components, protocols and technologies. The students will study many important issues of networks, such as congestion control, flow control, routing and security.

**Prerequisite(s):** CS 064

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Students learn processes, threads, CPU scheduling, synchronization, deadlocks, memory management, file systems, I/O systems, distributed systems, communication protocols and security.
- Students build, program and debug a digital computer from basic electronic components

**General Education Goals:**

Quan. & Comp. Reasoning

- Students will learn to implement distributed applications using Java.
- Understand the structure and development of logical arguments (Practiced)
- Students will study the many complex routing algorithms implemented in network routers.
- Students will use mathematical equations, plots and diagrams to study network performance.
- Understand and apply the fundamental ideas of probability and statistics (Practiced)
- Students will use statistics to calculate metrics such as error rates and throughput.

**CS 133: Cryptography and Network Security (4 Credits)**

This course teaches cryptography, explores threats against computer networks and teaches the various techniques used to provide network security. It covers basic relevant background in number theory and statistics, some networking principles, classic ciphers, and the most important current security fundamentals such as confidentiality, authentication, integrity, and non-repudiation. Undergraduate students learn and present case studies, while graduate students conduct small-scale research where they identify a problem, execute research, and write and present the results.

**Prerequisite(s):** CS 063 and MATH 004

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Introduced, Practiced, Mastered)
- In order to discuss security vulnerabilities and attacks, students will need to learn and understand many aspect of computer networks, such as the protocol TCP.
- Design and write a correct computer program. (Practiced)
- Students will design and implement cryptographic algorithms using the Python programming language.
- Cryptography is a mathematical disciple. Students will learn and practice modular arithmetic, finite fields and basic number theory.
- Understand how computer systems (including architecture, operating systems, network, security and compilers) work (Introduced, Practiced)
- Students will learn some of the vulnerabilities associated with identity theft attacks and the countermeasures.

**General Education Goals:**

Quan. & Comp. Reasoning

- Students will implement cryptographic algorithms using the computer programming language Python.
- Understand the structure and development of logical arguments (Practiced)
- Students will translate cryptographic algorithms into logical statements to form computer algorithms.
- Cryptography uses mathematical algorithms to transform data into a form not readily intelligible. The students will apply logical functions to the binary and hexadecimal numerical systems.
- Understand and apply the fundamental ideas of probability and statistics (Practiced)
- Students will learn basic probability theory, Shannon's theorem, and the concepts of perfect secrecy, confusion and diffusion.

**CS 141: Machine Learning (4 Credits)**

This course provides a broad introduction to machine learning and statistical pattern recognition including both supervised and unsupervised learning from a computational perspective. Topics include generative/discriminative learning, parametric/non-parametric learning, neural networks, support vector machines, clustering, dimensionality reduction, and kernel methods. Additional topics as time allows.

**Prerequisite(s):** CS 064 and CS 124 and MATH 050

**Program Goals:**

Data Science Program Goals

- Collect and manage data to devise solutions to data science tasks. (Practiced)
- Evaluate data in terms of source, volume, frequency, and flow.
- Collect, clean, and prepare data.
- Select, apply, and evaluate models to devise solutions to data science tasks. (Practiced)
- Identify and classify relevant variables for data science tasks.
- Choose and apply tools and methodologies to solve data science tasks.
- Assess the methods, tools, and models used in the analysis.
- Develop capacity to learn new analysis methods and tools. (Mastered)
- Develop a rigorous computational foundation for practical programming.
- Interpret data analysis outcomes. (Practiced)
- Evaluate the limitations of data science findings.
- Interpret data, extract meaningful information, and assess findings.
- Effectively communicate data science-related information to a variety of audiences. (Practiced)
- Communicate technical materials in written, visual, and oral forms.
- Help non-technical professionals understand and act on data science findings.
- Facilitate data-informed discussions through listening, questioning, and presenting.

**CS 170: Software Engineering (4 Credits)**

A course designed to help students transform themselves into skilled software engineers, able to apply their knowledge of coding, algorithms, and systems to write elegant, efficient, and correct programs. Topics include techniques and tools for design, documentation, collaboration, development, building, testing, debugging, and maintenance, primarily using the extreme programming methodology.

**Prerequisite(s):** CS 124 and CS 122

**Note(s):** Prerequisite CS 122 May be taken concurrently. Limit 25 students.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Data Science Program Goals

- Collect and manage data to devise solutions to data science tasks. (Introduced)
- Evaluate data in terms of source, volume, frequency, and flow.

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Mastered)
- Students design complex software applications working in groups as leaders and helpers to meet business and marketing needs.

Data Science Program Goals

- Collect and manage data to devise solutions to data science tasks. (Introduced)
- Collect, clean, and prepare data.

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Mastered)
- Design and write a correct computer program. (Mastered)
- Students use software engineering principles, specific computer languages and computer technologies to develop correct applications such as graphical user interfaces, databases, client-server, multithreading, assembly language programs, and web applications

Data Science Program Goals

- Develop capacity to learn new analysis methods and tools. (Mastered)
- Develop a rigorous computational foundation for practical programming.

**General Education Goals:**

Quan. & Comp. Reasoning

- Same as for the Computer Science program goals (Design and write a correct computer program, Apply computer science to meeting human needs).
- Understand the structure and development of logical arguments (Practiced)
- Students develop complete software development documentation package including detailed design specifications, Usability test plan and Quality Assurance test plan. These must be based on and convey logical arguments.

**CS 180: Topics in Computer Science (4 Credits)**

Offers topics that are not offered in the regular curriculum. Topics may include neural networks and other specialized topics in artificial intelligence, networking, very large-scale integrated systems, multimedia design and development, parallel and distributed computing, and information retrieval.

**Note(s):** Open to sophomores, juniors, seniors, and graduate students.

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Design and write a correct computer program. (Practiced, Mastered)
- Students build, program and debug a digital computer from basic electronic components.

**General Education Goals:**

Quan. & Comp. Reasoning

- Students will construct either formal proofs or correct computer programs, demonstrating their ability to translate problems into the language of mathematics and computer science.
- Understand the structure and development of logical arguments (Practiced)
- Students will construct either formal proofs or correct computer programs, demonstrating their ability to development logical and rigorous arguments.

**CS 180G: Applied Machine Learning (9 Credits)**

In this ten-week, full-time immersive experience, students will learn the fundamentals to prepare for a role in industry as Machine Learning Specialists, a role at the intersection of data science, computer science, and the individual student’s field of study or interest. Students will learn how to prepare and identify issues with data; they will hone their coding skills in Python and SQL; they will learn the fundamentals of different machine learning tools and models; and they will develop skills to assess when machine learning is the right solution to a given problem.

**Instructor Consent Required:** Y

**CS 186: Web Programming (4 Credits)**

This course studies the design and implementation of Web applications. Students will learn HTML, JavaScripts, CSS, XML, PHP, MySQL, and contemporary Web technologies. There will be several programming assignments and a final project, where each student will build a Web application with components covered during the semester.

**Prerequisite(s):** CS 064

**Meets the following Gen Ed requirements:** Quantitative and Computational Reasoning

**Program Goals:**

Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Students will write computer programs, using PHP, to process data entered through web forms from web users, and to create and manipulate MySQL databases.
- Understand how computer systems (including architecture, operating systems, network, security and compilers) work (Practiced)
- Students will develop interactive web sites targeted to solve human needs.

**General Education Goals:**

Quan. & Comp. Reasoning

- Students will translate user needs into new web applications.
- Understand the structure and development of logical arguments (Practiced)
- Students will design and implement computer algorithms.

**CS 200: Data, Apps, and Analytics in the Cloud (4 Credits)**

Students will create a cloud-based application with an underlying object database. Students will begin by analyzing the required functionality of the application. Based on that analysis they will design and implement an object oriented data model. They will customize their applications based on processes identified as supporting the required functionality. These customizations will require students to write code in an object-oriented language, to customize the interface using a tag-based language, and to run analytics on the data.

**Prerequisite(s):** CS 064

**Program Goals:**

Data Science Program Goals

- Collect and manage data to devise solutions to data science tasks. (Introduced)
- Evaluate data in terms of source, volume, frequency, and flow.
- Collect, clean, and prepare data.
- Select, apply, and evaluate models to devise solutions to data science tasks. (Introduced)
- Identify and classify relevant variables for data science tasks.
- Choose and apply tools and methodologies to solve data science tasks.
- Assess the methods, tools, and models used in the analysis.
- Develop capacity to learn new analysis methods and tools. (Practiced, Mastered)
- Develop a rigorous computational foundation for practical programming.
- Interpret data analysis outcomes. (Practiced)
- Evaluate the limitations of data science findings.
- Interpret data, extract meaningful information, and assess findings.
- Effectively communicate data science-related information to a variety of audiences. (Practiced)
- Communicate technical materials in written, visual, and oral forms.
- Help non-technical professionals understand and act on data science findings.
- Facilitate data-informed discussions through listening, questioning, and presenting.

**CS 214: Programming Languages (4 Credits)**

Theory, design, and implementation of programming languages. Topics include different programming paradigms, such as declarative, functional, imperative, object-oriented, and concurrent; specification of a language's syntax and semantics; definitions, implementation, and inferences of types; and automatic memory management.

**Prerequisite(s):** CS 124

**Program Goals:**

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Writing programs both in and implementing new programming languages.
- Understand how computer systems (including architecture, operating systems, networks, and compilers) work. (Practiced)
- Adding languages features to an interpreter.

**CS 215: Mobile Application Development (4 Credits)**

Design and development of mobile device applications, culminating in the team-based development of a Java application for Android devices (which will be provided). Topics will include advanced Java programming techniques, including design patterns; the Java Android software development kit (SDK); multi-threaded programming techniques; human factors issues; and techniques for developing large, robust applications, such as design documents, source repositories, code reviews, and unit testing.

**Prerequisite(s):** CS 124

**Note(s):** Concurrent lab required. Prerequisites may be waived by demonstrating comparable experience to the instructor. Limit 20 students. Open to graduate students only.

**Program Goals:**

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Practiced, Mastered)
- Individual labs and team projects will require students to understand synchronization, network communication, the application life cycle, and other key computing concepts.
- Design and write a correct computer program. (Practiced, Mastered)
- There is a team project in which each student implements a component of a mobile device application.
- There are multiple lab assignments in which students must write computer programs, which are reviewed line-by-line by the instructor.
- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Students will use efficient and correct algorithms in the programs that they write.
- Students will design and implement a mobile device application.

**CS 225: Theory of Algorithms (4 Credits)**

An introduction to general algorithmic techniques including divide-and-conquer, dynamic programming, and greedy algorithms. Construction and analysis of some important classes of algorithms such as graph algorithms and string algorithms. An introduction to the complexity classes P, NP, and NP-complete (tractable versus intractable problems). If time allows, special topics, such as approximate algorithms, parallel algorithms, computability, and undecidability, may be included.

**Prerequisite(s):** MATH 006 and CS 124

**Note(s):** Concurrent workshop required. Limit 25 students. Open to graduate students only.

**Program Goals:**

Interdisc Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced, Mastered)
- Understand and appreciate the close connection between mathematical induction and recursion (e.g. mathematical induction is used to prove the correctness of recursive algorithms).
- Understand the notions of asymptotic analysis of algorithms; use functions in conjunction with asymptotic notations to estimate the running time and space usage of algorithms – perform complexity analysis.
- Apply recurrence relations to derive the running time of recursive algorithms.

**CS 227: Linear Optimization (4 Credits)**

Introduction to linear optimization, optimizing a linear function subject to a set of linear constraints, emphasizing quantitative modeling, methodology, and the underlying mathematical structures and geometrical ideas. Topics include problem formulation, simplex method, sensitivity analysis, and duality theory.

**Prerequisite(s):** MATH 004 or MATH 047 or ECON 081

**Note(s):** Concurrent workshop required. Prerequisite of MATH 004 or MATH 047 or ECON 081 may be waived by instructor. Open to graduate students only.

**Program Goals:**

Interdisc Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced, Mastered)
- Understand the time efficiency of the Simplex algorithm.
- Understand the mathematical concepts – systems of linear inequalities, sensitivity analysis, duality theory – underlying the Simplex algorithm.
- Form interdisciplinary connections and apply computer science to meeting human needs. (Practiced, Mastered)
- Use mathematical models, and in particular linear models, to guide effective decision making in real-world problems.

**CS 228: Theory of Computation (4 Credits)**

An introduction to the mathematical basis for the study of computability and to the formal theory behind compiler design. Topics include the formal models of computation such as finite state automata, pushdown automata, and Turing machines; languages and grammars, such as regular languages and grammars, context-free languages and grammars, and recursively enumerable languages and grammars; and the problems that a machine can and cannot solve.

**Prerequisite(s):** MATH 006 or MATH 048

**Note(s):** Concurrent workshop required. Prerequisite of MATH 006 or MATH 048 may be waived by the instructor. Limit 25 students. Open to graduate students only.

**Crosslisted with:** CS 228

**Program Goals:**

Interdisc Computer Science Program Goals

- Understand and apply the mathematical concepts underlying computer science. (Practiced, Mastered)
- Understand Turing machines as a model of computation and use the model to show the capabilities and limitations of computation.
- Understand the theory of formal languages, in particular context-free languages, and apply it to the definition and design of programming languages.

**CS 231: Computer Networks (4 Credits)**

In this course students will learn the different types of computer networks, and their many components, protocols and technologies. The students will study many important issues of networks, such as congestion control, flow control, routing and security. Students will conduct small-scale research, where they will identify a problem, execute network research, and write up the results.

**Prerequisite(s):** CS 064

**Note(s):** Open to graduate students only.

**Program Goals:**

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Students will design and implement a client server application in Java using UDP sockets.
- Understand how computer systems (including architecture, operating systems, networks, and compilers) work. (Practiced, Mastered)
- Students will study the protocols and technologies involved in data communication over the Internet. With this knowledge, they will be able to design new protocols, or technologies, and to improve existing ones.

**CS 232: The Interdisciplinary Computer Science Research Process (4 Credits)**

This course teaches the research process in the Interdisciplinary Computer Science Program at Mills College. The students will learn to find research topics, critically read research papers, and write and communicate research results effectively. Other topics include intellectual property, publishing, funding, performance evaluation, and statistical techniques. During the course, students will work toward their research thesis proposal or their final thesis write-up.

**Prerequisite(s):** CS 064

**Note(s):** Course is intended primarily for graduate students in the first year of the ICS Program. Open to graduate students only.

**Program Goals:**

Interdisc Computer Science Program Goals

- Form interdisciplinary connections and apply computer science to meeting human needs. (Practiced, Mastered)

**CS 233: Cryptography and Network Security (4 Credits)**

This course teaches cryptography, explores threats against computer networks and teaches the various techniques used to provide network security. It covers basic relevant background in number theory and statistics, some networking principles, classic ciphers, and the most important current security fundamentals such as confidentiality, authentication, integrity, and non-repudiation. Undergraduate students learn and present case studies, while graduate students conduct small-scale research where they identify a problem, execute research, and write and present the results.

**Prerequisite(s):** CS 063 and MATH 004

**Program Goals:**

Computer Science Program Goals

- Design and write computer systems to solve real-world problems (Introduced, Practiced, Mastered)
- In order to discuss security vulnerabilities and attacks, students will need to learn and understand many aspect of computer networks, such as the protocol TCP.
- Design and write a correct computer program. (Practiced)
- Students will design and implement cryptographic algorithms using the Python programming language.
- Cryptography is a mathematical disciple. Students will learn and practice modular arithmetic, finite fields and basic number theory.
- Understand how computer systems (including architecture, operating systems, network, security and compilers) work (Introduced, Practiced)
- Students will learn some of the vulnerabilities associated with identity theft attacks and the countermeasures.

**CS 241: Machine Learning (4 Credits)**

This course provides a broad introduction to machine learning and statistical pattern recognition including both supervised and unsupervised learning from a computational perspective. Topics include generative/discriminative learning, parametric/non-parametric learning, neural networks, support vector machines, clustering, dimensionality reduction, and kernel methods. Additional topics as time allows.

**Prerequisite(s):** CS 064 and CS 124 and MATH 050

**Program Goals:**

Data Science Program Goals

- Collect and manage data to devise solutions to data science tasks. (Practiced)
- Evaluate data in terms of source, volume, frequency, and flow.
- Collect, clean, and prepare data.
- Select, apply, and evaluate models to devise solutions to data science tasks. (Practiced)
- Identify and classify relevant variables for data science tasks.
- Choose and apply tools and methodologies to solve data science tasks.
- Assess the methods, tools, and models used in the analysis.
- Develop capacity to learn new analysis methods and tools. (Mastered)
- Develop a rigorous computational foundation for practical programming.
- Interpret data analysis outcomes. (Practiced)
- Evaluate the limitations of data science findings.
- Interpret data, extract meaningful information, and assess findings.
- Effectively communicate data science-related information to a variety of audiences. (Practiced)
- Communicate technical materials in written, visual, and oral forms.
- Help non-technical professionals understand and act on data science findings.
- Facilitate data-informed discussions through listening, questioning, and presenting.

**CS 250: Thesis for Degree of Master of Arts in Interdisciplinary Computer Science (2-4 Credits)**

Before commencing work on the thesis project, the student must submit a thesis proposal for review and acceptance by the director of the ICS Program and the faculty members of the student's thesis advisory committee. Only upon completion of a successful review process may the student proceed with the thesis.

**Note(s):** Open to graduate students only.

**Program Goals:**

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Design, develop, and implement a program that correctly solves a problem according to specifications with appropriate testing plan and documentation.
- Optimize code to use computing resources, such as CPM time and memory, more efficiently.
- Convert a description of a problem into a set of specifications appropriate for a computing environment.
- Understand how computer systems (including architecture, operating systems, networks, and compilers) work. (Practiced)
- Build or simulate some aspect of a working computer system.
- Demonstrate understanding of computer systems by various means, such as debugging and modifying computer systems, designing components of computer systems, analysis of computer systems, prediction of behavior or outcomes of computer systems.
- Understand and apply the mathematical concepts underlying computer science. (Practiced)
- Analyze the efficiency of algorithms in terms of time and space complexity.
- Apply logic and use appropriate proof techniques to mathematically analyze algorithms.
- Understand the mathematical concepts underlying various fields in computer science, for example, computer architecture, theory of computation, and theory of algorithms.
- Form interdisciplinary connections and apply computer science to meeting human needs. (Mastered)
- Analyze a real-world problem, form interdisciplinary connections, and identify the computing requirements appropriate to its solution.
- Formulate and solve real-world problems in a computing environment.
- Consider the social consequences of technology.

**CS 270: Software Engineering (4 Credits)**

A course designed to help students transform themselves into skilled software engineers, able to apply their knowledge of coding, algorithms, and systems to write elegant, efficient, and correct programs. Topics include techniques and tools for design, documentation, collaboration, development, building, testing, debugging, and maintenance, primarily using the extreme programming methodology.

**Prerequisite(s):** CS 124 and CS 122

**Note(s):** Prerequisite CS 222 (122). May be taken concurrently. Limit 25 students. Open to graduate students only.

**Program Goals:**

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced, Mastered)
- Students will work as a team to select a complex computer application and then work through the entire software development lifecycle including the following milestones: (a) high-level specifications, (b) detailed specifications, (c) prototyping with "thin vertical slice" across all components and "broad horizontal slice" demonstrating extensive UI development, (d) beta release with usability test and QA test plan, and (e) final demonstration with hard copy documentation package.
- Form interdisciplinary connections and apply computer science to meeting human needs. (Practiced, Mastered)
- Students will work as a group emulating a development team in a small software start-up. They will design and implement a complex software application and will need to consider business and marketing needs in terms of design specifications and priorities.
- Students will select, design and develop a software application designed to meet a specific market need.
- Students will development management skills working as leaders and helpers designing and developing specific major software components.

**CS 280: Topics in Computer Science (4 Credits)**

Offers topics that are not offered in the regular curriculum. Topics may include neural networks and other specialized topics in artificial intelligence, networking, very large-scale integrated systems, multimedia design and development, parallel and distributed computing, and information retrieval.

**Note(s):** Only open to graduate students or undergraduates in the BA/MA ICS program. Limit 20 students. Open to graduate students only. Open to seniors only.

**CS 286: Web Programming (4 Credits)**

This course studies the design and implementation of Web applications. Students will learn HTML, JavaScripts, CSS, XML, PHP, MySQL, and contemporary Web technologies. There will be several programming assignments and a final project, where each student will build a Web application with components covered during the semester.

**Prerequisite(s):** CS 064

**Note(s):** Open to graduate students only.

**Program Goals:**

Interdisc Computer Science Program Goals

- Design and write a correct computer program. (Practiced)
- Students will write computer programs, using PHP, to process data entered through web forms from web users, and to create and manipulate MySQL databases.
- Form interdisciplinary connections and apply computer science to meeting human needs. (Practiced)
- Students will develop interactive web sites targeted to solve human needs.