Skip to main content
Computer Science at Smith College

Computer Science

Computer Science prepares students to lead in a world experiencing sweeping technological change. Students choosing to major in computer science can look forward to a career in one of the many fields to which computer technology has become vital, including the sciences, arts and entertainment, banking and commerce, and of course the communication and computer industries themselves.

About Computer Science at Smith

Computing and the Arts

Artistic applications of computing are a growing initiative in the department. In recent years we have added new minors in digital arts and digital music. Visiting faculty and active interdisciplinary ties with related departments make this an exciting and vibrant area.

Student Involvement

Computer science students are very active in the department. Three liaisons attend department faculty meetings and run monthly social gatherings, such as movie night and game night. A student-led club organizes career-oriented training and offers community outreach via a local chapter of Girls Who Code. Many students work as teaching assistants, running help sessions, grading and aiding students during teaching labs. Students also do research as special studies, as research grant assistants or as honors theses. Faculty have summer research projects available for motivated and interested students. For more information, contact a faculty member as early as January of the spring semester.

Facilities

Computer science enjoys the use of several dedicated classrooms and research facilities in Ford Hall. Installed machines include multiple-boot workstations and dedicated computing clusters. The student lounge provides comfortable furniture, toys and refrigeration for students looking for a break from their work. Students and faculty pursue interdisciplinary research and class work using digital circuits and microprocessor kits, Lego robot arms and robot dogs, and mobile platforms, plus sensor modules, synthesizers and keyboards for digital sound and music. The Center for Design and Fabrication offers 3-D printers, laser scanners, laser and water-jet cutters, among other tools for rapid prototyping.

Computer Science Studies for Non-Majors

For non-majors, we offer courses demystifying the inner workings of computers and the Internet. Students can take a course in interactive web design, providing them with bankable skills on the job market. For those interested in exploring further, we invite you to check out our courses on beginning programming, computer graphics and artificial intelligence.

Students working on computers wearing Microsoft attire

Online Questionnaire

To pick a computer science major adviser, please fill out the CS Major/Minor Declaration & Adviser Form. The form will automatically notify the computer science administrative assistant. 

Next Steps

  • Sarah will process your request and assign you a faculty advisor, depending on the number of advisees currently assigned to CS faculty.
  • Both you and your new adviser will receive an email from the administrative assistant indicating that you have a new adviser.
  • Get a Change of Adviser form (scroll to bottom of page) from the Registrar's office, fill it out, and have your new adviser sign it.
  • That’s it!

Requirements & Courses

Goals for Majors in Computer Science

  • Students majoring in computer science at Smith will gain a broad understanding of the core concepts of computing, as well as exposure to a variety of modern theoretical and programming paradigms. Moreover, they will develop the essential ability to successfully apply these concepts and tools in diverse contexts arising in the arts and sciences. Specifically, they will learn how to:

  • approach real-world situations from a computational perspective
  • solve problems abstractly
  • evaluate and implement proposed solutions
  • adapt their solution to relevant domains, and
  • reason critically about the broader implications and consequences of the design and use of computational methods.
Measurable Outcomes

The skills, knowledge and behaviors that students acquire through our curriculum are observable through their ability to:

  • learn new programming languages, use multiple programming paradigms, and describe the similarities and differences between these paradigms, articulate how computing systems function, in terms of software-hardware interfaces, resource management, and communication between their parts, and adapt to new platforms.
  • demonstrate understanding of the power and limitations of various algorithms and computational models through abstract formulation, concrete implementation, correctness and efficiency analysis.
  • map abstract computation to specific physical and software implementations, as well as draw appropriate conclusions about real systems, including efficient resource management, communication between parts, and practical constraints.
  • work both independently and as part of a team, engage in dialogue about computational problems and their solutions, and reason critically about the societal implications of the resulting system.

Computer Science Major

Requirements

Twelve full-semester courses or the equivalent

  1. Two introductory courses
    1. CSC 110 (S/U only)
    2. CSC 120
  2. Three core courses
    1. CSC 210
    2. CSC 231
    3. CSC 250
  3. Two mathematics courses
    1. MTH 111, a math course with a prerequisite of MTH 111 or PHI 102
    2. MTH 153 or a math course with a prerequisite of MTH 153
  4. Four intermediate courses
    1. One CSC or SDS theory course: CSC 205/ MTH 205, CSC 235/ SDS 235, CSC 240, CSC 252, CSC 266, CSC 274, CSC 290, CSC 294, a topic of CSC 334, CSC 353pm, CSC 354, CSC 356ni, CSC 370, CSC 372 or a topic of CSC 390.
    2. One CSC or SDS programming course: CSC 205/ MTH 205, CSC 220, CSC 235/ SDS 235, CSC 240CSC 249CSC 251, a topic of CSC 256, CSC 262, CSC 266, CSC 274, CSC 290, CSC 294, a topic of CSC 334, CSC 352, CSC 354, CSC 356niCSC 370 or CSC 372
    3. One CSC systems course: CSC 223, CSC 230, CSC 249CSC 251, CSC 262, CSC 270, CSC 325, CSC 327CSC 330, CSC 352 or CSC 353pm 
    4. One CSC course at the 200 level or above.
  5. One 300-level course, taken only after completion of the core courses
Major Requirement Details
  • Beyond CSC 110, students may count one course (or up to 4 credits) S/U towards a CSC major or minor with the approval of their advisor. 
  • An additional course at the 200 level or above is required if a student places out of CSC 110. Courses in other programs and departments may be used to satisfy this requirement by permission of the department.
  • An advanced undergraduate or graduate course taught at another of the Five Colleges for a letter grade may satisfy the 300-level course requirement with permission of the department.

