Course Catalog

COREUA.0109 Quantitative Reasoning: Mathematics & Computing
4 Points. Undergraduatelevel. Fall.
Prerequisites: Department Permission
This course teaches key mathematical concepts using the new Python programming language. The first part of the course teaches students how to use the basic features of Python: operations with numbers and strings, variables, Boolean logic, control structures, loops and functions. The second part of the course focuses on the phenomena of growth and decay: geometric progressions, compound interest, exponentials and logarithms. The third part of the course introduces three key mathematical concepts: trigonometry, counting problems and probability. Students use Python to explore the mathematical concepts in labs and homework assignments. No prior knowledge of programming is required.

CSCIUA.0002 Introduction to Computer Programming (No Prior Experience)
4 Points. Undergraduatelevel. Fall, Spring, Summer.
Prerequisites: Three years of high school mathematics or equivalent. No prior computing experience is assumed. Students with any programming experience should consult with the department before registering. Students with any reported score on the Computer Science AP examination cannot enroll in this course; Albert will block them from registering for it. Students who have taken or are taking Introduction to Computer Science (CSCIUA 101) will not receive credit for this course. Does not count toward the computer science major; serves as the prerequisite for students with no previous programming experience who want to continue into CSCIUA 101 and pursue the major. Students may not receive credit for both CSCIUA 2 and CSCIUA 3.
An introduction to the fundamentals of computer programming, which is the foundation of computer science. Students design, write, and debug computer programs. No knowledge of programming is assumed.

CSCIUA.0003 Introduction to Computer Programming (Limited Prior Experience)
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Limited programming experience, or any score on the AP Computer Science examination (students will forfeit the AP credit for scores of 4 or 5), or Data Science for Everyone (DSUA 111). Students who have taken or are taking Introduction to Computer Science (CSCIUA 101) will not receive credit for this course. Does not count toward the computer science major; serves as the prerequisite for students with some previous programming experience who want to continue into CSCIUA 101 and pursue the major. Students may not receive credit for both CSCIUA 2 and CSCIUA 3.
Introduces objectoriented programming, recursion, and other important concepts to students who already have had some exposure to programming in the context of building applications using Python. Students will design and implement Python programs in a variety of applied areas.

CSCIUA.0004 Introduction to Web Design & Computer Principles
4 Points. Undergraduatelevel. Fall, Spring, Summer.
Prerequisites: Three years of high school mathematics or equivalent. No prior computing experience is assumed. Students with computing experience should consult with the department before registering.
Introduces students to both the practice of web design and the basic principles of computer science. The practice component covers not only web design but also current graphics and software tools. The principles section includes an overview of hardware and software, the history of computers, and a discussion of the impact of computers and the Internet. 
CSCIUA.0060 Database Design and Implementation
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3). Students that have successfully completed Data Management and Analysis (CSCIUA 479) are NOT eligible to take this course.
Introduces principles and applications of database design and working with data. Students use Python as they prepare, analyze, and work with data and use SQL to study the principles and implementations of relational databases. Also covers other database paradigms, such as NoSQL. Students apply these principles to computer systems and their respective fields of interest.

CSCIUA.0061 Web Development and Programming
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3), and Introduction to Web Design and Computer Principles (CSCIUA 4). Students that have successfully completed Applied Internet Technology (CSCIUA 467) are NOT eligible to take this course.
Provides a practical approach to web technologies and programming. Students build interactive, secure, and powerful web programs. Covers client and server side technologies for the web.

CSCIUA.0101 Introduction to Computer Science
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3), or a score of 3 on the AP Computer Science exam (scores of 4 and 5 are acceptable prerequisites for students who wish to take CSCIUA 101 before entering CSCIUA 102; they will forfeit the AP credit), or departmental permission assessed by placement exam.
How to design algorithms to solve problems and how to translate these algorithms into working computer programs. Experience is acquired through projects in a highlevel programming language. Intended primarily for computer science majors but also suitable for students of other scientific disciplines. Programming assignments.

CSCIUA.0102 Data Structures
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Science (CSCIUA 101), or a score of 4 or 5 on the AP Computer Science examination.
Use and design of data structures, which organize information in computer memory. Stacks, queues, linked lists, binary trees: how to implement them in a highlevel language, how to analyze their effect on algorithm efficiency, and how to modify them. Programming assignments.

