Academic Catalog

Computer Science (CPSC)

CPSC 104  - The Internet: Technology, Information, and Issues  (3 Credits)  

A survey of the technology and issues underlying the use of the Internet for communication, resource discovery, research, and dissemination of information in multimedia formats. Topics include as introduction to Internet protocols, Internet history and development, electronic mail, group discussions, use and functions of a Web browser, accessing Internet services and resources, using the Internet for research, Web site design and implementation, and social, legal, and ethical issues related to using the Internet.

CPSC 106  - Digital Storytelling  (3 Credits)  

People have been telling stories since the beginning of time., but how is story telling evolving in the digital age? This course explores how computers are being used to tell stories. We'll study text-based technologies-blogging, the web- and how those models have changed the way we publish and disseminate narratives. Well also study the roles of audio, video, and images in narrative: computer animation, the ethics of altering digital images, and the Story Corps project. Students will use technology including blogs, virtual worlds, and computer games to create and tell their own stories.

CPSC 109  - Introduction to Modeling and Simulation  (3 Credits)  

This course introduces students to the concepts of modeling and simulation as tools for solving problems in the sciences. Students will be introduced to several modeling and simulation tools and will learn how to decompose problems so they can be represented and solved with the tools. Agent models and system models will be introduced. Example problems to demonstrate the modeling and simulation techniques and tools drawn from a number of scientific fields and will introduce basic problems that will not require depth of knowledge in any particular field of science. Examples of these problems include forest fires, predatory problems, transmission of diseases, chemical reactions, and elementary particle simulations. Students completing the course will be able to model complex systems and have attained programming skills equivalent to those learned in CPSC 110. Successful completion of this course is sufficient to continue on to CPSC 220. No previous programming experience or computer background is expected.

CPSC 110  - Introduction to Computer Science  (3 Credits)  

This course provides a foundation in computer science for a student who does not have prior programming experience. It provides sufficient support to permit a student to continue in the major program. Topics include an introduction to the algorithm and program development process using a high-level structured programming language and the department's computing facilities. Supervised hands-on experience provided. May not be taken for graded credit after passing any Computer Science course numbered 220 or higher.

CPSC 219  - Foundations for Data Science  (3 Credits)  

Prerequisite: DATA 101. Skills and tools in acquiring, parsing, manipulating, and preparing data for statistical analysis. Cross listed as DATA 219 and DSCI 219.

CPSC 220  - Computer Programming and Problem Solving  (4 Credits)  

Prerequisite: CPSC 110 or CPSC 219 or successful completion of the UMW computer science placement exam. Continued coverage of disciplined problem-solving and algorithmic development including emphasis on procedural and data abstraction. Topics include elementary data structures such as arrays, files, and classes. The notions of data modeling and the linking of data type definitions with their associated operations is introduced. Study of program design, coding, debugging, testing, and documentation in a higher level language that supports the object-oriented paradigm. Intended for students who have had previous programming experience.

CPSC 225  - Software Development Tools  (1 Credits)  

Prerequisites: CPSC 220. This course provides a practical introduction to using common software developments tools. Topics will include using the Unix command line, files and permissions, managing processes, the vim text editor, version control, and writing shell scripts.

CPSC 240  - Object-oriented Analysis and Design  (4 Credits)  

Prerequisite: CPSC 220 (grade of C or better). Theory and practice of the object-oriented software development paradigm including abstraction, encapsulation, inheritance, polymorphism, aggregation, visibility, modeling notations, and design patterns. Also covers issues in collaborative software development including communication, code sharing, diversity, and inclusion. Students work in teams to develop collaborative software solutions in an object-oriented language.

CPSC 270  - Introductory Special Topics in Computer Science  (3 Credits)  
CPSC 284  - Applied Discrete Mathematics  (4 Credits)  

Prerequisites: CPSC 110, CPSC 219, or CPSC 220, or successful completion of the UMW computer science placement exam. Designed to prepare beginning Computer Science majors for advanced study by emphasizing the components of Discrete Mathematics especially related to Computer Science. Topics include systems, logic, methods of proof, counting techniques, mathematical induction, sets, relations, functions, vectors, matrices, graphs and trees.

CPSC 302  - Computer Ethics  (3 Credits)  

