學習編碼:旅程的智慧和工具
已發表: 2022-03-11編程是一項很棒的技能。 它在個人和專業層面都非常有益,讓您能夠構建、修補和發明。 它可以為各種職業道路打開大門,並帶來巨大的好處,無論是可觀的薪水,在您想要的時間和地點工作的自由,還是以上所有。
越來越多來自不同背景的人決定學習編程也就不足為奇了。 但是,每個完成這項任務的人很快就會面臨一個不愉快的現實:學習編程很難。
起初,很多編碼都非常複雜和令人困惑,沒有任何該死的意義。 出乎意料的是,“我不明白”的感覺可能會在旅途中持續很長時間,讓曾經明亮的初學者感到絕望、迷茫,並準備放棄。
這個故事的寓意是:做好準備。 通往程序員天堂的路還很長,如果一開始沒有正確的心態,它很快就會失去吸引力。
在本文中,我將嘗試為您提供一些指導,說明您的旅程會發生什麼,如何最好地進行,以及在此過程中您可能會發現哪些工具和資源對您有所幫助。
期待什麼
也許這很明顯,但首先要確保你明白編程的核心是一門技術學科。 你最早學習的技能需要大量的“精確性”和“正確性”,而試圖偷工減料會讓你一事無成。 您將必須至少學習一點數學,以及許多可能感覺像數學的東西,例如程序邏輯。
關鍵是,學習編程的基礎需要大量的專注和實踐。 但是,無數人,無論是技術人員還是非技術人員,都已經在您面前完成了這一旅程,因此請不要氣餒。 正如我們將看到的,對於像您這樣的人來說,有大量的資源可以幫助使這個過程盡可能簡單。
編程的學習曲線在一開始是最陡峭的。 有大量的“基礎知識”需要吸收,包括編程語言的各個部分(表達式、變量、數據類型、運算符、循環、條件語句、函數、類),以及了解計算機的多少的技術您的代碼將使用的時間和內存空間(複雜性)。 您將編寫很多第一次無法運行的代碼,因此您將不得不接受每個程序員存在的禍根:調試。
一旦你學會瞭如何編寫代碼,你將能夠學習如何編寫健壯的代碼。 使代碼高效、易於閱讀和理解以及易於擴展,是一門藝術,並且在不斷發展。 您將能夠開始探索不同的軟件理念,並從簡單的“程序員”轉變為“軟件架構師”。 這也是一個需要大量時間和練習的過程,但你越熟練,你就會發現越多的機會為你敞開。
如何學習編碼
每個人通往編程天堂的旅程都是不同的,但有一些好的原則可以讓所有旅行者從中受益。 如果您剛剛開始,這是我推薦的基本流程:
1. 選擇您的目的地:選擇一種語言,任何語言
如果您認真學習編碼,那麼您選擇的語言真的無關緊要。 大多數流行的編程語言都有相同的基本概念,當你真正掌握了用第一門語言編程的竅門時,選擇一種新的語言會比第一次更容易。 如果您正在通過大學學位課程或類似課程學習,您的語言可能會為您選擇。
無論如何,除非你確切地知道從長遠來看你想做什麼,否則我建議考慮的只有五種語言,它們在易於學習、獲得的知識的多功能性和豐富的長期工作之間取得平衡前景: Ruby 、 JavaScript 、 Python 、 C和Java 。
以下是每個方面的一些一般說明,以幫助您做出決定:
解釋語言
解釋語言更容易上手。 這是因為他們的源代碼一寫就可以運行。 相比之下,編譯語言在編寫和運行代碼之間需要一個額外的步驟。
結果,解釋性語言可以加快編碼速度,但它們不能有效地使用計算機資源,而且更容易發現錯誤。 它們最適合性能不是優先考慮的應用程序。 這些語言在 Web 開發中非常流行。 事實上,其中之一,JavaScript,是唯一可以直接在網絡瀏覽器中運行的語言,有助於它迅速崛起為最賺錢的語言之一。
語言 | 優點 | 缺點 | 常用於 |
紅寶石 |
|
|
|
JavaScript |
|
|
|
Python |
|
|
|
編譯語言
編譯代碼時,它會在運行之前從人類可讀的代碼轉換為優化的機器代碼。 結果比解釋語言運行得更快、更有效。 作為其工作的一部分,執行此操作的編譯器必須確保已編碼的所有內容都“有意義”,因此,它可以識別和防止解釋語言容易受到的許多類型的錯誤。
出於這個原因,使用這些語言很難擺脫錯誤或糟糕的代碼。 它們將迫使您更深入地了解“幕後”真正發生的事情,並且您將了解更多關於計算機如何真正工作的信息。 代價是這些語言更加勞動密集,而且對於初學者來說學習起來通常更具挑戰性。
編譯語言用於需要性能和可靠性的應用程序,包括嵌入式應用程序,它可能運行在具有嚴格資源限制的硬件上,以及大型、複雜的應用程序,即使是一個小錯誤也可能造成嚴重破壞。
語言 | 優點 | 缺點 | 常用於 |
C |
|
|
|
爪哇 |
|
|
|
HTML 和 CSS:不是編程語言
應該注意的是,幾乎所有曾經存在的網頁中都使用的 HTML 和 CSS不是編程語言。 它們是表示性語言,用於定義事物的外觀和內容,但不定義其行為方式。 儘管如此,它們可能是一個很好的起點,因為它們更容易上手,並且會教你如何正確輸入內容。 此外,如果您打算進行任何 Web 開發,無論如何您都必須在某個時候學習它們。
2.從小處著手
學習需要時間,要吸收的東西很多。 如果您嘗試在第一天構建一個完整的應用程序,那將是行不通的。 為了讓自己免於沮喪,從解決小而簡單的問題開始,然後逐步提高。
例如,傳統上學習一門新語言時編寫的第一個程序是“Hello World”程序,它只是將“Hello World”這個詞打印到屏幕上。 在大多數語言中,編寫一個更簡單的程序幾乎是不可能的,而且顯然這個程序幾乎沒有實際用途。 但是,它仍然包含該語言的許多基本部分,因此非常適合向自己介紹該語言的類型。

