View the course matrices for SCS Majors:
Computer Science Matrix (c/o '23 and '24)
Computer Science Matrix (c/o '25 and beyond)
View the course matrix for SIT Majors:
View the course matrix for SDS Majors:
IC210 Intro to Computer Science (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 Student Outcome 1.
- 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. Supports Student Outcome 4.
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 fundamentals 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 Student Outcome 2.
- 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.
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. Supports Student Outcome 3.
- 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 Student Outcome 2.
- Describe how the data path 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.
- Understand the ethical issues and responsibilities of fair use with regard to hardware and software and its local and global impact on organizations.
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.
- Learn basic operating system security concepts such as those related to file permissions, user group permissions, unintended execution paths. Supports Student Outcome 4.
- Design software on Unix that uses concurrency to solve problems.
- Use a UNIX command shell.
- Navigate and manipulate the UNIX file system from the command-line.
- Build application software using a make utility.
- Write simple shell scripts and configure resource files.
- Understand the security issues and responsibilities of a systems administrator and the consequence of an unsecure system and its local and global impact on an individual and organization.
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 Student Outcome 1.
- Demonstrate the ability to implement the canonical ADTs with: arrays, linked lists, binary trees, hash tables, balanced trees, and other similar structures. Supports Student Outcome 2.
- 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.
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.
- Apply the principles of network layer design to the analysis and evaluation of routing algorithms, congestion control techniques, inter networking 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.
- 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. Supports Student Outcome 4.
IC411 Operating Systems (3-0-3)
The study of the operating system as a resource manager. This course begins with a brief overview of major evolutionary changes in OS design, then explores the interface between the OS and the architecture. It continues with discussions of processes, threads, concurrency, and synchronization, including scheduling and deadlock. Memory, I/O and files, security, and virtualization are also covered.
Prereq: IC220 or SY303, IC221 or SY204, and IC312 or SY301.
- Explain the principles of mutual exclusion and synchronization of running processes.
- Describe and be able to implement strategies for detection, avoidance, and prevention of process deadlock and starvation.
- Be able to solve problems in a multi-threaded programming environment. Supports Student Outcome 1.
- Understand information system vulnerabilities, system level defenses, and information assurance and security principles and practices. Supports Student Outcome 1.
IC470 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 Student Outcome IT-6.
- Understand advanced concepts in O-O analysis, planning, design, implementation, testing and deployment of software
- Collaborate in a team environment. Supports Student Outcome 5.
- Demonstrate effective communication orally and in writing. Supports Student Outcome 3.
- 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. Supports Student Outcome 4.
IC480 Research Seminar/Capstone (1-4-3)
This is a capstone course that ties together concepts from the information technology and computer science curricula 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: IC470. [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.
- 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 Student Outcome 5.
- Demonstrate effective communication orally, in writing, and via multimedia. Supports Student Outcome 3.
- Understand the professional issues and responsibilities developing a software package for a client.
- Understand a project’s ethical issues from a societal perspective using the Software Engineering Code of Ethics. Supports Student Outcome 4.
SI200 Information Technology for the Junior Officer (3-2-4)
SI204 Intro to Computer Science (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 course is intended for non-majors or advanced 4/c midshipmen.
Prereq: None. [spring]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.
- 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.
SI221 Data Structures (2-2-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. This course is intended for non-majors.
Prereq: SI204 [fall]
- Understand the fundamentals of time analysis with data structures, such as Big-O.
- Possess an understanding of the more difficult concepts in C++ such as abstraction and the idea of separation of implementation and interface.
- Given a problem specification, recognize and apply the canonical ADTs (such as Lists, Queues, Stacks, and Trees) appropriate for solving the problem or designing a computer-based system that meets the desired specifications.
- Demonstrate the ability to design, describe and implement the canonical ADTs with: arrays, linked lists, binary trees, and other similar structures.
- Be able to code in a professional and technical manner across all course topics.
SI242 Discrete Structures for Computing (2-2-3)
An introduction to mathematical tools and concepts necessary for designing and understanding computer software and systems: truth tables, propositional and predicate logic, basic number theory, proof techniques, sequences, induction, recurrences, and basic linear algebra. Labs will involve hands-on activities to demonstrate, test, and explore the mathematical topics of the class through computer tools such as SAT solvers, modular arithmetic libraries, and recursive programs. Cannot receive credit for SI242 and (SM242 or SM342).
Prereq: SM122 or SM162. Coreq: IC210 or SI204.
SI268 Programming for Everyone (2-2-3)
This hands-on course introduces computer programming to a general audience using Python. Students will learn basic programming skills they will be able to apply to a variety of disciplines, including social sciences, humanities, science, and engineering. Credit will not be given for SI268 and SY201.
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.
- Develop effective written arguments regarding algorithmic performance. Supports Student Outcome 3.
- Compare and analyze the performance of algorithms. Supports Student Outcome CS-6.
- 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. Supports Student Outcome 4.
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 Student Outcome CS-6.
- SI342 Theory of Computing (4-0-4)
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 Student Outcome CS-6.
- 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.
- 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.
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, game trees, state and plan space planning, and machine learning.
Prereq: SM242 and (IC312 or SY303) and IC211
SI425 Natural Language Processing (2-2-3)
This course introduces students to Natural Language Processing, a subfield within Artificial Intelligence that studies how computers can understand human languages. This course covers algorithms to learn and interpret languages like English. It is a hands-on lab course covering topics like author identification, language modeling, information retrieval from huge datasets, email filtering, syntactic parsing, and sentiment analysis.
- Design and implement language models with smoothing for unseen words.
- Discuss the key components of a probabilistic parser.
- Understand basic English syntax and its use in NLP applications.
- Describe the difference between Naive Bayes and log-linear algorithms.
- Design and implement probabilistic document classifiers.
- Describe basic learning algorithms that use bootstrapping techniques.
SI436 Distributed Systems (3-0-3)
Distributed systems are software systems built on networked architectures, where multiple machines are interconnected by local or wide-area networks. Many currently deployed systems are distributed systems of one type or another, including internet services and control systems used in military applications. This course will provide an in-depth introduction to distributed systems, including their characteristics and challenges, various fundamental structuring paradigms that can simplify the construction of distributed software, and analyze example systems.
Prereqs: IC211, IC220, and IC221
SI440 Database Systems (3-0-3)
This course offers an introduction to relational database systems, NoSQL and NewSQL systems, and other tools for large-scale data storage and analysis. Concepts covered include relational model, SQL, query processing and optimization, database design, transactions, NoSQL, and NewSQL systems. The course focuses on the design and internals of the modern database systems.
Prereq: IC312 [spring]
SI458 High Performance Computing (2-2-3)
A supercomputer is generally defined as a system that performs at or near the highest speed for currently available computers. High Performance Computing (HPC) is the use of parallel processing in supercomputers or similar systems for running computationally-intensive application programs. The emphasis is on efficiency at every level for optimum speed of execution. In this course, we will look at the current state of the HPC art, study the techniques used for parallel programming - using cores, nodes, and even GPUs for maximum processing power. We will write some simulations to use these HPC techniques, run the simulations on our own HPC system, and produce visualizations of the resulting data.
Prereq: IC312 or SY301
SI459 Binary Analysis & Exploitation (2-2-3)
In this course, midshipmen study in detail how programs execute at the binary level. They gain a better understanding of the compilation process and how high-level source code is mapped to binary machine code. They learn about memory organization on the stack and the heap, analyze binary executable files, learn about operating system projections, and gain an understanding of the binary exploit development process.
Pre-reqs: IC220, IC221
SI460 Computer Graphics (2-2-3)
An introductory course focusing on developing applications around various methods of visualizing data. Emphasis will be on 2D/3D graphics and data visualization. Topics include processing and modeling data, image manipulation, and building interactive 2D/3D OpenGL based applications.
Prereq: IC312 [fall]
SI470 Machine Learning and Data Science (2-2-3)
Decisions based on data incresingly drive modern decision making. Machine Learning is the study of mathematically making conclusions and predictions given insight from data. This course covers a broad scope of machine learning and data science problems, including supervised learning, unsupervised learning, and reinforcement learning. Techniques include parametric approaches, kernelized methods, and neural networks. The class also introduces learning theory and the mathematical underpinnings of modern machine learning.
Prereq: SI420 [fall]
SI475 Intelligent Robotics (2-2-3)
This course presents a survey of the concepts and theories of modern robot systems, including both manipulators and mobile robots. It covers kinematics, sensing, mapping and navigation, decision making, and learning. Concepts are applied on multiple robotic platforms.
Prereq: IC211 and (IC312 or SY301) [spring]
IT350 Web & Internet Programming (2-2-3)
Web site design and management, clients and servers, client and server side scripting languages, web transmission protocols.
Prereq: IC210 or SI204. [fall]Students will:
- Successfully complete team-based projects.
- Explain how the client-server model of Internet programming works.
- Design and develop interactive, client-side, executable web applications.
- Design and develop server-side web applications.
- Comprehend and describe the importance of web standards.
- Compare the advantages and disadvantages of the core Internet protocols.
- Understand the social issues and responsibilities of customizing online messages and advertising and its local and global impact on society. Supports Student Outcome 4.
IT360 Applied Database Systems (2-2-3)
This course introduces the principles underlying Database Management Systems (DBMS) with a special emphasis on database management system structure and function when integrated with web-based database applications. Note: students MAY take both IT360 and SI440 for credit.
Prereq: IC312, IT350. [spring]Students will:
- Design, create, and query relational databases to satisfy user requirements.
- Design, build and deploy database-backed applications with dynamic website front-end. Supports Student Outcome IT-6.
- Implement data access control mechanisms for database and application security.
- Explain the main functionality provided by modern database management systems: transactions, concurrency control, crash recovery.
- Understand the ethical issues and responsibilities of records management and its impact on privacy, discrimination, etc. and its local and global impact on society.
IT430 Computer and Network Security (2-2-3)
This course is an introduction to the theoretical and practical facets of Computer Security to include: Department of Defense (DoD)/Department of the Navy (DoN) policies and directives, Trusted systems, Access mediation, Cryptography, Public Key Infrastructure (PKI), Information Warfare, Network security and Database security. Laboratory work will include student exercises demonstrating information assurance concepts culminating in a vulnerability analysis of given systems.
Prereq: IC322. [spring]Students will:
- Understand and apply principles and best practices of computer and communications security.
- Analyze network security vulnerabilities and apply appropriate defensive mechanisms.
- Understand cryptographic principles and the implications of their use in computer and network security.
- Analyze ethical, legal, social and professional issues relevant to information assurance
- Demonstrate the ability to work in teams in an integrated approach. Supports Student Outcome 3.
- Understand the security issues and responsibilities of freely available hacker tools and its local and global impact on organizations.
IT432 Advanced Computer and Network Security (2-2-3)
This course provides an introduction to topics in secure system design, including: cryptography, operating system security, and language based security. Where the IT430 course focuses primarily on securing an existing system, this course studies how to design a system to meet security goals. Students will design and implement components of a secure system.
Prereq: IT430. [fall]Students will:
- Understand and apply system security techniques to system design problems.
- Analyze operating systems and program security vulnerabilities and apply appropriate defensive mechanisms.
- Understand cryptographic algorithms and the implications of their use in computer and network security.
- Analyze ethical, legal, social and professional issues relevant to information assurance.
IT452 Advanced Web and Internet Systems (2-2-3)
Web server design and configuration, search engine design and usage,web security and authentication, servlet implementations, web collaboration mechanisms, web services, and knowledge representation on the web.
Prereq: IT350. [fall, spring]Students will:
- Design and implement a dynamic servlet program.
- Select and utilize appropriate web collaboration systems.
- Describe the basic operation of modern search engines.
- Explain and select among different kinds of web security mechanisms.
- Identify and invoke relevant web services to accomplish an information need.
- Assess privacy and security issues related to the remote network storage and retrieval of documents and communications.
IT460 Human Computer Interaction (2-2-3)
An introductory course emphasizing interactive software design, development and evaluation using a human-centered approach. Topics include aspects of human sensation, perception and cognitive psychology.
Prereq: IC312 or IT350. [fall, spring]Students will:
- Understand the scope of issues affecting human-computer interaction (HCI).
- Understand some of the physiological, perceptual and cognitive bases for good user-interface design.
- Design a graphical user-interface and use a UI API to implement a prototype.
- Evaluate a user-interface using techniques such as observation, survey, and experiments.
- Participate in discussions of situations involving ethical dilemmas related to HCI.
IT462 Advanced Database Systems (2-2-3)
This course will discuss advanced issues in database systems, including parallel, distributed and peer-to-peer databases, data warehousing and data mining, XML and service-oriented architectures. The course incorporates hands-on exercises using commercial database systems and products, as well as a web-database project.
Prereq: IT360 or SI440. [fall, spring]Students will:
- Apply data warehousing and data mining technologies to decision support.
- Illustrate and explain the use of client-server architecture for distributed database systems.
- Compare the basic concepts, data modeling and architectures between relational, object-oriented, and object-relational databases.
- Design and implement database-backed websites using a service-oriented architecture.
- Analyze ethical and legal issues related to peer-to-peer systems.
IT472 Mobile OS Development (2-2-3)
This course teaches students how to write software for mobile devices while reinforcing the principles of good object-oriented software development. To that end, this course covers all the necessary topics required for writing Android applications. It applies the fundamentals of object-oriented programming using Java. Students become well versed in XML, the Android Software Development Kit, the Android Studio IDE, Android application components and features, and many other topics of interest.
- Apply the principles of Object Oriented programming in the development of software for mobile devices.
- Understand how code is organized in an Android application, the purpose of each part and their relationship with each other.
- Demonstrate an understanding of the major components of Android applications, including Views, Activities, Services, Intents and Receivers.
- Design, develop and debug mobile applications for the Android operating system.
- Understand the security concerns unique to mobile devices.
SD211 Data Science & Programming I (4-2-3)
Introduction to computer programming for the purpose of implementing solutions relating to data acquisition, storage, processing, analysis, and visualization. The concepts provide foundational knowledge and experience upon which later data science courses will build. This is the first course for data science majors. Credit will not be given for both SD211 and any of: SY201, SI268.
This is the first course for Data Science majors.
Prereq: None. [fall]
SD212 Data Science & Programming II (4-2-3)
This course builds on the programming skills developed in the prerequisite course and moves the focus towards a wider software ecosystem in order to solve more complex data science tasks. Students will learn and apply foundational principles of program organization including classes and objects, interfaces, inheritance, abstraction, and decoupling. In addition, important command-line skills will be developed for data gathering and cleaning, as well as library and software acquisition and use. These principles will be utilized through high-level programming in Python to analyze and manipulate real-world data sets.
Prereq: SD211 [fall]
SD311 Data Structures & Scalability (3-0-3)
This course is an examination of computational efficiency in representing and computing with large data sets. Students will become familiar with the use and performance characteristics of common data structures including stacks, queues, lists, trees, heaps, and hash tables. The techniques of asymptotic analysis using big-O notation will be introduced as a formal tool to understanding how computer programs scale in resource use for increasingly large inputs. A strong emphasis will be placed on developing the ability to choose the most appropriate data structures for a given computational task, and to roughly estimate the asymptotic complexity of programs with loops and nested function calls. Credit will not be given for SD311 and any of: SY301 and IC312.
Prereq: SD211 [fall]
SD312 Machine Learning (3-2-2)
This course is intended to take the student beyond linear regression and classification models as taught in SM317. Subjects include learning theory, unsupervised learning, recommendation systems, reinforcement learning, and neural networks. Credit will not be given for both SD312 and SI470.
Prereq: SM317, SD311 or SI312
SD321 Data Storage (3-2-2)
This course provides students with an introduction to data storage methods and systems. Topics include hardware and software used to efficiently store large datasets, relational databases and data models, SQL, and applications that interact with databases.
Coreq: SD311 or permission of the Dept Chair
SD322 Human Data Interaction (3-2-2)
Studies the intersection of people and data. This course covers technical concepts relating to how humans interact with data interfaces and visualizations, as well as ethical questions of how humans interpret, present, and ultimately deploy data science tools.
SD411 Big Data Computing (3-0-3)
This course focuses on processing large datasets in a distributed environment, including cloud systems and High Performance Computer Centers. Topics include NoSQL systems, MapReduce, cloud architecture, and distributed frameworks. Students will gain familiarity using DoD cloud computing resources.
Prereq: SD321 or permission of Dept Chair
SD475 Data Science Capstone (3-2-2)
This course is a capstone course for the Data Science major. Students will read and make presentations on topics determined by the instructor. Each student will complete a project on a topic to be agreed upon by the instructor and student. Students will present their results in writing and orally.
Prereq: 1/C SDS major or permission of Dept Chair