Computer Science

General prerequisite: students may not enroll in any Computer Science course unless they have received credit for, or are eligible to enroll in, English 1157.

CSCI 1000             Introduction to Computers                                                                            3 cr.
Majors in the College of Sciences may not use this course for science elective credit. Other majors should consult with their colleges concerning use of this course toward degree credit. This course is an introduction to what computers are and how they can be used. A major emphasis is on providing hands-on laboratory experience using software packages such as word processing, spreadsheets, and database management systems. Lecture topics include history of computers, organization of a computer system, computer terminology, input-output devices and media, software development and programming, future trends, and effects on human society.

CSCI 1201             Introduction to Programming in Fortran                                                       3 cr.
Prerequisite: MATH 1115 or higher with a grade of C or better. Introduces and applies computer techniques needed to solve problems in a high-level programming language such as Fortran. Develops programming skills necessary for students to utilize the digital computer in carrying out computational assignments for other courses. Except as provided for in individual college policies, a student may receive credit in only one of CSCI 1060, 1201, 1203, 1205, and 1583. Not intended for Computer Sciences majors.

CSCI 1203             Introduction to Programming in C                                                                 3 cr.
Prerequisite: MATH 1115 or higher with a grade of C or better. Introduces and applies computer techniques needed to solve problems in a procedure-oriented language such as C. Develops programming skills necessary for students to utilize the digital computer in carrying out computational assignments for other courses. Except as provided for in individual college policies, a student may receive credit in only one of CSCI 1060, 1201, 1203, 1205, and 1583. Not intended for Computer Science majors.

CSCI 1205             Introduction to Programming in C++                                                             3 cr.
Prerequisite: MATH 1115 or higher with a grade of C or better. Introduces and applies computer techniques needed to solve problems in a high-level programming language such as C++. Develops programming skills necessary for students to utilize the digital computer in carrying out computational assignments for other courses. Except as provided for in individual college policies, a student may receive credit in only one of CSCI 1060, 1201, 1203, 1205, and 1583.

CSCI 1581             Software Design and Development I Laboratory                                         1 cr.
Prerequisite: Concurrent registration in CSCI 1583 is required. Two hours of laboratory each week to accompany CSCI 1583. Applications, exercises, and explorations in methodologies, software design, and development.

CSCI 1583             Software Design and Development I                                                             3 cr.
Prerequisite: MATH 1115 or higher with a grade of C or better; Eligibility for Math 1125 or higher, concurrent registration in CSCI 1581 is required. An introduction to software design and development using an object-oriented approach. Topics include designing specifying implementing and testing elementary classes; developing simple algorithms in an object-oriented programming language; programming-by-contract; implementing fundamental structural relations between classes. Intended primarily for Computer Science majors. Except as provided for in individual college policies a student may receive credit in only one of CSCI 1060, 1201, 1203, 1205, and 1583.

CSCI 2025             Data Structures and Applications                                                                 3 cr.
Prerequisite: CSCI 1205. A continuation of CSCI 1205. Data structures using an object-oriented language for solving scientific and engineering problems. Topics also include linear data structures, trees, graphs, and algorithm analysis. Not allowed for credit for Computer Science majors.

CSCI 2120             Software Design and Development II                                                            3 cr.
Prerequisites: CSCI 1583 and 1581; concurrent registration in CSCI 2121 is required. (The successor course CSCI 2125 has MATH 3721 as a co-requisite; credit or concurrent registration in MATH 1116 or MATH 1126, which are prerequisites for MATH 3721, is therefore recommended).  A continuation of CSCI 1583 and 1581 with emphasis on algorithmic techniques and the structuring of larger systems. Topics include sorting and searching, recursion, inheritance and polymorphism, composition, abstract classes and interfaces, exception handling, and the model-view-controller structure. Three hours of lecture.

CSCI 2121             Software Design and Development II Laboratory                                        1 cr.
Prerequisite: Concurrent registration in CSCI 2120 is required. Two hours of laboratory each week to accompany CSCI 2120. Applications, exercises, and explorations in methodologies for software design and development.

CSCI 2125             Data Structures                                                                                               3 cr.
Prerequisites: CSCI 2120 and 2121. Credit or concurrent registration in MATH 3721 is required. A continuation of CSCI 2120 and 2121 with emphasis on the design and implementation of structured data objects such as lists, stacks, queues, trees, and graphs; storage allocation for structured data objects.

CSCI 2450             Machine Structure and Assembly Language Programming                       3 cr.
Offered each semester. Prerequisites: CSCI 1060, 1201, 1203, 1205, or 1583. Assembly language programming and a survey of computer organization; structure of assemblers and loaders; introduction to operating systems.

CSCI 2467             Systems Programming Concepts                                                                  3 cr.
Prerequisites: CSCI 2120 and CSCI 2450. Introduction to the concepts and tools used in systems programming. Detailed examination of computer architecture and computer system services from a user's point of view. Topics include accessing system services such as process control, file management, and input-output, through system calls and shells.

