Various Computer Science Topics


  1. Introduction to Computer Programming Using The C Programming Language
  2. Introduction to the C++ Programming Language
  3. Introduction to Operating Systems
  4. Data Structures
  5. Videos
  6. Mead's Guides
  7. Math/Graphics Frameworks
  8. Miscellaneous Documentation

Introduction to Computer Programming Using the C Programming Language

    TopicDescription
  1. Fundamentals . . . . . . . . . . . .
  2. Introduction, computer programming, languages, readable source code vs. binary code, low-level vs. high-level, symbols, compilers vs. interpreters.
  3. Creating a simple program .
  4. Shows the step-by-step process of editing, pre-processing, compiling, linking, and executing a computer program.
  5. Formatted Input/Output . . . .
  6. Introduction to printf, scanf, format specifiers, escape sequences.
  7. Expressions and Operators
  8. Precedence, associativity, order of operations, assignments, side-effects.
  9. Conditionals . . . . . . . . . . . . .
  10. Boolean logic, booleans, 0/1 vs. TRUE/FALSE, relational/logical operators, if, else, switch, case.
  11. Iteration . . . . . . . . . . . . . . . . .
  12. Looping and repetitions, while, do, for, break, continue, nested loops.
  13. Functions . . . . . . . . . . . . . . . .
  14. Prototypes (declarations), parameters vs. arguments, call-by-value, scope (local vs. global), return, void.
  15. Larger programs . . . . . . . . . .
  16. Programs with multiple files, separate compilation/linking.
  17. Random Numbers . . . . . . . .
  18. Pseudo-random number generators (PRNG), seeding and constraining the PRNG, using wrapper (convenience) functions.
  19. Arrays . . . . . . . . . . . . . . . . . .
  20. The sizeof operator, one-dimensional arrays, accessing (subscripting), initializing, passing to functions.
  21. Data Types . . . . . . . . . . . . . .
  22. Integral types, signed/unsigned integers, long/short integers, characters, floating point types, long doubles, literal constants, typedef.
  23. Pointers . . . . . . . . . . . . . . . . .
  24. The address-of operator (&), indirection/dereference operator, arrays vs. pointers, passing pointers to functions, const keyword, pointer arithmetic.
  25. Strings . . . . . . . . . . . . . . . . . .
  26. String literals, variables, NUL terminator, initializing strings, character arrays vs. strings, string functions, the string pool and compiler optimizations.
  27. File I/O . . . . . . . . . . . . . . . . . .
  28. The FILE type, opening/closing files, reading/writing files, text vs. binary files, redirection.
  29. Structures . . . . . . . . . . . . . . .
  30. The struct keyword, members, initializing structures, pointers to structures, structure operations, passing structures to functions, nested structures, self-referencing structures.
  31. Dynamic Memory Allocation   
  32. Functions malloc/calloc/free, dynamically allocated arrays and structures, the realloc function.
  33. Introduction to linked-lists . .
  34. A dynamic and flexible data structure, ubiquitous in all of computer science. The node structure, manipulating linked lists, insert, delete, search.
  35. Complex declarations . . . . .
  36. Pointers vs. arrays vs. functions, function pointers, callbacks, jump tables.
  37. Variadic Functions . . . . . . . .
  38. Functions like printf and scanf that take an indeterminate number of parameters and how to create your own.
  39. More Arrays . . . . . . . . . . . . .
  40. Multi-dimensional arrays, pointers and 2D arrays, passing multiple-dimension arrays to functions, dynamically allocated 2D arrays, multiple-dimension arrays and pointers (pointer arithmetic).
  41. Visibility and Lifetime . . . . .
  42. Linkage (internal vs. external vs. none), the extern, static, registger, and auto keywords, lifetime (storage classes)
  43. More Structures . . . . . . . . . .
  44. Alignment, pointer arithmetic with structure members, bit-fields, unions, Case Study: reading/writing bitmap image files (.BMP). Part 1 (video)   Part 2 (video)  
  45. Record-based File I/O . . . . .
  46. Using structured data files (a.k.a. record-based) for performance, storing data as text vs. binary, reading/updating records, efficiency concerns.
  47. Runtime Environment . . . . .
  48. Command line arguments, environment variables, exec/exit functions.
  49. Runtime Library . . . . . . . . . .
  50. Lots of functions for you to learn.



Introduction to the C++ Programming Language

    TopicDescription
  1. make examples . . . . . . . . . . .
  2. These are just some notes from the make lecture. Video here.
  3. Doxygen examples . . . . . . . .
  4. These are just some notes from the Doxygen lecture. Video here.
  5. Moving from C to C++ . . . . . . .
  6. Points out some of the more subtle differences between C and C++.
  7. Namespaces . . . . . . . . . . . . . .
  8. Introduction to program organization in C++. Nested, unnamed namespaces, using declarations/directives, the std namespace.
  9. Dynamic Memory Allocation   
  10. Using new and delete to allocate and free memory, zero initializing memory, heap vs. stack.
  11. Functions . . . . . . . . . . . . . . . .
  12. References, default parameters, overloading.
  13. Simple I/O . . . . . . . . . . . . . . . .
  14. Overview of formatted output using cout, formatted input using cin, manipulators.
  15. Classes . . . . . . . . . . . . . . . . . .
  16. Introduction to classes, structures vs. classes, encapsulation, accessibility, public, private, constructors, destructors, this.
  17. More Classes . . . . . . . . . . . . .
  18. Operator overloading, conversions, friend functions, member initialization list.
  19. Even More Classes . . . . . . .
  20. More operator overloading, default methods, copy constructors, deep vs. shallow copy/assignment, static members, Case Study: Implementing a String class.
  21. Yet More Classes . . . . . . . . . .
  22. Aggregation/containment, conversions, efficiency issues.
  23. Function Templates . . . . . . . .
  24. Type deduction, overloads, multiple template parameters, specializations.
  25. Class Templates . . . . . . . . . . .
  26. Type and non-type parameters, default/multiple parameters, instantiations.
  27. The string Class and the STL   
  28. std::string, containers, iterators, algorithms, function objects, etc.
  29. Exceptions . . . . . . . . . . . . . . .
  30. Part 1: try/throw/catch keywords, exception classes
  31. More Exceptions. . . . . . . . . . .
  32. Part 2: More details and examples (some parts may be deprecated, e.g. exception specifications).
  33. File I/O . . . . . . . . . . . . . . . . . .
  34. The ifstream, ofstream objects, C vs. C++ I/O, file modes.
  35. Inheritance . . . . . . . . . . . . . . .
  36. Object-orientation, base classes, derived classes
  37. More Inheritance . . . . . . . . . . .
  38. Polymorphism, virtual functions, abstract base classes, composition vs. inheritance
  39. More STL 1 . . . . . . . . . . . . . . .
  40. More containers and iterators with lots of example code.
  41. More STL 2 . . . . . . . . . . . . . . .
  42. More algorithms and function objects with lots of example code.
  43. Mixing C and C++ . . . . . . . . . .
  44. Using C and C++ in the same project. Function overloading and name-mangling, using the STL in C.



Introduction to Operating Systems

    TopicDescription
  1. Virtualization . . . . . . . . . . . .
  2. a) Virtual machines, host/guest operating systems, Case Study: VirtualBox and Linux Mint.
    b) Goals for setting up a Virtual Machine.
    c) Linux Mint User's Manual - The documentation contains more details about Linux Mint. It's only about 50 pages, so you should sit at your Linux computer and read through it. It's from a previous version, but most of the information is still relevant.
    d) This is the GNU/Linux Distribution Timeline to see where distributions come from. The image is from here. A great site to read up about the top 100 distributions is distrowatch.com.
    e) Here is the list of release names that Ubuntu uses. (Mint is based on Ubuntu.) We're using Mint 20.2, which is based on Ubuntu 20.04 LTS (Focal Fossa).
    f) Some background on how the names were "suggested" or "voted for" is here.
    g) Here is the list of release names used by Linux Mint.
  3. Introduction to the OS . . . . . .
  4. Overview of operating systems, computer architecture, modern systems, brief evolution of computers.
  5. Command Line Options . . . .
  6. Mead's Guide to getopt - Programming with command line options using getopt.
  7. The Boot Process . . . . . . . . .
  8. POST, BIOS, Boot loaders, MBR, Partition tables, GUID partitions
  9. Operating System API . . . . .
  10. Single vs. multi-tasking, System calls vs. library calls, kernel/user mode, memory protection, memory segments, strace, performance.
  11. Processes . . . . . . . . . . . . . . .
  12. Forking, process states, PCB, scheduling, interprocess communication, POSIX, Win32, the exec family of functions.
  13. Threads . . . . . . . . . . . . . . . . .
  14. Single vs. multi-threading, Thread API, POSIX, Win32, threads vs. processes, affinity.
  15. Memory . . . . . . . . . . . . . . . .
  16. Memory heirarchy, physical vs. logical, pages vs. frames, caching, addressing, paging/swapping, shared objects and libraries, Case Study: Implementing a simple memory manager.
  17. File Systems . . . . . . . . . . . .
  18. Files, API, inodes, directories, blocks, extents, performance differences. Case Study: The ext2/ext3/ext4 filesystem.
  19. A Simple FS Implementation   
  20. Case Study: Implementing a simple FAT-like filesystem. Design decisions, creating the FS, adding/deleting files, fragmentation issues.
  21. Scheduling . . . . . . . . . . . . . . .
  22. Non-preemptive, preemptive, priorities, multicore scheduling, FIFO, SJF, modern scheduling algorithms.
  23. Synchronization . . . . . . . . . . .
  24. Race conditions, critical sections, locking, mutexes, semaphores, atomicity, deadlock, C11's atomic_int.
  25. Storage . . . . . . . . . . . . . . . . .
  26. Various media (hard drives, SSD), partitioning, low- vs. high-level formatting, scheduling algorithms, performance, RAID, NAS.
  27. Sockets . . . . . . . . . . . . . . . . .
  28. IPC, STREAM vs. DGRAM, send/recv messages, local machine vs. network, abstract sockets, Case Study: Logging server.



