Skip To Content Skip To Menu Skip To Footer

Computer Science Advising

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.

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

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

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

Major Advisors:

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.

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

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 three programs that have strong computer science offerings: The University of East Anglia in Norwich England, 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 Advising, Internships & Career Center 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