It’s hard to remember everything you learn over the years especially if you don’t use it very often. That’s why I think it’s good to have a compilation of cheatsheets, reference books or other types of resources like blog posts/videos/PDFs.
So in this post, I will “bookmark” some useful software engineering resources and cheatsheets for myself(or anyone else who stumbles upon this post).
PDFs on Almost Anything Software Related
This site has an absolutely amazing collection of very detailed PDFs with lots of information compiled from different online sources.
And best of all it’s all completely free! Check it out here.
Software Design Patterns
System Architecture Design Patterns
Similar to software design patterns there are also common design patterns for the whole system/software architecture. This blog post here summarizes 10 of the most common ones.
Big O Notation and Computational Complexity
Git and Gitflows
Most of the time I prefer using UI-based git tools that are part of the IDEs I use(Visual Studio, VS Code) or a separate app like the Github Desktop. However time to time you might need the git CLI commands.
Here is a great explanation of different git workflows made by Atlassian.
Brush Up Your Math Skills
The most obvious type of code documentation are inline comments within your source code.
I mostly work with .NET and Visual Studio where XML comments are supported by the IDE. These can either be used by IntelliSense to provide you with information when coding or by tools like DocFX that automatically generate documentation for your code from the XML. Meanwhile, if you are working with PHP check out phpDocumentor.
CAP Theorem (Consistency, Availability, Partition Tolerance)
ACID Principles (Atomicity, Consistency, Isolation, Durability)
- Atomicity All changes to data are performed as if they are a single operation. That is, all the changes are performed, or none of them are. For example, in an application that transfers funds from one account to another, the atomicity property ensures that, if a debit is made successfully from one account, the corresponding credit is made to the other account.
- Consistency Data is in a consistent state when a transaction starts and when it ends. For example, in an application that transfers funds from one account to another, the consistency property ensures that the total value of funds in both the accounts is the same at the start and end of each transaction.
- Isolation The intermediate state of a transaction is invisible to other transactions. As a result, transactions that run concurrently appear to be serialized. For example, in an application that transfers funds from one account to another, the isolation property ensures that another transaction sees the transferred funds in one account or the other, but not in both, nor in neither.
- Durability After a transaction successfully completes, changes to data persist and are not undone, even in the event of a system failure. For example, in an application that transfers funds from one account to another, the durability property ensures that the changes made to each account will not be reversed.
SOLID Principles (Single Responsibility, Open Closed, Liskov substitution, Interface Segregation, Dependency Inversion)
OLAP vs OLTP
OLTP(online transactional processing) are your typical databases that are optimized for CRUD operations and are used for the operational aspect of your applications. OLAP(online analytical processing) databases on the other hand use different data structures optimized for analytics. For example, a cube structure is like a table(rows and columns) with a third dimension(another layer or multiple layers of rows and columns).
Here is a great post about OLAP vs OLTP by IBM.