新手該如何起步學習寫程式?身為過來人的心得與建議


學習寫程式是漫長而艱難的過程,不僅是對一般人而言,對於像我一樣,習慣視覺化思考的人來說更是如此。透過大學四年間不斷的學習與試錯,即使是從零開始,最終也能達成開發網頁、遊戲、上架APP的成就。接下來,我將從目標、資源等面向,分享我的心得與建議:

訂定清晰、具體、合理的學習目標

無論你想學的項目是什麼,在學習開始之前,我強烈建議你訂定一個清晰而明確的學習目標。思考與訂定學習目標的過程中,將幫助你建立必要的心理準備並提供持續學習的動力。我們可借助管理學大師彼得·杜拉克所提出的SMART原則來訂定有效且合理的目標:

原則思考問題
Specific(明確的)用一句話簡短、具體地描述學習目標
Measurable(可測量的)我的學習目標,可以透過哪些數據、指標衡量成效(例如完成某件事、學習完幾個單元或概念)?
Achievable(可達成的)考慮預期投入的時間與現在的程度,我的目標是可以達成的嗎?和我程度相近的人,通常訂定了什麼樣的目標?
Realistic(現實的)我的目標中,是否包含了天馬行空、不切實際的條件或成分?
Time-Bound(基於時限的)我預期投入的學習時間有多長?這些時間足夠我完成學習目標嗎?

※ 預期投入的時間可長可短,但不建議短於一個月或長於三個月,使目標的達成進度可更加被掌控、明確化。

如果你對於某些問題的答案沒有把握,你可以透過蒐集資料、詢問chatGPT等方式獲得或修正答案,直到你對於每個答案都感到十分清晰、肯定為止。

從大方向著手,避免過快聚焦細節

對於零基礎的新手而言,首先你應該從認識概念、工具著手,切勿過快聚焦特定的技術細節,避免學了很久後才發現這並非你所想要、需要的,徒然浪費時間。你可以思考以下的問題:

  1. 我所想學的程式領域,需要用到哪些開發工具或環境?我準備好這些工具及環境了嗎?
  2. 我所想學的程式領域,有哪些需要認識的基礎概念?
  3. 我所想學的程式領域,可以做到哪些功能、應用(無論想學與否)?

整體來說,學習的流程應該由概念循序漸進至特定主題然後技術細節,並不斷迭代循環。

學習時,建議區分概念、主題、功能、技術細節四個面向,並由大至小逐步限縮。

善用列點、圖表掌握整體架構

在正式進入寫程式之前,我建議新手可運用列點、圖表(無論是正式或非正式的)繪製程式的執行順序、邏輯,幫助掌握整體程式架構。

使用流程圖可幫助你時刻掌握程式架構,大幅降低後續debug的困擾。Photo by Kelly Sikkema on Unsplash

常見的程式圖表

繪製圖表的工具推薦

學習操作終端機與Git

mac上的終端機(Terminal)

平時我們操作電腦,是藉著「圖形化介面」來幫助我們完成各種操作,如:透過選單按下「新增資料夾」、將檔案移入垃圾桶以刪除檔案……等。當我們與圖形化介面互動後,電腦便會將操作轉化為一條條指令,接著按照指令完成我們想做的事。反過來說,即使只輸入指令,不需操作圖形化介面也能達成一樣的操作。例如,以下便是一行在mac系統新增資料夾的指令: 

Bash
mkdir hello //在當前位置底下建立一個名為「hello」的資料夾

雖然圖形化介面簡化了我們記憶指令、輸入指令的麻煩,但有時,我們想做的事卻不一定有圖形化介面可替我們代勞。這時,我們只好使用一個專門輸入電腦指令的地方——終端機代替。寫程式時,你會有非常多的場合要使用終端機:例如設定環境、安裝別人的程式庫等。因此,學習終端機將會是你學寫程式之前的必備技能!

Git透過不同的分支直觀地顯示程式碼的不同進度。Photo by Yancy Min on Unsplash

另外,如果說還有什麼是程式人必備的技能,那麼一定非git莫屬。git是一種版本管理工具,可以幫你記錄、追蹤程式碼檔案的變更,甚至還可以將檔案回溯到特定的時間點。如此一來,就不必擔心程式碼因為多次修改而意外損壞。

你可以藉由終端機或是圖形化介面工具來使用git。對於新手而言,我建議使用如SouceTree或其他圖形化介面工具操作git,不僅直觀、簡單,也能省去輸入指令的麻煩。