CSCI 3080             Ethics in the Computing Profession                                                             1 cr.
Prerequisites: CSCI 2125 and any CSCI 4000-level course. Professional societies; codes of ethics; accreditation and certification; liability; software piracy; information and property; copyright; computer crime; data bank privacy; the Data Protection Act; monopoly and anti-trust questions; robotics and employment issues; VDT's and public health issues; and Trans-National Data Flow.

CSCI 3090             Undergraduate Seminar                                                                                  1 cr.
Offered each semester. Prerequisite: CSCI 2125 and any 4000-level CSCI course.  A seminar with topics presented by students, faculty, and guests. Students registering for the course must normally make a presentation to satisfy credit requirements. May be taken multiple times for credit.

CSCI 3097             Problems in Computer Science                                                         1 min. cr. - 3 max. cr.
Prerequisites: CSCI 2467, an average of B in all CSCI courses attempted, and the consent of the department. May be repeated up to a maximum of six credits. Directed effort on some relatively complex computer science projects.

CSCI 3099             Senior Honors Thesis                                                                        1 min. cr. - 6 max. cr.
Prerequisite: consent of department and Director of University Honors Program. Senior honors thesis research in computer science under the direction of a faculty member. May be repeated for a total of six credits. May not be used as a computer science elective.

CSCI 3102             Introduction to the Theory of Computation                                                 3 cr.
Prerequisites: CSCI 2125 and MATH 3721. An  introduction to the theory of computation, including automata; computability, and complexity. Topics include automata and languages: decidability, reducability, and the Church-Turing thesis; complexity and intractability

CSCI 3150             File Structures and Network Programming                                                   3 cr.
Prerequisite:  CSCI 2125.  An introduction to file structures, information models,  and simple network programming.  Topics include physical and logical organization of files, file processing, external data indexes such as B-trees, structured document/data formats such as XML, input/output models such as streams, and networking models such as sockets.

CSCI 3301             Computer Organization                                                                                  3 cr.
(ENEE 3583 and CSCI 3301 are cross-listed) Prerequisites: Credit or registration in ENEE 3582 and ENEE 3512, or credit in CSCI 2450. Concurrent enrollment in ENEE 3514 is required for students in the Computer Engineering Concentration. The design of digital computer systems is studied from the instruction set level, system architecture level, and digital logic level. Topics include: processor design and performance evaluation; instruction set design and addressing; data path design and pipelining; control structures and microprogramming; memory management, caches, and memory hierarchies; interrupts and I/O structures; introduction to parallel processing.

CSCI 4000             Senior Comprehensive Exam                                                                         0 cr.
Prerequisite: Senior status and consent of department. This is a required, zero-credit course that CSCI seniors must take by their final semester in order to graduate. This course meets twice: the first time for an organizational meeting, and the second time to take a comprehensive CSCI exam.

CSCI 4101             Analysis of Algorithms                                                                                   3 cr.
Prerequisite: CSCI 2125. Precise definition of the concept of an algorithm; techniques for algorithm verification; analyzing algorithm performance; applications to practical algorithms.

CSCI 4125             Data Models and Database Systems                                                             3 cr.
Prerequisite: CSCI 2125. Methods, structures, and algorithms used for the organization, representation, and manipulation of large data bases; design and implementation of data base management systems. Students will be required to develop a large project in a team setting.

CSCI 4130             Introduction to Cryptography                                                                        3 cr.
(MATH 4530 & CSCI 4130 are cross-listed) Prerequisites: MATH 3721. Elementary ciphers, Data Encryption Standard, Advanced Encryption Standard (Rijndael), Rivest-Adleman-Shamir (RSA) Encryption, and other topics in modern cryptography (subject to change as progress in field changes). This course is aimed at both CSCI and MATH majors, with both programming assignments and proofs as problem options.

CSCI 4208             Developing Advanced Web Applications                                                     3 cr.
Prerequisite: CSCI 2125 or CSCI 2467. Design and implementation of advanced web-based applications.  Topics covered typically include:  HTTP protocol, multi-tier architectures, technologies for server-side and client-side implementation, database connectivity, XML, session handling, web services, scalability and security in the web context.  Substantial programming project involving the development of a database-backed web application.

CSCI 4210             Introduction to Software Engineering                                                           3 cr.
Prerequisite: CSCI 2125. Study of the software life-cycle that different applications go through, from conception to release and maintenance. Topics include: discovery of appropriate software life cycle for a given project: analysis, design and testing methods; risk management; tool support; process and product management; discussion of CMM and ISO-9003. Students will be required to develop a large project in a team setting.

