@ -16,3 +16,55 @@ More examples can be found on the [CleanCodeDeveloper](https://clean-code-develo
### repetition
Developers should not be considered artists. An artist expresses his emotion with his work. On the contrary, developers solve a real world problem enabling businesses to gain an edge on their competitors for example. As such, developers are way closer to craftsmen than artists.
## lecture 31th October 2023
### takeaway
Programming paradigms:
- imperative -> program as a top down series of instructions
- procedural -> imperative but with procedures/functions
- declarative -> describing the problem is the main conern concrete instructions are generated from that description
- objectoriented -> supports object, classes and inheritance
- functional -> programs are created by applying and composing functions
Typed programming languages:
- parameters, values as well as return values of functions receive a datatype
- the datatype can be set explicitly or implicitly (in modern languages at least)
- one example is C
- advantages are failing fast and IDE completion
- disadvantages are having to know every type from the get-go and later type changes breaking the code
Untyped programming languages:
- datatypes are not specified
- sh is one example
- implicit type conversion is on of the advantages
- one disadvantage is type mistakes only surfacing at runtime
SOLID:
- Seperation of Concerns
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Seggregation Principle
- Dependency Inversion Principle
STUPID:
- Singleton
- Tight Coupling
- Untestability
- Premature Optimization
- Indescriptive Naming
- Duplication
Additional Principles:
- KISS -> Keep it simple and stupid
- FCoH -> Favor composition over inheritance
- SLA -> Single layer of abstraction
- YAGNI -> You aint't gonna need it
- IOC -> Inversion of control
- DI -> Dependency injection
### perception
Following SOLID for the group project is a good idea. Additionally avoiding the pitfalls referred to as STUPID is also important. Added to that we should follow the KISS(Keep it simple and stupid) principle.
### repetition
Functional programming is a paradigm that allows you to build programs by applying and composing functions. These functions allow no side affects. As a result functional programming can only be used for calculations and not for tasks like defining a UI for example.