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. Students entering 2012 and after: satisfies Mathematical and Quantitative Thought distribution requirement. 

CSC  120  Programming in Humanities (= DIG 120) 
Prerequisites & NotesDIG 120  Programming in the Humanities (= CSC 120)
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. Satisfies the Mathematical and Quantitative Thought distribution requirement. (Spring)


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 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 & 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 equivalent, 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.).


CSC  221  Data Structures 
Prerequisites & NotesComputer Science 121, 200, 209, or permission of instructor.
Instructor
Students entering 2012 and after: satisfies the Mathematical and Quantitative Thought distribution requirement. 

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


CSC  321  Analysis of Algorithms 
Prerequisites & NotesComputer Science 221, and prerequisite or corequisite Mathematics 220, or permission of instructor. (Fall)
Instructor


CSC  322  Programming Languages 
Prerequisites & NotesComputer Science 221. (Offered Fall of oddnumbered years.)
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. 

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.
Fulfills a minor elective requirement in Computer Science. 

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 MAT 150, or permission of instructor. 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. 

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. 

CSC  371  Machine Learning 
Prerequisites & NotesPrerequisites: Proficiency 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. 

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

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. Satisfies the Mathematical and Quantitative Thought distribution requirement. 

MAT  220  Discrete Structures (= CSC 220) 
Prerequisites & NotesMAT 113 or equivalent, 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.). 

MAT  315  Numerical Analysis (= CSC 315) 
Prerequisites & NotesMAT 150 and MAT 235, and proficiency in some programming language. (Spring)
Instructor


PHY  200  Computational Physics (= CSC 200) 
Prerequisites & NotesPhysics 120 or 130 at Davidson or permission of the instructor. (Spring)
Instructor
(Crosslisted 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 & NotesPhysics 220 or 230. (Fall)
Instructor
Students entering 2012 and after: 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