Honors

Please consult the director of honors or the departmental website for specific requirements and application procedures.

Computer Science Minor

Requirements

Six courses

  1. CSC 120
  2. CSC 210
  3. One additional CSC course at the 100 level or above (e.g., CSC 110)
  4. Three additional CSC courses at the 200 level or above*

*Applying more than 4 credits of CSC 400 to satisfy the requirements of the minor must be approved by the department. 

Digital Art Minor

This minor accommodates students who desire both grounding in studio art and the technical expertise to express their art through digital media requiring mastery of the underlying principles of computer science.

Requirements

Six courses equally balanced between computer science and art

  1. Three computer science courses
    1. CSC 120
    2. CSC 210
    3. CSC 240
  2. Three art courses
    1. ARH 110 or other art history course
    2. ARS 162
    3. ARS 263 or ARS 361

Relevant Five College courses may be substituted for any requirement with permission of the minor adviser.

Digital Music Minor

This minor accommodates the increasing number of students who desire both grounding in music theory and composition and the technical expertise to express their music through digital media that requires mastery of the underlying principles of computer science. The minor consists of the equivalent of six courses equally balanced between computer science and music.

Requirements

Six courses equally balanced between computer science and music

  1. Three computer science courses
    1. CSC 120
    2. CSC 210
    3. CSC 220 or CSC 250
  2. Three music courses
    1. MUS 110 or MUS 210
    2. MUS 233 
    3. MUS 345 or CSC 354

Relevant Five College courses may be substituted for any requirement with permission of the minor adviser.

Courses

CSC 109/ SDS 109 Communicating with Data (4 Credits)

Offered as SDS 109 and CSC 109. The world is growing increasingly reliant on collecting and analyzing information to help people make decisions. Because of this, the ability to communicate effectively about data is an important component of future job prospects across nearly all disciplines. In this course, students learn the foundations of information visualization and sharpen their skills in communicating using data. Throughout the semester, we explore concepts in decision-making, human perception, color theory and storytelling as they apply to data-driven communication. Whether you’re an aspiring data scientist or you just want to learn new ways of presenting information, this course helps you build a strong foundation in how to talk to people about data. {M}

Fall, Spring, Alternate Years

CSC 110 Introduction to Computer Science (4 Credits)

A gentle introduction to designing programs (recipes) for systematically solving problems. Students learn to build programs including designing, coding, debugging, testing and documenting them. An introduction to block-structured procedural control flow including branching, iteration and functions, using primitive and simple data types (lists). Students learn the high-level internal operation of computer systems (inputs, outputs, processing and storage) and their applications. Students are exposed to the social and historical aspects of computing. This course is recommended for those who have no prior experience in computer science at the high school, AP or college level. Not open to students who have taken CSC 111. May not be taken concurrently with CSC 120. S/U only. Enrollment limited to 30. {M}

Fall, Spring

CSC 120 Object Oriented Programming (4 Credits)

This course emphasizes computational problem-solving using a typed object-oriented programming (OOP). Students learn core computer science principles including: control flow, functions, classes, objects, methods, encapsulation and information-hiding, specification, recursion, debugging, unit testing, version control, using libraries and writing code in multiple files. Students also learn and apply the model-view-controller (MVC) architecture, the basics of graphics and GUIs, working with external files and foundations of algorithm design. Abstract data types and simple data structures are used to illustrate concepts of OOP and solve computational problems through regular programming assignments (in Java and Python). This course assumes prior programming experience including a basic understanding of branching (if-statements), iteration (loops), functions and simple data types (integers, strings, lists/arrays). Prerequisites: CSC 110 or equivalent. Cannot be taken concurrently with CSC 110. Enrollment limited to 30. {M}

Fall, Spring

CSC 205/ MTH 205 Modeling in the Sciences (4 Credits)

Offered as CSC 205 and MTH 205. This course integrates the use of mathematics and computers for modeling various phenomena drawn from the natural and social sciences. Scientific case studies span a wide range of systems at all scales, with special emphasis on the life sciences. Mathematical tools include data analysis, discrete and continuous dynamical systems, and discrete geometry. This is a project-based course and provides elementary training in programming using Mathematica. Designations: Theory, Programming. Prerequisites: MTH 112. CSC 110 recommended. Enrollment limited to 20. {M}

Fall, Spring, Annually

CSC 210 Data Structures (4 Credits)

Explores elementary data structures (arrays, linked lists, stacks, queues, maps, trees, graphs) and algorithms (searching, sorting, tree and graph traversal) in a variety of contexts. Using a typed object oriented programming language (e.g. Java), students develop their own implementations as well as more complex applications based upon existing, standard data structures libraries. Not open to students who have taken CSC 212. Prerequisite: CSC 120. Enrollment limited to 30. {M}

Fall, Spring

CSC 220 Advanced Programming Techniques (4 Credits)

Reinforces programming skills learned in previous programming courses through working on a number of projects. Offers practice for developing modular, reusable, maintainable code. Students will gain more experience with design and development. Designation: Programming. Prerequisite: CSC 210 or equivalent. {M}

Fall, Spring, Variable

CSC 223 Introduction to Software Engineering (4 Credits)

Introduction to software engineering theory and methodologies, with an emphasis on rapid prototyping and development. This course is a survey of topics: requirements elicitation and specification, prototyping and infrastructure, basic project management, architecture and design patterns, and verification and testing. Students work in teams on a significant design and development project. Prerequisite: CSC 210 or equivalent. Designation: Systems. Enrollment limited to 32. {M}

Fall, Spring

CSC 230 Introduction to Database Systems (4 Credits)

