Computer Science

Associate Professor Miyazaki, Chair; Professor Morelli; Associate Professors Spezialetti and Yoon (acting chair, fall 2015); Visiting Lecturers Bradley and Lake

Computer science is a broad discipline that employs a variety of approaches in an effort to advance our understanding and use of computing. Study in computer science can range from mathematical work aimed at understanding the theoretical and practical limits of what can be computed, to experimental work aimed at understanding the functioning of existing computer languages and systems, to design work aimed at building algorithms and computer systems that help people solve problems.

The Computer Science Department offers both a bachelor of arts and a bachelor of science degree in computer science. While both degrees are designed for students undertaking an in-depth study of computer science, the degrees reflect two different visions of that goal. The B.S. degree focuses on the study of computer science and mathematics courses and is designed for students who want to pursue such interests as software engineering, scientific or mathematical computing, or graduate studies in computer science or a closely related discipline. The B.A. degree reflects a more broad-based view of computing education and includes cognate courses that enable students to develop writing and reasoning skills in the context of fields other than computer science. This degree will prepare students for career paths in such areas as project management and information systems as well as post-graduate studies in law, business, and medicine.

The interdisciplinary computing major is a second way of combining an interest in computing with study in another discipline. For more information about this program, see p. 558.

Degree requirements

Bachelor of arts in computer science

Bachelor of science in computer science



Foundational
requirement

CPSC 115L
CPSC 215L
CPSC 203
CPSC 275L

CPSC 115L
CPSC 215L
CPSC 203
CPSC 275L

Breadth
requirement

One course in each of the following areas (selected from the list below):
Systems, Theory, Software

One course in each of the following areas (selected from the list below):
Systems, Theory, Software

Elective
requirement

Two additional courses selected from the designated elective courses listed below, at most one of which may be CPSC 110-x

Three additional courses selected from the designated elective courses listed below, at most one of which may be CPSC 110-x

Senior
exercise

Two-semester senior seminar (CPSC 403* and 404*)
Two-semester senior project (CPSC 498 and 499)

Two-semester senior seminar (CPSC 403* and 404*)
Two-semester senior project (CPSC 498 and 499)

Mathematics
requirement

Calculus I (MATH 131 or MATH 125 and 126)

Calculus I (MATH 131 or MATH 125 and 126)
Calculus II (MATH 132 or MATH 142)

Cognate
requirement

One non-computer science course that is designated as writing intensive
One additional numeric or symbolic reasoning course from the following list: POLS 241, PSYC 221L, SOCL 201L, PHIL 390, any math course numbered 107 or higher

* Fulfills the Writing Intensive Part II requirement.


Computer science breadth requirements

Select one from each category below.

Graduate school preparation—Students planning to attend graduate school in computer science are advised to take the following courses, which are needed for successful admission to and progress in graduate school: CPSC 219, 315, 316, 320, and MATH 228. A minimum grade of C- must be maintained in all courses counted toward the major.

Admission to the major—To be admitted to the major, students must receive a grade of C- or better in CPSC 215L and a grade of C- or better in CPSC 203. Upon submission of the declaration of major form to the department chair, an adviser in the department will be assigned.

Senior project—The senior project (CPSC 498 and CPSC 499) is an independent project that must extend over two semesters. The project is conducted under the supervision of a faculty adviser and performed in conjunction with the senior seminar (CPSC 403 and CPSC 404).

Honors—Honors are awarded to qualified students by a vote of the faculty. Typically, honors will be awarded to students who maintain a B+ average in all computer science courses numbered 200 and above and who complete the CPSC 403, 404 and 498, 499 sequences with a grade of A- or better.

Study away—Students are strongly urged to consult with their adviser as early as possible in the process of preparing to study abroad. Students should have completed the foundation requirement (CPSC 115L, CPSC 215L, CPSC 275L, and CPSC 203) before studying abroad. Students must consult with their faculty advisers to identify classes that will be acceptable for transfer credits from their study-abroad institution. Students must fulfill the yearlong requirement of computer science seminar (CPSC 403 and 404) and the associated senior project during their senior year at Trinity.

Fall Term

110. Computing with Mobile Phones— App Inventor for Android is a new open source programming language for Android smart phones. App Inventor is a visual language that enables novice programmers to create powerful mobile applications that interact with the web and with other phones. In this course, students will learn how to access the world of mobile services and applications as creators, not just consumers. They will learn to create entertaining and socially useful apps that can be shared with friends and family. In addition to learning to program and how to become better problem solvers, students will also explore the exciting world of computer science from the perspective of mobile computing and its increasingly important effect on society. (NUM) (Enrollment limited) –Lake

