Sub  CRSE  Title 

BIO  209  Bioinformatics Programming (= CSC 209) 
Prerequisites & NotesNot open to students with credit for CSC 120 (= DIG 120), CSC 121, or CSC 200 (=PHY 200).
Instructor
(Crosslisted 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. 

CSC  108  Explorations in Computer Science 
Prerequisites & NotesThis 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
An introduction to the study of computational and algorithmic processes and the insight such study provides into ageold questions about human creativity and intelligence, the nature of social networks, evolution and selfreplicating systems, mindbody duality, language, and economic systems. Students will learn to read and understand short computer programs in a beginnerfriendly language. Satisfies Mathematical and Quantitative Thought distribution requirement. 

CSC  110  Data Science & Society 
Prerequisites & Notes
Instructor
An introduction to methods of data science, including computer programming, data visualization, and statistical analysis. Students will collect, process, analyze, and present data in order to expose and help each other understand issues of social and economic justice. All work will be done in R, a freely available data analysis software package. Not open to students with credit for, or current enrollment in, any course in computer programming or statistics. Satisfies a Mathematical & Quantitative Thought distribution requirement. 

CSC  120  Programming in Humanities (= DIG 120) 
Prerequisites & NotesNot open to students with credit for CSC 121, CSC 200 (= PHY 200), or CSC 209 (= BIO 209). (Spring)
Instructor
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 centuriesold plot structures in new ways through sentiment analysis and character networks, and solve longstanding riddles of authorship attributionamong 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 firsttime 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.


CSC  121  Programming and Problem Solving 
Prerequisites & NotesNot open to students with credit for CSC 120 (= DIG 120), CSC 200 (=PHY 200), or CSC 209 (= BIO 209).
Instructor
Satisfies the Mathematical and Quantitative Thought distribution requirement. 

CSC  200  Computational Physics (= PHY 200) 
Prerequisites & NotesPhysics 120 or 130 at Davidson, or permission of the instructor. (Spring)
Instructor
(Crosslisted as PHY 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. Corequisite: Physics 120 or 130 at Davidson or permission of the instructor. (Spring) 

CSC  209  Bioinformatics Programming (= BIO 209) 
Prerequisites & NotesDoes 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
Satisfies the Mathematical and Quantitative Thought distribution requirement. 

CSC  220  Discrete Structures (= MAT 220) 
Prerequisites & NotesMAT 113 or 140, and the ability to program in a highlevel language such as Python, C++, or Java at the level expected in CSC 121 or an equivalent course.
Instructor
(Crosslisted as MAT 220) 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.). Satisfies the Mathematical and Quantitative Thought distribution requirement.


CSC  221  Data Structures 
Prerequisites & NotesComputer Science 121, 200, 209, or permission of instructor.
Instructor
Counts towards the Mathematics major and minor. 

CSC  250  Computer Organization 
Prerequisites & NotesRequires the ability to program in a highlevel 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
An introduction to how digital computers are built and the process by which computer programs expressed in a highlevel 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, flipflops), computer memory, assembly and machine code, hardware components and their organization, and the C programming language. 

CSC  312  Software Design 
Prerequisites & NotesPrerequisite: 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.


CSC  315  Numerical Analysis (= MAT 315) 
Prerequisites & NotesMAT 150 and MAT 235, and proficiency in some programming language. (Spring)
Instructor
Counts towards the Mathematics major and minor. 

CSC  321  Analysis of Algorithms 
Prerequisites & NotesComputer Science 221, Mathematics 220, or permission of instructor. (Fall)
Instructor
Counts towards the Mathematics major and minor. 

CSC  322  Programming Languages 
Prerequisites & NotesComputer Science 221.
Instructor


CSC  324  Theory of Computation 
Prerequisites & NotesOne of Mathematics 220, 230, or 255. (Offered Spring of oddnumbered years.)
Instructor
Mathematical models of computation, and the fundamental capabilities and limitations of computers. Topics include regular languages, finite automata, contextfree 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 NPcomplete problems. Counts towards the Mathematics major and minor. 

CSC  351  Operating Systems 
Prerequisites & NotesCSC 221 (Data Structures), CSC 250 (Computer Organization), and the ability to program in C.
Instructor
Operating Systems are collections of software services that manage physical hardware resources, from small sensors to complex servers, and provide applications with a higherlevel interface for common tasks. Typical responsibilities of operating systems include task and memory management; input and output abstractions and services (which includes file systems and networking); and authentication / authorization. For workstations and servers, operating systems also commonly include the means to define and enforce security policies, to perform virtualization, and to manage energy consumption, among others. In our course, students develop in practice the crucial parts of a modern operating system, and develop scientific writing and public presentation skills in an informal and rewarding class environment. Satisfies a 300level elective requirement in the Systems area of the Computer Science major.