Databases form the foundation of modern commerce, social media, and government. This course will investigate the design and use of database systems from the traditional to the present day. Prerequisites: CSC 210 or equivalent. Designation: Systems. Enrollment limited to 30. {M}

Fall, Spring, Variable

CSC 231 Microprocessors and Assembly Language (4 Credits)

An introduction to the architecture of the Intel Pentium class processor and its assembly language in the Linux environment. Students write programs in assembly and explore the architectural features of the Pentium, including its use of the memory, the data formats used to represent information, the implementation of high-level language constructs, integer and floating-point arithmetic, and how the processor deals with I/O devices and interrupts. Prerequisite: CSC 210 or equivalent. Enrollment limited to 30. {M}

Fall, Spring

CSC 235/ SDS 235 Visual Analytics (4 Credits)

Offered as CSC 235 and SDS 235. Visual analytics techniques can help people to derive insight from massive, dynamic, ambiguous and often conflicting data. During this course, students learn the foundations of the emerging, multidisciplinary field of visual analytics and apply these techniques toward a focused research problem in a domain of personal interest. Students may elect to take this course as a programming intensive course, prerequisite: CSC 212. In this track, students learn to use R, Python and HTML5/JavaScript to develop custom visual analytic tools. Students preferring a non-programming intensive track may elect to use existing visual analytic software, such as Tableau or Plotly. Designations: Theory, Programming. Prerequisite: CSC 120 or equivalent. {M}

Fall, Spring, Variable

CSC 240 Computer Graphics (4 Credits)

Covers two-dimensional drawings and transformations, three-dimensional graphics, lighting and colors, game design, perspective, curves and surfaces, ray tracing. Employs Postscript, C++, GameMaker, POV-ray, and radiosity. The course accommodates both CS majors, for whom it is programming intensive, and other students with less technical expertise, by having two tracks of assignments. Prerequisite: CSC 120 or equivalent. MTH 111 or equivalent is an additional required prerequisite for majors. Designation: Theory, Programming. {M}

Fall, Spring, Annually

CSC 249 Computer Networks (4 Credits)

This course introduces fundamental concepts in the design and implementation of computer communication networks, their protocols and applications. Topics covered include layered network architecture, physical layer and data link protocols; and transport protocols; routing protocols and applications. Most case studies are drawn from the Internet TCP/IP protocol suite. Designation: Systems. Prerequisites: CSC 120 or equivalent. {M}

Fall

CSC 250 Theory of Computation (4 Credits)

Automata and finite state machines, regular sets and regular languages, push-down automata and context-free languages, linear-bounded automata, computability and Turing machines, nondeterminism and undecidability. Prerequisites: CSC 110 and MTH 153. Enrollment limited to 30. {M}

Fall, Spring

CSC 251 Network Security (4 Credits)

This course covers a wide range of topics in network security, with a focus on both core principles and practical information. Students learn core network protocols, cryptography as information protection technologies, and the attacks and defenses most closely related to the network rather than the endpoints (e.g., laptops, desktops) on a network. Subtopics include: authentication protocols, firewalls, intrusion detection, routing and DNS security, scanning, eavesdropping, DoS attacks, PKI, password, privacy, anonymity, and recent advancements in the field. The course consists of a mixed format of lectures, in-class labs and hands-on sessions. Designation: Systems. Prerequisites: CSC 210 and CSC 249. Enrollment limited to 30.

Spring, Variable

CSC 252 Algorithms (4 Credits)

Covers algorithm design techniques ("divide-and-conquer," dynamic programming, "greedy" algorithms, etc.), analysis techniques (including big-O notation, recurrence relations), useful data structures (including heaps, search trees, adjacency lists), efficient algorithms for a variety of problems and NP-completeness. Designation: Theory. Prerequisites: CSC 210, MTH 111 and MTH 153. Enrollment limited to 30. {M}

Fall, Spring, Alternate Years

CSC 262 Operating Systems (4 Credits)

An introduction to the functions of an operating system and their underlying implementation. Topics include file systems, CPU and memory management, concurrent communicating processes, deadlock, and access and protection issues. Programming projects implement and explore algorithms related to several of these topics. Designations: Programming, Systems. Prerequisite: CSC 231. Enrollment limited to 30. {M}

Fall, Spring, Annually

CSC 266 Introduction to Compiler Design (4 Credits)

In this course, the students will learn the formal definition of programming language syntax and semantics. They will be introduced to the functions of compilers and their design and implementation details. The course will reinforce the students' knowledge of context free grammars and automata and use this knowledge in designing lexical analyzers and translators for high level programming languages. Topics covered include lexical analysis, type checking, context analysis and code generation. Designations: Theory, Programming. Prerequisites: CSC 231 and CSC 250.

Fall, Spring, Variable

CSC 268 Image Processing Fundamentals (4 Credits)

Images fill the media, and most are processed by computer at some point or another. This course will examine a variety of algorithmic image processing techniques, exploring implementation and applications, as well as some of the social impact and ethical issues surrounding their use. Prerequisites: CSC 212 and MTH 111. Enrollment limited to 30. {M}

Fall, Spring, Variable

CSC 270 Digital Circuits and Computer Systems (5 Credits)

This class introduces the operation of logic and sequential circuits. Students explore basic logic gates (AND, OR, NAND, NOR), counters, flip-flops, decoders, microprocessor systems. Students have the opportunity to design and implement digital circuits during a weekly lab. Designation: Systems. Prerequisite: CSC 231. Enrollment limited to 12.

Fall, Spring, Variable

CSC 274 Discrete and Computational Geometry (4 Credits)

