Computer Science Courses

General Course Listings

Sub CRSE Title
BIO 209 Bioinformatics Programming (= CSC 209)
Prerequisites & Notes

Not open to students with credit for CSC 120 (= DIG 120), CSC 121, or CSC 200 (=PHY 200).  

Instructor
Staff

(Cross-listed as CSC 209)  An interdisciplinary introduction to computer science and structured programming using the Python programming language in the context of biological datasets and applications, including algorithms for analyzing genomic data.

Satisfies the Mathematical and Quantitative Thought distribution requirement.

CSC 108 Explorations in Computer Science
Prerequisites & Notes

This course is not open to students with prior credit for (or concurrently enrolled in) any computer science course (including PHYS 200 and BIO 209) or any one of MAT 220, MAT 230 or MAT 255. No previous experience with computing is needed or assumed.

Instructor
Ramanujan

An introduction to the study of computational and algorithmic processes and the insight such study provides into age-old questions about human creativity and intelligence, the nature of social networks, evolution and self-replicating systems, mind-body duality, language, and economic systems.  Students will learn to read and understand short computer programs in a beginner-friendly language. 

Students entering 2012 and after: satisfies Mathematical and Quantitative Thought distribution requirement.
Students entering before 2012: satisfies Mathematics distribution requirement.

CSC 120 Programming in Humanities (= DIG 120)
Prerequisites & Notes

DIG 120 - Programming in the Humanities (= CSC 120)


Instructor
Kabala

Computational methods have significantly broadened and deepened the possibilities of inquiry in the Humanities. Programming skills have allowed textual scholars, in particular, to take advantage of enormous digitized corpora of historical documents, newspapers, novels, books, and social network data like Twitter feeds to pose new questions to the written word. We can now trace the changing semantics of words and phrases across millions of documents and hundreds of years, visualize centuries-old plot structures in new ways through sentiment analysis and character networks, and solve long-standing riddles of authorship attribution-among many other exciting feats. This course offers an introduction to computer science through applications in the Humanities. Students will learn to program in the Wolfram Language, aka Mathematica. The Wolfram Language is especially well suited for humanists: its rich documentation and natural language processing capabilities ensure a gentle introduction for first-time programmers, its symbolic computation structure allows us to work with texts written in any language and any alphabet, while its Notebook environment provides an interactive medium for publishing and sharing our results with peers. Mathematica also provides a great springboard for further work in computer science, physical computing, and Digital Studies more broadly.

Satisfies a minor requirement in Computer Science.

Satisfies the Mathematical and Quantitative Thought distribution requirement. 

Prerequisites & Notes
Not open to students with credit for CSC 121, CSC 200 (= PHY 200), or CSC 209 (= BIO 209).

(Spring)

 

CSC 121 Programming and Problem Solving
Prerequisites & Notes

Not open to students with credit for CSC 120 (= DIG 120), CSC 200 (=PHY 200), or CSC 209 (= BIO 209).

Instructor
Staff

An introduction to computer science and structured programming, including algorithmic thinking, using control structures, essential data structures, creating functions, recursion, and object-oriented programming.

Satisfies the Mathematical and Quantitative Thought distribution requirement.
 

CSC 200 Computational Physics (= PHY 200)
Prerequisites & Notes

Physics 120 or 130 at Davidson, or permission of the instructor.  (Spring)

Instructor
Kuchera

(Cross-listed as Physics 200.) PHY/CSC 200 is an introduction to computer programming and computational physics using Python. No prior programming experience is necessary. This course will provide students with the skills required to write code to solve physics problems in areas including quantum physics, electromagnetism, and mechanics. Structured programming methods will be covered as well as algorithms for numerical integration, solving differential equations, and more.

CSC 209 Bioinformatics Programming (= BIO 209)
Prerequisites & Notes

Does not carry Mathematics major credit. Not open to students with credit for CSC 120 (=DIG 120), CSC 121 or CSC 200 (= PHY 200).  (Fall) 

Instructor
Staff

(Cross-listed as Biology 209.) An interdisciplinary introduction to computer science and structured programming using the Python programming language in the context of biological datasets and applications, including algorithms for analyzing genomic data.  

Satisfies the Mathematical and Quantitative Thought distribution requirement.

CSC 220 Discrete Structures (= MAT 220)
Prerequisites & Notes

