Concepts of thinking computationally and the technical tools to function effectively in the digitally-connected world. Hands-on introduction to computers, computation, the Internet, and the basics of computer hardware and software. Students will have experience during the instructed computer lab with a number of software environments including an operating system, a word processor, a presentation tool, a spreadsheet, and a database system. The course will focus on problem solving and programming within the context of a wide range of applications, and prepare students for further study in a variety of majors and minors. In addition, students will acquire the skills needed to learn other similar tools on their own.

Prereq: one Math course numbered 110 or higher.

In-depth introduction to spreadsheets as an effective tool for the organization, processing, and analysis of numerical information in such areas as business, finance, engineering, natural and social sciences. Topics include: basic cell operation, text manipulation, formulas, functions, arrays, circular references, charting techniques, pivot tables, conditional formatting, and VBA programming.

Prereq.: CSCI 12.

An introduction to computer science through problem solving, focusing on the methodology of problem solving rather than specific hardware or software tools. Students will learn how to select and use specific software tools advantageously. Lab exercises will exemplify the problem-solving methodology.

Prereq.: CSCI 80.

Introduction to computer networks from a user's perspective and the World Wide. The course will provide hands-on experience with electronic mail, file transfer, Telnet, and Web browsers, including the creation of Web pages using HTML, JavaScript, and CGI scripts; image preparation and editing; scanning and OCR.

Prereq.: CSCI 80.

A comprehensive introduction to the fundamental concepts, techniques, and tools that underlie the use of multimedia in scientific and business applications. Major topics include the principles of image, sound, and video synthesis; software and industry standards; and typical applications.

Prereq.: MATH 122.

This course is intended to develop the ability to solve problems using differing models of computation. It will develop reasoning ability by creating a computing environment with very few rules which will then be used to develop algorithms within the scope of the model of computation. These environments will be models of actual computing environments. The nature of what an algorithm is will be developed.

Prereq.: CSCI 80.

A continuation of CSCI 80. Students will learn to program databases using SQL. Microsoft Access integrated with Visual Basic. In addition, object-oriented database programming such as Oracle and Jasmine will be covered.

Prereq.: MATH 122.

Science and society; principles for scientific exploration; scientific visualization and mathematical analysis: concepts and techniques; computing tools for visualization and computational analysis; Internet tools for science exploration; concept of integrated computing environment for scientific study and collaboration; PC-instrumentation. Applications to social science, biochemistry, psychology, physical, chemical, and earth science.

Prereq.: CSCI 12.

Concepts and principles of algorithmic problem-solving. Fundamental skills to program and use computational tools for modeling, numerical simulation, data analysis, and visualization with applications in engineering, mathematics, medicine, natural and social sciences.

Prereq.: CSCI 12

Advanced training to extend the students' knowledge of widely used office productivity enhancement tools to "expert level" in such areas as word processing, spreadsheet, database, presentation graphics, and electronic messaging. For each of the software packages the course covers: formatting data and content, organizing and analyzing content, formatting documents, collaboration tools, and customization via menus, macros, and specialized settings. Projects are taken from business as well as scientific applications. Students who master the material in this course should be able to pass industry standard examinations for advanced certification, such as Microsoft Certified Office Specialist.

Topics in computer programming and applications at a level appropriate for students who are not majoring in computer science. Topics and prerequisites will be announced at registration time. The course may be repeated for credit providing the topic is different, and may not be applied toward the major in computer science.

Examination of some of the technological, philosophical, and mathematical underpinnings of the "information age." Distinctions among information, meaning, and data. Design of intelligent agents. Diagnostic and causal reasoning. Readings from the literature of information theory and artificial intelligence. Written assignments, plus completion of a project to design and/or construct an information-actuated agent.

Introduction to the principles of algorithmic analysis and computational implementation. Topics include implementation methodologies, including choice and use of data types, objects, classes, and methods; control structures; basic data structures including arrays; procedures and functions; parameters and arguments; scope and lifetime of variables; input and output; Written documentation describing algorithms and identification and correction of algorithmic implementations.

Prereq.: MATH 151 or equivalent, and open only to students in the

