頂級程序員和普通程序員在思維模式上的5個(gè)區別! 《The Effective Engineer》的作者在寫(xiě)書(shū)的過(guò)程中,為了了解那些頂級程序員和普通程序員的區別,采訪(fǎng)了很多硅谷頂級科技公司的頂尖軟件工程師。他發(fā)現這些給世界帶來(lái)巨大影響的的工程師們至少有以下5個(gè)共同的思維模式: 1.勇于去研究你不懂的代碼 一般人都不愿意去研究自己不曾接觸過(guò)的代碼,很多人都沒(méi)有嘗試就放棄了。如果你經(jīng)常去研究你沒(méi)有接觸過(guò)的代碼,你就會(huì )越來(lái)越熟悉不同的代碼結構和設計模式,F在人們很容易就接觸到優(yōu)秀的開(kāi)源代碼資源,你可以很方便的就下載下來(lái)做一些改動(dòng)或者調試,去研究為什么代碼可以這么寫(xiě)。 除了代碼之外,很多人對于陌生的工作內容也會(huì )感到恐懼。每次換工作的時(shí)候,你可能都會(huì )遇到新公司的工作內容和以前工作的內容不一樣的情況,以至于剛開(kāi)始的時(shí)候工作效率沒(méi)有以前那么高。很多人甚至覺(jué)得,他們是不是騙了面試官。 其實(shí),大家都是在學(xué)習的過(guò)程中。在一個(gè)陌生的領(lǐng)域,沒(méi)有人從一開(kāi)始就是大神。如果你想變得越來(lái)越好,無(wú)論是寫(xiě)代碼,與人溝通或者其它的技能,都是需要投入時(shí)間去學(xué)習的。 2.精通代碼調試(debug) 很多人在寫(xiě)代碼的過(guò)程中,經(jīng)常會(huì )有的一個(gè)問(wèn)題就是:為什么我寫(xiě)出來(lái)的代碼不能運行?為什么運行的結果不是我想要的? 幾乎所有的程序員寫(xiě)代碼都不是一遍就能寫(xiě)好的。但是頂尖的程序員非?斓木兔靼鬃约捍a的問(wèn)題可能是什么。這是一個(gè)很重要的能力,但是偏偏學(xué)校里不教,面試的時(shí)候考官也不經(jīng)常提及。 那么怎么去調試代碼呢?其實(shí)核心就是以下幾個(gè)方法: 1、不妨先猜測一下到底發(fā)生了什么。 2、假設你的猜測是對的,想想你的猜測會(huì )導致程序有什么結果。 3、試著(zhù)觀(guān)察這些結果有沒(méi)有異常的地方。 4、如果你沒(méi)有發(fā)現異樣,那么說(shuō)明你的猜測就是對的。 5、如果你發(fā)現了異樣,那么說(shuō)明你的猜測是錯的,接下來(lái)?yè)Q一個(gè)猜測試試。 對于頂尖程序員來(lái)說(shuō),這個(gè)過(guò)程在腦海中就是電光火石的一瞬間。只要你解決的問(wèn)題足夠多,你做出來(lái)的猜測就會(huì )越準確。 至于如何發(fā)現異樣?你就需要有一套自己的工具或者方法論了。最簡(jiǎn)單的就是在代碼里輸出日志來(lái)判斷。但是這是比較笨的辦法,你需要去接觸一些高級的工具或者直接帶有Debug功能的編輯器。 3.重視能夠節約時(shí)間的工具 最近打敗人類(lèi)的AlphaGo每天可以進(jìn)行上百萬(wàn)局的下棋訓練,我們人類(lèi)一萬(wàn)個(gè)小時(shí)的訓練卻需要10年之久。也就是說(shuō),電腦運行幾分鐘,可能就等于人類(lèi)工作好幾年。 曾經(jīng)在Facebook擔任技術(shù)總監的Bobby Johnson描述過(guò),高效率的程序員都把時(shí)間花在制作工具上。 很多人也認為工具是很重要的,但是他們并沒(méi)有花時(shí)間去制作、整合自己的工具。但是,Jonson團隊最出色的員工耗費了他們1/3的時(shí)間在工具制作上,這些工具可以用來(lái)發(fā)布代碼,監控系統,以及能讓他們花更少的時(shí)間去做更多事情。 總之,不要花時(shí)間去做機器可以代替你去做的事情。 4.優(yōu)化你的迭代速度 假設你要花12秒鐘去搜索某個(gè)函數是在哪里定義的。再假設你每天做這個(gè)動(dòng)作60次,那么你每天就要花12分鐘去搜索函數定義。 如果你用一個(gè)好一點(diǎn)的編輯器,每次找到函數定義只要2秒鐘,那么你每天就會(huì )節約10分鐘。每年你就可以節約40個(gè)小時(shí)。 如果你能找到3個(gè)這樣的場(chǎng)景去優(yōu)化一下,那么你每年可以節約一個(gè)月的時(shí)間。想想這一個(gè)月你可以做多少有意義的事情。 再假如你在調試一個(gè)App的bug的時(shí)候,改完一次代碼都需要重啟一下App,然后點(diǎn)擊4、5次才能看到bug有沒(méi)有改好。那么你是不是可以先花幾分鐘設置以下,讓App一啟動(dòng)就轉到顯示Bug的頁(yè)面呢? 千萬(wàn)不要小看這些瑣碎的細節,改善它們的回報是巨大。 5.系統性的思考方式 當你在寫(xiě)代碼的時(shí)候,你很容易就認為只要你按照需求實(shí)現了指定的功能,你的代碼就寫(xiě)完了。但是這其實(shí)只是冰山一角。任何沒(méi)有發(fā)布到生產(chǎn)環(huán)境的代碼都不會(huì )產(chǎn)生任何價(jià)值。 如果想寫(xiě)出真正有影響力的代碼,你需要從整個(gè)系統去理解你的工作: 1、你的代碼和其他人寫(xiě)的代碼在功能上是什么關(guān)系? 2、你有沒(méi)有好好測試你的代碼?或者其他人是否很容易測試你的代碼? 3、為了部署你的代碼,線(xiàn)上生產(chǎn)環(huán)境的代碼是不是需要改動(dòng)? 4、新的代碼會(huì )不會(huì )影響到已經(jīng)運行的代碼? 5、在新的功能下,你的目標用戶(hù)的行為是不是你期望的? 6、你的代碼有沒(méi)有產(chǎn)生商業(yè)上的影響? 這些問(wèn)題都不是很容易就能回答的,但是在寫(xiě)代碼的時(shí)候,你需要明白你的代碼最后會(huì )不會(huì )得到最好的結果。 以下課程可免費試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。 想學(xué)習的你和我聯(lián)系預約就可以免費聽(tīng)課了。 宋工企鵝號:3524-6590-88 Tel/WX:173--1795--1908 |