Comments by "" (@defeqel6537) on "40 Years Of Software Engineering Experience In 19 Minutes" video.
-
My (as practical as I can make them) learnings:
1) abstract the platform with the requirements you have, but learn from existing abstractions (there is a reason POSIX APIs tend to use byte streams, and HW interfaces tend to use memory addresses); both specificity and generality are important, and usually at odds with each other
2) test your system's behavior using automated tests
3) tests should run quickly and produce repeatable results
4) the "unit" in unit tests is the test, and does not relate to the size of the code/system under test
5) (at least) for unit testing, use in-memory (fake) implementations of abstracted platform services, avoid "mock testing" where you specify behavior on test-by-test basis
6) get feedback for your system as early and as often as possible (see continuous integration, continuous deployment)
7) use a source control system
8) neither implementation code, nor test code is holy, feel free to remove code and tests when no longer needed (changed requirements, or test case covered by another test)
9) prefer removing code to modifying code when behavior / specification changes
10) learn software patterns and anti-patterns, and their "when, where and why"s
11) spend time learning new APIs with Proof of Concept implementations before implementing them
Additionally:
- learn to communicate with other people, this includes your code, some diagramming skills can help
- find comfort: whether talking about production environment, testing systems, build systems, programming languages, frameworks & APIs, editors, keyboard or key mappings, do your best to reduce discomfort / friction in your day-to-day
1