我特別喜歡《知道創宇研發技能表》中的一句話:“我們需要對得起名片上的那個頭銜:工程師、研究員”。究竟怎樣算是對得起工程師這個頭銜,這篇文章解釋的很到位。
本文作者是優才學院CEO,也是我學習《Web全棧工程師課程》的主講老師。
12條標準界定優秀的開發工程師
作者:伍星,查看原文
工作這些年來,直接帶過了數百名工程師,不小一部分的工程師到今天成長成為知名公司的技術總監、架構師和創業公司的CTO,從這些同事和朋友的身上,看到了一名名優秀的技術工程師所需要具備的特質。正好有一次在美團的 JD 中,發現了如下內容,深表認同,于是經過改造總結出了以下 12 點優秀工程師的標準。
這 12 點標準盡管在其他地方也分享過,不過通過文章詳細展開來分析還是第一次。
1、熱愛、迷戀技術,不搞復雜的人際關系,相信技術改變世界
優秀工程師是將工作和興趣結合起來的,所以會迷戀對技術了解和學習,為了解決一個實驗中的問題,可以從早上7點鐘開工,干到晚上12點不挪動座位,甚至有一個笑話說,即使妹子站在身后色誘,真正執著的程序員也是不為所動的。
工程師都是比較單線程和一根筋的,在公司里面也很少搞公司政治,所以只要尊重程序員的技術之后,就跟程序員很容易相處,所以研發團隊也沒有復雜的人際關系,而當工程中復雜的問題出現時,程序員會想著用技術,而不是用人來解決問題。
2、對代碼質量、設計質量、工程質量有追求,追求扎實基礎學習
優秀工程師,在入行前后,要么自我學習,要么經受良師指導,有明確的規劃,從而是有追求的一批人。這種追求,包括但不限于把在實現了功能之后:
在代碼的層面,觀感上更加漂亮,可讀性更加好,邏輯結構更加清晰,效率更加優化。
在設計的層面,模塊劃分與功能版塊職責解耦,利用框架來進行代碼結構的規范,在代碼文件部署的層面進行 MVC 的分離。
在工程質量的層面,對代碼基本單元進行有效的單元測試和版塊、整體項目的集成測試。
在提升自身業務開發能力的同時,將能力全面擴展,一方面學習更多的編程語言,比如PHP可以到JS、Python、C等,另一方面學習底層和基礎,Linux底層和網絡開發,提升數據結構和算法功底。這些過程的加強,比當初入行本身的學習需要花費更長的時間,也更為艱難,但是這是進一步能力提升的必經之路。
3、痛恨不靠譜的產品經理,希望對產品有更多發言權
優秀的工程師,不僅僅是原原本本實現功能的被動執行者,從需求到實現階段,都要發揮自己的主觀能動性。包括對產品的發言權,而優秀工程師,與產品經理的關系,往往也是良好的。具體體現在以下三個方面:
不僅僅是一個被動的執行者,對于功能和需求前期會提出自己的建議和見解,盡管這種建議和見解不一定被采納,那也要積極地參與,這是一種參與思考的過程。
對于已經明確要實現的功能,要不折不扣地執行,有遇到沒有實現或者是不能實現的情況,一定要提出和說明,而不是糊弄。
任何時候與產品經進的關系 ,都是博弈和平衡的關系,所以不是產品的所有需求都可以實現或者必要全部實現,如果不能實現,就有理有據地說服,如果無必要實現,或者有更為好而不影響或者取得平衡的解決方案,也要跟產品說明清楚。
4、迷戀解決問題,最好是迷戀用技術解決問題
優秀的工程師,是一個勤奮與“懶惰”的矛盾綜合體。一方面,他勤奮地學習和練習所學到的技能或者勤奮地工作,開發產品,為了解決一個技術問題,可以不吃不喝到半夜,也可以凌晨 5 點起,折騰一天。但是一方面,他又會經常“懶惰”地想,盡可能地省事,盡可能地采用技術來解決所有的問題,達到一勞永逸的效果。比如你讓一個優秀的工程師,每天花 5 分鐘手工做一個統計分析,他會想方設法地將這件事情,讓機器自動執行,哪怕用程序去實現這個手工 5 分鐘統計分析要花掉半天的編程時間,也在所不惜。因為第一次實現花掉了半天,而在未來的很長一段時間,即使手工跑,也只需要幾秒,而用自動化運行的話,除了監控正常運行之外,真的就是一勞永逸了。
5、干一行,愛一行,希望在工作領域大展拳腳
任何工程師,都不能行業本身而存在,盡管做的是同樣的程序工作,可能是視頻行業、社交行業或者是醫療、金融、教育等行業,其實在業務上都有相當的不同。優秀的工程師,除了自身技術能力提升之外,也會積極地提升對業務的了解和業務能力,因為優秀的工程師,發展成為架構師是他重要的追求,而架構師,不成為業務專家是不可能成為優秀的架構師的。尤其在今天互聯網+和+互聯網的時代,大部分工程師,都不是在純互聯網行業就業,而是進行各種各樣的產業互聯網公司,這就更需要工程師的業務能力。所以干一行,愛一行,專一行,就一個優秀工程師的基本素養的要求。
6、在工作中具備創業精神
如果換工作,工資占據著非常重要的位置,同時在工作中,也只需完成工作中的任務,而不去多想一分,這樣的工程師是一種打工心態的工程師,是不可能成為優秀工程師的。而后者,首先選擇工作的第一要務是是不是適合自己的職業規劃和未來發展,一旦選定和投入工作,會從公司的角度,產品的角度和業務上下游的角度來實施工作,無論是身處的公司是數千上萬人的大公司,甚至是上市公司,還是剛剛初創的小公司,都需要有這樣的精神的工程師,這就是創業精神 ,而用我們小學所受教育的觀點,也就是主人翁精神。也只有這種的精神 ,我們才能期望他在獲得了工作之后,能夠深入到業務中去。
7、使用 Google 而不是中文搜索來求解技術問題
由于優秀的工程師,往往不斷地學習或者解決較為棘手的問題(能者多勞嘛),而在學習到一定程度,尤其是一些比較新的項目和技術,可能需要大量地使用英文資料,所以在這個時候,無論是求知學習,還是解決問題,英文的重要性都體現了出來。百度上可能得不到理想的結果,而在Google上,解決的方案可能精準或者多一些。(補充說明:最近一段時間發現,百度也索引了大量Stackoverflow上的內容,所以搜索一般問題的解決方案,也好了一些。另外,在Google上,搜索到好的解決方案,要依賴于對關鍵詞的選取,如果是錯誤消息的話,可以直接把消息輸入進去)。
8、迎難而上,積極查找和使用英文資料,讀英文技術書
接著上一點,要想成為優秀的工程師,能者多勞,對英文資料的掌握和使用能力也非常重要。所以對英文基礎就有了一定的要求。如果英文基礎不好,再難也要克服過去,否則,英文可能成為進一步提升發展的瓶頸。
辦法就是
先學學常用的計算機英語
著看英文技術文章
進一步看技術書
最高級的應該就是看英文論文
然后在自己工作中加以理解和應用!
9、在工作8小時之外努力鉆研技術或持續學習
由于工程師在早期的時候,要學習的內容太多,而技術更新又太快,需要解決的問題也多。所以想只在工作 8 小時之內就學習好技術,這是不可能的。我面試過追求朝 9 晚 6 的技術,也了解過有一些人,到了家就不開電腦,我可以斷定這樣的人,不可能成為優秀的工程師。真正的優秀工程師,會依據自己的職業規劃或者針對工作中的問題,在工作 8 小時之外也努力鉆研和持續學習,如果做不到這一點,我覺得這樣的人根本不具備培養價值。
我曾經帶過一名優秀的實習生,他是我當年帶來的數十名優秀的實習生的最突出的一位,當時以實習生的身份就承擔了核心產品的主程之職,我印象最深的是他每天晚上都是最晚一個走,包括大年三十晚上。這名同學果真是優秀的,后面進入了阿里,也在硅谷工作過,現在是Android開源界都比較知名的工程師。
10、具備產品思維,用戶體驗不僅是產品經理的事
產品經理設計好產品,但是畢竟,產品經理是在腦海中模擬,然后在原型中實現。真正的用戶體驗,還沒有到用戶操作的層級。所以難免會有一些考慮不足之處。一般的工程師,是按著產品的設計實現了就完了。并不在乎整個過程的好用與協調,更不說在細節上的注意了。
而優秀的工程師就會考慮到關注到這一點,在我的分享中,常舉一個例子。當初做文章的評論功能。最開始第一版就是表單提交 ,然后頁面刷新,跑到了頁首。這種感覺是非常差的,而優秀的工程師,會將其用 Ajax 實現,這樣提交完成了之后,內容自動閃現并且也不會刷走。即使不用 Ajax 技術實現,優秀的工程師,也會考慮錨點定位技術,在評論提交后,把評論的內容,閃現在用戶眼前。所以這些細節就需要關注,在實現時,需要主動提出來與產品經理商量哪種實現更好,不要認為自己不用關心,當然也最好不要自作主張。
11、工程質量不能依賴測試人員,對自己代碼負責
在程序界,有一句話是叫:“代碼被狗吃了”,這一方面是說,程序員可能不慎將版本代碼刪除,另一方面是說,程序員不敢于面對自己的錯誤,老說,這在我那是好的呀,這我明明寫的代碼,怎么沒有了?無論怎么樣,這都有推卸責任的成份在里面。另外一個現象就是,程序員寫完代碼,連基本的測試也不做,就提交 ,甚至發布上線,結果導致線上出現低級的嚴重的故障。而優秀的工程師則是相對的,代碼上線前先自己測試,上線前先一再確認,上線后更是需要確認運行的日志和結果數據。無論是前端影響到用戶的項目,還是后臺跑數據的項目都是如此。
12、工作不僅是完成領導交的任務,更要完成團隊與自身提升
雖然工作是為了掙工資,是為了完成團隊和項目中的任務,但是如果僅僅限于此,也不會是一個非常優秀的工程師。優秀的工程師,絕不會整天做著簡單重復和沒有創造性的工作,會想方設法讓簡單的工作,也變得更有意義 一些,在簡單的工作中,每天都有進步,這個進步,跟上面所說的追求一樣,對自提升有價值,甚至關于總結,對整個團隊也有價值。
以上,就是依據美團 JD 所總結的 12 點優秀工程師的標準,我個人很認可,很喜歡,也分享給廣大工程師、主管以及創業者和 CTO 們。