1. 程式人生 > >程式設計師怎麼升職?

程式設計師怎麼升職?

我是碼農出身,工作十年,從 初級程式猿(半年) - 專案主力(一年) - 初級技術管理(一年) - 中級技術管理(兩年) - 部門管理(兩年) - 高層管理(三年) - 職業經理人,一條路走過來,關於升職,有一些自己的心得可以分享。以下大致說說從技術到管理的轉變,暫不涉及管理的進階。

1. Love Coding 熱愛程式設計 大四開始找工作的時候,我正在上一門視覺化程式設計的課,大概就是用VC編寫出可以繪圖、簡單動畫和播放多媒體檔案等各種操作的程式。基於這門課,我編寫了貪吃蛇、俄羅斯方塊等各種遊戲。另外的一段程式設計經歷是大二時候的Java大作業,編了一個很弱的圖片管理器。實際上,這些程式都非常弱智,那時候的我演算法極差,程式碼規範性極差,甚至於對SDK或庫函式的掌握也極差,是個地地道道的菜鳥,但這並不妨礙我喜歡程式設計。我發現,當我坐在電腦前敲程式碼,或者對著千瘡百孔的程式不斷除錯,打斷點,加入除錯程式碼,單步執行檢視記憶體變化的時候,我是樂在其中的,甚至於忘了時間。所以,面臨工作方向選擇的時候,我毫不猶豫選了coding。

於是,當07年我在缺少指導,對Linux不甚瞭解,對路由器也一知半解的情況下,開始開發國內廠商的第一代11N路由器的時候,傾注了大量的精力閱讀《LDD3》,搞定交換晶片驅動;大段大段的啃Linux Kernel原始碼,搞定netfilter/iptables;閱讀《UNIX環境高階程式設計》,搞定各種同步互斥程序執行緒;閱讀網上的各種技術部落格,包括把競爭對手的GPL程式碼Down下來仔細閱讀。。。一年裡加班無數,五一十一也都是在加班中度過,一年下來基本上搞定了領導交給我的艱難任務。然後又用一兩個月的時間,把產品上市後爆出來的各種Bug一一解決,最終贏回了市場口碑。

如果沒有這種熱愛,你就無法在日復一日的coding中保持專注,更不用說脫穎而出。

任何成功背後,都有不為人知的苦悶和寂寞。程式猿的苦逼之處,就在於別人高談闊論指點江山的時候,別人推杯換盞觥籌交錯的時候,別人出差南北縱橫內外的時候,別人利用工作之便撩妹泡妞啪啪啪的時候,你只有面對螢幕,把鍵盤敲的啪啪啪。如果你忍受不了這種寂寞,體會不到其中的樂趣,請儘早換行。程式猿的高潮,來自於螢幕上排版良好的指令,按照你的意志精確執行,並且分毫不差。

/* 10.8 更新 */2. Know yourself 貴有自知之明,瞭解自己 自知之明這個詞,說的容易,做起來特別難。但又特別重要。

以前我團隊裡有個小夥,非常非常內向,話沒說幾句就臉紅,後來程式猿不幹了要去做展會,學跟人打交道,說是要挑戰自己。我不知道他後來怎麼樣,估計結果不太好。人的性格在十幾歲的時候基本就定性了,二十幾歲的人再想徹底改變自己,極難,有這個毅力,估計什麼都能做好了。

扯遠了。這一條最想說的是,弄清楚你到底適不適合幹程式猿這一行,我多年的經驗總結下來,優秀的程式猿都有如下的性格特質(或部分):細心嚴謹、細節強迫症、完美主義、做事情有條理、耐得住寂寞、喜歡跟機器跟程式碼打交道(相比跟人打交道)、口才一般不佳、容易偏激或鑽牛角尖、人情世故方面稍顯笨拙。與之相對的是銷售:口才極佳滔滔不絕、擅長跟人打交道、為人處世圓滑、八面玲瓏、說話虛虛實實、為達目的不擇手段。所以,適合什麼樣的職業方向是有章可循的。

仔細想想自己是什麼樣的人,結合上一條,有沒有一顆熱愛coding的心,你就能知道自己到底適不適合這一行。

