軟體之「工廠技術」(上)

2021-10-25 12:46:47 字數 3118 閱讀 2820

「黑客也是創造者,與畫家、建築師、作家一樣」

——矽谷創業之父,yc創始人,《黑客與畫家》作者保羅.格雷厄姆

毫無疑問在ict融合和智慧型時代,除去計算產業的計算機架構和晶元工藝上的演進外,最激動人心的就是世界進入「軟體時代」。保羅這裡提到的黑客就是典型意義上的軟體手藝人,工匠。

大家在討論軟體的時候卻依然用工業時代的思維或學院派的術語去討論他,把軟體簡單看做乙個產業或科學來**,使得在大規模提公升乙個企業的軟體水平成為了乙個老生常談但又無所適從的「難題」。

軟體工程似乎是通用的答案,公司也發起了提公升軟體工程能力的大型變革專案,也願意為此付出巨大代價。但是毫無疑問,深入了解和從事過軟體開發的人都知道,或者行業內人士都知道,軟體工程已經走向死胡同,作為乙個學科也停滯不前很多年了。簡單通過方**,流程,專案管理已經無法在軟體領域產生很多有價值的成果,過去幾年稍微流行過的極限程式設計,敏捷開發等也並未給行業帶來多大變化。大家熱衷的雲原生的很多技術,究其細節也還都是幫助開發者如何製作工程檔案,打包,映象環境和測試,發布等。在很多程式設計師高手眼裡,軟體工程更成為負面的詞語,因為軟體工程似乎代表了一種「讓不會程式設計的人在一起也能做出高質量程式」的代名詞。

既然,方**不管用,那麼就呼喚「英雄」。現在討論軟體的很多話題最後都會落腳到,需要一些天才或很牛的架構師。這在直觀上是最讓人信服的,在貫穿整個it產業的各種傳奇故事中,或多或少都有這樣的「傳奇人物」,包括谷歌的大牛「jeff dean」。但可惜,過完嘴癮之後,就得問,這樣的人如何培養,如何找?共識是有的,培養似乎培養不出來,找也不好找。難題都拋給hr,也是無解。天才般的人物可遇不可求,其性格、對環境的要求都很難滿足,更何況,如果一些大公司有這樣的天才人物,那還不得看好他,麼又怎樣會輕易讓他在人才市場上「晃」呢。

靠方**不行,靠hr招聘遠水解不了近渴,而且也無法保障天才能被發現,以及發現了能在這裡生長。想大規模提公升程式設計師能力,也發現簡單的培訓,上課,甚至考試,認證都不是很有效的辦法,因為這類方法對傳統製造業工人很有效,但的確對軟體這樣乙個有創造性,難以度量其生產效率的行當來說,的確很難。

隨著近幾年對開源社群的觀察和體會,越來越感覺到軟體是乙個神奇的產業,其規律是介乎在大規模製造和早期手工作坊之間的一種行業,他對從業人員要求也是綜合的,這些人既要有工人般的協作,又要有工匠般「手藝人」的個體貢獻和能力。同時,在複製的時候難度有很大。僅僅靠流程,制度甚至方**和一切能寫在紙上的東西都無法複製,類似以前cmm認證,也無法有效規模複製這樣一種能力,這裡姑且把之稱呼為「廠」的能力或「技術」。

與之相對應的可稱之為「實驗室」技術,比如製藥,化學,電子儀器類,只要科學家在實驗室測試,驗證了,就可以利用過去發展的一些企業大規模製造和工業管理思想來規模化提公升其質量,成本或效率。當然,製藥在臨床驗證階段也稍微複雜一些,需要利用在統計學上發現的大樣本「雙盲隨機」實驗來驗證。但這些都很難比的上軟體工廠的複製和驗證難度。所以,嚴格意義上軟體既不是科學,也不是工程,還是一種「藝術」,但ict行業和資訊化、智慧型化時代,對這種手藝人又有大規模、可複製的需求,這是當下一切軟體管理的難題癥結所在。

好在近期,有一項工作可以作為模擬很好的解釋。這就是特斯拉(tesla)在上海的「超級工廠」,能非常形象的詮釋筆者這裡給出的「工廠技術」的概念。如何製造tesla,應該說技術早就成熟了,如何規模製造tesla在美國的「超級工廠」也早就驗證和實踐完成了。那麼問題來了,建造乙個上海telsa「超級工廠」就很容易了嗎,在全球其他地方複製這個「超級工廠」就會很容易嗎。答案當然是否定的,這一點從埃隆馬斯克在上海的工廠建成儀式上的興奮和舞蹈可以看出,這樣的「工廠技術」的特質。當然,當年馬斯克在加州第乙個「超級工廠」不眠不休睡在公司好幾個月,也可以窺豹一斑理解這點。

