淺論自學成才的程序員如何提高自我

有事者,事竟成;破釜沉舟,百二秦關終歸楚;苦心人,天不負;臥薪嚐膽,三千越甲可吞吳。這句話,古今往來不知道激勵了多少寒門學子。在今天,這句話用在那些自學成才的程序員身上,也是極其合適的。你知道嗎?有很多著名的程序員,其實並不是科班出身,而是靠自學成才的半路出家的“野生程序員“,比如 Bill Gates。如果你不是科班出身的程序員,而是靠自學成才的,那麼該如何提高自身呢?今天,我們來聽聽過來人 Matthew MacDonald 分享的心得和經驗。

如果你是自學成才的程序員,可能會遇到一些盲點,本文爲你介紹瞭如何查漏補缺的方法。

如果你是一名開發人員,你可能會有一個如何走上編程之路的故事,但我並不是指你第一次是如何學會編寫代碼的故事,儘管這個故事可能與本文要講的內容有所重疊。我的意思是,當你第一次決定用邏輯和軟件指令來解決一個新問題的時候;當你決定將代碼作爲永久有用的工具放入你的工具箱的時候;事情轉變的那一刻,你決定成爲一名真正的程序員。

我的編程之路,與大約三分之一的專職程序員一樣,並沒有正式的計算機科學學位。但我從小就喜歡鼓搗電腦,是傳奇的 QuickBasic 和 VB 伴着我長大的,而這些愛好在當時,仍然是一種新奇的事物。我知道,不管我最終是否會進入計算機領域,這個巨大的米色盒子(譯註:所謂的米色盒子,就是個人電腦主機,當時主機體積比今天大得多)將會以某種形式,永遠成爲我生活的一部分。但在我上大學的時候,我更感興趣的是學習那些我自認爲並沒有機會自學的課程,比如粒子物理。

但也許這並不是一個壞主意,因爲,我確實找到了一條通往專業編程的道路。當我在一個不那麼有趣的崗位上工作時,我就利用空閒時間來學習和考取證書。不久之後,我就進入了一個全新的領域,並突然爲之着迷,比如密碼學、網絡協議和數據庫優化等。當然,我也開始編寫程序來填補我在公司工作中的空缺,比如報告工具、訂購工具,以及可以完成本不該做某些事情的軟件,比如依賴不穩定的 ActiveX 控件。不久之後,.NET 出現了,我遇到了一些非常聰明的人,並且難得有機會重塑自己,並重置了 Microsoft 出色的平臺。剩下的就是歷史了。

作爲一名自學成才的程序員,我很清楚我的基礎並不完美。當然,也有未受過正規教育而自學成才的軟件傳奇人物黑客天才。但是,如果你不是神童,而是一個普通人的話,那麼自學技能就會伴隨着一個巨大的“星號“(*)。有差距,也有盲點。對於許多自學成才的程序員來說,他們很難確定自己到底缺少了哪些知識或技能。因此,我寫下本文的初衷,就是爲那些自學成才的開發人員提供提高技能的快速指南。

你不知道哪些事情你還不知道

自學編程最大的侷限性就是,你不知道哪些事情你還不知道。是的,無知確實會發生在任何人身上,哪怕他擁有博士學位。但是,由於自學成才的程序員會堅持不懈地專注於實際目標,如建立網站,讓應用程序運行,將數據從 A 點傳到 B 點,因此,他們更容易跳過那些看上去 “沒什麼大用”的理論內容。

以下是一些來自計算機科學核心的話題,而自學成才的程序員往往會繞過這些話題:

  • 算法。 因爲編程語言實現了它們自己的排序和搜索,所以自學成才的程序員總是傾向於學習如何使用它們,而不是去了解它們的工作原理。
  • 計算理論。 這是關於計算機如何解決問題,以及編程語言如何構建的一門科學。從有限狀態機到 Λ 演算,在這一類中,有一大堆重量級的主題。
  • 純數學。 傳統的計算機科學涉及範圍廣泛的重要數學主題,包括線性代數、微積分、概率論和統計學。
  • 大〇符號法(Big O notation)。 這個改編自數學領域的工具,讓開發人員能夠描述並比較不同算法的整體性能。

當然這並不是說,自學成才的程序員就不能自己學習這些課程了。只是,當有另一個新的 JavaScript 框架需要解決的時候,你就很難將自己投入到理論中去。而且,由於自學成才的程序員專注於實踐項目和工作代碼,他們甚至可能沒有意識到實際代碼表面下的理論“冰山“。

縮小計算機科學理論差距

雖然計算機科學理論可能不會有立竿見影的效果,但它還是有其他好處的,只不過沒有那麼明顯罷了。實際上,前面列表中所有看似深奧的主題,在適當的時候可能都是至關重要的:

  • 算法。 有時候,默認選擇並非最佳選擇。如果你有更深刻的理解,你就會知道什麼時候該走出老路,或者如何解決一個不尋常的問題。

縮小差距:閱讀 Algorithms in a Nutshell(《果殼中的算法》),這是我最喜歡的一本書,或者你可以去可汗學院( Khan Academy)轉一轉

  • 計算理論。 大多數程序員永遠不會去構建自己的編程語言(雖然你可以這麼做)。但是計算理論爲你提供了抽象概念,幫助你理解不同語言之間的聯繫。如果你需要從過程式編程語言轉到函數式語言,那麼你就會感到掌握計算理論後,完成這一過程特別方便。

