工廠的重組:是時候給軟件工程師提供更多的工具

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"},{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"本文最初發表於作者個人網站,經原作者 Erik Bernhardsson 授權,InfoQ 中文站翻譯並分享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在開發人員中流行的態度是,抱怨我們的工具和東西有多爛。或許我是個樂觀主義者,因爲我的觀點完全相反!1999 年,我得到了第一個軟件工程師的工作,在過去的二十年裏,我見證了軟件工程的變化,使我們的工作效率提高了好幾個數量級。僅舉一些我曾經做過或者接近做過的事情的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Spotify 使用 C++ 構建了一套完整的 P2P 架構,用於向聽衆分發流媒體音樂,而這在今天已經是一個微不足道的問題(將數據放在 CDN 上)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"過去,我常常編寫自定義的 mapreduce 作業,以獲取基本的統計數據,然後等上幾個小時才能完成。現在,這些是數據倉庫中的 SQL 查詢,只需幾秒鐘就能運行。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"以前我開過一家網店,用了一個星期才實現信用卡支付。而現在用 Stripe,15 分鐘就可以搞定。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"更不用說開發過程中的變化了:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在這個行業中,單元測試是非常罕見的:我第一次遇到它是在 2006 年穀歌工作時。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在 git 剛剛出現時,git-flow 是盛行的工作流,很多和我一起工作的開發人員都會花很多時間(比如 20~30%)來重新構建基礎。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"CI 系統很脆弱,CD 基本上不存在,部署是可怕的手工事務。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這些只是例子——我可以說上一整天。正如關於軟件生產力的經典論文《"},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/No_Silver_Bullet","title":null,"type":null},"content":[{"type":"text","text":"沒有銀彈"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"》("},{"type":"text","marks":[{"type":"italic"},{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"No Silver Bullet"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"),這些東西本身並沒有什麼顯著的進步。但生產率的增長是累加的,並且是以對數尺度累加起來的,也就是說,當你的時間尺度是幾十年的時候,我們看到的將是數量級的增長,這不是沒有道理的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(注意:在本文中,我將使用“工具”一詞來指代所有種類的東西:框架、庫、開發流程、基礎設施。)"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"對軟件永無止境的需求"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"對於世界有一種極爲粗略的分類:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"有些東西有很好的軟件。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"有些東西有平庸的軟件。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"有些東西沒有軟件。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"到目前爲止,這一點已經很明顯了,因此我繼續說下去:如果有一種能力,能夠在零成本的條件下,瞬間生產出無限量的軟件,那麼最後兩種分類將不再存在。平庸的軟件之所以存在,是因爲有些人沒有能力僱傭更好的工程師,或者他們沒有時間,或者其他什麼原因。沒有軟件的東西……算是萬能的嗎?我是說,爲什麼你的鞋子裏沒有內置計步器?爲什麼會計裏的標記還能生成 PDF 發票,並通過電子郵件發送給客戶?怎麼不……我還能說更多。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"很明顯,我們一直在向這個方向努力,而我的觀點是,仍然有很多東西可以使用軟件。那爲什麼還沒有發生呢?由於一些人做出經濟決策,他們"},{"type":"link","attrs":{"href":"https:\/\/erikbern.com\/2020\/03\/10\/never-attribute-to-stupidity-that-which-is-adequately-explained-by-opportunity-cost.html","title":null,"type":null},"content":[{"type":"text","text":"認爲構建這些軟件的成本太高"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。僱傭工程師、培訓工程師以及把事情做好,都需要金錢和時間。那麼,我們如何看待這種成本呢?"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"軟件工程師的供求關係"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"現在回到我的觀點,即軟件工程師的生產率會隨着時間而提高。用經濟學術語來說,這意味着單位時間內的產出價值將增加。就需求而言,這意味着構建軟件的成本降低了。過去需要 1000 個小時才能完成的事情,現在需要 100 個小時就能完成。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果需求是固定的,那就意味着大規模失業和工程師工資的降低,但需求並不是固定的!正如我前面所暗示的那樣,構建軟件的成本降低意味着新的機會的出現。以前,構建你的小工具不值得花費 1000 個小時的工程努力,但花費 100 個小時還是值得的。這裏面存在着巨大的潛在需求。你甚至可以支付工程師更多的時薪。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這些情況可以同時發生:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"開發更多的軟件。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"爲軟件工程師加薪。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件工程師的數量越來越多。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這可能有悖於直覺,因此值得拿它和固定需求進行比較。假設發明了某種工藝,使紙尿褲工廠的產量提高了 10%(保持所有成本不變),並且這項發明可以立即提供給所有紙尿褲製造商。結果會是什麼呢?紙尿褲市場將出現暫時性的供過於求,市場將趨於一個新的平衡點,即供應量萎縮以滿足需求。在這個過程中,一些工廠將會關閉,紙尿褲的價格也將會下降。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件工程師的不同之處在於,當成本下降時,需求就會增長。以前,你阿姨的牙科診所沒有網站,但現在值得擁有一套在線預約系統。你孩子所在的學校突然出現了一個應用程序,可以向家長髮送更新的信息。我不知道——我的觀點是,隨着價格的下降,會有更多的需求出現。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這種情況不僅發生在整個經濟領域,也可能發生在微觀尺度上。如果你有一個數據科學家團隊,而你引入了一個工具,使當時的生產力提高了 2 倍?很好。你只是增加了一倍的投資回報率,你應該去僱傭更多的人。我從來沒有見過一個公司的數據科學家會沒有工作了:總是有更多的東西需要分析。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這種情況會一直持續下去嗎?我想在某種終極狀態下,我們會遇到類似奇點的東西,軟件本身製造軟件的速度如此之快,以至於需求不能隨着供應而增長。在這個時候,我會爲軟件工程師的失業擔憂。但是我想,在未來的幾十年中,我們會看到越來越多的軟件工程師出現在我們的視野中。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"如何成爲軟件工程師"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"很明顯,軟件作爲一個領域的發展和薪資的增長,本身就吸引了更多的人進入,但是我認爲還有一件事在發生。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"幾十年前,軟件工程非常困難,因爲你必須從頭開始構建一切,並解決所有這些基礎問題。你需要存儲空間來爲 100 萬併發用戶提供服務?閱讀關於一致哈希算法,CAP 定理,CRDTs 之類的論文,捲起袖子,準備好迎接 10 萬行硬核 C++。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如今,這些問題大部分都已經解決了,你可以使用現成的工具來解決這些問題。但那並不容易!正如我之前提到的,這裏沒有銀彈,只有數以百萬計的工具,你需要知道如何根據最佳實踐來組合這些工具。但是我們知道這是另一種困難。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"數十年前的軟件工程傾向於那些能夠把複雜軟件從原子中拼接出來的深奧抽象思維者。在我看來,今天的軟件工程更像是一門手藝:更多的是瞭解應該使用哪些工具來完成哪些工作。我是說,它仍然非常偏愛那些更深層次的抽象思維者,但是相對來說,這種技巧的差異比過去更小。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我認爲這改變了供給側的方程式。現在,阻礙軟件工程師成長的因素已經變得不同,這爲他們打開了更大的人才庫。這樣就有了新的供應,這意味着更多的軟件將會誕生。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"知識工廠中的軟件工程師角色"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"對於公司來說,構建軟件過去是,現在仍然是一項非常昂貴的工作。在一般的公司裏,你的積壓工作仍然無休止地存在。工廠的軟​​件方面通常仍然是公司的瓶頸。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當你有一個部件製造商是製造工廠的瓶頸時,你該怎麼辦?你要確保瓶頸在任何時候都能得到充分利用。這意味着你可以集中小部件製造商的資源管理:你可以控制輸入,並且盡力確保按照什麼順序生產哪些部件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"大多數公司的運作方式仍然大致如此。但是,那些(在我看來)擁有高效率工程團隊的公司,他們的組織方式略有不同。他們傾向於分散優先級,並直接與產品和業務利益相關者一起進行緊密的迭代。如果某個資源不再是瓶頸,你就可以通過在許多不同的團隊中分配資源,從而顯著提高迭代的速度。我的意思並不是說管理要分散開來,要說清楚。我是說要把積壓的工作分散到小團隊中,直接根據業務需求來做。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你沒有一個營銷團隊在這個模型中把一些東西放進了工程團隊的積壓中。你有一個跨職能的團隊,他們擁有自己的收購權,其中一些人是傳統的營銷人員,一些人是工程師。你可以想象得出一家典型公司的幾乎所有功能:客戶支持、財務或任何其他。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在歷史上,有個很有意思的類比,那就是"},{"type":"link","attrs":{"href":"https:\/\/www.bbc.com\/news\/business-40673694","title":null,"type":null},"content":[{"type":"text","text":"爲什麼電力用了那麼久才改變了製造業"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。在蒸汽機時代,工廠是圍繞着萬能的蒸汽機的動力分配而建造的。能源是寶貴的資源,因此很自然地認爲製造工廠就是圍繞着能源分配而建立的。電力改變了這一點,也改變了分散的能源生產方式,但是製造工廠要重新調整和利用這種方式,真的需要很長的時間。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(注 1:這個類比並不十分恰當,因爲蒸汽動力不僅是一種寶貴的資源,而且難以製造出小型蒸汽機。)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(注 2:我所鏈接的文章的主要觀點是,創新往往需要時間才能釋放生產力,因爲那些最初嘗試使用新技術的人常常試圖將創新轉變爲傳統結構。比如:互聯網首先創造了通過郵件發送的 DVD,但是真正的互聯網原生創新是流媒體視頻。)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"知識工廠的瓶頸"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"對於提高工程師工作效率的工具,我已經談了很多,但是還不夠全面。顯然,還有很多非技術人員使用這些工具來做他們自己的事情,這是好事!但是,我也看到很多工具是爲了讓人們不必和工程師合作。爲什麼這樣說?原因是多方面的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"迭代速度:向工程師解釋所需成本,使得它不值得去做。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"工程資源不到位(或過於昂貴,或者其他)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"需要的只是工程師的一小部分,但是市場並不存在。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"構建一些東西需要一些特殊的領域知識。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"工程師們很怪異,而且身上有怪味。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"好吧,最後一個理由只不過是一個愚蠢的玩笑。但我認爲其他的觀點已經涵蓋了大部分。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在這些理由中,我認爲第一個原因(迭代速度)是 100% 合理的。舉個例子,我鼓勵所有的業務人員學習 SQL,這樣他們就可以自己運行查詢。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我覺得不幸的是第二個原因(工程資源不到位)。很多人都會遇到這樣的情況:人們手動發送帶有宏的 Excel 文件,每天早上將新數據複製粘貼到電子表格中,或者其他類似的事情。這有時被稱爲 “"},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Shadow_IT","title":null,"type":null},"content":[{"type":"text","text":"影子 IT"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"”。在擁有專業工程資源的情況下,構建和擁有這些東西的總成本可以大大降低。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"但事實是,沒有工程師在製造技術,這證實了對工程師的需求。許多公司的工程師是無法滿足需求的。因此,隨着時間的推移,通過更好的工具能夠滿足更多需求。站在工程師生產力前沿的公司,很可能不太注意到這些問題:工程師會盡早介入並致力於解決商業問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第三個原因(部分資源)對小公司來說也許是對的。假如你是一名牙醫,你不會僱一名工程師爲你建立一個預約系統。幸好,他們得益於全行業產出的增加:一個全新的牙醫軟件生態系統可供購買(因爲構建它要便宜得多)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"最後一個原因(特殊知識)有些道理。我們常常看到業務人員建立人工工作流程,然後由工程師來完成,並將其自動化,作爲一種一線的技術攻關,以實現基本的原型。相應地,隨着去中心化程度的加深,工程師們將會越來越多地積累專業知識。比如,許多公司爲人力資源和財務團隊提供了專門的數據科學和數據工程資源。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"巨大的生產力不平等"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"其中一個有趣的推論就是,它形成了一個積極的反饋,一些公司甚至會更落後於人:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"缺乏新工具的採用意味着落後於利用這些工具的公司。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件工程師的高薪意味着這些公司將被擠出高端招聘市場。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果不能對工廠進行重組,就意味着迭代速度的降低。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"工程師的缺乏意味着一種誘惑,即採用工具而不使用工程師來構建技術,而相關的成本要大得多。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在合同中,處於這一前沿的公司將會看到他們的軟件工程師的生產力激增,迭代速度提高。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我在抵押貸款行業呆了六年,我已經非常清楚地看到這些趨勢正在我的眼前上演。最大的落伍者都在竭盡所能地"},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Robotic_process_automation","title":null,"type":null},"content":[{"type":"text","text":"機器人流程自動化"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"和“管道膠帶”,以及現成的 "},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Point_of_sale","title":null,"type":null},"content":[{"type":"text","text":"POS"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 和 "},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/Customer_relationship_management","title":null,"type":null},"content":[{"type":"text","text":"CRM"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 軟件。稍微好一點的公司都有自己的工程團隊,但是似乎沒能將流程工廠重新調整成一個技術驅動的公司。我的公司 "},{"type":"link","attrs":{"href":"http:\/\/better.com\/","title":null,"type":null},"content":[{"type":"text","text":"Better"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 隱含着對我在這篇文章中提到的一切的賭注,或許還有其他一些趨勢。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"結束語"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我認爲這些詞彙可以簡潔地用於因果關係圖:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/fa\/fa7a4867838c63521570dab9755b9dae.jpeg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"很明顯,這個理論並不完全適用於軟件。其他趨勢如因特網抹掉了物理護城河,軟件創造了更大的規模經濟效益。但是我認爲,這能解釋許多問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果一種理論不能做出預測或政策建議,那麼它就不會有任何作用,因此我敢打賭:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"現在是軟件工程師的好時機。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件工程師的工具市場將繼續增長。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"許多“傳統”企業的生產力提升將落後於其他企業。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"新進入者將威脅到這些公司,並在很大程度上取得成功。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"每家公司都應該思考如何重新調整構建技術的方式,關注去中心化和更高的迭代速度,將工程師嵌入到整個工廠中去。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"從長遠來看,公司採用工具的唯一目的是在沒有工程師的情況下構建技術,這並不是一個好主意。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件工程師應該全心全意地採用能夠提高工作效率的工具:這讓他們更有價值。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"擁有高生產力的工程團隊的公司將擁有更快的工程團隊增長(因爲僱傭更多工程師的投資回報率更高)。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這篇文章融合了我頭腦中以前無關的觀點。有一些也許對讀者非常明顯,有一些則不然。但願你能在後者中找到一些有用的東西!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"作者介紹:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Erik Bernhardsson,是 Better 的首席技術官,Better 是一家正在改變抵押貸款方式的初創公司。他寫了很多代碼,其中一些最終被開源,比如 Luigi 和 Annoy。他還參與組織了紐約機器學習會議。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"https:\/\/erikbern.com\/2020\/12\/16\/giving-more-tools-to-software-engineers-the-reorganization-of-the-factory.html"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章