CSCIUA.0201 Computer Systems Organization
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Data Structures (CSCIUA 102).
Covers the internal structure of computers, machine (assembly) language programming, and the use of pointers in highlevel languages. Topics include the logical design of computers, computer architecture, the internal representation of data, instruction sets, and addressing logic, as well as pointers, structures, and other features of highlevel languages that relate to assembly language. Programming assignments are in both assembly language and other languages. 
CSCIUA.0202 Operating Systems
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201).
Covers the principles and design of operating systems. Topics include process scheduling and synchronization, deadlocks, memory management (including virtual memory), input/output, and file systems. Programming assignments. 
CSCIUA.0310 Basic Algorithms
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Data Structures (CSCIUA 102); Discrete Mathematics (MATHUA 120); and either Calculus I (MATHUA 121) OR Mathematics for Economics I (MATHUA 211).
Introduction to the study of algorithms. Presents two main themes: designing appropriate data structures and analyzing the efficiency of the algorithms that use them. Algorithms studied include sorting, searching, graph algorithms, and maintaining dynamic data structures. Homework assignments, not necessarily involving programming.

CSCIUA.0330 Introduction to Computer Simulation
4 Points. Undergraduatelevel. Spring.
Prerequisites: A grade of C or higher in MATHUA 121 Calculus I or MATHUA 212 Math for Economics II (for Economics majors) and PHYSUA 11 General Physics.
In this course, students will learn how to do computer simulations of such phenomena as orbits (Kepler problem and Nbody problem), epidemic and endemic disease (including evolution in response to the selective pressure of a malaria), musical stringed instruments (piano, guitar, and violin), and traffic flow in a city (with lights, breakdowns, and gridlock at corners). The simulations are based on mathematical models, numerical methods, and Matlab programming techniques that will be taught in class. The use of animations (and sound where appropriate) to present the results of simulations will be emphasized. 
CSCIUA.0380 Topics of General Computing Interest
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Topics determine prerequisites.
Detailed descriptions available when topics are announced. Typical offerings include Computing in the Humanities and Arts and Introduction to Flash Programming. Does not count toward the computer science major. 
CSCIUA.0381 PROGRAMMING TOOLS FOR THE DATA SCIENTIST
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Data Science for Everyone (DSUA 111) or equivalent proficiency in Python, and either Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3).
Lecture and laboratory. Building applications in Python using a projectbased learning approach. Students use Python packages in a variety of applied areas, such as textual analysis and data visualization. Does not count toward the computer science major.

CSCIUA.0421 Numerical Computing
4 Points. Undergraduatelevel. Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201), either Calculus I (MATHUA 121) or both of Mathematics for Economics I and II (MATHUA 211 and 212), and Linear Algebra (MATHUA 140), or permission of instructor.
The need for floatingpoint arithmetic, the IEEE floatingpoint standard, and the importance of numerical computing in a wide variety of scientific applications. Fundamental types of numerical algorithms: direct methods (e.g., for systems of linear equations), iterative methods (e.g., for a nonlinear equation), and discretization methods (e.g., for a differential equation). Numerical errors: can you trust your answers? Uses graphics and software packages such as Matlab. Programming assignments.

CSCIUA.0453 Theory of Computation
4 Points. Undergraduatelevel. Spring.
Prerequisites: Basic Algorithms (CSCIUA 310) and Computer Systems Organization (CSCIUA.201)
A mathematical approach to studying topics in computer science, such as regular languages and some of their representations (deterministic finite automata, nondeterministic finite automata, regular expressions) and proof of nonregularity. Contextfree languages and pushdown automata; proofs that languages are not contextfree. Elements of computability theory. Brief introduction to NPcompleteness.

CSCIUA.0467 Applied Internet Technology
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: C or better in Computer Systems Organization (CSCIUA 201). Students who complete Applied Internet Technology (CSCIUA 467) with a C or better are not eligible to take Web Development and Programming (CSCIUA 61).
Applied Internet Technology is a practical introduction to creating modern web applications. It covers fullstack (that is, every aspect of building a database driven web application: server programming, database implementation, frontend markup, styling and interactivity) web development. It includes topics such as database and data model design, web application architecture, separation of logic and presentation, handling user input and processing form data, managing asynchronous processes, strategies for creating realtime web applications, and handling clientside interactivity. Students will use current server and clientside web frameworks and libraries to build dynamic, datadriven sites. Various applications to support development will also be introduced, such as version control, static analysis tools, and build systems.

