Courses in Computer ScienceCSC 121
This is an introductory course in which problem solving and algorithm development are studied by considering computer science topics, such as computer graphics, graphical user interfaces, modeling and simulation, artificial intelligence and information management systems. Interesting and relevant programming assignments related to these topics are written in a high-level programming language that supports objects. Additional assignments utilize writing and data analysis to reinforce central course concepts and to address related areas of computing, such as ethics, history and the meaning of intelligence. The course meets three hours in class and two hours in laboratory (3-2). Offered each semester. Not offered pass/fail.
|Science and Mathematics||1 course|
This course builds on CSC 121 and includes programming topics such as sorting and searching, sets, recursion and dynamic data types. Additional concepts involve data type abstraction and implementation developed through studying structures such as lists, stacks, queues, hash tables and binary search trees. The course emphasizes object oriented implementation of these structures. Students learn tools for algorithm analysis and explore the use of standard libraries. The concept of tradeoffs (i.e., time vs. space, iteration vs. recursion, static vs. dynamic) recurs as a theme throughout the course. Prerequisite: CSC 121. Offered each semester. Not offered pass/fail.
|Science and Mathematics||CSC 121||1 course|
A seminar focused on a theme related to the study of computer science. Open only to first-year students. Does not count toward the major in computer science or into the major GPA.
This is an introduction to the study of computer hardware and its relationship to software. Topics include information representation, architecture of the central processing unit, memory organization and hierarchy, assembly language and machine level representation of programs, interactions and relationships among system components (hardware, operating systems, compilers, network environments), and the impact of architectural decisions on performance. Prerequisites: CSC 122. Offered each semester. Not offered pass/fail. Not open to students who have credit for CSC 221.
|CSC 122||1 course|
A study of fundamental techniques and tools for managing software development projects, together with relevant professional and ethical issues. Topics include methodologies such as UML diagrams for software specification and design, documentation standards, and tools for testing, code management, analysis, and debugging. Object oriented programming techniques such as inheritance and polymorphism are emphasized. Students will develop skills in individual and team software development through extensive practice designing and implementing object oriented software systems. In addition, students gain experience reading, documenting, presenting and critiquing such systems. Prerequisites: CSC 122. Offered each semester. Not offered pass/fail.
|CSC 122||1 course|
This course explores the theoretical foundations of computation at various levels of abstraction. Specific topics include graph theory and related algorithms; functional programming with an emphasis on recursion and recurrences; the description of languages using formalisms such as regular expressions, finite state machines, and context free grammars; and digital logic and its application to sequential and combinational circuits. Prerequisite: CSC 122. Offered each semester. Not offered pass/fail.
|CSC 122||1 course|
In this course students learn to communicate technical and non-technical information about computer science to technical and non-technical audiences. This writing includes communication with users (e.g., user manuals), the general public (e.g., op-ed pieces related to technical issues), and other non-technical audiences (e.g., legislators, potential investors, customers). Students also develop a project proposal document. Some of the writing in this course deals with ethical and social issues. Prerequisite or corequisite: CSC232
|CSC 232 (pre- or co-requisite)||1/2 course|
Topics are chosen from computer science content areas that extend explorations of content in existing courses or allow exploration of content not duplicated in regular course offerings. May count as an allied course in the computer science major depending on the topic. Does not count toward the major GPA.
This course examines fundamental principles in Human Computer Interaction as seen from the viewpoint of a computer scientist. Topics include user-centered design, expert reviews, usability tests, tradeoffs between interaction devices, alternative input-output methods, including handwriting recognition and associated algorithms, the design of interfaces for users with visual or motor impairments, construction of appropriate error messages and implementation of graphical user interfaces (GUIs). Prerequisite: CSC 232 and CSC 240. Typically offered annually. Not offered pass/fail.
|CSC 232 and CSC 240||1 course|
This course examines the core concepts and fundamental principles of computer networks and the services built on top of them. Topics covered include protocol organization, circuit-switch and packet-switch networks, routing, flow control, congestion control, reliability, security, quality-of-service and Internet protocols (TCP/IP). Prerequisites: CSC 231 and CSC 232. Typically offered annually. May not be taken pass/fail.
|CSC 231||1 course|
This course examines the implementation of intelligent algorithms on a computer system. The concept of an intelligent algorithm is motivated by initial discussions of the nature of intelligence and its relation to computers, particularly the Turing test. The course begins with two basic topics of artificial intelligence. The first is problem definition, state spaces and search methods, and the second is knowledge representation and logical reasoning. Following these topics is coverage of more advanced topics, such as game-playing algorithms, genetic algorithms, planning algorithms, computer vision, learning algorithms and natural language processing, among others. Prerequisite: CSC 232 and 233. Typically offered annually. Not offered pass/fail.
|CSC 232 and 233.||1 course|
This course covers some fundamental networking concepts, web application development and web application security. Topics covered include: introduction to the Internet, World Wide Web and internet protocols, markup languages, client side scripting, server side scripting, database concepts, encryption/decryption, web application vulnerabilities and how to build secure web applications. Prerequisites: CSC 232 and either CSC 231 or CSC 233. Typically offered bi-annually. Not offered pass/fail.
|CSC 231 or CSC 233.||1 course|
This course is an introduction to the concepts, techniques, algorithms and implementation of computer graphics. Topics include moving and drawing lines in absolute and relative coordinates, transformations, windowing, clipping, projections, perspective, polygon filling, hidden surface techniques and a variety of applications, including graphical user interfaces and menuing systems. Prerequisite: CSC 232. Typically offered annually. Not offered pass/fail.
|CSC 232||1 course|
Autonomous robots collect data from their environments and respond to the values gathered from their sensors in order to solve problems. In this introduction to autonomous robotics, students will first learn the basic principles of mechanical construction, electronics, sensors, motors and robot programming. Then, they will design, build and program original robots to solve problems such as finding the brightest light in a room and traversing a maze. In the hands-on course, students spend the majority of their time actually working with robots under instructor supervision. There is a significant writing component used in assessment, so students enhance their scientific writing skills. Prerequisites: CSC231 and CSC233. Typically offered annually. Not offered pass/fail.
|CSC 231 and CSC 233||1 course|
Data mining is the effort to reach useful conclusions from data by building interpretive and predictive computational models. This course prepares students to do this through hands-on exploration of data preparation, and model development, tuning, and validation. This is done in the context of various algorithms such as gradient-descent, ensemble methods, and linear regression. Coursework includes multiple significant programming projects and a large final project. Prerequisites: CSC 232 and CSC 233.
|CSC 232 and CSC 233|
Topics are chosen from computer science content areas that extend explorations of content in existing courses or allow exploration of content not duplicated in regular course offerings. Open to students by permission of instructor or to those who satisfy prerequisites determined by the instructor.
|Open to students by permission of instructor or to those who satisfy prerequisites determined by the instructor.||1/2-1 course|
The topics of this course include a history of programming languages, virtual machines, representation of data types, sequence control, data control, lexical vs. dynamic scoping, sharing, type checking, parameter passing mechanisms, run-time storage management, context-free grammars, language translation systems, semantics and programming paradigms. Prerequisite: CSC 231, CSC 232, and CSC 233.Typically offered annually. Not offered pass/fail.
|CSC 231, CSC 232||1 course|
This course offers the study of theories related to compilers with the goal of implementing a compiler for a simplified variation of a language such as C++. Topics include formal languages, grammars, lexical, syntactic and semantic analysis, code generation and optimization. Prerequisites: CSC 231, CSC 232, and CSC 233. Typically offered annually.
|CSC 231, CSC 232, CSC 233||1 course|
Topics in operating system concepts and design, such as file systems, CPU scheduling, memory management, virtual memory, disk scheduling, deadlocks, concurrent processes, protection and distributed systems are studied in this course. Topics are treated thoroughly in a generic way and also discussed in detail with respect to a specific operating system. Prerequisites: CSC 231, CSC 232, with a pre- or co-requisite of CSC 233. Typically offered annually. Not offered pass/fail.
|CSC 231, CSC 232, CSC 233||1 course|
This course examines and discusses computer security, how to protect our computing infrastructure from illegal access, tempering, denial of access, etc. We will first define terms such as security and secure computing, then we'll talk about cryptography including symmetric and public key cryptographic techniques and their applications. Other topics covered include secure software, cyber security, database security, system security and hardware security. Prerequisites: CSC231, CSC232, and CSC233.
|CSC231, CSC232, and CSC233.||1 course|
Various models of formal languages (which provide a basis for compilers) and computation (which defines the kinds of problems that can be solved by a computer) are studied. Topics include regular languages, regular expressions, finite state automata, context-free languages, context-free grammars, push-down automata and Turing machines. The application of these models to several practical problems in computer science is considered. Computational limits are also discussed, using as examples several problems which cannot be solved by any algorithm. Prerequisite: CSC 233. Typically offered annually. Not offered pass/fail.
|CSC 233||1 course|
This course provides an external and an internal view of relational database management systems (DBMSs). The external view consists of database design and implementation. The database query and manipulation language SQL will be studied to the degree that students will be able to become proficient in this language on their own. The internal view involves characteristics of secondary storage devices, methods of organizing information, various file organization and accessing techniques and other topics related to database engine implementation. Programming assignments complement topics discussed in class, including the building of a few key components of a database engine. Prerequisite: CSC 231, CSC 232 and CSC 233. Typically offered annually. Not offered pass/fail.
|CSC 231, CSC 232, CSC 233||1 course|
Topics are chosen from content areas of computer science that either extend explorations of content in existing courses or allow explorations of content not duplicated in our current course offerings. Open by permission of instructor to students with more advanced prerequisites chosen by the instructor.
|Open by permission of instructor to students with more advanced prerequisites chosen by the instructor.||1/2-1 course|
Students complete a project proposal and a project under the sponsorship of a member of the computer science faculty. Students build on previous course work and/or internship experiences to complete their projects, to produce a project write-up, and to examine ethical issues related to their projects. Periodic progress reports will also be given. Prerequisite: CSC 231, CSC 232, CSC 233, CSC 240 (beginning in 2015-16) and MATH 123, senior standing and at least one computer science course at the 300 or 400 level. Offered each semester. Not offered pass/fail.
|CSC 231, CSC 232, CSC 233, CSC 240 (beginning in 2015-16), MATH 123||1 course|