CSCI 4311             Computer Networks and Telecommunications                                            3 cr.
Prerequisites: CSCI 2125 and CSCI 2450. Overview of modern computer communication networks covering the theoretic multi-layered model from the top down with an emphasis on working protocols and algorithms.  Topics include client-server model, common application protocols, connectionless and reliable transport, flow and congestion control, routing, switching, shared medium protocols, transmission media and network hardware.

CSCI 4401             Principles of Operating Systems I                                                                 3 cr.
Prerequisites: CSCI 2125 and CSCI 2467. An introduction to the organization of various types of operating systems; machine structure and the functions of an operating system; multiprogramming and time-sharing environments; memory management and resource allocation; virtual memory concepts; the file system and IO device handling; protection and error recovery.

CSCI 4402             Principles of Operating Systems II                                                                3 cr.
Prerequisite: CSCI 4401. A continuation of CSCI 4401 with emphasis on time-sharing, multiprocessing, and virtual system environments; performance measurement and evaluation; system simulation; developments in Operating System theory.

CSCI 4460             Introduction to  Network and System Administration                                 3 cr.
Prerequisite:  CSCI 4401.  An introduction to network and system administration.  Topics include processes and files; scripting; system installation; boot and shutdown; process management; daemons and services; devices and drivers; network fundamentals; network file systems; network services.  Topics may also include kernel configuration; performance analysis; accounting and system logging; security.  The course requires lab projects on dedicated departmental equipment.

CSCI 4501             Programming Language Structure                                                                3 cr.
Prerequisite: CSCI 2125. A study of the concepts of programming languages as realized in a variety of commonly used languages, with emphasis on language definition and structure.

CSCI 4525             Introduction to Artificial Intelligence                                                            3 cr.
Prerequisite: CSCI 2125. Introduction to the problem domain of artificial intelligence and the methods used to solve those problems. Topics include knowledge representation, search strategies, and surveys of principal subareas of artificial intelligence such as expert systems, natural language processing, reasoning systems, games, learning, and vision. Programming assignments in a current artificial intelligence language will be required.

CSCI 4567             Bioinformatics I                                                                                               3 cr.
Prerequisite: CSCI 2125 and MATH 2314. A "hands-on" programming and project oriented introduction to the algorithms and theory used in bioinformatics and cheminformatics, with applications in computational genomics. Statistical methods for identifying motifs in biological DNA, RNA and protein sequences. Includes hidden Markov models for identifying structure in stochastic sequential data (for gene finding and for feature extraction from protein-channel ionic current measurements) and discriminative methods for use in informatics, particularly kernel based classification methods such as Random Forest.

CSCI 4568             Bioinformatics II                                                                                              3 cr.
Prerequisite: CSCI 2125 and MATH 2314 or consent of department. A "hands-on" programming and project oriented introduction to the algorithms and theory used in bioinformatics and cheminformatics, with applications in biomolecular engineering. Includes hidden Markov models for identifying structure in stochastic sequential data (for gene finding and for feature extraction from protein-channel ionic current measurements) and discriminative methods for use in informatics, particularly kernel based classification methods: such as Support Vector Machine and tree-based classification methods such as Random Forest. Students will be required to develop a large project in a team setting.

CSCI 4587             Machine Learning Methods in Bioinformatics I                                           3 cr.
Prerequisites: CSCI 4567 or CSCI 4568. Machine Learning Methods for Signal Acquisition, Structure identification, and Feature Extraction. Hidden Markov Models for structure identification and feature extraction, with applications in computational genomics and channel current power signal analysis.

CSCI 4588             Machine Learning Methods in Bioinformatics II                                          3 cr.
Prerequisite: CSCI 4567 or CSCI 4568. Machine learning methods for classification and clustering. Support vector machines for general, non-parametric, classification and clustering, with applications in Bioinformatics and Cheminformatics.

CSCI 4595             Topics in Bioinformatics                                                                                3 cr.
Prerequisite: CSCI 4567 or CSCI 4568. Upper-level course that builds on the programming-intensive applications of machine learning research in bioinformatics. Interdisciplinary (biophysics/biochemistry) applications of these results. This course may be taken twice for a total of 6 credit hours.

CSCI 4621             Computer Security                                                                                          3 cr.
Prerequisites: CSCI 4401 or CSCI 4125. Overview of information assurance; physical security models; authentication and access control mechanisms; application and operating system level security; malicious software; overview of digital forensics; encryption, including private- and public-key encryption methods. A balance between theory and historical/current practice. Students will be required to develop a large project in a team setting.

CSCI 4622             Software Reverse Engineering                                                                      3 cr.
Prerequisites: CSCI 4401 and CSCI 4621. Deep analysis of the code, structure, and functionality of software using both static and dynamic methods. The course provides a solid foundation crucial to understanding modern malicious software and crafting potential solutions to recover from and prevent attacks. Reverse engineering is also useful for creating interoperable software, for verifying that software patches function as promised, and for the simple joy of understanding at a deep level how software works.

