Students explore the use of mathematics and computer programming in creating animations. Students create animations on their laptop computers using animation software.
The C programming language is used to introduce fundamental procedural programming including engineering applications. Programming topics include an overview of computers and programming languages, variables and data types, arithmetic operators, input/output, comments, control structures, user-defined functions, scope, constants, file I/O, and pointers. Prerequisite: high school algebra.
The Java programming language is used to introduce object-oriented programming. Topics include fundamental object-oriented concepts, class design and implementation, inheritance, polymorphism, exceptions, and event-driven programming. Prerequisite: COMP 1571.
Overview of computing, including history and impact, use of computer as a tool in various disciplines, logical process of problem solving, and concepts of programming using a high-level language. Appropriate for students who wish to learn more about computers but are not planning to continue in computer science.
Characteristics of modern computers and their applications; analysis and solution of problems; structure programming techniques; introduction to classes, abstract data types and object-oriented programming. Prerequisite: high school algebra.
Advanced programming techniques; arrays, recursion, dynamic data structures, algorithm abstraction, object-oriented programming including inheritance and virtual functions. Prerequisite: COMP 1671.
This is an honors section of Introduction to Computer Science 1 meant for incoming freshman who are already experienced in computer programming. This course is meant to be faster paced than its counterpart COMP 1672/1671. Prerequisites for this course include either AP credit in Java or at least one quarter of programming, or permission of instructor.
Number systems and basic number theory, propositional and predicate logic, proof techniques, mathematical induction, sets, counting and discrete probability, case studies with applications from computer science, such as data representation, algorithm analysis and correctness, and system design.
The prerequisites for this class are a good understanding of imperative and object-oriented programming in Java. The prerequisites for this class include a good understanding of basic programming constructs, such as branches (if, switch), loops (for, while, do), exceptions (throw, catch), functions, objects, classes, packages, primitive types (int, float, boolean), arrays, arithmetic expressions and boolean operations. Computer organization is a parallel prerequisite; if possible, students should register for both this course and COMP 2691. You must have a good understanding of basic data structures such as arrays, lists, sets, trees, graphs and hash-tables. This is a class on systems programming with focus on the C programming language and UNIX APIs. There will be programming assignments designed to make you use various Debian GNU/Linux system APIs. Programming assignments involve writing code in C or C++. Prerequisite: COMP 2673.
Performance analysis of algorithms; data structures and their physical storage representation; recursive techniques; stacks, queues, lists, trees, sets, graphs; sorting and searching algorithms. Prerequisites: MATH 2200 or COMP 2300 and COMP 2673.
Introduction to tools for program development and efficient use of a workstation environment. Topics include UNIX commands, emacs environment, X-windows, separate compilation of large projects, user-defined libraries, makefiles, intelligent debugging, perl, HTML, rcs/sccs, tcl/tk and assorted additional topics. Prerequisite: COMP 2370 or instructor's permission.
Data recovery techniques, auditing methods and services, data seizure, preservation of computer evidence, reconstruction of events, and information warfare. Prerequisite: COMP 1672 or programming experience.
An introduction to several advanced topics in computer science. Topics vary from year to year and may include any of the following: theory of computing, cryptography, databases, computer graphics, graph theory, game theory, fractals, mathematical programming, wavelets, file compression, computational biology, genetic algorithms, neural networks, simulation and queuing theory, randomized algorithms, parallel computing, complexity analysis, numerical methods. Prerequisite: COMP 1672 or COMP 1771.
This course covers basic topics in Computer Organization and is a required course in the BS in Computer Science, BS in Game Development, and BS in Computer Engineering degrees. Topics include: instruction set architectures, integer and floating point arithmetic, processors, memory systems, and topics in storage and Input/Output.
This course is designed to explore the social implications of computing practices, organization and experience. These topics and other issues are correlated with examples from the older and modern history of technology and science. Some formal experience with computing is assumed, but students who have a good familiarity with ordinary computing practice should be ready. Students are also expected to contribute their expertise in one or more of the areas of their special interest. Cross-listed with COMP 3901 and DMST 3901.
Series of lectures by alumni and others on surviving culture shock when leaving the University and entering the job world. Open to all students regardless of major.
Discrete mathematical structures and non-numerical algorithms; graph theory, elements of probability, propositional calculus, Boolean algebras; emphasis on applications to computer science. Cross-listed as MATH 3200. Prerequisites: MATH 2200 or COMP 2300 and COMP 1672 or COMP 1771.
This course covers fundamental issues in design and implementation of multimedia applications. This course also covers technologies in multimedia systems such as multimedia data representation, compression, coding, networking, data management, and I/O technologies. Prerequisite: CPMP 3361.
Programming language as a component of software development environment; binding, scope, lifetime, value and type of a variable; run-time structure--static, stack-based and dynamic languages; parameter passing--call by reference, value, result, value-result and name; subprogram parameters; role played by side effects, dangling pointers, aliases and garbage; garbage collection; data abstraction - study of object-oriented, functional, and logic languages. Prerequisites: COMP 2370, COMP 2691, and COMP 2355.
Design and implementation of a major piece of software relevant to compilers. Prerequisite: COMP 3352.
Operating systems functions and concepts; processes, process communication, synchronization; processor allocation, memory management in multiprogramming, time sharing systems. Prerequisites: COMP 2355, COMP 2370, and COMP 2691.
Design and analysis of algorithms; asymptotic complexity, recurrence equations, lower bounds; algorithm design techniques such as incremental, divide and conquer, dynamic programming, randomization, greedy algorithms, etc. Prerequisites: COMP 2370, MATH 3200.
An introduction to software engineering. Topics include software processes, requirements, design, development, validation and verification and project management. Prerequisite: COMP 2370.
Continuation of COMP 3381. Topics include component-based software engineering, model-driven architecture, and service-oriented architecture. Prerequisite: COMP 3381.
Design principles for tools used in a UNIX environment. Students gain experience building tools by studying the public domain versions of standard UNIX tools and tool- building facilities. Prerequisites: knowledge of C and csh (or another shell), and familiarity with UNIX. Prerequisite: COMP 2400.
Creating WWW pages with HTML, accessing user-written programs via CGI scripts, creating forms, imagemaps and tables, and Java programming principles and techniques. Prerequisite: COPM 2355.
An introductory class in databases explaining what a database is and how to use one. Topics include database design, ER modeling, database normalization, relational algebra, SQL, physical organization of records and clocks, heap files, sorted files, hashing, extendible hashing, linear hashing and B trees. Each student will design, load, query and update a nontrivial database using the Oracle DMBS. Prerequisite: COMP 2370.
Programming in LISP and Prolog with applications to artificial intelligence; fundamental concepts of artificial intelligence; emphasis on general problem-solving techniques including state-space representation, production systems, and search techniques. Prerequisites: MATH 2200, COMP 2370.
An introduction to computer networks with an emphasis on Internet protocols. Topics include; network topologies, routing, Ethernet, Internet protocol, sockets, operating system impact and client/server implementations. Prerequisites: COMP 2355 and COMP 2370. Co-requisite: COMP 3361.
This course gives students an overview of computer security along with some cryptography. Some network security concepts are also included. Other concepts include coverage of risks and vulnerabilities, policy formation, controls and protection methods, role-based access controls, database security, authentication technologies, host-based and network-based security issues. Prerequisite: COMP 3361
Fundamentals of graphics hardware, scan conversion algorithms, 2D and 3D viewing transformations, windows, viewports, clipping algorithms, mathematics for computer graphics, graphics programming using a standard API. Prerequisites: COMP 2370, MATH 1952 or 1962, and MATH 2060.
An introduction to computer game programming. Use of a game engine to create 3D computer games. Topics to include game scripting, simple 3D asset creation, incorporation of assets, keyboard/mouse event handling, animation, game phases and score keeping. Prerequisite: COMP 2370.
An introduction to computer game engine programming. Major class goal is to understand how game engines are created by building subsets of a game engine. Non-exhaustive set of topics include how terrains are generated, how animations are supported, how particle systems are implemented, how physics systems are coded, and how support is provided for higher level scripting languages. All coding will be done in low-level graphics languages. Prerequisites: COMP 3801 and COMP 3821.
Practical experience in designing, writing and/or maintaining substantial computer programs under supervision of staff of University Computing and Information Resources Center. Prerequisites: COMP 2370 and approval of internship committee (see department office).
Cannot be arranged for any course that appears in the regular course schedule for that particular year.
Continuation of COMP 3361. Case studies of existing operating systems programing. Prerequisite(s): COMP 3621
NP-completeness; lower bound theory; approximation algorithms; amortized complexity and data structures, randomized algorithms. Assorted topics such as string algorithms, graph algorithms, linear programming, computational geometry. Prerequisite(s): COMP 3371.
This course is concerned with systematic approaches for the design and implementation of secure software. While topics such as cryptography, networking, network protocols and large scale software development are touched upon, this is not a course on those topics. Instead, this course is on identification of potential threats and vulnerabilities early in the design cycle. The emphasis in this course is on methodologies and paradigms for identifying and avoiding security vulnerabilities, formally establishing the absence of vulnerabilities, and ways to avoid security holes in new software. There are programming assignments designed to make students practice and experience secure software design and development. Prerequisites: COMP 3381 & COMP 4555. COMP 3621 is highly recommended. Students must be able to implement complex programs in C, C++ and Java.
Preparation and presentation of lectures on some aspect of current research in computer science; topics not generally encountered in formal courses, may include robotics, pattern recognition, parellel processing, computer applications. 10- to 15- page paper with bibliography required.
This course gives students an overview of computer and system security along with some cryptography. Some network security concepts are also included. Other concepts include coverage of risks and vulnerabilities, policy formation, controls and protection methods, role-based access controls, database security, authentication technologies, host-based and network-based security issues. Prerequisite: COMP 3361.
Cannot be arranged for any course that appears in regular course schedule for that particular year.
Research projects undertaken in conjunction with a faculty member.