2018第52週日&技術人員如何面對裁員?
2018的最後一週,看了汽車的兩個趨勢,純電動車和自動駕駛,兩個現在很火但還有很多問題要解決的方向,尤其是自動駕駛。雖然它因為一些問題當前不能完全被克服,但因它而生的各種輔助駕駛技術卻被用的越來越多,比如自適應巡航控制ACC,尤其是全速自適應巡航,人只要控制方向盤,而啟停加減速汽車可以自動控制,但人的操作還是高優先順序的,比如在ACC模式時踩剎車就會自動退出。
回顧過去不到一個月的時間裡,爆出裁員的網際網路公司有多少?京東裁、去哪兒裁、知乎裁、美團裁、微博裁、錘子倒……當然以上所有訊息都被官方闢謠,但……你懂的。
就像管道工一樣,他們獲得報酬,是因為他們瞭解自己所使用的工具,並知道如何使用它們讓裝置運轉起來,而不是讓他們重新發明技術,或者花 80 個小時去優化只有 5% 的使用者會用到的東西。
中小型企業很少會去處理與規模擴充套件或優化相關的問題——一部分原因是硬體變得越來越便宜,一部分原因是基礎的開源軟體已經做得很好了。
所以,企業一方面想網羅最優秀的人才,以便在重大的時間節點、關鍵時刻能夠物盡其用(但通常沒有這種情況),另一方面只派給這些優秀人才以增刪查改的日常工作,最終那個優秀的小王都成了 Crud Boy。
當我們聊技術實力的時候,我們到底在聊什麼?
有的人認為:技術實力就是指演算法和資料結構很厲害……
有的人認為:研究過 Linux 核心原始碼和看懂《深入淺出 MFC》的才是技術牛逼的人……
有的人認為:會寫 C++ 的才是真正的技術高手,因為 C++ 的物件初始化有 N 種寫法……
有的人認為:技術高手必須對業務很熟悉……
有的人認為:貢獻了開源專案程式碼的才是技術牛人……
有的人認為:只有架構師才是技術大牛……
其實簡單來說,判斷技術實力的一個總的原則就是:技術實力就是指解決問題的能力!
問題是和領域相關的,技術是用來解決問題的,因此技術也是領域相關的,不存在放之四海皆準的技術。
當我們聊技術實力的時候,我們到底在聊什麼?
有的人認為:技術實力就是指演算法和資料結構很厲害……
有的人認為:研究過 Linux 核心原始碼和看懂《深入淺出 MFC》的才是技術牛逼的人……
有的人認為:會寫 C++ 的才是真正的技術高手,因為 C++ 的物件初始化有 N 種寫法……
有的人認為:技術高手必須對業務很熟悉……
有的人認為:貢獻了開源專案程式碼的才是技術牛人……
有的人認為:只有架構師才是技術大牛……
其實簡單來說,判斷技術實力的一個總的原則就是:技術實力就是指解決問題的能力!
1)不存在放之四海皆準的技術
簡單來說,問題是和領域相關的,技術是用來解決問題的,因此技術也是領域相關的,不存在放之四海皆準的技術。
有網友說:高斯林來做 iOS 開發,分分鐘秒殺現在所有的 iOS 開發人員,因為目前 iOS 經驗最豐富的開發人員,經驗也不過 10 年。我認為這是不可能的,iOS 開發領域面臨的問題,和開發 Java 程式語言面臨的問題差異很大,當然,如果高斯林真的做上幾年 iOS 開發,確實可能超過很多 iOS 開發人員,但一開始就秒殺哪些做了 7~8 年的 iOS 程式設計師,這個是不可能的。
2)技術要能解決具體問題才有價值
技術只有能夠解決某個領域的問題才有價值,否則光知道某個技術沒什麼用;掌握了某個技術但在當前的領域用不上,這個技術對當前領域來說也沒有價值。
當然,確實存在某些技術可能在當前看起來對當前領域沒有用,但後面可能會用到,因此技術人員需要自己儲備一些當前暫時沒有用的技術以拓寬技術視野,例如當前大火的人工智慧和區塊鏈技術,但要注意“可能”這個詞,這需要技術人員自己進行判斷和平衡,不能拿技術儲備作為託詞一股腦的什麼都儲備,例如資料庫開發工程師至少在這幾年是不需要儲備 VR 知識的。
3)問題的複雜度決定技術實力的高度
問題的複雜度不同,複雜度越高,解決起來越困難,相應的技術實力要求也越高。
打個比方,很多面試官喜歡讓面試者現場手寫氣泡排序、快速排序、連結串列之類的程式碼,以此來判斷面試者的技術實力,但我們用這個原則去分析一下就可以發現,這樣並不能考核技術實力,假如招聘了一個會手寫快速排序的面試者,招進來後你會讓他用自己寫的快速排序解決什麼問題?貌似絕大部分場景下都不可能讓一個新來的員工自己寫個快速排序來解決某個問題吧?
我們該如何自處?
我們生活在一個大多數“軟體工程”基本上就是管道作業的世界裡。我們該怎麼辦?這對於我們的職業生涯來說意味著什麼?現金流會一直持續下去嗎?
1、用更少的資源構建更多有價值的東西。
首先,我們應該認識到並接受這樣的一個事實,即我們可以用更少的資源構建更多的東西。也就是說,我們工作中不是那麼有價值的部分可能進行自動化,或者構建工具,讓業務人員為我們做這些工作。例如,每當我的團隊中有人想要修改自動電子郵件副本時,我就要去修改程式碼。而現在,他們只需要在視覺化編輯器中編輯模板,我甚至都不知道它們被改過了。
2、充分考慮系統的複雜性,儘量不重複造輪子,解決真正的問題而不是重複解決已解決過的問題。
其次,我們在設計系統時需要考慮到系統的複雜性。如果有現成的解決方案,那麼就用它,不要再從頭開始構建。我們要學會組裝零件,這樣就可以比那些每次在啟動專案時都要自定義構建框架的軟體工匠更高效、更快、更好。
3、降低期望值,很多時候你沒有自己想象的那麼重要,完成遠勝於完美。
第三,我們應該設定切合實際的期望。大部分編碼工作都只要求 CS 學位,而這些工作所涉及的內容可能只比知道如何匯入庫和了解 HTTP 原理多那麼一點點。不過確實有些工作需要進行微優化,但這類工作可能很少,而且離我們很遠。你的軟體可能沒有你想象的那麼特別。
4、持續學習,加強知識的廣度和深度。
最後,不要陷入了舒適區而不能自拔。這並不是軟體工程師的普遍看法,但我相信在這個領域裡,有很多人拿到的報酬已經遠遠超出了他們所從事工作的難度。有時候是因為他們是這個領域唯一知道怎麼做這些事情的人,有時候是因為他們所在的公司無法從人才市場上招到更好的人,有時候是因為其他工程師故意過度設計,這樣初級開發人員就需要花費很長時間才能理解它。無論如何,如果我們想要保持高薪和不被踢出局,就不能停止學習。加強知識的廣度和深度,並學會如何將炒作從真正的突破性技術中過濾掉。
來源:InfoQ(ID:infoqchina)