CSCI 4623             Introduction to Computer Forensics                                                            3 cr.
Prerequisite:  CSCI 4621.  An introduction to the theory and application of computer forensics, an important area of computer security concerned with the preservation and recovery of digital evidence.  Topics include:  types of digital evidence, obfuscation methods used to hide digital evidence, such as steganography and encryption, tools for data preservation and recovery, techniques for ensuring data security, and legal issues in the preservation, recovery, and presentation of digital evidence.  The course will include a substantial lab component.

CSCI 4631             Principles of Computer Graphics                                                                  3 cr.
Prerequisite: CSCI 2125 and MATH 2511. Types of graphics hardware point plotting vector and raster technologies; techniques for defining images point vector and raster-based approaches; graphical data and program structures; image manipulation two- and three-dimensional transformations; techniques for producing perspective; hidden line removal; shading; clipping; and windowing. Applications in several fields.

CSCI 4632             Principles of Image Processing                                                                     3 cr.
Prerequisite: CSCI 2125 and MATH 3511. Introduction to the analysis, implementation and application of digital imaging enhancement and restoration algorithms including fundamental gray-level processing procedures, spatial and frequency-domain filtering, color image processing, methods and transforms for multi-resolution image processing and compression, and elementary image analysis techniques such as segmentation, morphology, and object representation and recognition.

CSCI 4650             Problem Solving and Competition Programming                                         3 cr.
Prerequisites: Credit or concurrent registration in CSCI 2125. A problem-based approach to the introduction and implementation of advanced algorithms. Students will be provided with algorithmic tools and strategies to compete in organized programming competitions. Emphasis will be placed on group-based approaches to problem solving that require advanced algorithms under time pressure.

CSCI 4661             Topics in Mobile Applications Development                                               3 cr.
Prerequisites for CSCI 4661: Credit or concurrent registration in CSCI 2125. Development of program applications for a current widely available mobile platform. Key concepts of applications programming for a mobile platform including the UI system, activity lifecycle, sensors, networking, threading, and application compatibility. May be taken 2 times for a maximum of 6 credit hours.

CSCI 4670             Fundamentals of Game Development                                                           3 cr.
Prerequisite for CSCI 4670: CSCI 2125.

Introduction to techniques used in development of computer games. Concept and level design, narrative, game mechanics, gaming physics, simple AI, 2D and 3D graphics and animation, sound, and algorithms will be introduced using a team-based project approach.

CSCI 4675             Advanced Game Development                                                                      3 cr.
Prerequisites: A grade of C or better in CSCI 4670. Advanced techniques in development of computer games. Advanced concept design, game mechanics, gaming physics, AI, graphics and animation, and algorithms will be introduced using a team-based project approach.

CSCI 4990             Special Topics in Computer Science                                                            3 cr.
Prerequisite: Consent of department. This is an advanced course whose topic changes from semester to semester. The prerequisites change as dictated by the topic. This course may be taken twice for a total of 6 credit hours.

CSCI 5101             Analysis of Algorithms                                                                                   3 cr.
Prerequisite: CSCI 2125. Precise definition of the concept of an algorithm; techniques for algorithm verification; analyzing algorithm performance; applications to practical algorithms.

CSCI 5125             Data Models and Database Systems                                                             3 cr.
Prerequisite: CSCI 2125. Methods, structures, and algorithms used for the organization, representation, and manipulation of large data bases; design and implementation of data base management systems. Students will be required to develop a large project in a team setting.

CSCI 5130             Introduction to Cryptography                                                                        3 cr.
(MATH 4530 & CSCI 4130 are cross-listed) Prerequisites: MATH 3721. Elementary ciphers, Data Encryption Standard, Advanced Encryption Standard (Rijndael), Rivest-Adleman-Shamir (RSA) Encryption, and other topics in modern cryptography (subject to change as progress in field changes). This course is aimed at both CSCI and MATH majors, with both programming assignments and proofs as problem options.

CSCI 5208             Developing Advanced Web Applications                                                     3 cr.
Prerequisite: CSCI 2125 or CSCI 2467. Design and implementation of advanced web-based applications.  Topics covered typically include:  HTTP protocol, multi-tier architectures, technologies for server-side and client-side implementation, database connectivity, XML, session handling, web services, scalability and security in the web context.  Substantial programming project involving the development of a database-backed web application.

CSCI 5210             Introduction to Software Engineering                                                           3 cr.
Prerequisite: CSCI 2125. Study of the software life-cycle that different applications go through, from conception to release and maintenance. Topics include: discovery of appropriate software life cycle for a given project: analysis, design and testing methods; risk management; tool support; process and product management; discussion of CMM and ISO-9003. Students will be required to develop a large project in a team setting.