Introduction to the principles and practice of programming. Topics include primitive data types; concepts of object, class, and methods; control structures; arrays; procedures and fuctions; paramtr passing; scope and lifetime of variabls; input and output; documentation. (This course is equivalent to CSCI 111)

Prereq.: Math 122 or equivalent.

Induction. Counting in finite sets; Binomial Theorem. Asymptotic order of functions; exponential, polynomial and logarithmic relationships. Algorithm as a functional input-output map; specification, elementary analysis of running time. Recursion in functions, algorithms, and trees. Recurrences in modeling and algorithm analysis; linear recurrences; Master Theorem. All topics will center around appropriate problem solving exercises. Not open to CSCI majors and minors.

Prereq.: CSCI 111.

Object-oriented algorithmic problem solving in C++, with attention to general as well as language-specific issues including pointer and pointer arithmetic; linked lists; memory management; recursion; operator overloading; inheritance and polymorphism; stream and file I/O; exception handling; templates and STL; applications of simple data structures; testing and debugging techniques.

Prereq.: CSCI 111.

Object-oriented algorithmic problem solving in Java, with attention to general as well as language-specific issues including applications, event-driven programming; elements of graphical user interfaces (GUIs); linked lists; recursion; inheritance and polymorphism; file I/O; exception handling; packages; applications of simple data structures; applets; concept of multithreading; testing and debugging.

Prereq.: MATH 120 and 151 or 141; CSCI 111.

Algorithms, recursion, recurrences, asymptotics, relations, graphs and trees, applications.

Prereq.: CSCI 111.

Principles of computer design and implementation. Instruction set architecture and register-transfer level execution; storage formats; binary data encoding; bus structures; assembly language programming.

Prereq.: CSCI 211, 212, and 220.

Fundamental data structures and their implementations: stacks, queues, trees (binary and AVL), heaps, graphs, hash tables. Searching and sorting algorithms. Runtime analysis. Examples of problem-solving using greedy algorithm, divide-and-conquer, and backtracking.

Prereq.: CSCI 120 and CSCI 212.

Open only to students enrolled in a cross-disciplinary minor sponsored by the Computer Science Department. Fundamental data structures and their implementations: stacks, queues, trees (binary and AVL), heaps, graphs, hash tables. Searching and sorting algorithms. Runtime analysis. Examples of problem-solving using greedy algorithm, divide-and-conquer, and backtracking.

Prereq.: CSCI 220, 240, 313, and 320.

Principles and implementation of programming languages. Topics include: the procedural, object-oriented, functional, and logic programming paradigms; syntax (BNF, expression grammars, operator precedence and associativity); variables (scope, storage bindings, and lifetime); data types; control structures; function call and return (activation records and parameter passing); formal semantics. Programming assignments.

Prereq.: CSCI 316.

Formal definitions of programming languages: introduction to compiler construction including lexical, syntactic, and semantic analysis, code generation, and optimization. Students will implement portions of a compiler for some structured language.

Prereq.: CSCI 111 and 220.

Finite state machines, regular languages, regular expressions, grammars, context-free languages, pushdown automata, Turing machines, recursive sets, recursively enumerable sets, reductions, Halting problem, diagonalization.

Prereq.: CSCI 220 and 313.

Advanced data structures: B-trees, graphs, hash-tables. Problem-solving strategies including divide-and-conquer, backtracking, dynamic programming, and greedy algorithms. Advanced graph algorithms. Time complexity analysis. NP-complete problems. Applications to sorting, searching, strings, graphs. Programming projects.

Prereq.: CSCI 313 and MATH 231.

Foundations of machine learning, linear regression, logistic regression (classification), nonlinear transformation, regularization, validation, random forest, support-vector machine, neural network, deep learning, Unsupervised learning (K-Means), dimensionality reduction (PCA), machine learning pipeline. Programming projects.

Prereq: CSCI 323 and MATH 243.

Hashing, Bloom filters and applications, Cuckoo filters, quotient filters, streaming algorithms, heavy hitters and count-min sketch, other sketching algorithms, external memory algorithms and I/O efficiency, dimensionality reduction, coresets, MAPReduce. Programming projects.

Prereq.: CSCI 220 and 313.

