Associate Professor Yoon, Chair; Professor Morelli†; Associate Professors Miyazaki and Spezialetti; Visiting Assistant Professor Ridgway
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 the p. 552.
|
|
Bachelor of arts in computer science |
Bachelor of science in computer science |
|
Foundational |
CPSC 115L |
CPSC 115L |
|
Breadth |
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 |
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 |
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 |
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 |
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.
Any computer science course numbered 110 or above and below 399, and CPSC 415. At most, one of the following courses:
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 advisor 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 advisors to identify classes that will be acceptable for transfer credits from their study abroad institution. Students must fulfill the year-long requirement of computer science seminar (CPSC 403 and 404) and the associated senior project during their senior year at Trinity.
Fall Term
110-01. 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. (Enrollment limited)-Ridgway
[110-02. Computers and Kinetic Content]— Many of today’s computing applications are designed to interact with humans, necessitating a change both in how programs are written and how information is presented for human viewing. As computers become ever more integrated into society, it becomes increasingly important to provide content that facilitates the interaction between humans and computers. Kinetic content, whether animation or video, allows information and meaning to be conveyed from computers to humans far more effectively than simple textual content. This course will explore the core computing concepts of event-driven programming, objects, modularity, and control flow in the context of designing and creating computer animation and video, and the programs that utilize this kinetic content as the primary means of human-computer interaction. (Enrollment limited)
110-07. Visual Computing— With the recent advancement of information technology, the amounts of data produced by various digital devices and computing systems are staggering. This course focuses on the fundamental visualization techniques which are essential to gain meaningful insights into these massive datasets by presenting the underlying structure of the data in understandable, visual forms. Topics will include the human visual system, color theory, information coding, data representation, and interactive visualization techniques and software. Students will also explore application areas including health care, national security, space exploration, bioinformatics, aircraft design, market analysis, education, social networks, weather, and everyday life. (Enrollment limited)-Yoon
[110-08. 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. (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: Computer Science 110 or mathematics skills appropriate for enrolling in a calculus class. (1.25 course credits) (Enrollment limited)-Ridgway, Spezialetti
[225. Topics in Application Programming: Server-side Web Programming]— The World Wide Web was proposed originally as a collection of static documents inter-connected by hyperlinks. Today, the web has grown into a rich platform, built on a variety of protocols, standards, and programming languages, that aims to replace many of the services traditionally provided by a desktop operating system. a web application is the combination of client-side (browser) and server-side programming. In this course, we study the design and implementation of web applications from the perspective of the server. Topics will include: producing dynamic content using server-side languages and technologies (i.e., Java, Servlets, JSP), content serving databases, SQL, and XML documents, session state management, and multi-tier web-based architectures. Students are expected to have basic programming experience (not necessarily Java). The course is hands-on: students will study and implement server-side parts of a server-side dynamic website based on the technologies and techniques presented during lecture. Prerequisite: C- or better in Computer Science 115L. (Enrollment limited)
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: C- or better in Computer Science 115L. (1.25 course credits) (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 either Computer Science 203 or Mathematics 205 (or concurrent enrollment in 203 or 205).
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 noncomputability 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 either Computer Science 203 or Mathematics 205 (or concurrent enrollment in 203 or 205). (Enrollment limited)-Miyazaki
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, Computer Science 275L and either Computer Science 203 or Mathematics 205 (or concurrent enrollment in CPSC 203 or MATH 205) (Enrollment limited)-Ridgway
[352. Artificial Intelligence]— A study of basic principles and research methods in artificial intelligence. The course exposes students to selected topics in the field including pattern recognition, problem solving, theorem proving, knowledge representation, and natural language understanding by computers. The course will draw on recent advances made by cognitive scientists in each of these applications. Students are expected to study the theoretical background of an application. They will also complete several programming and simulation assignments during the semester. Prerequisite: C- or better in Computer Science 215L and either Computer Science 203 or Mathematics 205 (or concurrent enrollment in 203 or 205). (Enrollment limited)
[372. Database Fundamentals]— Principles of database systems, including such topics as data independence, storage structures, relational data models, network data models, security, and integrity. A programming project may be required. Prerequisite: C- or better in Computer Science 215L and either Computer Science 203 or Mathematics 205 (or concurrent enrollment in 203 or 205). (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 CPSC 215 and one semester of calculus (MATH 131) (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) (Enrollment limited)-Spezialetti
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
109. Digital Film Editing— The transition of filmmaking to the digital domain has greatly expanded the potential for creative expression through the medium. This hands-on course introduces students to the use and potential of digital editing software for a broad range of film production purposes. Students do not need to own a camera or video editing equipment; camera access will be provided and shared editing stations are available at Trinity. (Enrollment limited)-Spezialetti
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. (Enrollment limited)-Staff
[110-08. 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. (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: Computer Science 110 or mathematics skills appropriate for enrolling in a calculus class. (1.25 course credits) (Enrollment limited)-Spezialetti, Staff
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. (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) (Enrollment limited)-Miyazaki
[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 either Computer Science 203 or Mathematics 205. (Enrollment limited)
[225. Topics in Application Programming: Client-side Web Programming]— The World Wide Web was proposed originally as a collection of sttic documents inter-connected by hyperlinks. Today, the web has grown into a rich platform, built on a variety of protocols, standards, and programming languages, that aims to replace many of the services traditionally provided by a desktop operating system. A web application is the combination of client-side (browser) and server-side programming. In this course, we study the design and implementation of web applications from the perspective of the client-side browser. Topics will include: HTML, programming a browser with JavaScript, Cascading Style Sheets, Document Object Model (DOM), Asynchronous JavaScript and XML (AJAX), client-side session state (cookies), JavaScript libraries (e.g. jQuery, YUI), and more. Students are expected to have basic programming experience (not necessarily JavaScript). The course is hands-on: students will study and implement a variety of dynamic web pages based on the technologies and techniques presented during lecture. (Enrollment limited)
[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, Computer Science 275L and either Computer Science 203 or Mathematics 205 (or concurrent enrollment in CPSC 203 or MATH 205) (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 either Computer Science 203 or Mathematics 205 (or concurrent enrollment in 203 or 205). (Enrollment limited)-Staff
[371. Compiler Techniques]— This course focuses on the basic problems underlying the translation of programming languages into executable code for target machines. We study the theory and implementation techniques for compiling block structured programming languages to produce assembly or object code for modern microprocessors. In this course, students will implement a compiler for a subset of modern dynamically typed programming language (Python). Unlike traditional courses in compilers that produce a working compiler at the end of the semester, we will incrementally build a working compiler for increasingly larger subsets of the Python language each week. Fluency in at least one programming language is assumed (Python, Java, C, etc.). The course compiler will be written in Python, but prior knowledge of Python is not required. Prior knowledge in assembly language is useful, but the course will cover the necessary requirements for students to complete the course compiler. Prerequisite: A grade of C- in Computer Science 215 and Computer Science 219; or concurrent enrollment in Computer Science 219. (Enrollment limited)
[372. Database Fundamentals]— Principles of database systems, including such topics as data independence, storage structures, relational data models, network data models, security, and integrity. A programming project may be required. Prerequisite: C- or better in Computer Science 215L and either Computer Science 203 or Mathematics 205 (or concurrent enrollment in 203 or 205). (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 CPSC 215 and one semester of calculus (MATH 131) (Enrollment limited)-Yoon
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) (Enrollment limited)-Spezialetti
415. Special Topics in Computing— The study of a specific intermediate or advanced topic in computer science. A specific topic may involve a specialized area of computer science or applications of computer science principles to other disciplines. Topics will vary from year to year depending on current developments in computing or interests of the instructor. This course may be repeated for credit. (Enrollment limited)-Staff
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
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