该计划证明是可行且有用的努力吗?它创造的问题比解决的问题多吗?
今天我参加了reddit讨论线索.讨论中提出了一些我关心的问题,我认为其他人也会关心。
虽然我引用了另一个人的观点,他的观点可能与我的观点相反,但我并没有侮辱或不尊重他。我认为他的观点相当普遍,我很欣赏他把这些观点写下来,并激励我也把我的一些观点写下来。
[…]您可以精确地指定它应该具有的行为。然而,在这种情况下(实际上在大多数并不复杂的实际算法中),数学规范并不比实现短多少。因此,满足规范并没有帮助,规范与实现一样可能是错误的/不完整的。我的意思是,即使你达到了规范,你也无法实现你的目标。
我喜欢这样一种观察,即精确的规范可能和精确的程序一样复杂和难以纠正。实际上,规范的复杂性是有问题的。与其放弃精确性,我自己的兴趣是找到更简单、更清晰的方式来思考问题,这样规范就可以非常简单。因此,我将重点放在简单而精确的语义模型上。一个示例如所示推挽式函数反应式编程.我为这个规范的简单性感到骄傲,也为它清楚地表明了模型的哪些部分可以改进而感到骄傲。(事件
类型不跟随类型类同构原则,在实践中确实有困难。)由于这种基于语义的软件设计方法还处于初级阶段,我同意在软件开发中放弃精确性通常更为实际。
有关正式简单规范的更多示例,请参阅论文具有类型类形态的指称设计和美丽的差异.
我怀疑问题的关键在于将精确性和简单性结合起来是非常困难的-无论是为了规范或程序(还是为了其他许多人类活动)。
任何一个聪明的傻瓜都可以把事情变得更大、更复杂……朝相反的方向前进需要一点天赋和很大的勇气。–阿尔伯特·爱因斯坦
在计算机发明之前,我们已经编写了很长一段时间的非正式/不精确的“程序”,比如各种指令/指令。20世纪40年代,随着程序处理的机械化,对精度的要求也随之提高。由于简单的精确性很难(根据我的假设),而且需要精确性,所以简单性通常会被忽略。因此,我们的可执行精确程序的历史主要是由复杂性填充的。
我的结论是,构建软件设计有两种方法:一种是使其简单到明显没有缺陷,另一种是将其复杂到没有明显缺陷。第一种方法要困难得多。–C.A.R.Hoare,《皇帝的旧衣服》,图灵奖讲座,1980年
正如人们假设未来一定会延续过去一样,人们可能会相信我们会这样做从未逃避复杂性。在我自己的创作过程中,我喜欢区分必然正确而且仅仅历史上是正确的.我理解进步本身就是关于这种区别的——推翻了历史真相,而事实证明(通常令人惊讶)这并不一定是真的。
关于规格?是否为精确规格必要地复杂,或者仅仅历史地复杂?(即。,必须当未来重复过去的复杂性时,我们袖手旁观?)我认为这个问题比程序的同一个问题更未被探索,因为我们没有被要求像处理正式程序那样处理正式规范。尽管如此,一些人还是被选中的致力于精确的规范,因此在提高其简单性方面取得了一些进展,我对未来持乐观态度。乐观地将我一生的精力投入到搜索中。
简单是这个世界上最难保证的事情;这是经验的最后极限,也是天才的最后努力。–乔治·桑德
一切都是模糊的,直到你试图让它变得精确,你才意识到这一点。–伯特兰·罗素
我希望未来的软件开发人员会像我们看待过去一些医疗实践那样,把我们的时代视为野蛮的时代。当然,我们正在尽我们所知的最大努力,就像过去的医生一样。
我知道无论在场与否,人们都容易听到批评/侮辱,我希望我的这些话不会被听到。我欣赏当前的实践者,他们用手头的工具做到了最好,也欣赏开拓者,他们在探索未来的方法。就我个人而言,我同时扮演这两个角色,我猜你也一样,也许只是在平衡方面有所不同。我敦促大家在糊里糊涂的时候,更加欣赏和尊重彼此。
该计划证明是可行且有用的努力吗?它创造的问题比解决的问题多吗?今天我参加了一个reddit讨论帖子。讨论提出了一些问题。。。