學生心得:minw
ishin4554 opened this issue · comments
同步修訂版刊載於 Medium 上 -
記在程式導師計劃之後(上):風雨飄搖的執著
記在程式導師計畫之後(下):求職天堂路
背景
從學生生涯末期的兩到三年都在苦思什麼是設計?在快速成長的領域之中試圖想要定義自己的設計觀,最後得到「開發是設計的匠性。」的答案,於是期許自己要能從研究定義出更好、並從設計到開發對這個更好負責。
過去摸過很多工具,像是: R, Unity, Arduino, processing, Grass Hopper 等能用但稱不上會用。所以有 loop, function, condition, variable 程式基礎概念,略懂 jQuery, HTML, CSS,但這一切比較像是工具人不是開發者,不能做出產品。
所以為了自己的哲學、補上這塊拼圖跟一了長年風雨飄搖的心願許多理由,報名了這次計畫。
對了,嗨,我是 Lidemy 程式導師計畫第三期的學生,是 MBTI 中的 INTP,喜歡後設所有事情,喜歡一路從說要做、為什麼做、要做什麼、然後做出來,是個有點獨有點怕生不會開話題,不過喜歡看動漫畫玩遊戲、做動畫跟閱讀寫作,希望自己可以做到求真求善的人。
在這次的課程裡面有一半時間在碩二下跟一半完整自學的時間,這是我學生生涯最後一次機會。
課程
課程本身的技術內容就留給 Syllabus,因為真的就是那樣,真心不騙的扎實。
課程前期
一開始學了框架前應具備「脈絡」包含:程式基礎觀念、常見的前端技術、AJAX、資安跟後端基礎。
由於出發點就是想搞發明,從一開始就從 shell script 就很想要開發 side project,當時有用 Timely 追蹤自己的軟體使用時間,就用 shell script 開發了一個可以紀錄的工具,可以新增、統計,然後透過 +++++ 來視覺化。後續學到 API 之後,改用 google api 來做一個統計的網頁頁面,到了十五週又有一次進化,做成一個利用 Bootstrap 跟 jQuery 搭配 D3.js 做出更複雜的工時資料視覺化的小 project。
從 side project 就可以看出來這是一堂工具演變的過程,在這個過程中我們學習到不只是工具怎麼使用,還包含:技術為什麼存在、後續的技術改善了什麼問題。
到了 PHP 學到了 OOP,除了應用 OOP 在 PHP 的留言板裡面,也回去重構串接 API 跟小遊戲的作業,也重構了自己碩論的網頁。在課程之中也有超級挑戰題,可能是一些更複雜的技術、或者資工的演算法題目,在這之中嘗試了 D3.js 等課程之上的內容。重構的、額外的作業老師也願意重新做 Code Review,所以不止學技術、也學怎麼學新技術、跟什麼是好的程式碼。
同時課程中也不乏機會,跟老師合作開發 R3:0Challenge 的專案是最有成就感的高峰,開發出的東西被使用、看大家的心得,給了我很大的動力。加上過程中我們有很多回顧自己程式碼復盤的機會,包含:複習週、學習系統等等,心得大幅提升自己省視自己的能力,也可以讓自己從別人的心得學習別人的思路。
總言之,前半段的課程一整個就是學習興奮期。
課程後期
在後半段的課程將會慢慢銜接進框架之中,開始了解 javascript 底層的原理而且接觸各種工具來解決網站工程上的問題。
後續在進入環境架設的環境一度低谷,摸了 Docker、CI/CD、系統環境跟 javascript 原理拖沓很久、甚至鑽牛角尖,在到框架換腦的過程也卡了一陣子,那是我最灰心的時候,覺得自己怎麼搞的。但時間如果拖得太久,老師會適時的透過 Slack 關心,給一些學習建議。
更重要的是老師很了解拖延症這件事情,極力宣導面對拖延症的應對進退,讓你可以平靜地看待自己,調整自己的步調,而不會陷入罪惡感圈圈。與同學的互動也是良性的,在社群設計上有點距離感但又能交流的學習系統讓我們不會一直去比較彼此,因為你了解對方怎麼做到、知道對方也不容易、這時候是不是很忙又或者只是剛好在休息。
營造一個專注在自己成長但又能砥礪的環境,讓人可以延續學習下去將課程更困難的內容完成。
專案時期
在灰暗的低谷中,回到初衷開發專案是推進我的另一個動力,Final Project 跟把課程作業升級成 Project,這兩個專案花了很多時間來思考,怎麼樣才是自己想用、別人也能用的產品,是兩個第一次從研究到開發自己實現的專案。
在個人特效網站裡,部落格網站被設計成特效網站,過程中其實迭代了許多想法,特效改來改去,然後把以前接觸過 Canvas 跟 SVG 應用在部落格裡面,再學習 ReactTransitionGroup 的使用方式,試著做出有 CRUD 的視覺特效個人網站。
課程從後端到前端都有真是太好了,很慶幸自己也有把後端的部分完成,否則不會有那麼高的成就感。
到 Final Project 真的是完完全全的從以前的研究經驗出發,做了自己從很早就想做的影音筆記服務,參考著 Product Hunt 上的水平來進行設計跟開發,串連 Youtube API 一樣前後端開發完成了一個有點產品感覺的服務。完成的那瞬間我沒有遺憾 XD 我的目標達到了!我自力做出了一個完整的產品了!我踏上我目標的起跑點了!
在兩個專案中熱情高漲,畢竟這就是我的初衷,但也深刻的感受到,再多的熱情都有枯竭的時候,當你希望一個東西好起來真的是永無止盡,視覺、體驗、程式碼每一個環節相扣又都可以更好 ......
如果放棄的話,作品就完成了。
求職時期
最後的最後老師跟家人推了一把,即將要內推跟課程結束、在家休息一季之際,速速的準備了履歷跟老師討論,甚至做了簡報、錄了自我介紹的影片詢問老師意見。這些繁瑣的事情都沒有被拒絕 XD 雖然沒有照著建議走海投跟迭代路線,是東西都準備好了、按照著志願序投遞履歷。
複習著課程 Syllabus 裡提到的重要觀念、看老師以前寫的面試文章等等,這些讓面試順利很多很多,這個過程可能面試有的問題也都可以詢問老師,從最小最小的可不可以做簡報到面試題不知道答案,一路中老師都沒有缺席。
最後如願以償的得到自己喜歡的公司的 Offer。
求職後時期
寫心得的這當下,是上班前的幾天,這幾天一邊學習未來工作所需的技術跟重構以前的專案,整頓一下下一階段的目標,跟同學們交流,時間來得及的話想要幫專案弄支影片。
課程頭尾兩次的實體聚會、學長姊也會出現、中間也嘗試舉辦了一次讀書會這些交流聽關注的問題跟學習方法,像是:網頁板履歷就是從同學那邊學到的、還有一些 Anki 的用法等等,很期待未來應用這些方法。 覺得一些彈性實體交流的場合對無論內向外向的人都能適應、是很棒的機制。
小結
如果要我說這是一堂什麼課,這是一堂讓你能做到:
發而不中,不怨勝己者,反求諸己而已矣。
...... 這樣態度的一堂課,要能克己、真切、獨立面對困難的學習甚至面對人生都不容易。所以課程設計、社群互動、老師跟自己的互動促成了這種良性的學習態度。
這也讓我意識到,帶走的不是只有學寫、學怎麼學寫還包含學怎麼學。讓我喜歡上這種主動喜歡上一個領域的感覺,這比轉職本身還要難能可貴。
回顧
在這次計畫中,學習的策略有三:
第一,專案導向,希望所有的技術是以需求出發,如果沒有需求就從自己需求出發,記錄時間的 side project、用 gulp 建置 pug + SASS + ES6 的切版環境、Final Project 的影音筆記等等都是出於這樣的策略,因為這是我學習的手段也是我學習的目標。
第二,廣度優先,希望可以盡量多接觸不同技術,老師會一直丟出新的刺激,如果時間允許都為嘗試使用看看,Docker, Cypress, Travis CI, jwt, Mongo 等等這些技術都是老師拋出來的挑戰,趁著課程之中多多嘗試。
第三,時程兼顧,希望可以超前但不要 deplay 於課程原本規劃進度,在最後幾週同時接觸前後端框架讓進度 delay 了不少,但總的來說時間是對心理狀態的一個限制器,一旦超過越來越多就會慢慢放棄,只有一直緊緊跟著保持壓力才能走到最後。
學習技巧
課程中實作需要新技術時,我會先找該工具的入門教學跟回答五問題,根據入門教學接著開始使用後,搭配老師的課程架構遇到問題會開始查,例如:接觸 Vue 的時候就會查 Vue + State 、props、Props parent component、componentDidMount 等等,同時一邊看 Document 關於這些結果的說明,然後慢慢的做出一個最小的 CRUD、非同步操作的小專案。再慢慢放大成自己要做的結果。專案擴大的過程中會看見程式一些細節的「模式」,像是:常設定的參數等等,就隨觀察跟用到來查。
剩下除了一直實作外,可以稱之為技巧的大概有兩個,一個是產出學習另一個是問題模板。
課程中很強調心得、我自己還會畫圖,心得一開始 markdown 後來嘗試 Hexo 發心得也有嘗試過 Notion 到最後覺得還是 Evernote + Evertool 最好,畫圖有時候用 draw.io, miro 有時候就是紙筆,但無論哪一個視覺化思考程式的過程很重要,因為這可以讓你釐清哪裡出了問題,像是有一週的作業要一句一句的寫下程式怎麼跑,還有後續在釐清一路從 React, Redux 到 Observable 整條 action 流動的關係,這樣的技巧對於演算法題、或未來重構的時候都很有幫助。
另外一方面則是老師在文章裡寫過的五個問題,這個技術出現以前是什麼樣子?那時候碰到什麼樣的問題?這個技術的出現如何解決問題?所以這項技術應該如何使用?跟以前的解法比起來,差別在哪裡?有什麼優缺點?我想在實際有開發經驗之前,我們不可能對技術了解的盡善盡美,但至少在工具的選用上我們要知道這五個問題的答案,幫助我們定位工具的脈絡。
最後就是有些用不到的但對於程式整體會有幫助的事情要刻意練習,例如:重構、寫測試,在專案還小的時候的確不是當務之急,但這些努力可以提升你對程式碼的敏銳度,像是:在重構之中就可以改進自己程式的邏輯讓程式碼更漂亮、測試也提供你另外一個角度看你怎麼切你的功能,改變對程式架構的看法。
管理方法
在課程的資源管理上,分成知識管理、專案管理跟品質控制:
知識管理就是管理學習資料的方法,我自己喜歡用 Evernote 搭配 Evertool 做 markdown 筆記,因為這個工具很簡潔,筆記分類成 TODO / NOTE 兩個筆記本、Tag 都是 MTR 這個專案,並根據五個問題來寫筆記。而專案開發的靈感就會截圖存在 Eagle 裡面,當作未來想寫的功能的素材。未來 Evernote 的部分想要參考同學的做法做成 Anki 卡。
專案管理則是在後續專案範圍比較大來做開發時間跟功能切分的安排,有嘗試過 Notion 覺得功能繁複不夠簡潔,所以回到 Google + Google Task 把任務分類成 FIXME / TODO 來進行開發,並加一個縮寫辨識專案。FIXME 放寫完但出現的 Bug、TODO 放要做的新功能。
品質控制則是了解自己的狀態跟工作時數的方法來確保自己沒有怠惰,用了 Timely 記錄時間,然後統計在 Airtble 之中,用自己寫的小服務看時間運用的狀況。中間斷掉一陣子,最近在嘗試收回來,可能會換統計的地方,可能會研究開發看看怎麼抓 Google Calender 數據,想要統籌在 Google Calendar 裡面。
心態調整
過程中會累、會拖延。大多數時候,我會追求客觀事實來提醒自己,像是:透過時間紀錄來意識自己的狀態、裝 Mailtracker 看信件的狀況修正內容,但有時甚至連不要自欺欺人都做不到。
這時候尋找一些東西讓自己撐過去很重要。課程中,一個是老師每週的隨意聊,大概週末週一會有激勵人心的一些留言讓自己又打起了一些精神,以及自己也有存一些很喜歡的雞湯文、像是:重看全職高手小說、自學四年日檢 N1 與多益 TOEIC 975 系列文、延畢做自動飲料機的一年、想到以前做繪圖創業的學長跟以前很厲害的開工作室的同學,這些都是沮喪的時候就會打開來重看或靜心思考的故事。
這些 role model 讓我會再努力一下,除此之外 Eagle 裡面也存了一個 Happy Tag 把自己喜歡的東西,像是一些:插圖、柴犬等等的圖片,讓自己刷圖看著開心一點。在寫程式的時候基本上也不會聽程式的廣播,重聽了超多次的 LNG 精華 XD 再不行就好好喝一杯可樂。
什麼樣的東西讓自己開心又無傷大雅,這也是值得去探索的。
復盤檢討
每一個缺點都有好有壞,可能是某些優點的反面。
課程中過度樂觀許下很多願望,可能因為有那麼多願望才能比自己預期的做到更多,但也希望願望跟實際情況的落差可以縮短一點,更正確的評估自己的狀況。這部分可能希望透過更多前期預測跟結尾追蹤比較來改善自己看待自己的準確度吧。
同時也希望自己更細心與毅力,中間有一度低潮但我覺得這種過程是可以避免的,也許因為這段休息得到很強的專案能量,但也希望即便是休息也能維持最低限度的品質,也就是所謂的配速的哲學,怎麼在長期專案中分配自己的能量,讓自己可以保持追根究底的心情、維持課程作業的品質等等,目前還沒有具體的想法,但可能會想找一些有毅力的同學聊一聊。
最後一點,這是在交流會後的啟發,看到同學樂於分享、並把學習的過程跟專案累積起來公開並經營自己,讓我覺得大家都好厲害,在這一塊自己還是不夠、太彆扭,要怎麼讓自己選擇更有效率的分享過程,不僅僅只是私底下、非公開的分享,這一件事自己還需要更多的練習吧。
小結
我很喜歡老師的這句話:
...... 不是要跟你說你要一直努力,我只是想強調「一直練就會變強」這件事 努力是你的選擇,我不會要你一定要努力。但至少不能欺騙自己。你不能說著「我想跑全校第一」卻不練習跑步,要嘛就放棄想跑全校第一這個想法,要嘛就乖乖練習跑步,不能什麼都不做卻還妄想著不勞而獲的成果。
寫程式真的是一直練一直練就會變強的事情,就像家人身教言教傳達的程式是可以努力學會的事情一樣,有些技能看起來好像遙不可及,其實只是你騙過自己,要怎麼反求諸己,是一輩子的學問。
詰問:下一步將走去哪裡?
好不容易補上開發這個洞,在 Final Project 也體驗到一條龍從需求到開發的快感,我希望也可以像老師一樣有某個想要解決的問題、運用自己的技術來實現。在我來看老師是厲害的前端工程師也是成功的課程與服務設計師,這整套系統完整解決了不同階段跟表層到深層的程式教育問題。雖然老師總是很謙虛 XD
所以最後也都丟這類型的公司,有機會可以做到很多很多,可以參與產品跟開發,可以親手實現的新創或研發部門,希望自己可以保持著在這邊的心境走向人生的下一個階段,在職涯上希望可以持續:「真實、克己、獨立」的做出令人印象深刻的產品;自學上希望可以嘗試學習其他一直想學習的新領域,像是:畫畫跟語言。
總之,這個一切的一切想要感謝老師、家人跟同學,這麼大的人生轉變少一個都不會成真,對於未來的諸多可能,我只想說:
我比誰都期待我的作品。
收到 minw 的報名信時,我應該比他本人還要興奮。
每一期都會有一些報名信讓我眼睛為之一亮,minw 的就是其中之一。雖然你可能會覺得你的報名信沒什麼,但那是因為你沒看過其他人(尤其是那些沒有被選上的)寫的。
就像我在某處的自我介紹所寫的「發現自己好像有把事情講得簡單又清楚的能力」一樣,有些對自己來說是吃飯喝水一樣的東西,對別人而言卻是「哇,原來還可以這樣」的驚嘆。
除此之外,另一個興奮的點是我們其實在三四年前的一個活動場合見過,當時是被找去分享自學相關的主題,我分享程式,minw 分享設計,雖然分享的內容我早已忘記,但我記得 minw 的分享還滿有趣的,讓我事後檢討了一下自己的簡報是不是有點無趣(其實時至今日還是這樣,怕有些主題把它講得太嚴肅太正經,但其實有趣一點會比較好)
之前應該沒有跟 minw 說過(因為怕這變成一種壓力),他是這一期我最期待成果的學生之一,而在整個課程中的表現也都沒有令我失望,你做得很好。(突然發現這篇的視角好像一直在切換,一下第三人稱稱呼 minw,一下又第二人稱稱呼你,但算了管他的,我懶得改了)
第三期有你加入真的是我賺到,雖然你可能沒有特別感覺到,但其實你某種程度上也在帶著其他同學前進,讓其他同學知道挑戰題寫完是什麼樣子,也知道比較完整的作業跟 final project 是如何。這些其實都是憑我一個人沒辦法做到的。
到了求職時,我覺得你在自信以及實力部分其實跟當年的我滿像的,就是空有一身實力卻沒什麼自信,這時候被開的價碼就會被砍到爆炸,因為你不相信自己的價值,公司也很難相信(除非公司真的慧眼識英雄)。所以才推了一把,跟你說薪水應該開的範圍在哪裡(話說那時候也有跟 yakim 討論了一下,他也叫我趕快去推一把,在這邊遠端也感謝他一下)。
後來你求職時其實我有點擔心,不是擔心找不到工作,是擔心公司沒辦法像我看你這樣,看到你的價值。不過後來證明是我白擔心了哈哈,看來你面試的時候表現得很好。
之前就有跟你說過,看了你那篇求職天堂路以後讓我想到一個強者我朋友。因為跟那個朋友相處有一段時間,漸漸發現有些人的強,不是因為技能強。技能強只是果,但不是因。真正的因是自我控制的能力。
例如說這六個月以來,雖然還是有拖延有怠惰,但可能沒有想過要放棄,而且大多數時候都付出了足夠的努力。光是這一點,其實就是很多人都無法做到的了(包含我也是),而這種自我控制的能力,除了學程式以外,學其他東西也能派上用場。
再繼續誇下去應該會造成反效果,讓你反而更沒有自信之類的,就先在這邊打住好了 😂
接著要來講一些可以加強的地方
最後一點,這是在交流會後的啟發,看到同學樂於分享、並把學習的過程跟專案累積起來公開並經營自己,讓我覺得大家都好厲害,在這一塊自己還是不夠、太彆扭,要怎麼讓自己選擇更有效率的分享過程,不僅僅只是私底下、非公開的分享,這一件事自己還需要更多的練習吧。
這的確是一個需要練習的事情。
不過在練習之前,你可以先想想一件事,那就是「分享的理由」。幹嘛要對外分享這些東西?為什麼要把學習過程跟面試心得對外分享?
如果你找不到答案,那不分享也是完全 ok 的。
這邊先跟你分享我的理由,因為我覺得這理由你也很適合拿去用:「回饋」。
心得裡面你有說到,你喜歡看那些可以讓你靜心思考以及打起動力的故事,如果他們沒有把這故事分享出來,你就看不到了。在面試前你也會上網找很多資料,提前知道面試可能會被問的問題,如果他們沒有分享,你也不會知道這些資訊。
如果大家看了以後,都默默消化但不發聲,會分享的就永遠只有那些少數人。
這是我分享的理由,因為我覺得我有義務要回饋。當我看了面試文以後,除了推個文按個讚,當我自己出去面試時也 po 一篇面試心得,是我覺得最好的回饋。因為這樣才會變成一個生態圈,才能永續發展。而且這個分享必須是公開的——就如同我以前看過的那些分享。
你可能會想說:「可是有些是我自己的故事,或者是瑣事,也對其他人沒幫助」
你存的那些雞湯文,不也是他們的故事嗎?這無關乎內容別人想不想看,畢竟那只是你的臆測而已。把東西分享出去之後,讀者會自己決定對他們是否有幫助。這就像面試一樣,你不面試之前,永遠不知道自己的價值以及定位在哪裡。只有踏出那一步,才能從他人眼中看見自我。
像你之前寫的那兩篇我覺得都很適合對外分享,但資訊揭露的程度可以自己拿捏,有些不想揭露的就拿掉,這完全沒關係。
總之就是這樣啦,期待你未來的作品~
推回饋!