給好學進取的開發者的一些建議(自學故事)

原文鏈接:Tips for Aspiring Developers (Self-Taught Story)程序員


就像是一個不斷髮展的科目,天天都有新人加入,其中,"我該學什麼編程語言","我怎麼開始","我怎麼找到一份工做","我該從何處學習"等等是最多見的廣泛問題。編程

這些都是有效的問題,而且,但願這篇文章能幫助大家更好的管理這個不斷變化的科目,或許變的比以往更好。網絡

注意: 請不要徹底以個人建議爲標準,我但願你保有本身的見解。他們大多數來源於我我的的經驗,以及我周圍人的經驗,以及我在網絡上與他人的交流。另外,如標題所示,本文並不只僅只針對於開發人員,而是一個但願進取的人,或者剛剛踏入某個領域的人。框架


我該學什麼編程語言

這多是最常被問到的問題了。你對編程很感興趣而且決定學習一門編程語言,可是,選誰呢?機器學習

在我看來,一開始並無什麼這個語言比那個好。選擇一門語言很大程度取決於學習他的人對這門語言的癡迷程度。有些人傾向於 Web 開發(PHP & JavaScript 多是最爲人熟知的),有些人傾向於遊戲開發(C#, C++),有些人傾向於桌面應用開發(Objective C, Swift, Java)而且有的傾向於各個方面(Java, C#, Python)。這兒有無數種語言能夠選擇,有些專一於某個領域,有些則相反。編程語言

若是你真的瞭解本身喜歡的領域,那麼你的選擇就會比較明確,但若是你不能決定是隻專一某個領域,仍是多面接觸,那麼較好的選擇就是被用於大多數領域的語言,好比 Java, C#, Python等。學習

有些人可能會對此有爭議——像 Java 和 C# 那樣的語言並非開始的較好選擇,有些觀點是認爲初學者應該從C 或者 C++ 開始入門打基礎,可是我我的的首個編程語言是 Java,我和他的聯繫很深,我很是喜歡和他一塊兒工做。我很高興我能爲 Java 寫一些新書,或者可與其一塊兒使用的任何技術書籍。測試

Java 和 C# 有許多類似之處。資源和內存管理的差別使 C# 在遊戲開發中成爲更好的選擇 ,即便 Java 的速度和內存管理多年來已經獲得了顯著的改善和提高,C# 仍然被選擇適用於遊戲領域,而且一段時間內仍會如此。而在另外一方面,製做大型企業 Web 和桌面應用程序一般使用 Java 完成,不過我不會再多說了,由於這開始偏離主題了。網站

Python 最近愈來愈受歡迎了,而且行業內的使用量也在增長。他被用於遊戲開發,Web 開發,機器學習等等。正如我所知的,他比前兩個更容易學習,因此對於初學者來講這可能會是一個不錯的選擇。編碼

我怎麼開始

你應該去上大學嗎,你應該報名參加課程嗎(傳統的或在線的),你應該買些書籍嗎?

我不認爲成爲一名合格的開發者必須須要大學。不少人在大學時很失落,而且不以爲他們得到了足夠的知識。在我看來,不管你身處什麼環境,不管好壞,只要你想學,你就會學到的。

一開始我去參加了本地的一些課程,這是我開始打基礎的地方,而且我還能夠在這之上再創建一些基礎的事物。接下來的幾年裏,我一直致力於購買像 Udemy (不過這網站emm,我就推薦一下慕課,實驗樓啥的吧)這樣的網站上的課程,並在像 Packt Publishing (至於這個我推薦一下圖靈社區)這樣的網站上購買書籍。

不用說,我還很是依賴論壇和社區,StackOverflow 成爲了我最好的夥伴,YouTube之類的,我見過不少人都很樂意在網上提供幫助,而且社區真的幫助了我不少不少。

我還注意到一個常見的現象,就是人們一般會關注學習一個事物的前置條件。就像"我須要擅長數學嗎","我須要瞭解物理嗎","這對我來講是否太複雜了"之類的。我不肯定這些想法事怎麼來的,老實說。是的,數學好是一個加分項,有些領域須要普遍的使用和理解數學,好比人工智能和深度學習。可是請明白,對於大多數領域,瞭解基礎,基本數學是正常的。你不須要成爲一位數學專家來學習編程。

我甚至遇到不少對數學並不感興趣的人,在編程領域學習過一段時間後,發現編程更容易理解,更有趣。

瞭解一些相關概念或者一些簡單的計算機科學在學習編程方面是一個優點,但這不是必須的。

在我看來,編程自己並非那麼的複雜,學習語言的語法並不難,由於大多都邏輯清晰使用簡單。可是,成爲一個優秀的程序員須要知道如何使用語言的語法來使其更加高效的工做。他須要具備通用性和實用性,有時那會是一個抽象的方法。而且那須要經過大量的思考並且這是很是關鍵的部分。幸運的是,他們不須要是與生俱來的特性,若是在一開始他就是有缺陷的,能夠經過其餘方式去實現。

我能夠在哪裏學習

我我的的見解是,在哪裏均可以學習。不管環境或是周圍的人如何。但我想回答這個問題的更好的方法是舉幾個例子。

網上有許多免費或者付費的服務,你可使用他們開始學習!

這裏是幾個例子:

  • CodeAcademy - 一個很是受歡迎的網站,擁有着良好的聲譽。該網站提供了一種互動的方式,經過提供部分理論來平衡實踐和理論,你能夠在線使用他的內置編譯器來練習你所看到的內容。
  • freeCodeCamp - 他有些不一樣,首先他關注理論,而後是練習,他支持你創建本身的項目,得到證書,並將開源項目添加到你的簡歷中。
  • CodeWars - 本文後面有一個關於他的單獨內容。
  • W3Schools - 主要關注 Web 開發,這是學習HTML, CSS, JavaScript等技術的較好的場所之一,尤爲對初學者來講。
  • Udemy - 個人最愛之一。Udemy 提供各類各樣的課程,並且很便宜。在我看來,我更喜歡付費課程,而且再強調一下 Udemy 的課程真的便宜。不要被矇蔽了,雖然你常常都能看到價格標籤是 $ 200 - 300, 可是那只是一種營銷手段。Udemy 一直都有各類折扣。 一次我沒有再折扣時間內得到一些課程,以後才迎來了一場大折扣,預計每門課程不超過 $10 。
  • edX - 由麻省理工學院和哈佛大學提供支持的知名教育網站。包括一些免費課程和付費認證。
  • Khan Academy - 另外一個受歡迎的網站,提供各類領域的課程。
  • Udacity - 提供編程相關或者非相關的免費課程,以及有償學位和證書。
  • Packt Publishing - 個人另外一個最愛。Packt 的書從不讓我失望,而且我很高興總能獲得一些新事物。不幸的是,他們的書至關貴,可是幸運的是,你仍是能夠享受折扣並以便宜的價格購買-約 15$ 美圓左右。

老是保持好學的心

我認爲好學是很是重要的。這是一個天天都在變化的科目。一年前的理想解決方案,如今可能就被淘汰了。我去年買了一本 Angular2 的書來擴展個人工做領域,可是我仍然尚未閱讀他,而後忽然間我發現,Angular6 幾個月前已經發布了。

我喜歡教學,並認爲這是進步的一個重要方面。愛我所作的事情讓我天天都能學到新東西,而學不感興趣的事或者強制性的學習會讓我很難受。我不認爲這是時候學習而且學習幾個小時了。我注意到本身正在閱讀新文章,獲取最新的信息,併爲他的樂趣製做應用程序,測試本身的挑戰,只是由於他頗有趣。

老實說,學習這些須要花費大量的時間,保持不斷的跟進和學習,但若是你喜歡這樣作,那就不難了。

"成爲開發人員"須要多長時間

"成爲開發人員",這是一個須要討論的主題,而另外一個則沒有答案。

我能夠告訴你的是,一般平均須要多長時間才能達到能夠開始工做的水平。

這取決於學習的人本身,但學好任何一門語言都至少須要一年的時間。可是要記住,一旦你"成爲一名開發人員",你就永遠不會中止學習。

年限 知識水平
1 年 一年的知識,你應該可以建立簡單的應用程序,而且至少具備一些與你選擇的語言相關的流行技術和框架的經驗。
2 年 我認爲至少須要 2 年的學習才能被認爲是初級開發人員,可以真正的負責一個項目的開發。
3 - 4 年 3 - 4 年的時間,你能夠被認爲是一個成熟的開發人員,或者稱爲中級開發。
4 年或以上 這也取決於你自身,但我常常看到 4 年以上的開發者被稱爲高級開發。

請記住,僅僅是投入你的時間並不會讓你成爲開發人員。還要加上你投入的努力。有時擁有 2 年經驗的人可能比擁有 3 年經驗的人更好。這意味着個人表格僅用做與參考,或者做爲你在不久的未來可能投入的時間的概念,去看到一些結果。

失敗

在某些事上作錯了,是很常見的事,不管是製做在線平臺仍是AI,視頻仍是遊戲或其餘任何東西。

當我以爲我沒法作任何事時,我老是感到疲憊,我陷入了"編程死區",老是會卡在一樣的錯誤上,有時甚至是好幾天。這讓我感到絕望。我不得不認可,這並不老是那麼容易,可是當你終於解決了他,便能體會到什麼是"山窮水復疑無路,柳暗花明又一村"。經歷這些起伏是在任何領域取得進步的基本過程,畢竟,勝敗乃兵家常事,你得學會坦然受之。

專一於一件事

成爲一門語言的大師,好過成爲全部領域的學徒,這會是一個好的起點。像是 DevOps 這樣的潮流很受歡迎,在一個職業中統一了不少領域,但我不建議初學者學習。若是你但願可以完成常規團隊所作的一切,請便,但那須要大量的知識,意願和經驗才能作到這一點。

實踐

實踐可讓你找到問題所在,這是編程的一個很是重要的特性。一旦開始編程,實踐也將提升你的技能。

根據個人經驗,CodeWars 是訓練和實踐的好地方。

CodeWars 爲 Java, PHP, Python, Ruby, JavaScript, C#, Clojure, Go, SQL, Swift, TypeScript, C, C++等一系列不一樣的語言提供了無數的挑戰。

他是由我所熱衷的傳統東方風格的形象製做的,我很喜歡他們介紹的 Katas (我的訓練/挑戰) 和 Kumite (陪伴/挑戰他人) 的榮譽系統,他會隨着每一個完成的Kata 或 Kumite 增長。你從 8kyu 一路前進到 1kyu,不就像是一個初入江湖的少年最終成爲一個名滿江湖的高手同樣嗎。

CodeWars 有一個龐大的社區,你能夠學到不少東西。

總而言之,萬事開頭難,不要氣餒。這些 Katas 不容易解決,須要你的知識和智慧。

不必從新發明輪子

在大多數狀況下,沒有必要從新發明輪子。你能在網絡上找到大多數解決方案,隨時可使用。使用他人的解決方案,可讓你專一於本身的工做。雖然從頭開始作全部事請是有益的,可是也讓你的願景變得模糊,並使你偏離原來的軌道。

試着閱讀別人的源碼

即便每一個人都有本身的編碼風格(命名,格式化等),你也應該去試着閱讀理解他人的源碼。

當你進入辦公室或團隊的開發環境時,你必須與他人合做,你必須可以理解他們寫的代碼。團隊合做能夠幫助你更好的維護和升級現有的代碼,同時那會改變你本身的風格,而只有你改變了風格,纔會致使你從新發明輪子。

在你學會跑以前先學會走

若是你剛接觸某些事物,那麼在嘗試這個事物的高級用法以前,請先創建一個紮實的基礎。

若是你試圖強制運行,可能CPU會直接爆炸(233我就是皮一下)。

爲了以後的高樓大廈,請先打好地基。

成爲社區的一員

成爲社區的一部分是一種典型的人類特徵。咱們喜歡整理和組織咱們感興趣或有益的事物。若是你的城市舉行有關計算機科學或某種你感興趣的編程語言的聚會,那還等什麼呢!

不管你的知識水平如何,那不阻礙你和他人交流討論。你可能還會找到志同道合的其餘人。我常常和朋友們交換書籍和課程,咱們每一個人都批量購買和分享資料,因此即便你預算很緊張,也不難用這種方式得到有用的資料。

寫註釋文檔是一件好事

這不是最有趣的事,可是對於你本身和你的團隊都是很是有益的。若是你寫了某個功能而且一段時間沒有使用過,你可能就會忘記他是如何工做的。這件事發生在我身上時,從新審視項目就會讓我很迷茫:'我在這裏作過什麼?'。

這會致使大量時間浪費在理解舊代碼的功能上,可是隻須要寫一些簡單的註釋文檔,這將節省全部人的時間。

血淚史讓我必須告訴大家,養成這個習慣,是很是很是有用的。

結語

說了這麼多,是時候結束了。我但願這篇博客能夠幫助任何踏上這條路的人,我但願個人我的經歷能夠經過這種方式回報社區。但願你能從中獲取有用的信息。

Good Luck!

相關文章
相關標籤/搜索