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
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
- Two introductory courses
- CSC 110 (S/U only)
- CSC 120
- Three core courses
- CSC 210
- CSC 231
- CSC 250
- Two mathematics courses
- MTH 111 or a math course with a prerequisite of MTH 111 or PHI 102
- MTH 153 or a math course with a prerequisite of MTH 153
- Four intermediate courses
- One CSC or SDS theory course: CSC 205/ MTH 205, CSC 235/ SDS 235, CSC 240, CSC 252, CSC 256 CSC 266, CSC 274, CSC 290, CSC 294, a topic of CSC 334, CSC 353pm, CSC 356ni, CSC 370, CSC 372 or a topic of CSC 390.
- One CSC or SDS programming course: CSC 205/ MTH 205, CSC 220, CSC 223, CSC 235/ SDS 235, CSC 240, CSC 249, CSC 251, CSC 262, CSC 266, CSC 274, CSC 290, CSC 294, a topic of CSC 334, CSC 352, CSC 356ni, CSC 370 or CSC 372
- One CSC systems course: CSC 223, CSC 230, CSC 249, CSC 251, CSC 256, CSC 262, CSC 270, CSC 327, CSC 352 or CSC 353pm
- One CSC course at the 200 level or above.
- 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
- CSC 120
- CSC 210
- One additional CSC course at the 100 level or above (e.g., CSC 110)
- 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
- Three computer science courses
- CSC 120
- CSC 210
- CSC 240
- Three art courses
- ARH 110 or other art history course
- ARS 162
- 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
- Three computer science courses
- CSC 120
- CSC 210
- CSC 220 or CSC 250
- Three music courses
- MUS 110 or MUS 210
- MUS 233
- MUS 345
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. This course explores concepts in decision-making, human perception, color theory and storytelling as they apply to data-driven communication. This course helps students build a strong foundation in how to talk to people about data, for both aspiring data scientists and students who want to learn new ways of presenting information. Enrollment limited to 40. {M}
Fall, Spring
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. S/U only. May not be taken concurrently with CSC 120. Restrictions: Not open to students who have taken CSC 111. 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 209 Web Programming (4 Credits)
This course covers the fundamentals of programming for the web. Students explore client-side development using HTML, CSS, JavaScript and jQuery to craft interactive and visually appealing web experiences. Next, the course transitions to server-side programming, using PHP and AJAX to build robust and responsive web applications. The course also covers foundational topics in software design and project development through both hands-on projects and guided instruction. Prerequisite: CSC 120. Enrollment limited to 30. (E) {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 gain more experience with design and development. Designation: Programming. Prerequisite: CSC 210 or equivalent. Enrollment limited to 30. {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. Designations: Programming, 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 investigates the design and use of database systems from the traditional to the present day. Designation: Systems. Prerequisites: CSC 210 or equivalent. 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 233 Introduction to Electronics and Arduino (4 Credits)
Beginning with the basics of circuitry and electronic diagrams, the class studies several components commonly used in electronics, combining them in different ways through labs designed for hands-on learning. After the class has covered the basics, students design and build a creative hardware project of their own creation using an Arduino microcontroller. Prerequisite: CSC 231. Enrollment limited to 30. (E) {M}
Fall, Spring, Variable
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 who elect to take this course as a programming intensive course should have previously taken 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 Enrollment limited to 30. {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 256 Human-Computer Interaction (4 Credits)
Principles and practices of human-computer interaction, with a focus on human-centered design. This course provides a foundation in the methods and tools for conducting user research, gathering requirements, designing prototypes and evaluating interactive interfaces. Discussions include human capabilities, ethnographic methods, universal design, interface technology and usability testing. Students work in teams on a substantive interaction design project. Designations: Systems, Theory. Prerequisites: CSC 210. Enrollment limited to 30. {M}
Fall, Spring, Variable
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, students learn the formal definition of programming language syntax and semantics. They are introduced to the functions of compilers and their design and implementation details. The course reinforces the students' knowledge of context-free grammars and automata and uses 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 examines 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 210 and MTH 111, or equivalent. Enrollment limited to 30.
Fall, Spring, Variable
CSC 293/ SDS 293 Machine Learning (4 Credits)
Offered as CSC 293 and SDS 293. The field of statistical learning encompasses a variety of computational tools for modeling and understanding complex data. In this introductory course, we will explore many of the most popular of these tools, such as sparse regression, classification trees, boosting and support vector machines. In addition to unpacking the mathematics underlying the computational methods, students will also gain hands-on experience in applying these techniques to real datasets using R. Prerequisite: SDS 201, SDS 220 or CSC 210, or equivalent intro statistics course. Enrollment limited to 60. {M}
Fall, Spring, Annually
CSC 294 Computational Machine Learning (4 Credits)
An introduction to machine learning from a programming perspective. Students 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 are 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 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 explore how to design technology responsibly while contributing to progress and growth. Discussions include: intellectual property; privacy, security and freedom of information; automation; globalization; access to technology; artificial intelligence; mass society; and emerging issues. Prerequisite: CSC 210. Restrictions: Juniors and seniors only. Enrollment limited to 12. 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. Discussions include traffic differentiation, surveillance and blocking of content. Restrictions: Juniors and seniors only. Enrollment limited to 12. 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 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. Prerequisites: one of CSC 110, CSC 120, CSC 205/MTH 205, CSC 210 or CSC 220; and either EGR 220 or CSC 231. Restrictions: Junior and seniors only; Engineering and computer science majors only. Enrollment limited to 12. {N}
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. Restrictions: Seniors only; computer science majors only. Enrollment limited to 12. 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 learn and apply both the theoretical and practical aspects of the field. This includes exposure to both foundational texts and ideas along with cutting-edge research, and culminates in a student-directed group project that leverages both the technologies and techniques learned in this course. By the end of the semester, students are able to design, execute and evaluate potential parallelization strategies in a target domain. Prerequisites: CSC 210 and CSC 252. Restrictions: Juniors and seniors only. Enrollment limited to 12. 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. The class discusses the basics concepts, and the history and future directions of robotic perception. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required.
Fall, Spring, Variable
CSC 356ac Seminar: Topics in Human-Computer Interaction: Accessible Computer (4 Credits)
This course explores how computing can enhance accessibility and how disability studies can guide effective solutions. Students learn to assess and improve the accessibility of documents, websites, apps, and advanced technologies like AR/VR and AI/ML. The course covers practical skills, including evaluating accessibility and implementing inclusive design, and addresses future-oriented topics such as intersectional issues, accessible healthcare, and disaster response. The course culminates in a major project focusing on access technology, while also covering disability justice and advocacy. Ideal for those creating interactive technologies and committed to fostering inclusivity. CSC 256 strongly recommended. Prerequisite: CSC 212. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. (E)
Fall, 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. This course explores ongoing research in this evolving area and puts these techniques into practice in various application areas. Prerequisites: CSC 210. CSC 256 strongly recommended. Restrictions: Juniors and seniors only. Enrollment limited to 15. Instructor permission required. {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. This course explores these emerging areas of scholarship and puts our learnings into practice by using participatory design to create new technological interventions on various media platforms. Restrictions: Juniors and seniors only. Enrollment limited to 15. Instructor permission required. {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 course considers techniques for extracting useful information from digital images, including both the motivation and the mathematical underpinnings. Discussions 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 111 or equivalent. Restrictions: Juniors and seniors only. Enrollment limited to 12. 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 are discussed (divide-and-conquer, dynamic programming, greedy algorithms, graph traversal). The course goes 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. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. {M}
Fall, Spring, Variable
CSC 390lu Seminar: Topics in Artificial Intelligence-Natural Language Understanding (4 Credits)
This special topics course provides an introduction to programming computer systems that can understand and interact with humans through natural languages (such as English). The aim of this course is to go beyond “shallow” methods of parsing and computing word distributions and towards artificial intelligence software systems that think, understand, and communicate like real people. Prerequisites: CSC 231 and 250. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. {M}
Spring, Variable
CSC 400 Special Studies (1-4 Credits)
For majors. Instructor permission required.
Fall, Spring
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. This course explores concepts in decision-making, human perception, color theory and storytelling as they apply to data-driven communication. This course helps students build a strong foundation in how to talk to people about data, for both aspiring data scientists and students who want to learn new ways of presenting information. Enrollment limited to 40. {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 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 who elect to take this course as a programming intensive course should have previously taken 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 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. Prerequisites: one of CSC 110, CSC 120, CSC 205/MTH 205, CSC 210 or CSC 220; and either EGR 220 or CSC 231. Restrictions: Junior and seniors only; Engineering and computer science majors only. Enrollment limited to 12. {N}
Fall, Spring, Variable
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
Resources & Opportunities
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: fdooleyfairchild@169577.com
Administrative Assistant: Ferron Dooley Fairchild
Department Chair: Jordan Crouser