talk is not cheap,speak loudly
隨筆 - 19?文章 - 0?評論 - 0
在上一篇文章中摹芙,提出了學習編程的首先要學會站在設(shè)計者的視角贮竟,然后緊接著提出了三條原則:(1)專注一個方向,而且一段時間值研究一個蹂楣;(2)要寫博客,將想法整理出來珊皿;(3)要寫代碼剩胁,重復的來寫代碼,反復重構(gòu)届腐。這些話都很正確,但是到了具體操作的時候蜂奸,實際上就會存在一些問題犁苏,無論是方向的選擇,還是說寫博客或者說寫代碼扩所,正確的原則來自于成功者的歸納围详,卻并沒有給出可以執(zhí)行的方案。因而祖屏,在這篇博客里面助赞,嘗試根據(jù)上述的原則,提出可操作性的建議袁勺。
在這里首先要說兩個概念雹食,一個是編程能力,一個是工作習慣魁兼。下面分別來描述婉徘。
首先說編程能力漠嵌,上述原則的目的只有一個咐汞,那就是提高編程能力,到了這里儒鹿,就不得不說什么是編程能力化撕,否則很難說提高了,通常理解中編程就是寫代碼约炎,但是這個定義太模糊了植阴,并不能帶給我們?nèi)魏斡袃r值的啟發(fā)來提高這種能力。因而圾浅,在這里掠手,我嘗試來提出自己對于編程能力的看法,編程能力就是把解決方案用代碼呈現(xiàn)出來的能力狸捕。具體來說喷鸽,一個庫實際上就是一個解決方案,用來解決某類問題灸拍,比如正則表達式庫做祝,用來處理正則表達式砾省,而編程能力實際上就是重寫這個庫,實現(xiàn)同樣的功能混槐。如果能夠做得更好的编兄,不論是擴展性,執(zhí)行效率或者說更加容易使用声登,這些的改進都可以說是編程能力更強的一個表現(xiàn)狠鸳。在這里寫代碼= 解決方案 + 代碼實現(xiàn),當然如果在解決問題的時候悯嗓,在解決方案上能夠有很好的創(chuàng)意碰煌,那么就可以說是一個Hack了,最后绅作,如果不僅僅是解決問題芦圾,還能夠提出新的問題,那么無疑是頂級黑客俄认。不過能力是一步步提升的个少,先做一個優(yōu)秀的程序員,做好代碼實現(xiàn)的部分眯杏,然后一步步打怪升級夜焦。在這里現(xiàn)在可以說代碼實際上就是解決方案的一種表現(xiàn)形式,那么為了做好代碼實現(xiàn)岂贩。無疑需要做到以下三件事情:(1)理解解決方案茫经,如果不理解結(jié)局方案,那肯定無法寫出正確的代碼萎津;(2)利用具體的語言寫出代碼卸伞;(3)對代碼進行重構(gòu)優(yōu)化。因而锉屈,提高編程能力的思路就出現(xiàn)了荤傲,針對流程中的每個環(huán)節(jié)單獨進行強化。下面分別來描述:
理解解決方案颈渊。這點無疑是不容易的遂黍,因為解決方案只是一個大致的思路,或者說只有關(guān)鍵環(huán)節(jié)俊嗽,往往也是描述不清楚的雾家,如同偵探,你掌握了一些證據(jù)绍豁,但是并不足以完成找到犯人芯咧,你還需要做一些工作,也就是把描述性的語言轉(zhuǎn)換成偽代碼,有了偽代碼唬党,任何一個程序員鹃共,利用任何一種語言都可以實現(xiàn)編程。那么如何具體來提高呢驶拱?個人覺得就是劃出數(shù)據(jù)的流程圖霜浴,首先用數(shù)據(jù)結(jié)構(gòu)描述問題,而后思考數(shù)據(jù)怎么傳遞蓝纲,到達最終想要的形式阴孟,通過畫圖,就可以直觀不重不漏的完成這一工作税迷∮浪浚可以先劃出已經(jīng)知道的解決方案的流程圖。實踐幾次箭养,就會有一個比較深刻的見解慕嚷,也會在后續(xù)工作中更加熟練,當然毕泌,這塊核心還是算法的問題喝检,不過,流程圖的使用無疑可以提高你的效率撼泛。
用熟知的方法寫出代碼挠说。這點就是要熟悉所用語言的特性,包括基礎(chǔ)的語法和高級特性愿题,此外损俭,還需要知道有那些常用的模塊和庫等可以直接使用來解決問題,沒必要浪費時間去做重復的無用功潘酗。這個就是在兩個方向針對性的去看書學習杆兵,此外,最重要的還是多使用語言以及這個模塊崎脉,才能夠真正的掌握拧咳。
代碼重構(gòu)伯顶。實際包括很多內(nèi)容囚灼,可以是小的改變,也可以是推翻重來祭衩。圍繞擴展性灶体,可用性,可讀性掐暮,可以進行專門的提升蝎抽,這時最好的方法就是找公認在這些領(lǐng)域具體這希些特點的開源項目,根據(jù)方案重寫代碼,反復對比修改樟结,指導對于重構(gòu)有了直覺上的認識养交,而不是理解了概念。
最后瓢宦,在實際的編程過程中碎连,這三個步驟不是那麼分明,這里只是為了為了方便理解驮履,做這樣的區(qū)分鱼辙,因為腦海中又有這樣一個概念們,就可以針對性來調(diào)高自己玫镐,這對于刻意練習無疑是必不可少的倒戏。當然,也可能有別的思路恐似,這里僅僅提供個人看法杜跷,僅供參考。
關(guān)于工作習慣矫夷,實際上是一個老生常談葱椭,就是說不止一次,一段時間按照上面做口四,而是讓整個過程變成習慣孵运,在每一次編程都是這樣來的,才能夠真正的提升編程能力蔓彩。對于養(yǎng)成習慣治笨,最好的建議是立馬去做,堅持去做赤嚼,不過這樣的話帶不來任何的啟發(fā)旷赖。這里給出一點小建議:
(1)構(gòu)建個人的知識數(shù)據(jù)庫:方便快速準確找到可靠的消息更卒。這無疑是很重要一個建議等孵,不論是通過云盤存儲,通過博客記錄都可以蹂空。這里是一個很大的話題俯萌,目前也還在探索中,如果你有好的見解上枕,歡迎交流咐熙。
(2)搭建工作平臺辨萍;利用好github以及博客棋恼,此外比如論壇和qq群都合理使用。論壇以及qq群方便交流,用來收集資料和見解爪飘,而博客和github則是整理輸出所收集到的資料义起,這是一個閉環(huán)的過程,不斷地循環(huán)往復师崎,搭建起來這樣一個標準化的平臺并扇,后續(xù)要做的就是去搜尋,去寫博客和寫代碼抡诞。關(guān)于那些好的資源穷蛹,目前還在整理中,最常用的比如博客園昼汗,stacjoverflow肴熏,基本就可以解決大部分問題,還有就是官網(wǎng)顷窒。
⊥芾簟(3)學習工具提高工作效率。(好的截圖工具鞋吉,好的編輯器)打造習慣之所以堅持不下去鸦做,就是太痛苦了,因而谓着,你需要學習一些軟件泼诱,有了這些軟件,只要一時痛苦赊锚,但是治筒,一旦學會了使用,整個效率就會大大的提升舷蒲,最終收獲到意想不到的回報耸袜。
所以,最后牲平,總結(jié)來說堤框,你需要關(guān)注以下東西:(1)偽代碼;(2)代碼重構(gòu)技巧(擴展性纵柿,效率提升蜈抓,可讀性,可維護性藐窄,易于使用性)资昧;(3)基礎(chǔ)的知識點的掌握程度。世界有天才荆忍,但是你不會和天才競爭,你需要和不是天才的人競爭,你如何脫穎而出刹枉,答案是:正確的工作方向+正確的工作方式叽唱,最后補充一句,優(yōu)秀是一種習慣微宝,你只有拼盡全力人后受罪棺亭,才能夠在人前看起來輕而易舉。