自知之明還體現在,幹這一行的過程中,詳細瞭解自己的各項技能的長短,揚長補短。程式猿不是簡單會敲程式碼就行,構思、設計、編碼、測試、除錯,往往編碼只佔很小的比例。而且程式猿這一行範圍又極廣,底層驅動、作業系統、協議棧、前端、伺服器、APP、資料庫、大資料、分散式、系統整合。。。。。。怎麼選擇,怎樣能夠發揮優勢,真的應該好好想想。

這一條展開來說,可以講一天,具體也可以參照我在其他問題下面的回答。職業生涯規劃裡面,知己知彼是非常非常重要的,知己,即是瞭解自我的個性、特點、優劣勢、需求;知彼,即是瞭解行業、企業、團隊、職位的情況和要求。 /* End */

3. Be reliable 可靠,說到做到,做好本職作為程式猿,最基本要求是:程式碼可讀性好、功能正常沒有明顯bug。

但我見過太多這行裡的毛頭小夥,數字常量到處埋,函式命名用拼音,if else 十層八層巢狀,匈牙利命名法和Linux命名法混雜,程式碼像擠在一張皺了的紙上,零註釋或寫完程式碼補註釋,異常處理缺失,還有基本功能一用就崩潰,還辯解說,在我那裡是好的呀。遇到這一類人,通常我在心裡先給打個D等(ABCD),日後恐難以翻身。

還有稍微進階一點的毛病,說這個功能包我身上沒問題,又或者一週之內絕對給你搞定,領導你放心。最後拿出來的程式碼不是錯漏百出,就是規定時間根本完不成,而且到deadline前你詢問他的時候才告訴你搞不定。。。專案組裡有這樣的人,要麼得配一個給他擦屁股的,要麼得配一個專案助理時刻監督他,換一句話說,他的貢獻值其實為負。

程式猿要想進階,其實什麼設計模式、架構、高深演算法、莫測技術都不重要,這些都只是術,或者說套路。最核心的應該是,把簡單的任務完成好,之後再完成更難一點的任務,這樣你就慢慢進階了。為了自己的承諾和專案組整體的進度,有的時候,你需要在保證質量的基礎上,拼命加班,不負所托。

再補充一點,可靠並不是說絕不出錯,是人都會犯錯。但你不能重複犯錯,相同的錯誤出現兩次,會嚴重影響別人對你的信心。

4. Work hardest 以絕大多數程式猿的努力程度,還輪不到拼天賦 這一點可能會有爭議,也會有很多程式猿跳出來說,老子996都不止,一週工作80個小時都有了。並不否認,很多行業裡的程式猿,以網際網路尤甚,加班是很誇張的。但我想表達的是,你要做你們團隊裡最努力的那個人,別人工作80個小時,你就工作90個小時。你以為所有爬上去的人都是領導親戚或是被潛規則?別傻了,如果大家資質差不多,一定是最努力的那個人首先得到機會。領導又不傻,馬群裡挑一匹跑的最快挑的最重的來帶頭,肯定會有示範效應,也容易服眾。當然,健康是自己的,如何保持足夠的休息和鍛鍊是你必須認真考慮的問題,不是你領導考慮的問題。另外,如果真的資質相差太大,省點力氣,排隊等機會吧,不行就換行。程式猿這一行裡,最牛逼和最平庸之間的生產效率之比大致是50:1。

/* 10.6 更新 */ 果然這一點引起了極大的爭議。補充一些說明吧,對我來說加班最誇張的一段時間是八點半上班,除去午休一個半小時,晚上十一點下班,差不多持續一個月。我從來都不認同不眠不休的持續高強度加班,所謂的彈性工作制其實是最坑人的,每天工作到夜裡一兩點然後第二天十點十一點去上班?有意義嗎?十二點準時睡覺,第二天八九點準時去上班,想掛掉都沒那麼容易。這一點很感激前東家死板的考勤制度。

另外,在我的職業生涯裡,從來都是提倡快樂工作快樂生活,我所帶的部門,籃球羽毛球健身水平都是公司頂尖。最忙的時候我一樣一週打球兩三次。可現實中一有空不用加班依然打遊戲看片呆坐電腦前熬夜的程式猿不在少數。不要為自己不健康和頹廢的作息找藉口。真正牛逼的人,懂得人生是馬拉松而不是百米衝刺的道理。

