Introduction

Computing has become both ubiquitous and pervasive in society. Its ubiquity provides unprecedented opportunity to both generate business value and drive social change.  Its pervasiveness means that choices made in the design and deployment of computing systems can have significant and far reaching consequences.  From the first courses through the senior seminar capstone experience, majors prepare to make positive impacts on the world through ethical application of their technical knowledge.

Early courses introduce basic tools and techniques for software development, providing general concrete programming skills and insights into how computers are commanded to do what they do.  Intermediate level courses explore how complex computing systems are organized and function. They consider efficient ways to store, search and process large amounts of data.  They expand practical skills through participation in real-world projects with local or remote developer and user communities, preparing students for internships and participation in larger software projects. Later courses investigate in-depth topics, including: operating systems, computer networks, artificial intelligence, database systems, programming languages and the theoretical limits of what computers can and cannot do. Students finish their major with a yearlong senior capstone experience centered around a research experience or participation in a real-world project with local, regional, national or international developers and user communities that prepares them for the transition to the next stage of their lives.

Additional information about the structure of the major and full details of the major requirements can be found on the curriculum and courses page.

Courses appropriate for prospective majors

Students interested in majoring or minoring in computer science should request either COMP 130 or COMP 132 in their first semester. COMP 130 is designed as a first exposure to computer science and should be requested by students with limited or no prior programming experience.  COMP 132 assumes students have had the equivalent of one course of prior programming experience (e.g. a high-school course, or substantial self-taught experience). Students with prior programming experience should review the descriptions for COMP 130 and COMP 132 to determine the appropriate course to request.

Students having taken a computer science advanced placement exam (CS-A or CS Principles) should refer to the advanced placement information on the Registrar’s web page to determine what credit will be given and the appropriate course to request.  Students with other formal advanced work in computer science prior to college should contact the department faculty to discuss possible credit and placement.

For full course descriptions and requirements for the major, refer to the Academic Bulletin: Computer Science.

Students with any questions about courses or placement or the major more generally are encouraged to contact one of the department faculty.

Courses that fulfill distribution requirements

Lab Sciences (Division III):

  • COMP 130, Introduction to Computing
  • COMP 132, Principles of Object-Oriented Design

Quantitative Reasoning:

  • COMP 130, Introduction to Computing
  • COMP 132, Principles of Object-Oriented Design

Writing in the Discipline:

Computer science majors satisfy the college writing requirement by building a portfolio of disciplinary-specific writing. Each required course in the major includes a contextualized writing assignment that students add to their portfolio. Upon completion of the major, the department faculty certify that the portfolio satisfies the college writing requirement. 

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.

Computer Science Curriulum

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, Numerical Methods, Operations Research, Programming Languages, Artificial Intelligence, Database Systems, Cyber Security, Machine Learning and Robotics.

Abstractions & Systems: Abstraction is the fundamental principle that underlies and enables the creation of the unimaginably 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 its 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:

  • Sugar Labs: Aims to improve education for children through a free open source collaboration and learning platform and an extensive set of community developed educational activities.
  • Sahana Eden: Created in the aftermath of the 2004 Indian Ocean Tsunami and used in relief efforts following the 2010 Haiti earthquake, supports disaster relief coordination through a volunteer and resource management system.
  • 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.
  • React Native: An open source JavaScript framework supported by Facebook and partners for building native mobile applications using React.
  • Audacity: An audio editing and recording application produced as open source software by a community of volunteers.

Recent research projects have included:

  • 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
  • Heuristic Approaches to Nonlinear 0-1 Knapsack Problem
  • Construction of Test Problems for the 0-1 Quadratic Knapsack Problem
  • Applying novelty search to the construction of ensemble systems.
  • Whiteboard scanning using Super-Resolution
  • Evolving Robotic Desires: A New Approach to Bridging the Reality Gap

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; presentation of technical topics for more general audiences; and evaluation 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. 

Scenario A B C D E
1st Fall 130 X X M170,
132
M170,
232
1st Spring M170, 
132
130 X M211, 
256
M211,
256
2nd Fall M211, 
190
232
M170, 
132, 
190
130 190,
232
190,
2/3xx
2nd Spring 256,
290,
314
M211,
256,
290
M170,
M211,
132
290,
2/3xx,
314
290,
314,
3xx
3rd Fall Study
Abroad
232 [1] 190,
232 [1]
Study
Abroad
Study
Abroad
3rd Spring Study
Abroad
Study
Abroad
256,
290
Study
Abroad
Study
Abroad
4th Fall 2/3xx,
332, 
491
2/3xx,
332, 
3xx, 
491
2/3xx,
332, 
491
332, 
491
332, 
491
4th Spring 3xxA, 
3xx, 
492
314, 
3xxA, 
492
314, 
3xxA, 
3xx, 
492
3xxA, 
3xx, 
492
3xxA, 
492

[1]  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.

Notes:

  • 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.

Major Advisors:

A student wishing to declare a major should bring the appropriate major declaration form, available from the Registrar’s page, to the department chair.  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.


Honors

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.

Co-curricular activities/programs

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 particpating.

The Math and Computer Science Society is a student run club that organizes and runs 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.

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.

Additional Remarks

3-2 Engineering Programs

The Pre-Engineering Curriculum page provides advice for students considering engineering careers as well as information about the 3-2 Engineering and Masters articulation agreements that Dickinson has with a number of different partner institutions.  

Career and Internship Assistance

The Center for Advising, Internships & Lifelong Career Development provides excellent advice and guidance for students seeking both internships and job opportunites for after graduation.

Also, check out Dickinson's Alumni Fire networking site.  This site connects you directly to Dickinson Alumni who are offering jobs, general career advice and mock interview practice.  You can search directly for alumni who graduated with computer science majors or alumni who are working in computing and technology fields. 

Here are some excellent websites about careers in computer science