CSCIUA.0470 ObjectOriented Programming
4 Points. Undergraduatelevel. Fall.
Prerequisites: Computer Systems Organization (CSCIUA 201).
Introduces the important concepts of objectoriented design and languages, including code reuse, data abstraction, inheritance, and dynamic overloading. Covers in depth those features of Java and C++ that support objectoriented programming and gives an overview of other objectoriented languages of interest. Significant programming assignments stressing objectoriented design. Not offered every academic year.

CSCIUA.0472 Artificial Intelligence
4 Points. Undergraduatelevel. Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201) and Basic Algorithms (CSCIUA 310).
Many cognitive tasks that people can do easily and almost unconsciously have proven extremely difficult to program on a computer. Artificial intelligence tackles the problem of developing computer systems that can carry out these tasks. Focus is on three central areas in AI: representation and reasoning, machine learning, and natural language processing. 
CSCIUA.0473 Fundamentals of Machine Learning
4 Points. Undergraduatelevel. Spring.
Prerequisites: Data Structures (CSCIUA.102), Linear Algebra (MATHUA.140) and Probability and Statistics (MATHUA.235). Students may take any of the following courses in place of MATHUA.235: Theory of Probability (MATHUA 233), Mathematical Statistics (MATHUA 234), Honors Theory of Probability (MATHUA 238) OR Data Analysis (MAUY 2224).
This exciting and fastevolving field of computer science has many recent consumer applications (e.g., Microsoft Kinect, Google Translate, IPhone's Siri, digital camera face detection, Netflix recommendations, Google news) and applications within the sciences and medicine (e.g., predicting proteinprotein interactions, species modeling, detecting tumors, personalized medicine). Students learn the theoretical foundations and how to apply machine learning to solve new problems.

CSCIUA.0474 Software Engineering
4 Points. Undergraduatelevel. Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201)
An intense handson study of practical techniques and methods of software engineering. Topics include advanced objectoriented design, design patterns, refactoring, code optimization, universal modeling language, threading, user interface design, enterprise application development, and development tools. All topics are integrated and applied during the semester long group project. The aim of the project is to prepare students for dynamics in a real workplace. Members of the group meet on a regular basis to discuss the project and to assign individual tasks. Students are judged primarily on the final project presentations. Not offered every academic year.

CSCIUA.0475 Predictive Analytics
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201), Basic Algorithms (CSCIUA 310), and Linear Algebra (MATHUA 140) or Honors Linear Algebra (MATHUA 148).
Predictive analytics is the art and science of extracting useful information from historical data and present data for the purpose of predicting future trends. In this course, students will be introduced to the phases of the analytics lifecycle and will gain an understanding of a variety of tools and machine learning algorithms for analyzing data and discovering forward insights. Several techniques will be introduced including: data preprocessing techniques, data reduction algorithms, data clustering algorithms, data classification algorithms, uplifting algorithms, association rules, data mining algorithms, recommender systems, and more. This course aims to provide students with skills of the new generation of data scientists that will allow them to structure, analyze and derive useful insights from data that could help make better decisions.

CSCIUA.0476 PROCESSING BIG DATA FOR ANALYTICS APPLICATIONS
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: (CSCIUA 201) Computer Systems Organization and (CSCIUA 310) Basic Algorithms. Familiarity with Linux commands and SQL will be helpful but is not required.
Introduces platforms, tools, and architectures that facilitate scalable management and processing of vast quantities of data. Explores open source tools enabling the efficient acquisition, distributed storage, and processing of big data. Provides handson experience with distributed processing Apache solutions such as Hadoop MapReduce, HBase, Hive, Impala, Pig, core Spark, Spark SQL, and Spark Streaming. Other Apache big data tools covered are Oozie, Zookeeper, Flume, and Kafka.

