期間:2017
機器合理化
我記得在青少年時期,有人告訴我人工智慧 (AI) 在接下來的幾年會帶來多麼美好的事物。現在過了好幾個十年,其中一些似乎正在發生。最近的勝利是電腦透過彼此對弈來學習下圍棋,迅速變得比任何人都更熟練,採用人類專家幾乎無法理解的策略。我們自然會好奇接下來幾年會發生什麼事,電腦是否很快就會比人類更具智慧?(考量到最近的一些選舉結果,這可能不是太難達成的目標。)
不過,當我聽到這些消息時,我回想起畢卡索在好幾十年前對電腦的評論:「電腦沒用。它們只能給你答案」。機器學習等技術所產生的推理方式在結果上確實令人印象深刻,而且對我們這些軟體使用者和開發人員來說會很有用。但是,答案雖然有用,卻不總是全貌。我在求學初期就學到了這一點 - 只提供數學問題的答案只能得到幾分,要得到滿分,我必須展示如何得到答案。得到答案的推理比結果本身更有價值。這是自學圍棋 AI 的限制之一。雖然它們可以獲勝,但它們無法解釋自己的策略。
星際競逐和聖胡安
聖胡安和銀河競逐是優秀、快速且深思熟慮的紙牌遊戲。銀河競逐較為深入,且其圖示對某些人來說較難理解。
功能切換(又稱功能標記)
功能切換(通常也稱為功能標記)是一種強大的技術,可讓團隊在不變更程式碼的情況下修改系統行為。它們屬於各種使用類別,在實作和管理切換時,務必考量此分類。切換會造成複雜性。我們可以使用智慧切換實作慣例和適當的工具來管理切換組態,以控制此複雜性,但我們也應該限制系統中的切換數量。
建立演化式架構的前言
最近,我的同事 Neal Ford、Rebecca Parsons 和 Pat Kua 合著了一本名為「建立演化式架構」的書。我很榮幸他們邀請我撰寫前言。
Roy 出售 Thoughtworks
Thoughtworks 被 Apax Funds 收購。現任管理團隊將繼續像以前一樣經營公司。
測試影響分析的崛起
測試影響分析 (TIA) 是加速建置測試自動化階段的一種現代方式。它透過分析原始碼的呼叫圖,找出在變更至生產程式碼後應該執行哪些測試。Microsoft 已針對此方法進行廣泛的研究,但開發團隊也可以相當低成本地實作一些有用的功能。
架構師電梯 — 參觀高樓層
許多大型組織發現他們的 IT 引擎與執行長辦公室分隔在不同的樓層,這也將業務和數位策略與執行這些策略的重要工作分隔開來。架構師的主要角色是在辦公室和引擎室之間搭乘電梯,在任何需要支援這些數位工作的場合停下來:自動化軟體製造、將前期決策制定減至最低,以及在技術演進的同時影響組織。
敏捷性和架構的 Podcast
Ryan Lockard(敏捷起義)邀請我加入 Rebecca Wirfs-Brock 進行關於敏捷專案架構的 Podcast 對話。Rebecca 開發了責任驅動設計,這對我剛開始我的職業生涯時有很大的影響。我們討論了我們如何定義架構、測試對架構的影響、領域模型的角色、要準備什麼類型的文件,以及需要多少架構才能預先完成。
葡萄栽培與畫廊主
葡萄栽培與畫廊主都是出色的歐式遊戲,主題鮮明,以生產為中心的業務。
生產中的 QA
傳統上,QA 專注於在發布到生產環境之前測試軟體,以了解它是否已準備好進行此類發布。但現代 QA 組織也越來越關注在生產環境中執行的軟體。透過分析日誌和其他監控工具,他們發現品質問題,並強調給開發組織。這種方法特別適用於使用持續交付將新版本的軟體快速且可靠地放入生產環境的組織。
一行會危害您伺服器的程式碼
工作階段金鑰是用于加密 Cookie 的金鑰。應用程式開發人員通常在開發期間將其設定為弱金鑰,且不會在生產期間修復它。本文說明如何破解此類弱金鑰,以及如何使用已破解的金鑰來控制託管應用程式的伺服器。我們可以使用強金鑰和仔細的金鑰管理來防止這種情況。函式庫作者應鼓勵使用工具和文件來達成此目的。
自我封裝
資料封裝是物件導向風格中的核心教條。這表示物件的欄位不應公開,所有從物件外部的存取都應透過存取器方法(取得器和設定器)。有些語言允許公開存取欄位,但我們通常會告誡程式設計師不要這麼做。自我封裝更進一步,表示所有對資料欄位的內部存取也應透過存取器方法。只有存取器方法才能觸及資料值本身。如果資料欄位未公開,這表示需要新增額外的私人存取器。
函式作為物件
在程式設計中,物件的基本概念是資料和行為的結合。這在撰寫一組相關函式時提供一個常見的資料內容。它也提供一個用於操作資料的介面,讓物件可以控制對該資料的存取,使其容易支援衍生資料並防止資料無效修改。許多語言提供明確的語法來定義類別,作為物件的定義。但如果您有一個具備一級函式和閉包的語言,您可以使用這些建構來使用函式作為物件模式(最初由 Eugene Wallingford 描述)建立物件。
撰寫敏捷宣言的回憶
Agile Uprising 播客一直對敏捷宣言的作者進行一系列訪談。輪到我在訪談席上了。我對 Snowbird 工作坊本身的記憶不多,但我能夠描述一下導致宣言的背景。
「事件驅動」是什麼意思?
去年年底,我參加了 Thoughtworks 同事舉辦的工作坊,討論「事件驅動」應用程式的性質。過去幾年來,我們建立了許多大量使用事件的系統,這些系統經常受到讚揚,但也經常受到批評。我們的北美辦公室組織了一場高峰會,來自世界各地的 Thoughtworks 高級開發人員齊聚一堂,分享想法。
高峰會最大的成果是認知到,當人們談論「事件」時,他們實際上指的是一些截然不同的事物。因此,我們花了很多時間嘗試找出一些有用的模式。這份筆記簡要總結了我們識別出的主要模式。
合成監控
合成監控(也稱為語意監控)會定期對應用程式的自動化測試子集執行即時製作系統測試。結果會推送到監控服務中,在發生故障時觸發警示。此技術結合了自動化測試和監控,以偵測製作中的業務需求故障。
持續整合認證
持續整合是軟體開發中的一種流行技術。在研討會中,許多開發人員談論他們如何使用持續整合,而且持續整合工具在大部分開發組織中都很常見。但我們都知道,任何體面的技術都需要一個認證計畫,而且很幸運地,確實有一個認證計畫。此計畫由持續交付和 devops 領域的頂尖專家之一所開發,以管理快速著稱,但其結果卻非常有見地。儘管它已經相當成熟,但知名度卻不如預期,因此,作為此技術的愛好者,我認為與我的讀者分享此認證計畫非常重要。您準備好接受持續整合認證了嗎?而且您將如何應對參加考試會揭露的驚人真相?
Web 應用程式安全性基礎
現代 Web 開發有許多挑戰,其中安全性既非常重要,又常常被低估。雖然威脅分析等技術日益被視為任何嚴肅開發的必要條件,但也有一些基本做法是每個開發人員都可以且應該例行執行的。