【威哥說】一個不笨不會偷懶的程序員不是一個好的programer。馁龟。漆魔。
只有懶惰的程序員才會去編寫那些可以最終代替自己工作的自動化工具,才不會成天為了實現(xiàn)相似的功能去編寫大段大段冗余重復(fù)的代碼 - 這種代碼往往是軟件后期維護(hù)和重構(gòu)的天敵改抡。通常來說,由于惰性的驅(qū)使所產(chǎn)生出來的工具和程序?qū)⒆罱K極大的提高生產(chǎn)開發(fā)的速度句灌。
當(dāng)然欠拾,對于一個程序員來說,光光具備懶惰這個要素還是不夠的清蚀。在享受懶惰之前枷邪,他必須以最大的熱情和最高的效率去研究解放自己的途徑榛搔,比如:找到最有助于開發(fā)的工具东揣,最能體現(xiàn)“一次編寫嘶卧,多次復(fù)用”精神的代碼架構(gòu)的設(shè)計。只有在這些必要的工作之后芥吟,才可能真正享受輕松編程的樂趣专甩。
所以“懶”的精髓用一句老話來描述钉稍,那就是磨刀不誤砍柴功。如果你不想辦法磨亮手中的柴刀种樱,就算一天二十四小時都在砍柴俊卤,效果也不如拿把鋒利的斧頭一天只砍一小時。
從這個角度來說消恍,Google給員工的20%自由時間是完全發(fā)揮了“懶”的能動力。為了更好的享受偷懶的樂趣佩抹,員工會更加具有創(chuàng)造力的去高效完成自己的任務(wù)取董。
夸張一點來說,懶惰才是人類進(jìn)步的原動力枢里。
笨——這一點似乎比懶更讓人不能接受蹂午。在解釋這里所說的笨的具體含義之前,我們先看看一個聰明人(或者說認(rèn)為自己足夠聰明)會做什么:
1) 停止學(xué)習(xí)新的東西
2) 不愿意用批判的眼光去審視自己的工作
第1點將使我們很難去接受或者主動的去研究一項新的技術(shù) - 即使新技術(shù)能帶給他更多工作上的便利奥洼。第2點會使我們無法清晰的分析自身工作的問題所在晚胡,要對其進(jìn)行改進(jìn)或者重構(gòu)就更加困難。
從這兩點來考慮估盘,作為一個程序員太自以為是不見得是件好事情遣妥。由于對自身的過于自信,往往無法客觀的看待自己和自己的工作。相反的谭贪,笨一點(確切的說肢藐,謙遜一點)有時候倒有助于開發(fā)的順利進(jìn)行吱韭。舉例來說,當(dāng)程序出現(xiàn)bug的時候理盆,最好盡早承認(rèn)問題是出在自己編寫的代碼上面而不是在于編譯器(當(dāng)然除非是字節(jié)高低位編碼方式之類的問題猿规,這種問題編譯器會是錯誤的根源之一)。如果你太自負(fù)的認(rèn)為自己的程序沒有問題而去猜測可能是編譯器或者其他的什么外部因素出問題的話姨俩,那么十有八九你會在調(diào)試過程中走上一長段的彎路。
程序員應(yīng)該笨一些的更為關(guān)鍵的原因在于调窍,當(dāng)需要思考問題的最佳解決方案的時候张遭,往往要求我們首先要跳出思維定式。你對系統(tǒng)了解的越多缔恳,積累了越多的經(jīng)驗洁闰,就越難走出已有的局限,可以嘗試的范圍就越小扑眉。相反的,對于一個什么也不懂的門外漢來說刃滓,因為沒有任何失敗的記憶和潛規(guī)則的約束耸弄,也就沒有什么是“不可能”的,這樣的大腦所能迸發(fā)出來的在專業(yè)人士看起來愚不可及的想法往往正是解決問題所需要的關(guān)鍵點所在砰诵。
可能很多程序員都會有類似的經(jīng)歷,在面對別人(尤其是其他部門)對于一個bug的描述的時候茁彭,必須把自己擺在一個普通用戶而不是程序開發(fā)者的角度來分析問題,否則的話可能你永遠(yuǎn)都想象不到這種錯誤也會發(fā)生摄闸。越能讓自己變得“笨”起來妹萨,越能很快的定位到問題所在。我們先看看這么一段關(guān)于web開發(fā)問題的程序員和客服人員的對話:
“從昨天開始我們的用戶就看不到我們站點上的Logo了乎完∈饕蹋”
“他試過重啟瀏覽器么?”
“是的帽揪。”
“他試過重啟電腦么耍缴?”
“是的挽霉。”
“他清空過瀏覽器Cache么侠坎?”
“是的∷眨”
“他的瀏覽器版本是IE6么庐完?”
“是的∠常”
“他確信是真的看不到Logo了么?”
“是的染乌『杀铮”
“他是在電腦顯示器屏幕上看我們的站點么?”
“什么勒庄?”
“比如說,它可能是打印出來看不到酪呻?”
“不盐须。他是在顯示器上看的漆腌。”
“除了站點Logo之外塑径,他是不是其他的圖片都看不到填具?”
“什么?哦劳景。我再問問他∶拼”
從這段對話來說筋量,估計用戶實際上是禁止了瀏覽器顯示圖片的功能(或者他兒子干的)。不管怎么樣肋拔,如果你不是用這種傻瓜式的思維方式去尋找答案的話呀酸,可能怎么也找不到問題的根源。
很多時候,問題發(fā)現(xiàn)者對于問題的描述往往是非常片面的叮叹,并且加上了主觀推測的成分在里面爆存。如果你不能透過這些主觀的描述去發(fā)現(xiàn)問題的實際表象,或者說根本就是你自己根據(jù)程序員的經(jīng)驗邏輯來判斷問題所在的話携冤,十有八九會在歧途上越走越遠(yuǎn)闲勺。
對于白癡級的問題,只有用白癡的行為方式才能得到答案翘地。
即便同樣是程序員癌幕,但對于你的程序并不熟悉,也會經(jīng)常有這樣的疑問:“為什么我調(diào)用你的代碼出錯了勺远?”這種問題的答案胶逢,很多時候是因為他們的調(diào)用方式不對,或者調(diào)用了錯誤的庫文件初坠,或者庫文件的版本使用不當(dāng),或者根本就沒有聯(lián)接到庫文件上比搭。當(dāng)你想讓同事幫你檢查一下程序中的一個莫名其妙的bug的時候南誊,一般來說希望他對你的系統(tǒng)了解的越少越好,只有這樣他才會問一些你自己認(rèn)為絕對不可能出問題的“笨”問題霉赡。
所以“笨”的精髓在于你如何去思考問題:不要假設(shè)些什么幔托,把自己假設(shè)的太完美或者把別人假設(shè)的很聰明都會使你忽視一些很淺顯的事實蜂挪。思考的前提必須是完整的事實表象嗓化,思考的過程必須是拋棄成見的問題跟蹤。在發(fā)現(xiàn)事實之前作太多的主觀思考和臆斷严肪,倒不如把自己當(dāng)作白癡一樣來行動更好谦屑。
當(dāng)然,不思考的一個極端是不分情況都直接去做酝枢,另一個極端是完全脫離事實悍手,用思想辦事。一個優(yōu)秀的程序員應(yīng)該做好權(quán)衡谓苟。10次決定里面的1次錯誤決定不是致命的涝焙;只做5次正確的決定而另外5次沒有任何決定才更糟糕孕暇。
最后是一個蜈蚣的故事。蜈蚣本來用自己的幾百只腳走路走的很快很好妖滔,但他從來沒有花時間去想過為什么座舍。直到有一天,一只臭蟲問他:“你是怎么管理好你的幾百只腳的曲秉?你不覺得這是件很困難的事情嗎承二?”臭蟲問完之后就走了。只剩下蜈蚣坐在地上亥鸠,不停的思考這個問題识啦,卻一直想不出個究竟神妹。從此以后鸵荠,這只蜈蚣再也沒辦法好好的走路了。
磨礪營12月15號的安卓高薪就業(yè)班馬上就要開班啦腰鬼,想要跟著威哥學(xué)安卓的記得報名啊熄赡,詳細(xì)內(nèi)容關(guān)注微信公眾號mjw-java或訪問www.moliying.com/?jianshu