技術人員在大公司能學到什么

jopen 9年前發布 | 11K 次閱讀 技術人員
 

我在小公司待過、也在大公司待過、還作為小公司的咨詢顧問在大公司待過很長一段時間,目前還在大公司待。對于個人成長,大公司能給你哪些小公司很難給的機會?這是本文想討論的主題。

技術人員在大公司要面對的問題

個人成長,方法大致是兩種,第一是主動學,現在互聯網這么開放,IT行業中的知識,只要你想學,幾乎沒有找不到的資料。基本上,稍微靠譜點的技 術人才,都具備主動學習的素質,然而這種學習方式,無論是看書、讀博客、上在線課程…… 都有個非常明顯的缺點,就是缺乏對問題的直觀體驗,幾年前我看《Java Concurrency In Practice》,囫圇吞棗,表面上懂了,實際上壓根沒理解。近期當我面對一個比較典型的并發問題的時候,再翻出那本書,忍不住一口氣讀了幾十頁,因為 實在是太對胃口了!所以第二種學習方法往往更為重要,那就是:面對問題,解決問題,這是一種基于體驗的成長,比基于純理性的記憶理解,深刻得多。

所以, 有哪些問題,大公司需要面對?小公司不需要面對? 我總結下基本是三個問題:

  1. 大公司服務的用戶數量級相比小公司不在一個層次。
  2. 大公司需要考慮如何保持數百數千程序員高效工作。
  3. 大公司處理的業務往往非常之復雜。

當然上述幾點并不總是正確的,比如現在會有一些小公司服務千萬級別的用戶,也需要面臨類似的技術問題。但大體上就是這些問題,大公司必要面對,小公司在早期是不需要面對的。

上述三個問題實際上是 Scalability 的問題,具體我推薦大家看 《The Art of Scalability》 的詳細闡述。解決上述三個問題,需要技術人員具備怎樣的能力?

三個問題要求你學什么?

第一個問題,如果面對百萬級、千萬級的用戶,是被大家討論最多的,具體的技術會涉及到:無狀態應用、負載均衡、分布式緩存、分布式隊列、高性能 Web服務器、數據分庫分表…… 在大公司,也許根本輪不到你去開發分布式緩存,但只要你留點心,就能很快理解在什么情況下該用分布式緩存,它能帶來多少性能提升,命中率還有多少提升空 間,等等。這一塊,是大家面試的時候比較喜歡問題的,沒做過的,都覺得很酷很牛逼的樣子,經歷過了,感覺其實也就那樣,關鍵是你遇到問題了,并且用這些技 術解決了。

第二個問題,如何管理數百人的研發部門,更多的是被很多純管理職位的經理在討論。普通程序員,面對由于跨團隊跨部門溝通所帶來的消耗,10個程 序員估計會有11個罵娘;然而問題始終是客觀存在的,我現在的日常工作一直遇到類似的問題,我也問過 非死book 的工程師,人家也坦然承認,較之與 非死book 早期,他們現在研發的效率也的確慢了很多。

保持自己工作高效,并不是個特別困難的問題;保持2-3人小團隊工作高效,也不難,只要大家志趣相投、目標一致基本就可以了;10人左右的團 隊,就需要聰明的管理者花許多時間去理解大家的想法并協調。當然,愚蠢的管理者只會開一大堆無意義的會,刷點存在感,傳達點上面給的壓力。團隊規模再擴 大,帶領上百人團隊的中層管理者,他就需要去幫助一線管理者了,這個超出我的經驗了。我想說的是,管理也是技術,不比編程更難,但也不見得比編程簡單。

除了管理能力外,保持大規模團隊的研發效率,還需要規范和工具支撐。使用一致的基礎設施(如版本控制、測試環境、發布流程、溝通協議),規范化 大家的代碼組織結構,抽取共有的技術服務,防止重復造輪子…… 這些都是非常具體、非常現實的技術問題。小公司幾萬行的代碼做整體技術升級,找個牛逼的程序員就能搞定了,大公司幾十萬、幾百萬的代碼做技術升級,沒有任 何一個英雄主義程序員能搞定,解決這類問題需要有前瞻性的架構,需要有善于溝通的架構師。雖然過程中難免會需要和人扯皮開會,但做好了也是極富有成就感的 事情。

第三個問題,在大公司要面對更大的業務復雜度。也許是大公司產品經理太多了,大家都想折騰點東西出來,所以各種功能特性不停加不停變。這時候技術人員就不 得不去理解各種業務的含義,我們都知道,如果實現和業務意義不吻合,最終的代碼就會變成一個無人可維護的怪胎,因此優秀的技術人員就能很好識別業務邊界, 把小怪獸關在各自的籠子里,防止他們聚在一起搞得天翻地覆。再優秀的技術人員,就能說服產品經理,“這么干是不對的”。這方面我推薦 《Domain Driven Design》

大公司的普遍弊端

我并不是說任何一個大公司的程序員都會去面對上面三個問題,事實上剛入職的新人程序員一般只會處理很小業務范圍內的沒有太大挑戰的任務。不過只 要你有興趣并持續提高自己能力,還是有很大機會去面對并處理這些問題的,因為公司的管理者終究是期望有人站出來幫他們排憂解難的。不過大公司或多或少都有 一些普遍的問題。

首先是 人浮于事、文山會海 。有很多人不停開會、不停寫郵件,就是不干活,搞的你也沒好心情干活。吐槽歸吐槽,我還是會仔細想想為什么這樣。首先,溝通是必要的,兩三個人干活打個招 呼就行了,十多人干活就需要開會,事情多了,會也自然多,再加上很多人其實沒有基本的主持會議技能,那很容易搞成垃圾會議。其次,公司大了自然會有一些兵 油子,每句話說出來都大方得體,但就沒見他把事情落地,更別提自己挽起袖子干了,比較麻煩的是這些人普遍層級還相對高點。我能做的,就是離他們遠點。

其次是 目光狹隘 。如果一個程序員剛畢業就來到大公司,而且恰好這幾年這家大公司業務和技術突飛猛進,那他的眼光就容易受限,覺得自己的公司全國甚至全世界最牛逼,再加上 我們中國人普遍存在的報喜不報憂文化,他的這種盲目就更容易被環境所固化了。于是一不小心,一些人的技術視野就變得很窄,我在內部推廣Git的時候,持疑 惑最大的也就是一些工作年限較長的資深工程師。

還有,我個人比較頭大的是, 目標不一致 。跨團隊、跨部門溝通的時候,你很容易發現自己在雞同鴨講。可能團隊A關心技術架構,團隊B關心業務指標,然后你上升一層,在部門層面做個決策先做什么后 做什么。一會你又發現,部門A關心業務指標、部門B關心基礎建設,你又得上升一層,可那一層離你好遠…… 所以你會發現很多大公司很多人做事很大程度上是在靠個人影響力,而不是正規的流程。如果我曾經做過些成功的事情,我平時對大家也比較熱心,那我做一些事情 的時候,一些人會把自己的目標暫時放一邊,來幫你一把,這就是俗稱的“刷臉”。

總結

總結之前,有一點我要額外提一下,大公司畢竟是藏龍臥虎的地方,各個領域都有比較資深的人存在,如果公司文化鼓勵分享,那你就很容易找機會請人家喝杯咖啡,聊聊。

做任何選擇,如果你不考慮失去什么,只考慮得到什么,那就是典型的幼稚。因此選擇大公司還是小公司,你不僅得明白你期望收獲什么,還得坦然面對要失去的東西。

我說這么多,基本就是告訴你,有些東西你肯定會失去,還有一些東西,如果你努力,你可能會得到。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!