CSCI 5311             Computer Networks and Telecommunications                                            3 cr.
Prerequisites: CSCI 2125 and CSCI 2450. Overview of modern computer communication networks covering the theoretic multi-layered model from the top down with an emphasis on working protocols and algorithms.  Topics include client-server model, common application protocols, connectionless and reliable transport, flow and congestion control, routing, switching, shared medium protocols, transmission media and network hardware.

CSCI 5401             Principles of Operating Systems I                                                                 3 cr.
Prerequisites: CSCI 2125 and CSCI 2467. An introduction to the organization of various types of operating systems; machine structure and the functions of an operating system; multiprogramming and time-sharing environments; memory management and resource allocation; virtual memory concepts; the file system and IO device handling; protection and error recovery.

CSCI 5402             Principles of Operating Systems II                                                                3 cr.
Prerequisite: CSCI 4401. A continuation of CSCI 4401 with emphasis on time-sharing, multiprocessing, and virtual system environments; performance measurement and evaluation; system simulation; developments in Operating System theory.

CSCI 5460             Introduction to  Network and System Administration                                 3 cr.
Prerequisite:  CSCI 4401.  An introduction to network and system administration.  Topics include processes and files; scripting; system installation; boot and shutdown; process management; daemons and services; devices and drivers; network fundamentals; network file systems; network services.  Topics may also include kernel configuration; performance analysis; accounting and system logging; security.  The course requires lab projects on dedicated departmental equipment.

CSCI 5501             Programming Language Structure                                                                3 cr.
Prerequisite: CSCI 2125. A study of the concepts of programming languages as realized in a variety of commonly used languages, with emphasis on language definition and structure.

CSCI 5525             Introduction to Artificial Intelligence                                                            3 cr.
Prerequisite: CSCI 2125. Introduction to the problem domain of artificial intelligence and the methods used to solve those problems. Topics include knowledge representation, search strategies, and surveys of principal subareas of artificial intelligence such as expert systems, natural language processing, reasoning systems, games, learning, and vision. Programming assignments in a current artificial intelligence language will be required.

CSCI 5567             Bioinformatics I                                                                                               3 cr.
Prerequisite: CSCI 2125 and MATH 2314. A "hands-on" programming and project oriented introduction to the algorithms and theory used in bioinformatics and cheminformatics, with applications in computational genomics. Statistical methods for identifying motifs in biological DNA, RNA and protein sequences. Includes hidden Markov models for identifying structure in stochastic sequential data (for gene finding and for feature extraction from protein-channel ionic current measurements) and discriminative methods for use in informatics, particularly kernel based classification methods such as Random Forest.

CSCI 5568             Bioinformatics II                                                                                              3 cr.
Prerequisite: CSCI 2125 and MATH 2314 or consent of department. A "hands-on" programming and project oriented introduction to the algorithms and theory used in bioinformatics and cheminformatics, with applications in biomolecular engineering. Includes hidden Markov models for identifying structure in stochastic sequential data (for gene finding and for feature extraction from protein-channel ionic current measurements) and discriminative methods for use in informatics, particularly kernel based classification methods: such as Support Vector Machine and tree-based classification methods such as Random Forest. Students will be required to develop a large project in a team setting.

CSCI 5587             Machine Learning Methods in Bioinformatics I                                           3 cr.
Prerequisites: CSCI 4567 or CSCI 4568. Machine Learning Methods for Signal Acquisition, Structure identification, and Feature Extraction. Hidden Markov Models for structure identification and feature extraction, with applications in computational genomics and channel current power signal analysis.

CSCI 5588             Machine Learning Methods in Bioinformatics II                                          3 cr.
Prerequisite: CSCI 4567 or CSCI 4568. Machine learning methods for classification and clustering. Support vector machines for general, non-parametric, classification and clustering, with applications in Bioinformatics and Cheminformatics.

CSCI 5595             Topics in Bioinformatics                                                                                3 cr.
Prerequisite: CSCI 4567 or CSCI 4568. Upper-level course that builds on the programming-intensive applications of machine learning research in bioinformatics. Interdisciplinary (biophysics/biochemistry) applications of these results. This course may be taken twice for a total of 6 credit hours.

CSCI 5621             Computer Security                                                                                          3 cr.
Prerequisites: CSCI 4401 or CSCI 4125. Overview of information assurance; physical security models; authentication and access control mechanisms; application and operating system level security; malicious software; overview of digital forensics; encryption, including private- and public-key encryption methods. A balance between theory and historical/current practice. Students will be required to develop a large project in a team setting.

CSCI 5622             Software Reverse Engineering                                                                      3 cr.
Prerequisites: CSCI 4401 and CSCI 4621. Deep analysis of the code, structure, and functionality of software using both static and dynamic methods. The course provides a solid foundation crucial to understanding modern malicious software and crafting potential solutions to recover from and prevent attacks. Reverse engineering is also useful for creating interoperable software , for verifying that software patches function as promised, and for the simple joy of understanding at a deep level how software works.