[110. Computers, Information, and Society]— Computers are ubiquitous and infiltrate almost every aspect of our daily life. From laptops to cell phones we have access to a wealth of information that is both an indispensible tool of modern society and a potential risk to our privacy, security, and even our identity. How is information represented inside a computer? What are the important parts of a computer? How are these pieces used to represent, store, and communicate information? How is software used to manipulate this information? What languages are used today to communicate on the information highway (World Wide Web)? What are the impacts of this information and its use? We will learn the fundamentals of computer technology, information abstraction, software, and ethical questions raised in today’s technologically advanced society. We will study the predominant languages of the internet (HTML, CSS, & JavaScript) to observe and understand how information is represented in a computer and communicated in the form of web pages. Basic computational constructs such as variables, functions, parameters, and control structures will be introduced. (NUM) (Enrollment limited)

115. Introduction to Computing— A fundamental treatment of computer science topics featuring the study of the high-level programming language Python. Topics discussed will include computer architecture, programming languages, and ethical issues involved in computer use. Problem-solving techniques involved in writing programs will be studied, proper style and documentation will be required, and object-oriented program design will be introduced. A required weekly lab will involve an intensive study of programming techniques in Python. Prerequisite: C- or better in Computer Science 110 or mathematics skills appropriate for enrolling in a calculus class. (1.25 course credits) (NUM) (Enrollment limited) –Morelli, Yoon

[219. Theory of Computation]— A selection of topics intended to serve as an introduction to formal languages and automata theory. The topics will be chosen from among finite state machines, pushdown automata, Turing machines, the Chomsky language hierarchy and related questions of computability. Prerequisite: C- or better in Computer Science 115L and Computer Science 203 (NUM) (Enrollment limited)

225. Event Driven Programming— Event driven programming is a paradigm in which the control flow of a program is driven by external events, which can range from user interaction via a mouse click to clock signals generated from within a computer system. This course will explore a variety of platforms for and applications of event driven programming. Prerequisite: C- or better in Computer Science 115L. (NUM) (Enrollment limited) –Spezialetti

275. Introduction to Computer Systems— This course introduces the fundamental organization and structure of modern computer systems from the perspective of a programmer. Students will become more effective programmers as they learn how computer systems compile, link, and execute programs, store information, and communicate. Topics covered will include data representations, computer arithmetic, low-level representations of programs, processor organization, the memory hierarchy and management, processes, and system-level I/O. A required weekly lab will involve a series of programming exercises related to these topics. Prerequisite: B- or better in Computer Science 115 or a C- or better in Computer Science 215L. (1.25 course credits) (NUM) (Enrollment limited) –Yoon

[316. Foundations of Programming Languages]— A study of the organization, specification, and behavior of programming languages. The course will focus on five different programming language paradigms: imperative, object-oriented, functional, logic, and concurrent. Programming assignments using example languages from each of these paradigms will be required. Emphasis will be placed on learning C++, PROLOG, and LISP in a Unix environment. Other topics covered include language syntax, control structures, objects, and functions. Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203). (NUM) (Enrollment limited)

[320. Analysis of Algorithms]— A continuation of the study begun in Computer Science 215 of the complexity of algorithms used in computing. The notions of P, NP, and NP-complete problems and of non-computability will be covered. The algorithms studied will include examples involving sorting, graphs, geometry, and combinatorics. Theoretical aspects of algorithms will be studied as well as practical aspects useful in writing programs. Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203). (NUM) (Enrollment limited)

399. Independent Study— Independent work to develop maturity and initiative in the solution of a problem in the area of the student’s special interests. This course may require concurrent registration in Computer Science 403 or 404. Submission of the special registration form, available in the Registrar’s Office, and the approval of the instructor and chairperson are required for enrollment. (0.5 - 1 course credit) –Staff

403. Computer Science Seminar— Students engaged in research (Computer Science 419) or independent study (Computer Science 399) and senior exercise students will meet with computer science faculty for oral presentations and critical discussions of journal papers, research plans, and research progress. Seniors using this course to satisfy the senior exercise requirement will be expected to complete a research or design project and make a formal presentation on its results to the seminar. The project may be an extension or revision of a project conducted in one of their other major courses. (0.5 course credit) (WEB) (Enrollment limited) –Spezialetti

