Computer Science
Overview
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.
Placement
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 or AP Principles Exam should email a copy of their scores to Dr. Larry Hodges if they want the scores to be considered for direct admission into a course with prerequisites. Put the word PLACEMENT in the subject line of the email. Indicate in your email whether you are a student on the Morganton or Online campus.
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. You will receive the link to the ECS Pathway and Placement Survey for New Students when you attend Welcome Day. The Placement Exam is given online and information on testing dates will be sent to you if you indicate your interest via the survey. Do not email Dr. Hodges, just fill out the survey by the deadline. 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.
Durham Students
Students with minimal or no previous programming experience can sign up for any introductory course offered with no prerequisites (see list below).
Students who have taken the AP Computer Science A Exam or AP Principles Exam should email a copy of their scores to Dr. Larry Hodges if they want their scores to be considered for direct admission into a course with prerequisites. Put the word PLACEMENT in the subject line of the email. Indicate in your email that you are a student on the Durham campus.
New students with previous programming experience can indicate on the ECS Pathway and Placement Survey for New Students that they would like to take the Placement Exam. You will receive the link to the ECS Pathway and Placement Survey for New Students when you attend Welcome Day. The Placement Exam is given online and information on testing dates will be sent to you if you indicate your interest via the survey. Do not email Dr. Hodges, just fill out the survey by the deadline. A satisfactory score on the Placement Exam allows students to be considered for placement into a course with prerequisites.
Courses
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.
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.
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.