MAT 113 or equivalent, and the ability to program in a high-level language such as Python, C++, or Java at the level expected in CSC 121 or an equivalent course.

An introduction to proof techniques, with a focus on topics relevant to computer science. Topics include: fundamental proof techniques, boolean logic, sequences and summations, set theory, algorithm analysis, recursion, mathematical induction, recurrence relations, an introduction to number theory, combinatorics, discrete probability, and graph theory. The class will be adequate preparation for students choosing to continue on the pure math track (Real Analysis, Abstract Algebra, etc.) or the theoretical computer science track (Analysis of Algorithms, Theory of Computation, etc.).

 

 

CSC 221 Data Structures
Prerequisites & Notes

Computer Science 121, 200, 209, or permission of instructor.

Instructor
Staff

A study of abstract data types, including lists, stacks, queues, and search tables, and their supporting data structures, including arrays, linked lists, binary search trees, and hash tables.  Implications of the choice of data structure on the efficiency of the implementation of an algorithm.  Efficient methods of sorting and searching.

Students entering 2012 and after: satisfies the Mathematical and Quantitative Thought distribution requirement.

CSC 250 Computer Organization
Prerequisites & Notes

Requires the ability to program in a high-level language such as Python, C++, Java etc., at the level expected in CSC 121 or an equivalent course.

Does not carry Mathematics major credit. (Spring)

Instructor
Mendes, Ramanujan

An introduction to how digital computers are built and the process by which computer programs expressed in a high-level language are translated into signals to be routed on a digital circuit board. Topics include data representation and manipulation, digital logic building blocks (logic gates, flip-flops), computer memory, assembly and machine code, hardware components and their organization, and the C programming language. 

CSC 312 Software Design
Prerequisites & Notes

Prerequisite: CSC 221

Explores the key software design concepts involved in practical software projects.  Topics include software development processes, design patterns, software architecture, software testing, software performance, security, and safety.


Satisfies a requirement in the Computer Science major and minor.

CSC 315 Numerical Analysis (= MAT 315)
Prerequisites & Notes

MAT 150 and MAT 235, and proficiency in some programming language. (Spring)

Instructor
Staff
(Cross-listed as Mathematics 315.) Survey of methods to approximate numerical solutions of problems in root-finding, differentiation, integration, curve-fitting, differential equations, and systems of equations. Derivations, limitations, and efficiency of different algorithms are considered.

CSC 321 Analysis of Algorithms
Prerequisites & Notes

Computer Science 221, and prerequisite or co-requisite Mathematics 220, or permission of instructor.  (Fall)

Instructor
Staff

Algorithm design strategies, including greedy, divide-and-conquer, and dynamic programming methods.  Advanced data structures, including balanced search trees, graphs, heaps, and priority queues.  Advanced methods of searching and sorting.  Computational complexity and analysis of algorithms.  NP-complete problems.

CSC 322 Programming Languages
Prerequisites & Notes

Computer Science 221.  (Offered Fall of odd-numbered years.)

Instructor
Staff
 
Principles of programming languages, including lexical and syntactic analysis, semantics, types, functions and parameters, and memory management.  Programming paradigms, drawn from imperative, object-oriented, functional, and logical programming languages.  

CSC 324 Theory of Computation
Prerequisites & Notes

One of Mathematics 220, 230, or 255. (Offered Spring of odd-numbered years.)

Instructor
Staff

Mathematical models of computation, and the fundamental capabilities and limitations of computers.  Topics include regular languages, finite automata, context-free languages, grammars, Turing machines, the Chomsky hierarchy, the halting problem, algorithms, decidable and undecidable problems, algorithmic reductions, complexity theory, the classes P, NP, and PSPACE, and NP-complete problems.

CSC 353 Database Systems
Prerequisites & Notes

CSC 221 (Data Structures)

Instructor
Mendes

Sciences and societies are increasingly reliant on storing, querying, and processing data. Major scientific endeavors and applications rely on our ability to manage - and interpret - large data sets. In addition, our ability to generate data increases quickly as computational devices become less expensive and more ubiquitous. In this upper-level Computer Science course, we study key algorithmic and structural strategies used in database management systems, including indexing techniques, concurrency control protocols, and parallelism.

 

Satisfies a requirement in the Computer Science major and minor.

CSC 357 Concurrent and Parallel Computing
Prerequisites & Notes

