Principles of Programming: Fundamentals of object oriented programming in Java. Basic data types, methods, polymorphism, and inheritance.

Object-Oriented Program & Data: Basics of data structures introducing stacks, queues, and arrays in Java. Builds on OOP principles. Heavy focus on JavaFX and GUI creation.

Digital Design Fundamentals: Introduction to Verilog and Intel Quartus. Digital logic from and gates to designing a full CPU.

Computer Organization and Assembly Language: Introduction to register level programming. MIPS Assembly and processor and memory organization.

Intro to Programming Languages: Intro to C/C++ and first look at logic, imperative, and functional programming.

Computing Ethics: Intellectual property rights, privacy, and ethics in cyber security.

Data Structures and Algorithms: Analyzing time and space complexity for data structures and algorithms. Implementing different data structures and algorithms on large data sets in C++.

Intro to Software Engineering: Intro to different software development models and planning. Extended usage of UML and Nassi-Schneiderman diagrams and Gantt charts. Working in a group and communicating effectively for a final project revolving around building a GUI for a large data set.

Information Assurance: Intro to cyber security taught in a CTF style course. Intro to the linux command line, wireshark, and x86 assembly. Overview of security concepts such as privacy, anonymity, authentication, web and network security and security objectives.

Operating Systems: Introduction to the kernel, pipelining, semaphores, and threads. Main and virtual memory, mass storage and I/O systems.

Principles of Programming Languages: Covered lexical analysis, lexer implementation, syntactic analysis, parse trees, BNF, grammars, first and follow sets, Chomsky Normal Form. Programming projects include building a lexical analyzer for given tokens, a parser for a given language, and a compiler for a given programming language.

Intro to Theoretical Computer Science: State diagrams of DFAs and NFAs, regular languages, PDAs, CFLs, Turing machines, decidability, and recognizability.

Computer Networks: 7 layer ISO/OSI model, applications such as HTTP and FTP, transport layer problems like connection-oriented protocols, network layer problems like congestion control, data link layer problems like error correction, MAC protocols, the physical layer.

Computer Systems Security: extensive use of the Linux command line, suid challenges, x86 assembly, shellcode injection, chroot jails, seccomp, GDB, binary reversal, stack corruption, heap corruption, ROP, race conditions, and the Linux kernel. All taught in a CTF style course available to the public at pwn.college

Computer Network Security: learning modern network attacks and how to prevent them. SNORT, hping3, NAT, iptables, SDNs.

Computer and Network Forensics: Extensive exploration of hard drives, steganography, secure practices when handling data, and blockchain project written in python.