(Effective Fall 2019)
A minimum of 11 credits in computer science numbered 132 or higher, including: 132, 190, 232, 256, 290, 314, 332, 491, 492
(Note: 190 and 290 are ½ credit each.)
One course designated as Abstraction Implementation
Two additional computer science elective courses including:
- At least one numbered 200 or higher. This course may be replaced by PHYS 213 or, with prior approval of the department, another appropriate course outside of computer science.
- At least one numbered 300 or higher
Two credits in mathematics:
(Effective Fall 2019)
A minimum of six credits in computer science numbered 132 or higher, including: 132, 190, 232 and 256
(Note: 190 is ½ credit.)
Three additional computer science elective courses including:
- At least one course numbered 200 or higher. This course may be replaced by PHYS 213 or, with prior approval of the department, another appropriate course outside of computer science.
- At least two courses numbered 300 or higher.
NOTE: Courses designated as Abstraction Implementation will have COMP 256 and COMP 232 as prerequisites and will require students to implement elements of a computing system at a minimum of three distinct levels of abstraction. Two courses in our current catalog carry this designation: COMP 352 – Computer Networks and COMP 354 – Operating Systems. Additional courses designated Abstraction Implementation will be offered depending upon student and faculty interest.
Students matriculating prior to fall 2019 will be able to choose to complete the old or new major requirements. Information about the old curriculum may be found in the College Bulletin.
Students who declared a major or minor in computer science prior to fall 2019 are ensured to be able to complete their program. More information is provided in this document.
Suggested curricular flow through the major
The Structure of the Major:
The curriculum is organized into four main areas (see diagram below): Programming & the Scientific Core; Electives; Abstraction & Systems; and Tools & Practices.
Programming & the Scientific Core: Programming is a practical skill set while also providing a primary mechanism through which much of computer science can be explored and understood. Required courses in the Scientific Core (132, 232, 314, 332) develop and use practical programming and computational problem-solving skills to build a deeper understanding of Computer Science as an academic discipline.
Electives: Two required electives provide an opportunity to explore topic areas within computer science. Recent topics have included: Electronics, Computational Mathematics, Operations Research, Programming Languages, Artificial Intelligence, Database Systems, Cyber Security, Information Security.
Abstractions & Systems: Abstraction is the fundamental principle that underlies and enables the creation of the extraordinarily complex computing systems we use every day. Required courses (256 and an Abstraction Implementation elective, e.g. 352 or 354) develop facility with abstractions through studying their use in systems including computer hardware design, programming languages, computer operating systems and networking, and web application architectures.
Tools & Practices: Modern tools and practices are essential in the creation, testing and maintenance of large software projects. Required courses (190, 290) introduce and provide exposure to modern tools and practices in the context of a real-world Free and Open Source Software (FOSS) project. In the year-long Senior Seminar (491, 492) students gain additional real-world experience through engaging in a research project or through participating in a FOSS project community.
Recent FOSS communities that students have joined have included:
- Godot Game Engine: Godot is an open-source 2D and 3D video game development platform that offers a fully integrated, scalable, and transparent game development experience.
- Jenkins: The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying, and automating any project. Jenkins enables developers to test their code faster and receive prompt feedback.
- Book Project: An open source web application that allows users to track books they're currently reading, what they want to read, or goals they have for reading. The project was started using Java, Vaadin, and Spring Boot, but currently is migrating to React and TypeScript.
- NumPy: NumPy is a fundamental package for scientific computing in Python. It is a library that provides various objects and functions such as multidimensional array object, masked arrays/matrices, and an assortment of routines for fast operations on arrays, including mathematical, logical, shape manipulation, sorting, selecting, I/O, basic linear algebra, Fourier transformations, and much more.
- Open MRS: Started in a single medical clinic in Kenya, aims to improve general medical care and pandemic response by building an electronic medical records system.
- freeCodeCamp: Helps millions of people develop employable technical skills by expanding access to programming education and skills training through a free and open source platform and community developed curricular materials.
- Atom: A widely used hackable open source text editor supported by GitHub for collaborative software development.
- Audacity: An audio editing and recording application produced as open source software by a community of volunteers.
Recent research projects have included:
- Chaos Genetic Algorithms vs Genetic Algorithms: Why the Distributions of Mutation Sizes Matter
- NSF: Collaborative Research: Broadening Participation in Computing through Authentic Collaborative, Engagement with Computing for the Greater Good
- Analysis of Transport Layer Congestion Control Algorithms in 5G Millimeter-Wave Networks
- FarmData2 Development
- Developing Heuristics for 0-1 Cubic Knapsack Problems
- Handover Mechanisms in 5G MmWave Networks
- Empirical Evaluation of Low-Power Wide Area Networks for Internet of Things
- Self-adaptive Chaotic Mutation Operators in Evolutionary Computation
- Secure and Lightweight Communication in Heterogeneous IoT Environments
A full listing of the projects worked on both in the senior seminar and through independent study and research opportunities can be found on the Student-Faculty Research page.
In addition to the above technical organization there are three cross-cutting threads that run throughout the major: Computing for the Greater Good; Social, Legal & Ethical Issues; and Writing in the Discipline.
Computing for the Greater Good: The technical and business value of computing is well known. This thread emphasizes the power of computing to be a driver of social change. Students learn about and participate in Humanitarian Free and Open Source Software (HFOSS) communities, building software systems that address societal and community challenges.
Social, Legal & Ethical Issues: When computing and technology become ubiquitous and pervasive, many social, legal and ethical issues arise. This thread introduces ethical reasoning and examines the issues surrounding topics such as autonomous vehicles, algorithmic bias, privacy, artificial intelligence, recommendation systems, internet of things, cyber currency and others.
Writing in the Discipline: Computer science graduates go on to write in a wide variety of styles for a range of audiences. This thread provides students with practice and feedback on several styles of writing relevant to the discipline. Students ultimately build a portfolio of writing though completion of focused assignments that include writing: readable, maintainable code for developers; coherent, detailed documentation for users; technical specifications for managers and implementers; presentations of technical topics for more general audiences; and evaluations of social, legal and ethical issues in computing.
Paths through the Major:
Careful consideration has been given to ensuring that students can begin the major in computer science immediately, or as late as their third semester and in all cases still complete the major in four years and have at least one option for study abroad.
The scenarios below illustrate the different courses of study based upon when the major is begun and with which course. For example, the column for scenario A shows the path for a student taking COMP 130 in the first semester, while the column for Scenario C shows the path for a student taking it in the third semester. Scenario D requires prior computer science experience and Scenario E requires advanced placement. Study abroad is shown with minimal or no COMP courses taken while away to allow the broadest possible study abroad opportunities. Students not studying abroad, or taking COMP courses while away (which most do) can adapt the scenarios accordingly.
 Study abroad is possible here with careful planning. Please consult with your computer science advisor as early as possible to identify a study abroad program for this scenario.
