Krzystof J. Cios, Ph.D.
Professor and chair

computer-science.egr.vcu.edu

The Department of Computer Science offers undergraduate and graduate programs. The Bachelor of Science in Computer Science is a rigorous, highly concentrated curriculum of computer science courses. It includes advanced study in several important areas of computer science and provides a strong foundation in this discipline. Every course is taught by full-time faculty members who also serve as advisers to both undergraduate and graduate students.

The master’s degree program emphasizes continuing self-development of individuals currently engaged in science-, technology- and engineering-related fields. It prepares persons who have completed undergraduate majors in these fields for entry into careers in areas that use computing technology. Both the theoretical and applied aspects of computer science are emphasized in this program. The program offers courses in a wide range of areas in computer science including machine learning, artificial intelligence, cybersecurity and cloud computing, data mining, bioinformatics, and medical informatics.

CMSC   101. Introduction to Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: MATH   141 or the equivalent with a minimum grade of C. An introduction to the work of computer scientists, including an overview of current research and application areas as well as career opportunities. Topics include problem-solving, the basics of computer organization, the software engineering life cycle, research resources and social and ethical aspects of technology. Additional topics also include binary, hexadecimal, two’s complement, floating point representation, ASCII and Unicode.

CMSC   191. Topics in Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. May be repeated for credit. Prerequisite: permission of the instructor. This course will teach selected topics in computer science. See the Schedule of Classes for specific topics to be offered each semester and prerequisites.

CMSC   245. Introduction to Programming Using C++. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: MATH   151 or satisfactory score on the Mathematical Placement Test. Students registering for CMSC   245 must have taken the VCU Mathematics Placement Test within the one-year period immediately preceding the beginning of the course. An exception to this policy is made in the case in which the stated alternative prerequisite course has been completed at VCU. Students are expected to have fundamental computer skills. Introduction to the concepts and practice of structured programming using C++. Problem-solving, top-down design of algorithms, objects, basic C++ syntax, control structures, functions and arrays. This course is intended for engineering majors.

CMSC   246. Advanced Programming Using C++. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   245. Advanced programming in C++. Topics include program design, objects, classes, inheritance, files, strings, linked lists, stacks, queues, binary trees, recursion, and basic searching and sorting techniques. This course is intended for engineering majors.

CMSC   255. Introduction to Programming. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours. 4 credits. Prerequisite: calculus-level placement on the VCU Mathematics Placement Test within the one-year period immediately preceding enrollment in the couse, or MATH   151 or equivalent. Students are expected to have fundamental computer skills. Introduction to object-oriented programming using Java. Topics include problem-solving, top-down design of algorithms using control structures, methods, arrays, basic I/O, basic concepts of objects and classes in Java, Java classes for manipulating strings, and introduction to program testing, UML notation and integrated development environments. Students may not receive credit for both CMSC   255 and INFO   250.

CMSC   256. Data Structures and Object Oriented Programming. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   255 with a minimum grade of C; corequisite: CMSC   302. Advanced programming using Java. Topics include introduction to object-oriented design, inheritance, polymorphism, exceptions, interfaces, linked lists, stacks, queues, binary trees, recursion, and basic searching and sorting techniques. Continued focus on program testing and UML notation. Students may not receive credit for both CMSC   256 and INFO   350.

CMSC   257. Computer Systems. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   256 with a minimum grade of C. Topics include UNIX essentials; system programming in C; machine-level representation and organization of programs/data, arrays and pointers; types, structs and unions; strings; bit/byte operations; memory management; shell programming; input/output, including file handling; debugging; signals; network programming using sockets; program concurrency using forks and threads; experiments on program performance and optimization techniques.

CMSC   302. Introduction to Discrete Structures. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   255 with minimum grade of C. Combinatorial and sequential circuits, algorithms and algorithm analysis, recursion, recurrence relations, graphs, trees.

CMSC   303. Introduction to the Theory of Computation. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   302 or the equivalent with a grade of C or better. Complexity classes, grammars, automata, formal languages, Turing machines, computability.

CMSC   311. Computer Organization. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   302 with minimum grade of C; corequisite: CMSC   257. Introduction to the basic organization of computers including elementary digital logic design, processor and arithmetic/logic unit design, data paths, memory hierarchy, I/O devices, instruction set architecture and addressing modes.

CMSC   312. Introduction to Operating Systems. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   311 or EGRE   364. Computer systems design, I/O processing, secondary memory organization, command languages, memory management and job scheduling. Students will work in teams to design and implement an operating system simulation.

CMSC   355. Software Engineering: Specification and Design. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   256 or EGRE   246, either with a minimum grade of C. Provides an overview of the software engineering process and software life-cycle models. Gives a detailed study of the analysis, specification and design phases. Students will work in teams to gain experience in software development methodology, developing specification and design documents and developing a prototype.

CMSC   391. Topics in Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. May be repeated for credit. Prerequisite: permission of the instructor. This course will teach selected topics in computer science. See the Schedule of Classes for specific topics to be offered each semester and prerequisites.

CMSC   401. Algorithm Analysis with Advanced Data Structures. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC   256 with a grade of C or better and CMSC   302 with a grade of C or better. Introduction to algorithm analysis and complexity classes. Advanced data structures topics including multiple linked lists, height-balanced trees, B-trees, hashing and graph representation; incorporating data structures into object-oriented design. Analysis of various searching and sorting algorithms. Algorithm design topics include divide-and-conquer, dynamic programming and greedy methods.

