**Courses**

**Computer and Information Science**

- CSCI-N 100 Introduction to Computers and Computing (3 cr.) P: or C: MATH 001, M001, or equivalent. No computing experience assumed. How computers work, word processing, spreadsheets, file management, and Internet skills. Emphasis on problem-solving tech-niques. Lecture and laboratory. Credit given for only one of CSCI-N 100, CPT 10600, CIT 10600, or BUS-K 201.
- CSCI-N 199 Introductory Computing Topics (topic varies) (1-3 cr.) Seminars in emerging technologies. May be repeated for credit.
- CSCI-N 200 Programming Concepts (3 cr.) Explore the Big Ideas of Computer Science (CS) and Computational Thinking (CT) through hands-on explorations with social networking, gaming, big data, robots, programming and more. Learn about the creativity, usefulness and breadth of Computer Science in a fun way that can enhance any field of study.
- CSCI-N 201 Programming Concepts (3 cr.) Summary of basic computing topics, problem solving techniques, and their application to computing. Introduction to programming concepts with a focus on language-independent principles, such as algorithm design, debugging strategies, essential control structures, and basic data structure concepts. Lecture and laboratory.
- CSCI-N 207 Data Analysis Using Spreadsheets (3 cr.) Summary of basic computing topics. An introduction to data analysis using spreadsheets. Emphasis on the application of computational problem-solving techniques. Lecture and laboratory.
- CSCI-N 211 Introduction to Databases (3 cr.) Summary of basic computing topics. Introduction to database design concepts, creation of user forms, development of databases, querying techniques, and building reports. Focus on relational database systems from development and administration point of view. Lecture and laboratory.
- CSCI-N 241 Fundamentals of Web Development (3 cr.) Introduction to writing content for the Internet and World Wide Web. Emphasis on servers, hand-coded HTML, Cascading Style Sheets, and extending HTML with other Web technologies. Lecture and laboratory.
- CSCI-N 299 Survey of Computing Applications (topic varies) (1-3 cr.) An introduction to an emerging technology in the computing field. It will emphasize the various problems technology helps to solve and specific problem-solving strategies. Lecture and laboratory. May be repeated for credit.
- CSCI-N 300 Mobile Computing Fundamentals (3 cr.) Survey of programming and application development for mobile computing devices. Topics include mobile technology, location-based technology, mobile security, mobile platforms, programming languages and application development for mobile devices. Lecture and Laboratory.
- CSCI-N 301 Fundamental Computer Science Concepts (3 cr.) P: MATH-M 118. An introduction to fundamental principles of computer science, including hardware architecture, algorithms, software engineering, and data storage. Lecture and laboratory.
- CSCI-N 305 C Language Programming (3 cr.) The basics of computer programming concepts using the C programming language. Emphasis on problem solving and algorithm implementation using a universal subset of the C programming language. Lecture and laboratory.
- CSCI-N 311 Advanced Database Programming, Oracle (3 cr.) P: Recommended CSCI-N 211 or equivalent. Focus on the concepts and skills required for database programming and client server development. Concepts will apply to any modern distributed database management system. Emphasis on developing Oracle SQLPlus scripts, PL/SQL server side programming, and Oracle database architecture. Students with programming experience in ODBC compliant languages will be able to practice connecting such languages to an Oracle database. Lecture and laboratory.
- CSCI-N 317 Fundamental Computer Science Concepts (3 cr.) P: CSCI-N 207 or equivalent. (Pending) A survey and illustration of popular computational software used in multiple scientific domains to support data processing and scientific research. This class focuses on teaching how to use software to efficiently process data in terms of modeling, simulating, visualizing and data-mining. Fundamental concepts related to scientific computing are introduced briefly. Lecture and Lab.
- CSCI-N 321 System and Network Administration (3 cr.) Fundamental concepts of system administration. Design and administration of network servers and workstations. Focus on basic network concepts, such as user account administration, resource allocation, security issues, and Internet service management. Lecture and laboratory.
- CSCI-N 331 Visual Basic Programming (3 cr.) An introduction to programming with a focus on rapid application development environments, event-driven programming, and programming in the Windows environment. Course will demonstrate how the major application types (spreadsheets, databases, text editors) are written. Lecture and laboratory.
- CSCI-N 335 Advanced Programming, Visual Basic (3 cr.) Databases and VB, object-oriented design and practice, the component object model, interobject communication, related RAD environments such as VB for Applications and ActiveX using the Windows API, and generating online help. Lecture and laboratory.
- CSCI-N 341 Introduction to Client-Side Web Programming (3 cr.) P: Recommended CSCI-N 241 or equivalent. Introduction to programming with a focus on the client-side programming environment. Programming using languages commonly embedded in Web browsers. Lecture and laboratory.
- CSCI-N 342 Server-Side Programming for the Web (3 cr.) P: Recommended CSCI-N 341. Designing and building applications on a Web server. Focuses on the issues of programming applied to Web servers. Emphasis on relational database concepts, data design, languages used on the server, transaction handling, and integration of data into Web applications.
- CSCI-N 343 Object-Oriented Programming for the Web (3 cr.) P: CSCI-N 341 or CSCI-N 307. Algorithm design and development within the object-oriented paradigm. Students will utilize Java to create Web-based application software with strong user interaction and graphics. In addition, students will utilize Oracle and SQL to learn introductory database design principles, coupling back-end database operation to application software. Lecture and laboratory.
- CSCI-N 345 Advanced Programming, Java (3 cr.) P: CSCI-N 307 or CSCI-N 331 or CSCI-N 341 or equivalent. A Java language course designed for students familiar with programming and the World Wide Web. Focus on the unique aspects of Java, Applet, and GUI design, object-oriented programming, event-handling, multithreaded applications, animation, and network programming. Lecture and laboratory.
- CSCI-N 351 Introduction to Multimedia Programming (3 cr.) An integration of computing concepts and multimedia development tools. An introduction to the science behind multimedia (compression algorithms and digital/audio conversion). Use of authoring tools to create compositions of images, sounds, and video. Special emphasis given to using the Web as a multimedia presentation environment. Lecture and laboratory.
- CSCI-N 355 Introduction to Virtual Reality (3 cr.) Explore concepts of 3D imaging and design including primitive shapes, transformations, extrusions, face sets, texture mapping, shading, and scripting. Lecture and laboratory.
- CSCI-N 361 Fundamentals of Software Project Management (3 cr.) P: Recommended CSCI-N 300-level programming class. Tools and techniques used to manage software projects to successful completion. Problem-solving focus to learn specification development and management, program success metrics, UML modeling techniques, code design and review, principles, testing procedures, usability measures, release and revision processes, and project archival. Lecture and laboratory.
- CSCI-N 399 Topics in Computing (topic varies) (1-3 cr.) P: CSCI-N 200-level course or equivalent. An investigation of an emerging language or topic in computing. May be repeated for credit.
- CSCI-N 410 Mobile Computing Application Development (3 cr.) Focus of this course is to give programmers information they need to develop new applications or move existing applications to handheld devices and other resource-constrained hardware. All programming is done via Visual Basic.NET or C#.
- CSCI-N 420 Mobile Computing Cross Platform Development (3 cr.) P: CSCI-N 343. Survey of programming & application development for mobile and wireless computing devices. Topics include recommended practices using the J2 platform for micro devices such as cell phones and PDAs, the implementation of cross-device GUI's, using event handlers and remote server access.
- CSCI-N 430 Mobile Computing & Interactive Applications (3 cr.) P: CSCI-N 201. Introduction to programming with emphasis on the Flash ActionScript environment as used in mobile devices. Topics include interface design for mobile devices, use of Flash as an application environment, game and multimedia development, communication with a web server, and parsing XML data.
- CSCI-N 431 E-Commerce with ASP.NET (3 cr.) Topics include basic Web controls, form validation, connecting to an Enterprise-level database, SSL, and sending email within an ASP.NET Web page. A significant software development final project creating a functional Web store is featured. Lecture and laboratory.
- CSCI-N 435 Data Management Best Practices with ADO.NET (3 cr.) A study of managing data in the .NET environment. Focus on strategies to efficiently manage data for large-scale projects. Topics include XML, DataSets, SQL, and error management. Lecture and laboratory.
- CSCI-N 443 XML Programming (3 cr.) P: CSCI-N 241 and an CSCI-N 300-level programming course. Fundamentals of XML programming language. After mastering fundamental XML scripting syntax, the course focuses on narrative-centric and data-centric XML applications. Narrative content includes CSS, DTD and XSLT, and X-path, -link, and -pointer tools; data-centric content includes the DOM, Schemas, and ADO/ASP. A required masterpiece project summarizes course competencies. Lecture and laboratory.
- CSCI-N 450 Mobile Computing with Web Services (3 cr.) P: CSCI-N 410 or CSCI-N 420 or CSCI-N 430. Fundamental concepts of data transport between client devices and a server. Topics include web services, SOAP (simple object access protocol), and XML.
- CSCI-N 451 Web Game Development (3 cr.) Study of basic game development principles with a focus on client-side web delivery. Topics to include creation of sprite objects, user interaction concepts, basic intelligence concepts, game data structures, and basic game physics. Lecture and laboratory.
- CSCI-N 461 Software Engineering for Applied Computer Science (3 cr.) P: CSCI-N 361 or consent of the instructor. This is a survey course covering software engineering concepts, tools, techniques, and methodologies. The topics covered include software engineering, software process and its difficulties, software lifecycle models, project planning including cost estimation, design methodologies including structured design, data structure-oriented design, object-oriented design, and software testing. This course is intended for nonmajors, and credit will not be awarded to computer science majors.
- CSCI-N 485 Capstone Project in Applied Computing (3 cr.) P: CSCI-N 301 and CSCI-N 341. This course provides students with a mechanism for producing and integrating technical achievement meritorious of program culmination. The project will demonstrate subject matter mastery within project development guidelines and reflect both a breadth and depth of technically focused problem-solving skills.
- CSCI-N 499 Topics in Applied Computing (topic varies) (1-3 cr.) P: CSCI-N 300-level course or equivalent. An investigation and examination of an emerging discipline in applied computer science.
- CSCI 12000 Windows on Computer Science (1 cr.) A first-year seminar for beginning majors in Computer Science. Open to all beginning IUPUI students and transfer students with fewer than 18 credit hours.
- CSCI 23000 Computing I (4 cr.) P: or C: MATH 15300 or MATH 15900. Fall, Spring, Summer. The context of computing in history and society, information representation in digital computers, introduction to programming in a modern high-level language, introduction to algorithm and data structures, their implementation as programs.
- CSCI 24000 Computing II (4 cr.) P: CSCI 23000 and MATH 15300 or MATH 15900. Continues the introduction of programming began in CSCI 230, with particular focus on the ideas of data abstraction and object-oriented programming. Topics include programming paradigms, principle of language design, object-oriented programming, programming and debugging tools, documentation, recursion, linked data structures, and introduction to language translation.
- CSCI 26500 Advanced Programming (3 cr.) P: or C: ECE 26400 and CSCI 24200 or CSCI 23000. This course is for computer engineering and computer information systems majors. Spring. Learn advanced programming skills and concepts. Introduction to software engineering: problem specification and program design with emphasis on object-oriented programming, programming style, debugging, and documentation. A significant software project's required.
- CSCI 30000 Systems Programming (3 cr.) P: CSCI 23000 and CSCI 24000. Spring. Assembly language programming and structure of a simple and a typical computer. Pseudo operations, address structure, subroutines, and macros. File I/O and buffering techniques. Interfacing with high-level languages. Assemblers: one- and two-pass assemblers, system dependent and independent assembler features, and design options. Loaders, linkers, and macro processors.
- CSCI 34000 Discrete Computational Structures (3 cr.) P: MATH 15300. Fall/Spring. Theory and application of discrete mathematics structures and their relationship to computer science. Topics include mathematical logic, sets, relations, functions, permutations, combinatorics, graphs, Boolean algebra, digital logic, recurrence relations, and finite-state automata.
- CSCI 34050 Honors Discrete Computational Structures (3 cr.) P: MATH 15300. Fall/Spring. Discrete structures introduces students to the vocabulary, notation, formalisms, constructs, and methods of abstraction in which almost all of the advanced thinking in and about computer science is carried out. Topics include basic logic, proof techniques, recursion and recurrence relations, sets and combinatorics, probability, relations and functions, graphs and trees, Boolean algebra, and models of computation. An advanced project is expected in this course.
- CSCI 35500 Introduction to Programming Languages (3 cr.) P: CSCI 24000 and CSCI 34000. Spring. Programming language concepts and different paradigms of programming. Topics include syntax and semantics of high-level languages, parsing methods, subprograms and their implementation, data abstraction, language translation overview including lexical analysis, syntax-directed translation, symbol table handling, code generation, functional programming, logic programming, and object-oriented programming.
- CSCI 36200 Data Structures (3 cr.) P: CSCI 24000 and CSCI 34000. Fall/Spring. A study of the design and analysis of data structures and algorithms. Abstract data types: arrays, stacks, queues, lists, trees, and graphs. Algorithms: sorting, searching, and hashing. File structures: organization and access methods.
- CSCI 36250 Honors Data Structures and Algorithms (3 cr.) P: CSCI 23000, CSCI 24000, and CSCI 34000 or CSCI 34050. Fall/Spring. This course includes fundamentals of data structures and algorithms, such as algorithm analysis, lists, stacks, and queues, trees, hashing and heaps, sorting, graph algorithms, and file structures. An advanced project is expected.
- CSCI 36300 Principles of Software Design (3 cr.) P: CSCI 24000. R: CSCI 36200 (recommended). Spring. This course is designed to teach students best practices in designing and implementing object-oriented systems of high quality. To accomplish this task, we start with an overview of software design patterns and their role in developing high-quality software. We then begin surveying different design-level software design patterns, such as the Bridge, Strategy, Wrapper Facade, and Visitor software design patterns. Next, we touch on software design patterns for building distributed systems. Finally, we finish the course by surveying software anti-patterns, which are common design mistakes that negatively impact system quality, such as degrading performance as the system scales in size and complexity. Students will have the opportunity to apply learned techniques on several programming projects throughout the semester.
- CSCI 40200 Architecture of Computers (3 cr.) P: CSCI 34000. Fall/Spring. Basic logic design. Storage systems. Processor organization: instruction formats, addressing modes, subroutines, hardware and microprogramming implementation. Computer arithmetic, fixed and floating point operations. Properties of I/O devices and their controllers. Interrupt structure. Virtual memory structure, cache memory. Examination of architectures such as microcomputers, minicomputers, and vector and array processors.
- CSCI 40300 Introduction to Operating Systems (3 cr.) P: CSCI 36200 and CSCI 40200. Fall/Spring. Operating system concepts; history, evolution and philosophy of operating systems. Concurrent processes, process coordination and synchronization, CPU scheduling, deadlocks, memory management, virtual memory, secondary storage and file management, device management, security and protection, networking, and distributed and real-time systems.
- CSCI 41400 Numerical Methods (3 cr.) P: MATH 35100. Fall. Error analysis, solution of nonlinear equations, direct and iterative methods for solving linear systems, approximation of functions, numerical differentiation and integration, and numerical solution of ordinary differential equations. Not open to students with credit in MATH 51200.
- CSCI 43200 Security in Computers (3 cr.) P: CSCI 40300. Spring. An introduction to computing security to include cryptography, identity and authentication, software security, operating system security, trusted operating system design and evaluation, network threats and defenses, security management, legal aspects of security, privacy and ethics.
- CSCI 43500 Multimedia Information Systems (3 cr.) P: CSCI 36200, MATH 16600. Multimedia information systems concepts, evolution of multimedia information systems, media and supporting device commonly associated, image databases, techniques for presenting visual information, video databases, multimodels, audio databases, text databases, and multimedia information systems architecture.
- CSCI 43600 Principles of Computer Networking (3 cr.) P: CSCI 40300. Fall. Survey of underlying principles, fundamental problems, and their solutions in designing computer networks. Laboratory projects include using network systems and network simulation environments. Topics include: motivations, networking topologies, layered open systems protocols, transmission capacity, circuit and packet switching, packet framing and error correction, routing, flow and congestion control, and internetworking.
- CSCI 43700 Introduction to Computer Graphics (3 cr.) P: CSCI 36200 and MATH 35100/51100. Fall. An introduction to 3D programming with emphasis on game engine development using 3D graphics techniques and the standard and platform independent OpenGL library. Topics include lighting, shading, texture mapping, coordinate systems and transformations, collision detection, 3D geometric and physically based modeling and animation.
- CSCI 43800 Advanced Game Development (3 cr.) P: CSCI 43700. Spring. Advanced game design and development principles and technologies. Students will gain practical experience through extensive game development project. Topics include character animation, special effects, user interface design, networking for computer games, game engine components and variations, game performance considerations, artificial intelligence, and ethics in computer games.
- CSCI 44100 Client-Server Database Systems (3 cr.) P: CSCI 36200. Database system concepts, data models database design, CASE tools, SQL, query processing and query optimization, transaction processing, reliability and security issues, database interactions on the World Wide Web.
- CSCI 44300 Database Systems (3 cr.) P: CSCI 36200. Fall. Relational database systems: architecture, theory, and application. Relational data structure, integrity rules, mathematical description, data manipulation. Standard SQL and its data manipulation language, engineering aspects of database design in industry, introduction to nonrelational database systems.
- CSCI 44600 Introduction to Microprocessor Architecture (3 cr.) P: CSCI 40200. Introduction to programmable logic; elements of microprocessor system design; interrupt structures; interfacing using LSI devices; hardware timers; interactive debugging; physical device I/O programming; vectored and polled service; microprocessor architecture; and self-paced laboratory using A/D converters, D/A converters, etc.
- CSCI 44800 Biometric Computing (3 cr.) P: CSCI 36200 and STAT 35000 or STAT 41600 or STAT 51100. Biometrics is capturing and using physiological and behavioral characteristics for personal identification. It is set to become the successor to the PIN. This course will introduce computational methods for the implementation of various biometric technologies including face and voice recognition, fingerprint and iris identification, and DNA matching.
- CSCI 45000 Principles of Software Engineering (3 cr.) P: CSCI 36300. Fall. Tools and techniques used in software development. Lifecycle concepts applied to program specification, development, and maintenance. Topics include overall design principles in software development; the use of structured programming techniques in writing large programs; formal methods of program verification; and techniques and software tools for program testing, maintenance, and documentation. A primary goal of this course is to provide experience in team development of software.
- CSCI 45200 Object-Oriented Analysis and Design (3 cr.) P: CSCI 36200. Introduction to the object-oriented paradigm in software development. Basic concepts: objects, classes, messaging, inheritance, and methodologies. Analysis: defining objects, structures, attributes, and services. Design: transforming the analytic model into the design model. Implementation: comparison of the support features provided by languages such as Smalltalk, C++, Eiffel, and CLOS. A significant design project is required.
- CSCI 46300 Analysis of Algorithms (3 cr.) P: CSCI 36200. Techniques for analyzing and comparing algorithms. Average case analysis in sorting and searching; dynamic programming: greedy algorithms, amortized analysis, and applications; matrix algorithms: polynomials, discrete Fourier transforms, and fast Fourier transforms, parallel algorithms: examples in sorting, searching, graphs, and matrices, computational complexity, polynomial complexity classes P, NP.
- CSCI 47000 Automata and Formal Languages (3 cr.) P: CSCI 36200. Introduction to formal languages and automata theory: finite automata and regular expressions, context-free grammars and languages, pushdown automata, equivalence of CFGs and pushdown automata, application of pushdown automata in parsing, closure properties, pumping lemmas, decision procedures, Turing machines, computability, undecidability, and a brief survey of the Chomsky hierarchy.
- CSCI 47500 Scientific Computing I (3 cr.) P: CSCI 23000 and MATH 35100. P or C: MATH 26200. Solving scientific problems on computers. Languages for scientific computing. Software development on workstations: using tools the environment provides, organization of programs. Computer architecture: impact on software and algorithms. Problem formulation: model selection/simplification, relationship to numerical methods. Solution of linear equations: methods and packages. Nonlinear equations and optimization problems.
- CSCI 47600 Scientific Computing II (3 cr.) P: CSCI 47500. Elementary statistical computing: time series analysis, model fitting, robust methods, generation of pseudorandom numbers, and Monte Carlo methods. Interpolation and curve fitting; numerical integration. Solving ordinary differential equations. Use of packaged environments and symbolic computation for scientific purposes.
- CSCI 47700 High Performance Computing (3 cr.) P: CSCI 47600. Architecture of supercomputers: pipelined, vector, SIMD, MIMD; implications for algorithm and program design; and vectorization, parallelization, loop restructuring, and nonstandard language features. Splitting computation between supercomputers and workstations; interactive analyses of remote machines' output. Numerical methods for large-scale problems: examples from continuum mechanics, graphical visualization, and statistical computing. A project is required.
- CSCI 48100 Data Mining (3 cr.) P: or C: CSCI 24000, STAT 30100/35000/51100/41600. Spring An introduction to data warehousing and OLAP technology for data mining, data processing, languages and systems, and descriptive data mining: characterization and comparison, association analysis classification and predication, cluster analysis mining complex types of data, application, and trends in data mining.
- CSCI 48400 Theory of Computation (3 cr.) P: CSCI 36200. Fall/Spring. Introduction to formal languages and automata theory: finite automata, regular expressions, regular languages, context-free languages and pushdown automata, context sensitive languages, Turing machines, undecidability, P and NP. Design and analysis techniques for: divide-and-conquer algorithms, greedy algorithms, dynamic programming, amortized analysis.
- CSCI 48500 Expert System Design (3 cr.) P: CSCI 36200. Overview of artificial intelligence; expert system technology; early expert systems: MYCIN, DENDRAL; theoretical foundations, uncertainty measures, knowledge representation, inference engines; reasoning mechanisms: forward and backward chaining; and explanation systems, expert system shells, tools, and intelligent hybrid systems.
- CSCI 48700 Artificial Intelligence (3 cr.) P: CSCI 36200. Spring. Study of key concepts and applications of artificial intelligence. Problem-solving methods, state space search, heuristic search, knowledge representation: predicate logic, resolution, natural deduction, nonmonotonic reasoning, semantic networks, conceptual dependency, frames, scripts, and statistical reasoning; advanced AI topics in game playing, planning, learning, and connectionist models.
- CSCI 49000 Topics in Computer Sciences for Undergraduates (1-5 cr.) P: Open to students only with the consent of the department. By arrangement. Fall, spring, summer. Supervised reading and reports in various fields.
- CSCI 49500 Explorations in Applied Computing (1-6 cr.) Fall, spring, summer. Explorations in Applied Computing is an undergraduate capstone experience. Students will work in teams, advised by faculty and external liaisons, to solve real-world computing problems. This hands-on experience will cultivate technical expertise, utilization of analytical thinking, quantitative reasoning, project management skills, and communication skills.
- CSCI 49600 Computer Science Internship Capstone (3 cr.) P: CSCI 48400 and senior standing. Fall, Spring, Summer. A professional experience providing students the opportunity to incorporate material learned in CSCI coursework in a supervised internship position. The approved internship position will cultivate technical expertise, utilization of analytical thinking, quantitative reasoning, project management skills, and communication skills.
- CSCI 48900 Data Science (3 cr.) P: CSCI 24000 and STAT 30100 or STAT 35000 or STAT 51100 with grades of C- or better Spring. The course will cover data manipulation, analysis, and visualization. Statistical modeling, dimension reduction and techniques of supervised and unsupervised learning. Introduction to software technologies used in data science and applications in science, government and industry.
- CSCI 43300 Introduction to the Internet of Things (3 cr.) P: CSCI 36200 Data Structures and CSCI 40300 Operating Systems with a grade of C- or better Fall. This course provides principles, knowledge and information on the latest technologies about Internet of things, and wireless networks of smart objects. Topics include the concepts and architectures of Internet of things, communication mechanisms, lightweight IP stack, protocols, operating systems, devices, and various applications.
- CSCI 50200 Compiling and Programming Systems (3 cr.) P: CS graduate standing or instructor consent required. Fall. Basic principles of compilers and compiler design; control of translation, loading, and execution; symbolic coding systems; lexical and syntactic analysis; design and operation of assemblers and macroprocessors; and design of interpretive systems. Students are expected to complete a large programming project as part of the course.
- CSCI 50300 Operating Systems (3 cr.) P: CS graduate standing or instructor consent required. Spring. Basic principles of operating systems: addressing modes, indexing, relative addressing, indirect addressing, stack maintenance; implementation of multitask systems; control and coordination of tasks, deadlocks, synchronization, and mutual exclusion; storage management, segmentation, paging, virtual memory, protection, sharing, and access control; file systems; resource management; and evaluation and prediction of performance.
- CSCI 50400 Concepts in Computer Organization (3 cr.) P: CS graduate standing or instructor consent required. The fundamentals of computer hardware for computer scientists. An overview of the organization of modern computers, ranging from sequential to advanced machines. CISC, RISC, and vector processors; multiprocessors; virtual storage, hierarchical memory; interaction with O/S; connection models; high-level programming support; and cost/performance analysis.
- CSCI 50600 Management of the Software Development Process (3 cr.) P: CS graduate standing or instructor consent required. A survey of the fundamental principles and concepts of managing a software project. Topics include life cycle models, standards and goals, cost estimation, risk analysis, tool use, component reuse, traceability, metrics, and process control and improvement. Students are required to apply management concepts using a project-based approach.
- CSCI 50700 Object-Oriented Design and Programming (3 cr.) P: CS graduate standing or instructor consent required. An advanced exploration of the object-oriented model and programming. Topics range from a review of the object model to advanced concepts such as abstraction mechanisms, standard library/packages, OO design using an OO language, and the syntax and the semantics of constructs.
- CSCI 51200 Numerical Methods for Engineers and Scientists (3 cr.) P: MATH 35100 or MATH 51100; MATH 51000; and knowledge of programming. CS graduate standing or instructor consent required. Not open to students with credit in CSCI 41400. Not normally accepted for graduate credit in computer science programs. A survey of the useful methods of computation. Solution of nonlinear equations and systems of nonlinear equations. Numerical methods for systems of linear equations. Approximate differentiation and integration. Numerical solution of ordinary differential equations. Introduction to partial differential equations and elementary approximation methods.
- CSCI 51400 Numerical Analysis (3 cr.) P: CSCI 41400 or equivalent. CS graduate standing or instructor consent required. Iterative methods for solving nonlinear equations, linear difference equations, applications to solution of polynomial equations, differentiation and integration formulas, numerical solution of ordinary differential equations, and round-off error bounds.
- CSCI 51500 Numerical Analysis of Linear Systems (3 cr.) P: CS graduate standing or instructor consent required. Computational aspects of linear algebra; linear equations and matrices; direct and iterative methods; eigenvalues and eigenvectors of matrices; error analysis.
- CSCI 51600 Computational Methods in Applied Mathematics (3 cr.) P: CS graduate standing or instructor consent required. A study of techniques such as direct integration, shooting, finite difference, finite elements, method of weighted residuals, and methods of characteristics for solving problems in fluid mechanics, solid mechanics, dynamics, and other fields of applied mathematics.
- CSCI 52000 Computational Methods in Analysis (3 cr.) P: CS graduate standing or instructor consent required. A treatment of numerical algorithms for solving classical problems in real analysis with primary emphasis on linear and nonlinear systems of equations and on optimization problems; the writing, testing, and comparison of numerical software for solving such problems; and a discussion of the characteristics of quality software for implementing these algorithms.
- CSCI 52600 Information Security (3 cr.) P: CS graduate standing or instructor consent required. Basic notions of confidentiality, integrity, availability; authentication and protection models; security kernels; secure programming; audit; intrusion detection/response; operational security issues; personal security; policy formation/enforcement; access controls; information flow; legal/social issues; identification and authentication in local and distributed systems; classification and trust modeling; risk assessment.
- CSCI 53600 Data Communication and Computer Networks (3 cr.) P: CS graduate standing or instructor consent required. Data communications: communication hardware technologies including local area and long-haul network hardware, circuit and packet switching, interfaces between computer and network hardware, and performance issues. Network architecture: protocol software and conceptual layering, reliable delivery over an unreliable channel, transport protocols, virtual circuits, datagrams, Internet working as a fundamental design concept, the client-server paradigm, naming and name binding, name servers, addressing and address resolution, routing algorithms, congestion and flow control techniques, network file systems, distribution of computation, and DARPA Internet protocols (TCP/IP) as examples of protocol organization.
- CSCI 53700 Introduction to Distributed Computing (3 cr.) P: CSCI 50300 and CSCI 53600. CS graduate standing or instructor consent required. Introduction to the principles and methods in the design of distributed computing systems. It covers the fundamentals of distributed computing from four perspectives: underlying communication media, protocols and their implications; operating system issues; high-level language constructs; and distributed algorithms.
- CSCI 53800 The Design of Interactive Systems (3 cr.) P: CS graduate standing or instructor consent required. Fundamental concepts and tools employed in designing the interaction between humans and machines and the mediating interfaces. Topics include: design problem, interface design concepts, experimental design and analysis, cognitive and predictive models, the design project, case studies, and applications.
- CSCI 53900 Computing with Distributed Objects (3 cr.) P: CS graduate standing or instructor consent required. An introductory treatment of the distributed-object model and programming. The topics range from a review of the distributed and object models of computation to advanced concepts such as remote method invocations, object brokers, object services, open systems, and future trends for distributed-object systems.
- CSCI 54100 Database Systems (3 cr.) P: CS graduate standing or instructor consent required. Spring. Fundamentals for the logical design of database systems. The entity-relationship model, semantic model, relational model, hierarchical model, network model. Implementations of the models. Design theory for relational databases. Design of query languages and the use of semantics for query optimization. Design and verification of integrity assertions, and security. Introduction to intelligent query processing and database machines.
- CSCI 54300 Introduction to Simulation and Modeling of Computer Systems (3 cr.) P: CS graduate standing or instructor consent required. Simulation: discrete event simulation, process-oriented simulation, generating random numbers, simulation languages, simulation examples of complex systems. Nondeterministic models: random variables, Poisson process, moment generating functions, statistical inference, and data analysis. Modeling: elementary queuing models, network of queues, and applications to performance evaluation of computer systems.
- CSCI 54700 Information Storage and Retrieval and Natural Language Processing (3 cr.) P: CSCI 54100. CS graduate standing or instructor consent required. Complex data structures of fields within records, as well as clustered, multilist, and inverted files; key decoding by tree and randomized techniques; overall techniques of classical document retrieval systems, e.g., the MEDLARS and NASA systems; overall techniques of automatic document retrieval systems, e.g., TIP and SMART, the internal structure of SMART; question answering systems; and natural language translation.
- CSCI 54800 Introduction to Bioinformatics (3 cr.) P: CS graduate standing or instructor consent required. Analysis of biological data employing various computational methods to obtain useful information in the emerging area of bioinformatics. Topics include structures, functions and evolution of proteins and nucleic acids, retrieval and interpretation of bioinformation from the Internet, learning principles, algorithms and software for sequence alignment, similarity search of sequence databases, estimation of phylogenetic trees, structural prediction, and functional inference.
- CSCI 54900 Intelligent Systems (3 cr.) P: CS graduate standing or instructor consent required. This course will discuss problems in the area of intelligent systems. Topics include the formalisms within which these problems are studied, the computational methods that have been proposed for their solution, and the real-world technological systems to which these methods have been applied.
- CSCI 55000 Computer Graphics (3 cr.) P: CS graduate standing or instructor consent required. An introduction to computer graphics. Topics include the concepts, principles, algorithms, and programming techniques in 3D interactive computer graphics. Emphasis is on the development and applications of 3D graphic algorithms and methods.
- CSCI 55200 Data Visualization (3 cr.) P: CSCI 55000. CS graduate standing or instructor consent required. Spring. An introduction to data visualization methods and tools, and related graphics techniques. Students will explore a variety of data representation and modeling techniques, their corresponding visualization algorithms, and practical visualization applications in scientific, engineering, and biomedical fields.
- CSCI 55500 Cryptography (3 cr.) P: CS graduate standing or instructor consent required. Concepts and principles of cryptography and data security. Cryptography (secret codes): principles of secrecy systems; classical cryptographic systems, privacy enhanced email; digital signatures. Proprietary software protection; information theory and number theory; complexity bounds on encryption; key escrow; traffic analysis; attacks against encryption; basic legal issues; e-commerce; the role of protocols.
- CSCI 55600 Fault-Tolerant Computing (3 cr.) P: CS graduate standing or instructor consent required. Concepts of fault-tolerant computing; phases of fault-tolerance; applications to commercial, communication, and aerospace systems; fault-tolerance in multi-processor systems; diagnosis techniques; software fault-tolerance.
- CSCI 55700 Image Processing and Computer Vision (3 cr.) P: CS graduate standing or instructor consent required. Topics may include image input and transformation, feature detection and recognition in 2D image processing, as well as 3D dynamic images.
- CSCI 56500 Programming Languages (3 cr.) P: CS graduate standing or instructor consent required. Fall. An exploration of modern or unconventional concepts of programming languages, their semantics, and their implementations; abstract data types; axiomatic semantics using Hoare's logic and Dijkstra's predicate transformers; denotational semantics; functional, object-oriented, and logic programming; concurrency and Owicki-Gries theory. Example languages include ML, Ada, Oberon, LISP, PROLOG, and CSP.
- CSCI 57300 Data Mining (3 cr.) P: CS graduate standing or instructor consent required. Data Mining has emerged at the confluence of artificial intelligence, statistics, and databases as a technique for automatically discovering summary knowledge in large datasets. This course introduces students to the process and main techniques in data mining, including classification, clustering, and pattern mining approaches. Data mining systems and applications will also be covered, along with selected topics in current research.
- CSCI 58000 Algorithm Design, Analysis, and Implementation (3 cr.) P: CS graduate standing or instructor consent required. Basic techniques for designing and analyzing algorithms: dynamic programming, divide-and-conquer, balancing, upper and lower bounds on time and space costs, worst case and expected cost measures. A selection of applications such as disjoint set union/find, graph algorithms, search trees, pattern matching. The polynomial complexity classes P, NP, and co-NP; intractable problems.
- CSCI 58200 Automata and Formal Languages (3 cr.) P: CS graduate standing or instructor consent required. Spring. Finite automata, regular expressions; push-down automata, context-free grammars; and languages and behaviors. Closure properties, pumping lemmas, and decision procedures. Deterministic context-free languages and LR(k) parsing; brief survey of the Chomsky hierarchy.
- CSCI 59000 Topics in Computer Science (3 cr.) P: CS graduate standing or instructor consent required. Fall, spring. Directed study for students who wish to undertake individual reading and study on approved topics.
- CSCI 53300 Wireless Sensor Networks (3 cr.) P: CSCI 53600 Data Communication & Computer Networks or instructor permission This course studies the fundamental principles of wireless sensor networks. The course will expose students to the fundamental issues in designing and analyzing sensor networks and their information processing applications. Topics include sensor network architecture, MAC layer, routing and data dissemination, transport protocols, sensor network operating systems, sensor network programming, querying, network management, and real-world applications.
- CSCI 53200 Cloud Computing Systems (3 cr.) The course specific topics cover the architectural aspects of modern Cloud systems, focusing on network architecture, by exploring the potentials of applications of cloud systems. The course builds on students' foundational knowledge from studies in computer networks, operating systems and computer architecture. Material covered in the class will include some concepts from several textbooks and research papers. The course is highly interactive, based on class discussions. An important part of the course will be dedicated to improving research skills, such as writing papers and preparing presentations.
- CSCI 57900 Bioinformatics Algorithms (3 cr.) Fall. This course teaches algorithms for solving important computation problems in the field of bioinformatics. String data structures such as hash table suffix tree, and suffix arrays, and popular algorithm design techniques, such as dynamic programming, greedy algorithms, divide & conquer, and graph based algorithms are covered. Data analysis methods such as clustering, and hidden Markov model (HMM) are also covered. Application of these algorithmic methods for solving several bioinformatics computation problems, such as sequence alignment, motif discovery, and DNA sequencing are demonstrated.
- CSCI 57800 Statistical Machine Learning (3 cr.) P: Calculus, Linear Algebra, Probability and Random Variables, and Basic knowledge of optimization techniques. Spring. This course will provide an introductory to mid-level coverage of concepts and techniques in machine learning with emphasis given on statistical aspect of machine learning. Topics to be discussed include: Generative and discriminative models for classification and regression, posterior distributions and inference, conjugate distributions, model generalizability, kernel machines, dimensionality reduction, introduction to probabilistic topic models, graphical models and belief propogation, expectation-maximization, deterministic and stochastic inference.
- CSCI 55900 Biometric Computing (3 cr.) Spring. This course will discuss theory, applications, and implementation of biometrics. The majority of biometrics systems follow a specific architecture, namely a low-to-high level processing pipeline. For students to understand every component of this pipeline for different trait-specific systems, the course will include image processing, computer vision, and machine learning principles and methods. The course will also include examples of real-world systems, and will discuss how different technical components are applied in practice for different scenarios/physical conditions.
- CSCI 55800 Multimedia (3 cr.) Spring. This is a course with emphasis on visual media such as image and video processing, transmission, understanding and retrieval. We discuss various types of media, methods for media creation, editing, and algorithms for media indexing, transmission, and recognition. Students will not only learn fundamental principles of signal, frequency, filtering, and transformation, but also gain hands-on experiences in creating multimedia contents for Internet access, implementing multimedia display for visualization, and developing basic algorithms for information extraction and retrieval for multimedia. This course will have lab training and topic discussion sessions where students will be actively involved in presenting research papers. Several exercises and projects will be assigned in addition to the presentation.
- CSCI 50900 Software Quality Assurance (3 cr.) P: Graduate Student standing in Department of Computer Information Science. Fall, every other year. This course is designed to teach students best practices in testing different classes of software systems. To accomplish this task, we start with an overview of software testing and its role in developing high-quality software. We then begin studying, in depth, traditional software testing methods, such as functional, structural, and integration testing. Finally, we finish the course by surveying contemporary software testing methods, such as exploratory testing, model-based testing, search-based testing, and non-functional testing. Students will have to opportunity to apply learned techniques on several programming projects throughout the semester.
- CSCI 60300 Advanced Topics in Distributed Systems (3 cr.) P: CSCI 53700. CS graduate standing or instructor consent required. Design and control of distributed computing systems (operating systems and database systems). Topics include principles of namings and location, atomicity, resources sharing, concurrency control and other synchronization, deadlock detection and avoidance, security, distributed data access and control, integration of operating systems and computer networks, distributed systems design, consistency control, and fault tolerance.
- CSCI 61400 Numerical Solution of Ordinary Differential Equations (3 cr.) P: CSCI 51400. CS graduate standing or instructor consent required. Numerical solution of initial-value problems by Runge-Kutta methods, general one-step methods, and multistep methods. Analysis of truncation error, discretization error, and rounding error. Stability of multistep methods. Numerical solution of boundary-value and eigenvalue problems by initial-value techniques and finite difference methods.
- CSCI 61500 Numerical Solution of Partial Differential Equations (3 cr.) P: CSCI 51500 and MATH 52300. CS graduate standing or instructor consent required. The numerical solution of hyperbolic, parabolic, and elliptic equations by finite difference methods; iterative methods (Gauss-Seidel, overrelaxation, alternating direction) for solving elliptic equations; discretization and round-off errors; explicit and implicit methods for parabolic and hyperbolic systems; the method of characteristics; the concept of stability for initial value problems.
- CSCI 66000 Design of Translating Systems (3 cr.) P: CS graduate standing or consent of instructor required. Systems design of higher-level programming languages and their processors; symbol tables, lexical scan, syntax scan, object code generation and optimization; boot-strapping techniques, higher-level translators, self-compilers, and decompilers; and heuristic generators.
- CSCI 66100 Formal Compiling Methods (3 cr.) P: CSCI 50200. CS graduate standing or instructor consent required. Application of concepts developed in formal language and automata theory to the design of programming languages and their processors. Models of syntactic analysis, including canonical precedence, LR(k) and LL(k) parsing methods and variants; efficiency of each. Synthesis techniques, including symbol tables, storage administration, parameter mechanisms, garbage collection; optimization considerations. Models of synthesis, including level, affix, attributed grammars; prospects of fully automating compiler design. Applicative vs. procedural languages and their implementations based on semantic definition of a language (LISP, Lucid) and on proof-like techniques (PROLOG, equational systems); merits of such approaches.
- CSCI 69500 M.S. Project (1-9 cr.) P: Consent of instructor. Maximum of 6 credit hours apply to degree. The student integrates and applies the knowledge gained from the formal course work to formulate and execute a solution to a problem of practical importance. The faculty advisor and the sponsoring organization mentor, if applicable, provide guidance and evaluation.
- CSCI 69800 Research M.S. Thesis (1-18 cr.) P: Consent of instructor. Formal research on M.S. Thesis supervised by the faculty advisor.
- CSCI 69900 Research Ph.D. Thesis (1-9 cr.) P: Consent of instructor. Formal research on Ph.D. Thesis supervised by the faculty advisor.
- CSCI-C 591 Research Seminar (0-1 cr.) P: CS graduate standing or instructor consent required. First-year seminar in research methods and current research directions of the faculty. Repeatable.
- CSCI 62600 Advanced Information Assurance (3 cr.) P: CSCI 55500 (Cryptography) or instructor permission. Spring. Advanced and emerging topics in information assurance, including selections from the following: penetration testing, formal verification of systems, formal models of information flow and protection, distributed system authentication, protocol design and attack, computer viruses and malware, intrusion and anomaly detection models, multi-level security, active defenses, investigation and forensics, network firewalls, anonymity and identity, e-commerce support, database security models and mechanisms, secure group communication, wireless/sensor network security, cryptographic access control, secure multiple party computation, zero-knowledge proof, oblivious transfer, emerging security techniques such as digital provenance and moving target defense.