1. 程式人生 > >從碼農到工程師:只要做到這6點

從碼農到工程師:只要做到這6點

許多程式設計師自稱碼農,因為每天事情總也做不完,而這些工作也沒有給自己帶來職業上的提升,總在原地打轉,自己的工作似乎隨時可被新人替換,可有可無。於是,年輕些的考慮著轉管理或者轉行,年紀大些的則被所謂的40歲危機困擾焦慮著。另一方面,有些程式設計師工作高效,能力出眾,每當機會來臨時總能獲得職位上升,收入迅速的提高,個人價值的提升又從精神上給自己帶來滿足感,常常鬥志昂揚,而這樣能解決複雜問題的程式設計師才叫工程師。本文中筆者將根據自己10多年從業經歷談談如何從碼農升級到工程師。

事實上,網際網路行業的專案需求從來不是靜態的,專案是動態的、永遠在不停迭代,所以即使你能力再好效率再高,也不可能讓你處在空檔期,所以,相比其他行業程式設計師們總是很容易處於忙忙碌碌的狀態中。另一方面,專案裡哪怕沒有新功能了程式設計師自身也有很大的慾望去優化、重構程式碼,還是忙忙碌碌。但是,到底客戶的問題、行業的痛點有沒有真正解決

?專案給公司帶來多少收益?我手頭的工作對公司下一步的發展有何意義?這些通常不在程式設計師們的思考範圍:這與我何干?我是專業寫程式碼的,這些應該由老闆、產品經理、運營、銷售、其他業務部門去考慮,我只需要精益求精把程式碼寫好寫穩定就可以了,我預留了許多擴充套件介面,到時公司需要的話去擴充套件模組就行了,我何必要知道與我工作無關的事?這個想法其實是讓許多程式設計師始終停留在碼農階段,與那些卓越的工程師同等辛苦,但待遇層次總是相差甚遠的罪魁禍首。

吳軍老師在《見識》一書中把工程師定義為5個等級,相鄰的等級間會有10倍的差距,而第五級工程師以下其實就是碼農。

實際上,能夠到達第五級,就已經從碼農提升為工程師了。比如,現在有一個任務需要實現一個功能子系統,一個第五級工程師能夠與產品經理深入挖掘需求及其到底是否解決了問題,能夠用演算法建模解決現實中的問題,能夠獨立跨部門溝通獲取所需的資源及協調其他工程師的幫助,能夠正確的使用各種開源元件保質保量不重複造輪子,能夠解決開發過程中出現的各種坑,按時交付出高質量的產品,這才是一個合格的第五級工程師

了。碼農離第五級工程師到底有多遠呢?大家可以觀察下身周,碼農往往溝通技巧欠缺,不願深入理解需求的意義,不願深入研究某個技術或者框架的意義,或者只是深入研究某些語法糖卻不考慮維護代價,喜歡造輪子,只要接手別人的工作先不願精讀程式碼而是想著按自己最熟悉的方式重構,做到一半時各種困難下開始退縮求助,於是交付時不斷的延期再延期。。。

成為一個合格的第五級工程師,需要哪些條件呢?

1、要有慾望成為高階工程師!無欲則剛,如果內心就不大想成為一個高階工程師,那麼肯定不願付出更多的努力,肯定不會主動的加班,也不會在不加班的時候腦袋裡還在想著問題和專案上的事,而加班或者正常上班時敷衍的時間比例很高。從低一級邁向高一級時,若不願意付出比同級人更多的努力,又談何升級呢?在任何領域,努力一定是成功的必要條件。

2、懂得做減法的學問。

事務性的工作總是非常多的,同時也會接到很多需求功能以及測試提交的bug,還有興趣愛好呢?!很多想看的演唱會、連續劇、電影等著你,還有許多朋友聚會應酬要參加,還有朋友圈要刷刷,微博大V們的文章要讀讀,股票要炒炒,理財要學學,遊戲要玩玩,所以,忙忙碌碌裡職業技能沒有得到一點增長。

或者你效率奇高,但你要做的事太多了,效率不等於效能,效能是指完成的事情*事情的意義。事情要做到100%完成,而且必須是重要的事。既然你想成為高階工程師,那麼請把不重要的事從你一天的計劃中移除吧。就像上圖中吳軍老師所說的,每升級到下一級,你的收入都將呈現10倍上漲的趨勢,這收益遠遠大於你去做自己並不擅長的炒股所獲取的收益(長期來看)。而所謂的應酬、各類資訊、個人愛好,並不是只要清楚的認識到自己想要什麼就能夠正確的做減法,這需要你的認知升級。

