在進入正題之前,先來一個直擊靈魂的深思:
相信大多數人跟我一樣,對於這個問題的答案很現實也很直接,就是「找到待遇更好的工作」。
確實,以市場行情來看,軟體工程師的待遇與職涯發展潛力遠遠高於平均;同時,成為工程師的門檻也「看似」不高:比起同樣是高薪階級的醫生,需要經歷多年高強度的考試、讀書、培訓,工程師的要求好像只要有十隻手指頭可以打字、大概半年的學習就可以轉職的樣子。
姑且不論這樣的認知正確與否,確實大部分初學者的學習目標就是轉職成工程師,在這樣的動機下踏上了程式之旅......
然後就放棄了( ×ω× )。
原因無他,「成為工程師」這件事情遠比你想像的更為困難。能夠敲打程式碼當然是基本,背後還有很多語法、邏輯、架構、順序、設計、系統等等不同維度知識範疇,需要大量的時間與經驗來沉澱的技術與能力。
試想,那些聰明絕頂的資工系學生都需要在花上四年認真學習鑽研的知識、出社會後都還要學習不止來充實自己,你又何來的自信可以在短短幾個月裡自學成材、融會貫通?
抱持偏差的認知,初學者很容易在敗給學習路上的挫折,我認為是因為「成為工程師」這種外源性的動機,並無法轉換成內源性的、以燃燒熱情為能量的動力。當無法從學習上獲得征服目標的成就感,再加上經濟壓力、時間管理上的外部因素,把原本的動力消磨殆盡後,初學者自然很難找到堅持下去的理由,最後再用個「或許我不是這塊料」的藉口,駛離這條學習之路(๑•́ ₃ •̀๑)。
這還不是最糟的。如果你仍堅持「非要學程式轉職不可」,學習受挫時這個目標會反過來成為壓力,受到知識焦慮綁架,讓你想要尋找外援 -- 不計代價只為解方。最常見的就是課金砸錢,背後的思維無非是希望想要找到一條捷徑,省去學習上的掙扎苦惱。
有多少坊間補習班,都是拿著「程式轉職保證班」、「工程師速成班」的噱頭,跟你說只要報名上課,跟著老師一步一步考取證照、建立作品集,一定能成為軟體工程師的誘因,說服你把鈔票掏出來,買下一個晉身科技新貴的夢。
(詳情請看我上一篇的心路歷程,就知道這樣的想法有多要不得了。゚ヽ(゚´Д`)ノ゚。)
既然如此,那對於初學者來說,又該抱持什麼樣的心態,來面對學習程式這件事(*´・д・)?
設定可達成的階段目標,用積極愜意的態度面對學習
在經歷了各種折騰,以及帶讀書會助教的一些體悟後,我建議初學者不要抱持著「學程式=要轉職」這麼強烈目的性的學習目標( • ̀ω•́ )。
從零開始到成為工程師,這中間有太多階段性成就要達成了,視線只專注在彼方而忽略當前的腳步,你當然會覺得這條路崎嶇難行。
反之,請你先用一種「學習課外活動」的心態,期勉自己可以達到「用程式解出數學題」的程度即可。
首先說目標。每一項偉大的成就都不是一蹴可幾的,學好程式也一樣。
想成為軟體工程師,你起碼要有獨立開發專案作品的能力;
想學習專案開發,你起碼要能看懂教學影片,理解模組運用時機,知道每一行程式碼的功能,跟著教學步驟逐步架設專案;
想要看懂程式碼,你起碼要知道程式語言的運作,知道如何設計程式、用程式來解決基礎的數學邏輯問題。
所以,設立目標時不要太好高騖遠,先從能寫出程式數學題的程度就好,一來是學習上不會有太大的壓力,二來是學習過程中逐步達成目標也能給自己帶來成就感,成為持續前進的動力。
在學習 3-6 個月後,如果覺得可以輕鬆用程式駕馭數學問題、也很享受其中的過程,再考慮要不要往下一階段的目標邁進。
再來則是面對「學習程式」的心態。
就像去報名瑜珈課、咖啡拉花課、園藝班、烹飪教室、健身課程,你在報名這些課程的動機,會是因為「我要成為 瑜珈老師/咖啡師/園藝達人/甜點師/健身教練,並以此為職業」這樣的想法嗎?通常應該不是吧,是因為你覺得這些活動好像很有趣,想要嘗試的心態而去學習;就算沒有成為職人,你也在過程中體驗到很多樂趣。
學程式也是一樣的。請你將學程式當作一次「課外活動」,來認識程式的靈活的自動性、有趣的結構設計、邏輯的美感,從中獲得樂趣,而不是為了要成為軟體工程師所下的苦力與犧牲。
即使最後,你的程式技能沒有達到可以變現的程度,這趟旅程也絕對不是毫無收穫、徒勞無功的,稍後我會再來分享我認為新手初學程式的好處,但我保證這是一趟很有意義的旅程。
不以工程師為目標,新手可以從學程式中獲得的收穫
在你對程式還沒有啥概念的時候,就直接跟你說學程式超FUN的啦、不學程式後悔終生、程式有趣又實用,不免有點安麗之嫌(๑´ㅂ`๑)。
這個小段落就輕鬆閒聊一下,舉幾個我自己在初學程式時就有感的收穫。
(這部分就個人主觀感覺居多,有不同想法的人就歡迎留言討論啦)
- 神速英打
......好我知道這個有點廢,是我自己在 coding 中不知不覺習得的技能XD。
在學程式之前我沒什麼需要英打的需求,所以打英文的時候都是一個字母一個字母對應到鍵盤慢慢打。
開始學程式後就不得不面對大量的英文輸入,久而久之英打就變快了,現在就算要我輸入一整串英文網址也沒在怕的啦(☄◣ω◢)☄。(驕傲個屁XD)
- 邏輯訓練
這個應該不用我多說,程式本來就是撰寫一套命令機器執行的指令書,包含語法邏輯、前後邏輯、從屬邏輯、判斷邏輯、架構邏輯、時序邏輯等等。如果你跟我一樣本來就喜歡做一點腦力激盪,我相信你也會在解題過程樂在其中。
- 認識電腦
我在學程式之前,是徹徹底底的電腦白癡 (´c_`),基本是只會用 Windows 三寶:Word, PowerPoint 跟 Excel ,還有上上臉書YT、看看廢片ㄎㄎ笑的程度而已,至於什麼網路知識、應用程式、作業系統什麼的都一無所知,電腦掛了就只能跟我爸求救。
我自己在上了 ccClub 讀書會以後,除了對「程式究竟是怎麼運作」有一個大概的認識以外,在上爬蟲課時開始瞭解比較多網路相關知識,比如說 Request/Response、網頁三巨頭:HTML, CSS, JavaScript,或是打開 Console 檢視網路連接狀況等等。
在擁有基礎知識之後,如果電腦或是網路出現異常,也比較知道要下什麼關鍵字查解決辦法,不再無助地等待救援。
- 生活駭客
程式最大的優點就是快速與自動化,解放人類的時間與勞動力。
如果你的日常中也有那種單調枯燥的、重複性高的工作,不妨試試看用目前的程式技術,寫出一個小程式來解放自己的人生ヽ(●´∀`●)ノ。
舉兩個小例子。我之前在實驗室的時候,有一次需要處理比對基因序列(就是ATCGGCTTACATAC...這樣的東西)的工作,檢查有沒有目標序列,當時是用肉眼比對,算完以後覺得自己快瞎了(╯°Д°)╯ ┻━┻。
像這種簡單的字串比對其實可以用一小段 Python 程式就可以處理,提升效率的同時正確率也比較高。
第二是之前讀書會某組的期末專案,是把細胞計數自動化的程式,因為自己也是生物背景,深知數細胞是多麼無聊的一件事,所以對這個專案印象深刻。
詳情可以參考 ccClub 之前的新手影片系列~
- 拓展社群
如果你也喜歡認識新朋友,那藉著學程式認識程式社群同好也是很棒的收穫。
除了讀書會同儕本身的激勵作用,相較於外人眼中冷冰冰的程式碼,程式世界的社群其實是非常熱情與樂於分享的,比如說GitHub上開源的程式碼、程式界的知識家:Stack Overflow、各種心得分享部落格或是教學影片,都能讓人深刻感受的這個社群的活力與能量(*´∀`)~♥。
如果你在自學的路上感到無助、困惑,不妨試著向認識的 coder 或是程式社群求助,我相信大部分的程式前輩都很樂於回答你的(當然前提是要有禮貌,以及不要伸手牌)。
結論:所以,我該來學程式嗎?
囉哩叭唆講了一大堆,無非是想要提醒螢幕前的你,在學程式之前、在學程式的過程中,不要揣著錯誤的心態和目標看待這件事。
我自己就是血淋淋的例子:當初學程式的起點,就是想著「學好以後就能找到好工作」,過程中每一步挫折都讓我覺得離目標越來越遠,在這種焦慮之下做了各種愚蠢、錯誤的決定,所以更深知這種思維的可怕。
學程式是一個選擇,但絕不是一個非選不可的選項。學程式有很多優點,但不學也不代表不上進、沒有競爭力,社會是由各種技能相輔相成、彼此協作而成,除了程式以外,還有很多有趣的技能或知識值得學習。
講這麼多就是希望大家別被知識焦慮的情緒綁架來學習,同時如果你覺得在學程式的過程中覺得難以吸收、毫無成就感、甚至覺得很痛苦,勉強自己真的大可不必,人生苦短,把時間投入在自己真正喜歡的事情吧!
不過如果你看到這裡,還沒有被我勸退,甚至開始對學程式感到躍躍欲試的話......
Well then, Welcome to the Hello World!