Prerequisite: CSC 221

Instructor
Mendes

Core concepts, problems, and techniques related to the construction and maintenance of highly-scalable concurrent and parallel systems, including how computer and network architecture influence performance. Both theoretical and practical perspectives are considered as tools to analyze modern systems.

Satisfies a minor requirement in Computer Science

 

CSC 361 Computer Graphics
Prerequisites & Notes

CSC 221 and MAT 150, or permission of instructor. Offered Fall of even numbered years.

Instructor
Peck

Overview of 2D and 3D computer graphics techniques: line drawing routines, antialiasing, 3D object representation, culling, z-buffers, a-buffers, illumination and shading models, ray tracing, color models, the graphics pipeline, levels of detail, and image processing. Emphasis on understanding and implementing computer graphics algorithms and creating computer generated images using OpenGL and C++.

CSC 362 Data Visualization
Prerequisites & Notes

Prerequisite: CSC 221. Offered fall of odd-numbered years.

Does not carry Mathematics major credit. 

Instructor
Peck

An introduction to the theory and application of graphical representations of data. Topics include: the human visual system, low-level vision processing, attentive vs. preattentive processes, color vision and color map design, interaction, space perception, and visualization design.

CSC 370 Artificial Intelligence
Prerequisites & Notes

Computer Science 221, and one of Mathematics 220, 230, or 255, or permission of the instructor. Offered Spring of odd-numbered years.

Instructor
Ramanujan

An introduction to the theory, principles, and techniques of Artificial Intelligence. Topics include search, game playing, constraint satisfaction problems, planning, reinforcement learning, knowledge representation, logic, and natural language processing.

CSC 371 Machine Learning
Prerequisites & Notes

Prerequisites: Proficiency in a high-level programming language and data structures, at the level expected in CSC 221, and MAT/CSC 220 (or permission of the instructor). 

Offered Spring of even-numbered years.

A survey of the field of machine learning, with an introduction to the fundamental algorithms in the field and the theory underpinning them. Topics include techniques for regression, classification, ensemble methods, and dimensionality reduction.

CSC 381 Applications Seminar
Prerequisites & Notes

Permission of the instructor. 

Instructor
Staff

Special topics seminar in Applications.

 

CSC 382 Systems Seminar
Prerequisites & Notes

Permission of instructor required.

Instructor
Staff

Special topics seminar in Systems.

CSC 383 Theory Seminar
Prerequisites & Notes

Permission of the instructor required.

Instructor
Staff

Special topics seminar in Theory.

CSC 384 Seminar
Prerequisites & Notes

Permission of instructor required.  Eligible for minor credit in computer science or major credit in mathematics by departmental approval.

Instructor
Staff

Study of topics of interest in Computer Science.

CSC 395 Independent Study
Prerequisites & Notes

Open to qualified students with the permission of the department chair. 

Instructor
Staff

Independent study under the direction and supervision of a faculty member who reviews and approves the topic(s) of the independent study and who determines the basis for the evaluation of students' work.

Eligible for minor credit in computer science or major credit in mathematics by departmental approval.

CSC 396 Independent Study
Prerequisites & Notes

Open to qualified students with the permission of the department chair. 

Instructor
Staff

Independent study under the direction and supervision of a faculty member who reviews and approves the topic(s) of the independent study and who determines the basis for the evaluation of students' work.

Eligible for minor credit in computer science or major credit in mathematics by departmental approval.

CSC 397 Independent Study in Advanced Software Development in Science (= PHY 397)
Prerequisites & Notes

Instructor
Staff

(Cross-listed as Physics 397.) Independent study using computers to model dynamical systems in the natural sciences under the direction and supervision of the instructor who approves the specific topic of study.  Emphasis is on the use of object-oriented programming and web-based protocols to investigate both dynamical systems and the representation of those systems as data structures and algorithms.

CSC 481 Seminar
Prerequisites & Notes

Permission of the instructor. 

Instructor
Staff

Study of topics of interest in Computer Science.

Eligible for minor credit in computer science or major credit in mathematics by departmental approval.

CSC 495 Independent Study
Prerequisites & Notes

Open to qualified students with the permission of the department chair. 

Instructor
Staff

Independent study under the direction and supervision of a faculty member who reviews and approves the topic(s) of the independent study and who determines the basis for the evaluation of students' work.