415. Special Topics: Mobile Computing— A survey of the concepts and practices involved in the emerging field of mobile computing, with a focus on the Android and iOS operating systems. Topics include event-driven programming, the client-server model, location awareness (GPS), service management, and mobile security. The course will also address some of the broader impacts of mobile computing on privacy, health, and the economy. The course will be project based and students will build several mobiles apps for the Android platform. Prerequisite: C- or better in Computer Science 215. (NUM) (Enrollment limited) –Morelli

466. Teaching Assistantship— Submission of the special registration form, available in the Registrar’s Office, and the approval of the instructor and chairperson are required for enrollment. (0.5 - 1 course credit) –Staff

498. Senior Project Part 1— This course is comprised of a research or implementation project and a final written report. This course is required for all senior computer science majors. Students must locate a project advisor and must submit a preliminary proposal to the project adviser by the last day of classes in the spring semester of the junior year. In addition to the proposal, submission of the special registration form, available in the Registrar’s Office, and the approval of the instructor and chairperson are required for each semester of this year-long project. The course credits are considered pending in the first semester and will be awarded upon completion of the second semester. –Staff

Spring Term

[110. Computing with Mobile Phones]— App Inventor for Android is a new open source programming language for Android smart phones. App Inventor is a visual language that enables novice programmers to create powerful mobile applications that interact with the web and with other phones. In this course, students will learn how to access the world of mobile services and applications as creators, not just consumers. They will learn to create entertaining and socially useful apps that can be shared with friends and family. In addition to learning to program and how to become better problem solvers, students will also explore the exciting world of computer science from the perspective of mobile computing and its increasingly important effect on society. (NUM) (Enrollment limited)

[110. Computers, Information, and Society]— Computers are ubiquitous and infiltrate almost every aspect of our daily life. From laptops to cell phones we have access to a wealth of information that is both an indispensible tool of modern society and a potential risk to our privacy, security, and even our identity. How is information represented inside a computer? What are the important parts of a computer? How are these pieces used to represent, store, and communicate information? How is software used to manipulate this information? What languages are used today to communicate on the information highway (World Wide Web)? What are the impacts of this information and its use? We will learn the fundamentals of computer technology, information abstraction, software, and ethical questions raised in today’s technologically advanced society. We will study the predominant languages of the internet (HTML, CSS, & JavaScript) to observe and understand how information is represented in a computer and communicated in the form of web pages. Basic computational constructs such as variables, functions, parameters, and control structures will be introduced. (NUM) (Enrollment limited)

[110. Interactive Computer Graphics]— Advances in computer technology have made computer graphics one of the most rapid and economical ways of generating digital images. It is not surprising to find computer graphics used in virtually all areas of modern life. Doctors use three-dimensional medical imaging techniques to view a cross section of body tissues and organs during surgery. Sophisticated engineering and architectural systems are now designed with an aid of computer graphics tools. High-resolution imaging of molecular structures allows scientists to study the behavior of highly complex processes. Computer-generated animations, scenes, and special-effects are commonly used in today’s motion pictures and video games. This course introduces fundamental techniques and tools used in computer graphics. The topics will include drawing, coloring, shading, and modeling three-dimensional objects. In addition to lectures on the underlying principles of computer graphics, students will engage in a series of hands-on laboratory exercises which will provide an opportunity to design and generate the various types of digital images. Students will also be introduced to basic concepts of computer programming to manipulate more elaborate images and create computer animations. (NUM) (Enrollment limited)

115. Introduction to Computing— A fundamental treatment of computer science topics featuring the study of the high-level programming language Python. Topics discussed will include computer architecture, programming languages, and ethical issues involved in computer use. Problem-solving techniques involved in writing programs will be studied, proper style and documentation will be required, and object-oriented program design will be introduced. A required weekly lab will involve an intensive study of programming techniques in Python. Prerequisite: C- or better in Computer Science 110 or mathematics skills appropriate for enrolling in a calculus class. (1.25 course credits) (NUM) (Enrollment limited) –Miyazaki, Spezialetti

203. Mathematical Foundations of Computing— An introduction to the principles of logic and discrete mathematics required in the study of computer science. Topics covered may include: propositional and predicate logic and their relationship to general proof techniques used in computing and correctness proofs of programs; mathematical induction applied to recursion and recurrence relations; set theory with an emphasis on infinite sets used in computing; counting principles useful in analyzing graphs and trees; relations and functions and their relationship to databases and functional programming languages. Computer programs will be used to explore concepts examined in the course. Prerequisite: C- or better in Computer Science 110, or mathematics skills appropriate for enrolling in a calculus class. (NUM) (Enrollment limited) –Miyazaki

