SICP, Dijkstra, and Plato! Oh my!

As somebody reading and working through the exercises in SICP, I enjoyed the paper Jim Brown posted about it entitled What’s in the box?: Abstraction and Regimes of Truth in Computer Programming. While the focus of the article is on what it means to treat procedures a black boxes, the part I found most interesting is where he likens the differences between the bottom-up approach of SICP and the top-down approach of Dijkstra to the differences between Aristotle’s and Plato’s epistemologies:

For Plato, we must understand truth prior to entering into dispute or argument, otherwise we will find ourselves lured by faulty “resemblances”. This is Dijkstra’s point when he warns of the dangers of testing programs before they are properly finished. One should know their program perfectly before testing it. Trial and error was a flawed technique for these programmers. Abelson and Sussman, on the other hand, are more interested in the negotiation and collaboration that happens in the programming community. In this sense, their method seems more akin to Aristotle’s description of rhetoric. In Book I of the Rhetoric, he differs from Plato’s view of rhetoric as mere persuasion: “[Rhetoric’s] function is not simply to succeed in persuading, but rather to discover the means of coming as near such success as the circumstances of each particular case allow (1328). Rhetoric is then useful because it gets us as close to truth as possible, and this should remind us of Abelson and Sussman’s assertion that, “we become convinced of program truth through argument.”