Topics include the core of the field: polygons, convex hulls, triangulations and Voronoi diagrams. Beyond this core, curves and surfaces, and computational topology are covered. Throughout, a dual emphasis is maintained on mathematical proofs and efficient algorithms. Students have a choice of concentrating their course work in mathematics or toward computer science. Designations: Theory, Programming. Prerequisite for MTH major credit: MTH 153. MTH 111 recommended. Prerequisite for CSC major credit: CSC 120. {M}

Fall, Spring, Variable

CSC 290 Introduction to Artificial Intelligence (4 Credits)

An introduction to artificial intelligence including an introduction to artificial intelligence programming. Discussions include: game playing and search strategies, machine learning, natural language understanding, neural networks, genetic algorithms, evolutionary programming and philosophical issues. Designations: Theory, Programming. Prerequisite: CSC 120 or equivalent. Prerequisites for CSC Majors: CSC 210 and MTH 111 or equivalent.

Fall, Spring, Variable

CSC 294 Computational Machine Learning (4 Credits)

An introduction to machine learning from a programming perspective. Students will develop an understanding of the basic machine learning concepts (including underfitting/overfitting, measures of model complexity, training/test set splitting and cross validation), but with an explicit focus on machine learning systems design (including evaluating algorithmic complexity and development of programming architecture) and on machine learning at scale. Principles of supervised and unsupervised learning will be demonstrated via an array of machine learning methods including decision trees, k-nearest neighbors, ensemble methods and neural-networks/deep-learning as well as dimension reduction, clustering and recommender systems. Students will implement classic machine learning techniques, including gradient descent. Designations: Theory, Programming. Prerequisites: CSC 210, CSC 250 & (MTH 112 or MTH 211), and knowledge of Python. Enrollment limited to 40. {M}

Fall, Spring, Annually

CSC 325 Seminar: Responsible Computing (4 Credits)

When is disruption good? Who is responsible for ensuring that an innovation has a positive impact? Are these impacts shared equitably? How can bias be eliminated from algorithms, if they exist? What assurances can anyone make about the technology they develop? What are the limitations of professional ethics? This seminar examines the ethical implication (i.e., ethics, justice, political philosophy) of computing and automation. Participants will explore how to design technology responsibly while contributing to progress and growth. Topics include: intellectual property; privacy, security and freedom of information; automation; globalization; access to technology; artificial intelligence; mass society; and emerging issues. Designation: Systems. Prerequisite: CSC 210. Enrollment limited to 12. Juniors and seniors only. Instructor permission required. {S}

Fall, Spring, Variable

CSC 327 Seminar: Internet Censorship (4 Credits)

Internet censorship deals with practices of information control. This seminar covers topics related to 1) the existing blocking mechanisms at different layers of the Internet protocol stacks used by network censors and 2) the broad issue of detecting the type of network interference as indicative of Internet censorship. This course will include topics such as traffic differentiation, surveillance, and blocking of content. Enrollment limited to 12. Juniors and seniors only. Instructor permission required.

Fall, Spring, Variable

CSC 328/ EGR 328 Seminar: Digital Circuits and Sensors (4 Credits)

Offered as CSC 328 and EGR 328. Previously EGR 390dc. Digital circuits are everywhere, from basic thermostat controls and stop light sequencers to smart phones, computers and even Mars Rovers! This course covers the basic building blocks for all electronics. Students investigate basic logic circuits, combinatorial logic and sequential logic with an introduction to the basic digital circuits such as encoders and multiplexers. The second part of the semester focuses on microprocessors, using the Arduino. Students will build a variety of circuits with input (from a computer, or from the environment via sensors) and programmed output (LEDs, sound, data sent to a computer), in order to learn how information from our analog world can be converted into digital data. There will be a lab about every other week, and a final project for students to explore an area of their choosing in more depth. Prerequisites: CSC 110 or CSC 120, and either EGR 220 or CSC 231. Enrollment limited to 12. Junior and senior engineering majors only. {N}

Fall, Spring, Variable

CSC 330 Seminar: Database Systems (4 Credits)

This course covers principles of database systems, including such topics as data independence, storage structures, relational data models, security, and integrity. It will also touch on some non-relational database systems, and alternative consistency mechanisms. As a seminar course, it will mix theory, programming, and research. Designation: Systems. Prerequisites: CSC 210 and MTH 153. Enrollment limited to 12. Juniors and seniors only. Instructor permission required. {M}

Fall, Spring, Variable

CSC 334bd Seminar: Topics in Computational Biology-Biomedical Big Data (4 Credits)

This course explores the intersection of computer science and biomedical research. In the genomic era, biological and clinical research generates vast amounts of omics data, much of which is publicly available. Students examine the scientific literature to learn about ways that researchers are harnessing this data to make new discoveries in biomedical domains. This course also discusses the challenges that biomedical big data presents in terms of storage, access and analysis. Finally, students engage in hands-on, project-based learning where they implement the approaches discussed to mine biological repositories, develop their own algorithms and test their own hypotheses. Prerequisite: CSC 294. A working knowledge of biology strongly recommended. Enrollment limited to 12. Senior computer science majors only. Instructor permission required. {M}{N}

Fall, Spring, Variable

CSC 352 Seminar: Parallel Programming (4 Credits)

The field of high-performance computing (HPC) leverages the largest and most powerful computers on the planet to enable cutting edge scientific breakthroughs that help us understand fundamental research questions. These machines and programs push the limits of speed and scalability and require a practical understanding of the entire computing stack as well as familiarity with novel and emerging hardware platforms. In this course, students will learn and apply both the theoretical and practical aspects of the field. This will include exposure to both foundational texts and ideas along with cutting-edge research, and will culminate in a student-directed group project that leverages both the technologies and techniques learned in this course. By the end of the semester, students will be able to design, execute, and evaluate potential parallelization strategies in a target domain. Prerequisites: CSC 210 and CSC 252. Enrollment limited to 12. Juniors and seniors only. Instructor permission required.

