- How to do software engineering? - Discovery & Learning - Design - Production - Algorithm and Data structures - Programming paradigms and languages - Tools - Architectural patterns - Questions - References
compose small pieces into bigger pieces: ➔ Compose software from components ➔ Compose components from classes/modules ➔ Compose classes/modules from properties/data structures and methods/functions ➔ Write code using function and data structures
joy of making things. - The pleasure of making things that help people. - For the fascination fashioning puzzle-like objects of interlocking moving parts and watch them work in subtle cycles.
ubiquitous language, …) a design discipline where you - Grasp the domain - Agree on a language - Express it in shared models - Embrace complexity - Separate models in contexts - … and evolve them continuously -
for building software that guides software development by writing tests. It was developed by Kent Beck in the late 1990's as part of Extreme Programming. In essence you follow three simple steps repeatedly: - Write a test for the next bit of functionality you want to add. - Write the functional code until the test passes. - Refactor both new and old code to make it well structured.
- CUPID - Composable: plays well with others - Unix philosophy: does one thing well - Predictable: does what you expect - Idiomatic: feels natural - Domain-based: the solution domain models the problem domain in language and structure Source
Testing frameworks and libraries: - XUnit frameworks - Assertions Libraries - Property testing frameworks - Mutation Testing frameworks (if you want to test your tests) - Devops processes and techniques
programming language with first-class functions. While it is most well-known as the scripting language for Web pages, many non-browser environments also use it, such as Node.js, Apache CouchDB and Adobe Acrobat. JavaScript is a prototype-based, multi-paradigm, single-threaded, dynamic language, supporting object-oriented, imperative, and declarative (e.g. functional programming) styles.