215. Data Structures and Algorithms— A study of data structures and algorithms using a high-level programming language. The basic data structures (lists, stacks, queues, trees, and files) and basic algorithms (searching, sorting, and file management) will be introduced and implemented. Data and procedural abstraction, software design principles, and the analysis of the complexity of algorithms will be discussed. Details related to programming will be covered in a required weekly lab. Prerequisite: C- or better in Computer Science 115L. (1.25 course credits) (NUM) (Enrollment limited) –Yoon

219. Theory of Computation— A selection of topics intended to serve as an introduction to formal languages and automata theory. The topics will be chosen from among finite state machines, pushdown automata, Turing machines, the Chomsky language hierarchy and related questions of computability. Prerequisite: C- or better in Computer Science 115L and Computer Science 203 (NUM) (Enrollment limited) –Miyazaki

[315. Systems Software]— A study of the organization and implementation of computer operating systems. Topics include operating systems organization, file systems, memory and process management, resource allocation, recovery procedures, multiprogramming, and distributed processing. The Unix operating system will be used and emphasis will be placed on how various system functions have been implemented in the Unix environment. Prerequisite: C- or better in Computer Science 215L, 275L and 203 (or concurrent enrollment in CPSC 203) (NUM) (Enrollment limited)

[333. Computer Networks]— An introduction to the principles and practices of local area and wide area networking. Topics include the study of the layers of computer networking, network configurations, protocols, security, and reliability. Issues related to implementing networking configurations will be studied. Prerequisite: C- or better in Computer Science 215L, 275L and 203 (or concurrent enrollment in CPSC 203) (NUM) (Enrollment limited)

[340. Principles of Software Engineering]— The study of issues involved in developing large-scale software systems. Topics covered include software life cycle, system design and specification, advanced programming concepts, and techniques for software testing, debugging, and maintenance. The issues studied will be applied to team projects. Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203). (NUM) (Enrollment limited)

375. High-Performance Computing— This course will introduce various programming models and techniques for multiprocessors. Students will design, implement, and evaluate parallel algorithms for solving complex problems that demand high computational speed. Topics covered include parallel machine architecture, analysis of parallel algorithms, load balancing, and various parallel algorithms including sorting, searching, linear systems, and image processing. Prerequisite: C- or better in Computer Science 215L, Computer Science 275L, and Mathematics 131. (NUM) (Enrollment limited) –Bradley

399. Independent Study— Independent work to develop maturity and initiative in the solution of a problem in the area of the student’s special interests. This course may require concurrent registration in Computer Science 403 or 404. Submission of the special registration form, available in the Registrar’s Office, and the approval of the instructor and chairperson are required for enrollment. (0.5 - 1 course credit) –Staff

404. Computer Science Seminar— Students engaged in research (Computer Science 419) or independent study (Computer Science 399) and senior exercise students will meet with computer science faculty for oral presentations and critical discussions of journal papers, research plans, and research progress. Seniors using this course to satisfy the senior exercise requirement will be expected to complete a research or design project and make a formal presentation on its results to the seminar. The project may be an extension or revision of a project conducted in one of their other major courses. (0.5 course credit) (WEB) (Enrollment limited) –Spezialetti

[415. Special Topics: Mobile Computing]— A survey of the concepts and practices involved in the emerging field of mobile computing, with a focus on the Android and iOS operating systems. Topics include event-driven programming, the client-server model, location awareness (GPS), service management, and mobile security. The course will also address some of the broader impacts of mobile computing on privacy, health, and the economy. The course will be project based and students will build several mobiles apps for the Android platform. Prerequisite: C- or better in Computer Science 215. (NUM) (Enrollment limited)

466. Teaching Assistantship— Submission of the special registration form, available in the Registrar’s Office, and the approval of the instructor and chairperson are required for enrollment. (0.5 - 1 course credit) –Staff

[490. Research Assistantship]— (0.5 - 1 course credit)

499. Senior Project Part 2— This course is comprised of a research or implementation project and a final written report. This course is required for all senior computer science majors. Students must locate a project adviser and must submit a preliminary proposal to the project adviser by the last day of classes in the spring semester of the junior year. In addition to the proposal, submission of the special registration form, available in the Registrar’s Office, and the approval of the instructor and chairperson are required for each semester of this year-long project. The course credits are considered pending in the first semester and will be awarded upon completion of the second semester. –Staff