從這裡,您可以編寫一些添加或減去一些數字的東西,然後是一些從用戶那裡獲取輸入的東西。 然後,您可以了解條件語句(一種做出決策的方式)和循環(執行重複性任務)。 很快,您將準備好構建您的第一個對象,此時您可以開始嘗試構建完整的應用程序。
3.要有耐心
編程的核心概念可能非常具有挑戰性。 如果您不知道計算機在更深層次上是如何工作的,那麼它們中的許多根本就不是直觀的。
例如,當我剛開始時,我發現調試是一個令人憤怒的過程; 感覺不像是編程。 我不會編寫新的代碼來完成很酷的新事物,而是會花一整天的時間來搜索我寫的東西,試圖弄清楚,“這次我是怎麼搞砸的?” 撓頭準備放棄。 最終,我會發現我在某個地方留下了一個分號,或者使用了製表符而不是空格,當我讓我的代碼再次工作時,這將是一天的結束。 我會覺得自己像個白痴; 感覺就像是在浪費時間。
這種事情會發生在你身上,它會讓你發瘋。 所以,成功的關鍵之一是:要有耐心,對自己輕鬆一點。 關於該主題的一些最佳建議建議關注過程,而不是目標。 如果你專注於你的最終目標(“我想在 6 月底之前建立一個網站”),你會灰心喪氣,覺得自己很失敗。 通過讓自己盡可能長時間地取得進步,你會更加成功。
4.練習練習練習
像任何技能一樣,要擅長它真的歸結為練習。 沒有什麼比做某事更重要的是,學習如何去做! 即使你每週只能抽出幾個小時,如果你經常練習,總有一天你會發現自己知道如何編程。 最終,您將對事物產生直覺,而一開始需要一整天的事情(例如追踪錯誤),現在可能只需要幾秒鐘。
當您覺得自己或多或少掌握了編程基礎知識時,開始您的第一個項目是獲得實踐的好方法。 想一想您想要構建的簡單應用程序,例如待辦事項列表或計算器(同樣,從小處著手),然後試一試。 這將教您如何解決建築和設計問題,並構建不同的部分,以便它們組合成一個工作整體。 這些是讓你真正稱自己為程序員的基本技能。
資源
根據您的目標、學習方式和方式,您可能希望在旅途中使用不同的資源。 為了幫助您確定哪些方法適合您,以下是您可以使用的一些工具的快速摘要,大致排序,從結構化學習到結構化學習較少。
結構化學習
如果您不將學習作為最高優先級,這是提供教師、家庭作業、測試、成績、截止日期和實際後果的選項類別。 這些是您必須去上課或退出該計劃的選項。
正規大學學位
最昂貴但對許多人來說最有價值的選擇,正式的大學學位將為您在編程和計算機技術領域的蓬勃發展奠定最佳基礎。 您將以學位的形式獲得對您成就的認可(進入專業市場時的主要優勢)。 但更重要的是,您將對計算機的所有事物有深刻而透徹的理解,而您編寫真正一流、有效的軟件的能力將反映這一點。
以下是您可以期望從任何體面的大學課程中深入學習的一些東西,而這可能更難在其他地方找到全面的指導。
- 電路- 幾乎所有計算機硬件的基礎物理。
- 數字邏輯電路- 如何用電路表示真理和邏輯結構。
- 微處理器和計算機系統- 如何組合邏輯電路以製造可編程計算機器。 所有這些小金屬針和印刷電線上發生了什麼。
- 操作系統- 如何對計算機進行編程以管理、組織和保護自身,並實現多個應用程序的安全運行。
- 數據庫- 如何存儲和復制大量數據而不會丟失、損壞或無法搜索。
- 網絡- 不同且不相關的計算機系統如何相互通信。
- 高等數學- 包括微積分和線性代數。 對於高級或前沿領域的任何職業來說都是必不可少的。
- 信號處理- 如何跨越模擬世界和數字世界的界限,反之亦然。
- 數值方法- 當現實世界的問題不能整齊地放在計算機中時。
計算機科學與工程學校會踢你的屁股,你將不得不犧牲並全身心地完成它。 但回報將是非常值得的。 我努力獲得自己的學位,但獲得學位的那一天仍然是我一生中最自豪的日子之一。
新手營
所謂的“訓練營”計劃應運而生,以滿足那些沒有時間或資源攻讀正規學位但願意努力工作並至少學習開始軟件開發職業所需的最低要求的人的需求。 在成本和所需承諾方面,它們介於正式學位和下面討論的自主選擇之間。
訓練營通常需要 8 到 12 週的密集學習,費用約為 10,000 美元。 它們在很短的時間內涵蓋了很多材料,在此期間您將不得不犧牲大多數其他追求。 但是,他們承諾讓您為現實世界的軟件開發做好準備,並讓您走上編程職業的快車道。 許多訓練營在職業生涯中達到高潮,或者試圖在畢業後不久讓你找到一份有薪水的工作。
訓練營是一個相對較新且具有爆炸性的現象。 因此,仍然很難衡量他們的成功率,而且許多人還沒有建立起讓畢業生就業的可靠記錄。 話雖如此,隨著這個蓬勃發展的新行業的不斷發展,可用的程序只會變得更好。 只要您仔細研究,您可能會發現這是您的完美選擇。
大多數訓練營都是本地項目,因此您必須查看您所在城鎮的可用項目。 如果您住在大都市,也許您可以在此列表或此列表中找到您要查找的內容。
半結構化學習
每天都有越來越多的資源可供那些在結構和指導方面表現最佳但沒有時間或資源致力於正式學位或訓練營計劃的人使用。 這些選項通常完全在線提供,並且許多是完全免費的! 隨著對此類服務的高需求變得明顯,這些工具在復雜性和交付價值方面迅速增長。 軟件開發課程自然推動了這種演變,因為通過軟件學習和教授軟件具有明顯的好處。
大規模開放在線課程 (MOOC)
MOOC 是一種了不起的資源,並且在為優質、負擔得起的教育提供公平競爭環境方面取得了重大進展。 它們提供了世界上最好的正規大學課程的大部分結構和指導,但任何人、任何地方只要有互聯網連接都可以在線訪問。 許多流行的 MOOC 也是完全免費的,儘管需要支付額外的費用(以及對學習的承諾),也可以獲得許多課程的正式學分,相當於大學學分。
網上有很多一流的MOOC平台,課程由世界最負盛名的大學教授教授,社區平台讓你和你世界各地的同學可以互相幫助學習。 以下是一些最知名的供應商:
- Coursera
- 埃德克斯
- 優達學城
請注意,正如所宣傳的那樣,這些課程提供大學水平的課程,因此您最好準備好努力完成它們!
指導教程網站
如果您喜歡結構和指導,但不喜歡截止日期,那麼有很多很棒的在線平台可以通過各種交付方式提供自動化的分步培訓。 有些是由視頻教程驅動的,有些是由文本驅動的。 許多包括交互式代碼編輯器,供您在瀏覽器中練習。 這些為您提供了極大的靈活性,可以按照自己的節奏學習,無論是每天結束時的半小時練習還是周末的 10 小時馬拉松。
雖然其中許多平台需要付費訂閱才能訪問所有內容,但大多數平台都提供免費試用,以便您可以立即開始,並自行決定它是否適合您。
- 卡恩學院
- 烏迪米
- 碼學院
- 代碼復仇者
- 代碼學校
- 樹屋
- 琳達
- 多元視野
這只是一個簡短的列表,因此請四處搜索,看看還有什麼!
非結構化學習
對於那些想找到自己的方式,或在空閒時間提高知識的人,沒有結構化課程的壓力,以下工具提供了一種自我導向的方法。 即使您打算採用上述方法之一,您可能會發現其中許多資源有助於補充您的學習或提供練習平台。
鑽探網站
如果您的目標只是練習解決編程問題,那麼互聯網再次滿足您的需求。 以下網站提供了不斷擴展的編碼挑戰集以及交互式編碼界面,用於解決問題、讓您的解決方案即時評分,以及將它們與其他用戶的解決方案進行比較。
- 鍛煉.io
- 檢查
- 代碼廚師
- 代碼評估
- 代碼戰
- 可塑性
- 黑客等級
視頻
被動學習編程的實用性有限,但如果你想吸收一些更深層次的概念,在會議之間或晚上喝一杯酒,這些系列講座是最好的。 如果您喜歡這類東西,請查看 YouTube 和網絡上的其他內容。
- 麻省理工學院開放課件
- 斯坦福大學系列講座
圖書
即使有所有可用的技術奇蹟,對於許多人來說,仍然沒有什麼比一本好書更能讓人深入研究並深入理解一個主題。 如果您喜歡這種方式學習,請查看 Toptal 的熱門免費編程書籍列表。
結束時
學習編碼是一個非常個人化的旅程。 每個人從不同的資源和不同的目標開始,並在此過程中遇到不同的挑戰和機遇。 不要擔心其他人在做什麼,或者他們是如何到達那裡的。 即使對於經驗豐富的程序員來說,旅程本身也不會結束,因為不斷有新的東西要學習。
所以,我給你的建議是,慢慢來,享受旅程! 有很多值得探索的地方,一個奇妙的世界等著你。 千里之行,始於足下。 這裡有一些好鞋。 祝你好運!