Computer Science Banner
Computer Science Courses

The links below will take you to the catalog description for the course you have selected. If you would prefer to view a complete description of the course, including course objectives, major topics covered, labs, etc., please see the detailed course descriptions (i.e., the "Yellow Book") by following the appropriate links below.

View the course matrices for SCS Majors:

Class of 2009
and later

Computer Science Matrix

Required Courses

  • IC210  Intro to Computing (SI204 for class of 2009)
  • IC211  Object-Oriented Programming
  • IC220  Computer Architecture and Organization
  • IC221  Systems Programming
  • IC312  Data Structures
  • IC322  Computer Networks
  • SI340  Theory of Computing
  • SI335  Computer Algorithms
  • SI336  Software Engineering
  • SI413  Programming Languages and Implementation
  • IC480  Research Seminar/Capstone

Restricted Electives

SCS majors must take at least one of the following courses:
  • SI411  Operating Systems
  • SI420  Artificial Intelligence
  • SI435  Advanced Software Engineering
  • SI440  Database Organization
  • SI455  Advanced Computer Networks
  • SI460 Computer Graphics
  • SI475 Intelligent Robotics

Unrestricted Electives

In addition to selecting one restricted elective, SCS majors must take at least two other electives from the following list:
  • Any restricted elective from the above list not already taken as a restricted eletive.
  • SI462 Advanced Computer Graphics
  • IT430  Information Assurance and Network Security
  • IT432  Advanced Information Assurance and Network Security
  • IT452  Advanced Web and Internet Systems
  • IT460  Human Computer Interaction
  • IT462  Advanced Database Systems
  • IT470  Enterprise Computing
  • Any SI 485/486/495/496 course, as long as it is at least 3 credits.
  • Any IT 485/486/495/496 course, as long as it is at least 3 credits, and does not have the letter U,V, or W appended (e.g. IT485A is fine but IT485U is not).

Elective courses will be offered based on the preregistration enrollments. Students should expect that not all the courses listed will actually be offered (due to small enrollments). Those students will be expected to select an alternate choice if the course is dropped.

Service Courses (intended for non-majors)

  • SI250 Information Systems for the Junior Officer
  • SI283 Programming for Engineers

SI250 and SI283 may not be used to satisfy a CS major elective requirement. However, SI250 may be used as a "free elective."

Course Descriptions

IC210 Intro to Computing (3-2-4). Introduction to algorithmic development, problem solving and software design. Principles and concepts to provide foundational knowledge and experience upon which later computing courses will build. This is the first course for computer science and information technology majors. Prereq: None. [fall]
Students will:

  • Solve problems using the procedural programming paradigm;
  • Design, develop source code for, debug, and document programs using structured programming techniques in order to solve problems.  Supports Program Outcome (b);
  • Determine an appropriate data structure (such as linked lists, arrays) to be used in order to solve problems;
  • Understand the legal issues and responsibilities of copyright law with regard to information found on the Internet and its local and global impact on individuals.

[Return to top]

IC211 Object-Oriented Programming (2-2-3).  This course builds on the procedural programming skills developed in the prerequisite course and introduces the student to object oriented programming and design principles using Java.  Object oriented topics such as classes, inheritance, information hiding, polymorphism and dynamic binding are presented and used to create robust, reusable, and maintainable software.  The fundaments of Java are presented along with exception handling, I/O, event driven programming, simple GUIs and generics. Prereq: IC210 or SI204. [spring]
Students will:

  • Understand the fundamentals of object oriented programming;
  • Compare and contrast the differences between object oriented and procedural programming;
  • Describe the solution to a simple software requirement in terms of UML diagrams;
  • Given a problem specification, apply the principles of encapsulation, inheritance, polymorphism and information hiding to design and implement a software solution using Java.  Supports Program Outcome (c);
  • Demonstrate the appropriate use of public, private and protected members of a class;
  • Be proficient in the use of an off-the-shelf Integrated Development Environment (IDE) to construct and debug a multi-class object oriented application in Java;
  • Demonstrate the ability to construct and run a Java program from the command line as well as in an IDE;
  • Bring data into a program and present results using command line, GUI and file I/O;
  • Design and construct a simple GUI consisting of buttons and text fields using Swing;
  • Understand the social issues and responsibilities of computer gaming with regard to violence, graphic content and game addition and its local and global impact on individuals.

[Return to top]