ER modeling; functional dependencies and relational design; file organization and indexing; relational algebra and calculi as query languages; SQL; transactions, concurrency and recovery; query processing. Programming projects.

Prereq.: CSCI 331.

Review of basic database components and architecture; comparisons of OO databases with relational databases; modeling languages and methods, data definition languages; schema design methodology; the role of inheritance, object identity, and object sharing in OODBs; file structures and indexes for OODBs; transaction processing; concurrency control and recovery; development of database applications using a commercial OODB system.

Prereq.: MATH 241 and CSCI 313.

Data mining and data warehousing: data warehouse basics; concept of patterns and visualization; information theory; information and statistics linkage; temporal-spatial data; change point detection; statistical association patterns; pattern inference and model discovery; Bayesian networks; pattern ordering inference; selected case study.

Prereq.: CSCI 331.

Concepts of information retrieval: keywords and Boolean retrieval; text processing, automatic indexing, term weighting, similarity measures; retrieval models: vector model, probabilistic model; extended Boolean systems: fuzzy set, p-norm models; linguistic model; extensions and AI techniques: learning and relevance feedback; term dependence; document and term clustering; network approaches; linguistic analysis and knowledge representation. Implementation: inverted files; efficiency issues for largescale systems; integrating database and information retrieval.

Prereq.: CSCI 220, 240, and 313.

Principles of the design and implementation of operating systems. Concurrency, multithreading, synchronization, CPU scheduling, interrupt handling, deadlocks, memory management, secondary storage management, file systems. Programming projects to illustrate portions of an operating system.

A study of the internal structures of a particular operating system such as UNIX, or another chosen by the department. (The operating system to be studied is announced at registration time.) Projects are assigned that involve system calls, use of the I/O and file systems, memory management, and process communication and scheduling. Projects may also involve developing new or replacement modules for the operating system, such as the command interpreter or a device driver. A student may receive credit for this course only once.

Prereq.: CSCI 240.

Instruction set architectures, including RISC, CISC, stack, and VLIW architectures. The memory hierarchy, including cache design and performance issues, shared memory organizations, and bus structures. Models of parallel computing, including multiprocessors, multicomputers, multivector, SIMD, PRAM, and MIMD architectures. Pipelining models, including clocking and timing, instruction pipeline design, arithmetic pipeline design, and superscalar pipelining.

Prereq.: CSCI 340.

Issues in the implementation of computer systems using multiple processors linked through a communication network. Communication in distributed systems including layered protocols and the client-server model; synchronization of distributed processes and process threads.

Prereq.: CSCI 313 and MATH 231.

Overview of cloud computing, data centers, virtualization, cloud systems for big data storage & processing, cloud systems for machine learning, resource scheduling and resource management in the cloud, consistency, and fault tolerance. Programming projects.

Prereq.: CSCI 343.

Computer communications and networks; carriers, media, interfaces (RS 232, RS 422, CCITT); circuit types, data codes, synchronous and asynchronous transmission; protocols (OSI, TCP/IP); modems, multiplexors, and other network hardware; error correction and encryption; voice and data switching: local area networks, ISDN, packet switching; issues in the architecture, design, and management of networks.

Prereq.: CSCI 313.

An introduction to cryptographic practices, concepts, and protocols. Topics include the mathematical foundations for cryptography, public key methods (e.g., RSA and El Gamal), block ciphers (e.g., DES and Rijndael), key agreement architectures (Diffie-Hellman), linear feedback shift registers and stream ciphers (e.g., A5 for GSM encryption), signatures and hash functions, (pseudo) random number generators, and how to break the ENIGMA machine.

Prereq.: CSCI 313.

Internet protocol stack, analysis of representative protocols; Internet applications: client-server architecture, popular Internet application protocols, Internet application design, client side programming, server side programming, Web application and Web site design; programming projects.

Prereq.: CSCI 220 and 313; Math 152 and 231.

Error analysis, propagation of input and machine errors, interpolation, functional approximation, numerical differentiation, integration and summation, numerical solution of systems of linear equations and systems of nonlinear equations, numerical solutions of differential equations.

Prereq.: CSCI 316.