Data Structures

    TopicDescription
  1. Program Design Methodology   
  2. Program design methodologies, APIs, software development lifecycle.
  3. Memory Management . . . . . . .
  4. a) Custom memory allocators vs. built-in (e.g. malloc), performance, control and debugging.
    b) An article about memory managers from a game programmer's perspective. (They talk specifically about Madden NFL 97 and Madden NFL 2002. A little old, but still relevant.)
    c) An introduction to memory management that is referenced by the above article on Gamasutra.
    d) Another memory-management article. This is a little more in-depth, but still worth the read for those interested.
  5. Algorithm Analysis . . . . . . . . .
  6. Algorithm complexity, constant-time vs. linear-time vs. quadratic-time, O( ) notation, worst-case analysis, simple sorting techniques.
  7. Abstract Data Types . . . . . . . .
  8. Abstractions, interfaces, collections, arrays, lists, stacks, queues.
  9. Recursive Algorithms . . . . . . .
  10. Recursion and the run-time stack, back-tracking, tracing functions, quicksort.
  11. Trees (Part 1) . . . . . . . . . . . . . .
  12. Tree algorithms (create, search, insert, delete), traversals, binary search trees, splay trees, expression trees, compiler optimizations.
  13. Trees (Part 2) . . . . . . . . . . . . . .
  14. Balanced trees, AVL trees, 2-3-4 trees, red-black trees, performance characteristics, O(n) vs. O(lg2N).
  15. Hashing . . . . . . . . . . . . . . . . . .
  16. Hash tables, hash functions, more randomization techniques, open- vs. closed-addressing (chaining), collision resolution.
  17. Hash Function Comparison .
  18. Hash function performance and distribution. Shows real-world results from various hash table configurations and why hash tables are very useful data structures.
  19. Introduction to Graphs . . . . . .
  20. Directed, undirected, weighted, paths, cycles, adjacency, traversals, spanning trees, shortest-path (Djikstra's algorithm).
  21. Heaps . . . . . . . . . . . . . . . . . . . .
  22. Priority queues, implementing node-based trees vs. array-based trees.
  23. Skip Lists . . . . . . . . . . . . . . . . .
  24. High-performance linked-lists using randomization techniques.
  25. B-Trees . . . . . . . . . . . . . . . . . .
  26. External (secondary storage, e.g. disk) searching for very large data sets. B+trees, branching factor.
  27. Benchmarks and Summary . .
  28. Comparing various data structures and their performance.



Videos

    Topic[Time]Description
  1. Installing CS120/CS170 Tools . . . . . .
  2. [00:04:18]How to setup a CS120/CS170 build environment using Chocolately on Windows 10. Includes the MinGW compilers, Cygwin utilities for Windows, Doxygen, and Dr. Memory.
  3. Installing/Configuring the Compiler . .
  4. [00:06:30]    How to install, configure, and use the compiler and other tools using the Mead Installer.
  5. The Command Prompt . . . . . . . . . . . .
  6. [00:13:25]How to use the command console in Windows for editing/compiling/linking/running programs.
  7. Introduction to make . . . . . . . . . . . . . .
  8. [01:23:36]How to use the make utility with makefiles. This is the test file that was used in the video: makefile notes.
  9. Introduction to Doxygen . . . . . . . . . . .
  10. [01:16:40]How to use Doxygen, an automated documentation generator. Resources can be found here.
  11. Introduction to Memory Debugging . .
  12. [01:00:17]How to use Dr. Memory under Windows and Valgrind under WSL/Linux. Here is the sample code used.
  13. Dr. Memory False Positives . . . . . . . .
  14. [00:09:51]How to suppress false positives with Dr. Memory and Windows 10.
  15. Installing Multiple Compilers in WSL     
  16. [00:05:19]How to install multiple versions of the GCC compilers on the same system and switch between them. There is a script that you can run. You can find the web page here.
  17. Install Linux VirtualBox on Windows .
  18. [00:09:59]How to create and configure a virtual machine using VirtualBox on Windows. It also shows how to install Linux Mint using the VM that was just created.
  19. Additional VirtualBox Settings . . . . . .
  20. [00:02:33]How to configure additional settings within VirtualBox.
  21. Update/Upgrade Linux . . . . . . . . . . . . .
  22. [00:06:14]How to update and upgrade your Linux Mint installation. This assumes that you've already completed the previous step of creating/configuring a virtual machine and installing Linux Mint into it.
  23. Linux Development Environment . . . .
  24. [00:10:36]How to setup a build environment (gcc, g++, valgrind, doxygen, etc.) in Linux.
  25. Nested Virtual Machines . . . . . . . . . . .
  26. [00:03:11]This shows a Linux Mint virtual machine (using VirtualBox) running inside of a Windows 10 virtual machine (using Parallels) running inside of an iMac 27" 5K Retina machine. Pretty Cool!
  27. Setting up a ~/bin directory . . . . . . . . .
  28. [00:05:24](Linux) How to create a ~/bin directory in your home directory, add it to the PATH environment variable, copy binary files to the ~/bin directory and mark them executable.
  29. The Submission Server . . . . . . . . . . . .
  30. [00:03:07]How to upload all of the labs and assignments to the submission server (pontus.digipen.edu).
  31. Uploading a Lab . . . . . . . . . . . . . . . . . .
  32. [00:07:49]How to create, test, and upload a lab.



Mead's Guides

    TopicDescription
  1. Modern C++ . . . . . . . . . . . . . . . .
  2. This guide demonstrates several of the new features from the C++11/14/17 standards.
  3. Lambda Expressions in C++ .
  4. This feature (lambda functions) has been around in other languages for decades and has finally come to C++11 and on. Learn all of the details about this long-awaited feature.
  5. const in C/C++ . . . . . . . . . . . . .
  6. In my humble opinion, the const keyword in C and C++ is serioulsy under-used. It's also a source of confusion to new programmers. This short guide should help you figure it all out.
  7. The Secure Shell (SSH) . . . . .
  8. The secure shell (SSH) is the defacto standard for connecting to computers on the Internet. Knowing how to use it will make you significantly more productive.
  9. Memory Debuggers . . . . . . . . .
  10. This short guide demonstrates how to use Dr. Memory and Valgrind to debug your C/C++ programs.
  11. Using the getopt API . . . . . . . .
  12. Command line options give programs much more power and flexibility. Learn how to use them effectively with the getopt (get options) API. You'll be glad you did, and your users will happier, as well.
  13. Signals . . . . . . . . . . . . . . . . . . . .
  14. In a nutshell, Linux (Unix-like) signals allow one process to "get the attention" of another process. It's only a one-way interaction (unlike of IPC mechanisms), but it's very useful for what it does.
  15. Colorized Console Output . . . .
  16. This short guide shows how to output colorized text in a console. When used correctly, this can make the output much easier to read and understand.
  17. Building Software from Source    
  18. There are many ways to install software on a Linux computer. This short tutorial shows the various ways to install software. Designed for Linux Mint, but most of it should be applicable to other Linux distributions.
  19. Upgrading GCC and Clang . .
  20. This guide shows how to install (from repositories) and use multiple versions of gcc/g++ and clang/clang++ on Linux.
  21. Building GCC from Source . . .
  22. This guide shows how to build and install the compilers from source code on Linux or Mac.
  23. C++ References . . . . . . . . . . . .
  24. This page contains a list of essential references on C++. It's a continuing work-in-progress and I will be updating as time goes by. I'm hoping to put my "reviews" here as time permits.
  25. Summer RAD Session . . . . . .
  26. Not really a "Mead's Guide" item. The title of this is "Designing and Building Graphical User Interfaces for Tools Development" Back in the day, I did Windows GUI tools development for a living (i.e. before teaching).



Math/Graphics Frameworks

    TopicDescription
  1. MAT300
  2. Curves and Surfaces
  3. MAT340
  4. Probability and Statistics
  5. MAT364
  6. Combinatorial Game Theory



Miscellaneous Documentation

    TopicDescription
  1. Setting up WSL . . . . . . . . .
  2. I'm not very familiar with Windows, but I made this tutorial a while back and some of you may find it useful. You may find better information on Microsoft's site.
  3. Digipen Guitar Hero . . . . .
  4. I performed several times for open mic nights, both solo and with students. The videos are on youtube. "I'd probably have been a professional musician if I didn't get into computers."
  5. Building a Custom Router  
  6. I tried my hand at using NAT by building my own router/firewall to go between the cable modem and my computers.
  7. Mixing Java and Delphi
  8. Delphi is the premiere language for Windows GUIs and is based on object-oriented Pascal. Also shows how to mix C/C++ with Java.



site stats