期間:2007
測試癌症
隨著我的職業生涯轉為全職作者,我常常擔心自己會遠離日常軟體開發的現實。我已經看到其他知名人物失去與現實的聯繫,我害怕自己也會步上相同的後塵。我對抗這種情況的最大來源是 Thoughtworks,它就像一劑定期的現實良藥,讓我腳踏實地。
Thoughtworks 也是來自業界的點子來源,我很喜歡寫關於同事發現和開發的有用事物。這些通常是有用的點子,我希望我的某些讀者能夠使用。我今天的題目並不是一個令人愉快的題目。這是一個問題,而且我們沒有答案。
書籍程式碼
我現在寫的生產程式碼不多,但我仍然花很多時間寫程式碼。這些程式碼是一種特殊的程式碼形式,用於說明書中的點子。書籍程式碼與真實程式碼不太一樣,在撰寫時有一些不同的考量因素。
Groovy 或 JRuby
目前對於 Groovy 和 JRuby 作為在 Java 虛擬機器上執行的腳本語言的相對優缺點,正有一場激烈的辯論。好奇的人想知道,這些語言中哪一種會贏得這場即將到來的語言戰爭?人們想知道該為專案選擇哪一種語言,或是該承諾學習哪一種語言。
Alt.NET 會議
上週末我參加了 Alt.NET 會議。這是長期以來我在部落格圈關注的一群人第一次舉辦的聚會。一群長期使用 Microsoft 技術的使用者,他們覺得自己的開發哲學已經與 Redmond 所認知的正統觀念脫節。雖然有些人考慮離開,但這群人熱衷於留下,並試圖影響 Microsoft 的世界。
沒有萬靈丹,重裝上陣
OOPSLA 2007 會議發生在 Fred Brooks 著名論文「沒有萬靈丹」20 週年紀念。因此,為了紀念此事,我們舉辦了一場回顧小組,包括 Brooks 先生。我很幸運地受邀參加小組,儘管我懷疑他們預期我最後做出的貢獻。
滾軸溜冰實作
敏捷開發的一項關鍵特性是找出如何讓系統在功能較少的子集中上線。我們為其提供的商業價值建構軟體,我們上線越快,我們獲得至少一些商業價值的速度就越快。
時區不確定性
我在波士頓,準備飛往卡加利的辦公室。我查看我的行事曆,看看我是否有會議。第一個會議是上午 10:30 - 太棒了,早上不用急著起床。
客戶忠誠度軟體
上週我在卡加利辦公室,並與我們最受信賴的技術主管之一 John Kordyback 進行了一次良好的交談。他處理過許多旅遊忠誠度軟體系統(常客/臥鋪等),並深入探討,我們討論了這些事物的性質,以及如何以更有成效的方式思考它們。
變更介面是重構嗎
變更程式碼部分的介面是否是一種重構?
設計回報線
在 DesignStaminaHypothesis 中,設計回報線是功能量,在該功能量以下,可以權衡設計品質與上市時間。
一種語言
我們是否應該致力於在開發工作中只使用一種語言?
使用者介面模式讀物
2006 年夏季,我針對 使用者介面模式 進行了大量的工作。從那時起,由於我的主要寫作重點已轉移(儘管不太明顯)到 DomainSpecificLanguage,因此這些模式已幾乎被擱置。在此頁面上,我將記錄與該工作相關且我喜歡的寫作連結。
設計耐力假說
設計良好的軟體是否值得投入心力?
雙面書
上週,我收到了我的簽名系列中的最新書籍:Gerard Meszaros 的 xUnit 測試模式。我已經與 Gerard 斷斷續續地合作了幾年,所以我對其內容相當熟悉,但不知何故,看到實體書時我還是感到相當震驚。不知何故,我沒有想到這本書有多大——883 頁,很容易成為我系列中最大的書。
Ruby Microsoft
在 RailsConf2007 上,JRuby 引起許多熱烈的討論。這個小團隊接手了一個瀕臨死亡的專案,並將其轉變為在 JVM 上實現 Ruby 平臺的頂級專案。他們獲得了許多歡呼,而且實至名歸。
因此,隨著 JRuby 幾乎問世,焦點轉移到另一個常見的受控碼執行時期——.NET。Microsoft 目前對 Ruby 的意圖還不太明確。他們已宣布 Ruby 是用於編寫 Silverlight 程式碼的語言——但這仍留下了許多未解決的問題。這是 Ruby 語言的完整實作,還是某種形式的 Ruby++——Ruby 的增強子集?
Alpha Geek
Alpha geek 一詞大部分的流行度來自 Tim O'Reilly 的 演講和線上文章。在這次演講中,他表示,透過觀察 alpha geek 在做什麼,你可以了解科技產業整體的未來是什麼樣子。
RailsConf 2007
我參加的研討會沒有以前那麼多了,但好處是我有時間參加自己感興趣的研討會。我一直都很喜歡 Ruby 社群,所以今年我以與會者的身分參加了 RailsConf。
Hello Cup
當我探索外部 DomainSpecificLanguage 的剖析器產生器工具時,我曾說過 HelloAntlr 和 HelloSablecc。如果你花很多時間研究剖析器產生器,你無法真的避免研究舊的支柱 lex 和 yacc(或它們的 gnu 對應項 flex 和 bison)。我想探索 lex 和 yacc 的運作方式,但我的 C 已經太生疏了。正如 Erich Gamma 所說的,我已經懶到不想自己倒垃圾了。很幸運地,有一個 yaccish 系統的 Java 實作,這正是我需要的。
翻譯
花你的生產時數閱讀這篇部落格是一回事,但有些人也喜歡翻譯它。因此,我想歡迎一個 泰文翻譯,由 Wee Witthawaskul 領導的團隊所翻譯。大約 15 年前,我以典型的背包客西方遊客身分造訪泰國。我對曼谷的河上巴士、在 Pai 附近健行、在 Ko Pi Pi 浮潛,以及一些很棒的食物有美好的回憶。我第一次見到 Wee 是在他與 Ralph Johnson 共事時,現在他已加入我在 Thoughtworks 的團隊。
輸出建置目標
在過去幾天,我一直在審查同事 Julian Simpson 正在撰寫的一篇文章,主題是重構 ant 檔案。Julian 是我們的「部署人員」,負責將我們以敏捷為導向的工作習慣套用在系統部署上。在執行的過程中,Julian 遇到了許多難搞的 ant 建置指令碼。他的文章很好地描述了他最喜歡的整理混亂的方法。
掛起頭部
我是 持續整合 的忠實愛好者,這是一種相對簡單的實務,可以對大多數開發團隊產生極大的影響。然而,與大多數實務一樣,它也有其缺點^H^H^H^H^H 改進的機會。主題相關的 即將成為標準書籍 的作者 Paul Duvall,指出 其中一項缺點。如果提交建置中斷,整個團隊都會受到影響,並可能在修復之前減緩進度。
彈性 Antlr 產生
我一直在探索各種替代語言和語法,以用於外部 DSL。我的主要工具之一是 Antlr。透過此類探索,我有一個專案包含多個類似的語法檔案,我想要使用不同的語法執行本質上相同的工作。雖然我目前只有幾個語法檔案,但我可能會累積到數十個。
網路惡意
最近關於 對 Kathy Sierra 發出死亡威脅 的爭執在我閱讀的部落格中引起熱議。我撰寫這篇文章的事實表示,它觸發了我的一些想法。
嵌入式輔助程式
最近幾週,我一直在玩弄和查看編譯器編譯器工具。這些工具的共同特點是它們有一個語法檔案,其核心是語言語法的產生規則描述。除了描述語法之外,檔案還提供有關如何處理語言以及識別語言元素的資訊給剖析器。在大多數編譯器編譯器工具中,這些指令表示為語法中的動作 - 這些動作通常編碼為高級語言中的程式碼片段。
無交易
幾年前,我與在 eBay 工作的兩位朋友交談。瞭解人們在高流量網站上使用的技術總是很有趣,但最有趣的趣聞之一可能是 eBay 幾乎從不使用資料庫交易。
你好 Antlr
在說完 HelloSablecc 之後,我也想嘗試 Antlr,這是 Java 空間中的另一個編譯器編譯器。與該條目一樣,這只是關於使用非常簡單的「hello world」風格語法讓 Antlr 開始運作。
毀滅的深淵
這是 QCon 2007 的主題演講,我與同事 Dan North 共同完成。我們都認為開發人員與其客戶/使用者之間的差距是軟體開發中最大的問題。(我們會稱之為鴻溝,但這個詞用得太氾濫了。)在這裡,我們討論這個差距、為何它很重要,以及我們需要做些什麼來跨越它。特別是,我們主張傳統的中介業務分析師的角色就像一艘渡輪,而我們真正需要的是一座橋樑,讓開發人員與其客戶之間能夠直接聯繫(分析師可以建立和維護這座橋樑)。這是我的最愛聯合主題演講之一,因為我認為這個主題非常重要,而且因為 Dan 是一位非常激勵人心的共同演講者。
可修改性:敏捷中是否有設計
QCon London 2007 的組織者要求我針對架構的可修改性進行一場會議演講。我想,與其聽我說話,與會者可能更喜歡聽一些 Thoughtworks 架構師說話,我通常會重新整理他們的想法:Dave Farley、Ian Cartwright、Fred George、Erik Doernenberg 和 Daniel Terhorst-North。InfoQ 現在已上傳該場演講的影片。
面向語言的程式設計和語言工作台
這是 The Server Side Java Symposium 的主題演講,我與 Neal Ford 共同演講。我們探討了特定領域語言的發展趨勢、有哪些類型的語言以及它們為何有趣。如果您正在尋找有關該主題的演講,那麼我比較偏好 JAOO 影片,但這部影片擴展了一些主題,而且由於 Neal 的存在而更具娛樂性。如果您能找到提取音訊串流的方法,它也可以只用音訊播放。
你好 Sablecc
我最近玩了一點 SableCC。花了一點功夫才讓「Hello World」風格的剖析器開始運作,所以我認為我應該在此說明我做了哪些事讓它開始運作。我並不是說這是最好的方法,但如果您想玩玩看,這可能會有用。
JRuby Velocity
昨天我需要使用 Velocity,以便探索一些關於範本和巨集的東西。我喜歡 Velocity 的簡單範本語言,但這是其中一次我不在 Java 或 .NET 工作中使用它的情況。在這種情況下,使用 Velocity 會變得有點麻煩,因為你必須設定內容並在 Java 中執行處理器。
類型實例同音異義詞
「『戰爭與和平』是一本很棒的書。
「讓我看看... 可惜這本書的封面破破爛爛的」
兩個句子都使用了「書」這個字。我們每天都會瀏覽像這樣的組合,卻沒有注意到在每個句子中,「書」這個字的意思完全不同。
類別實例變數
當你學習物件時,你通常會學到它們可以擷取兩種資料:實例和類別。實例變數是最常見的情況,資料會隨著物件的每個實例而有所不同。類別變數(通常稱為靜態變數)會在類別的所有實例中共享。每個實例都指向同一個值,而且所有變更都會被所有人看到。類別變數比實例變數少見許多,特別是可變的類別變數。
Atom Feed
(更新,因為 Sam Ruby 說服我對日期使用第二精度。)
Mock 不是 Stub
「Mock 物件」這個術語已成為一個流行的術語,用來描述模擬真實物件以進行測試的特殊情況物件。大多數語言環境現在都有框架,可以輕鬆建立 Mock 物件。然而,人們常常沒有意識到,Mock 物件只是特殊情況測試物件的一種形式,它啟用了不同的測試樣式。在本文中,我將說明 Mock 物件如何運作、它們如何鼓勵基於行為驗證的測試,以及它們周圍的社群如何使用它們來開發不同的測試樣式。