cover_photo

程式學習開始之後

從零到一的學習方法

目錄

1.前言 2.正文 2-1 摸索期 2-2 目標導向學習 2-3 刻意練習 2-4 彈性習慣 3. 最後的最後 4. 參考資料

前言

上一篇文章([分享]程式學習如何開始?)之後,我經歷了許多準備過程,中間遇到了很多同在準備階段的朋友,踩了不少坑走了不少遠路,最後也受到很多人的幫忙才如願成為菜鳥工程師,一個階段的結束,也意味著另一段旅程的開始,所以今天要分享的是我如何從零到一的透過自學成為一名工程師。

而這篇文章的目的是希望可以透過將整理起來的經驗分享給大家,提供給所有未來有需要的朋友們一條捷徑。當然你們也可以質疑我的經驗無法套用在所有的情況下,確實沒有人可以活出別人的人生,同樣的經驗法則很可能僅限於當次有用(所以這篇文章會持續進化),但我想如果當初我可以看到類似這樣的文章,心中可能會踏實一點,而不會如同汪洋大海中的一艘小船看不到方向。所以這篇文章獻給即將要畢業步入社會、想要轉換跑道,甚至是以將來想要踏入這個領域而提早做準的人,希望這篇文章能夠幫上同樣也在努力的你~

正文

在開始程式學習之後我發現 "光是開始絕對不夠",如果只是不斷學習很快就會陷入學習迴圈,不斷地追求想學的知識卻無法真正地將學到的知識展現出來,而這樣的惡性循環除了讓人越學越挫折,也無法實質上的讓人離目標越來越近,這種感覺就像是去IKEA逛了一整圈買了一堆DIY工具但卻始終放在房間生灰塵,知識不過就是另外一種形式的無形工具,他能夠真正帶給你的好處只有在你懂得如何使用它以後才會發生。

_摸索期_ 時間是大二升大三的時候,那個時候我剛開始進入程式學習、曾經一度陷入漫無目的的摸索期,也就是在網路上不斷google "學什麼程式語言最好"諸如此類的問題的時候。獨自摸索不熟習的專業領域需要承受非常龐大的壓力,身心俱疲的我,當時學校的課業與專業的學習兩頭燒,既沒顧好身體各方面的表現水平也越來越低,接著我馬上被第二層恐懼佔據心理,我要學那些技能學到什麼等級才能去找學校的實習,甚至是出社會後要如何找到工作,每次想到這裡我就坐如針氈難以冷靜下來。 0__XnRwqikuEwXFAWL.webp

在這個階段中我也曾經試圖想要透過仿間的就業補習班,學習一門程式語言,透過傳統的師徒機制學習並且媒合就業,只是我後來想了想既然我想要應徵的是工程師,而在我心目中,工程師主要的工作核心就是想到一套解決問題的辦法並付諸實現從而達到業主或老闆的需求,在這個節骨眼上如果我沒有辦法解決自己的問題,未來即便我真的成為了工程師難道就有自信可以解決別人的問題嗎?

(p.s. 我沒有覺得補習是一個爛方法,在時間與金錢允許的情況下補習可能是最速成的方法)想到這裡我放棄了求助補習班的想法,我心想:「只有這個問題不管別人怎麼說,我希望我能靠自己解決。」。

中間的過程也被很多人澆過冷水,一個完全在領域之外的人居然想要在不依靠任何導師的情況下獨自前行,這些人不是因為瞧不起我而說出這樣的話,因為當初我想要進入的領域除了有一堆艱澀難懂的數學知識還有一堆硬到爆炸的演算法與資料結構,更不用說最基礎的程式語言學習都有一定的門檻了,而當時我僅靠一本書幾個零碎的線上教學影片來學習程式每天漫無目的地看到什麼學什麼

於是我馬上就迎來了人生第一個攸關專業領域的挑戰,那年寒假我運氣很好,透過老師的幫忙下找到了一間互動多媒體公司的實習,工作內容是製作互動體驗所需要的程式,沒有小說、連續劇那樣戲劇性的發展,剛學程式沒多久的我當然沒辦法應付業務上的需求,甚至連獨力完成一個小專案的能力都沒有,最後還是靠公司裡資深工程師救火才匆匆結束這一次的實習災難。單從結果來看,這是一次足以讓所有人勸退的事件,也許我應該轉換跑道不要再繼續以寫程式為目標,在全心全意準備的努力下自己能到達的天花板終究有限,但也是因為這一次的回饋讓我明白到自己必須要調整過去仰賴的學習方法,不然這個悲劇只會在我換另外一個跑道時再次發生,然後我依舊只能哀嘆自己準備不夠如同飛蛾撲火,所以又一次我重新開始學習,只不過這一次我和幾個明確的目標捲土重來。

_目標導向學習_