IC220 Computer Architecture and Organization (3-0-3).  This course introduces students to performance metrics, instruction set architectures, assembly language, logic design, memory hierarchies, and pipelining. Prereq: IC210 or SI204 [spring]
Students will:

  • Critically evaluate the performance of computer systems;
  • Discuss modern trends and challenges in computer system design;
  • Understand how assembly language instructions are represented and executed by a processor;
  • Write short, procedural assembly language programs;
  • Specify and minimize digital logic.  Supports Program Outcome (c);
  • Describe how the datapath and control work together in a processor to execute a program;
  • Describe the memory hierarchy and be able to evaluate strategies for improving its performance.  Supports Program Outcome (a);
  • Understand the ethical issues and responsibilities of fair use with regard to hardware and software and its local and global impact on organizations.

[Return to top]

IC221 Systems Programming (2-2-3).  The study of an application's interface with the operating system. The operating system is treated as an information resource, and as a facilitator for information flow between processes, including those executing on separate machines. Topics include: process management, multiprogramming, and the basic concepts necessary to understand the design and operation of computer communication networks. Prereq: IC210 or SI204, Coreq: IC220. [spring]
Students will:

  • Understand the operation of the Unix OS from the user, systems programmer, and application programmer prospective;
  • Design software on Unix that uses concurrency to solve problems;
  • Use a UNIX command shell;
  • Navigate and manipulate the UNIX filesystem from the command-line;
  • Build application software using a make utility.  Supports Program Outcome (i);
  • Write simple shell scripts and configure resource files.  Supports Program Outcome (i);
  • Understand the security issues and responsibilities of a systems administrator and the consequence of an insecure system and its local and global impact on an individual and organization.

[Return to top]

IC312 Data Structures (3-0-3). This course examines abstract data types (ADT), data structures, data representation and information management including storage structures, allocation and collection. ADTs and data structures presented include lists, stacks, queues, trees, heaps, priority queues, maps, dictionaries and graphs. Sorting and searching techniques, hashing and graph algorithm analysis are also covered. Prereq: IC211, Coreq: SM242 [fall]
Students will:

  • Understand the fundamentals of algorithm analysis (Big-O, Big-Θ, Big-Omega);
  • Possess an understanding of the concept of abstraction and be able to describe the idea of separation of implementation and interface;
  • Given a problem specification, recognize and apply the canonical ADTs (Lists, Queues, Stacks, Trees, Priority Queues, Dictionaries, and Graphs) appropriate for solving the problem or designing a computer-based system that meets the desired specifications.  Supports Program Outcome (b);
  • Demonstrate the ability to implement the canonical ADTs with: arrays, linked lists, binary trees, hash tables, balanced trees, and other similar structures.  Supports Program Outcome (c);
  • Be proficient in defining and coding recursive algorithms, including recognizing when recursive solutions are appropriate;
  • Understand the professional issues and responsibilities of a software development and its local and global impact on an organization.

[Return to top]

IC322 Computer Networks (2-2-3).  The course presents the fundamental theoretical concepts, characteristics and principles of computer communications and computer networks, and analyzes and assesses these foundational concepts with respect to network performance and network design. Prereq: IC221, Coreq: SM242. [fall]
Students will:

  • Employ the principles of analog and digital data transmission, transmission media, coding techniques, and physical communication limits to analyze and design modems and signaling schemes;
  • Evaluate the operation and performance of practical data link protocols using the principles of framing, error detection and correction, ARQ and multiple access control.  Supports Program Outcome (a);
  • Apply the principles of network layer design to the analysis and evaluation of routing algorithms, congestion control techniques, internetworking and addressing;
  • Apply the concepts of addressing and address resolution, connection establishment, reliable transport, flow control and congestion control to install a simple client-server network using multiple stations and multiple media types.  Supports Program Outcome (i);
  • Understand the legal issues and responsibilities of the trade off between the user's privacy and the organization's ownership of the network and its local and global impact on an organization.

[Return to top]

SI340 Theory of Computing (3-0-3).  This course presents the theoretical foundations for computing, including the study of formal languages, finite state machines, pushdown automata, Turing machines and computability. Prereq: IC210 or SI204, Coreq: SM242. [fall]
Students will:

  • Understand the various models of computation, from both the formal language and the corresponding machine model perspective;

  • Understand some of the practical applications of these formal models of computation and language;

  • Apply the mathematical methods that let us describe computation and language in order to understand formal algorithms.  Supports Program Outcome (a).

[Return to top]

