![]() |
Topic | Description | |
---|---|---|
Introduction, computer programming, languages, readable source code vs. binary code, low-level vs. high-level, symbols, compilers vs. interpreters. | ||
Shows the step-by-step process of editing, pre-processing, compiling, linking, and executing a computer program. | ||
Introduction to printf, scanf, format specifiers, escape sequences. | ||
Precedence, associativity, order of operations, assignments, side-effects. | ||
Boolean logic, booleans, 0/1 vs. TRUE/FALSE, relational/logical operators, if, else, switch, case. | ||
Looping and repetitions, while, do, for, break, continue, nested loops. | ||
Prototypes (declarations), parameters vs. arguments, call-by-value, scope (local vs. global), return, void. | ||
Programs with multiple files, separate compilation/linking. | ||
Pseudo-random number generators (PRNG), seeding and constraining the PRNG, using wrapper (convenience) functions. | ||
The sizeof operator, one-dimensional arrays, accessing (subscripting), initializing, passing to functions. | ||
Integral types, signed/unsigned integers, long/short integers, characters, floating point types, long doubles, literal constants, typedef. | ||
The address-of operator (&), indirection/dereference operator, arrays vs. pointers, passing pointers to functions, const keyword, pointer arithmetic. | ||
String literals, variables, NUL terminator, initializing strings, character arrays vs. strings, string functions, the string pool and compiler optimizations. | ||
The FILE type, opening/closing files, reading/writing files, text vs. binary files, redirection. | ||
The struct keyword, members, initializing structures, pointers to structures, structure operations, passing structures to functions, nested structures, self-referencing structures. | ||
Functions malloc/calloc/free, dynamically allocated arrays and structures, the realloc function (video review). | ||
A dynamic and flexible data structure, ubiquitous in all of computer science. The node structure, manipulating linked lists, insert, delete, search. | ||
Pointers vs. arrays vs. functions, function pointers, callbacks, jump tables. | ||
Functions like printf and scanf that take an indeterminate number of parameters and how to create your own. | ||
Multi-dimensional arrays, pointers and 2D arrays, passing multiple-dimension arrays to functions, dynamically allocated 2D arrays, multiple-dimension arrays and pointers (pointer arithmetic). | ||
Linkage (internal vs. external vs. none), the extern, static, registger, and auto keywords, lifetime (storage classes) | ||
Alignment, pointer arithmetic with structure members, bit-fields, unions, Case Study: reading/writing bitmap image files (.BMP). Part 1 (video) Part 2 (video) | ||
Using structured data files (a.k.a. record-based) for performance, storing data as text vs. binary, reading/updating records, efficiency concerns. | ||
Command line arguments, environment variables, exec/exit functions. | ||
Lots of functions for you to learn. | ||
Several programming problems to practice with. |
Topic | Description | |
---|---|---|
These are just some notes from the make lecture. | ||
Make demo | Demonstrates step-by-step using make to automate building code. | |
These are just some notes from the Doxygen lecture. | ||
Doxygen demo | Demonstrates step-by-step using Doxygen to automate documentation creation. | |
Points out some of the more subtle differences between C and C++. | ||
Introduction to program organization in C++. Nested, unnamed namespaces, using declarations/directives, the std namespace. | ||
Using new and delete to allocate and free memory, zero initializing memory, heap vs. stack. | ||
References, default parameters, overloading. | ||
Overview of formatted output using cout, formatted input using cin, manipulators. | ||
Introduction to classes, structures vs. classes, encapsulation, accessibility, public, private, constructors, destructors, this. | ||
Operator overloading, conversions, friend functions, member initialization list. | ||
More operator overloading, default methods, copy constructors, deep vs. shallow copy/assignment, static members, Case Study: Implementing a String class. | ||
Aggregation/containment, conversions, efficiency issues. | ||
Type deduction, overloads, multiple template parameters, specializations. | ||
Type and non-type parameters, default/multiple parameters, instantiations. | ||
std::string, containers, iterators, algorithms, function objects, etc. | ||
Part 1: try/throw/catch keywords, exception classes | ||
Part 2: More details and examples (some parts may be deprecated, e.g. exception specifications). | ||
The ifstream, ofstream objects, C vs. C++ I/O, file modes. | ||
STL Demo | Why you should be using the STL whenever possible. It is C++'s Secret Weapon™. | |
Object-orientation, base classes, derived classes | ||
Polymorphism, virtual functions, abstract base classes, composition vs. inheritance | ||
Polymorphism demo | Video review on polymorphic behavior with abstract classes and virtual methods. | |
More containers and iterators with lots of example code. | ||
More algorithms and function objects with lots of example code. | ||
Using C and C++ in the same project. Function overloading and name-mangling, using the STL in C. | ||
This guide demonstrates several of the newer features from the C++11/14/17 standards. | ||
This feature (lambda functions) has been around in other languages for decades and has finally come to C++. Learn all of the details about this long-awaited feature. | ||
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. |
Topic | Description | |
---|---|---|
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. | ||
Overview of operating systems, computer architecture, modern systems, brief evolution of computers. | ||
Using the bash shell | A full-featured shell with its own language built-in. | |
Programming with command line options using getopt. ( - a.k.a. Real Programs Use Command Line Parameters.) | ||
Video review | a.k.a. Real Programs Use Command Line Parameters. You're not writing toy programs any longer and you need to support them. | |
POST, BIOS, Boot loaders, MBR, Partition tables, GUID partitions | ||
Single vs. multi-tasking, System calls vs. library calls, kernel/user mode, memory protection, memory segments, strace, performance. | ||
strace Demo | Video review of strace, a tool to monitor (system) calls to the operating system. See the OS API notes above. | |
Forking, process states, PCB, scheduling, interprocess communication, POSIX, Win32, the exec family of functions. | ||
IPC Demo | Video review IPC (Interprocess Communication) using messages. | |
Single vs. multi-threading, Thread API, POSIX, Win32, threads vs. processes, affinity. | ||
Memory heirarchy, physical vs. logical, pages vs. frames, caching (video) , addressing, paging/swapping, shared objects and libraries, Case Study: Implementing a simple memory manager. | ||
Files, API, inodes, directories, blocks, extents, performance differences. Case Study: The ext2/ext3/ext4 filesystem. | ||
Case Study: Implementing a simple FAT-like filesystem. Design decisions, creating the FS, adding/deleting files, fragmentation issues. | ||
Non-preemptive, preemptive, priorities, multicore scheduling, FIFO, SJF, modern scheduling algorithms. | ||
Race conditions, critical sections, locking, mutexes, semaphores, atomicity, deadlock, C11's atomic_int. | ||
atomic_int | Video review of the atomic_int type in C11. | |
Various media (hard drives, SSD), partitioning, low- vs. high-level formatting, scheduling algorithms, performance, RAID, NAS. | ||
RAID | Video review of RAID (Redundant Array of Inexpensive Disks). | |
NAS | Video review of NAS (Network Attached Storage). | |
SSD | Video review of SSD (Solid State Disk). | |
IPC, STREAM vs. DGRAM, send/recv messages, local machine vs. network, abstract sockets, Case Study: Logging server. | ||
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 IPC mechanisms), but it's very useful for what it does. |
Topic | Description | |
---|---|---|
Program design methodologies, APIs, software development lifecycle. | ||
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. | ||
Algorithm complexity, constant-time vs. linear-time vs. quadratic-time, O( ) notation, worst-case analysis, simple sorting techniques. | ||
Abstractions, interfaces, collections, arrays, lists, stacks, queues. | ||
Recursion and the run-time stack, back-tracking, tracing functions, quicksort. | ||
Tree algorithms (create, search, insert, delete), traversals, binary search trees, splay trees, expression trees, compiler optimizations. | ||
Balanced trees, AVL trees, 2-3-4 trees, red-black trees, performance characteristics, O(n) vs. O(lg2N). | ||
Hash tables, hash functions, more randomization techniques, open- vs. closed-addressing (chaining), collision resolution. | ||
Hashing comparison | Hash function performance and distribution. Shows real-world results from various hash table configurations and why hash tables are very useful data structures. | |
Performance | Video review on hash function performance and distribution. | |
Perfect hashing | Video review on perfect hashing using gperf, not to be confused with the GNU profiler, gprof. | |
Directed, undirected, weighted, paths, cycles, adjacency, traversals, spanning trees, shortest-path (Djikstra's algorithm). | ||
Priority queues, implementing node-based trees vs. array-based trees. | ||
High-performance linked-lists using randomization techniques. | ||
External (secondary storage, e.g. disk) searching for very large data sets. B+trees, branching factor. | ||
Comparing various data structures and their performance. |
Topic | [Time] | Description | |
---|---|---|---|
[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. | ||
[00:06:30] | How to install, configure, and use the compiler and other tools using the Mead Installer. | ||
[00:13:25] | How to use the command console in Windows for editing/compiling/linking/running programs. | ||
[01:23:36] | How to use the make utility with makefiles. This is the test file that was used in the video: makefile notes. | ||
[01:16:40] | How to use Doxygen, an automated documentation generator. Resources can be found here. | ||
[01:00:17] | How to use Dr. Memory under Windows and Valgrind under WSL/Linux. Here is the sample code used. | ||
[00:09:51] | How to suppress false positives with Dr. Memory and Windows 10. | ||
[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. | ||
[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. | ||
[00:02:33] | How to configure additional settings within VirtualBox. | ||
[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. | ||
[00:10:36] | How to setup a build environment (gcc, g++, valgrind, doxygen, etc.) in Linux. | ||
[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! | ||
[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. | ||
[00:03:07] | How to upload all of the labs and assignments to the submission server (pontus.digipen.edu). | ||
[00:07:49] | How to create, test, and upload a lab. |
Topic | Description | |
---|---|---|
This guide demonstrates several of the new features from the C++11/14/17 standards. | ||
This feature (lambda functions) has been around in other languages for decades and has finally come to C++. Learn all of the details about this long-awaited feature. | ||
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. | ||
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. | ||
This short guide demonstrates how to use Dr. Memory and Valgrind to debug your C/C++ programs. | ||
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. | ||
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 IPC mechanisms), but it's very useful for what it does. | ||
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. | ||
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. | ||
This guide shows how to install (from repositories) and use multiple versions of gcc/g++ and clang/clang++ on Linux. | ||
This guide shows how to build and install the compilers from source code on Linux or Mac. | ||
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. | ||
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). |
Topic | Description | |
---|---|---|
Curves and Surfaces | ||
Probability and Statistics | ||
Combinatorial Game Theory |
Topic | Description | |
---|---|---|
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. | ||
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." | ||
I tried my hand at using NAT by building my own router/firewall to go between the cable modem and my computers. | ||
Delphi is the premiere language for Windows GUIs and is based on object-oriented Pascal. Also shows how to mix C/C++ with Java. |
![]() |