在某种程度上他有一个观点。传统的c/unix开发工作到一个足够简单的平台,能够全面或多或少地理解。现代平台的数量级要复杂得多,并且了解所有层的相互作用如何更难,往往不可行。
泄漏抽象的定律主要适用于框架在管理底层复杂性方面做得不好的情况。框架可以被判断的一些方式是它的透明度(易于理解幕后发生的事情)以及它能够摒弃自定义的解决方法来限制其功能。
当一个框架在幕后做了很多复杂的魔术时,诊断和故障排除变得更加困难,通常需要框架底层架构中不成比例的大量专业知识。这意味着从框架获得的生产力收益将被吸收到培训和调试代码的额外工作中。这也使得框架很难学习和使用,这是你的C编程朋友习惯的。
当一个框架阻碍你解决它的限制时,它就成为开发的一个障碍。当这种情况经常发生时,代码库就会被封入或者被越来越多的混乱的黑客所污染,以解决这些问题。这也会导致稳定性和调试问题,例如存在这些缺陷的框架比比皆是。 MFC由于未能隐藏Win32的底层复杂性而相当出名。它还广泛使用了向导,这些向导生成的杂乱代码需要经过手动修改,这首先破坏了代码生成器的功能。早期的Java GUI工具包(AWT和Swing的早期版本)在桌面应用程序中很少被采用,因为它们阻碍了开发人员为应用程序实现本机外观。由于Swing的这些限制,SWT的构建不在少数。然而,现在Java已经成熟了一点,可以说它的大多数早期罪已经在现代框架中得到修复。 J2EE仍然是一个庞大而复杂的系统,在浏览器中开发一个非平凡的用户界面也是相当重要的任务。精通这个平台是相当多的工作。然而,这并不能超越人的智慧。
那么,你的问题到底是什么?如果这个人不会使用任何框架或工具箱,因为没有完美的摘要,那么这个人的思想就有一些基本的问题。 – BobbyShaftoe 2009-01-26 11:48:18
我试图验证我的论点,而不仅仅依赖于我自己的观点。 – 2009-01-26 11:53:20
这很奇怪。我记得几年前阅读过这篇文章,我从来没有想过Joel在谴责抽象,他只是说他们并不总是像“优雅”的程序员认为的那样整洁。在设计抽象时,重要的是要考虑实现可能如何泄露;但抽象仍然是必不可少的......编写一个不重要的应用程序是一项如此庞大的任务,除非您可以使用抽象来“掩盖”其他部分,而只关注一个部分,否则无法理解一个庞大的系统。 – 2011-06-23 02:09:21