另外的另外,真的加班到力不從心快要掛了還無法出人頭地,換工作吧,不行就換行。你的負能量和頹廢氣息三個街區外賣烤紅薯的大媽都聞得出來。

另外的另外的另外,剛看到春雨醫生CEO去世的訊息,非常震驚,相比升職,好好活著更為重要,生者共勉。 /* End */

5. Do the simple things right 再簡單的事情都要做好,注重細節 你review過的程式碼裡最低階的錯誤是什麼?我遇到很多很多,“==”寫成“=”、三個引數只傳了倆、“1 <= month && month <= 12” 寫成“0 < month && month < 12”、不判斷返回值就直接下一步呼叫,太多太多。

寫郵件的時候,很多人直接把話都寫在標題,內容為空;也有標題空著的,或者叫“經理你好”;或者郵件字型時大時小,一會黑一會藍,看的人時刻有驚喜。

寫文件的時候,busy寫成 buzy,該換行分段偏不,該用流程圖說明的偏要用文字,好不容易畫個流程圖,方框裡一會是實體一會是操作,箭頭各種亂指,你寫得出來,別人可看不下去。

這類人,你是老闆,你敢提拔他當主管?

再舉一個正面的例子,我的團隊裡曾經缺乏一個專案助理,不得已選了一個程式猿小夥,讓他兼職管管樣機、發發通知,小夥沒有怨言,除了自己的程式碼照常寫的非常穩妥之外,兢兢業業做好這些小事。後來沒多久他就當上了主管。一個有能力把小事做到極致的人,也必定有潛力把大事做好。

6. Be open-minded, don't be defensive 心態開放,接受他人意見,別人批評建議的時候不要習慣性辯解和說不 以前我的團隊裡有幾個同一屆畢業的優秀小夥,其中兩人,就叫A和B吧。以程式設計水平、技術廣度來衡量,A要更勝一籌,當然B也是傑出的程式猿。按理說,先得到晉升的應該是A,實際上,B很快就連升兩級,再後來就帶一個大型的團隊了,而A始終是最基層的主管。

為什麼?我舉一些實際的例子。

作為年輕人,免不了有做的不足的地方,通常我都會面對面跟他們具體指出來,B通常會說:“收到,以後我一定注意”、“我不是很明白,能否給我一些具體事例,或者再給我解釋一下。。。好的我明白了”、“我的理解是這樣的不知道對不對。。。好的知道了”。然後在接下來的一個季度裡,你很快就能看到他迅速改進,原來的弱項變成了他的強項。

而A呢?他會說“不是吧,我覺得不是這樣的”、“這些道理雖然對,但是有點要求過高吧”,而往後,你所希望看到的變化還是沒有發生,或者收效甚微。

當你的領導,願意明確對你提出指導,不管是耐心的說教還是嚴厲的批評,你都應該抱著“有則改之無則加勉”的心態,即使要反駁,也要準備充分的理由和依據。面對領導的意見,要弄清楚其準確意圖,然後實施針對性的改進措施。這就是團隊裡的遊戲規則和生存之道。即使不是領導,是平級和下屬,也應該採用類似的心態和應對方法。

7. Be logical. 有很好的條理,想事情做事情有邏輯 很多程式猿,表達的時候通常是“我認為”、“我覺得”,或者說“聽我的,只要這樣這樣,就能怎樣怎樣”但是一旦你追問其結論的依據,或者推導過程時,他又拿不出來。又或者,只知道埋頭苦幹,壓根不管方向對錯,輕重緩急。

程式猿是100%純正的腦力工作者,但很多人卻把自己變成體力工作者,自嘲自己身處勞動密集型產業,有的人甚至以日產出幾千行程式碼為傲。這無疑是自廢武功,自己把自己往“碼農”的“農”字上推。定位問題,分析問題,解決問題,貫穿其中的都突出一個“邏輯”。無論是寫設計文件、編寫程式碼、測試,還是產品功能、使用者需求、互動設計,概莫能外。先思考,謀定而後動,思考的過程,也就是找出因果關係,找出1234條論據以支援論點,找出step1 step2 step3 直至結果的推導步驟的過程。

當你有良好的條理性,有嚴謹的邏輯,也許憑直覺也能做出正確的判斷。但時刻別忘了這一點。