CSC  353  Database Systems 
Prerequisites & NotesCSC 221 (Data Structures)
Instructor
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 upperlevel 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 & NotesPrerequisite: CSC 221
Instructor
Core concepts, problems, and techniques related to the construction and maintenance of highlyscalable 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 & NotesCSC 221 and either MAT 140 or MAT 150. Offered Fall of even numbered years.
Instructor
Overview of 2D and 3D computer graphics techniques: line drawing routines, antialiasing, 3D object representation, culling, zbuffers, abuffers, 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 & NotesPrerequisite: CSC 221. Offered fall of oddnumbered years. Does not carry Mathematics major credit.
Instructor
An introduction to the theory and application of graphical representations of data. Topics include: the human visual system, lowlevel vision processing, attentive vs. preattentive processes, color vision and color map design, interaction, space perception, and visualization design. Counts as an elective in the Data Science interdisciplinary minor. 

CSC  370  Artificial Intelligence 
Prerequisites & NotesComputer Science 221, and one of Mathematics 220, 230, or 255, or permission of the instructor. Offered Spring of oddnumbered years.
Instructor
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. Counts towards the Mathematics major and minor. 

CSC  371  Machine Learning 
Prerequisites & NotesProficiency in a highlevel programming language and data structures, at the level expected in CSC 221, and MAT/CSC 220 (or permission of the instructor). Offered Spring of evennumbered 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. Counts towards the Mathematics major and minor. 

CSC  379  Cryptology 
Prerequisites & NotesMath 150 (Linear Algebra), and an introductory proof course (one of CSC 220 Discrete Structures, MAT 230 Sets and Proofs, or MAT 255 Number Theory).
Instructor
The study of making and breaking secret codes, including classical ciphers and their cryptanalysis, modern symmetric ciphers, and publickey systems, and their application in cryptographic protocols for secrecy, key exchange, information assurance, and authentication. Analysis of the security of cryptosystems using tools from mathematics and computer science. Fulfills an elective requirement in the Applications area of the Computer Science major. 

CSC  381  Applications Seminar 
Prerequisites & NotesPermission of the instructor.
Instructor
Special topics seminar in Applications.


CSC  382  Systems Seminar 
Prerequisites & NotesPermission of instructor required.
Instructor
Special topics seminar in Systems. 

CSC  383  Theory Seminar 
Prerequisites & NotesPermission of the instructor required.
Instructor
Special topics seminar in Theory. 

CSC  384  Seminar 
Prerequisites & NotesPermission of instructor required. Eligible for minor credit in computer science or major credit in mathematics by departmental approval.
Instructor
Study of topics of interest in Computer Science. 

CSC  395  Independent Study 
Prerequisites & NotesOpen to qualified students with the permission of the department chair.
Instructor
Eligible for minor credit in computer science or major credit in mathematics by departmental approval. 

CSC  396  Independent Study 
Prerequisites & NotesOpen to qualified students with the permission of the department chair.
Instructor 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


CSC  481  Seminar 
Prerequisites & NotesPermission of the instructor.
Instructor
Eligible for minor credit in computer science or major credit in mathematics by departmental approval. 

CSC  495  Independent Study 
Prerequisites & NotesOpen to qualified students with the permission of the department chair.
Instructor Eligible for minor credit in computer science or major credit in mathematics by departmental approval. 

DIG  120  Programming in the Humanities (= CSC 120) 
Prerequisites & NotesNot open to students with credit for CSC 121, CSC 200 (= PHY 200), or CSC 209 (= BIO 209). (Spring)
Instructor
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 centuriesold plot structures in new ways through sentiment analysis and character networks, and solve longstanding riddles of authorship attributionamong 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 firsttime 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. 

MAT  220  Discrete Structures (= CSC 220) 
Prerequisites & NotesMAT 113 or 140, and the ability to program in a highlevel 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.). Satisfies the Mathematical and Quantitative Thought distribution requirement. 

MAT  315  Numerical Analysis (= CSC 315) 
Prerequisites & NotesMAT 150 and MAT 235, and proficiency in some programming language. (Spring)
Instructor
Counts towards the Mathematics major and minor. 

PHY  200  Computational Physics (= CSC 200) 
Prerequisites & NotesCorequisite: Physics 120 or 130 at Davidson or permission of the instructor. (Spring)
Instructor
(Crosslisted as CSC 200) This course 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 a requirement int he Data Science interdisciplinary minor.


PHY  310  Electronics and Instrumentation 
Prerequisites & NotesPhysics 220 or 230. (Fall)
Instructor
Satisfies the Natural Science distribution requirement. 

PHY  397  Independent Study in Advanced Software Development in Science (= CSC 397) 
Prerequisites & NotesCSC/PHY 200 or CSC 121 and one of PHY 310, CSC 231 or CSC 325, or permission of the instructor. (Fall/Spring)
Instructor
