You are here

Computer Science

Credits:
4
Degree Requirements:
F6

An introduction to the fundamental concepts and practices of procedural programming. Topics include data types, control structures,
functions, arrays, files, and the mechanics of running, testing, and debugging. Emphasis is placed on program design and problem
solving techniques. The course also includes an introduction to the historical and social context of computing and an overview of
computer science as a discipline.

Credits:
4
Degree Requirements:
F6

An introduction to the fundamental concepts and practices of object-oriented programming. The object-oriented programming paradigm
is introduced, with a focus on the definition and use of classes as a basis for fundamental object-oriented program design. Other topics
include an overview of programming language principles, simple analysis of algorithms, basic searching and sorting techniques, and an
introduction to software engineering issues.

Credits:
4
Degree Requirements:
F6

An introduction to and survey of the mathematics used in computer science including functions, relations, sets, counting, logic, Boolean
algebra, proof techniques, induction, recursion, computational complexity, and computability. Other topics may be included as time
permits.

Credits:
4

A bottom-up exploration of the interaction between computer hardware and software. Topics begin with an introduction to digital logic,
and continue through elementary processor design, to assembly language, machine data representation, and computer arithmetic. Other
topics in contemporary computer architecture such as multicore processors and GPGPU’s may be discussed as time allows. Projects
include hardware and simulated digital circuits as well as programs in assembly language.

Credits:
4

An introduction to the fundamental concepts of data structures and the algorithms that arise from them, using the object-oriented design
paradigm. Data structures covered include stacks, queues, linked lists, hash tables, trees, and graphs. Other topics include an introduction
to iterative and recursive algorithmic strategies and basic algorithm analysis.

Co-requisite: COMP 172 (unless already taken)

Credits:
4

Coverage of the basic concepts of 2D and 3D graphics, including an overview of graphics hardware, use of a graphics application
programming interface, user interface design, techniques for computer animation, and graphical algorithms such as geometric
transformations, clipping, windowing, hidden surface removal, and raster graphics techniques for the representation of curves, surfaces,
and solids.

Co-requisite: MATH 223 or 261 (unless already taken)

Credits:
4

An introduction to the fundamentals of operating systems design and implementation. Topics include the process model and
implementation of processes, an overview of the major components of a modern operating system, mutual exclusion and interprocess
synchronization, a survey of scheduling algorithms, memory management techniques, and file systems.

Credits:
4

An introduction to the design and use of database systems, as well as the key issues in building such systems. Topics include the
relational model, logical database design, query languages, and database implementation issues such as storage and indexing, query
processing and optimization, concurrency control, and transaction management. In addition to traditional database topics, this course
provides an introduction to key technologies for managing and exchanging data on the World Wide Web.

Credits:
4

A study of theoretical models for computing. The hierarchy of finite state machines, pushdown machines, context free grammars, and
Turing machines will be analyzed, along with their variations. The basic concepts of decidability, complexity theory, and NP-Complete
problems will be introduced. (Course offered in alternate years; scheduled for 2016-2017.)

Credits:
4

An in-depth study of the design and analysis of advanced algorithms, including the performance tradeoffs and resources required by
various algorithmic implementations. Major classes of computational problems will be identified and explored. Advanced data structures
and approximation heuristics are introduced as required for solution design. Topics vary depending on the specific problems covered but
will include the Master Theorem, dynamic programming, divide-and-conquer and greedy algorithms. (Course offered in alternate years;
scheduled for 2015-2016.)

Credits:
4

A wide-ranging and in-depth coverage of fundamental programming language concepts, presenting design issues of the various language
constructs, and examining the design choices for these constructs in a range of the most popular contemporary programming languages.
Language design alternatives are examined and critiqued. Methods of syntax description, common approaches to describing the
semantics of programming languages, and various implementation approaches are covered.

Credits:
4

An introduction to the basic knowledge representation, problem solving, and learning methods of artificial intelligence (AI). Students
study the core algorithms and data structures used in AI, abstract real problems into the prototypical tasks that have been studied in AI,
and learn to map between abstract tasks and the basic AI techniques that address them.

Credits:
4

An introduction to concurrent programming models and parallel computer architectures. Students will learn the basic techniques of parallel program design, implementation, and performance analysis. Topics include shared-memory and distributed-memory systems, parallel and distributed algorithms, and high-performance computing.

Credits:
1-4

Qualified students may conduct original research in computer science under the supervision of a faculty mentor. A student may use four
combined credits from 451 and 452 towards one upper-level major elective. Students should expect to commit at least three hours per
week per credit.

Credits:
1-4

Qualified students may conduct original research in computer science under the supervision of a faculty mentor. A student may use four
combined credits from 451 and 452 towards one upper-level major elective. Students should expect to commit at least three hours per
week per credit.

Credits:
1-4

This course allows students to do advanced work not provided for in the regular courses. Its content will be fixed after consultation with
the student and in accord with his or her particular interests.

Credits:
1-4

This course allows students to do advanced work not provided for in the regular courses. Its content will be fixed after consultation with
the student and in accord with his or her particular interests.

Credits:
1-4
Degree Requirements:
F11

Internships in Computer Science, which are normally arranged by the Director of Career Services, permit a qualified student to receive
academic credit for off-campus work experience. Upon completion of the internship, the student makes written and oral reports focusing
on an integration of the student’s academic work and the internship project. Normally the course will be taken on a Pass/Fail basis; it does not count toward the requirements for the major or minor except with special approval of the department. Interested students should contact the Chair of the department and the Director of Career Services.

Credits:
4

An occasional offering of topics not covered in the existing computer science courses. Examples of topics include data mining, humancomputer
interfaces, virtual environments, bioinformatics, parallel systems, and compilers.

Credits:
1-4

Fall term: This course lays the groundwork for the Spring Senior Seminar experience. Independent readings will be discussed and
presented, and a Senior Seminar Project prospectus will be prepared and presented for approval by the faculty of the department.
Spring term: This course comprises an in-depth exploration of the principles and techniques of analysis and design of software systems
from an object-oriented perspective. Design patterns, a diagrammatic modeling language, and standard techniques of computer software
specification, implementation, testing, and documentation will be explored and used as tools by students working in teams. Each team
will produce a robust, scalable, and maintainable large-scale system based on the project proposal completed in CS 485. The Senior
Seminar sequence is meant to emphasize the unity and power of computer science by applying and extending ideas drawn from the
courses required for all Computer Science majors. All participants will make several oral presentations.

Credits:
1-4

Fall term: This course lays the groundwork for the Spring Senior Seminar experience. Independent readings will be discussed and
presented, and a Senior Seminar Project prospectus will be prepared and presented for approval by the faculty of the department.
Spring term: This course comprises an in-depth exploration of the principles and techniques of analysis and design of software systems
from an object-oriented perspective. Design patterns, a diagrammatic modeling language, and standard techniques of computer software
specification, implementation, testing, and documentation will be explored and used as tools by students working in teams. Each team
will produce a robust, scalable, and maintainable large-scale system based on the project proposal completed in CS 485. The Senior
Seminar sequence is meant to emphasize the unity and power of computer science by applying and extending ideas drawn from the
courses required for all Computer Science majors. All participants will make several oral presentations.