8. Be thankful 懂得感恩 什麼是感恩?就是對指導、幫助、提攜乃至批評過你的人的一種由衷的感激之情,懂得感恩的人都是善良的,善良且努力的人運氣都不會太差(哈哈,仿爛雞湯體)。只要你懂得感恩,甚至無需你做太多,只需要適時的表達,對方就能感受到你是孺子可教的,他就會覺得他的付出沒有白費,而不是面對一個木頭人或白眼狼。

同樣還是上文的B童鞋,在我帶過的幾百人中間,他是最懂得感恩的一位。甚至於你在批評他的時候,他都會承認錯誤並感激你對他的指導。這樣的人才,當他也拿出實實在在的業績的時候,你怎能不提拔他?

而作為對比,有太多的人,你曾經無數次的幫助過他,無論工作上還是生活中,但從未聽到他的一句感謝。這樣的人,只能呵呵以對。

9. Think beyond technology 不要只會純技術化思維10. Understand your products and users 理解你的產品和使用者 很多程式猿,痴迷於修煉技術,常常會在一個簡單功能模組裡面運用某某高深的演算法和莫測的技術,純粹為了炫技,而不去考慮是否過度優化,是否使用者並不需要這麼複雜的功能,是否投入產出比並不合理。無視使用者、產品和市場規律的思考方式,就是純技術化思維。

典型的一個案例是,(可能是處女座程式猿),所有的Bug都必須解完才可以釋出版本,不管是不是犄角旮旯或耗時很久的。我在工作的第二年,我的領導跟我說了一個概念“Time to market”,讓我意識到,你最關注的問題,或許並不是使用者最關注的問題。你要做的,是應該快速把產品釋出,再去傾聽使用者的呼聲,可能100萬用戶裡,都不會有人關注你花了幾周時間死磕的問題,但他們會爆出更多更重要更迫切的問題。

你要時刻關注你的產品,關注你的使用者,從電商的網評,從售後的熱線,從論壇的帖子,從行業外的朋友,獲取他們對於你產品的第一手的評價。一個好的程式猿,也應該是一個好的產品經理。否則你就是一個缺乏大腦的泥瓦匠,而不是一個建築師。

作為一個程式猿的leader,你是要代表團隊去跟產品經理撕逼的,如果你不懂產品,那麼你的團隊也就完了。

11. Have good communication skills 良好溝通 做一個牛逼的程式猿,其實可以不用怎麼講話,用牛逼的程式碼和執行結果去碾壓別人即可。但如果你想做程式猿的leader,還繼續保持這麼高冷的姿態可不行。溝通無疑是管理的基礎,一個程式猿想升職,想做管理,必然需要證明自己擁有不錯的溝通能力。跟高層領導要資源,跟產品經理撕逼,跟測試部門搞好關係,跟設計妹子開開玩笑,跟程式猿搞基,不會溝通顯然是不行的,最好是亦莊亦諧,葷素兼備。

這裡不展開講如何擁有良好的溝通技巧。只說幾點:1. 溝通的意願最重要,只要你願意主動溝通,事情總會向好的方面發展。2. 溝通要真誠,不要套路。3. 口才不行,你可以多用寫,寫還有個好處就是留有證據,方便以後撕逼。

12. Take responsibility 承擔責任 常在河邊走,哪有不溼鞋。程式碼寫多了,挖坑是必然的。面對爆出來的Bug,面對領導的責備,沒什麼好說的,自己惹的,自己clean up。

放更長遠來看,誰都會出錯,不管你是程式猿,還是程式猿的leader,甚至是高管,總會被爆出問題。這時候是各種藉口推諉,還是大大方方承認,並且用最快的速度處理乾淨?我認為正確的處理方式是後者,這不單單是能力問題,更多的是人品問題。

當你有朝一日當了leader,你手下犯了事,你也得大大方方站出來“我把關不嚴,責任我擔”,絕不是把手下推出去了事(放你身上可能是小事,放他身上可能就得開除了),回過頭再關起門內部處理。只有這樣,你的手下才會服你,才會有人為你拼命幹活。

最後,做不好管理就做純技術,做資深專家、技術大拿也挺好,不要強扭。

