中國軟件開發工程師之痛

在近期的一次會議上,有高層談到之前在中國覺得自己做得很牛,但與美國同行接觸後卻發現與人家存在很大的差距,這一點我在外企工作時也有過同樣的體會。真正與外國同行接觸後纔會知道什麼是差距,在這篇文章中我從軟件開發工程師的角度以“痛點”的形式來談一談我所認爲的差距。

技能之痛

相當數量的軟件開發工程師(後面簡稱爲工程師)認爲除了與編碼相關的內容外,其他技能都不重要。在這種意識的引導下,很容易出現的一個普遍現象是技術能力不錯,但開發能力卻不行。這種現象的另一種表現是:單幹可以,合作不行。

技術能力是指個體對某些技術知識掌握的深度和廣度,而開發能力除了包含技術能力外,還涵蓋個體在項目運作過程中所需掌握的其他能力。

高效的團隊一定離不開通過知識管理將個體所掌握的知識通過分享而沉澱下來。分享途徑無外乎通過一定形式的文字和(或)圖,這就要求工程師掌握使用象Word、PowerPoint、Excel、Visio(和UML)這類工具的基本能力,並具備良好的寫作與表達能力。表面看來這種能力與編碼能力無關,因而也得不到工程師的普遍重視,也因此成了一個痛點。其實,寫作與表達能力與編程水平息息相關,因爲它們都在考驗我們的邏輯思維和概念能力。忽視掌握必要工具軟件的工程師難道以爲編程語言是知識分享的萬能工具?

個體具備良好的溝通能力是項目順利運作的基石。不良溝通表現爲:工程師在團隊合作中更多采用被動詢問而非主動彙報、不會辯論、對於他人指出的錯誤表現得“自尊”和狡辯而非感謝或承認、對於被邀請的各類審查活動(如設計審查、代碼審查、文檔審查)不是積極響應而需別人催促。在團隊中,如果技術管理者不能很好地引導,個體溝通能力的缺乏很容易在團隊中引發“一言堂”或“無政府主義”問題,工作效率低下則是必然。

專業精神之痛

不少工程師對於自己的職業缺乏精神上的追求,工作起來不求專業,只求“代碼能工作就行”。這類工程師容易將經驗與資歷等同,以爲工作年份越長就越有經驗,實則不然。工作年份越長資歷是越老,但如果專業水準沒有在過程中不斷提高的話,所獲得的經驗很可能趨零。

什麼是專業?專業是指我們應以業內所廣泛達成的共識去從事軟件開發活動。這裏的“業內”並非只指“國內的”,而是指“國際的”;“專業”也並非單指技術內容(比如,編程語言、算法等),還包含軟件項目運作中的其他各個方面(比如,開發方法、建模工具、流程、質量保證手段等)。要做到專業做事一定離不開不斷地學習,只有這樣才能瞭解行業的動向。

軟件行業雖然沒有“銀彈”,但仍存在不少有效改善開發質量與效率的方法。只有抱着專業做事的態度去工作,我們纔有可能去實踐這些方法,並在實踐過程中思考這些方法的內涵與不足,進而爲自己的工作量體裁衣。千萬不要認爲“反正業內沒有銀彈,我要去學那麼多方法幹什麼?”

強調專業做事的根本目的,是使我們的做事方法更科學。與我所瞭解的美國、俄羅斯這些國家的工程師相比,我國工程師的專業化還有很長的路要走。

速度之痛

除非你完全認可中國近些年以GDP爲導向的經濟發展策略,否則很可能得反思一下軟件行業所鼓吹的“唯快不破”策略,尤其是互聯網領域。

在商業環境中,“快”能獲得很多競爭優勢,這毋庸置疑。工程師的價值雖得(最終)體現在商業產品上,但千萬不要忘記了我們始終是一名工程師,在實現商業價值的道路上不斷提高自己的專業水準無論如何都不應被忘記。工程師始終要明白,公司的發展與自身的職業發展並非完全統一。如果在公司的發展過程中我們的專業水準並沒有“水漲船高”,那除了說明我們在吃老本外,還表明我們很可能是在“拖後腿”。在這種情形下,即使公司蒸蒸日上地給我們發薪水,但從個體職業發展的角度說來,公司發展其實與我們“一毛錢關係都沒有”。我想不致於有人認爲自己以後只會在這一家公司幹吧!如果真是那樣想,你能保公司幾十年存在?屆時萬一得無奈地離開公司,單薄的專業水準又如何在人才市場與他人競爭?

對“唯快不破”的誤解所帶來的不良後果是,有些工程師爲了快速實現軟件功能而忽略了專業精神。他們一味地爲了速度而築下高額的“技術債”,甚至在“速度”的幌子下過得心安理得。

如果將“唯快不破”改爲“唯效率與質量不破”或許更不容易形成誤解。一說到“快”,給人的感覺往往是投入更多的時間就能達成目的,容易讓人忽視做事的方法與效率。與之不同的是,強調效率需要我們考量投入時間的產出比,且暗示做事的方法只有對路才能獲得效率;強調質量則提醒我們儘量別做“豆腐渣”之事,而這隱含的內容是我們必須專業做事,即使欠下了“技術債”它也時刻提醒着我們那是一定要還的。

軟件行業的長期被動加班成爲了速度之痛的一個縮影,它讓不少工程師過着有工作沒生活的日子。軟件行業要避免偶爾、短期的加班是不可能的,但長期的被動加班絕對是個問題。不重視效率與質量的“勤勞”除了是在浪費外,更是一種透支將來的短視行爲。

視野之痛

視野之痛體現在工程師在從事技術工作時,忽視瞭解國外的發展狀況。他們因爲不知道同質開源項目的存在而走上“重新發明輪子”的道路,甚至發明出“三角形的輪子”;也因爲對英文資料缺乏閱讀的耐心而不去了解相關國際標準、訂閱開源項目的mailing list和專業網站的newsletters等。

狹窄的視野很容易讓人自滿,以爲軟件開發就是那麼簡單,最後導致成長慢、意識與技能“不入流”。

以我的經驗來看,工程師如果不能很好地閱讀英文資料則要達到高技術水平實在很難,視野狹窄也恐成必然。另外,編程活動中的命名環節其實對我們的英語水準提出了一定的要求,不然很容易動名詞不分而寫出只有自己容易讀懂的程序,或常出現命名時找不到合適的單詞去精確表達程序意圖。

持續發展之痛

以上各痛點的最終結果又給我們帶來了持續發展之痛。其表現爲:少有人會在項目中通過文檔提升開發效率;鮮有人會持續改善軟件的設計質量;大部分人只關注短期完成工作,而忽視短期行爲所帶來的高額隱性成本。

持續發展之痛使得工程師很難輕裝上陣,工作精力過多花費在重複、低級的瑣事上,而非用於學習和思考。最終結果是將工作變成了“青春飯”,辛苦但卻看不到美好的未來。

所有痛點可以歸結爲意識的陳舊,或雖有意識卻無力於將其轉變爲能力!(注:意識是一種行爲,而非能力)

當然,這些“痛”與我國的社會大環境有着緊密的聯繫。但無論是怎樣的環境,總有人做得出色,或許他們身上有我們所沒有的內容。是什麼?只有自己去想、去悟,成長之痛! 即使大環境好了、大家都很“專業”,職場的“金字塔”總是擺在那的。誰能向上走?走多遠?全靠個人,沒有shortcut!只不過每個人都平等地擁有向上走的機會與權力!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章