CSCI 5623             Introduction to Computer Forensics                                                            3 cr.
Prerequisite:  CSCI 4621.  An introduction to the theory and application of computer forensics, an important area of computer security concerned with the preservation and recovery of digital evidence.  Topics include:  types of digital evidence, obfuscation methods used to hide digital evidence, such as steganography and encryption, tools for data preservation and recovery, techniques for ensuring data security, and legal issues in the preservation, recovery, and presentation of digital evidence.  The course will include a substantial lab component.

CSCI 5631             Principles of Computer Graphics                                                                  3 cr.
Prerequisite: CSCI 2125 and MATH 2511. Types of graphics hardware point plotting vector and raster technologies; techniques for defining images point vector and raster-based approaches; graphical data and program structures; image manipulation two- and three-dimensional transformations; techniques for producing perspective; hidden line removal; shading; clipping; and windowing. Applications in several fields.

CSCI 5632             Principles of Image Processing                                                                     3 cr.
Prerequisite: CSCI 2125 and MATH 3511. Introduction to the analysis, implementation and application of digital imaging enhancement and restoration algorithms including fundamental gray-level processing procedures, spatial and frequency-domain filtering, color image processing, methods and transforms for multi-resolution image processing and compression, and elementary image analysis techniques such as segmentation, morphology, and object representation and recognition.

CSCI 5661             Topics in Mobile Applications Development                                               3 cr.
Prerequisites for CSCI 4661: Credit or concurrent registration in CSCI 2125. Development of program applications for a current widely available mobile platform. Key concepts of applications programming for a mobile platform including the UI system, activity lifecycle, sensors, networking, threading, and application compatibility. May be taken 2 times for a maximum of 6 credit hours.

CSCI 5670             Fundamentals of Game Development                                                           3 cr.
Prerequisite for CSCI 4670: CSCI 2125.  Introduction to techniques used in development of computer games. Concept and level design, narrative, game mechanics, gaming physics, simple AI, 2D and 3D graphics and animation, sound, and algorithms will be introduced using a team-based project approach.

CSCI 5675             Advanced Game Development                                                                      3 cr.
Prerequisites: A grade of C or better in CSCI 4670. Advanced techniques in development of computer games. Advanced concept design, game mechanics, gaming physics, AI, graphics and animation, and algorithms will be introduced using a team-based project approach.

CSCI 5990             Special Topics in Computer Science                                                            3 cr.
Prerequisite: Consent of department. This is an advanced course whose topic changes from semester to semester. The prerequisites change as dictated by the topic. This course may be taken twice for a total of 6 credit hours.

CSCI 6090             Advanced Problems in Computer Science                                      1 min. cr. - 3 max. cr.
Prerequisite: consent of department. A projects course of independent work under the direction of a faculty supervisor whose sponsorship must be obtained in advance. May be taken multiple times for a maximum of 3 credit hours. Cannot be used for degree credit by students who elect to fulfill the thesis degree requirements.

CSCI 6101             Theory of Algorithms and their Complexity                                                 3 cr.
Prerequisites: CSCI 4101. Advanced study of algorithms and their complexity; the notions of time and space complexity; design methods, including divide and conquer, and the greedy method; polynomial and nondeterministic polynomial algorithms; the class of NP-complete algorithms.

CSCI 6110             Applied Combinatorics and Graph Theory                                                   3 cr.
Prerequisites: CSCI 4101. A study of combinatorial and graph theoretic techniques for complexity analysis. Includes generating functions, recurrence relations, Polya's theory of counting, planar directed and undirected graphs, and NP-complete problems of combinatorial or graph-theoretic nature. Application of techniques to analysis of algorithms in graph theory, as well as more general problems, such as sorting and searching.

CSCI 6120             Theory of Computation                                                                                  3 cr.
Prerequisites: CSCI 3102. A survey of formal models for computation. Includes Turing machines, partial recursive functions, recursive and recursively enumerable sets, the recursion theorem, Church's thesis, Godel numbering, computational complexity, uncomputability, intractability, and unsolvability.

CSCI 6130             Data Encryption and Cryptology                                                                   3 cr.
Prerequisites: CSCI 4101 and MATH 2511. A study of the methods used in data encryption and related cryptologic problems. The history of early cryptography, including the Caesar shift, Vigenere table, Playfair square, and Enigma machines. Modern cryptographic problems, including the Data Encryption Standard, the key management problem, the public-key encryption, knapsack methods, number-theoretic methods, and the Rivest-Shamir-Adelman public-key cryptosystem, digital signature, the Digital Signature Standard, and cryptanalysis of knapsacks. Other cryptologic problems, including threshold schemes, zero-knowledge protocols, mental poker, and implementations on uniprocessor machines, networks, and parallel machines.

