頂尖程式設計師不同於常人的5個區別
《The Effective Engineer》的作者在寫書的過程中,為了瞭解那些頂級程式設計師和普通程式設計師的區別,採訪了很多矽谷頂級科技公司的頂尖軟體工程師。他發現這些給世界帶來巨大影響的的工程師們至少有以下5個共同的思維模式:
1.勇於去研究你不懂的程式碼
一般人都不願意去研究自己不曾接觸過的程式碼,很多人都沒有嘗試就放棄了。如果你經常去研究你沒有接觸過的程式碼,你就會越來越熟悉不同的程式碼結構和設計模式。現在人們很容易就接觸到優秀的開原始碼資源,你可以很方便的就下載下來做一些改動或者除錯,去研究為什麼程式碼可以這麼寫。
除了程式碼之外,很多人對於陌生的工作內容也會感到恐懼。每次換工作的時候,你可能都會遇到新公司的工作內容和以前工作的內容不一樣的情況,以至於剛開始的時候工作效率沒有以前那麼高。很多人甚至覺得,他們是不是騙了面試官。
其實,大家都是在學習的過程中。在一個陌生的領域,沒有人從一開始就是大神。如果你想變得越來越好,無論是寫程式碼,與人溝通或者其它的技能,都是需要投入時間去學習的。
2.精通程式碼除錯(debug)
很多人在寫程式碼的過程中,經常會有的一個問題就是:為什麼我寫出來的程式碼不能執行?為什麼執行的結果不是我想要的?
幾乎所有的程式設計師寫程式碼都不是一遍就能寫好的。但是頂尖的程式設計師非常快的就明白自己程式碼的問題可能是什麼。這是一個很重要的能力,但是偏偏學校裡不教,面試的時候考官也不經常提及。
那麼怎麼去除錯程式碼呢?其實核心就是以下幾個方法:
不妨先猜測一下到底發生了什麼。
假設你的猜測是對的,想想你的猜測會導致程式有什麼結果。
試著觀察這些結果有沒有異常的地方。
如果你沒有發現異樣,那麼說明你的猜測就是對的。
如果你發現了異樣,那麼說明你的猜測是錯的,接下來換一個猜測試試。
對於頂尖程式設計師來說,這個過程在腦海中就是電光火石的一瞬間。只要你解決的問題足夠多,你做出來的猜測就會越準確。
至於如何發現異樣?你就需要有一套自己的工具或者方法論了。最簡單的就是在程式碼裡輸出日誌來判斷。但是這是比較笨的辦法,你需要去接觸一些高階的工具或者直接帶有Debug功能的編輯器。
3.重視能夠節約時間的工具
最近打敗人類的AlphaGo每天可以進行上百萬局的下棋訓練,我們人類一萬個小時的訓練卻需要10年之久。也就是說,電腦執行幾分鐘,可能就等於人類工作好幾年。
曾經在Facebook擔任技術總監的Bobby Johnson描述過,高效率的程式設計師都把時間花在製作工具上。
很多人也認為工具是很重要的,但是他們並沒有花時間去製作、整合自己的工具。但是,Jonson團隊最出色的員工耗費了他們1/3的時間在工具製作上,這些工具可以用來發布程式碼,監控系統,以及能讓他們花更少的時間去做更多事情。
總之,不要花時間去做機器可以代替你去做的事情。
4.優化你的迭代速度
假設你要花12秒鐘去搜尋某個函式是在哪裡定義的。再假設你每天做這個動作60次,那麼你每天就要花12分鐘去搜尋函式定義。
如果你用一個好一點的編輯器,每次找到函式定義只要2秒鐘,那麼你每天就會節約10分鐘。每年你就可以節約40個小時。
如果你能找到3個這樣的場景去優化一下,那麼你每年可以節約一個月的時間。想想這一個月你可以做多少有意義的事情。
再假如你在除錯一個App的bug的時候,改完一次程式碼都需要重啟一下App,然後點選4、5次才能看到bug有沒有改好。那麼你是不是可以先花幾分鐘設定以下,讓App一啟動就轉到顯示Bug的頁面呢?
千萬不要小看這些瑣碎的細節,改善它們的回報是巨大。
5.系統性的思考方式
當你在寫程式碼的時候,你很容易就認為只要你按照需求實現了指定的功能,你的程式碼就寫完了。但是這其實只是冰山一角。任何沒有釋出到生產環境的程式碼都不會產生任何價值。
如果想寫出真正有影響力的程式碼,你需要從整個系統去理解你的工作:
你的程式碼和其他人寫的程式碼在功能上是什麼關係?
你有沒有好好測試你的程式碼?或者其他人是否很容易測試你的程式碼?
為了部署你的程式碼,線上生產環境的程式碼是不是需要改動?
新的程式碼會不會影響到已經執行的程式碼?
在新的功能下,你的目標使用者的行為是不是你期望的?
你的程式碼有沒有產生商業上的影響?
這些問題都不是很容易就能回答的,但是在寫程式碼的時候,你需要明白你的程式碼最後會不會得到最好的結果。
這些只是頂尖程式設計師的一些基本思維方式,如果你想要更詳細的瞭解在Google,Facebook,Twitter這些公司的頂尖程式設計師是如何工作的,去關注作者的部落格或者他的書吧。
原文作者:Edmond Lau《THe Effective Engineer》:https://www.theeffectiveengineer.com/book
原文連結:http://www.theeffectiveengineer.com/blog/five-key-skills-of-successful-programmers#rd
文/陳巨蛇(簡書作者)
相關文章
- 頂尖程式設計師的10個優良習慣程式設計師
- 程式設計師:我終於知道post和get的區別程式設計師
- 碼農與程式設計師的區別程式設計師
- 好程式設計師技術分享html5和JavaScript的區別程式設計師HTMLJavaScript
- 中國程式設計師與美國程式設計師寫程式碼的區別分析程式設計師
- 幽默:程式設計師與軟體工程師的區別程式設計師軟體工程工程師
- 幽默:全棧程式設計師與前後端程式設計師區別全棧程式設計師後端
- 程式設計師永遠不要再犯的5個程式設計bug程式設計師
- 從程式碼的風格看出六種不同型別的程式設計師型別程式設計師
- 選Python還是選Java?2020年,頂尖程式設計師最應該掌握的7種程式語言PythonJava程式設計師
- 牛逼程式設計師分五種不同類別,你屬於哪一種?程式設計師
- Devops區別於程式設計師和系統管理員的特點? - Redditdev程式設計師
- 程式設計師的差距在哪裡?程式設計師的三個級別,你在哪裡?程式設計師
- 不同於Oracle:SEQUENCE的區別Oracle
- 頂尖的網站建設公司網站
- 中外程式設計師到底有啥區別?程式設計師
- 【科普】碼農是程式設計師嗎?碼農與真正程式設計師的區別是啥?程式設計師
- 屬於每個程式設計師的節日,1024程式設計師節程式碼敲響世界程式設計師
- 告訴你架構師與程式設計師的區別在哪裡架構程式設計師
- 程式設計師全國不同地區,微信(面試 招聘)群。程式設計師面試
- 關於程式設計師這個職業程式設計師
- 頂級程式設計師推薦的程式設計開發書籍【整合】程式設計師
- 5k和5萬程式設計師的差距原來是在於10大程式設計禁忌!程式設計師
- Java程式設計師必須掌握的5個註解!Java程式設計師
- 中國的頂級軟體程式設計工程師和歐美的頂級軟體程式設計工程師差距有多大?程式設計工程師
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享int和Integer的區別程式設計師Java
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- 一個老程式設計師的程式設計之路,寫給年輕的程式設計師們程式設計師
- 騰訊頂尖設計團隊總結的 2019 – 2020 設計趨勢:角色篇
- 增加你找到程式設計師工作機會的 5 個技巧程式設計師
- 知乎(1-5期)-AI大模型全棧工程師培養計劃,做ChatGPT浪潮中頂尖的超級個體AI大模型全棧工程師ChatGPT
- GPU程式設計--CPU和GPU的設計區別GPU程式設計
- 程式設計師如何玩轉《衝頂大會》?程式設計師
- 一系列國內外頂尖網際網路公司的技術部落格,晉升程式設計師必備程式設計師
- 不會填坑的程式設計師不是一個好程式設計師!程式設計師
- 做個清醒的程式設計師之要不要做程式設計師程式設計師
- 中國頂級程式設計師圖鑑,最後一個厲害了!程式設計師
- 幽默系列:程式設計師與眾不同之處程式設計師