Fall, Spring, Variable

CSC 353pm Seminar: Topics in Robotics-Robotics Perception and Mapping (4 Credits)

Robotic perception is a crucial aspect of robotics. It lets artificial agents, like robots or software automatons, gather information about their environment to make informed decisions. Perception includes sensing of light information (vision), sound information (audition), tactile or limb-position information (touch / proprioception) and several other aspects that can be integrated to give the agent a sufficient idea of its context. In this seminar, we will discuss the basics concepts, the history and future directions of robotic perception. Enrollment limited to 12. Juniors and seniors only. Instructor permission required.

Fall, Spring, Variable

CSC 354 Seminar: Music Information Retrieval (4 Credits)

This course is envisioned to serve as an introduction to the field of Music Information Retrieval (MIR), covering both theoretical and practical elements of the field. This seminar aims to prepare students for research in MIR either in academia or industry. Topics will range from feature extraction and structure tasks to debates about the latest music-based apps and questions about music licensing. The course will embody the liberal arts experience by including technical programming assignments, position papers and discussions about current research papers. Designations: Theory, Programming. Prerequisites: CSC 111 and one additional programming course, SDS 291, SDS 293 or equivalent, and one writing intensive course. Enrollment limited to 12. Juniors and seniors only. Instructor permission required.

Fall, Spring, Variable

CSC 356ni Seminar: Topics in Human/Computer Interaction-Natural User Interfaces (4 Credits)

In the study of human-computer interaction, a natural user interface (NUI) is an interaction paradigm in which the interface is largely invisible to the end user. Contrasted with WIMP ("windows, icons, menus, pointer") interfaces found in traditional computing systems, NUIs rely on seamless, intuitive interaction rather than artificial control devices. While companies such as Apple and Google have rapidly popularized the NUI model, this interaction paradigm brings with it a unique set of design challenges, constraints, and ethical considerations. In this course, we will explore ongoing research in this evolving area and put these techniques into practice in various application areas. Prerequisites: CSC 212, CSC 256 strongly recommended. {M}

Fall, Spring, Variable

CSC 356pa Seminar: Topics in Human/Computer Interaction-Platform Activism (4 Credits)

Networked platforms like social media sites, gig sharing apps, and game consoles have become important sites of study for human-computer interaction. Contemporary research on the subject includes both platform studies, which offer a critical perspective on the power that large companies have to shape the creative labor and communication patterns of their users, and technology design activism, which seeks to amplify grassroots movements for positive social change on those platforms. In this course we will explore these emerging areas of scholarship and put our learnings into practice by using participatory design to create new technological interventions on various media platforms. {M}

Fall, Spring, Variable

CSC 370 Seminar: Computer Vision and Image Processing (4 Credits)

Explores the challenge of computer vision through readings of original papers and implementation of classic algorithms. This seminar considers techniques for extracting useful information from digital images, including both the motivation and the mathematical underpinnings. Topics range from low-level techniques for image enhancement and feature detection to higher-level issues such as stereo vision, image retrieval and segmentation of tracking of objects. Designations: Theory, Programming. Prerequisites: CSC 210 and MTH 153. Enrollment limited to 12. Juniors and seniors only. Instructor permission required. {N}

Fall, Spring, Variable

CSC 372 Seminar: Applied Algorithms (4 Credits)

Covers advanced data structures and algorithms with an emphasis on object-oriented implementation, comparative efficiency analysis and applications. A variety of algorithmic approaches will be discussed (divide-and-conquer, dynamic programming, greedy algorithms, graph traversal). We'll go beyond classical searching and sorting to graphs and networks and other applied problems, as well as a selection of NP-hard ones. Designations: Theory, Programming. Prerequisites: CSC 110, CSC 210, MTH 153 and MTH 111 or equivalent. Enrollment limited to 12. Juniors and seniors only. Instructor permission required. {M}

Fall, Spring, Variable

CSC 400 Special Studies (1-4 Credits)

For majors, by arrangement with a computer science faculty member.

Fall, Spring

CSC 430D Honors Project (4-8 Credits)

Fall, Spring, Annually

Crosslisted Courses

CSC 109/ SDS 109 Communicating with Data (4 Credits)

Offered as SDS 109 and CSC 109. The world is growing increasingly reliant on collecting and analyzing information to help people make decisions. Because of this, the ability to communicate effectively about data is an important component of future job prospects across nearly all disciplines. In this course, students learn the foundations of information visualization and sharpen their skills in communicating using data. Throughout the semester, we explore concepts in decision-making, human perception, color theory and storytelling as they apply to data-driven communication. Whether you’re an aspiring data scientist or you just want to learn new ways of presenting information, this course helps you build a strong foundation in how to talk to people about data. {M}

Fall, Spring, Alternate Years

CSC 205/ MTH 205 Modeling in the Sciences (4 Credits)

Offered as CSC 205 and MTH 205. This course integrates the use of mathematics and computers for modeling various phenomena drawn from the natural and social sciences. Scientific case studies span a wide range of systems at all scales, with special emphasis on the life sciences. Mathematical tools include data analysis, discrete and continuous dynamical systems, and discrete geometry. This is a project-based course and provides elementary training in programming using Mathematica. Designations: Theory, Programming. Prerequisites: MTH 112. CSC 110 recommended. Enrollment limited to 20. {M}

