### Computer Science

Students pursuing a program leading to a Bachelor of Science degree in Computer Science from AUV must complete a minimum number of 133 credits, including: the AUV General Education Curriculum (39 credits), the preparatory courses for the major (15 credits), and the core courses for the major (79 credits).

**Preparation for the Major**

An introduction to differential and integral calculus covering inverse trigonometric and hyperbolic functions, integration methods, indeterminate forms, coordinate systems, planes and lines in space, sequences and series, applications, and historical perspectives.

An exposure to fundamental discrete mathematical skills and knowledge including basic logic and applications in computer science, methods of proof, functions, relations, sets, basic counting techniques, graphs, trees, and applications in computer science

Includes the study of vectors in the plane and space, systems of linear equations, matrices, determinants, linear transformations, inner products, and eigenvalues and eigenvectors

An introduction to the study of mechanics including motion, collisions, friction, and rotation. Concepts of work, energy, momentum, and forces will be used to understand the basic mechanical principles.

Study of a wide range of phenomena including static electricity, circuits, magnetism, motors, and generators. Concepts of charge, electric and magnetic forces, energies, and fields will be utilized to understand these principles of electricity and magnetism.

**Core Courses**

This course examines some of the fundamental ideas of the science of computing. A wide variety of topics is covered such as hardware organization, the internet, computer programming, limits of computing, and graphics

An introduction to the theory and practice of computer programming with emphasis on techniques of program development within the object oriented paradigm. Topics include control structures, objects, classes, inheritance, simple data structures, and basic concepts of software development.

An introduction to data structures: stacks, queues, linear lists, and trees. Topics include pointers, recursion, and implementation and analysis of sorting and searching algorithms and an introduction to parallel models and algorithms, problem state space, relational database, and numerical approximation methods.

A broad introduction to computer architecture and how computers really work. Topics covered include transistors, logic gates, basic processor components, memory, input/output devices, and low-level machine instructions.

This course covers more advanced fundamentals of programming including basic data structures, recursion, common algorithms, and generic programming. It also looks more deeply at object-oriented programming including the use of class hierarchies

Basic electronics theory, building electronic circuits, implementing logic gates and combinatorial circuits, andante ultimately designing systems employing microprocessors and peripherals are some lecture topics. Practical projects are emphasized such as designing, building, and programming a microprocessor controlled mobile robot.

This course introduces students to mathematical and theoretical foundations of computer science and practical applications. Topics include propositional and predicate logic, sets and functions, formal languages, finite automata, regular expressions, grammars, and Turing machines.

This course is an introduction to assembly programming and digital circuits components. Main topics are integer and floating point representation, basic data structures, MIPS processor, assembly level programming, branching and jumps, linking and loading, digital gates and Boolean algebra, arithmetic and logic circuits, flip-flops, registers, and counters.

This course addresses a topic in computer science not covered as a regular course. Possible topics include web programming, human-computer interaction, and Linux system and server administration.

Exploration of abstract data types through classes and objects. Main topics include trees, hash tables, priority queues and graphs as data structures, algorithm design, and time/space complexity analysis. The main emphasis is on software design.

This course continues the study of data structures and algorithms and focuses on algorithms design and analysis and the relationships between data representation, algorithm design, and program efficiency. Topics include advance data structures, key algorithm design techniques, analysis of the time and space requirements of algorithms, and characterizing the difficulty of solving a problem. Concrete examples will be drawn from a variety of domains such as algorithms for graphs and networks, cryptography, data compression, strings, geometric problems, indexing and search, numerical problems, and parallel computation.

This course continues the study of software design, development and verification. Topics include object oriented design, the use of API’s, and testing and verification. Specific techniques may include GUI’s and event driven programming, multi-threading, client-server networking, fault tolerant computing, stream programming, and security.

An advanced study of the electronics, mechanics, sensors, and programming of robots. Emphasis is placed on programming robots that investigate, analyze, and interact with the environment. Topics may include mobile robots, legged robots, computer vision, and various approaches to robot intelligence.

This course introduces the theory and practice of relational databases and relational database management systems. Topics include data modeling and database design, the relational algebra and relational calculus, SQL, and elements of RDBMS implementation such as file structure and data storage, indexing, and query evaluation. Additional topics may include web based access to databases, transaction management, reliability, security, and object oriented databases.

Important feature and concerns of implementation design on programming languages in common use today will be studied and analyzed. Includes data and control structures, run-time storage management, context-free grammars, and language translation systems, programming paradigms, and distributed and parallel programming constructs.

This course addresses a topic in computer science not covered in a regular course at a more advanced level than CS271. Possible topics include combinatorics, functional and logic programming, and data visualization and data mining.

This course studies the principles underlying the generation and display of 3D computer graphics. Topics include geometric modeling, 3D viewing and projection, lighting and shading, color, and the use of technologies scubas X3D, OpenGL, and Blender. Advanced topics might include ray tracing, radiosity, texture and bump mapping, mathematics of curves and surfaces, volumetric rendering, and animation.

This course is a general introduction to the design and implementation of modern operating systems. The subjects covered include historical development of operating systems, concurrency, synchronization, scheduling, paging, virtual memory, input/output devices, files, and security.

An exploration of the implementation of modern programming languages looking at compiler design and construction.. The main focus is object oriented programming languages. Major topics in compilation are covered including scanning, parsing, semantic analysis, and code generation. Advanced topics might include garbage collection and optimization.

This course is an introduction to the theory and practice of computer networks, the software protocols that allow them to operate, and the applications that make use of them. Topics include direct-link networks, packet switching, internetworking, end-to-end protocols, network applications, and network security.

This course is an introduction to some of the major problems and techniques in thee field of artificial intelligence. Topics might include knowledge representation, natural language processing, machine learning, neural nets, case-based reasoning, intelligent agents, and artificial life.

*Enrollment restricted to students with Senior standing in Computer Science. Enrollment restricted to students who have obtained consent of supervising instructor. *This course is designed for students capable of independent and original research.

*Enrollment restricted to students who have obtained consent of faculty sponsor.* Faculty-sponsored academic internship in business, industrial, government, or research firm.