SI335 Computer Algorithms (3-0-3).  Presents techniques for designing and analyzing computer algorithms including divide and conquer, dynamic programming and greedy methods. Introduces classic algorithms for problems such as searching and sorting, graph analysis, file compression and cryptology. Prereq: IC312, SI340. [spring]
Students will:

  • Demonstrate an understanding of a variety of classic standard algorithms;

  • Employ a variety of standard techniques to devise efficient algorithms on their own;

  • Compare and analyze the performance of algorithms.  Supports Program Outcome (CS-a);

  • Understand the ethical issues and responsibilities of designing an algorithm that would render modern encryption techniques useless and its local and global impact on society.

[Return to top]

SI336 Software Engineering (2-2-3).  An introduction to the basic principles of software engineering.  Structured, object-oriented, and formal approaches are studied, with emphasis on life cycles, object-oriented techniques and team-oriented software development. Prereq: IC312. [spring]
Students will:

  • Develop a substantial team-oriented software application using the major aspects of software development: definition/requirements, analysis, planning, design, implementation, testing and deployment.  Supports Program Outcome (CS-b);

  • Understand advanced concepts in O-O analysis, planning, design, implementation, testing and deployment of software;

  • Collaborate in a team environment.  Supports Program Outcome (d);

  • Demonstrate effective communication orally and in writing.  Supports Program Outcome (f);

  • Understand the social and ethical issues and responsibilities of the Software Engineering Code of Ethics and its local and global impact on an organization and society.

[Return to top]

SI413 Programming Languages and Implementation (2-2-3).  This course examines basic concepts underlying the design of modern programming languages: types, control structures, abstraction mechanisms, inheritance, concurrency and constructs for programming. This course will include programming assignments in several languages.  Prereq: IC312, SI340. [fall]
Students will:

  • Understand the evolution of programming languages;

  • Solve problems using a functional programming language.  Supports Program Outcome (a);

  • Comprehend the nature and structure of language;

  • Describe a variety of garbage collection strategies;

  • Describe how object-oriented languages implement inheritance, polymorphism, encapsulation, and data-hiding;

  • Demonstrate the use of grammars and parsing;

  • Implement a simple interpreter.  Supports Program Outcome (a);

  • Describe how static, just-in-time, and on-the-fly compilers work;

  • Understand the security issues and responsibilities of closed specifications versus open specifications and its local and global impact on an organization.

[Return to top]

IC480 Research Seminar/Capstone (1-4-3).  This is a capstone course that ties together concepts from the information technology and computer science curriculums to solve a practical problem.  These team-oriented project solutions will include the requirements gathering, analysis, design and development of a computing system involving a large, multi-layer organization using appropriate information management and computing technologies. Prereq: IT440. [spring]
Students will:

  • Apply information technology and/or computer science to solve a “real-world” problem;

  • Design and develop a software-based system using current computing technology; including but not limited to databases, web delivery and networked systems.  Supports Program Outcome (i);

  • Create and maintain an effective project plan using “best practices” from IT and CS;

  • Access, manipulate and display data to aid in effective strategic decision-making;

  • Identify and evaluate emerging information technologies and their impact on the global environment.

  • Collaborate in a team environment.  Supports Program Outcome (d);

  • Demonstrate effective communication orally, in writing, and via multimedia.  Supports Program Outcome (f);

  • Understand the professional issues and responsibilities developing a software package for a client.

[Return to top]

SI411 Operating Systems (3-0-3). The study of the operating system as a resource manager.  Topics include process management, interrupt processing, memory management, deadlock handling, file systems, multiprogramming, multiprocessing, data security and protection. Prereq: IC221, IC332. [fall, spring]
Students will:

  • Understand the organization and architecture of computer systems at the programming level of system description;

  • Be able to solve problems in a multi-threaded programming environment;

  • Analyze and assess the computing environment foundational concepts with respect to security from the perspective of the operating system;

  • Evaluate contemporary legal, social, and ethical issues in computing professions.

[Return to top]

SI420 Artificial Intelligence (3-0-3). A study of the fundamental concepts and techniques in the design and implementation of functionally intelligent machines. Topics include problem-solving using state-space search, problem-reduction techniques, game trees, general problem solver; and knowledge representation using production systems, first-order predicate calculus and natural language. Prereq: SI335. [fall, spring]
Students will:

  • Apply core concepts such as algorithm design and analysis to the key problems and techniques in artificial intelligence;

  • Create AI programs in a team;

  • Create written documentation of AI programs, including both technical details and user manuals;

  • Analyze the social and ethical issues around standard AI ethical topics, such as:

    • the adoption of expert systems replacing human experts, OR;

    • implications of super-human-level intelligence replacing humans.

[Return to top]

