Computer Science courses are designed for a wide range of individuals. We offer courses specifically for people who have never programmed before while also offering intermediate, advanced, and interdisciplinary courses. While Online Program students have priority placement, residential students are welcome and encouraged to take online courses when the course is not available on their campus.
All computer science courses satisfy the graduation requirement for the department of engineering and computer science or as a STEM elective. Placement into a more advanced course does not excuse any graduation requirements.
Placement beyond the introductory courses requires passing a placement exam or submission of your CS AP A scores. Each campus has slightly different requirements (see below), and you can register your interest when completing the ECS Pathway and Placement Survey for New Students. Links to the survey and exam are included in the your Pre-Flight Tasklist all students received at Welcome Day.
(Durham) CS4140: Game Design with Modern Engines
(Morganton) CS4900: Developing Applications with Locally Hosted Voice Recognition and Text-to-Speech
Morganton and Online Students
Students with minimal or no previous programming experience should sign up for CS4120: Computing for Everyone, an introduction to the Python programming language and fundamental computer science concepts or CS4060:Scientific Programming.
Students who have taken the AP Computer Science A Exam with a score of a 5 can upload their scores to the Placement Canvas Course. The AP CS Principles Exam cannot be used to bypass CS4120: Computing For Everyone. All other exemptions require explicit permission of the Computer Science Chair.
New students with previous programming experience in Python (including AP Computer Science Principles) can indicate on the ECS Pathway and Placement Survey for New Students that they would like to take the Python Placement Exam. The survey and the link to the exam is included in your Pre-Flight Tasklist each student received during Welcome Day. The Placement Exam is given online only and information on testing dates are also located in your Pre-Flight Tasklist. A satisfactory score (over 80%) on the Placement Exam allows students to bypass the CS4120: Computing for Everyone prerequisite for more advanced courses. A downloadable Python textbook for review is available here.
Durham Students
Incoming Juniors
Important: If you are taking the AP CS A Exam this year, your scores will not be available in time for placement. You should complete the placement assessment.
Level 2 Placement
To place into a Level 2 course, you must score an 80% or higher on the Level 2 placement exam.
Level 3 Placement
To place into a Level 3 course, you must score an 80% or higher on the Level 3 placement exam OR score a 5 on the AP Computer Science A exam.
Rising Seniors
Level 2 Placement
To place into a Level 2 course, you must score an 80% or higher on the Level 2 placement exam OR have passed an NCSSM Level 1 computer science course (except AR/CS4070 Art, Technology, Computing or CS4020 Web Development).
Level 3 Placement
To place into a Level 3 course, you must score an 80% or higher on the Level 3 placement exam OR have passed an NCSSM Level 2 computer science course.
Courses without Prerequisites (Level 1)
CS4020: Web Development
Prerequisites: None
Note: This is a terminal course.
This beginning course introduces the basic ideas of computing via the World Wide Web through the creation of dynamic web pages. Three layers are built: HTML, for document structure, CSS for document appearance, and JavaScript for page behavior. JavaScript, a full-featured, Turing-complete programming language, is used to learn the fundamental components of programming: variables, objects, functions, conditional logic, and iteration. In-class individual and group work culminates in an individual or group project chosen by the students.
CS4040: Game Design and Simulation
Prerequisites: None
This course provides an introduction to game design principles and programming concepts. Students will learn the foundations of computer science while learning how to apply these concepts in the context of game design. The course will start by introducing fundamental computer science concepts such as variables, data types, conditional statements, loops, functions, and classes. After mastering these concepts, students will be introduced to proper game design techniques to develop playable games in multiple formats. Students will work on different projects throughout the course, where they will be expected to apply the principles learned to design and develop games. This includes developing an idea of what makes a game fun, and having rules and environments that support users to feel that the game experience is pleasing yet challenging, with the MDA (Mechanics, Dynamics, Aesthetics) format. A culminating final project will be developed to showcase game development knowledge and skill set.
CS4060: Scientific Programming
Prerequisites: None
This course teaches computer programming skills and how to apply them for analyzing, interpreting, and displaying both large and small scientific data sets. Using Python, MATLAB, R, Mathematica, and associated software libraries, students learn to access data sets, write programs to calculate and manipulate data, display data, and perform basic statistical analysis. Programming concepts such as objects, variables, functions, conditional logic, and iterations are important concepts that are taught in the context of scientific programming and which allow this course to serve as a prerequisite for more advanced courses. The course features a final project allowing students to explore datasets in scientific areas of interest to them.
CS4070/AR4070 Art, Technology and Computing
Prerequisites: None
Note: This is a terminal course.
This course asks students to expand on their definition of art to include technology as a platform for creativity. Students will learn the foundations of art, electronics, and programming in a unique course that asks them to maintain a journal, schematics, and programming cheat sheets. Students will develop their skills in a collaborative environment and make use of the art studio as well as the FabLab to bring their creative ideas into existence. The goal of this course is to develop and expand on creative skills and construct innovative and interactive work of arts. Students will gain knowledge and appreciation of art history while becoming more familiar with artists who are working with groundbreaking methods and materials. Students will learn the fundamentals of electronics to learn how to sense information from the surrounding environment and drive outputs to interact with and impact the environment. Programming concepts such as variables, functions, conditional logic, iteration, and objects are taught in the context of artistic expression.
CS4120: Computing for Everyone
Prerequisite courses: None
This course is an introduction to basic programming skills and to the Python 3 programming language. Python is one of the most popular programming languages and is the language of choice for data science, machine learning and humanities research. Topics covered will include variables, expressions and statements, functions, conditionals, loops, recursion, string manipulation, input/output statements, lists, and dictionaries. Students will learn to develop and code solutions to problems consistent with challenges found in mathematics, science, engineering and the humanities.
CS4200/MA4200: Cryptography
Prerequisites: None
Cross listed as MA4200. This course introduces students to cryptographic methods used to encipher and decipher secret messages, with an emphasis on using computer programming to automate the process. Through class discussions, problem-solving, group activities, and programming assignments, students will learn a variety of encryption schemes ranging from the age of Caesar to modern public key encryption used to secure digital communications online. Students will learn introductory number theory and statistics to describe these methods and identify weaknesses that allow secret messages to be read without the key. Students will also learn programming topics such as variables, functions, conditional logic, looping, and file input/output in the Python language to implement each cryptographic method. This course will utilize a blended learning environment, with large portions of material being taught online and utilizing in class time for working in groups.
Courses with Prerequisites or Requiring Chair Approval
CS4100: Human-Computer Interaction
Prerequisites: One of CS4040, CS4120, CS4200/MA4200 or a 5 on AP CS A or by Placement Exam
This course is designed to introduce students to a user-centered approach to the design of software artifacts. Topics covered include concepts and techniques for interaction design, interface development and usability evaluation.
CS4140: Game Design with Modern Engines
Prerequisites: One of CS4040, CS4120, CS4200/MA4200 or a 5 on AP CS A or by Placement Exam
This is a second-level computer science course that introduces game design principles and game development using a modern game engine. Students will build on their foundational computer science knowledge and learn to apply these concepts to create games. Using a modern game engine, students will take an object-oriented approach to represent entities across various game styles. They will define interactions between these entities to achieve designed game mechanics through a project-based curriculum. Students will also explore how these mechanics influence player behaviors and craft experiences utilizing the MDA (mechanics, dynamics, aesthetics) framework to analyze and ultimately design games. Topics may include physics and collision systems, character movement and animation, level design and level transitions, player input systems, user interface design, integrating audio and visual effects. This course culminates in a final project where students will develop a complete game prototype demonstrating their ability to create engaging and polished games with modern tools.
CS4230: Networks and the Web
Prerequisites: One of CS4040, CS4120, CS4200/MA4200 or a 5 on AP CS A or by Placement Exam
This course introduces students to how computer networks operate, and how we can use them in the development of software. Students will use client-side technologies such as HTML, CSS, and JavaScript to create interactive web applications. We will then extend that knowledge to the server-side to allow communication over a network between multiple people. Topics include: Box Model, UX Design, Web Sockets, and NodeJS.
CS4250: Data Visualization
Prerequisites: MA4110 or CS4120 or Python Placement Exam
Data visualization is an important subdomain of Data Science where you translate data into a visual context, such as a map or graph, to make the data easier for the human brain to determine important characteristics and patterns. This course will provide you with the knowledge and practical skills necessary to develop a strong foundation for data visualization, and to design and develop advanced applications for visual data analysis. In particular, you will learn how to perform data visualization and analysis using data visualization libraries written for the Python programming language including Matplotlib, Seaborn and Pandas.
CS4270: Fundamentals of Object-Oriented Design
Prerequisites: One of CS4040, CS4120, CS4200/MA4200 or a 5 on AP CS A or by Placement Exam
This is a second course in computer science which achieves two major goals: one is building skill in writing coherent programs that implement algorithms; the second is using classes and objects to assist in separating concerns through encapsulation and modularization. It is a course meant to turn good programmers into good computer scientists. We will discuss the various ways data can be stored and how the flow of programs can be manipulated. Finally, we will study the object model including problem decomposition, polymorphism, and inheritance.
CS4320: Machine Learning
Prerequisites: One of CS4140, CS4230, CS4270 OR One Level 1 Course + Placement Exam; MA4030 recommended
This course teaches basic machine learning concepts, algorithms and their applications using Python and associated software libraries. Machine learning concepts include where ML fits within AI, Data Science, and Statistics, where ML is being commonly used, and the larger societal context including possible ethical concerns. Machine learning techniques include supervised learning, unsupervised learning, and reinforcement learning. Applications may include implementation of decision trees, neural networks, and other frameworks. This course features a final project allowing students to apply machine learning techniques to a problem of interest to them. This course requires advanced programming skill and expects mastery of the Python programming language as evidenced by meeting the course prerequisite or by placement exam.
CS4350: Data Structures and Algorithms
Prerequisites CS4230 or CS4270 or Permission of the Chair or by Placement Exam
Data Structures and Algorithms is a project-based course covering material generally found in a second semester undergraduate computer science major course. Students will explore foundational data structure and their application to computing concepts. Students will also learn how to analyze data structures and algorithms for efficiency to determine which data structure is most appropriate for a given scenario. Specific data structures covered include: linked lists, binary trees, heaps, hashmaps and graphs.
CS4330: Server-Side Development
Prerequisites: CS4230 or CS4270 or by Placement Exam
This project-based course merges HTML/CSS, JavaScript, and Python to create dynamic web applications and distributed networks. Students will use database technologies such as SQL or MongoDB to customize web sites for individual users. Security implications will be addressed as students learn how to program and deploy their own web server. Topics include: threads, databases, network APIs, and hashing.
CS4400: Robotics Design for Competition
Prerequisites: CS4110/EE4110 and/or placement; approval by robotics competition advisor
Robotic Design is a project-based course focusing on robotic applications for national robotic competitions that are supported by NCSSM on the student's campus. Students will learn soft skills including project management, team management, professional documentation, and presentation skills. Students will also develop more robust technical skills in fabrication, sensor data implementation, computer vision, path-planning, kinematics, machine learning, ROS framework, and much more. Students with no previous robotics experience should first take Introductory Robotics, seek placement by exam. Competition sponsors must approve students taking this course.
CS4900: Advanced Computer Science Topics
Prerequisites: Permission of the Computer Science Chair
Various topics that change each year.
(Fall 2025) Developing Applications with Locally Hosted Voice Recognition and Text-to-Speech
In this course you will learn the programming skills needed to develop your own smart speaker system that does not depend on having all your conversations monitored by one of the big technology companies such as Amazon, Google or Apple.