Introduction to computer science as a field of study and object-oriented programming as a core component thereof. Focuses primarily on programming concepts and techniques: variables, data types, loops, conditionals, functions, objects, classes, testing, and program design. Also covers UNIX fundamentals and other practical aspects of programming. No prerequisites. Offered each term.
Introduction to data structures and algorithmic problem solving. Encapsulation and information hiding, recursion, algorithm techniques, and time complexity. Advanced object oriented programming with inheritance, static and dynamic memory allocation. Linked lists, stacks, queues, and sequential and binary search. Prerequisite: 127 or 126. Offered each term.
Introduction to functional programming and discrete mathematics. Sets, functions, and relations. Basic logic, including formal derivations in propositional and predicate logic. Recursion and mathematical induction. Programming material: Data types and structures, list-processing, functional and recursive programming. No prerequisite. Offered every year.
Additional concepts in discrete mathematics. Recurrence relations, counting, and combinatorics. Discrete probability. Algorithmic graph theory. Programming with advanced data structures. No prerequisite. Offered each fall.
A studio course exploring visual layout principles of interactive website design. Survey of methodology, theory, and best practice of web design solutions. Projects will explore current technologies.Will not count towards the major or minor. Offered every year.
Explores the application of computer science through the software development process. Focuses on software engineering and the production of complete programs, from planning and user interface design through coding, testing, deployment, and maintenance. Additionally, the course covers several aspects of technical writing, encompassing documentation, specifications, and communication with clients. Prerequisites: 128. Offered each fall.
Introduction to computer organization and system architecture. Topics: Boolean algebra, combinational and sequential logic design, fundamental structure of major computer hardware systems (CPU/ALU, memory, cache, registers, I/O), instruction sets, computer arithmetic, pipelining, and memory hierarchy. A two-hour weekly hardware lab is required. Prerequisites: 128. Offered each spring.
Introduction to the relational and semi-structured database models. Theoretical concepts include relational algebra and calculus, logical and physical database design, normalization, database security and integrity, data definition and data manipulation languages. Programming topics: database creation, modification, and querying using XQuery, MySQL and PHP. Prerequisite: 128 and Math 135. Offered in alternate years.
Introduction to computer networking, from single, physical links to the structure of the global internet. Focuses on the internet and related technologies, its nuts and bolts, and the principles that govern how and why it works. Several advanced topics are covered, often drawn from the rapidly advancing forefront of network applications. Prerequisites: 128 and Math 136. Offered in alternate years.
Explores efficient programming through the study of algorithms and data structures. Algorithm complexity analysis. Common patterns and tradeoffs; e.g., recursion, divide and conquer, greedy algorithms, parallelization, etc. Advanced data structures and abstract data models; e.g., linked structures, array-based structures, hash tables, trees, graphs, sets, etc. Prerequisites: 128 and Math 136. Offered in alternate years.
Comparative analysis of programming languages. Taxonomy and history of programming languages, parsing, garbage collection/resource management. Type systems, semantics, and advanced object oriented and functional programming. Prerequisite: 128 and 135. Offered in alternate years.
Theoretical foundations of computing. Automata, grammars, decidability and complexity. Computability and logic: undecidability and incompleteness. Automata theoretic approaches to decision problems in logic. Prerequisite: 128 and Math 135, or CS/Math/Phil 360. Offered in alternate years.
Investigation of topics in formal logic. Covers soundness, completeness, and undecidability of classical predicate logic. Additional topics might include incompleteness, non-classical logics (e.g., modal, intuitionistic, many valued), computer implementations, and logic programming. Students will complete a final project relative to the rubric (Computer Science, Mathematics, Philosophy) chosen at registration. Prerequisite: 128 and Math 135. Offered in alternate years.
Computational linguistics is concerned with the computational analysis of natural language that should lead to computers “understanding” natural languages. Topics include the implementation of grammars, a comparative analysis of parsing algorithms, and unification based approaches to grammars. Optional topics include computational morphology, computational semantics, and statistical approaches to natural language processing. Prerequisite: 128 and Math 135. Offered as needed.
This non-credit course is offered by arrangement with the department head. Application must be made at the beginning of the semester prior to the internship. Prerequisites: 128. Offered each term.
Introduction to fundamental issues and techniques of AI. Topics: search algorithms, knowledge representation, automated reasoning, expert systems, machine learning (decision tree, artificial neural networks, Bayesian inference, and clustering). Prerequisite: 354. Offered in alternate years.
Study of the techniques for translating high-level programming languages into executable machine code or byte code: lexical analysis, syntactic analysis, contextual analysis, and code generation. Comparison between compilation and interpretation as approaches to programming language implementation. Optional topics include: garbage collection, polymorphic type checking, optimization, implementation of virtual machines. Prerequisites: 256 and 355. Offered in alternate years.
Introduction to fundamental issues and techniques of operating system design. Topics: processes and threads, process scheduling, deadlock, memory management, I/O systems, file management. Optional topics: multimedia and distributed operating systems, security, and parallel operating systems. Prerequisites: 253 and 256. Offered in alternate years.
Individual directed readings on a topic of interest to the student. This course is a preparation for CS 499 (Research/Thesis), which culminates in a committee-reviewed manuscript. The course requires a significant review of the literature. This course does not count toward the computer science major or minor. Open only to CS majors with a cumulative GPA of 3.00 or higher in CS. Prerequisites: Two upper-level courses in CS. Requires permission of department chair and faculty research advisor. Offered each term.
Opportunity to pursue directed or independent study of a specialized topic.Work is expected to culminate in a committee-reviewed manuscript. Students enrolled in this course must present their paper at a student research conference, a professional meeting, or it must be accepted for publication in a committee approved journal. This course does not count toward the computer science minor. Open only to CS majors with a cumulative GPA of 3.00 or higher in CS. Please see university-wide regulations if seeking research honors. Prerequisites: 498 and three upper-level courses in CS. Requires permission of department chair and thesis advisor. Offered each term .