有這樣一種產業,看起來方方面面都不是難度最大的,技術,單個人員技能,方法等等都是成熟的,在乙個小房子或實驗室把結果做出來也不難,難就難在規模,在成百上千人一起,在數千平公尺的廠房或辦公區域大規模協作,如何穩定、持續、可信的作出產品,就「難上加難」。工業界的「液晶面板技術」,telsa的「超級工廠」以及ict的晶元業也是這樣的例子。那麼,我個人認為,對軟體工程能力也要提公升到「工廠技術」這樣的高度來認識。

找一兩個人來研究演算法不難,找十幾個人開發個驗證版本也不難,偶爾乙個時期,乙個合適的小團隊(恰好有這麼一批能協作的人)作出幾款產品也不難,而如何持續、穩定的開發、維護和迭代創新的開發大型軟體,那才是難上加難。少數軟體大公司如微軟等是有這樣的能力的。而希望具備這樣的能力的公司簡單去「挖人」或招聘「工程師」恰好走上誤區。因為「工廠技術」的核心是綜合人,環境,協作,方法,難以言狀的技巧的乙個綜合「系統」技術。單純從乙個單點上去提高,都有「緣木求魚」之嫌,容易走上「刻舟求劍」的歧途。這些絕對不是某幾種程式語言的程式設計指南能代替,這裡的「知識」和know how可能就是成百上千的工程師的部落格,也可能就是存在在專案組或公司的技術論壇中的帖子,還有就是存在在工程師大腦裡的「經驗」。但單個人的技巧或經驗又無法起到向這樣成百上千人在一起協作的經驗疊加,在解決更多客戶需求中創造性的能「發揮」出來。它即是一種狀態又更多是乙個「過程」。

而軟體這個「工廠技術」相比上述液晶面板等難度更甚,很多人現在討論的公司的「基因」多少也是軟體工廠技術的乙個特徵。也就是在上述工廠技術的特質上往往還有公司文化、創始人或管理層導向等等更多複雜的「因子」。那麼就沒辦法了嗎,說實在的真沒有很好的「萬能藥」,唯一看到可行的是自從軟體誕生之初就伴隨而行的「自由軟體文化」比較反應了軟體行業的規律和本質,由此演化而來的「開源文化」和「開源社群」是一種隨著ict產業蓬勃發展一直隱含伴生的,在地下流動的「岩漿」或「泥石流」。開源軟體社群的開放,協作和創新以及自組織、扁平化可能是當下幫助企業構築和規模提公升其軟體工程能力,構建難以複製,難以學習的核心軟體競爭力的「工廠技術」最好的方法。

所以,本文是跳出開源軟體社群作為一種文化或產業手段來看開源社群,他可能更是符合當下或未來開放式創新,規模協作的一種「軟體工廠技術」,如何既關注這些人的技能提公升和成長,又關注這些人在一起做的事情的有效性,如何能不是簡單的把人、事情(產品)分開,又不「形而上」的簡單歸納為人力資源或流程質量的事情。

如何能更好的駕馭這樣的「工廠技術」甚至決定了乙個企業在ict產業中的競爭力和領導力。

進一步**待下篇。

搜尋技術 上

1.1 什麼是搜尋 簡單的說,搜尋就是搜尋 查詢,在it行業中就是指使用者輸入關鍵字,通過相應的演算法,查詢並返回使用者所需要的資訊。線性匹配 select from 表名 where id select from item where title like 小公尺 結果 結果中包含 所有title...

低功耗設計技術(上)

低功耗設計的原因 發熱,輻射,電池容量,環境,電遷移在高電流下導致的金屬短路斷路問題,熱載流子效應,ir drop,雜訊幅度 積體電路設計流程及對應的低功耗技術 系統 架構設計 軟硬體分離,架構的比較與選定,並行或流水線設計,單元模組的選定 rtl設計 門控時鐘,運算元隔離,記憶體分割 綜合 低功耗...

走出迷茫,在技術上持續精進

當我們從事開發工作2 3年之後,能夠熟練地運用一兩種技術和框架完成工作任務,但是卻常常感到成長停滯,看不到前進方向,難以突破。那要怎麼做才能持續精進,讓自己越來越有價值呢?我根據十多年開發 管理經驗,總結出來一些方法和工具,每個人都可以運用它們,找到自己當下的位置,發現將來的努力方向,開啟提公升之路...