Testing, Computers and society in Notes On Structured Programming
The computer scientist Dijkstra, has some strong opinions about tesing, the art of programming and the impact of the computer in the society. Let’s take a second to read the opinion he wrote in Notes on Structured programming
My conclusion is that it is becoming most urgent to stop to consider programming primarily as the minimization of a cost/performance ratio. We should recognise that already now programming is much more an intellectual challenge: the art of programming is the art of organising complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible.
My refusal to regard efficiency considerations as the programmer’s prime concern is not meant to imply that I disregard them. On the contrary, efficiency considerations are recognised as one of the main incentives to modifying a logically correct program. My point, however, is that we can only afford to optimise (whatever that may be) provided that the program remains sufficiently manageable.
Let me end this section with a final aside on the significance of computers. Computers are extremely flexible and powerful tools and many feel that their application is changing the face of the earth. I would venture the opinion that as long as we regard them primarily as tools, we might grossly underestimate their significance. Their influence as tools might turn out to be but a ripple on the surface of our culture, whereas I expect them to have a much more profound influence in their capacity of intellectual challenge!
Corollary of the first part of this section:Program testing can be used to show the presence of bugs, but never to show their absence!Notes On strcutrued programming 1969
The significance of the art of programming has been a widely discussed topic, and delving deeper into its importance may not be necessary. However, two noteworthy aspects merit attention: testing and the cultural relevance of computers.
In addressing testing, Dijkstra underscored the inherent challenge of proving the absence of bugs through testing alone. This implies that while testing can uncover bugs, comprehensively identifying and executing all potential test cases to demonstrate bug absence is practically unattainable.
Dijkstra’s emphasis on testing’s limitations serves as a reminder that passing numerous tests does not guarantee a completely bug-free program. This underscores the broader complexities in software engineering, necessitating additional techniques like formal methods and meticulous design practices to enhance software system reliability and correctness.
Contemporary software development involves various processes for testing code, with unit testing standing out as a practice that has transcended time. However, amidst the increasing complexity of modern systems, questions arise about whether we adequately test the ramifications of pushing code to a branch or merging features into the main project. The truth is that testing has evolved beyond a mere practice; it has become a distinct branch in the technology industry, reflecting its pivotal role in ensuring the robustness and functionality of software systems in today’s intricate technological landscape.
Ultimately, Dijkstra underscores the instructive role of computers in our society, emphasizing that their impact transcends mere practical applications and utility as tools. Rather than viewing them solely as instruments for tasks, he perceives computers as catalysts for intellectual growth, capable of instigating profound changes in the way individuals approach problem-solving and thinking.
Dijkstra’s conceptualization of computers as intellectual challenges implies that their true significance lies not only in their practical functionalities but also in their potential to mold our cognitive processes and enhance our understanding of the world. This perspective illuminates Dijkstra’s broader views on computer science, emphasizing its pivotal role in advancing human knowledge and capabilities.
In essence, Dijkstra’s perspective on the importance of computers extends beyond their immediate functions. He envisions them as transformative agents that can leave a deep and enduring impact on the intellectual and cultural fabric of society, shaping the way we think and interact with the world. This holistic view highlights the profound implications that computers can have on the human experience, elevating their role beyond mere tools to catalysts for intellectual and cultural evolution.
Indeed, Dijkstra wasn’t solely confined to academic realms; he possessed a notable sociological intuition as well. His intellectual breadth extended beyond the confines of pure academia, allowing him to grasp and appreciate the societal implications of his work. This sociological intuition enabled Dijkstra to not only contribute significantly to computer science but also to discern the broader societal impacts of technological advancements. His ability to bridge the gap between academic rigor and societal insight showcased a multifaceted perspective, making his contributions to both fields all the more impactful and resonant.