SI435 Advanced Software Engineering (2-2-3). This course presents the latest trends in modern techniques and methods for large scale software development activities, such as object oriented programming. The use of CASE tools and group design project is stressed.  Prereq: SI336. [spring]
Students will:

  • Develop a substantial team-oriented software application using the major aspects of software development: definition/requirements, analysis, planning, design, implementation, testing and deployment;

  • Understand advanced concepts in O-O analysis, planning, design, implementation, testing and deployment of software;

  • Collaborate in a team environment;

  • Evaluate ethical scenarios from the perspective of the Software Engineering Code of Ethics.

[Return to top]

SI440 Database Systems (3-0-3).  Topics include database systems architecture, the various approaches to database organization including relational, hierarchical and network models; normalization and implementation issues.  Prereq: IC312. [fall, spring]
Students will:

  • Query relational databases using SQL;

  • Design, and create relational databases to satisfy user requirements;

  • Build parts of a real database management system;

  • Explain the main functionality provided by modern database management systems: query optimization, concurrency control, crash recovery;

  • Analyze the ethical issues and responsibilities related to records management.

[Return to top]

SI455 Advanced Computer Networks (3-0-3). This course provides an in-depth technical study of high-speed networking, client-server programming and applications, network firewall architectures and security procedures, and the ATM network. Prereq: IC322. [spring]
Students will:

  • Mathematically analyze the performance of computer networks, and evaluate the performance and complexity of various networking algorithms;

  • Design and evaluate a network to successfully meet desired end-user performance needs, in terms of communication delay, jitter, throughput, cost and complexity, and evaluate the limitations of current networking standards;

  • Understand how to use mathematical and algorithmic principles to balance the competing demands placed on the network—demands such as high throughput, high reliability, high security, fairness to all users, and ease of use—with each other and with what is practically feasible;

  • Employ network programming concepts to design, implement and test network application projects in a laboratory setting;

  • Understand the unique social, ethical and legal issues relevant to the use of computer networks, particularly as they pertain to security, privacy, computer crime and civil liberties.

[Return to top]

SI460 Computer Graphics (2-2-3).  A project-based course involving basic concepts, theories and algorithms associated with producing 2D and 3D images on a raster display. Topics include graphics primitives, modeling, viewing, illumination, shading, texture, and event-driven programming using a graphics API. Prereq: IC312. [fall]
Students will:

  • Understand various technologies that can be used for raster graphics displays;

  • Design and implement simple 2D and 3D interactive applications using a graphics API;

  • Create graphics applications involving multiple source code files and programming API;

  • Create graphics software that meets a given set of requirements;

  • Demonstrate understanding of the event-driven programming paradigm;

  • Convey an understanding of some of the social or ethical issues related to the use of computer-generated imagery in various application domains;

  • Create non-trivial software requiring the contribution of multiple programmers.

[Return to top]

SI462 Advanced Computer Graphics (2-2-3). A project-based course involving advanced graphics techniques such as ray-tracing, radiosity, volume rendering, virtual and augmented reality, haptics, and pixel shaders. Prereq: SI460. [spring]
Students will:

  • Implement fundamental raster graphics algorithms such as rasterization, clipping, projection and view transformation;

  • Understand the limitations of various illumination models, will be able to implement a global illumination model, and will be able to use it to render a lighted, shaded 3D scene;

  • Create graphics applications involving multiple source code files and programming API;

  • Create graphics software that meets a given set of requirements;

  • Lead the class through a discussion of a seminal paper in computer graphics;

  • Create non-trivial software requiring the contribution of multiple programmers.

[Return to top]

SI475 Intelligent Robotics (2-2-3). Presents the concepts and theories related to computer-driven robotic systems and computer-based vision systems. Students apply acquired knowledge in a laboratory setting be designing, coding, and testing robotics control and vision systems. Prereq: IC312. [spring]
Students will:

  • Understand concepts and theories related to computer-driven robotics systems and computer–based sensor systems;

  • Understand how robotic devices use sensor information to learn about their environment and how they apply AI techniques to this information to plan and accomplish tasks;

  • Understand how to process and analyze information provided by vision systems;

  • Apply acquired knowledge in a laboratory environment by designing, coding and debugging robotics control programs using a variety of robotics platforms and sensors;

  • Evaluate the impact on human society that would be made by intelligent robots.

[Return to top]

SI250 Information Systems for the Junior Officer. The primary emphasis of the course is practical applications of personal computers and the Internet in the Fleet/Fleet Marine Force (FMF), with coverage of some special tactical computers as well. Application software is addressed from a junior officer's viewpoint, as an operational unit Branch/Division/Company Officer or as a support staff member.

SI283 Programming for Engineers. An introduction to a structured programming language and its use in implementing algorithms to solve engineering problems.