- 2/3xx indicates a 200- or 300-level elective
- 3xxA indicates a 300-level Abstraction Implementation elective
- Study abroad options have been shown with minimal or no COMP taken to allow for the maximum range of possible study abroad opportunities. If students take COMP courses while abroad, which we anticipate most will, scheduling flexibility increases and the course load can be distributed more evenly across the remaining semesters.
Students matriculating prior to fall 2019 will be able to choose to complete the old or new major requirements. Information about the old curriculum may be found in the Bulletin at the following link. Students who decalred a major or minor in computer science prior to fall 2019 are ensured to be able to complete their program. More information is provided at the following link.
Social Innovation and Entrepreneurship:
Students majoring in computer science who have a particular interest in innovation and entrepreneurship as well as applications of computing and technology for the greater good are encouraged to consider also completing the Social Innovation and Entrepreneurship (SINE) Certificate. Recognizing that computing and technology can be employed as powerful forces for driving positive social change, a number of COMP courses can be used to complete SINE certificate requirements. Computer science majors can count COMP 190 and 290 as an elective for the SINE certificate. Similarly, COMP 390 and 491 count as electives, and COMP 492 counts as the experiential component of SINE, if the projects pursued in these courses have a humanitarian focus. Thus, a computer science major with a well thought out plan of study and matching statement of purpose for the SINE certificate can add a SINE certificate with only a few additional courses (SINE 201, SINE 401, and one approved SINE elective). If you are interested in enhancing your computer science major with a SINE certificate please discuss it with your major advisor.
A student wishing to declare a major should contact the department chair; detailed instructions for declaring a computer science major are available on a separate page. Based on the student’s preferences, interests and current faculty advising loads the chair will assign one of the department faculty as the major advisor. Students are encouraged to meet with their major advisor at least once per term prior to course selection to discuss directions of study and how they align with future goals and plans.
Departmental honors is the highest distinction that the Department can award to a Major. Majors who receive departmental honors will be those who demonstrate a broad mastery of the discipline as well as an ability to complete and present high quality research. A broad mastery of the discipline is demonstrated by a GPA of 3.40 or higher in all courses related to the major. The ability to complete high quality research is demonstrated by the completion of a yearlong research project. This project will be characterized by an independent and in-depth study of an advanced topic including a literature search, reading of original sources and a novel formulation of results. Finally, the ability to present such research is demonstrated by the preparation of an honors thesis, a public presentation and a successful defense of the work to the department faculty. More detailed information is available on the department's web site.
Opportunities for off-campus study
The Computer Science program has been designed to support and encourage participation in a variety of study-abroad programs. The majority of computer science majors who study abroad do so in one of four programs that have strong computer science offerings: The University of East Anglia in Norwich England, The University of Queensland in Brisbane Australia, The University of Otago in Dunedin New Zealand or with the Danish Institute for Study Abroad (DIS) in Copenhagen, Denmark. Students with strong foreign language skills have also studied computer science in Germany, Russia, Italy, and Japan. With careful planning, students are also able to study abroad on programs of interest where computer science courses are not available. The table above illustrates a variety of options for how study abroad fits within typical paths through the major. A full list of study abroad options for Dickinson students is available through the Center for Global Studies and Engagement. Current students are encouraged to discuss study abroad plans and develop a plan of study with their computer science major advisor during their first-year or early in their sophomore year.
The department has an active competitive programming team that competes in several competitions each year including the ACM Regional Programming Contest and a contest hosted at Dickinson each spring. Contact any of the department faculty if you are interested in participating.
The Math and Computer Science Society is a student-run club that organizes academic and social events in the department. In a typical year they host several departmental coffees, an ice cream social, a Pi-day event, game nights, happy hours and often a trip to a site of interest in a nearby city (Washington, Baltimore, New York, Philadelphia).
The department runs the Math/CS Chats: a colloquium series, in which speakers (faculty, alumni and other guests) give talks of academic interest to majors in mathematics and computer science. These talks typically occur over the lunch hour and pizza is provided.
130 Introduction to Computing
An introduction to computer science as a scientific discipline. The key elements of computer programming will be introduced, using the Python programming language. This leads to techniques for solving problems and conducting scientific investigations via computation. Core topics include: programming constructs such as conditionals, loops, functions, and parameters; data structures such as arrays and dictionaries; libraries and objects; algorithmic techniques such as recursion; and software engineering techniques such as testing and debugging. Additional topics include social, legal and ethical issues raised by computing and computing for the greater good.
Students may not take this course for credit if they have already taken another Dickinson Computer Science course, other than COMP 180. Three hours classroom and two hours laboratory a week. Offered every semester.
Attributes: Appropriate for First-Year, ENST Foundations (ESFN), Lab Sciences, Quantitative Reasoning, SINE Elective
132 Principles of Object-Oriented Design
An introduction to object-oriented software design using Java. Topics include objects, classes, code modularity and reusability, abstraction, encapsulation, inheritance, polymorphism, and design patterns. Additional topics include unit testing, recursion, empirical and theoretical comparison of elementary algorithms. The lab component focuses on programming as a tool for solving problems and simulating real-world events.
Prerequisite: Equivalent of one course of prior programming experience. See Advising Guide for placement advice for 130 and 132. Three hours classroom and two hours laboratory a week. Offered every semester.
Attributes: Appropriate for First-Year, ENST Foundations (ESFN), Lab Sciences, Quantitative Reasoning
180 Introduction to Data Science
An introduction to the principles and tools of data science focusing on exploratory data analysis. Topics include types of variables, mathematical representations of data, data wrangling and transformations, data visualization and numerical summaries, and supervised and unsupervised machine learning. The course will include an introduction to computational tools such as the R statistical environment. No prior programming experience is required.
Prerequisites: MATH 170 or department placement. This course is cross-listed as DATA 180 and MATH 180.
Attributes: ENST Foundations (ESFN), Quantitative Reasoning
190 Tools and Techniques for Software Development
An introduction to the Unix command line environment, shell scripting, system administration, debugging tools and version control. Skills developed will be applied in the context of a Humanitarian Free and Open Source Software (HFOSS) project. Case studies of social, legal and ethical issues raised by computing and computing for the greater good will complement the technical skill development.
Prerequisite: 132, may be taken concurrently. One-half credit. Graded CR/NC. 75 minutes of classroom per week. Offered every fall.
Attributes: SINE Elective
200 Database Systems and Data Management for Data Analytics
A comprehensive introduction to the management and manipulation of database systems as it applies to data analytics. Topics related to data query languages to relational databases and NoSQL data systems will be covered, as well as the access and acquisition of other structured and unstructured data repositories available across the Internet. An understanding of techniques for transforming and restructuring data representations to allow for analysis will also be addressed.
Prerequisite: COMP 130 and DATA/COMP/MATH 180. Cross-listed with DATA 200
203 Special Topics
Topics to be announced when offered. Possible topics include: Cyber Security, Robotics, Programming Challenges and others depending upon faculty and student interest.
Prerequisite dependent on topic. One-half or one course credit.
232 Data Structures and Problem Solving
An advanced problem-solving course that focuses on the design, analysis and application of data structures including lists, stacks, queues, trees, and hash tables. Concepts in generic and functional programming are introduced. This course also further develops understanding and use of asymptotic analysis.
Prerequisite: 132. Offered every fall.
Attributes: Quantitative Reasoning
241 Computational Mathematics
An introduction to a broad range of numerical methods for solving mathematical problems that arise in science and engineering. Focus is given to developing a basic understanding of numerical algorithms, their applicability, and their limitations. Topics typically include floating-point number representation, sources of error, conditioning and numerical stability, root finding, solutions of both linear and nonlinear systems, least squares, splines and polynomial interpolation, optimization, and numerical differentiation and integration. The implementation and validation of algorithms through computer programming is also emphasized. No prior programming experience is required.
Prerequisite: Completion of two of the following courses: MATH 170,171, 211 and 270. This course is cross-listed as MATH 241. Offered in even numbered spring semesters.
Attributes: ENST Foundations (ESFN)
256 Computing Abstractions
A broad examination of the role and evolution of the abstraction hierarchies that enable the construction of complex computing systems. Examples spanning the field of computer science will be used, including: machine organization and architecture, data representation, language translation, operating systems, concurrency, networks, and web application architectures.
Prerequisite: 132. Three hours of classroom and two hours of laboratory a week. Offered every spring.
290 Large-scale and Open Source Software Development
An introduction to large-scale software development through participation in a Humanitarian Free and Open Source Software (HFOSS) project. Readings and discussions will focus on FOSS and HFOSS philosophy, licensing, communication tools, project and community organization, and software engineering topics related to large-scale software development. Case studies of social, legal and ethical issues raised by computing and computing for the greater good will complement participation in the HFOSS project.
Prerequisites: 132 and 190. One-half credit. Graded CR/NC. 75 minutes of classroom per week. Offered every spring.
Attributes: SINE Elective
314 Computability and Complexity
An introduction to the theory of computation, addressing the fundamental question of what problems can be solved using computers, both in principle and when efficiency is taken into account. Topics may include: finite automata, undecidable problems (such as the halting problem), Turing machines, regular languages, context-free grammars, universal computation, elementary complexity classes, NP-completeness, and the P vs NP problem.
Prerequisites: 132 and MATH 211. This course is cross-listed as MATH 314. Offered every spring.
331 Operations Research
An introduction to deterministic operations research, including linear programming, sensitivity analysis, and duality. Special topics may include transportation and assignment problems, network models, integer programming, and game theory.
Prerequisite: 262. This course is cross-listed as MATH 331. Offered in odd numbered fall semesters.
Attributes: ENST Foundations (ESFN), Quantitative Econ Elective, Quantitative Reasoning
332 Analysis of Algorithms
A study of algorithmic approaches to problem-solving and techniques for analyzing and comparing algorithms. Algorithm design strategies such as divide-and-conquer, dynamic programming, and backtracking will be explored in conjunction with problems that they solve and the data structures that they use (e.g. graphs). Topics in computational complexity include formal use of upper, lower and tight asymptotic bounds, analysis of recursive algorithms and lower bound arguments.
Prerequisite: 232, MATH 211. Offered every fall.
352 Computer Networks
An introduction to the fundamental concepts in computer networking with a focus on the Internet’s architecture and protocols. Topics include layered architectures, client-server computing, routing, switching, reliable and unreliable protocols, data encoding and compression, error detection and correction, flow control, congestion control, and network performance metrics. Additional topics may include wireless networks and security
Prerequisite: 232 and 256.
Attributes: COMP Abstraction Implement.
354 Operating Systems
A study of the principles underlying the organization and implementation of computer operating systems. Topics include multiprogramming, time-sharing, mutual exclusion and synchronization, process scheduling, memory management, and file systems.
Prerequisites: 232 and 256.
Attributes: COMP Abstraction Implement.
356 Programming Language Structures
An examination of the major programming language paradigms. The course also explores the basic properties and special facilities of languages representing each paradigm. Topics include data types, scope rules, block structures, procedure calls and parameter types, and storage allocation considerations.
Prerequisite: 232. Offered every fall.
364 Artificial Intelligence
A survey of techniques for applying computers to tasks usually considered to require human intelligence. Topics include knowledge representation and reasoning, search and constraint satisfaction, evolutionary and genetic algorithms, machine learning, neural networks, and philosophical questions.
Prerequisites: 232 and MATH 211. Offered in even numbered fall semesters.
378 Database Systems
A study of the conceptual, technical and social issues involved in organizing, storing and accessing large volumes of data. Topics may include data modeling, relational database design, relational algebra, data definition languages, data manipulation languages, and the storage and manipulation of unstructured data.
Prerequisites: 232 and MATH 211.
390 Free and Open Source Development Practicum
An independent study in which an individual student or small team of students participates in a Humanitarian and/or Free and Open Source (H/FOSS) community for the semester under the guidance of a faculty mentor. Interested students must identify a faculty mentor, select and justify the H/FOSS community and negotiate the scope of work prior to registration.
Prerequisite: 232 and 290.
Attributes: SINE Elective
393 Special Topics
Topics to be announced when offered. Possible topics include: Compiler Design, Artificial Life, Biologically Inspired Computing, Cyber Security, Machine Learning, and others depending upon faculty and student interest.
Prerequisite dependent upon topic. One-half or one course credit.
491 Fall Senior Seminar
A senior capstone course. Students identify and begin a year-long project with options including honors and independent research projects or participation in a Free and Open Source Software (FOSS) project. Class readings and discussions will focus on social, legal and ethical issues in computing, software engineering topics and contemporary issues in computer science. Written and oral presentation of technical and non-technical content will be required.
Prerequisite: 290 and Senior standing. Offered every fall.
492 Spring Senior Seminar
A continuation of the senior capstone course. Students continue the year-long project begun in 491. Class readings and discussions will focus on additional social, legal and ethical issues in computing, software engineering topics and contemporary issues in computer science. Written and oral presentation of technical and non-technical content and a final public presentation of the completed project will be required.
Prerequisite: 491. Offered every spring.