CSCIUA.0478 Introduction to Cryptography
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Basic Algorithms (CSCIUA 310).
An introduction to the principles and practice of cryptography and its application to network security. Topics include symmetrickey encryption (block ciphers, modes of operations, AES), message authentication (pseudorandom functions, CBCMAC), publickey encryption (RSA, ElGamal), digital signatures (RSA, FiatShamir), and authentication applications (identification, zeroknowledge). 
CSCIUA.0479 Data Management and Analysis
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Data Structures (CSCIUA 102). Students that complete Data Management and Analysis (CSCIUA 479) with a C or better are not eligible to take Database Design and Implementation (CSCIUA 60).
Extracting, transforming and analyzing data in myriad formats. Using traditional relational
databases as well as nonrelational databases as well as nonrelational databases to store, manipulate, and query data. Students write custom programs, create queries, and use data analysis tools and libraries on a wide array of data sets. Additional topics: data modeling, cloud databases and AP programming. 
CSCIUA.0480 Special Topics in Computer Science
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Topics determine prerequisites.
Detailed course descriptions are available when advanced topics are announced each semester. Typical offerings include, but are not limited to, Bioinformatics, Building Robots, Computer Graphics, Machine Learning, Network Programming, Computer Vision, and Multimedia for Majors. 
CSCIUA.0490 Special Topics in Programming Languages
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Topics determine prerequisites.
Covers topics in programming languages at an advanced level. Detailed course descriptions are available when topics are announced.

CSCIUA.0520 Undergraduate Research
4 Points. Undergraduatelevel. Fall.
Prerequisites: Permission of the department.
The student is supervised by a faculty member actively engaged in research, possibly leading to results publishable in the computer science literature. A substantial commitment to this work is expected. The research project may be one or two semesters, to be determined in consultation with the faculty supervisor. Students taking this course for honors in computer science are required to write an honors thesis. All other students need to submit a writeup of the research results at the conclusion of the project. 
CSCIUA.0521 Undergraduate Research
4 Points. Undergraduatelevel. Spring.
Prerequisites: Permission of the department.
The student is supervised by a faculty member actively engaged in research, possibly leading to results publishable in the computer science literature. A substantial commitment to this work is expected. The research project may be one or two semesters, to be determined in consultation with the faculty supervisor. Students taking this course for honors in computer science are required to write an honors thesis. All other students need to submit a writeup of the research results at the conclusion of the project. 
CSCIUA.0897 Internship
1  4 Points. Undergraduatelevel. Fall.
Prerequisites: Restricted to declared computer science majors. Internship credit does not count toward major requirements, but does apply toward completion of the CAS degree.
An internship in computer science is an excellent complement to formal course work. We strongly recommend that students have some practical training along with their classroom experience, so they can explore different career options and gain handson experience. An internship is for majors only, and students must have maintained an overall GPA of 3.0 and a computer science GPA of 3.5. The internship will be graded. 
CSCIUA.0898 Internship
1  4 Points. Undergraduatelevel. Spring.
Prerequisites: Restricted to declared computer science majors. Internship credit does not count toward major requirements, but does apply toward completion of the CAS degree.
An internship in computer science is an excellent complement to formal course work. We strongly recommend that students have some practical training along with their classroom experience, so they can explore different career options and gain handson experience. An internship is for majors only, and students must have maintained an overall GPA of 3.0 and a computer science GPA of 3.5. The internship will be graded. 
CSCIUA.0997 Independent Study
1  4 Points. Undergraduatelevel. Fall.
Prerequisites: Permission of the department. Does not satisfy the major elective requirement.
Students majoring in the department are permitted to work on an individual basis under the supervision of a fulltime faculty member in the department if they have maintained an overall GPA of 3.0 and a GPA of 3.5 in computer science and have a study proposal that is approved by the director of undergraduate studies. Students are expected to spend about three to six hours a week on their project.

CSCIUA.0998 Independent Study
1  4 Points. Undergraduatelevel. Spring.
Prerequisites: Permission of the department. Does not satisfy the major elective requirement.
Students majoring in the department are permitted to work on an individual basis under the supervision of a fulltime faculty member in the department if they have maintained an overall GPA of 3.0 and a GPA of 3.5 in computer science and have a study proposal that is approved by the director of undergraduate studies. Students are expected to spend about three to six hours a week on their project.

FRSEMUA.0597 Problem Solving
4 Points. Undergraduatelevel. Fall.
Prerequisites: Some programming experience in Python, Java, Javascript, R, or C.
Many problems in science, business, and politics require heuristics—problemsolving techniques that often work well but give imperfect guarantees. This course teaches heuristics as they apply to the design of scientific experiments, the resolution of economic or political negotiations, and the construction of engineering devices in hostile environments. Students will work in small teams that will solve puzzles, conduct experiments, and build strategies for a competitive auction game. Students will use and learn computational tools, such as Python. The intent is to make you better able to face complex problems in any field of study you choose.