About
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.
You will find pdfs on lots of computer-related stuff. For example, programming languages: Javascript, PHP, Java, C, C++, C#, … frameworks: .NET, Angular, React, … plus other various tools and algorithms.
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.
I mainly work with Azure cloud and microservices/distributed services. I’ve found the following learning resources provided by Microsoft to be quite useful:
Big O Notation and Computational Complexity
Neural Networks
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.
In such cases, a git cheat sheet comes very handy: git cheat sheet pdf from Github or git cheat sheet pdf from Gitlab
Here is a great explanation of different git workflows made by Atlassian.
Brush Up Your Math Skills
Writing Documentation
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.
Desgin Principles
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.