Fall, Spring, Annually

CSC 235/ SDS 235 Visual Analytics (4 Credits)

Offered as CSC 235 and SDS 235. Visual analytics techniques can help people to derive insight from massive, dynamic, ambiguous and often conflicting data. During this course, students learn the foundations of the emerging, multidisciplinary field of visual analytics and apply these techniques toward a focused research problem in a domain of personal interest. Students may elect to take this course as a programming intensive course, prerequisite: CSC 212. In this track, students learn to use R, Python and HTML5/JavaScript to develop custom visual analytic tools. Students preferring a non-programming intensive track may elect to use existing visual analytic software, such as Tableau or Plotly. Designations: Theory, Programming. Prerequisite: CSC 120 or equivalent. {M}

Fall, Spring, Variable

CSC 328/ EGR 328 Seminar: Digital Circuits and Sensors (4 Credits)

Offered as CSC 328 and EGR 328. Previously EGR 390dc. Digital circuits are everywhere, from basic thermostat controls and stop light sequencers to smart phones, computers and even Mars Rovers! This course covers the basic building blocks for all electronics. Students investigate basic logic circuits, combinatorial logic and sequential logic with an introduction to the basic digital circuits such as encoders and multiplexers. The second part of the semester focuses on microprocessors, using the Arduino. Students will build a variety of circuits with input (from a computer, or from the environment via sensors) and programmed output (LEDs, sound, data sent to a computer), in order to learn how information from our analog world can be converted into digital data. There will be a lab about every other week, and a final project for students to explore an area of their choosing in more depth. Prerequisites: CSC 110 or CSC 120, and either EGR 220 or CSC 231. Enrollment limited to 12. Junior and senior engineering majors only. {N}

Fall, Spring, Variable

SDS 192 Introduction to Data Science (4 Credits)

An introduction to data science using Python, R and SQL. Students learn how to scrape, process and clean data from the web; manipulate data in a variety of formats; contextualize variation in data; construct point and interval estimates using resampling techniques; visualize multidimensional data; design accurate, clear and appropriate data graphics; create data maps and perform basic spatial analysis; and query large relational databases. Corequisite: SDS 100 required for students who have not previously completed SDS 201, SDS 220, SDS 290 or SDS 291. {M}

Fall, Spring

Additional Programmatic Information

What is an honors thesis?

An honors thesis is a yearlong investigation undertaken by a student in senior year under the supervision of a faculty member. The research counts as 8 credits—4 in the fall, 4 in the spring. The student writes a thesis by April 15 of her final semester and defends the thesis by giving a public presentation on her work to faculty and students. This presentation is usually scheduled for the last week of the semester. The thesis supervisor grades the 8 thesis credits. The department faculty vote on the level of honors to be awarded at graduation.

The Computer Science Department maintains a copy of all theses written since the formation of the department. These are bound in red and can be found in a bookcase in the faculty offices. A copy of each thesis is also filed in the Science Library. Check out a list of past theses.

Why do an honors thesis?

If you are eligible (see below), it is an option that should be considered seriously. It is an intense but rewarding experience. Few students regret it, and it is often the highlight of their undergraduate careers. It is not uncommon for thesis work to lead to a published paper, and in any case it gives the student a leg up on graduate school applications.

Honors Director

Alicia Grubb is the current honors director and should be contacted for questions regarding working on an honors thesis.

Am I eligible?

The computer science admission criteria are as follows:

  • At least a 3.3 (B+) grade point average (GPA) through the junior year in all courses in the major.
  • At least a 3.0 (B) GPA through the junior year in all courses outside the major.
  • Exceptions to the above GPA criteria granted by majority vote of the CS faculty in response to a written petition by the student.
  • Approval by the department [which comes after you apply]

How do I apply?

Detailed instructions are available from the guidelines found on the class deans website (filed alphabetically under "Apply to Enter the Departmental Honors Program" and so easy to overlook). But here is the summary.

The formal application is due by mid-September of your senior year; it can be started and/or submitted in the late spring of your junior year. The formal application is not complicated. The most crucial aspect is securing a supervising faculty member and settling on a topic. The latter need only be worked out sufficiently to write up a one-page Abstract of what you hope to accomplish in the thesis. But it is important to emphasis that you do not need to have a topic in mind before starting the process, as explained below.

Concerning securing a thesis supervisor, there are essentially two models:

  • Model 1 is that the student comes up with a topic, and convinces a faculty member to supervise it. This is more rare than:
  • Model 2, in which the student goes to the faculty member, and says (effectively), can you suggest a topic? And then the student gathers the topics suggested by all the willing faculty, and decides what to pursue.

Several faculty in computer science prefer Model 2, for two reasons: (1) they can most knowledgeably supervise a thesis in an area with which they are thoroughly immersed, and (2) because faculty enjoy advancing their own research. Typically faculty will meet weekly with their thesis student, and more intensively at crucial junctures of the research and writing.

We encourage students considering a thesis to contact all the faculty with whom they would be comfortable, and ask each if they have ideas for theses topics, perhaps under some constraints (e.g., avoiding programming, including programming, something related to artificial intelligence, etc.) In general faculty consider it a gift to be asked to supervise a thesis for a good student (and all thesis students are by definition good!), so do not feel that you are asking for a favor. It is best, although not essential, to initiate this topic investigation prior to the Fall of your senior year, so that this process does not have to be compressed into the first two weeks of the semester.

Please consult the director of honors or the departmental website for specific requirements and application procedures.

Five computer science courses have no prerequisites. These are 102 How The Internet Works, 103 How Computers Work, 106 Introduction to Computing and the Arts, 111 Introduction to Computer Science Through Programming and FYS 164 Issues in Artificial Intelligence. Students who contemplate a major in computer science should consult with a major adviser early in their college careers.

With Study Abroad

SEQUENCE 1

Example course sequence #1 for major in Computer Science with study abroad in a foreign language (entering with no prior experience in CSC, one semester away)

 

YEAR FALL SPRING

1

 

CSC 110

MTH 111 or LOG 100

Foreign language

Writing Intensive [ENG or FYS]

CSC 120

MTH 153

Foreign language

Elective

2

 

CSC 210

Elective

Elective

Elective

CSC 231

CSC intermediate

Elective

Elective

3

 

CSC 250

CSC intermediate

Elective

Elective

CSC intermediate (study away)

Elective (study away)

Elective (study away)

Elective (study away)

4

 

CSC intermediate

Elective

Elective

Elective

CSC 300-level

Elective

Elective

Elective

CSC Intermediate indicates one of the three 200-level courses satisfying the Theory / Systems / Programming distribution requirements for the major.

Elective indicates a course that is entirely free from constraints – could be within computer science, could be outside.

Courses frequently taken abroad by Computer Science majors include CSC intermediate courses, more advanced mathematics courses, additional programming courses, and courses in the humanities and social sciences

This course sequence assumes no prior experience in computer science and a single semester away. Students with prior exposure to computer science (courses in high school, summer camp, etc.) should skip CSC 110 and begin their course sequence with CSC 120. Alternate pathways through the major appear on subsequent pages. In these examples, we have attempted to maximize flexibility in course selection while abroad; however, students studying abroad at programs such as the AIT Budapest program in Computer Science may elect to satisfy additional major requirements while abroad (e.g. CSC intermediate courses).

SEQUENCE 2

Example course sequence #2 for major in Computer Science with study abroad in a foreign language (entering with prior experience in CSC, one semester abroad with no major requirements while away)

 

YEAR FALL SPRING

1

 

CSC 120

MTH 111 or LOG 100

Foreign language

Writing Intensive [ENG or FYS]

CSC 210

Foreign language

Elective

Elective

2

 

CSC 231

MTH 153

Elective

Elective

CSC 250

CSC intermediate

Elective

Elective

3

 

Elective (study away)

Elective (study away)

Elective (study away)

Elective (study away)

CSC intermediate

CSC intermediate

Elective

Elective

4

 

CSC intermediate

CSC intermediate

Elective

Elective

CSC 300-level

Elective

Elective

Elective

SEQUENCE 3

Example course sequence #3 for major in Computer Science with study abroad in a foreign language (entering with no prior experience in CSC, full abroad with light major requirements while away)

 

YEAR FALL SPRING

1

 

CSC 110

MTH 111 or LOG 100

Foreign language

Writing Intensive [ENG or FYS]

CSC 120

MTH 153

Foreign language

Elective

2

 

CSC 210

Elective

Elective

Elective

CSC 231

CSC 250

Elective

Elective

3

 

CSC intermediate (study away)

Elective (study away)

Elective (study away)

Elective (study away)

CSC intermediate (study away)

Elective (study away)

Elective (study away)

Elective (study away)

4

 

CSC intermediate

CSC intermediate

Elective

Elective

CSC 300-level

Elective

Elective

Elective

Without Study Abroad

Example course sequence for major in Computer Science entering with no prior experience in CSC and starting in the second semester sophomore year.  Students can incorporate junior year study abroad by taking courses equivalent to those listed while away from campus.

 

YEAR FALL SPRING

1

 

Writing Intensive [ENG or FYS]

Elective

Elective

Elective

Elective

Elective

Elective

Elective

2

 

Elective

Elective

Elective

Elective

CSC 110

MTH 111 or LOG 100

Elective

Elective

3

 

CSC 120

MTH 153

Elective

Elective

CSC 210

CSC 250

CSC intermediate

Elective

4

 

CSC 231

CSC intermediate

CSC intermediate

Elective

CSC 300-level

CSC intermediate

Elective

Elective

Example course sequence for major in Computer Science intending to continue studies in graduate school, entering with no prior experience in CSC, with thesis in the senior year.  Students can incorporate junior year study abroad by taking courses equivalent to those listed while away from campus.

 

YEAR FALL SPRING

1

 

CSC 110

MTH 111 or LOG 100

Writing Intensive [ENG or FYS]

Elective

CSC 120

MTH 153

Elective

Elective

2

 

CSC 210

SDS 220

Elective

Elective

CSC 231

CSC 250

Elective

Elective

3

 

CSC 220 or 223 (programming)

CSC 252 or 253 (theory)

Elective

Elective

CSC 230 or 262 (systems)

CSC 294 (ML)

Elective

Elective

4

 

CSC senior thesis

CSC 300-level

Elective

Elective

CSC senior thesis

CSC intermediate/advanced

Elective

Elective

Students should expect some variation from the timing shown above, depending on when courses are offered. The course sequence above includes all of the strongly recommended courses below:

  • CSC 252: Algorithms or CSC 253: Applied Algorithms (Theory)
  • CSC 220: Advanced Programming or CSC 223: Software Engineering (Programming)
  • CSC 230: Databases or CSC 262: Operating Systems (Systems)
  • CSC 294: Computational Machine Learning (additional elective)
  • SDS 220: Introduction to Probability and Statistics

Faculty

R. Jordan Crouser

Computer Science

Associate Professor of Computer Science; Chair, Department of Computer Science

Jordan Crouser

Katherine M. Kinnaird

Computer Science

