? ? ? ? 有那么一類程序員,他們的產(chǎn)出總是很高携添,遇到問(wèn)題他們就像變戲法一樣嫁盲,能直接找到關(guān)鍵點(diǎn),而且他們似乎很少加班烈掠。另一類程序員羞秤,在電腦前坐很久很久,不停的敲著鍵盤左敌,不停的運(yùn)行代碼瘾蛋,找問(wèn)題,非常努力矫限,但經(jīng)常是解決一個(gè)問(wèn)題哺哼,引入了更多的問(wèn)題。
? ? ? ? 成為一個(gè)專業(yè)的程序員叼风,不可能有一個(gè)萬(wàn)能公式取董,一般都是很多方面混合出來(lái)的,不同的人很可能走了很多不同的路徑无宿。但是有一些非常常見的錯(cuò)誤茵汰,卻會(huì)極大的阻礙一個(gè)程序員的成長(zhǎng)。這里邊最常見的一個(gè)就是寫程序不經(jīng)過(guò)大腦孽鸡。我們一定要記拙选:
程序是用大腦寫的坡垫,而不是用手寫。
? ? ? ? 初看這句話簡(jiǎn)直就是一句廢話画侣,根本就是不言自明的嘛冰悠。然而,越簡(jiǎn)單的概念配乱,我們?cè)饺菀缀鲆暩茸浚J(rèn)為他不重要,實(shí)際行事的時(shí)候卻經(jīng)常反其道而行搬泥。
? ? ? ? 看一下幾種常見的編程方式:拿到任務(wù)桑寨,馬上開寫,把功能實(shí)現(xiàn)了再說(shuō)忿檩,結(jié)果一般是尉尾,只實(shí)現(xiàn)好了正常流程,失敗異常流程往往是在之后再打補(bǔ)丁燥透,不斷的修改沙咏,結(jié)果就是混亂的結(jié)構(gòu),意大利面條式的代碼班套。還有另一種場(chǎng)景肢藐,遇到一個(gè)bug,上手就開始試吱韭,改改這里吆豹,改改那里,然后忽然改好了理盆,提交之后萬(wàn)事大吉痘煤,大部分時(shí)候這只是修改了一個(gè)表層原因。這些行為的主要原因其實(shí)都是在用手寫代碼猿规,而不是大腦衷快。
? ? ? ? 詳細(xì)點(diǎn)說(shuō),用大腦寫代碼的意思就是程序應(yīng)該是在腦袋里成型的坎拐。首先,即便是上邊那些混亂的寫法养匈,也肯定要過(guò)大腦的哼勇,畢竟不經(jīng)過(guò)大腦,你其實(shí)很難下意識(shí)打出一行代碼的呕乎,但問(wèn)題就是過(guò)大腦的部分實(shí)在太少了积担,每次就那么幾行上下文。真正高級(jí)的做法是猬仁,你能夠在腦袋里把整套代碼的流程推導(dǎo)一遍帝璧,讓程序在你的大腦里運(yùn)行一遍先誉,這時(shí)候你會(huì)發(fā)現(xiàn)寫下來(lái)會(huì)是非常輕松的體力活。有那么一些程序員幾乎不加班的烁,但是效率還是很高褐耳,那就是因?yàn)樗麄兤鋵?shí)無(wú)時(shí)無(wú)刻都能在大腦里寫程序。成為一個(gè)高級(jí)程序最重要的就是要有在大腦里完整的寫完一段代碼的能力渴庆。
? ? ? ? 最重要的編程習(xí)慣就是開始真正敲代碼之前铃芦,在大腦里先把程序?qū)懞谩?/p>
? ? ? ? 如果接受了大腦寫代碼的說(shuō)法,那么你會(huì)得到一個(gè)非常有意思的結(jié)論襟雷,
語(yǔ)言不重要刃滓,重要的是思想。
? ? ? ? 這句話也是很多人在說(shuō)耸弄,但其實(shí)不知道在說(shuō)什么咧虎。我們先看一個(gè)問(wèn)題,在大腦里寫程序的時(shí)候计呈,你覺得需要使用某一門專門的語(yǔ)言來(lái)思考嗎砰诵?類比一下,這就如問(wèn)你震叮,你平時(shí)思考的時(shí)候胧砰,需要用中文來(lái)思考嗎?這又是一個(gè)看起來(lái)非常簡(jiǎn)單苇瓣,但很多人沒有去思考過(guò)的概念尉间,結(jié)論是不需要。這里就需要個(gè)人去深刻的體會(huì)一下了击罪,如果你會(huì)多門語(yǔ)言哲嘲,那么會(huì)更有能力自省出來(lái),你會(huì)更容易發(fā)現(xiàn)自己其實(shí)并沒有總是在用某一門語(yǔ)言思考媳禁。
? ? ? ? 大部分時(shí)候眠副,思考會(huì)是一些多種東西的混合,比如思考怎么游泳竣稽,你腦海里會(huì)浮現(xiàn)出一個(gè)畫面囱怕,有一個(gè)人在水里游泳,而不會(huì)去思考怎么用語(yǔ)言去描述這個(gè)游泳的動(dòng)作毫别。同理到寫程序娃弓,你其實(shí)是在思考的程序邏輯和程序結(jié)構(gòu),更可能是思考方式會(huì)是這樣的岛宦,你想著這里需要一塊東西台丛,里邊要存一些信息,然后你會(huì)想一些對(duì)某些東西要做的操作砾肺,有時(shí)候你又會(huì)想如果處于某種情況挽霉,要怎么給出錯(cuò)結(jié)果防嗡,諸如此類的。
? ? ? ? 這些東西侠坎,其實(shí)很少會(huì)和具體的語(yǔ)言綁定蚁趁,你并不太可能去用一門語(yǔ)言的具體語(yǔ)法去思考類怎么寫,函數(shù)怎么寫硅蹦,更多的會(huì)像一種你自己在使用的偽代碼荣德。甚至有時(shí)候你可能會(huì)用圖像化的方式去思考,比如一個(gè)樹狀結(jié)構(gòu)的東西童芹,上邊掛著些東西涮瞻,你用什么方式去遍歷她的葉子。
? ? ? ? 不過(guò)這里邊有個(gè)需要注意的假褪,如果你沒有學(xué)過(guò)一些編程的基本概念署咽,那么你就可能無(wú)法運(yùn)用它去思考,比如當(dāng)你完全不知道函數(shù)是什么生音,那么你在思考程序的時(shí)候宁否,就只能一條程序?qū)懙降住K詮倪@個(gè)層面來(lái)說(shuō)缀遍,語(yǔ)言又很重要慕匠,因?yàn)槟阈枰W(xué)得一些編程的基本概念,讓你有東西可想域醇。
總結(jié)一下:
寫程序是用大腦寫台谊,而不是用手寫。
? ? ? ? 用大腦寫程序指的是譬挚,在動(dòng)手敲代碼之前锅铅,在大腦里先運(yùn)行一遍你的程序。
? ? ? ? 語(yǔ)言不重要减宣,重要的是思想盐须,但你需要學(xué)習(xí)語(yǔ)言來(lái)獲得編程的基本概念來(lái)讓你有東西可想。
? ? ? ? 想成長(zhǎng)為真正的大牛高手漆腌,除了養(yǎng)成良好的編程習(xí)慣贼邓,還必須將自己的視野凌駕于業(yè)務(wù)需求之上,精簡(jiǎn)強(qiáng)化核心技能闷尿,提升自己對(duì)語(yǔ)言和工具的掌握層次塑径,才能提高開發(fā)效率,提升技能水平悠砚。