終於進入本篇文章的主軸,如果要以一句話貫穿我的學習方法,那便是"目標導向學習",會這樣做的原因是因為比起傳統式目錄般的學習,我發現真正能讓我可以學以致用的情境往往都是先出現目標,然後在逐漸完成目標的同時掌握所有需要的知識與技巧,就好比你今天想要完成一道魚料理你一定得學會切魚,但如果你只會切魚最終還是無法完成一道魚料理。所以我使用這套學習方法的目的其實不在學習,而是為了完成目標,學習只是為了掌握工具的必要手段,而已目標導向的學習,必然會經歷以下過程。

1_-mOjYJ6y6lVQS7tJ10pD4Q.webp

  1. 決定目標 (要學什麼) 通常目標的出現是為了解決相應的問題,是因應問題而出現的策略, 直白地說你要學什麼要根據你想解決什麼問題來決定。舉例來說當你今天要解決的問題是在短時間內產出一個學校的專題,而"學習"在完成專案的過程中扮演的是讓你掌握工具的能力,那你的目標很顯然就不是精通程式語言,而是如何快速利用現有資源整合出一個完整的專案,並巧妙地達到你和老師的需求,這就像是你不需要精通菜刀的使用才能學會做菜,你只需要會用就好

1_RTeQtWqcdo-51CNvX4sVbg.webp

對我來說常見的目標有以下三種 a. 以專案為目標開始接觸工程師的工作以後才發現,就算說工程師的工作是學習也不為過,幾乎每接觸到一個新的專案就要在做一次學習,不管是看文件也好,新技術也好,只要不學習新知就很難繼續維持工作。因此以完成專案為目標的學習,重點要擺在最少量資訊學習上,學的多不如學的精,這樣就能爭取更多的時間來完成專案。

b. 以第二專長為目標如果是以培養第二專長為目標,目的通常是為了將第二專長與主要的專長互相搭配組合。舉例來說,如果一個純美術想要學習網頁前端的技術,那就應該把重點放在前端語法如何讓網頁呈現的跟你設計的一樣。或者如果和主要專長沒有相關,也可以先思考之後想要如何應用這門技術/知識,並從實用面出發,白話一點就是先去做,再來思考要怎麼做,將自己置身在能夠應用該工具的環境下,或努力接觸這方面領域的專家or高手,這樣你就能不斷地創造出學習->應用的回饋 循環之中。

c. 以求職為目標如果前端工程師是你的目標,那麼要達成這個目標你需要做什麼呢?首先,我必須老實說,成為前端工程師這個目標還是太籠統了,這個問題還可以在衍伸到你想成為什麼樣的前端工程師? 是的沒有錯,雖然很多職缺都叫做前端工程師,但其實前端工程師千百種,有的前端工程師只負責維護網頁的更新,有的前端工程師要負責專案的開發,職責不盡相同有大有小。

最好的方法就是去104逛一圈,先找出自己的目標工作,確認目標工作的技能需求,這樣你就知道你需要學什麼、你還缺什麼。成功的將對未來的不安與不確定性,不曉得職業的技能需求,限縮到有限的範圍,現在你的目標就是老老實實的把職缺上面的技能需求清單弄到手,並且準備相應的作品集與履歷表。

  1. 擬定計劃

知道了要學什麼以後,我們可以開始來思考該入何讓我們的目標實現,也就是透過學習找到工作、完成專案,目標能否實現,必須仰賴計畫的確實性,套一段《孤棋致勝》裡面的話

「很多時候,我們設定一個目標,並直接向他進發,卻沒有考慮到實現目標所需的所有步驟。我們的戰略要成功,必須具備那些要素?」。

這或許也是我們經常在新年的時候許下新年新希望,但是年底才想起來的原因,這個階段你需要的是如何把你的目標拆解成更小的目標,並且階段化的完成你的小目標。比如說成為前端工程師就可以再拆解成下圖,當每個步驟都被拆解到無法拆解時,計劃就會越來越容易被實現 1_gkm7QUSoHZmwNmr7yJIaJw.webp

  1. 貫徹計畫的同時也不斷調整計畫

我們在上一個階段辛辛苦苦的擬定好了一份看起來非常落實的計畫,但現在我必須告訴你沒有計畫是可以原封不動就保持原樣到結尾的,除了你已經簽約的專案XD,世界局勢隨時都在改變,這也意味著你的計劃必須要跟得上變化,保持彈性在你確定計劃成功機率越來越低時勇於調整他,在成功機率高的時候鼓起勇氣貫徹他。假設今天遇到以下突發狀況…

a. 學到一半的時候出現新工具工具的革新日新月異,我相信當遊戲引擎出現後已經越來越少人會先去學習艱澀得電腦圖學演算法、計算幾何、線性代數等硬核的工程背景知識,如果不是一定會用到,其實可以直接使用別人寫好的工具,將時間投入到更到更需要你傷腦筋的的領域裡,除非你跟我一樣都喜歡研讀一些底層知識XD