Clare Boothe Luce Assistant Professor of Computer Science and of Statistical & Data Sciences

Katherine Kinnaird

Halie Rando

Computer Science

Assistant Professor of Computer Science

Ileana Streinu

Computer Science

Charles N. Clark Professor of Computer Science

Ileana Streinu

Emeriti Faculty

Merrie Bergman
Associate Professor Emerita of Computer Science

Judy Franklin
Associate Professor Emerita of Computer Science

Joe O'Rourke
Spencer T. and Ann W. Olin Emeritus Professor of Computer Science

Dominique Thiébaut
Professor Emeritus of Computer Science

Recent Visiting Faculty

Mihaela Malita (Amherst College)
Sahar Al Seesi (Southern Connecticut State University)
John Foley (Middlebury College)
Razieh Fathi ( Whitman College)

Resources & Opportunities

Many students complete independent research projects in computer science under the supervision of a faculty member. Often these are undertaken over the summer, or they may be completed during the academic year as a special studies or honors thesis. Funding for these projects comes from a variety of sources. If you are a student interested in working on a research project, it is best to speak as soon as possible to the faculty member with whom you wish to work. Some research labs have information pages linked below; for others please contact the faculty member directly.

Since 2008 students have documented their research projects on the departmental Wiki pages.

 

What is SURF?

Summer Undergraduate Research Fellowships (SURF) is the centerpiece of Smith’s Summer Research Fellowship Program. The application for SURF is available on the Clark Science Center website.

Who is hiring?

Alicia M. Grubb

Each summer I accept 5-8 students interested in software development and/or empirical research (i.e., software engineering).

We usually have at least one development project ongoing using our tool, BloomingLeaf, and this summer is no exception. We seek the help of enthusiastic students with strong programming skills and an exposure to web development (javaScript), who have excellent communication skills (written/verbal English) and an ability to work independently and collaboratively. Our online codebase will help you create a portfolio for future applications to employers and graduate schools. In prior development projects, we worked on refactoring our code base to enable new model management features and restructured the code base to take advantage of underlying libraries. Our next step is to continue to implement new visualizations and model management features.

For those more interested in empirical software engineering research, we are currently working on evaluating the usability of some of the algorithms we’ve developed over the past two years. Past SURF research projects include studying goal model construction and evaluating a framework for uncertainty.

Additionally, we are investigating how to model artifacts in a GitHub repository. These are evolving projects and we welcome the insights of enthusiastic students interested in research, who have excellent communication skills (written/verbal English) and an ability to work independently and collaboratively.

Students with an interest in research and/or an interest in quantitative (e.g., spreadsheets, r, statistics) or qualitative (e.g., open coding, ethnography) data analysis should state this on their application.

See more details about the Grubb Lab and other student projects on the Grubb Lab website.

R. Jordan Crouser

  • The Automated Scribal Identification Project uses ancient manuscripts written in the Aramaic dialect of Syriac as a case study for exploring how recent advances in the digital analysis of handwriting can help scholars better ascertain a manuscript's provenance, identify manuscripts written by the same scribe, and trace out the chronological development of ancient scripts. Although the initial project goal is to substantially advance our understanding of Syriac Christianity, its greatest effect would be in providing a platform and a model for similar ventures in other languages such as Arabic, Greek, Hebrew, Latin, and Sanskrit.
  • Individual Differences Project: Researchers have conducted many studies that observe a data analyst performing a particular task, and have used those observations to define an analytic workflow. Individual analysts have distinctive workflows: they may combine canonical actions in unique patterns, focus on particular areas over others, and so forth. But, how do we predict which workflows an analyst is likely to favor in advance? In this project, we will design and conduct a series of experiments aimed at understanding the invariant features of the user that can be used to identify which features of an analytic tool we can modulate to better support individual analyst. By mapping features of the user on to features of the tool, we aim to provide a better, more streamlined experience for the user, thereby amplifying human analytic capabilities in areas where purely computational analysis fails.
  • Computing for Mental Health Project: A collaboration with clinicians at the Justice Resource Institute on exploring the role of computation and interactive systems in community-based mental health initiatives.

Katherine M. Kinaird

I am looking for students interested in building a new Python package and/or interested in building an interactive visualization platform for a representation of musical scores. Additionally, I may have funding for a student interested at the intersection of data science education research and text mining.

  • Building a new python package that reimagines existing MATLAB code for building aligned hierarchies, a representation for musical scores. This builds on work published at ISMIR 2016, but requires no background knowledge in music information retrieval (MIR). Students interested in this project should have experience coding in python (ie. CS 111), and they should be excited by the prospect of building code that will be publicly available.
  • The Interactive Aligned Hierarchies also builds on the aligned hierarchies, but links the static output to the score. This will allow for interactive exploration of both the score and the representation simultaneously. Students interested in this project should have experience designing large-scale projects and are excited about connecting visualizations with sound files.
  • (Possible funding) As part of a TRIPODS+X grant, there is summer work to explore investigating students’ data science misconceptions before and after their first formal course in data science. This project will rely on aspects of text mining in addition to data management.

Ileana Streinu

Recent projects:

  • Geometry of viral capsides
  • Prototyping auxetic materials
  • Educational materials for a new robotics course

 

Nick Howe

Handwriting recognition & historical manuscripts. Find more information on Nick Howe’s research page.

An Inviting Community

The Department of Computer Science offers many opportunities for students to get involved in clubs, activities and events both on and off campus. 

Contact Department of Computer Science

Ford Hall 255
Smith College
Northampton, MA

Phone: 413-585-3804 Email: eweber51@smith.edu

Administrative Assistant: Eva Weber
Department Chair: Jordan Crouser