CSCI 233. Introduction to Scientific Computing. (4 Credits)

Introduction to programming and computer analysis of data for scientific applications. Scripting and treatment of numerical issues are integrated into the content stream.

CSCI 235. Programming I: Problem Solving. (4 Credits)

A first course in computer programming for beginners. Structured and object-oriented programming in Java or a similar programming language. Types, control structures, methods, and recursion; objects, classes, interfaces, encapsulation and polymorphism; exceptions, library classes, file I/O, linked lists, and graphical user interfaces.

Tags: AAQR

CSCI 243. Discrete Mathematics and Functional Programming. (4 Credits)

Sets, logic, the nature of proof, induction, algorithms, algorithm correctness, relations, lattices, functions, and graphs. Functional programming and recursion using the ML programming language. May not be taken after MATH 341 or MATH 351.

Tags: AAQR

CSCI 245. Programming II: Object-Oriented Design. (4 Credits)

A gateway to the computer science major, introducing a range of themes in the field of computer science. Object-oriented programming in Java or a similar language: code reuse with composition and inheritance; generic types; design patterns. Software development: development tools, attributes of good design. Algorithmic analysis; searching and sorting algorithms. Abstract data types: stacks, queues, trees, hashing; linked vs array-based implementation. Systems programing in C; pointers and dynamic allocation; model of machine memory, organization, and execution. Prerequisite: CSCI 235 or departmental approval.

CSCI 335. Software Development. (4 Credits)

Principles and practices of software development including design patterns, validation and testing, coordination of team projects. Introduction to databases and user interface design. Professional issues in computing. Prerequisite: CSCI 245; Pre or Corequisite: CSCI 243.

CSCI 345. Data Structures & Algorithms. (4 Credits)

Formal and experimental approaches to verifying algorithms' correctness and analyzing their efficiency. Abstract data types and their implementations. Efficient implementations of maps using balanced binary search trees and hash tables. Graph algorithms. Dynamic programming. Prerequisites: CSCI 243 and CSCI 245.

CSCI 351. Introduction to Computer Systems. (4 Credits)

An introduction to low-level systems issues from the perspective of the programmer. Representation of both data and program as produced by a compiler; hardware support for memory, input/output, and parallelism; fundamental ideas in operating systems and networking. Prerequisite: CSCI 245.

CSCI 357. Networking. (4 Credits)

Examination of the fundamental problems in computer internetworking, from the link to application levels, with particular attention to the Internet protocols. Issues include naming/addressing, error-handling, routing, and decentralized control. Prerequisite: CSCI 351. Course offered alternate years.

CSCI 359. Information Security. (4 Credits)

An introductory course in the technical aspects of computer security, exploring both theory and practice. General security properties and ideas: confidentiality, integrity, availability, threats, trust, protection, access control. Policy: access matrix, discretionary and mandatory access control, Bell–LaPadula, Biba, Chinese Wall, availability policies. Cryptography and its applications: symmetric and asymmetric ciphers, cryptographic hashes and digital signatures, key management and exchange, random number generation, single sign-on, cryptanalysis. Topics in systems security: vulnerabilities, malware, rootkits, botnets, social engineering, covert channels, information flow. Topics in network security: denial-of-service attacks, intrusion detection, firewalls, network protocol flaws, Web vulnerabilities, anonymous communication. Prerequisite: CSCI 351. Course offered alternate years.

CSCI 361. Computer Graphics. (4 Credits)

Introduction to graphical programming environments, OpenGL libraries. Rendering three-dimensional images, transformations, windowing, clipping, shading, and image enhancements. Prerequisite: CSCI 345. Course is offered occasionally.

CSCI 365. Programming Language Concepts. (4 Credits)

A survey of the design and implementation of programming languages: grammars, parsing, and abstract syntax; compilers, interpreters, and other language systems; type-checking and other static analyses; formal semantic specifications; implementation of imperative, functional, and object-oriented language features; type-soundness proofs; tail form and continuation passing style. Prerequisites: CSCI 335 and CSCI 351. Course offered alternate years.

CSCI 371. Database Management Systems. (4 Credits)

History and motivation for database systems. Entity-relationship model, relational model, SQL overview, keys. Relational algebra and calculus, SQL nested, aggregate, cursor queries, null values. Storage of data on disk systems, file organization, hash and tree indexing. Schema refinement and normal forms. Web-based access of database systems. Transaction processing. Prerequisites: CSCI 335 and CSCI 345. Course offered alternate years.

CSCI 373. Platform-Specific Development. (4 Credits)

Introduction to developing software on a specific platform, such as iOS programming using Swift for applications on iPhones and iPads. Topics include developer tools, programming in a platform-specific language, MVC design pattern, user interfaces, persistent storage solutions, and frameworks for additional app functionality. Prerequisite: CSCI 335. Course offered alternate years.

CSCI 381. Machine Learning. (4 Credits)

Theory, algorithms, and applications of machine learning. Machine learning techniques including k-nearest neighbors, expectation-maximization, neural nets, support vector machines, and principal component analysis. Ethical considerations for how machine learning applications are used and how they affect society. Prerequisite: CSCI 345 and MATH 245. Course offered alternate years.

CSCI 384. Computational Linguistics. (4 Credits)

An exploration of big ideas in computational linguistics, natural language processing, and/or language technologies. Language models, n-grams, information theory and entropy, and semantics. Applications of computational linguistics such as part-of-speech tagging, authorship attribution, automatic translation, and sentiment analysis. Prerequisite: CSCI 345 (non-majors without the prerequisite may enroll with departmental approval). Course offered alternate years.

CSCI 394. Seminar. (2 or 4 Credits)

Selected topics in Computer Science at each offering, including such subjects as object-oriented design, e-commerce, human computer interface, networking services. May be taken again when a different topic is offered. Prerequisite: Departmental approval.

CSCI 445. Analysis of Algorithms. (4 Credits)

An introduction to algorithmic efficiency and to techniques for the design and analysis of efficient algorithms. General topics include review of asymptotics, algorithm design techniques (such as divide-and-conquer, dynamic programming, and greedy algorithms), graph algorithms, languages and automata, and NP-completeness. Prerequisite: CSCI 345. Course offered alternate years.

CSCI 455. Operating Systems. (4 Credits)

Dynamic process activation, system structure, abstract machines, kernels, performance evaluation, memory management, processor management, time management, recovery procedures, file systems, security, scheduling, device management, networks. Prerequisites: CSCI 335 and CSCI 351. Course offered alternate years.

CSCI 493. Mentoring Seminar. (2 or 4 Credits)

Faculty and student collaboration on a project of mutual interest. Limited enrollment - faculty approval required.

CSCI 494. Social and Ethical Issues in Computing. (2 Credits)

A study of the ways in which the computer and communications revolution is changing society to develop an awareness of and sensitivity to the ethical issues that arise in computer science and related professions. Prerequisite: Senior standing in the major.

General Education: SHAR

CSCI 495. Independent Study. (1 to 4 Credits)

An individually adapted study of any aspect of computing science or its relationship to other fields of study.

CSCI 496. Internship. (2 or 4 Credits)

Graded pass/fail. Prerequisite: junior or senior standing with Computer Science major. May repeat once for a total of 4 hours.