Prerequisite: CPSC 110 or 220. An examination of issues and events related to ethics, professional conduct and social responsibility as they apply to the field of Computer Science. Includes study of ethical responsibilities and behaviors appropriate for computer scientists.

CPSC 305  - Computer Systems and Architecture  (4 Credits)  

Prerequisites: CPSC 225, a grade of C or better in CPSC 240, and either CPSC 284 or MATH 201. This course examines the basic operation of computing systems. It takes a bottom-up approach covering each major component of such systems including hardware, logic circuit design, CPU instruction sets, assemblers,and compilers. Students will gain experience programming in assembly language and C.

CPSC 310  - Computer Information Systems  (4 Credits)  

Prerequisite: CPSC 220. This course introduces the student to the use and implications of information technology in the business environment. This course covers such topics as data management, networks, analysis and design, computer hardware and software, decision support systems, database management systems, transaction processing systems, executive information systems, and expert systems. It also provides activity with computer-based and non-computer-based problems/cases and includes real-world programming projects that are implemented using a high-level programming language.

CPSC 318  - System and Network Administration  (4 Credits)  

Prerequisite: CPSC 225. A hands-on course on the fundamentals of system and network administration with a focus on proper design and management for ensuring system and network security.

CPSC 326  - Theoretical Foundations of Computing  (4 Credits)  

Prerequisites: CPSC 240 and either CPSC 284 or MATH 201. Covers structures and concepts relating to the underlying theory of computation and mathematical models of actual physical processes. Also covers a repertoire of advanced algorithms for data processing, and the asymptotic analysis of those algorithms to describe their running time and space requirements. Topics may include formal languages, automata theory, Turing machines, the halting problem, NP completeness, searching and traversal algorithms, dynamic programming, compression algorithms, and random number generation.

CPSC 340  - Data Structures and Algorithms  (4 Credits)  

Prerequisite: CPSC 225, a grade of C or better in CPSC 240, and either CPSC 284 or MATH 201. Continued study of data modeling and incorporation of abstract data types including linked lists, stacks, queues, heaps, trees, and graphs. Study of advanced sorting and searching techniques. Provides experience in the use of algorithm analysis. Continued study of program design, coding, debugging, testing, and documentation in an object-oriented higher level language.

CPSC 345  - Introduction to Computer Security  (3 Credits)  

Prerequisites: CPSC 220 and 225. Provides an introduction to computer security. The focus is on providing the students a wide overview of current computer security. Topics covered include, but are not limited to, basic cryptography, network security, system security, wireless security and mobile security. In addition, course labs provide a more hands-on, in-depth exploration of specific topics.

CPSC 350  - Applications of Databases  (4 Credits)  

Prerequisite: CPSC 225 and grade of C or better in CPSC 240. Presents basic techniques for the design and implementation of database-driven web applications. Topics include the design of relational and NoSQL databases and scaling techniques such as the use of load balancing and distributed systems. Programming intensive using a dynamic high-level general-purpose language

CPSC 370  - Special Topics  (1-4 Credits)  
CPSC 391  - Special Projects in Computer Science  (1-4 Credits)  

Prerequisite: Permission of the instructor. Intensive individual investigation of significant research problem under the direction of a faculty member. GPA and course prerequisites apply.

CPSC 401  - Organization of Programming Languages  (3 Credits)  

Prerequisites: CPSC 326 and 340. A course in programming language construction and design emphasizing the run-time behavior of programs. Alternative implementations of programming language constructs are considered. Techniques for language definition may also be discussed.

CPSC 405  - Operating Systems and Systems Programming  (4 Credits)  

Prerequisites: CPSC 305 and CPSC 340. This course examines the abstractions above the hardware that make a computer usable to both programmers and users. These abstractions include processes, context switching, concurrent programming, semaphores, virtual addressing, transactions, access control, and virtualization. Many of these abstractions are the foundation for operating systems kernel development. The abstractions are also applicable to any large-scale programming project. Programming intensive.

CPSC 414  - Network Principles & Applicatn  (3 Credits)  

Prerequisite: CPSC 220 and CPSC 225. This course provides an introduction to the basic principles of networking. Topics covered in the course include: network topologies, protocols, the OSI Model, methods of data transmission, error detection and correction, TCP/IP, network security and other topics as time permits. This course is theoretical and concept oriented rather than consisting of the details of specific network packages.

CPSC 415  - Artificial Intelligence  (3 Credits)  

