How did software get so reliable without proof? (1996) [pdf]
Thanks for this!  Hoare (partially) answers a question I asked in the comments on &quot;The Little Typer&quot; (a good treatment of programming with dependent types).<p>That approach to dependent types brings our code closer to being verifiable.  Unfortunately as a number of commenters testified it also makes software (currently) impossible to scale to complex algorithms, dependence on loosely coupled libraries, and so forth.<p>Since Hoare wrote 22 years ago, I&#x27;m now wondering if there&#x27;s a fundamentally intractable problem with improving formal validation of complex software.  Dependent types <i>seem</i> like a natural way of embedding the programmer&#x27;s assumptions and reasoning into software, but clearly current technology in that area is still very very far short of helping with software at current scale.<p>Meanwhile our practical means of building complex software have improved considerably and we can develop systems that are reliable &quot;enough&quot;, even at enormously greater scale than Hoare anticipated. The gap between viable software complexity and formal methods of describing software semantics has grown much wider since Hoare, rather than shrinking.<p>I wonder if we could step back from this style of formal methods, and look for an alternative approach.  We need ways to capture the actual reasoning and methods that work for programmers building complex systems -- rather than trying to pretend they are mathematical objects.