算法
經(jīng)典的計算機科學(xué)在這里。沒有算法知識的編程就像只有一種鋸的木工:你可以完成這項工作悦昵,但是它需要很長時間肴茄。
你可以把算法看成一種規(guī)律,當(dāng)你學(xué)習(xí)寫他們的時候但指,你正在做的是用規(guī)律去解決問題寡痰。正在使用數(shù)據(jù)結(jié)構(gòu)、模式和邏輯步驟棋凳。
當(dāng)你不知道如何去規(guī)劃你的想法的時候拦坠,你不知道如何去寫算法。
除非你學(xué)習(xí)了算法剩岳,否則你不光不會寫算法贞滨,你也不知道有多少算法其他人已經(jīng)寫了。
我花了四天試圖去解決如何完成一個隊列拍棕。當(dāng)我解決的時候晓铆,特別為自己感到自豪。直到我發(fā)現(xiàn)B.R堆在1963年已經(jīng)解決它https://en.wikipedia.org/wiki/Heap%27s_algorithm绰播。
設(shè)計模式
這個來自教育或者經(jīng)驗骄噪,有多種方式構(gòu)建你的代碼,每個都有錯誤的時候和正確的時候蠢箩。你要么需要沿途犯錯誤链蕊,學(xué)習(xí)什么時候使用每種模式,要么從已經(jīng)犯錯誤的人(一個老師)那里學(xué)習(xí)谬泌。
編程范例
面型對象編程不是道路示弓。函數(shù)式編程和響應(yīng)式編程也不是,它是一種方式呵萨。
有不同的方式來編程,每種方式都有它的目的跨跨。不僅如此潮峦,一些編程語言適合一種或者多種范式囱皿。
如果你有一個錘子,一切看起來像釘子忱嘹。
把它帶入自學(xué)編程中嘱腥,你會發(fā)現(xiàn)自己在敲釘子,螺釘拘悦,釘書釘和拇指釘齿兔。
我記得一個自學(xué).NET程序員有次告訴我,“這不是編程础米,除非它面向?qū)ο蠓治@也是為什么我不考慮JavaScript這種編程語言∑ㄉ#” 這是一個非常医寿,非常有缺陷的思想。
數(shù)據(jù)結(jié)構(gòu)
當(dāng)然蘑斧,編程語言會給你針對不同的數(shù)據(jù)結(jié)構(gòu)基本的想法靖秩。但同樣,它是一個基本的想法竖瘾。自學(xué)的程序員更傾向只堅持使用他們喜歡的編程語言的數(shù)據(jù)結(jié)構(gòu)沟突。只是因為某種數(shù)據(jù)結(jié)構(gòu)不是本來就有的,甚至是你的編程語言中的一個常見的結(jié)構(gòu)捕传,這并不意味著它不能存在惠拭。 當(dāng)然,這也意味著乐横,也許它不應(yīng)該存在求橄。
世界非常小,如果它們都可以存在一個數(shù)組內(nèi)葡公。
測試
也許這只適用我罐农,在你推送代碼到一個環(huán)境之前,有很多方法來測試你的代碼催什。 了解如何進行單元測試涵亏。
更重要的是,要學(xué)習(xí)測試驅(qū)動的開發(fā)蒲凶。
測試你的代碼和編寫可測試的代碼之間是有區(qū)別的气筋。
對我來說,《The Pragmatic Programmer》(https://www.amazon.com/The-Pragmatic-Programmer-Journeyman-Master/dp/020161622X)這本書對我是非常有幫助的旋圆。