CSCI 135. Computer Literacy. (2 Credits)

An introduction to personal computing emphasizing major applications (word processing, spreadsheets, databases, and/or presentations). Other topics include the history and organization of computers, effective use of the Internet, web page design, electronic library resources, and ethical issues of technology.

CSCI 215. Web Design & Programming. (2 Credits)

An introduction to the design and preparation of pages and sites for the World Wide Web. Topics include principles of design, markup and formatting of pages, tools for developing web content, and use of embedded scripting on client and/or server. No prior programming experience is required.

CSCI 231. Introduction to Computer Science Concepts. (2 Credits)

A survey of the fundamental ideas and methods in the science underlying computation. Classroom activities and hands-on laboratory investigations emphasize working with both data and process at different levels of abstraction, from logic and circuits to algorithms and formal machines. History of computing and its relation to other disciplines. Societal and ethical issues raised by computing technologies. (Two hours lecture with two hours lab) lin.

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. Prerequisites: CSCI 235 or departmental approval.

CSCI 301. Computer Science Colloquium. (1 Credit)

A departmental forum in which current developments and interdisciplinary topics relating to computer science are discussed. Students who have not completed the prerequisites are encouraged to attend as observers but may not register for credit. Students may enroll more than once, for a maximum total of 2 hours credit. Prerequisites: Department 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 co-requisite: 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 355. Computer Architecture. (4 Credits)

Computer architecture, low-level C programming, assembly language, parallel programming. Macro definitions, information encoding, addressing techniques, parameter passing, call frames, optimization, and parallel organization. Prerequisite: CSCI 351.

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.

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.

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.

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.

CSCI 375. Artificial Intelligence. (4 Credits)

Definition of intelligence, representation of knowledge, search strategies, heuristics, control of process, natural language processing, vision systems, expert systems, robotics. Integrative issues of AI and Christianity. Prerequisite: CSCI 345.

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).

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 395. Computer Science Project/Minor Capstone. (2 to 4 Credits)

This course consists of a special project supervised by a member of the computer science faculty. Project proposals must be submitted by the student, along with a proposed number of credit hours, and approved by the department prior to enrollment in the course. Prerequisite: CSCI 335.

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.

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.

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.

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.