Accessibility Navigation:
Sub  CRSE  Title 

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

CSC  220  Discrete Structures (= MAT 220) 
Prerequisites & NotesMAT 140, MAT 150, or MAT 160, 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 and discrete mathematics, with a focus on topics relevant to computer science, and an introduction to functional programming. Topics include logic, sets, functions, equivalence relations, algorithm analysis, methods of proof, essential combinatorics, recurrence relations, and discrete probability, as well as the essentials of functional programming. Additional topics may be selected from graph theory, number theory, or automata theory. This course prepares students for advanced work in both computer science and mathematics. Satisfies the Mathematical and Quantitative Thought 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.
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
Instructor
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 & NotesCSC 221 and CSC/MAT 220, or permission of instructor.
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  359  Networks and Distributed Systems 
Prerequisites & NotesCSC 221 (Data Structures) and CSC 250 (Computer Organization)
Instructor
Computer networks have revolutionized the way societies create and communicate information. In particular, the Internet is a massive deployment of network algorithms and systems, with lasting social, scientific, and economical impact. Network algorithms and systems are specified by protocols, which allow different organizations to interoperate. Protocols are designed to handle network failures and noncooperative agents, and to operate at large scale without critical performance issues. Algorithms and systems associated with network protocols are elegant and significant applications of fundamental Computer Science ideas. This course studies fundamental Internet protocols such as ARP, IP, ICM, and TCP; higherlevel application protocols, such as DNS, HTTP, SMTP, and securityrelated protocols; as well as medium access control specifications for Ethernet and wireless networks. All of these protocols are studied from a perspective that emphasizes their algorithmic and designrelated aspects, with focus on the fundamental computer science principles underlying the associated algorithms and systems. Fulfills the Systems area requirement of the Computer Science major. 

CSC  361  Computer Graphics 
Prerequisites & NotesMAT 140 or MAT 150 and CSC 221
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++. Counts towards the Computer Science major and minor. 

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  Machine Reasoning 
Prerequisites & NotesCSC 221 and one of CSC/MAT 220, MAT 230, or MAT 255; or permission of the instructor.
Instructor
A survey of core algorithms and techniques from the field of machine reasoning and decisionmaking. Topics include search, game playing, constraint satisfaction problems, planning, reinforcement learning, knowledge representation, and logic. 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. Counts as an elective in the Applications category of the Computer Science major.
Spring 2019 

CSC  382  Systems Seminar 
Prerequisites & NotesPermission of instructor required.
Instructor
Special topics seminar in Systems. Counts as an elective in the Systems category of the Computer Science major. 

CSC  383  Theory Seminar 
Prerequisites & NotesPermission of the instructor required.
Instructor
Special topics seminar in Theory. Counts as an elective in the Theory category of the Computer Science major. 

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 major or minor credit in Computer Science with department approval. 

CSC  396  Independent Study 
Prerequisites & NotesOpen to qualified students with the permission of the department chair.
Instructor
Eligible for major or minor credit in Computer Sciene with 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) 
MAT  220  Discrete Structures (= CSC 220) 
MAT  315  Numerical Analysis (= CSC 315) 
MAT  320  Combinatorics 
MAT  325  Graph Theory 
PHY  200  Computational Physics (= CSC 200) 
PHY  310  Electronics and Instrumentation 
PHY  397  Independent Study in Advanced Software Development in Science (= CSC 397) 