縮小差距:這個是很難自學的領域之一,但你可以通過免費的虛擬教室來學習很多東西。Neso 學院就有我最喜歡的關於這一主題的系列講座,有 100 多個小視頻。這些講座講得很深入,但每期只需十分鐘就能看完。

  • 純數學。 許多程序員在生活中,甚至到退休的時候,連一行高等數學都沒有接觸過。但是,如果你正在從事機器學習、自然語言處理、數據分析或軟件開發前言的十幾個其他主題中的任何一個,那麼硬數學還是必不可少的。

縮小差距:如果你已準備好動手,可以從非常容易理解的 A Programmer’s Introduction to Mathematics(《程序員數學指南》)這本書開始,這是隨你付的下載版本。

譯註: 隨你付,Pay what you want (PWYW)是賣家按所望付費 —— 有時也含免費 —— 的定價策略。商品或設最低價和 / 或指導建議價,買家也能出更高價購買。

  • 大〇符號法。 要成爲一名高效的開發人員,一定要有一種可以用來與同行交流的速記工具。雖然你不會經常使用大〇符號法(也許永遠不會用上),但如果你需要討論如何優化複雜的分佈式系統,它可能就會派上用場了。

*縮小差距:*大〇符號法很很好學。你可以在這裏找到一個不錯的概述。

我爲你提供一些好建議。如果你是自學成才的程序員,那就抽點時間(比如 5%)去研究更多的理論性課題。就用上面列表中的鏈接即可。就算你在日常工作中用不着這些知識,但它也能拓寬你的視野,培養你的好奇心,並幫助你理解計算機科學中一些更深層次的奧祕。畢竟,正如每個經驗豐富的程序員都知道的那樣:除非你去使用理論,否則你永遠不會去使用。

你的信心何在?

規劃計算機教育的最重要好處,可能並不在於你學到了哪些關於計算機科學的知識,而是在於你學會了如何看待自己。

無論是自學成才的程序員,還是受過正規教育的程序員,當他們剛進入職場時,都會存在知識差距。但是,自學成才的程序員更可能會感受到一種揮之不去的恐懼:擔心他們的技能不完整或不合理。他們還擔心,有些事情他們應該知道,但卻從來沒有通過 Google 搜索覈實過。他們還擔心其他語言和計算理論的核心知識。還有一件令人驚訝的事是,他們居然還擔心發音的問題,認爲用錯誤的方式來講述編碼器行話時會暴露出他們是 “江湖騙子”。通常強調的詞彙包括技術(SQL、ECMAScript、JSON、Wasm)、技術術語(貝葉斯、元組),甚至是符號(#!、或 “hashbang”。)。

然而,自我懷疑並不全是壞事,畢竟,它可以驅使你去尋找新的知識不是?但是,當你需要向客戶、同事或潛在僱主表明自己是程序員時,這些不安全感可能會傷害到你。

解決這些問題的最好辦法就是參與儘可能多的對話。你不可能研究軟件開發的每一條途徑,但你可以通過與儘可能多的不同類型的程序員打交道來拓寬你的視野。下面,我提供了一些建議:

  • 參加當地聚會。 這些聚會沒有黑客馬拉松那麼令人生畏(儘管這些也很棒),而且你還會發現,經驗豐富的程序員出人意料地如此渴望社交和分享他們的知識。
  • 參加會議。 如果你能負擔得起,沒有什麼比圍繞你感興趣的主題組織的面對面會議更能抓住新技術的興奮點了。這就好比軟件框架下的快速約會一樣。你還可以通過 “感受房間的溫度”。(譯註:指參加會議之類)學到很多東西——換句話說,對演講和研討會的反應可以幫助你判斷哪些技術背後有社區熱情,哪些新項目可能會蓬勃發展。
  • 加入開源項目。 這個門檻就更高了:你必須真正地編寫代碼,而不僅僅是喝咖啡和聽音樂,但帶來的回報是巨大的。在結構化的環境中,哪怕是一個簡單的項目,與其他程序員進行交互,也能夠訓練你從十幾個不同的角度來看待一段代碼。

作爲附帶的好處,人脈關係網對你職業前景的好處遠超於建立一個最好的投資組合網站。

所有編程都趨向於自學

對專職程序員的調查表明,自學成才的程序員始終是少數。但換一種方式來提個問題,情況就不同了。

例如,以 Hacker Rank 的調查爲例,它發現了這麼一種現象:自學成才和只在學校接受教育的開發人員,在所有程序員中所佔比例都略低於三分之一。但是,將正規學習和自學結合起來的開發人員的比例反而超過了這兩者,佔到了近 38%。

圖片

這並不奇怪。在瞬息萬變的軟件開發世界中,每個程序員都離淘汰只有幾步之遙。最成功的程序員,都是那些能夠不斷自學的人。

正規的計算機科學教育是一種優勢。但自我提高的能力也是必不可少的。

這就是自學成才的程序員的收穫。這並不是說,有正規計算機科學教育背景的程序員就沒有自學的能力。但自學成才的程序員已經面臨着一場嚴峻的考驗:他們一無所有,就一頭扎進去,擁有的只是好奇心和赤裸裸的野心,就學會了他們需要的東西。這項技能,將會爲你的整個職業生涯帶來回報。

作者介紹:

Matthew MacDonald,教師、程序員、重磅書籍的作者。

原文鏈接:

https://medium.com/young-coder/what-does-the-self-taught-programmer-miss-cecce2f71b27

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章