而在leader分配下來的任務裡,也需要你準確的判斷出優先順序,一定要先把最重要的事百分百的完成。這需要你與leader間密切溝通,因為技術管理者所掌握的資訊量遠大於你,而且資訊在時刻變化著,他那裡的資訊及時度也超過你,唯有從你的上級那裡才能快速的瞭解到工作的優先順序。這也需要與產品經理、上下游部門間密切溝通,這樣你才能準確的瞭解到你的工作對別人的意義,這也有助於你判斷優先順序。

總之,做減法是一門學問。

3、有效的做到10000小時定律。一萬小時定律是作家格拉德威爾在《異類》一書中指出的定律。“人們眼中的天才之所以卓越非凡,並非天資超人一等,而是付出了持續不斷的努力。1萬小時的錘鍊是任何人從平凡變成世界級大師的必要條件。”他將此稱為“一萬小時定律”。要成為某個領域的專家,需要10000小時,按比例計算就是:如果每天工作八個小時,一週工作五天,那麼成為一個領域的專家至少需要五年。這就是一萬小時定律。

顯然,並不是任何人在一個領域工作五年就能成為大師的。有效的做到這一萬小時的關鍵是,這一次的努力請最大程度的複用上一次努力的結果!例如當下許多網際網路從業者一年就跳槽一次,先不談是不是應該跳槽(如果只是想通過跳槽漲薪,而不是原公司沒有新的位置帶給自己職業發展,那就有問題了),首先你能感覺到跳槽之後是在最大程度的複用上一家公司裡自己的努力嗎?如果一切是在從頭開始,包括新的開發工具、新的技術棧、新的業務場景、新的產業鏈、新的合作關係、新的同事圈子等,那麼很顯然十萬小時也不夠成為專家的。

或者從另一個角度,有些人經常換工具、框架、程式語言,如果你能夠在學新技術時,始終感覺到與自己熟悉的技術一一對應,基於此能夠輕易的舉一反三,那麼這就是在高效的複用上一次的努力。反之,或者你上一個技術還學得不到家,換了新技術後很難敏感的發現共通性,這就很糟糕。

4、抓住關鍵節點。當我們手頭有許多小功能,或者與許多團隊有互動時,往往經常被開會、被溝通,事情也又雜又多。此時,務必把手頭上的事在分好優先順序的基礎上,確認每件工作的幾個關鍵節點:完成時間點,中期交付或者需要他人交付產品、文件給你的時間點,需要協調其他人啟動的時間點等等。抓住了這些時間點,往往一頭亂麻的事就自然理清了。當我們的時間非常碎片化時,一定要盡力抽出大塊整塊的時間,這能讓我們有時間思考,而且減少了任務切換的成本,而這依賴於很好的抓住關鍵節點。

5、常識的重要性。一個有志向的農民和一個航空航天專業的畢業生都在做飛機,其最大的不同在於常識。對於不同的程式設計師來說,常識並不相同。我有一些同事本不是計算機專業,有些還是先做了幾年其他行業再轉過來做前端程式設計師。這樣,如演算法複雜度、網路模型等電腦科學體系裡的基礎知識對於他們就不再是常識,而常識通常是將事情做到50%程度的關鍵。常識的缺失會導致與同級程式設計師相比做事情事倍功半,這從長期來看一定會讓你早早的觸及職業天花板,而補足常識的缺失相較起來還是比較容易的(畢竟這本不是什麼尖端知識),但許多人長年不願在此下功夫。

6、有後勁兒。有些人工作年限越久,競爭力越強,職業上升空間很大,反例其實更多,而這種有無“後勁”在我看來其實關鍵在於有沒有科學的職場做事方法。比如習慣做乙方的外包程式設計師,轉到甲方開始做產品時,還是習慣於把產品當成別人家的孩子,缺乏一種主人翁的精神,而在任何公司做任何產品,如果沒有一種把自己的產品當孩子的感覺,就很容易向其他人表現出喜歡推諉、不肯擔責任的特點,而缺乏主動精神往往導致專案前期準備工作不足,後期疲於奔命。沒有主人翁精神,往往對整個研發鏈條自己這塊以外的部分不願意瞭解,這樣沒有辦法管理好你的上游和下游,最終導致自己的工作困難重重,難出成績。

對自己的產品有主人翁精神,會讓自己保有一種使命感,進而相對更敬業、更有激情,而這對團隊是有正向激勵作用的。而且,有這種精神後,往往會想辦法把工作流程標準化,把知識分享給團隊同事以提升團隊的作戰能力,進而讓產品更優秀。自己的工作有一點提升,與同時帶動其他同事有一點提升,這是有量級差別的。當有晉升機會時,主管們自然更偏愛把機會給這樣的同事。

結語:職業發展的天花板在哪?許多人說是需要認知升級,但這太抽象了。在我看來,能做到以上6點,從碼農上升為優秀的工程師(在所有網際網路公司都極受歡迎)並不在話下。