b. 遇到一門完全無法理解技術or知識這其實是非常容易發生的,發生的頻率取決於你對於你即將要學習的東西有多了解,從工科的角度來看如果你今天需要找到一個方法可以精準的用很多張相片來還原相機參數,再你各種google後你可能會發現需要用到的技術叫做BA(Bundle Adjustiment),但是裡面各種硬核的數學計算與複雜的演算法都堪稱人類智慧的結晶,靠自己的理解生硬的想要拆開她全部的輪廓,甚至去挖原論文"可能"不是一個好辦法,除非你可以耐著性子把一篇又一篇的論文慢慢的理解消化,但這對多數人來說難如登天。這時候你可以「尋找他人的協助」、「粗淺的理解這個工具是什麼,他用在哪邊,他要怎麼用」、「尋找大神做好的工具包」

c. 時間比你想像中的還要少...這也是在擬定計畫後常常會出現的問題,其原因是對一開始所擁有的資源數量不清楚,導致時程安排不如預期,這時候你可以「簡化學習步驟」,就如前面所說學習是為了掌握工具,在能用就好的前提下你可以思索有哪些是你在開始專案以前必須要先學會的,那些是在專案開始之後才需要學,那些已經有現成的工具馬上就能用,當越來越習慣善用別人做好的工具以後,巨人的肩膀可以讓你站的比以往都高有關於決策與擬訂戰術、策略的相關方法你可以參考《孤棋致勝 How Life Imitate Chess》,這本書是前世界棋王、西洋棋特級大師分享如何將西洋棋世界中各種策略與決策方式帶入現實世界中的一本思考方法。

_刻意練習_ 在過了很久以後我才發現原來當初自己在準備專業知識與自我練習的過程其實非常的接近《刻意練習》這本書中所提到的方法。如果你還沒看過這本書想要快速地做個了解可以參考啾啾鞋做的書籍介紹。這裡我快速的總結重點1. 明確目標:沒有目標的學習會讓學習成為一盤散沙,無法讓學習發揮效用2. 即時回饋:以完成專案為目標,每個專案都可以成為我學習的回饋3. 走出舒適圈,待在學習圈:不斷的學習挑戰,享受知識為你所用的過程

_彈性習慣_

前面提到了練習方法、擬訂要學習的內容、把原本看似龐大而無法消化的知識與技術拆成一塊一塊大小適中能吞嚥的大小,還有一件事情沒有提到,那就是如何落實你的計劃。訪間中有各式各樣的書籍介紹了很多不同的策略講述了如何學習,其實內容都大同小異也就是協助大家完成目標,但如果大家曾經嘗試想要將書中的情境運用到生活中,一定會很常發生半途而廢或三分鐘熱度的情況,這又是為什麼呢?原因就如《彈性習慣》書中所提到的我們生活中會有低谷會有高峰,每天的狀態都無法恆定,要想靠呆版的方式每天日復一日重複著不知變通的計畫本身就是不可能的,因此你的計劃必須保持彈性。《彈性習慣》是一本講述如何培養習慣的一本書,但在開始落實書中所提到的習慣培養法後,我發覺這其實是一個廣義的策略,可以應用到生活的各種層面,將你想要養成的習慣分成三個垂直選項分別代表三個不同的難度,這樣你就可以在低谷時達成小目標,在狀態高峰時完成大目標向你的目的地往前跨一大步。因此在這邊推薦給大家這個工具,《彈性習慣》是協助你達成目標最好的工具沒有之一。

最後的最後 :

將你所學習到的知識再分享回去吧~看到這裡我相信大家一定心中都有很大的疑惑,我既不是專家也不是高手甚至對一門學問都還沒有非常了解,這樣分享出去究竟有什麼意義呢?當然有,首先學習的過程主要可以分為兩個階段分別是「解構」及「重組」,再分享的過程中,為了要讓你分享的對想理解你要分享的內容,你會不斷經歷將過去所學的知識「解構」的過程,透過把一個一個大觀念拆解成小而零碎的簡單觀念可以讓你的對象更清楚的理解知識的架構,而透過「重組」的過程可以將學習到的細小的零碎知識變得連貫,進而有更深一步的理解。再來除了對自己的學習過程有固化深根的作用以外,你還可以促進社群的活絡,說不準未來有許多人因你文章受啟發對世界做出更多貢獻,最後他做出的貢獻可能還會再回饋到你身上,成為一個正面的回饋循環。感謝看到這邊的你,希望這篇文章能夠幫上同樣再苦惱的你,畢竟我的冒險其實也沒開始多久,有很多地方還需要學習跟努力,所以如果你看完覺得有需要補充的也歡迎再下面留言區回應喔,或是我有那裡寫錯也可以直接鞭下去XD

參考書籍

  1. 刻意練習
  2. 孤棋致勝
  3. 彈性習慣