Computer Science Major
In the computer science major, students study the classic discipline of Computer Science, with emphasis on the theoretical foundation and practical applications of computers and computer software. Courses explore such subjects as system architecture, object-oriented design, and computational theory, in addition to the rich mathematical underpinnings that support these topics. Graduates are well-equipped to solve problems in a broad spectrum of application areas and begin satisfying careers as software engineers, system architects, or application developers.
The traditional Computer Science major requires the following coursework:
CPSC 220– Computer Programming and Problem Solving(4 Credits)
Continued coverage of problem-solving and algorithmic development. Topics include data structures such as arrays, files, and classes. Study of program design, coding, debugging, testing, and documentation in an object-oriented programming language. This course is intended for students with previous programming experience. Others are advised to take CPSC 110 instead.
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 encapsulation, visibility, inheritance, polymorphism, and design patterns. Includes an introduction to modeling notations and further development of testing skills. Also covers issues in software development including communication, code sharing, diversity, inclusion. Students collaboratively develop software in teams using an object-oriented language.
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 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 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 284– Applied Discrete Mathematics(4 Credits)
Designed to prepare majors for advanced study by emphasizing the components of discrete mathematics especially related to computer science and emphasizing applications to technology. Topics include logic, proofs, sets, relations, functions, vectors, matrices, structures, and other topics at the instructor’s discretion. This course assumes prior programming experience. Others should take CPSC 110 before enrolling in this class.
CPSC 225– Software Development Tools(1 Credits)
Prerequisite: CPSC 110, CPSC 220, or DATA 219. 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 350– Applications of Databases(4 Credits)
Prerequisite: CPSC 225, and grade of C or better in CPSC 240 or DATA 219. 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. Cross-listed as DATA 350.
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 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.
Students must also complete three elective courses. Recently offered electives include:
CPSC 440– Game Programming(3 Credits)
Prerequisite: CPSC 240. Student will design, develop, and implement computer games that involve real-time, event-driven, and multimedia programming techniques. Students learn the history of computer games and the elements of video game design and architecture.
CPSC 458– Network Security(3 Credits)
Prerequisite: CPSC 345. Explores advanced network security topics and provides hands-on practice. Topics covered include, but are not limited to, network vulnerabilities, virtual LANs, firewall, access control, network anomaly detection and intrusion prevention, advanced network security algorithms and protocols, penetration test, network risk management, and security of the Internet of Things. Cross-listed as CYBR 458.
CPSC 419– Data Mining(3 Credits)
Prerequisite: DATA 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 425– Parallel Computing(3 Credits)
Prerequisite: CPSC 305. 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 460– Human-Computer Interaction(3 Credits)
Prerequisite: CPSC 220. Basic principles, theory and practice of human-computer interaction as an interdisciplinary field. User-oriented perspective with a focus on the design and evaluation of interfaces and the communication between humans and technology.
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.
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 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 420– Modeling & Simulation(3 Credits)
Prerequisite: DATA 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.
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 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.
Please consult the UMW Academic Catalog Entry for Computer Science for specific and up-to-date major requirements.