? ? ? ? 有那么一類程序員,他們的產出總是很高,遇到問題他們就像變戲法一樣,能直接找到關鍵點,而且他們似乎很少加班。另一類程序員,在電腦前坐很久很久,不停的敲著鍵盤,不停的運行代碼,找問題,非常努力,但經常是解決一個問題,引入了更多的問題。
? ? ? ? 成為一個專業的程序員,不可能有一個萬能公式,一般都是很多方面混合出來的,不同的人很可能走了很多不同的路徑。但是有一些非常常見的錯誤,卻會極大的阻礙一個程序員的成長。這里邊最常見的一個就是寫程序不經過大腦。我們一定要記住:
程序是用大腦寫的,而不是用手寫。
? ? ? ? 初看這句話簡直就是一句廢話,根本就是不言自明的嘛。然而,越簡單的概念,我們越容易忽視,認為他不重要,實際行事的時候卻經常反其道而行。
? ? ? ? 看一下幾種常見的編程方式:拿到任務,馬上開寫,把功能實現了再說,結果一般是,只實現好了正常流程,失敗異常流程往往是在之后再打補丁,不斷的修改,結果就是混亂的結構,意大利面條式的代碼。還有另一種場景,遇到一個bug,上手就開始試,改改這里,改改那里,然后忽然改好了,提交之后萬事大吉,大部分時候這只是修改了一個表層原因。這些行為的主要原因其實都是在用手寫代碼,而不是大腦。
? ? ? ? 詳細點說,用大腦寫代碼的意思就是程序應該是在腦袋里成型的。首先,即便是上邊那些混亂的寫法,也肯定要過大腦的,畢竟不經過大腦,你其實很難下意識打出一行代碼的,但問題就是過大腦的部分實在太少了,每次就那么幾行上下文。真正高級的做法是,你能夠在腦袋里把整套代碼的流程推導一遍,讓程序在你的大腦里運行一遍,這時候你會發現寫下來會是非常輕松的體力活。有那么一些程序員幾乎不加班,但是效率還是很高,那就是因為他們其實無時無刻都能在大腦里寫程序。成為一個高級程序最重要的就是要有在大腦里完整的寫完一段代碼的能力。
? ? ? ? 最重要的編程習慣就是開始真正敲代碼之前,在大腦里先把程序寫好。
? ? ? ? 如果接受了大腦寫代碼的說法,那么你會得到一個非常有意思的結論,
語言不重要,重要的是思想。
? ? ? ? 這句話也是很多人在說,但其實不知道在說什么。我們先看一個問題,在大腦里寫程序的時候,你覺得需要使用某一門專門的語言來思考嗎?類比一下,這就如問你,你平時思考的時候,需要用中文來思考嗎?這又是一個看起來非常簡單,但很多人沒有去思考過的概念,結論是不需要。這里就需要個人去深刻的體會一下了,如果你會多門語言,那么會更有能力自省出來,你會更容易發現自己其實并沒有總是在用某一門語言思考。
? ? ? ? 大部分時候,思考會是一些多種東西的混合,比如思考怎么游泳,你腦海里會浮現出一個畫面,有一個人在水里游泳,而不會去思考怎么用語言去描述這個游泳的動作。同理到寫程序,你其實是在思考的程序邏輯和程序結構,更可能是思考方式會是這樣的,你想著這里需要一塊東西,里邊要存一些信息,然后你會想一些對某些東西要做的操作,有時候你又會想如果處于某種情況,要怎么給出錯結果,諸如此類的。
? ? ? ? 這些東西,其實很少會和具體的語言綁定,你并不太可能去用一門語言的具體語法去思考類怎么寫,函數怎么寫,更多的會像一種你自己在使用的偽代碼。甚至有時候你可能會用圖像化的方式去思考,比如一個樹狀結構的東西,上邊掛著些東西,你用什么方式去遍歷她的葉子。
? ? ? ? 不過這里邊有個需要注意的,如果你沒有學過一些編程的基本概念,那么你就可能無法運用它去思考,比如當你完全不知道函數是什么,那么你在思考程序的時候,就只能一條程序寫到底。所以從這個層面來說,語言又很重要,因為你需要他去學得一些編程的基本概念,讓你有東西可想。
總結一下:
寫程序是用大腦寫,而不是用手寫。
? ? ? ? 用大腦寫程序指的是,在動手敲代碼之前,在大腦里先運行一遍你的程序。
? ? ? ? 語言不重要,重要的是思想,但你需要學習語言來獲得編程的基本概念來讓你有東西可想。
? ? ? ? 想成長為真正的大牛高手,除了養成良好的編程習慣,還必須將自己的視野凌駕于業務需求之上,精簡強化核心技能,提升自己對語言和工具的掌握層次,才能提高開發效率,提升技能水平。