Conventional wisdom encourages software designers to take a Platonic approach to design; they are instructed to focus on ensuring the correctness of the logic of their software while playing down or even ignoring the generally unpleasant characteristics of the underlying computing platform. However, as software systems become increasingly more integrated into our everyday activities, this approach can be highly counterproductive. For example, when a software system is distributed over multiple physically distinct platforms, seemingly mundane things such as transmission delays or component failures can have a critical impact on program logic. The widely-held view that physical concerns only matter in highly specialized domains, such as real-time or fault-tolerant systems, leaves us singularly unprepared for the coming generation of Internet-based software. In this talk, we first examine the different ways in which software logic can be affected by its physical context. We then outline a conceptual framework for extending traditional software engineering concepts to deal with these issues.
Selic, B. (2002). Physical programming: Beyond mere logic. In Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics) (Vol. 2491, pp. 399–406). Springer Verlag. https://doi.org/10.1007/3-540-45828-x_29