#abstractions #software #efficient-software Created at 270423 # [Anonymous feedback](https://www.admonymous.co/louis030195) # [[Epistemic status]] #shower-thought Last modified date: 270423 Commit: 0 # Related - [[Philosophy/Epistemology/Karl Popper]] - [[Philosophy/Epistemology/Simplicity does not necessarily mean truth]] - [[Physic/Theory]] - [[Philosophy/Science]] - [[Philosophy/Epistemology/Curiosity]] - [[Philosophy/Epistemology/Lindy Effect falsification]] # Epistemological simplicity and software abstractions Popper believed in the importance of epistemological simplicity when it came to scientific theories. He argued that the simpler a theory is, the more likely it is to be true. This is because a simple theory requires fewer assumptions and is easier to test and verify than a complex theory. Popper's philosophy of science also emphasized the idea of falsifiability, which means that a scientific theory must be capable of being tested and potentially proven false. A theory that is too complex or convoluted may be difficult or impossible to test, making it less reliable. However, Popper also acknowledged that simplicity is not the only criterion for evaluating scientific theories. Other factors, such as explanatory power and predictive ability, are also important. Ultimately, Popper believed that the scientific method involves a constant process of testing and refining theories based on new evidence, and that simplicity is just one of several important considerations in this process. %% connect the above to software abstractions as fundamental laws, in the sense that let you quickly iterate while still allowing to cover a large space or range of possibilities:%% Similar to scientific theories, software abstractions also require simplicity and the ability to be easily tested and verified. A well-designed software abstraction allows developers to quickly iterate and test different possibilities while still covering a large space or range of possibilities. This is because a good abstraction reduces complexity by hiding unnecessary details and providing a higher-level view of the problem domain. Furthermore, just like with scientific theories, a good software abstraction must also be falsifiable, meaning that it should be capable of being tested and potentially proven false. By constantly testing and refining software abstractions based on new requirements or feedback, developers can create more reliable and efficient software systems. In conclusion, the importance of simplicity and falsifiability in scientific theories can also be applied to the design and development of software abstractions. Both require a constant process of testing and refining to ensure their validity and reliability, and a well-designed abstraction can allow for easier experimentation and exploration of different possibilities within a problem domain. Ultimately, the use of these fundamental principles can lead to more efficient and effective software systems, just as they lead to more accurate and reliable scientific theories. An example of abstraction is garbage collections in programming languages. Garbage collection is a software abstraction that simplifies the process of managing memory by automatically freeing up memory that is no longer in use by the program. By hiding the details of memory management from the developer, garbage collection allows for faster development and less chance of memory leaks or errors. However, the design of garbage collection is also subject to the principles of simplicity and falsifiability. For example, a garbage collection algorithm that is too complex or difficult to test may lead to inefficient or unreliable memory management. By constantly testing and refining the design of garbage collection algorithms, developers can create more efficient and reliable software systems that can scale to handle larger and more complex programs.