CSCI 6140             Formal Languages                                                                                          3 cr.
Prerequisite: CSCI 3102. Theory and application of formal language systems and automata. Emphasis will be placed on formal systems, the languages they generate, and techniques used to parse strings in those languages.

CSCI 6250             Big Data Analytics and Systems                                                                   3 cr.
Prerequisite: CSCI 4125 and CSCI 4401. This course covers a combination of knowledge in data mining, database warehousing, and distributed systems for utilizing information assets of high volume, high velocity, high variety, and high veracity. The class discussions will cover the key problems, theoretical perspectives, methodologies, algorithms, technologies and tools in these involved areas such as data exploration techniques, linked data perspectives, semantic data services, statistical analysis for big data, and the supporting tools in distributed systems including HADOOP, Map Reduce, Hive and HBase as well as Sal OLAP extensions.

CSCI 6350             Development of Distributed Software                                                           3 cr.
Prerequisite:  CSCI 4401. This course provides a systematic study of concepts, methodologies, models and methods that specifically address problems in the development of distributed software.  The topics include architectural design for distributed applications, distributed object models, interface definition languages, concurrent task structuring, modeling for dynamic behavior, and static analysis and debugging for distributed programs.

CSCI 6361             Topics in Mobile Computing                                                                          3 cr.
Prerequisite: CSCI 4401.  This course provides an introduction to major topics in mobile computing, including software engineering issues for resource-constrained devices (e.g. cellular phones, palmtops), mobile databases, fault tolerance, service discovery, and wireless networking.  The course has substantial theoretical and applied components.  Students will be required to develop a non-trivial mobile application and prepare a class presentation on a topic in mobile computing.

CSCI 6363             Agile Software Engineering                                                                           3 cr.
Prerequisites: CSCI 4210 or consent of department. Students will learn and exercise with various agile techniques and best practices adopted in the software industry. Topics include (but are not limited to) prototyping, scrum, version control, continuous integration, test driven development, feature-driven development, lean development, project estimation, evaluation, and iterative development.

CSCI 6401             Concurrent Programming                                                                               3 cr.
Prerequisite: CSCI 4401.  A systematic study of concepts, theories, methods and algorithms that specifically address problems in distributed programming.  Topics include concurrency, interference, monitors and distributed programming issues, such as: synchronous and asynchronous message passing, remote procedure call, and rendezvous.

CSCI 6450             Principles of Distributed Systems                                                                 3 cr.
Prerequisite: CSCI 4401.  A study of the concepts and design principles used in the construction of distributed computer systems.  Topics include architecture and design goals; distributed time management; state and deadlock detection; name resolution; synchronization, mutual exclusion, and communication; collaborating servers; protection and security; error recovery.

CSCI 6452             Cloud Computing                                                                                            3 cr.
Prerequisite: A grade C or better in CSCI 4401/5401. An introduction to the basics of the cloud computing paradigm: origins, enabling technologies, computing mechanisms and architectures, economic and delivery models. Hands-on experience with cloud technologies, including map/reduce, Hadoop and related technologies. Students will learn how to build algorithms for the cloud and optimize them for performance.

CSCI 6501             Formal Methods in Programming Languages                                              3 cr.
Prerequisite: CSCI 4501. Formal definitions and specifications for the semantics of programming languages including lambda-calculus, domain theory, and denotational descriptions of common programming language concepts.

CSCI 6588             Advanced Machine Learning in Bioinformatics II                                        3 cr.
Prerequisites: CSCI 6587. An in-depth survey of advanced machine learning algorithms and their applications to bioinformatics. Selected semi-supervised, supervised and unsupervised learning algorithms will be discussed in much technical detail. Applications to transcriptomics, proteomics, and genomics will be introduced. Students will have opportunities to learn state-of-the-art machine learning algorithms, implementations, and their application to solve real-world problems.

CSCI 6595             Advanced Topics in Bioinformatics                                                              3 cr.
Prerequisite: CSCI 4567 or CSCI 4568 and one of the following: CSCI 4587, CSCI 4588, or CSCI 4595. Advanced graduate course on programming-intensive applications of bioinformatics research involving Hidden Markov Models and Support Vector Machines. Interdisciplinary (biophysics/biochemistry/EE) applications of these results. May be taken twice for a maximum of 6 credit hours.

CSCI 6603             Programming Language Security                                                                  3 cr.
Prerequisites: CSCI 2450, CSCI 4501, and CSCI 4621. Programming language security features and , conversely, language features that give rise to vulnerabilities. Topics include the development of secure programs of secure programs in high-level programming languages such as C/C++/Java, programming languages designed from the ground up to support security, and software engineering security principles and patterns.

CSCI 6621             Topics in Network Security and Forensics                                                   3 cr.
Prerequisite:  CSCI 4621 and CSCI 4623.  A graduate course in advanced network security and computer forensics, emphasizing the development and application of tools and techniques for securing computer networks and preservation and recovery of digital evidence in networked environments.  Topics include:  basic issues in network security, network intrusion detection, honeypots and honeynets, and network forensics analysis. The course will include a substantial lab component.

