| Topics | Resource links | |
| Intro to programming | ||
| Intro to the software development process | youtube, slides | |
| Intro to languages, syntax, semantics | youtube, slides | |
| Intro to the edit/compile/execute cycle
(and command lines vs IDEs) |
youtube, slides | |
| First intro to documentation, style, and standards | youtube, slides | |
| Effective and ethical use of genAI in computer science | slides | |
| programming tips | youtube, slides | |
| Software life cycles and design | ||
| Introductory program design and implementation | youtube | |
| Overview: requirements, design, test | youtube, slides | |
| Intro to SDLCs, waterfall model | youtube, slides | |
| Spiral and agile models | youtube, slides | |
| Requirements and specifications | youtube, slides | |
| Modularity and top down design | youtube slides | |
| Design and implementation challenges at larger scales | youtube, slides | |
| Modularity and abstraction | youtube, slides | |
| Design concepts and issues | youtube, slides | |
| General safety principles | youtube, slides | |
| Localization, internationalization, unicode | youtube, slides | |
| Human computer interaction and design | youtube, slides | |
| Early intro to design patterns | youtube, slides | |
| Service-oriented design models | youtube, slides | |
| Product deployment | youtube, slides | |
| Maintenance and support | youtube, slides | |
| Refactoring | youtube, slides | |
| Time estimates and tracking | youtube, slides | |
| Debugging and debuggers | ||
| intro to debugging, debuggers, and code tracing | youtube slides | |
| Debuggers and debugging | youtube, slides | |
| gdb and C | youtube, slides | |
| valgrind for debugging | youtube, slides | |
| language-specific debugging | youtube, slides | |
| Bug reports, reporting, tracking | youtube, slides | |
| Code inspections and testing | ||
| Code/document standards | youtube, slides, Google's C++ style guide | |
| Code and document inspections | youtube, slides | |
| intro to testing | youtube slides | |
| Intro to software testing | youtube, slides | |
| unit testing, stubs and drivers | youtube, slides | |
| test suite development | youtube, slides | |
| test automation | youtube, slides | |
| Test driven development | youtube, slides | |
| C++ basics | ||
| Intro to C++ syntax/layout | youtube, slides | |
| Constants, variables, data types, and computation | youtube, slides | |
| Output/input with printf/scanf | youtube, slides | |
| Output/input with cout/cin | youtube slides | |
| Error checking input (scanf, cin) | youtube slides | |
| intro to C++ style file I/O | youtube, slides | |
| intro to C-style file I/O | youtube, slides | |
| Standard I/O streams (stdin, stdout, stderr, cin, cout, cerr) | youtube, slides | |
| Functions and parameters | ||
| Libraries, using functions and parameters | youtube slides | |
| Function/library examples | youtube | |
| Creating our own functions | youtube slides | |
| Intro to scopes (local/global) | youtube slides | |
| Pass-by-reference parameters | youtube slides | |
| parameter default values, function overloading | youtube, slides | |
| intro to recursion | youtube slides | |
| variadic functions in C/C++: (revisited) | youtube, slides sample code: C, C++ | |
| Higher order functions using function pointers | slides, C++ example, youtube | |
| Control (selection and iteration) | ||
| If/else, switch, bool | youtube slides | |
| loops: while, do while, for, scope | youtube slides | |
| break, continue, nested loops, errors | youtube slides | |
| Arrays | ||
| intro to arrays | youtube slides | |
| arrays as parameters | youtube slides | |
| two dimensional arrays | youtube, slides | |
| Searching, sorting, algorithms | ||
| Basic searching and sorting | youtube, slides | |
| Simple sorting II: selection, and insertion sorts | youtube, slides, sample code from video | |
| Mergesort | youtube, slides, sample code from video | |
| Quicksort | youtube, slides, old sample code example | |
| Evaluating efficiency | slides, video coming soon | |
| Text (char[] and strings) | ||
| null terminated character arrays, cstring library | youtube, slides | |
| using the C++ string class | youtube, slides | |
| conversion to/from text arrays | youtube, slides | |
| String streams | youtube, slides | |
| structs (structures or records) | ||
| intro to structs | youtube, slides | |
| more about structs | youtube , slides, sample code | |
| array of structs example | youtube , sample code | |
| Pointers and dynamic memory allocation | ||
| intro to pointers and their applications | youtube, slides | |
| dynamic memory allocation (new, delete), and pointer bugs | youtube, slides | |
| practice: resizable circular buffers | youtube, slides, C++ files and makefile | |
| Intro to smart pointers | slides, youtube | |
| Intro to C++ smart pointers | slides, C++ example, youtube | |
| Dynamic data structures | ||
| pointers to structs, dynamic data structures | youtube, slides | |
| linked list implementation using structs | youtube, slides | |
| Doubly linked lists | slides, sample code, video coming soon | |
| Abstract Data Types | ||
| intro to information hiding and abstract data types (ADTs) | youtube, slides | |
| Stack ADT and implementations | slides,video coming soon | |
| Stack example: bracket matching | slides,video coming soon | |
| Queue ADT and implementations | slides,video coming soon | |
| Trees, Binary search trees | slides, sample code, video coming soon | |
| Object Oriented Programming | ||
| intro to classes and object oriented programming | youtube, slides | |
| example: linked lists as a class | slides, sample code, video coming soon | |
| More class/header notations | slides,video coming soon, sample code | |
| Copy/move constructors | slides,video coming soon, sample code | |
| Friend functions and classes | slides,video coming soon, sample code | |
| Operator overloading, assignment operators | slides,video coming soon, sample code | |
| Simple inheritance | slides,video coming soon | |
| Static binding, hiding, override, virtual (and pure virtual), final | slides,video coming soon, sample code | |
| Multiple inheritance, name resolution | slides, video coming soon, static base code, virtual base code | |
| Dynamic binding, virtual functions, abstract base classes | slides, sample code, video coming soon | |
| Code re-use | video, slides | |
| Templated functions and classes | video, slides | |
| The C++ STL (standard template library) | video, slides, stacks example (video) | |
| C++ STL stack, list, queue, and iterators | youtube, slides | |
| stacks example | youtube | |
| group design exercise | draft attempt | |
| Misc. other topics | ||
| Types: references, enums, typedefs, and auto | youtube, slides | |
| command line arguments (argc, argv) | youtube, slides | |
| intro to namespaces | youtube, slides | |
| random number generators | youtube slides | |
| Exception handling: try, throw, catch |
slides,
video,
sample code: building a heirarchy, deriving from std::exception, new/bad_alloc, | |
| Regular expressions | sample code | |
| Macros using #define and templates | slides, sample code, youtube | |
| Graphical interfaces using gtk | youtube, slides | |
| Compilation and makefiles | ||
| Hardware, software, and languages | youtube, slides | |
| Intro to compilation, linking, and loading | youtube, slides | |
| Intro to make and makefiles | youtube, slides | |
| Compiling C/C++ with gcc/g++ (options, #includes, guards) | youtube, slides | |
| Automated compilation, makefiles and make | youtube, slides | |
| Testing makefiles | youtube | |
| Version control and git | ||
| Early git intro for our labs | youtube, slides, short guide to csci git project/lab submission | |
| Version control | youtube, slides | |
| git fundamentals | youtube, slides | |
| git branch, merge | youtube, slides | |
| git remotes, pull and push | youtube, slides | |
| Using git in teams | youtube coming soon, slides, | |
| Code profiling | ||
| Profilers and profiling | youtube, slides | |
| gprof | youtube, slides | |
| valgrind | youtube, slides | |
| Basic linux | ||
| linux absolute and relative paths | youtube, slides | |
| linux command history and options | youtube, slides | |
| io redirection | youtube, slides | |
| linux file permissions | youtube, slides | |
| common environment variables and customizing your bash setup | youtube, slides | |
| linux process control | youtube, slides | |
| misc. useful commands/tools | youtube, slides | |
| Shells, scripting languages and bash | youtube, slides | |
| basic intro to vim | youtube, quick ref | |