版權聲明:本文爲北京尚學堂原創文章,未經容許不得轉載。html
馬克•吐溫在他的寫做生涯中,常遇到自學的做家,他對於他們的不謙虛而感到很是厭惡。他總結道:程序員
「自學的人一般不多能準確懂得知識,並且他所懂的內容,還不到有老師指導的人所學到的十分之一。除此以外,他還會炫耀,去欺騙其餘不思考的人,按照他從前所作的那樣去作。」算法
慶幸的是,在2016年,除去那些生活在沒有圖書館的鄉村,「自學成才」的人實際上已經很少了。事實上不都是從老師那裏學來的嗎?咱們在工做的時候,不也是依賴於那些寫了技術書籍,有思想性的文章,和 API 文檔的人嗎?編程
那麼自學的IT程序員到底有哪些不足呢?設計模式
算法數組
經典的計算機科學在這裏。沒有算法知識的編程就像只有一種鋸的木工:你能夠完成這項工做,可是它須要很長時間。微信
你能夠把算法當作一種規律,當你學習寫他們的時候,你正在作的是用規律去解決問題。正在使用數據結構、模式和邏輯步驟。數據結構
當你不知道如何去規劃你的想法的時候,你不知道如何去寫算法。編程語言
除非你學習了算法,不然你不光不會寫算法,你也不知道有多少算法其餘人已經寫了。函數式編程
我花了四天試圖去解決如何完成一個隊列。當我解決的時候,特別爲本身感到自豪。直到我發現B.R堆在1963年已經解決它。
設計模式
這個來自教育或者經驗,有多種方式構建你的代碼,每一個都有錯誤的時候和正確的時候。你要麼須要沿途犯錯誤,學習何時使用每種模式,要麼從已經犯錯誤的人(一個老師)那裏學習。更多精彩內容關注微信公衆號:北京尚學堂。
編程範例
面型對象編程不是道路。函數式編程和響應式編程也不是,它是一種方式。
有不一樣的方式來編程,每種方式都有它的目的。不只如此,一些編程語言適合一種或者多種範式。
若是你有一個錘子,一切看起來像釘子。
把它帶入自學編程中,你會發現本身在敲釘子,螺釘,釘書釘和拇指釘。
我記得一個自學.NET程序員有次告訴我,「這不是編程,除非它面向對象,這也是爲何我不考慮JavaScript這種編程語言。」 這是一個很是,很是有缺陷的思想。更多精彩內容關注微信公衆號:北京尚學堂。
數據結構
固然,編程語言會給你針對不一樣的數據結構基本的想法。但一樣,它是一個基本的想法。自學的程序員更傾向只堅持使用他們喜歡的編程語言的數據結構。只是由於某種數據結構不是原本就有的,甚至是你的編程語言中的一個常見的結構,這並不意味着它不能存在。 固然,這也意味着,也許它不該該存在。
世界很是小,若是它們均可以存在一個數組內。
測試
也許這隻適用我,在你推送代碼到一個環境以前,有不少方法來測試你的代碼。 瞭解如何進行單元測試。
更重要的是,要學習測試驅動的開發。
測試你的代碼和編寫可測試的代碼之間是有區別的。
自學的程序員一般缺乏謙遜的品質
謙遜是一種技能。就像其餘的技能同樣,從理論來講:參考更爲廣闊的軟件開發領域來了解自我。從實踐來講:知道何時要把衝刺階段的任務移交給一個知識儲備更好的團隊成員,在代碼審查時可以接受有建設性的批評等等。
提高咱們謙遜的品質的重要一步是意識到,即便咱們是在大學課程設置之外學習,咱們也並不是是真的「自學成才」。
不管咱們是在大學教室裏,或是在臥室裏看視頻學習,全部優秀的程序員都是站在老師們的肩膀上的。
做爲一個自學的程序員,你錯失的是一個(專業)詞彙表。它隨着時間而累積,但一般會反向而行。例如,有時你遇到一個問題並想出了一個了最佳解決方案,只是後來你卻發現這種「最佳方案」早就有名字了。你須要好幾年的實際編程經歷才能補上這個詞彙表。
另外一個有趣的問題是,做爲一個自學的程序員,我參與的開源軟件項目只用郵件和他人交流。我不知道怎樣去「說出」一些計算機技術。例如,我把SQL讀做」es-que-el」,而不是更常見的讀法」See-quel」。或是把 「I2C」 讀做 「eye-two-see」而不是」eye-squared-see」。
名師手把手教你學軟件開發技能,助你成爲一個高級軟件工程師,北京尚學堂Java培訓專一軟件開發培訓,提高學員就業能力,重點提高實踐動手能力。技術知識沉澱深厚的老師,讓你感覺Java的魅力,激發你對於編程的熱愛,掌握Java核心術,成爲真正的技術高手;經過大量全真企業項目瘋狂訓練,迅速積累項目經驗。更多精彩內容關注微信公衆號:北京尚學堂。
更多猛料!歡迎掃描上方二維碼關注北京尚學堂官方微信公衆號 ( 資料領取驗證消息:156)