軟體工程真的是一門什麼用都沒有的學科麼?
—–讀《構建之法》有感
楔子
我很慚愧,構建之法這本書已經出版四五年了,我之前卻未曾涉獵,還是在透過組織長沙.net技術社群之後,才因為因緣際遇有幸認識鄒欣鄒老師之後,才瞭解和閱讀了這本書。這是一本非常不錯的軟體工程學著作,事實上應該值得IT企業中不同崗位的從業者都來讀,而不僅僅只是軟體工程師或軟體設計師來讀。
回到10多年前,當時我有幸就讀於位於湖南湘中小城婁底的人文科技學院,那是湖南眾多二本院校中排名較後的普通學府,並且我就讀的專業是數學系下的學科,資訊與計算科學專業,這是一個數學和計算機的邊緣學科。事實上呢,其實當時班上絕大多數人都是調劑生,我是為數不多的一志願錄取吧,因為對計算機感興趣,高中數學成績太差,想在進一步學習數學才選了這個專業,當然,實際上入學後我的數學成績依然很差,這就是後話了。
由於這個專業的教授隊伍本身就是數學教授為主,因此開設了許多數學加計算機的課程,那些數學課程令我頭大,屢屢掛科,但是那些計算機學科的課程卻令我痴迷,並最終讓我選擇了IT行業,併在這條道路上已經邁過來十個年頭,甚至已經決定把他當做終生職業來奮鬥。這些課程中,包括了軟體工程,當時使用的教材來自於清華大學,那本在我這種閱讀愛好者看來淺顯易懂的軟體工程基礎書,在我的同學眼中卻彷彿看天書。在書中,作者以比較容易理解的角度簡單介紹了軟體工程的前因後果和本質,讓我覺得如獲至寶,經常手不釋卷,一直到大學畢業後三年,我都保留了這本書,並時常翻閱。
什麼叫做軟體工程?
不知不覺從業十年,再回過頭來看這門學科,我覺得我有了不同的體會。軟體工程究竟是什麼?應該說時至今日,許多資深從業者都不能理解,這也證明為什麼有的院校的軟體工程課,最終應學生的要求改成了學習JAVA影片教學的原因吧。作為一名十年經驗的開發者,我不打算取用原文中的話來說明究竟什麼是軟體工程,而是說一下自己的理解,我認為軟體工程實際上定義了IT公司的管理流程,設計理念,企業架構的方方面面。在這個知識大爆炸的時代,計算機領域的書籍非常多,大部分都是偏重於介紹開發者技能提高的書籍,大概可以成為技能書,透過閱讀這些技能書,開發者只需花較短的時間就能快速的掌握作者多年學習的收穫,並快速的成長,進而實現自己收入的大幅度提高。軟體工程所介紹的內容,在某些讀者眼裡,看起來就像天書昏昏欲睡,尤其是那些UML圖和設計理念,在某些開發者眼裡認為,就是浪費公司的人力財力和時間,於是有人說軟體工程其實什麼用都沒有。
我覺得軟體工程更像是心法,技術不好的時候,心法通則技術通,技術好了,更需要讀心法,這樣可以讓你的念頭通達,格局透徹。軟體工程,或許並不像一門工程學,更像兩種東西的融合,一個是軟體管理學,一個是軟體設計學,更像是從更高的維度來看待軟體和軟體公司的全生命週期,又從更微觀的角度來介紹如何優雅的設計一個軟體。這也大概是鄒老師的傑作,《構建之法》的標題,取的是構建,而不是架構的原因吧。
構建是什麼?在最開始聽到這個名詞時,我以為是build,我甚至覺得構建一個軟體,不就是開發整合環境中的一個按鈕麼?難道這本書談的是編譯原理?然而我錯了,這本書實際上是build一套企業管理制度和文化,build一套切實可行的軟體技術體系,正是講述如何優雅的build一家能夠持久生存的IT公司,用現在的主流說法,就是打造優秀IT企業的最佳實踐方法吧。
當然,來到9102年的今天IT公司似乎已經成為一個令人不適的名詞,在大家的眼中,彷彿言不離網際網路公司,似乎一家公司自稱是IT公司就自降身價一般。然而,網際網路公司難道不是IT公司麼?留給讀者們評說吧。
那些所謂的最佳實踐
說到最佳實踐,目前我也在一家網際網路公司,也有幸接觸了一些比較大的圈子,那就是中國的MVP們,他們是微軟最有價值的技術專家,這些專家們都對技術充滿了無限的追求、並積累了豐富的知識體系,從他們的交流溝透過程以及我自己平時的積累,我遇到了以下幾種常見,卻不一定正確的最佳實踐。
1、設計優先
網際網路公司常用的樣式之一,就是設計和使用者體驗優先,在這種理念中,認為使用者體驗是第一生產力,技術是第二生產力。先把面子做好,再把產品做好。
2,架構優先
這種理念認為,軟體架構體系是決定軟體生死命脈的關鍵因素。往往容易變成架構師優先,往往會招一位優秀的架構師,然後來組建他的核心班底,再變成一家技術優先的企業。真的是最佳實踐麼?誰吃過苦誰自己明白。
3,中臺優先
阿裡巴巴的實踐告訴我們,要重中臺,輕前臺,一切以業務流轉為標的。但是真的是每家企業的最佳實踐麼?
4,資料優先
這種理念認為,資料是第一生產力,一切業務都是資料。在前幾年的DT時代,就是這麼鼓吹資料優先,然後各種大資料平臺層出不窮,但是,往往做成了多資料,資料大(意思是指那些看起來大,卻不符合5v特點的資料),卻很少有必要做成大資料,大資料也屬於被國人玩壞的概念吧?。
論構建的重要性
可以說,中國人大概是最善於玩文字遊戲的,那些來自成功企業的所謂最佳實踐,依然得依據企業的實際情況出發才能產生效果。
我認為,或許對IT企業來說,最佳實踐應該依然是,構建優先,即作為一家軟體公司,野蠻生長到最終,依然是構建符合企業實際的IT企業管理體系。例如阿裡巴巴,不僅匯聚了全國最頂級的技術人才,更是建立了一套最為完善的IT管理體系,最終才得以讓IT技術促進企業得以快速發展。
必須承認,在中國有許多業務優先的公司,其實並不能理解IT公司與傳統公司的區別,總是用自己片面的理解認為,公司什麼都缺,缺的只是一個程式員或幾個程式員,但是,真的是這樣麼?沒有,哪怕有幸被你招到了一位能獨挑大樑的優秀程式員,往往也會由於與企業文化和管理理念極度的不適應而離去。
在網際網路概念已經深入人心的今天,從某種意義上講,或許對於企業,只要掌握了合適的時機加上一些機遇,也許總是能獲得成功。但是,真的能存活超過十年的時間,並保持持續的增長麼?在偌大的中國,近些年以來有許多優秀的企業憑藉優秀的產品獲得了短期的成功,卻深刻反映出中國經濟發展全靠吃人口紅利的客觀事實。
尤其是那些看起來短期依靠員工的創新能力獲得快速發展的中小型或者獨角獸企業,越是容易因為創新能力枯竭而最終內捲化。每家公司都有機會火五分鐘,但是有的公司大概只能火那麼幾分鐘。
任何IT公司,撇開軟體管理之道談純粹的技術實現或產品輸出,或許都不過是一瞬間的爆發,越是看起來成功的優秀的網際網路公司越是必須基於軟體工程學的理論出發,建立一套切實可行,持續迭代的管理體系才能獲得長久的生命力。
但是,哪怕有了構建之法,又該如何打破中國IT企業平均壽命不過2.8年的客觀事實呢?我想我還是好好搬磚吧。。
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。