Computer Science


The Department of Computer Science offers classes designed specifically for people who have never programmed before while also offering intermediate, advanced, and interdisciplinary courses.

The diagram on the right shows courses that will be available on the Durham (blue), Morganton (orange) and Online (green) campuses for the 2023-2024 academic year. Courses are discussed briefly below. Residential students are welcome and encouraged to take online courses when the course is not available residentially. However, Online Program students do have placement priority for online sections.

All computer science courses satisfy the graduation requirement for the department of engineering and computer science as well as that for a STEM elective.


Morganton Students

Students with no previous programming experience should sign up for CS4120: Computing for Everyone, an introduction to the Python programming language and basic computer science concepts. 

Students who have received a score of 4 or 5 on the AP Computer Science A Exam should email a copy of their scores to Dr. Larry Hodges if they want the scores to be considered for direct admission into advanced courses.

Students with previous programming experience in Python (including AP Computer Science Principles) can ask to take the Python Placement Exam. A satisfactory score 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.  You can request to take the Placement Exam for the Morganton campus by emailing Dr. Larry Hodges

Durham Students

Students with no previous programming experience can sign up for any introductory course offered with no prerequisites (see list below).  

Students who have previous programming experience and would like to place into a course with prerequisites can request to take a placement assessment and/or submit their AP Exam scores by emailing Mr. Michael D’Argenio.

Online Students

Students with no previous programming experience can sign up for any introductory course offered with no prerequisites, including CS4120: Computing for Everyone, CS4060: Scientific Programming, and MA4110: Foundations of Data Science. 

Students with previous programming experience should describe their programming experience in an email to Dr. Larry Hodges. The email should include what languages you've used, in what context (course, clubs, competitions, etc.) and any AP scores or grades from courses in your home school. Please include any experience with computational courses through the NCSSM Online program. Based on this information, you may be able to place directly into CS4100: Human-Computer Interaction.


Courses without Prerequisites

CS4020: Web Development

Prerequisites: None

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

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: Any previous computer science course or permission of the Chair

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.

CS4230: Networks and the Web

Prerequisites: CS4120 or Python Placement Exam or 4 or 5 on AP CSA

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 CS4020, CS4040, CS4060, CS4070/AR4070, CS4120, CS4200/MA4200, EE4100, PH4130. 

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. While this course does not exhaustively cover all concepts on the AP Computer Science A exam, it can be used to assist with preparation for the exam.

CS4300: Advanced Computer Science Topics: Robotics Design for Competition

Prerequisites: Permission of the Computer Science Chair

Robotic Design is a project-based course focusing on robotic applications for national robotic competitions that are supported by NCSSM-Morganton. 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 EE4100: Introductory Robotics

CS4320: Machine Learning

Prerequisites: CS4120, CS4270 or 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

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. 

Courses not offered 2023/2024

CS4330: Server-Side Development

Prerequisites: CS4230 or CS4270

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.

CS4920: Advanced Computer Science Topics

Prerequisites: Permission of the Computer Science Chair

Various topics that change each year.