Principles of artificial intelligence. Topics include logic and deduction; resolution theorem proving; space search and game playing; language parsing; image understanding; machine learning and expert systems. Programming projects in LISP, PROLOG, or related languages.

Prereq.: CSCI 313 and MATH 241; or CSCI 314 and ECON 249 for Finance students.

Valuation of derivatives as a family of algorithmic computations, with analysis of the underlying financial model and hands-on implementation practice. Time value of money, arbitrage based pricing, risk-free portfolio, hedging, fundamentals of capital asset pricing model, collateralization, marking to market, margining, market risk, credit risk, netting, modeling stochastic behavior with Weiner rocesses. It's Lemma, the Black-Scholes-Merton model, volatility smilies, path-dependent and exotic derivatives.

Prereq.: CSCI 313.

Language models, part-of-speech tagging, syntactic parsing, machine translation, supervised learning, naïve bayes, logistic regression, word embeddings, neural networks. Programming projects.

Prereq.: CSCI 313 and MATH 231.

Digital image representation, intensity transformation, filtering in the spatial domain, filtering in the frequency domain, geometric transformation, image registration, morphological processing, segmentation, feature extraction, Image pattern recognition. Programming projects.

Prereq.: CSCI 220 and 313.

Introduction to the hardware and software components of graphics systems, representations of 2D and 3D primitives, geometric and viewing transformations, techniques for interaction, color models and shading methods, algorithms for clipping, hidden surface removal, and scan-conversion. Programming projects using a graphics API to demonstrate the process of computerized image synthesis.

Prereq.: CSCI 220 and 313.

Principles of software engineering including the software life cycle, reliability, maintenance, requirements and specifications, design, implementation, and testing. Oral and written presentations of the software design. Implementation of a large programming project using currently-available software engineering tools.

An examination of computational approaches to problem solving in a variety of contexts, either within the Computer Science discipline or between Computer Science and other disciplines. Students will be given an understanding of how knowledge is developed and managed using digital technologies in a various disciplines. How the course implements this structure will vary across offerings, but typically will involve determining what kinds of information form the basis for a discipline, a survey of techniques for storing and manipulating that information, and a project that either gives the student experience working with actual datasets from the discipline or investigation into alternate ways of gathering, storing, and accessing that information.

Each offering of this course will have a pre-announced theme that will serve as the basis for student projects that draw on one or more areas of computer science: typically, knowledge developed in previous courses in the major. Students will have the option of working in small groups, but may work individually instead. Each project group will present their initial project plan and final project summary to the class, with constructive critiques of others' projects an essential component of the course structure.

Prereq.: Junior or senior standing and permission of the instructor.

Students will study and report on survey and research papers dealing with various current topics in computer science selected by the instructor. Topics for each offering of the course will be announced at registration time.

Open to students majoring in computer science who, in the opinion of the department, are capable of carrying out the work of the course. Each student works on a research problem under the supervision of a member of the faculty.

Prereq.: Junior or senior standing and approval of the department's Honors and Awards Committee.

The student will engage in significant research under the supervision of a faculty mentor and a thesis committee consisting of two other faculty members. The thesis proposal and committee must be approved by the department's Honors and Awards Committee. Upon completion of the research paper, an oral presentation of the results, open to the public, will be given. With the approval of the mentor, thesis committee, and the department's Honors and Awards Committee, the course may be repeated once for credit when the level of the student's work warrants a full year of effort.

Prereq.: Permission of the department.

Open to majors and nonmajors who, in the opinion of the department, are capable of carrying out an independent project of mutual interest under the supervision of a member of the faculty.

CSCI 398.2, 90 hr.; 2 cr.,

CSCI 398.3, 135 hr.; 3 cr.

Prereq.: Completion of 15 credits in computer science and approval of the department.

Computer science students are given an opportunity to work and learn for credit. Students should consult the college's Office of Career Development and Internships for listings of available internships and procedures for applying. A proposal must be approved by the department before registration. The student's grade will be based on both the employer's and faculty sponsor's evaluations of the student's performance, based on midterm and final reports. A limit of 6 credits of internships may be taken. CSCI 398 may not be applied to the computer science major or minor.