CMSC   403. Programming Languages. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC   256 with a grade of C or better and CMSC   303. Survey of representative modern programming languages. Formal definition of programming languages including specifications of syntax and semantics. Precedence, infix, prefix and postfix notation. Global properties of algorithmic languages. Sub-routines, co-routines and tasks. List processing, string manipulation, data description and simulation languages. Run-time representation of program and data structures.

CMSC   404. Compiler Construction. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC   401 and 403. A first course in compiler theory and construction. Formal description of languages, underlying theory and design techniques for compilers, lexical analysis, syntax analysis, syntax-directed translation, intermediate languages, run-time system management, code generation, code optimization, compiler-building tools.

CMSC   409. Artificial Intelligence. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC   401 with a minimum grade of C and MATH   310. Covers problem spaces, problem-solving methods, game playing, knowledge representatives, expert systems, natural language understanding.

CMSC   411. Computer Graphics. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC   355 and MATH   310. Presents mathematical techniques for graphic development and transformation, curve and surface approximation and projections, graphical languages and data structures and their implementation, graphic modeling.

CMSC   412. Social Network Analysis and Cybersecurity Risks. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC   401 with a minimum grade of C. Covers network models, link prediction and analysis, centrality measures, random networks, power-laws and preferential attachment, small world phenomenon and decentralized search, community structure, information propagation in networks, and security and privacy issues in OSNs.

CMSC   413. Introduction to Cybersecurity. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   401 with a minimum grade of C. This course provides introduction and basic concepts of computer security, cyber attacks, cyber defense, cyber forensics and cyber ethics.

CMSC   414. Computer and Network Security. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   401 with a minimum grade of C. Corequisite: CMSC   312. This course covers the best practices of computer systems and network security. Key topics include security architecture, cryptographic systems and security management tools.

CMSC   415. Introduction to Cryptography. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   401 with a minimum grade of C. This course provides a rigorous and theoretical introduction to modern cryptography. Key topics include symmetric key encryption and authentication, public key encryption, and digital signatures.

CMSC   416. Introduction to Natural Language Processing. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   401 with a minimum grade of C. Covers rule-based and statistical methods for creating computer programs that analyze, generate and understand human language. Topics include regular expressions and automata, context-free grammars, probabilistic classifiers, and machine learning. Word-level, syntactic and semantic processing are all considered. Application to real-world problems such as spell-checking, Web search, automatic question answering, authorship identification and developing conversational interfaces.

CMSC   420. Software Engineering: Project Management. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC   355 with a minimum grade of C. Study of the logistics of team software development. Students work in teams to gain experience in software management and develop the components of a larger software product. Topics include risk management, project planning, quality management, configuration management and software testing.

CMSC   451. Senior Project. 3 Hours.

Semester course; 3 laboratory hours. 3 credits. Prerequisites: senior standing in the computer science department; 24 credits in computer science, including CMSC   355 and CMSC   508, both with minimum grades of C; UNIV   200 or HONR   200 or equivalent. Capstone project or experience for the computer science major; research and presentation methods in computer science. Each student will participate, either individually or as part of a team, in a project or other experience approved by the course coordinator or sponsored by another computer science faculty member. Each student will write and revise a research paper on a technical topic associated with his or her project or experience. Students will submit a detailed written description of their proposed project or experience and will present orally some aspect of what they have learned and/or done during the semester. (This course cannot be counted as upper-level CMSC electives for students graduating under bulletins prior to 2008-09.).

CMSC   452. Senior Project. 3 Hours.

Semester course; 1 lecture and 2 laboratory hours. 3 credits. Prerequisites: senior standing in the computer science department; CMSC   451 with a minimum grade of C. Capstone project or experience for the computer science major; research and presentation methods in computer science; ethical, legal and social issues in computing; and professional responsibilities of computer scientists. Each student will participate, either individually or as part of a team, in a project or other experience approved by the course coordinator or sponsored by another computer science faculty member. Each student will write and revise a research paper on a technical topic associated with his or her project or experience. Students must continue on the same project that was started in CMSC   451. A final project report and presentation, which will include a discussion of associated legal, social and/or ethical issues, are due at the conclusion of the two-semester project or experience. (This course cannot be counted as upper-level CMSC electives for students graduating under bulletins prior to 2008-09.).

CMSC   491. Topics in Computer Science. 1-3 Hours.

Semester course; variable hours. 1-3 credits. May be repeated for credit with different content. Prerequisite: permission of instructor. This course will cover selected topics in computer science. See the Schedule of Classes for specific topics to be offered each semester.

CMSC   492. Independent Study. 2-4 Hours.

Semester course; variable hours. 2, 3 or 4 credits per semester. Maximum 4 credits per semester; maximum total of 6 credits. Generally open only to students of junior or senior standing who have acquired at least 12 credits in the departmental discipline. Determination of the amount of credit and permission of instructor and department chair must be procured prior to registration of the course. The student must submit a proposal for investigating some area or problem not contained in the regular curriculum. The results of the student's study will be presented in a report.

CMSC   493. Computer Science Internship. 1-3 Hours.

Semester course; variable hours. 1-3 credits. May be repeated for up to 3 credits. Prerequisites: CMSC   401 and CMSC   403. Approval of Computer Science Undergraduate Credentials Committee is required prior to registration. A minimum of 30 clock hours per credit in an information technology environment. The internship is designed to provide practical experience in the computing industry. Student must present a written report reflecting upon internship experience. Graded as pass/fail. Not applicable toward the computer science major.