Prerequisites: CPSC 240 and either CPSC 284 or MATH 201. A survey of current artificial intelligence topics including informed search, knowledge representation, knowledge-based systems, and machine learning. Other topics such as image processing, robotics, and language processing, may also be covered. Artificial intelligence programming projects are required.

CPSC 419  - Data Mining  (3 Credits)  

Prerequisites: DATA 219, CPSC 219, DSCI 219, or CPSC 220. Practical knowledge of data mining, machine learning, and information retrieval. Students will examine the theoretical foundations of a variety of techniques, gain experience with these techniques using open source software, and learn how to apply them to solve real-world problems. Topics include decision trees, Naïve Bayes, probabilistic retrieval models, clustering, support vector machines, approaches to web mining, and scalable machine learning applications. Cross-listed as DATA 419.

CPSC 420  - Modeling & Simulation  (3 Credits)  

Prerequisite: DATA 219, CPSC 219, DSCI 219, or CPSC 220. A robust introduction to techniques of mathematical modeling and computational simulation applied to practical problems. Topics include system dynamics approaches, discrete-event simulation, and agent-based models. Students complete small projects on topics as diverse as population growth, epidemic transmission, queuing theory, and forest fire outbreaks. Cross-listed as DATA 420.

CPSC 425  - Parallel Computing  (3 Credits)  

Prerequisite: CPSC 305 or 340. This course provides an introduction to parallel computing, covering topics including parallel architectures, programming techniques and libraries, the study of existing parallel computing systems, and performance analysis. Students will use a variety of hardware to explore current libraries and methods used for parallel programming.

CPSC 430  - Software Engineering  (4 Credits)  

Prerequisite: CPSC 340 and 350. Techniques for modeling, designing, implementing, and managing large-scale computer programs are studied. Studies include software process models, modeling using UML, and application development with a CASE tool. Continued study of issues in collaborative software development including communication, code sharing, diversity and inclusion. Students work in groups and apply the techniques studied to semester-long projects.

CPSC 435  - Advanced Cybersecurity  (3 Credits)  

Prerequisites: CPSC 225, MATH 253, and CPSC 345 or MIST 411. CPSC 435 explores more advanced cybersecurity related topics including but not limited to: Data security and forensics, component security, system security, and human security.

CPSC 440  - Game Programming  (3 Credits)  

Prerequisite: CPSC 340. Student will design, develop, and implement computer games that involve real-time, even-driven, and multimedia programming techniques. Students learn the history of computer games and the elements of video game design and architecture.

CPSC 444  - 3D Computer Graphics  (3 Credits)  

Prerequisite: CPSC 340. The study of three-dimensional modeling involving the use of light, color, texture and transformation; visible surface detection; parallel and perspective projections; clipping algorithms.

CPSC 445  - Software Security  (3 Credits)  

Prerequisite: CPSC 345 or MIST 411. A course on the intersection of software and information security. A programming intensive course. Topics include but are not limited to: Programming flaws, causes, identification, exploitation and prevention; malicious software, development, identification, and prevention; software fuzzing and other flaw identification and testing methods.

CPSC 448  - Advanced Web Application Development  (3 Credits)  

Prerequisite: CPSC 350. An examination and application of contemporary software technologies focused on providing Web-based services and applications. Special emphasis on distributed systems that have cooperating client-side and server-side components.

CPSC 470  - Selected Topics in Computer Science  (1-4 Credits)  

Prerequisite: Specified by Instructor. Treatment of selected topics in Computer Science. Most recently this has included topics such as Cloud Computing, Animation, and Information System Security. May be repeated for credit with a change in topic.

CPSC 491  - Individual Study in Computer Science  (1-4 Credits)  

Individual study under the direction of a member of the department. Minimum GPA and course prerequisites apply. May be repeated for credit with a change in topic. Two semesters of 3-credits of study required for graduation with Departmental Honors.

CPSC 492  - Individual Study   (1-3 Credits)  

Individual study under the direction of a member of the department. Minimum GPA and course prerequisites apply. May be repeated for credit with a change in topic. Two semesters of 3-credits of study required for graduation with Departmental Honors.

CPSC 499  - Internship   (1-12 Credits)  

Supervised off-campus experience, developed in consultation with the department. Only 3 credits may count toward the major and minimum gpa and course prerequisites apply.