CSCI 6625             Network Penetration Testing and Defense                                                   3 cr.
Prerequisites: CSCI 4311/5311 . Introduces the basic methodology of network penetration testing as a means to continually improve the cyber security mechanisms deployed by an organization. Provides students with hands-on experience with reconnaissance, footprinting, scanning, vulnerability detection, reporting and remediation techniques employed during a test. Student learn how perform tests of introductory-to-intermediate level of sophistication similar to the ones required for professional certification.

CSCI 6627             Industrial Control Systems Security                                                              3 cr.
Prerequisites: CSCI 4621 and CSCI 4311, or consent of department. This course provides an introduction to the security of industrial control systems. Control systems are widely used to automate physical industrial processes such as gas pipelines, power generation and distribution, water filtering, waste management, etc. This course introduces the basics of industrial control systems, how their components interact with each other, how they can be programmed, their network protocols, cyber vulnerabilities and threats related to control systems, and how they are tackled in industry.

CSCI 6631             Advanced Computer Graphics                                                                      3 cr.
Prerequisite: CSCI 4631. Commonly-used data structures for graphics displays and raster scan graphics algorithms for line and circle drawing; polygon filling; antialiasing; curve fitting; surface fitting; two- and three-dimensional clipping, including clipping to arbitrary convex volumes; hidden-line and hidden-surface removal, including ray tracing; rendering, including local and global illumination models, texture shadows, transparency, and color effects.

CSCI 6633             Computer Vision                                                                                             3 cr.
Prerequisite: CSCI 4632.  This course provides an overview of fundamental techniques for representing and recognizing visual patterns in two or three dimensions.  Topics covered include segmentation and morphology, pattern recognition and classification, color- and text-based measures, motion analysis and optical flow, three-dimensional models from stereo imaging, knowledge-based systems and scene understanding.

CSCI 6634             Data Visualization                                                                                           3 cr.
Prerequisite:  CSCI 4631.  An introduction to standard techniques for displaying, exploring, and understanding non-visual data from medical, scientific, engineering, financial, or other domains.  Topics covered will include visualization models, data representation, color-mapping and contouring, volume rendering, data transformations, modeling, image processing techniques, animation and user interaction.

CSCI 6635             Theory & Computer Applications for Pattern Recognition                         3 cr.
Prerequisites:  CSCI 4525 and MATH 2511.  A study of the concepts behind pattern recognition and classification with applications in the analysis of various types of data.  Topics include:  design of a pattern recognition system, Bayesian decision theory, Maximum-likelihood estimation, nonparametric techniques, linear discriminant analysis, multilayer neural networks, non-metric techniques, stochastic methods, unsupervised learning and clustering (including hierarchical and online clustering, component analysis, low dimensional representations).

CSCI 6640             Computational Geometry                                                                               3 cr.
Prerequisite: CSCI 4101. Using the fields of pattern recognition, computer graphics, image processing, and algorithm design for source material, this course will concentrate on algorithms and techniques for geometric computations. Topics include: computation of convex hulls, decomposition of polygons, polygon approximation, planar visibility, and other current topics of research. Students will be required to design and analyze a number of algorithms.

CSCI 6645             Planning Algorithms in Artificial Intelligence                                              3 cr.
Prerequisites: CSCI 4525/5525 or consent of department. Planning a formalism within classical Artificial Intelligence research that studies how to represent and discover sequences of actions that change the world from some initial state to a desired goal state. This class surveys planning research from the 1960's to the present. Topics covered include partial-order and least-commitment planners, plan graphs, planners based on satisfiability and constraint-satisfaction, and modern state-space planning heuristics.

CSCI 6650             Intelligent Agents and Multi-Agent Systems                                                3 cr.
Prerequisite:  CSCI 4525.  An investigation of computational systems in which several intelligent agents or agents and humans, interact.  Includes architectures for building intelligent agents, design and implementation of multi-agent systems, inter-agent communication languages and protocols, problem-solving, planning, learning and adaptation techniques in multi-agent systems.

CSCI 6990             Topics In Advanced Computer Science                                                         3 cr.
Prerequisite: consent of department. This is an advanced graduate-level course whose topics change from semester to semester. The prerequisites change as dictated by the topic. This course may be taken multiple times for credit.

CSCI 7000             Thesis Research                                                                               1 min. cr. - 9 max. cr.
To be repeated for credit until thesis is accepted.

CSCI 7040             Examination or Thesis Only No Credit                                                           0 cr.
Open to students in a thesis program who have only (other than application for degree) the final typing and acceptance by the Graduate School of their thesis or dissertation or to students in a non-thesis program who have only (other than application for degree) to pass the final examination to complete graduation requirements.