Eligible for minor credit in computer science or major credit in mathematics by departmental approval.

DIG 120 Programming in the Humanities (= CSC 120)
Prerequisites & Notes

Not open to students with credit for CSC 121, CSC 200 (= PHY 200), or CSC 209 (= BIO 209).

(Spring)

 

Instructor
Kabala

Computational methods have significantly broadened and deepened the possibilities of inquiry in the Humanities. Programming skills have allowed textual scholars, in particular, to take advantage of enormous digitized corpora of historical documents, newspapers, novels, books, and social network data like Twitter feeds to pose new questions to the written word. We can now trace the changing semantics of words and phrases across millions of documents and hundreds of years, visualize centuries-old plot structures in new ways through sentiment analysis and character networks, and solve long-standing riddles of authorship attribution-among many other exciting feats. This course offers an introduction to computer science through applications in the Humanities. Students will learn to program in the Wolfram Language, aka Mathematica. The Wolfram Language is especially well suited for humanists: its rich documentation and natural language processing capabilities ensure a gentle introduction for first-time programmers, its symbolic computation structure allows us to work with texts written in any language and any alphabet, while its Notebook environment provides an interactive medium for publishing and sharing our results with peers. Mathematica also provides a great springboard for further work in computer science, physical computing, and Digital Studies more broadly.

Satisfies a minor requirement in Computer Science.

Satisfies the Mathematical and Quantitative Thought distribution requirement. 

MAT 220 Discrete Structures (= CSC 220)
Prerequisites & Notes

MAT 113 or equivalent, and the ability to program in a high-level language such as Python, C++, or Java at the level expected in CSC 121 or an equivalent course.

An introduction to proof techniques, with a focus on topics relevant to computer science.  Topics include: fundamental proof techniques, boolean logic, sequences and summations, set theory, algorithm analysis, recursion, mathematical induction, recurrence relations, an introduction to number theory, combinatorics, discrete probability, and graph theory.  The class will be adequate preparation for students choosing to continue on the pure math track (Real Analysis, Abstract Algebra, etc) or the theoretical computer science track (Analysis of Algorithms, Theory of Computation, etc.).

MAT 315 Numerical Analysis (= CSC 315)
Prerequisites & Notes

MAT 150 and MAT 235, and proficiency in some programming language. (Spring)

Instructor
Staff

Survey of methods to approximate numerical solutions of problems in root-finding, differentiation, integration, curve-fitting, differential equations, and systems of equations. Derivations, limitations, and efficiency of different algorithms are considered. 

PHY 200 Computational Physics (= CSC 200)
Prerequisites & Notes

Physics 120 or 130 at Davidson or permission of the instructor. (Spring)

Instructor
Kuchera

(Cross-listed as CSC 200) PHY/CSC 200 is an introduction to computer programming and computational physics using Python. No prior programming experience is necessary. This course will provide students with the skills required to write code to solve physics problems in areas including quantum physics, electromagnetism, and mechanics. Structured programming methods will be covered as well as algorithms for numerical integration, solving differential equations, and more.

 

Satisfies the Mathematical and Quantitative Thought distribution requirement.

PHY 310 Electronics and Instrumentation
Prerequisites & Notes

Physics 220 or 230. (Fall)

Instructor
Yukich

Theoretical and laboratory investigations of analog and digital circuits including diodes, transistors, operational amplifiers, and logic gates.  Incorporation of these components in power supplies, oscillators, amplifiers, microcomputer systems, computers and other instruments.  Introduction to assembly language and LabVIEW programming provided.  Two laboratory periods each week.

Students entering 2012 and after: satisfies the Natural Science distribution requirement.
Students entering before 2012: counted toward the fulfillment of the Natural Science and Mathematics distribution requirement.

PHY 397 Independent Study in Advanced Software Development in Science (= CSC 397)
Prerequisites & Notes

CSC/PHY 200 or CSC 121 and one of PHY 310, CSC 231 or CSC 325, or permission of the instructor. (Fall/Spring)

Instructor
Kuchera

(Cross-listed as Computer Science 397) Independent study using computers to model dynamical systems in the natural sciences under the direction and supervision of the instructor who approves the specific topic of study. Emphasis is on the use of object-oriented programming and web-based protocols to investigate both dynamical systems and the representation of those systems as data structures and algorithms.