有關學習資源的建議

學習媒材形式的選擇

不同的媒體各有適合的用途。Source: DALL·E

通常學習寫程式時,你會有線上文章、影音、書籍、實體課程等選擇。其中,文章與影音這兩者的形式各有優缺:文章適合了解特定的技術、語法細節,但不利於了解整體的大架構與脈絡;影音適合了解高手如何操作介面、寫程式,但不利於定位你所需要的特定code片段。

至於程式書籍,除非你所需要的知識真的非那本書不可,否則我不建議你使用書籍當作主要的程式學習資源。首先,受限於排版與篇幅,程式書籍的教學可能會省略某些文字描述或圖片/關鍵圖片過小,導致學習困難;其次,程式語法日新月異,書籍中的資訊很容易與當前狀況有所出入;其三,紙本形式不利於複製貼上code,如果是較複雜的語法,手動輸入可能會出錯並增加後續debug的困擾。

而實體課程方面,通常課程會有規定好的具體目標與進度,雖然好處是省去摸索的風險,但壞處是無法自訂喜歡嘗試的方向或目標。另外,實體課程不利於事後複習、無法很好地考慮每個人的學習速度與程度,且對時間與地點的要求較特定。

影音平台與線上課程的選擇

整體來說,我推薦線上課程平台大過於Youtube教學影片。Photo by Julia M Cameron on Pexel

整體而言,比起影音平台(如Youtube)的教學影片,我會更推薦使用線上課程學習寫程式。首先是關於影音平台的缺點如下,以Youtube為例:

  1. Youtube的教學影片品質參差不齊,且不易搜尋需要的教學內容
  2. 如果你鎖定的是特定Youtube頻道的教學內容,可能會遇到內容尚未更新/中途斷更的情況
  3. 受限於平台機制,創作者可能更青睞製作受演算法喜愛的教學影片,但這與求職市場的真實需求不符

關於線上課程平台的優點如下:

  1. 課程內容、導師教學風格有公開的評價可查閱,品質較有保障
  2. 課程的內容是完整的,且通常會提供範例檔案與完整程式碼

雖然選擇線上課程需要花錢,但若綜合考慮以上優缺後,我仍覺得線上課程比較划算。另外,特定的課程平台有時會有特價活動,以我自己使用的Udemy為例,活動特價期間只需約NTD 300~800 左右就可買到一套完整的課程(不過線上課程多半是全英文的,這可能會是某些人的阻力)。

使用chatGPT輔助寫程式的優缺

chatGPT是輔助學習寫程式的好幫手,但仍有優缺點需要注意。Photo by Jonathan Kemper on Unsplash

除傳統媒體之外,使用chatGPT輔助也是新手學習寫程式的好選擇。然而,使用chatGPT一樣有數個優缺點需要考慮。

優點

  • 省去搜尋無數頁面、論壇的麻煩,可直接獲得需要的程式碼
  • 適合解決單一小問題
  • 適合詢問概念性問題、評估做法是否可行或是否太過困難、詢問他人的code的用途

缺點

  • 詢問chatGPT需要對程式知識有一定的掌握,否則,chatGPT可能會提供不精準、錯誤、小題大作的回答
  • chatGPT目前尚無法考慮整體程式架構做回答,而新手卻不擅於簡化問題,使得對話容易雞同鴨講
  • chatGPT所提供的程式碼通常不考慮再利用性,若沒有能力調整程式碼,會造成後續開發困難

其他心得

我需要一開始就學習最新的技術或語法嗎?

不一定。如果是語法類的變更,通常你需要使用最新的語法,程式才可順利運行;如果是新推出的技術、框架,則以新手的角度而言,我不建議你學習。新推出的框架通常討論與資源較少,若遇到困難,很難尋求幫助。另外,新手的需求大部分使用現有框架與技術就可滿足。

大家做什麼,你就做什麼

如果你在選擇開發環境、工具、語法時遇到困難,最好的做法就是「跟隨多數人的選擇」。一般情況下,跟隨多數人的選擇是新手降低遭遇未知風險的最好方式。同時,若真的遇到困難也較好找到幫助。

※ Cover Photo by David Rangel on Unsplash

追蹤我的IG帳號@chengyi_hsieh

我的最新動態都在這裡!

追蹤

RECOMMEND

PROMOTION

全面釋放設計生產力

集結超過10種以上專業工具的Spaciing(Figma plguin),可幫你省下可觀的寶貴時間。

立即購買