/* 10.8 更新 */ 第一次得到2K贊是始料未及的,有小小的驚喜。但也驗證了那句話“林子大了,什麼鳥都有”,許多負面的評論就冒出來了,有些我接受了,有些沒忍住撕了一陣,有些看的我直樂。但始終沒有被這些評論所煩擾,這是自己一年來最大的收穫了。

質疑1:答主沒提他是xx大學畢業的所以升職快? 李開復哥大畢業,所以他的事業成功理所當然?拜託,哥大也是他考上的好嗎,還不是回溯到他本身的努力和聰明。再者,這質疑的潛臺詞就是,xx畢業的才有可能升職這麼快,不適用於其他人,大家散了吧。

以前也有類似的說法,背景論、陰謀論:比爾蓋茨的母親是IBM高管,巴菲特的父親是國會議員,所以他們的成功無非就是靠背景,不過爾爾。可是企業高管的孩子,政府官員的娃,清華北大畢業生何止千萬人,難道最終都是那麼成功嗎,為何比爾蓋茨和巴菲特僅此一個?如果我們把別人的成功都歸結於他所擁有的先天優勢,忽略他們的聰明才智、開拓精神和巨大努力,這是在為甘於平庸和墮落找藉口。請參考:

實際上,所謂的成功學/成功經驗的最大問題就是每個人的經歷都是無法複製的。照著這些成功的經驗去做,並不能保證你就一定飛黃騰達。更有人在評論裡跟我糾結努力是不是成功的充分條件。用一句說爛了的話來講“努力不一定能成功,但不努力一定不能成功”,明明說的是必要條件,硬要說我講的是充分條件。有誰敢說找到了成功的充分條件,且具有可操作性?那成功都可以流水線批量生產了。當然這裡有個目標定義的問題,什麼是成功?升職加薪就是成功?不一定,每個人的目標都不一樣,有的人還覺得過安逸的日子就是成功,這裡就不贅言了。

質疑2:反對加班反對加班反對加班!升職加薪有那麼重要,命都不要了? 反對有效。我跟你一樣反對,所謂的996、80小時、90小時,真的只是打比方。熬夜真的不好,12點前睡覺對程式猿來說真的太重要。早睡早起,堅持鍛鍊,這是程式猿必須牢記的,這十年裡我慶幸自己一直堅持在打球,從未放棄。

但是!我們可以在不熬夜、儘量不傷害身體的情況之下比別人更加努力,別人打遊戲,看電影,看網路小說的時間,你可以用來看書、編碼和參加技術交流,然後按時睡覺。笨鳥先飛、天道酬勤,這難道不應該是絕大多數非清華北大學生,絕大多數自認為起點不高的人,絕大多數沒有背景的人,應該相信和堅持的價值觀嗎?

質疑3:天賦比努力更重要,沒有天賦不要幹程式猿這一行。 我想舉NBA的兩個頂級球員來作為例子,麥迪和科比。天賦來看,麥迪天賦大大超過科比(臂展身高彈跳手掌大小),從努力程度來看,顯然科比大大超過麥迪,最後誰的成就更高?當然你又可以扯隊友、運氣、傷病,等等。所以成功從來都不會有一個確定的公式,每個變數的權重大小早已明確,這是不可能的。詹姆斯、奧尼爾的成就裡面天賦起很大作用,科比、AI、斯托克頓、納什、庫裡更多的是靠勤奮的訓練。

但最直接的反擊是,給定一個人,他能不斷提升自己的天賦嗎?顯然不能。要麼努力,要麼換行。糾結於那些我們無法改變的事情上面是沒有意義的。雞湯有云:努力改變那些我們能夠改變的,接受那些無法改變的。我經常告誡自己:要麼忍,要麼狠,要麼滾。

天賦決定了你的上限,勤奮決定了你的下限。你的上限可能比別人低,但你還是可以不斷提升自己。

質疑4:你這是資本家的嘴臉,給大家洗腦,讓大家做無腦員工,只知道埋頭苦幹被剝削。 我的回答是:哈哈哈哈,真樂。被害妄想症,不要放棄治療。雞湯有毒你別喝就是。 /* End */

歡迎大家加入Java高階架構/網際網路:570210627 本群提供免費的學習指導 架構資料 以及免費的解答 不懂得問題都可以在本群提出來 還會有職業生涯規劃以及面試指導 進群修改群備註:開發年限-地區-經驗 方便架構師解答問題