Lau采訪了很多硅谷頂級科技公司的頂尖軟件工程師贵白。他發(fā)現(xiàn)這些給世界帶來巨大影響的的工程師們至少有以下 5 個共同的思維模式抚芦。 看看你是否具備倍谜?
勇于去研究你不懂的代碼
一般人都不愿意去研究自己不曾接觸過的代碼,很多人都沒有嘗試就放棄了叉抡。如果你經常去研究你沒有接觸過的代碼枢劝,你就會越來越熟悉不同的代碼結構和設計模式。現(xiàn)在人們很容易就接觸到優(yōu)秀的開源代碼資源卜壕,你可以很方便的下載下來做一些改動或者調試您旁,去研究為什么代碼可以這么寫。
除了代碼之外轴捎,很多人對于陌生的工作內容也會感到恐懼鹤盒。每次換工作的時候蚕脏,你可能都會遇到新公司的工作內容和以前工作的內容不一樣的情況,以至于剛開始的時候工作效率沒有以前那么高侦锯。很多人甚至覺得驼鞭,他們是不是騙了面試官。
其實尺碰,大家都是在學習的過程中挣棕。在一個陌生的領域,沒有人從一開始就是大神亲桥。如果你想變得越來越好洛心,無論是寫代碼,與人溝通或者其它的技能题篷,都是需要投入時間去學習的词身。
精通代碼調試 ( debug )
很多人在寫代碼的過程中,經常會有的一個問題就是:為什么我寫出來的代碼不能運行番枚?為什么運行的結果不是我想要的法严? 幾乎所有的程序員寫代碼都不是一遍就能寫好的。但是頂尖的程序員非澈快的就明白自己代碼的問題可能是什么深啤。
這是一個很重要的能力,但是偏偏學校里不教路星,面試的時候考官也不經常提及墓塌。那么怎么去調試代碼呢?其實核心就是以下幾個方法:
不妨先猜測一下到底發(fā)生了什么奥额。假設你的猜測是對的,想想你的猜測會導致程序有什么結果访诱。
試著觀察這些結果有沒有異常的地方垫挨。如果你沒有發(fā)現(xiàn)異樣,那么說明你的猜測就是對的触菜。如果你發(fā)現(xiàn)了異樣九榔,那么說明你的猜測是錯的,接下來換一個猜測試試涡相。
對于頂尖程序員來說哲泊,這個過程在腦海中就是電光火石的一瞬間。只要你解決的問題足夠多催蝗,你做出來的猜測就會越準確切威。
至于如何發(fā)現(xiàn)異樣?你就需要有一套自己的工具或者方法論了丙号。最簡單的就是在代碼里輸出日志來判斷先朦。但是這是比較笨的辦法缰冤,你需要去接觸一些高級的工具或者直接帶有Debug功能的編輯器。
重視能夠節(jié)約時間的工具
打敗人類的 AlphaGo 每天可以進行上百萬局的下棋訓練喳魏,我們人類一萬個小時的訓練卻需要10年之久棉浸。也就是說,電腦運行幾分鐘刺彩,可能就等于人類工作好幾年迷郑。
曾經在 Facebook 擔任技術總監(jiān)的 Bobby Johnson 描述過,高效率的程序員都把時間花在制作工具上创倔。
很多人也認為工具是很重要的嗡害,但是他們并沒有花時間去制作、整合自己的工具三幻。但是就漾,Jonson 團隊最出色的員工耗費了他們1/3的時間在工具制作上,這些工具可以用來發(fā)布代碼念搬,監(jiān)控系統(tǒng)抑堡,以及能讓他們花更少的時間去做更多事情。中國有句古話說得好:磨刀不誤砍柴工朗徊。
總之首妖,不要花時間去做機器可以代替你去做的事情。
優(yōu)化你的迭代速度
假設你要花 12 秒鐘去搜索某個函數(shù)是在哪里定義的爷恳。再假設你每天做這個動作 60 次有缆,那么你每天就要花 12 分鐘去搜索函數(shù)定義。
如果你用一個好一點的編輯器温亲,每次找到函數(shù)定義只要 2 秒鐘棚壁,那么你每天就會節(jié)約 10 分鐘。每年你就可以節(jié)約 40 個小時栈虚。如果你能找到 3 個這樣的場景去優(yōu)化一下袖外,那么你每年可以節(jié)約一個月的時間。
想想這一個月你可以做多少有意義的事情魂务。再假如你在調試一個 App 的 bug 的時候曼验,改完一次代碼都需要重啟一下 App,然后點擊 4粘姜、5 次才能看到 bug 有沒有改好鬓照。那么你是不是可以先花幾分鐘設置以下,讓 App 一啟動就轉到顯示 bug 的頁面呢孤紧?
千萬不要小看這些瑣碎的細節(jié)豺裆,改善它們的回報是巨大。
系統(tǒng)性的思考方式
當你在寫代碼的時候号显,你很容易就認為只要你按照需求實現(xiàn)了指定的功能留储,你的代碼就寫完了翼抠。但是這其實只是冰山一角。任何沒有發(fā)布到生產環(huán)境的代碼都不會產生任何價值获讳。
如果想寫出真正有影響力的代碼阴颖,你需要從整個系統(tǒng)去理解你的工作:
你的代碼和其他人寫的代碼在功能上是什么關系?
你有沒有好好測試你的代碼丐膝?或者其他人是否很容易測試你的代碼量愧?
為了部署你的代碼,線上生產環(huán)境的代碼是不是需要改動帅矗?
新的代碼會不會影響到已經運行的代碼偎肃?
在新的功能下,你的目標用戶的行為是不是你期望的浑此?
你的代碼有沒有產生商業(yè)上的影響累颂?
這些問題都不是很容易就能回答的,但是在寫代碼的時候凛俱,你需要明白你的代碼最后會不會得到最好的結果紊馏。
以上是頂尖程序員的一些基本思維方式,哪些是你具備并應用的蒲犬?哪些是你想到而沒有做到的朱监?
在這里給大家提供一個學習交流的平臺,java架構師群: 558787436
具有1-5工作經驗的原叮,面對目前流行的技術不知從何下手赫编,需要突破技術瓶頸的可以加群。
在公司待久了奋隶,過得很安逸擂送,但跳槽時面試碰壁。需要在短時間內進修唯欣、跳槽拿高薪的可以加群嘹吨。
如果沒有工作經驗,但基礎非常扎實黍聂,對java工作機制,常用設計思想身腻,常用java開發(fā)框架掌握熟練的可以加群产还。