Skip to content

Instantly share code, notes, and snippets.

@RandyGaul
Last active August 16, 2023 20:13
Show Gist options
  • Save RandyGaul/7b44281c0d2152b29463536e617eaa25 to your computer and use it in GitHub Desktop.
Save RandyGaul/7b44281c0d2152b29463536e617eaa25 to your computer and use it in GitHub Desktop.
Learn Software Engineering - Self Paced
WHAT IS THIS?
I get asked a lot about recommendations for self-taught or self-learning to become professional developer, so I
am slowly working on a curriculum someone could follow. If finished in earnest, you'd be at roughly bachelor degree
level of competence without any holes in your education. If anyone is interested, please do take a look and provide
feedback! The format is to collate really high quality links to references organized by major topic and sub-categories.
By design this is C/C++ centric. This encourages the learning of low level details and fundamental knowledge that
transcends technological fads, ensuring the knowledge won't ever go out of date, easily translatable to other higher
level languages, frameworks, granting sustainable flexibility in career potential.
That said, resources focusing on languages other than C/C++ won't be accepted or considered. It's easy to go from a
solid base in C/C++ to any other technology, but not vis-versa.
MATH FUNDAMENTALS
- algebra 1 & 2
> Linear equations, real vs irrational numbers, equalities and inequalities, factoring polynomials, quadratic equation
> Khan Academy - https://www.khanacademy.org/math/algebra
- geometry
> Surface area, volume, points + lines + segments, angles, pythagorean theorem
> Khan Academy - https://www.khanacademy.org/math/geometry
- trigonometry
> sin/cos/tan, law of cosines, unit circle
> https://www.khanacademy.org/math/trigonometry
- basic statistics
> Khan Academy - https://www.khanacademy.org/math/statistics-probability
> MIT Open Courseware - https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2014/pages/readings/
- discrete math
> Discrete math notation, graph theory, permutations, combinations, sorting, compression
> Notation - https://discrete.openmathbooks.org/dmoi3/appendix-1.html
> https://ocw.mit.edu/courses/18-310-principles-of-discrete-applied-mathematics-fall-2013/
> https://discrete.openmathbooks.org/dmoi3/dmoi.html
- linear algebra (relevant for graphics/games)
> Great book by Strang - https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0980232716
> Strang MIT Course - https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/
> Math for Game Programmers - https://www.youtube.com/watch?v=sKCF8A3XGxQ&list=PLW3Zl3wyJwWOpdhYedlD-yCB7WQoHf-My
> https://randygaul.github.io/math/2022/09/18/Game-Math-101-Writing-your-Own-2D-Math-in-CPP.html
LANGUAGE FUNDAMENTALS (LEARN IN C)
- variables
> https://www.learn-c.org/en/Variables_and_Types
> https://www.youtube.com/watch?v=aIQk1O08zpg
- if statements
> https://www.learn-c.org/en/Conditions
> https://www.cprogramming.com/tutorial/c/lesson2.html
> https://www.youtube.com/watch?v=xyQrVEFz9kw
- loops
> https://www.learn-c.org/en/For_loops
> https://www.learn-c.org/en/While_loops
> https://www.geeksforgeeks.org/c-loops/#
> https://www.youtube.com/watch?v=b4DPj0XAfSg
- functions
> https://www.geeksforgeeks.org/c-functions/
> https://www.learn-c.org/en/Functions
> https://www.youtube.com/watch?v=ou_G7_zodR4
- structs
> https://www.learn-c.org/en/Structures
> https://www.geeksforgeeks.org/structures-c/
> https://www.youtube.com/watch?v=oKXP1HZ8xIs
- pointers
> https://www.learn-c.org/en/Pointers
> https://www.youtube.com/watch?v=DplxIq0mc_Y
> https://pebble.gitbooks.io/learning-c-with-pebble/content/chapter08.html
Recommended texts/courses
> Learning C Fundamentals Text (highly recommended) https://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504
> Free MIT Course on C https://ocw.mit.edu/courses/6-087-practical-programming-in-c-january-iap-2010/
> https://beej.us/guide/bgc/
OBJECT ORIENTED PROGRAMMING
** NOTE - Object Oriented Programming (OOP) is a rather opinion-oriented topic. Resources vary a lot in their quality and in their respective opinions. It's best to try and focus on fundamental concepts and practice by writing your own toy or learning-oriented projects (hands on learning). The core concepts are listed below with references. You can learn about OOP by adding C++ onto C, as C++ is mostly an extension of the C language.
- classes
> https://www.geeksforgeeks.org/c-classes-and-objects/
> https://en.wikipedia.org/wiki/C%2B%2B_classes
> https://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/CLASSES-INTRO.html
- member functions
> https://www.tutorialspoint.com/cplusplus/cpp_class_member_functions.htm
- encapsulation
> https://embeddedartistry.com/fieldatlas/encapsulation-and-information-hiding-in-c/
> https://www.geeksforgeeks.org/encapsulation-in-cpp/
> https://www.programiz.com/cpp-programming/encapsulation
- inheritence
> https://www.geeksforgeeks.org/inheritance-in-c/
> https://cplusplus.com/doc/tutorial/inheritance/
- polymorphism
> https://cplusplus.com/doc/tutorial/polymorphism/
> https://www.codeproject.com/Articles/739687/Achieving-polymorphism-in-C
> https://www.geeksforgeeks.org/cpp-polymorphism/
> https://itnext.io/polymorphism-in-c-tutorial-bd95197ddbf9
Recommended texts/courses
> https://www.youtube.com/watch?v=-TkoO8Z07hI
> C++ for Games https://www.amazon.com/Programmers-Charles-River-Media-Development/dp/1584502274
> C++ Unreal Engine https://courses.tomlooman.com/
> MIT Course on C/C++ https://ocw.mit.edu/courses/6-s096-introduction-to-c-and-c-january-iap-2013/
> MIT Intro to C++ https://ocw.mit.edu/courses/6-096-introduction-to-c-january-iap-2011/
ALGORITHMS
- sorting functions
> https://www.youtube.com/watch?v=qLVrwCvVPGo
> https://www.geeksforgeeks.org/sorting-algorithms/
> https://www.edureka.co/blog/sorting-algorithms-in-c/
- big O notation
> https://www.youtube.com/watch?v=XMUe3zFhM5c
> https://www.youtube.com/watch?v=v4cd1O4zkGw&
> https://www.bigocheatsheet.com/
> https://www.geeksforgeeks.org/analysis-algorithms-big-o-analysis/
> https://en.wikipedia.org/wiki/Big_O_notation
- random numbers
> https://www.youtube.com/watch?v=CJ37J_Cdd8Q
> https://www.youtube.com/watch?v=maVv62OPjPs
> https://github.com/ESultanik/mtwister
> https://www.geeksforgeeks.org/stdmt19937-class-in-cpp/
- binary representation of numbers and floating point IEEE754
> https://en.wikipedia.org/wiki/IEEE_754
> https://www.youtube.com/watch?v=PZRI1IfStY0
> https://www.youtube.com/watch?v=8afbTaA-gOQ
> https://www.youtube.com/watch?v=CwUcmUkrhDY
- recursion
> https://www.learn-c.org/en/Recursion
> https://www.youtube.com/watch?v=u8Xam9EsqXQ
STRINGS
- reading and writing strings
> https://www.youtube.com/watch?v=5TzFNouc0PE
> https://www.learn-c.org/en/Strings
> https://www.geeksforgeeks.org/stdstring-class-in-c/
- string formatting
> https://www.tutorialspoint.com/format-specifiers-in-c
- string operations
> https://en.wikibooks.org/wiki/C_Programming/String_manipulation
> https://www.dremendo.com/cpp-programming-tutorial/cpp-string-methods
- utf8 encoding
> http://utf8everywhere.org/
> https://www.freecodecamp.org/news/what-is-utf-8-character-encoding/
> https://www.youtube.com/watch?v=c_hfKgektt4
DATA STRUCTURES
- array
> https://www.youtube.com/watch?v=eE9MnoS0lc0
- linked list
> https://www.youtube.com/watch?v=N6dOwBde7-M&pp=ygUNYyBsaW5rZWQgbGlzdA%3D%3D
> https://www.youtube.com/watch?v=VOpjAHCee7c
> https://www.learn-c.org/en/Linked_lists
> https://www.geeksforgeeks.org/what-is-linked-list/
- hashtable
> https://www.youtube.com/watch?v=FsfRsGFHuv4
> https://www.youtube.com/watch?v=2Ti5yvumFTU
> https://benhoyt.com/writings/hash-table-in-c/
> https://www.digitalocean.com/community/tutorials/hash-table-in-c-plus-plus
> https://www.geeksforgeeks.org/implementation-of-hash-table-in-c-using-separate-chaining/
- tree
> https://www.learn-c.org/en/Binary_trees
- graph
OPERATING SYSTEM
- hardware, cpu, gpu, RAM, hard-disk/ssd
- file i/o
- threads, context switch, sleeping/waking, fork+join/wait
> https://cpu.land/
- lock/mutex+deadlock, contention, race condition, semaphore, condition variable, threadpool
- cpu caches, false sharing
- memory allocators and garbage collection
CROSS PLATFORM DEVELOPMENT
- linux/unix
- windows
- apple/mac os
- mobile (iOS and Android)
- writing cross-platform code vs. platform dependent code
SOFTWARE ENGINEERING
- organizing larger programs into separate files
- unit testing, integration testing
- breaking large problems into smaller ones
- collaborating with others
- code documentation
SERIALIZATION
- text based, e.g. json
- binary, endianness
- popular grpc or protobuf
FILE FORMATS AND COMPRESSION
- .wav file format
- .png file format
- basics of compression algorithms, symbol table lookups, huffman codes
Selected references
> Arithmetic Encoding http://number-none.com/product/Arithmetic%20Coding,%20Part%201/index.html
> Arithmetic Encoding Pt 2 http://number-none.com/product/Arithmetic%20Coding,%20Part%202/index.html
NETWORKING
- tcp/udp
- sockets
- packets
- custom protocols
- high level overview of distributed systems
Recommend texts/courses
> https://beej.us/guide/bgnet/
> https://beej.us/guide/bgnet0/
SECURITY
- HTTP vs HTTPS
- TLS 2/3+
- certificates, certificate authorities, how the internet works internet
- public/private key based encryption
COMPILERS
- compiling vs linking
- high level overview of: parsing, semantic analysis, code gen, optimiziation
- recursive descent
Recommended texts/courses
> Crafting Interpreters https://craftinginterpreters.com/
SKILL AREA SPECIALIZATION (not exhaustive)
- game programming
- Example: work in a game studio such as Riot
- linear algebra
- graphics pipeline and rendering
- collision detection
- web development
- Example: Website based products, e.g. GMail or Linkedin
- databases
- front end vs backend
- popular high level technologies such as react, node.js, SQL
- enterprise development
- Example: Work at Microsoft on Windows or Microsoft Office
- mostly java/C++
- need good data structure + networking knowledge
- distributed systems and databases, key value storage, fault tolerance, load balancing
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment