在某種程度上他有一個觀點。傳統的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