Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

學生心得:futianshen #22

Open
aszx87410 opened this issue Mar 11, 2019 · 2 comments
Open

學生心得:futianshen #22

aszx87410 opened this issue Mar 11, 2019 · 2 comments
Labels
轉職成功 課程結業時已找到工作

Comments

@aszx87410
Copy link
Member

aszx87410 commented Mar 11, 2019

本篇長度較長,建議可以去原本的地方觀看:從放棄到入門 - 負基礎轉職前端工程師

但為了方便起見,底下還是會全文轉載


從放棄到入門 - 負基礎轉職前端工程師

警告! 本心得有強烈的倖存者偏見和歸因謬誤。
環境是變化。學習一定有風險,想知道自己適不適合,請自己來體驗。

註冊遊戲帳號:報名計劃

Ideas don't come out fully formed. They only become clear as you work on them. You just have to get started. —— Mark Zuckerberg

七月底在生日那天向老闆告知要離職之後,才開始準備下一步規劃,為的是逼自己一把,不給自己留後路,想離職的原因有很多,簡單來說的話,原來的環境無法獲得我想要的成長,加上薪資難以達到經濟獨立的要求這類比較實際的考量,應該跟大部分想轉職的人差不多,在計劃開始前就想找前端工程師的工作,緣由是大學時接觸過 WordPress。

那時候第一個想到的是中壢資策會、第二個想到的是 Alpha Camp,在多方考量下(開班時間、交通、住宿...)報名了某公司教育訓練徵選,還有不知何時追蹤的 Lidemy 粉絲專頁公告的「程式導師實驗計劃第二期」,其實在第一份工作之前也想過轉職前端工程師,不過那時候沒有一個明確的學習路徑,加上對程式有恐懼,所以用大學時的經歷找了第一份工作,那時我急需解決的問題是:「不知道要學習哪些技能才足夠成為一名前端工程師」,現在看起來這個問題定義的不夠準確,自然也得不到很好的答案。

很幸運的報名的兩個計劃都要求 Scratch 完成作品,在將所有的 Scratch 的範例模仿過一次之後,我用一個星期的下班時間做出了我的第一個程式作品,是一個有三個關卡遊戲 (Scratch 改版之後有點壞掉),而且為了要對應主題,硬是想了一個故事線,現在回顧發現,製作這個作品的過程,對我後面寫程式的過程很有啟發,比如:「在時間限制下,還沒想清楚如何動手的時候該怎麼做?要怎麼讓程式知道狀態改變了需要切換?」。

前者因為是公司比較商業化,廣告打的比較大,流程也跑的比較久,需要面試,最先報名的結果卻是最後出來的。後者有兩點很吸引我,就是「真誠」、「透明」,與前者不同的是「程式導師計劃」只要書面審查,對我來說實在是比較有利,相同的作品受到的重視程度完全不一樣(也可能是我不擅於用言語來行銷自己的作品),最後我錄取了程式導師計劃第二期。

受寫下面兩篇文章的前輩影響,對自己最大的期待就是得到前端工程師的 Offer,還有掌握自學的方法,至於計劃的部分,課程內容在課綱已經寫的很清楚了,雖然再清楚沒學過還是沒感覺,正所謂初生之犢不畏虎,有的話是大概是預期同學的學習進度和學習時間會差不多。

《工程師如果沒有自學的能力,還是轉行吧》 Kimix

《學習的黃金通道》XDite

加入課程後發現自己也看過《十年程式自學之路》Huli ,但在加入課程之前我真的完全不知道開課的是誰,只覺得這個人很誠懇。

玩過線上遊戲的人都知道最難的問題是什麼? 要取什麼 ID ?

所以所有課程的要用到的帳號(GitHub, Scratch, Codewars...) 我都直接用中文名字的英文拼音當 ID。

附件:大一的我如何利用for迴圈解決這個難題

創辦角色-初始能力及裝備:個人背景與條件

Just remember that all the people in this world haven’t had the advantages that you’ve had. ——《The Great Gatsby》

既然是實驗計劃,作為一個負責任的樣本,我希望能呈現的是我認為對我學習程式有幫助的具體思維習慣,以及進入課程前的程度,而不是抽象標籤化的能力和分數,儘量具體的交代我每一階段選擇的理由,如果有沒有交代清楚的可以提問,我們可以一起討論。

基本資料

  • 24歲 男

課前程度

  • 英文:多益 600 文法幾乎忘光光,閱讀英文文章需要依賴 Google 翻譯。
  • 程式:第一次接觸程式是在高一學 C++ 被當一學年,第二次接觸程式是大一學 C 低分飛過,害怕寫程式大學不填資工系,沒想到讀理工科系都需要接觸程式...,理解基本的邏輯判斷和迴圈,不太確定 99 乘法表怎麼寫(開課後發現我能夠自己寫出來),沒有使用程式解決過任何實際問題,沒接觸過 JavaScript, PHP,接觸過 Wordpress,能用 HTML, CSS 做基礎的切版。
  • 打字速度:中英打 50↑ 字/min

思維習慣和性格

  • 高中參加過科展,有研究找對比、問為什麼的習慣。
  • 大學社團擔任文書紀錄,有結構化的整理資料,隨時紀錄靈感的習慣,想不清楚的事我都會先寫下來。
  • 當兵前在家自學 4 個月。
  • 上一份工作是國小補習班老師,寫過教案,對學習這件事有自己的思考和理解。
  • 懶:會主動找尋現成的軟體工具解決自己遇到的問題。EX:iOS 的 Shortcut, Chrome 外掛 (OneTab, TurboNote...), Evernote...
  • 鑽牛角尖,喜歡研究一些不起眼的細節,比如:
    • 糾結 LIFO FILO 那個才是正確的用法
    • 為了比較不同鍵盤佈局那個打字比較快,而去學習體驗不同的鍵盤佈局(Dvorak)
    • 為了讓自己在電腦和手機上有個統一的中(繁、簡)英文輸入介面而去學習雙拼輸入法
  • 如果用 MBTI 人格理論來概略分類的話是 INTJ

我所擁有的學習條件

  • 完整 5 個月的在家自學的時間
  • MacOS + 32 吋螢幕

歡迎來到像奇幻村的新手村:進入課程

技術不是一、兩天就可以學會的,如何讓車子依指示行駛必須經過自己考慮和不斷的練習,我年輕的時候為了征服秋名山的跑道,連睡覺也在不停的想,一想到別的方法,馬上就會去試,連不可能的事也試了好幾次,雖然 10 個想法中有 9 個是錯的,但我仍然不斷的在試跑,這才能達到自己想擁有的技術,而不是靠別人教你,是靠自己去學的。 —— 秋名山車神 藤原文太

原本以為搭乘的是前往維多利亞的飛船,後來才發現是通往螞蟻礦坑的高級計程車

因為離職交接沒處理好的關係,晚一週才加入課程,幸好之前有一點點程式基礎,還是能夠準時交作業,不過,一開始會覺得沒跟上進度有點緊張,時間只夠把兩週的影片 Run 一遍。

第二週 | JavaScript 基礎

前兩週的東西是基礎,很重要沒有錯,但如果沒有重複使用大概也記不住,Markdown、《提問的技術》、《排版指北》都是在課程的後期才慢慢意識到實用性,個人 ES6 語法是在學習 React 之後才開始使用(在這之前只用 let),Git 則是在有問題又不需要立刻解決時,會新開一條 Branch Commit 紀錄問題當作存檔(在這之前只有交作業會用到),JS101 的習題更是到整個計劃 Run 完才全部解開,前期會有種想要掌握所有課程內容的衝動,但後來發現如果在這個階段能全部吸收很好,沒有也不用太擔心,只要先知道有這些東西就好,以及大概在什麼場景下使用,只要記得時不時的在之後的作業拿來用。

第三週 | 切版

因為之前有透過《網頁基礎15天》學過基本的切版,所以也沒造成太大的困擾,個人覺得他們 YouTube 開放試看的影片就很夠用了,另外課程當中用玩遊戲的方式學 Flexbox 的方式蠻有趣的,還好現實中沒有那麼複雜的排版。

第四週 | DOM

第四週開始,作業變得很殘暴(整個 BGM 都變了),因為初學者比較仰賴的是模仿的方式學習,但課程並沒有給予明確的訊息來源,以初學者的背景知識量,搜尋不到適合的資料做參考,我個人是因為學習策略的關係,使用模仿卡:「無恥的理解後抄襲」,解決 Twitch 和 Closure 作業結束這回合。

在這邊先來說說為什麼用「無恥的抄襲」來完成作業,前面第一個月,會有個心態就是要把每天的學習計劃在 Google 行事曆上安排好,一一掌握,但畢竟是學一個陌生的東西,學習的過程充滿了意外,所以每次訂定的計劃最後都無法確實的執行,為了讓自己可以在依循課綱上有個可以量化的指標,我為自己設定了一個目標,就是不管用什麼方法,我一定要在每週準時繳交當週的作業,製造自己跟上的進度的錯覺增強自信心,不過這個方法有副作用,在快到面試的時候才會爆發出來。

開課一個月之後,Huli 很貼心的邀請兩位剛轉職不久的工程師前輩來分享經驗,兩天實體聚會我都有參與,雖然內容很豐富,但效益應該很有限,原因是缺乏體驗,用 Huli 的話說就是沒有「痛過」,那時候的筆記要到現在工作以後看才比較能體會,其中我現在印象最深刻的就是得知有「需求規格書」這個玩意兒,這對我完成第五週之後留言板的作業有很大的幫助。

解題能力的試金石:獨立完成一個留言板

第五週 | 留言板雛形

Huil 只交給你磚頭和水泥...(簡易的 Sever 運作原理、SQL、PHP),教你怎麼接管線後,就讓你自由發揮蓋一棟房子(一個有會員功能的留言板可以發文和迴響),之後再逐步的教你怎樣加強這棟房子,讓這棟房子變得更加安全、舒適。一開始我也不知道要怎麼做,但是我就開始想到了有「需求規格書」這個東西,所以對我而言,會員系統和留言系統一開始就是在一起做規劃的,然後我就問了自己幾個問題,來搞清楚要從哪裡開始下手,要完成留言板的最基本需求有那些?這些功能的資料從哪裡來?這時候剛學會資料庫基本的 CRUD,其實從順序就可以發現第一步一定是要先寫 Create 的部分,一個有會員系統的留言板一定是要先登入?要登入的話那就一定是要先註冊,要註冊的話就要寫 SQL 語法,要寫 SQL 語法就要先設計資料庫 Table ,登入之後要怎麼讓後端知道使用者是誰?加個 Cookie 吧!...用問問題的方式一步步拆解問題,之後將結論整理成需求規格書。

不知道想的對不對就去試試看,每一個動作對我來說都是一個新東西,就一步一步來,有時候寫一些還會忘記自己為什麼要做這件事情、解決這個問題,所以有個開發筆記是蠻重要的,總之就是先做就對了,因為在除錯的過程中有更多的回饋產生,可以再從回饋中去找資料、問問題,PHP 和 HTML 寫在一起真的超級亂,而且那時候不懂的拆分,硬是將所有程式碼寫在一份檔案裡,這時候使用比較大的 32 吋螢幕就有好處了,比較好整理程式碼,也比較好查資料,當時我還會另外用錄影的方式來紀錄寫 Code 的過程,犯低級錯誤的時候還可以回去看看自己做了什麼蠢事,不過錄下來的影片真的蠻佔電腦記憶體的,對我來說效益不是很高,中間比較印象深刻的 Bug 是如何讓迴響顯示在回應的留言上,Scratch 作業切換關卡需要發出一個訊號來切換的經驗給了我啟發,讓我比較平順的度過難關,剩下的就是整理亂亂的程式碼和解決所有 Code 寫在同一份檔案,造成邏輯之間互相影響的細碎問題,最後準時繳交第五週的作業,蠻有成就感的。

雖然成功做出了留言板,但其實這時候的查資料能力還是很弱,一方面是背景知識累積的不夠,這不靠也是短期之內無法培養起來的。一方面心理上還是比較依賴課程所提供的訊息,所以基本上除了 Huli 教的 PHP 語法,我也沒找其他的 PHP 語法來使用,以減少意外錯誤發生的機會,一個邏輯以貫之,就是在明確最基本的需求之後,就想辦法先做出來,期間可能會想到很多功能就先記下來,把一切交給未來(不過事後證明在大多數情況下是沒有未來)。

第六週 | 資訊安全

資訊安全的部分我使用錯了學習方法,不是先去攻擊自己的留言板才去看資料,而是先去查了一大堆資料才去攻擊自己的留言板和修補漏洞,這也導致我在學習資訊安全的這週學習上比較沒有感覺,這給我一個啟示,理解一個新東西的方法有兩種,一種是建築與既有知識上的類比,一種則源於最直接的感覺體驗,沒有感覺的學習一下就忘了,就像我學了那麼久英文卻都不會用,因為認為英文很重要這件事是停留在認知層面,都是別人告訴你的,書看了再多都忘了,也是因為缺乏感覺,感覺這個詞也是課程中 Huli 在課程中、面試中反覆提到的。

第七、八週 | jQuery 與部署

延續前面的留言板改用 Ajax 做優化,並將網頁部署到自己的虛擬主機上,這時候因為急於把作業做完,加上主觀上認為 jQuery 是被淘汰的技術,沒有太鑽研語法,很多可以使用 jQuery 的地方,還是繼續使用原生 JavaScript 做,在課程 Run 完後回看,如果當初耐心點去查 jQuery 的文件,應該可以用更簡短的語法、更少的時間解決同樣的問題,使用 jQuery 比較大的困難是遇到 Event Delegation,不過即便在我成功解決這個問題之後,還是不知道問題產生的原因,我想這也是新手會一直卡關的原因:根本沒辦法清晰描述並界定問題產生的條件。至於部署的部分大概花了一整天查了一大堆資料,壞掉了就 Rebuild 重做一次,因為裡面實在是太多坑了,又完全不懂 Linux 的操作,只能依照虛擬主機的說明文件 Copy & Paste,最後在反覆 Rebuild 之後整理出這篇《一小時完成 VPS (Virtual Private Server) 部署》,至於額外教的 Trigger, Transaction...資料庫操作的部分,因為沒有在作業中用到,所以只有非常模糊的印象。

大約就是在這個時候,Huli 在 Slack 討論區,發了一篇文章鼓勵同學,原因是很多同學跟不上課程的進度,自己在第六週的週末有參加一個實體的讀書會,才驚訝的發現有些同學是在職學習的(深感佩服),加上課程真的蠻緊湊的,連我全職在家學都覺得很吃緊,學越多遺漏的東西更多,如果沒有一套學習策略和足夠的時間,覺得跟不上應該也是很正常的,所以我就在 Huli 的文章下面分享了我的學習方法,目的是藉此整理這段時間的學習方法,如果有同學藉此加快的進度的話,還可以一起完成 Final Project,內容如下,一個邏輯一貫之:先建立架構,再附著語法;降低挫折,增加信心;要影響自己,先搭建環境。

大家好,我是目前為止還算有準時交作業的 Tian,有句話說:要一個人放棄寫程式就叫他去學 C 語言,高一資訊課學過 C++ 被當一學年,因此大學工程學群的志願都填,就是不填資工系,沒想到所有工程領域的科系都要學 C 語言...,因為系上教授計算機概論的是佛系教授,上課不去教室、不去上機、只會迴圈,緣分到就 Pass 了。
開課一週後才成功離職,全心加入這門課程,加入之後也不覺得自己有多少優勢,就是每天花大量的時間去吸收,跟作業有關的知識。分享一下我這段時間的學習方法,如果你有不同看法可以一起做交流。

  • 原則:建立自信。每週作業準時交,無論用什麼方法。(包含理解後的抄襲)
  • 計劃:建立模糊框架。每週初先依據課綱列出關鍵問題(帶著問題去上課)。
  • 直播:建立模糊框架。看不懂就去做其他事了,知道自己還欠什麼。
  • 上課:模仿。把 Sample Code 全部抄下來,huli 做的動作全部自己做一次。
  • 作業:做中學。別在查資料、看課程了(你只是在拖延而已),有了模糊框架,列出作業基本需求(別急著做額外功能增加 bug 的出現機率,徒增挫折),稍微規劃作業步驟之後,就直接去寫爛 Code 除錯,遇到問題也先別急著自己查資料,看 huli 提供的資料(網站、課程 sample code),答案往往就在裡面。
  • 反饋記錄:
    • 螢幕錄影 QuickTime:不小心操作失誤,又不知道為什麼的時候可以用第三人稱回看。
    • 筆記 Evernote, Xmind
      • 功能靈感:列出想做的額外功能
      • 課程筆記整理
      • 問題
    • 日記 Evernote
    • 進度報告 Github
  • 搭建環境
    • 實體:去圖書館借所有相關書籍堆滿你的書桌,不管看或不看
    • 虛擬
      • VS code 安裝有利於減少時間的外掛。
      • 買課不看,瀏覽大綱,知道哪裡有資源可以查
    • 運動:每天坐著非常不舒服,每1-2小時起來走動,每天下午4點跳繩15分鐘(隨時隨地都能跳)
    • 睡眠:每天睡滿 7 小時。

就算現在能準時完成作業我還是覺得自己寫的是爛 Code 不夠精簡,都已經全職學習了,看到前面有同學進度飛快也會覺得是不自己學習效率太低,而且急於準時完成作業,不知道會不會有基礎不穩的問題(六角學院 JS 初階考題 78 分),不過我相信語法是用來解決問題,知識只有在能指導行動的時候才有價值,先知道有那些東西可以學、需要學,等遇到的時候在回來研讀,學習效果可能會比較好,關於複習的部分我也還在調整。

計劃調整之後

第九、十週 | JavaScript 底層原理與前端開發工具的使用

相對於前面充實的兩個月,第九、十週的作業輕鬆了點,學習上也比較鬆懈,除了接觸久違的 JavaScript 之外,還提供了很多關於 JavaScript 底層的原理,以及初淺的接觸開發工具的使用,比如:CSS 預處理器,Webpack, Gulp,不過除了 CSS 預處理器,對其他工具的使用都沒什麼感覺,這個時間點 Huli 稍微改變了一下課程規劃,讓進度比較前面的同學有機會可以透過直播的方式幫留言板做 Code Review,所以我花了一些時間整理之前亂亂的 Code,發現如果程式碼要優化其實是沒有上限的,如何兼顧可讀又精簡真的是一大學問,成為直播主角是個很新鮮的體驗,在這時我也在考慮要不要改變學習策略繼續跟下去,因為覺得學越多 Lose 掉越多東西,即便有交出作業也沒有到達熟練的地步,所以有在直播中詢問 Huli 的建議,最後基本上還是繼續按照原來的策略進行。

十一週 | Express

使用 Express 後端框架代替原來的 PHP,覺得用一個星期學真的是有點趕,因為 SQL 資料庫放在自己的虛擬主機上,如果要從遠端連接,還要解決一些防火牆的問題,虛擬主機對我而言真的是一個大黑洞,除錯除到很沒有耐心,Express 的程式邏輯又和 PHP 不太一樣,對於 Sequelize 這個 ORM 的 Library 也僅止於知道作用但不會使用(資料庫 table 的 Join),密碼存明碼的部分也沒有處理,短網址作業也比較偏抄襲的方式,就先繳交作業了,當然最後也沒有使用 PM2 部署(想要將 PHP 和 Express 同時使用同一台主機,但沒時間研究),整體來說學的蠻糟糕的,直到最後的履歷上都沒有填自己會 Express。

十二到十五週 | React

因為一開始就想成為前端工程師,直接放棄最後一週的 PHP 框架,時間都拿來學 React 這個前端框架,除了教學影片之外,還嘗試自己閱讀 React 的官方文件,第十二週的作業花了兩週才完成,原因是雖然在課程初期和中間有提到 ES6 和物件導向的語法,但真的完全不知道有什麼用,是在接觸 React 回頭再複習幾次,才將這些東西整合到了一起,因為在寫 PHP 和 jQuery 的時候都沒特別沒用到 JavaScript ES6 和內建函式的語法,所以可以說是從頭開始學習,總的來說如果能識別出模式,有模仿的能力,我認為直接學 React 其實感覺也不會太困難,前面的接觸更多時候是讓你知道有這個東西,在看不懂的時候能夠查到這個東西是什麼,因為人是無法思考自己完全不知道的概念的,在一連串的模仿之後,我完成了所有作業,總算是跟完了,但好像沒有一樣技能是熟練或專精的,這時滿滿的技術債在身後盯著我,期末專題大概也沒什麼機會做了。

為了能夠準時完成作業(前面說到這是我很重要的衡量指標)我總結了下面解決問題的 6 步驟,極其功利的解決問題,當然礙於時間因素,不是每個問題都能完整走過流程,很多不必要馬上解決的問題都還記在 Evernote 資料庫裡,而且沒解決的問題還有越來越多的跡象...解決問題的最好方法似乎就是遺忘。

  1. 冷靜、耐心、心平氣和(難)
  2. 清晰理解問題
    • 儘量清晰描述問題
    • 仔細閱讀錯誤訊息(通常前三行就好)
    • 反復刪改實驗對比(動作前、動作後有什麼差別?)
  3. 判斷問題是否需要現在解決(標準:是否影響作業進行)
    • 不需要現在解決先紀錄在 Evernote 資料庫或用 Git 做個紀錄,如果在看影片就用 TurboNote 紀錄下來。
  4. 拆解問題,記下解題思路
    • 流程圖
  5. 找尋解決方法
    • 第一手資料:說明文件、標準(若難以理解看第二手資料)
    • 第二手資料:教學課程、網路文章、書籍、StackOverflow、Google (最好有提供第一手資料來源)
  6. 總結筆記輸出

轉職任務:面試之旅

If You Don't Know Where You're Going, Any Road Will Take You There. —— 《Alice's Adventures in Wonderland》

我把自己的面試的過程,依照順序分成三個階段。

  • 不敢面試階段(開放 104 履歷)12月下半月:有公司主動找你去就去面看看,覺得基礎還不夠紮實,完課的時候自認為 jQuery 都還不太會使用,JS101 的題目都還沒寫完,。
  • 試水溫階段(海投)1月上半 每天面一間:了解市場需求、熟悉面試流程。
  • 認真篩選階段(邊做 Side Project 每天投 5 間)一月下半 :只去面你願意去的公司,多研究一下公司的業務內容,減少無效面試,主動增加限制(比如:公司類型、交通時間、使用框架技術等等)

在快速的將課程 Run 過一輪之後,我就開始回去補技術債,先把之前沒有完成的 JS101 的 25 題習題全部做過一次,之後再去解 Lidemy OJ 的題目,將之前留言版使用原生 JavaScript 的部分全都用 jQuery 改寫,並用 jQuery 做了一個功能稍微複雜一點的 Todo List,上述這些還知識技術債中的冰山一角,作業的回饋還有很多沒有檢討,還有很多課程的內容沒理解 CSRF、DOM 的事件傳遞機制、Event Loop 、Promise、Express、ORM(Sequelize)、物件導向...、Closure、this 等族繁不及備載。

自從計劃完成一輪之後 Huli 就一直鼓吹我出去面試,去體驗一下面試的感覺,還提供了履歷模板做參考,因為債務累積太多,所以一直不敢去面試,就只是先開 104 的履歷,把基本資料加上這段時間比較熟練的技能列上去。稍微整理了一下作品集,也沒寫自傳,有面試邀約就去看看,記得在我第一次面試之後,Huli 跑來問我有什麼感覺?我回說:「感覺找到工作並不難,如果要找到不錯的工作就要多努力了」。但是努力是沒有上限的,熬夜寫 Code 算努力嗎?好好安排生活作息,擬定學習計劃就叫努力嗎?偶爾上 YouTube 看個廢片、早上 6 點爬不起來學習就是不努力嗎?技術債是還不完的,因為知識是沒有邊界,可以一直深挖下去的,直到 12 月底 LinY, Amelie, Yuki 舉辦聚餐後,發現公司對新人比較看重的是個人特質,才開始海投履歷,下面是我當天的心得總結。

關於學習:職業強迫和匱乏感可能才是學習的最原始動力

職業強迫會使學習更加高效,真實的工作的環境,要你解決特定問題,以輸出倒逼輸入可能是更適合職場人的學習模式,
先抄程式碼解決問題,回顧的時候去找這些程式碼的文件原始出處可能會是蠻有效果的作法。不過如何規劃回顧的時間就是另一個問題了。

推薦 Chrome 外掛

  • TurboNote(影片筆記)
  • OneTab(蒐集大量資料)

關於拖延:跟自己打心理戰

  1. 手機畫面調黑白
  2. 工具:買讓你會覺得心疼的,比如:Mac電腦、各種書籍。
    利用損失規避心理,不用就賠了,少用一點都是一種浪費。
  3. Chrome 外掛
    • StayFocusd(防止在各式社群網站遊蕩)
  4. 公開承諾

關於工作:一切靠積累

從過去工作的經驗萃取出邏輯和哲學,遷移到下一份職業。
解決問題不只是寫 Code ,比寫 Code 更難是跟陌生領域的人溝通。
工作沒時間讓你盡善盡美,要練習忍受能滿足需求解決問題的爛 Code,因為那可能是風險更低的作法。

關於面試:面試是與自己的對話,能說服自己的才能說服別人。

關於求職:最虛的東西反而是最真實的,最實際的東西可能是最無關緊要的。
虛:觀察、感覺、價值觀、人格特質、思考模式
實:作品集、履歷、自傳(甚至可以不用)
在勉強準時跟完課程前端部分之後,就開始假複習之名,行拖延面試之實,
因此我計劃在明年1月開始投履歷,到時侯再和大家分享。

從我的經驗來說也是如此,只不過這個階段,因為跟課方式的關係,覺得很多課程中的知識(比如:CSRF、DOM事件的傳遞機制...)還沒有掌握的關係,加上心態上還是抱著試水溫的心態,對於未來進入職場上需要的額外投入還沒有很清晰的認識,比較印象深刻的一次面試是,有間面試官問我:「我用人第一個用高智商,第二個用學習能力強,你要怎麼證明你可以在一個月內接手這份工作?」因為性格的關係,思考的比較慢,如果答案在心裡還沒有很明確會比較傾向保留,這點在面試的時候是很吃虧的,當然大部分的面試官人都還是蠻好的,幾乎都是面談居多。

這段時間會有很強烈的自我懷疑,會想說是不是自己準備的還不夠,我想如果我那時侯有時間靜下心來,好好的寫一篇從頭到尾的心得,釐清這段時間的學習,我想在面對未知的時候可能會在自信一點。

經過前面兩個階段之後,剛好去面試的公司裡有 Huli 認識的人,所以 Huli 就很熱心的幫我問了一下面試狀況,給我了一些 Feedback 簡單濃縮成一句話就是「沒有說一定要自我感覺良好,但至少要有種我會的東西其實不少」,我也反思了一下自己面試的過程,不自信的來源有哪些,主要有兩個:

  1. 過去四個月主要是使用模仿的方式學習(影片),對於自學上(直接查文件、查資料),多快能掌握一個新技術比較沒有信心(每間公司使用的技術都不大相同,一千家公司就有一千種前端工程師)
  2. 課程中的很多知識都只有模糊印象。

在參考 Amelie 的履歷之後,我就幫自己設定一系列要完成的作品計劃,一方面是確認自己有自學的能力,一方面是增加自己的作品集,就在我完成第一個獨立完成的作品沒多久,年後的第一天我拿到了 Offer。

前端工程師之路...:工作滿月

Now this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning. —— Winston Churchill

拿到 Offer 的隔天我就去報到了,因為公司使用的前端框架是 Vue,和之前課程學的不大相同,所以工作前我詢問了一位已經在工作的同學要怎麼學?對方非常的和善的跟我說:「RTFM」,我就自己乖乖的去讀文件學 Vue 了(Vue 的文件真的是蠻詳細的)

工作之後才發現,新人通常被賦予的工作是維護性質的工作,個人覺得是蠻好學習的方式,工作上專案需求的複雜程度,很多細節,都是參加計劃時無法想像的,相比之下過去的作業真的是太簡易了。

雖然課程中有九成以上的知識都用不到,但培養的綜合能力(研究、解題、統整),是可以遷移到工作上的,目前的 Task 就算之前沒接觸過也都能在 Google 大神庇佑下解決(也許只是我還沒遇到難題),不大需要去問前輩問題(目前問了 3 次左右),求職前的恐懼和焦慮都是自己想像出來的,剩下的只是寫出來的 Code 好不好維護而已,相信會隨著經驗累積做的越來越好。

工作的第一週主要是自學 Vue,學的方法不外乎就是先看看 Udemy 上免費的 Crash Course、讀官方文件、實際去維護專案,跟上課不太一樣的是,如果不主動問出問題不會有人會跟你說為什麼要使用這個技術、這個技術的脈絡是什麼。

之後的三週開始維護專案,之前實體分享活動有提到,但沒體驗過的問題也開始浮現,比如:確認需求在開始動工這件事,一沒確認好,又剛好是連假前上線,一個菜鳥就只能自請回去加班,趕緊把網站修好,當然這個問題會發生大部分原因是不熟悉業務流程和專案造成的,不過算是一個影響深刻的體驗。

最後,工作上使用的工具很多在課程中都不會學到,需要自己重新學習,你需要相信自己能做在短時間掌握這些新東西,但課程學習的內容可以培養你的思考方式和觸類旁通的能力,解完 Task 之後就是補技術債、學習新技術、優化程式碼的時間,學習是自己的事,沒有人能真正教你東西,公司只能提供資源和環境,我想在工作三個月之後就必須要訂一個自己的學習計劃表出來。

總的來說目前課程給我在工作上的幫助有:

  • 培養綜合能力(研究、解題、統整)
  • 了解背後原理的意識:學習一個新技術之前,會讓自己問一些問題,為什麼要使用這個技術?不使用這個技術會怎麼樣嗎?有沒有替代的方法?他的邏輯是什麼?讓我在學習過去沒碰過的 Vue, Vuex, Nuxt 的時候可以有個大框架去吸附零碎的知識。
  • 接觸過前後端,理解資料接受的方式,有助於確認問題發生在哪裡。
  • 使用 CLI 交作業方式,讓我可以快速理解工作流程,可以不依賴 GUI 比如:Sourcetree。
  • 原生的 JavaScript 寫法,在實作一些簡單功能的時候可以不依賴 Library 或套件,減少研究、查文件的時間。

快速入門是可能的,但速成絕無可能。就算你有主角光環、是天才中的天才,能三天內習得卍解,最後還是需要時間來掌握、發展自己的技術。

我眼中的程式導師實驗計劃

第一次痛、第二次爽、第三次就像火車過山洞。 —— 某高中化學名師

不是怎樣的課程?

不是一堂帶你學到會,也不是一堂讓你問到飽的課。

這堂課程對我來說的是怎樣的課程?

演化史

對我來說這是一部演化史,會讓你理解一個工具之所以出現,是為了解決當時外部需求和環境的問題,如果將網路技術比做一個生物體,那哪些我們先在看似沒用的東西,比如:IE, jQuery, JSONP...,就是這個生物體上的痕跡器官,你可以從課程中快速理解網路技術隨著時間和環境演化的脈絡,有種重演說的感覺。

簡單與感覺

簡單的背後是複雜,課程的安排會先讓你感到不適甚至痛苦,之後才會跟你說有哪些已經出現的工具,可以幫助你解決這個問題,儘量在教授入門所需最少必要知識的同時,也清楚的讓你了解簡單作法背後原理與脈絡,所謂的簡單其實是除錯、總結之後暫時不會出現錯誤的結果,不能完全理解也沒關係,先從模仿開始,基礎能力等到三轉、四轉的時候總會點滿的,你可以選擇當個狂點智力前期超弱、後期爆發,但可能讓你放棄遊戲的法師,也可以選擇狂點敏捷,能準確命中問題的弓箭手,反正只要玩到最後,都會是團隊中不可或缺的輸出,以我來說我比較適合後者。

成長

這是一個持續成長的課程,也許計劃並不完美,但它正在變得更好,你可以跟著計劃一起成長。

建議

給 Huli

在面試時自信心不太足夠,兩個的能力我覺得差不多,但求職的結果卻大不同,前者順利許多。

這邊除了本身的個性差異以外,身為老師還有一點要去想的,那就是:「為什麼學生會沒自信?」,是不是因為我教的東西不夠深、不夠多,讓他們覺得技術能力還不夠?如果不是,那是什麼讓他們這樣覺得?有沒有其他方法可以讓他們產生自信?例如說多做幾個作品,或是跟其他的同學來做比較,> 抑或是直接找幾個工程師朋友來幫他鑑定?除了技能以外,還有很多事情是我們可以去思考的。

先在這邊對號入座回應一下,程度很多時候比較來的,而容易拿來比較的就是同學,程式邏輯跟真正的高手比起來也沒到頂尖,當看到比較出色的同學時就會覺得自己還不夠,但這種匱乏感和不自信是很難解決的,加上因為跟課時間較短,為了讓自己感覺上有跟上進度,主要採用模仿的學習方式,還沒有達到獨立自學的程度,又累積一大堆技術債,英文不強的我難以評估學習一門新技術需要花多長時間,在面試的時候才會比較沒有自信,事後發現這種擔心是多餘的,不過也僅僅是這一個月的看法,不同公司對待新人的方式可能會不一樣,上面這些問題我覺得這在延長課程時間之後能獲得緩解。

其實建議大部分的同學都提過了,該想的 Huli 自己也都想到了,我就丟幾個自己比較有感覺的問題。

降低模仿的門檻

  • 提供各主題關鍵字,讓沒有背景知識的同學可以更快的找到所需的資料。
  • 提供各主題常見問題,計劃已經第二期了,Huli 那邊應該也搜集了不少常見問題,可以直接公開,讓同學可以自己做故障排解,在回答重複問題的時候應該也比較省心。
  • 推薦各主題的比較有效的學習方法,如我心得第六週提到,這週我用錯的學習方法,採用先查資料整理,才去攻擊自己的留言板,在學習上效果比較差,如果能有個推薦學習順序應該還蠻不錯的,有點像建議技能配點順序的概念。
  • 教學影片太長,不方便模仿與回看
    不提供 Sample Code 原意是不想讓我們 Copy & Paste,但影片點來點去真的蠻不方便的,不好複習,我自己基本上是只看一次,就不想再看第二次了,第一次就將程式碼全都抄下來,頂多使用 TurboNote 加個註記,這點之前實體活動的時候有提到可以用圖片的方式,個人覺得 Udemy 和 Hahow 的播放器蠻不錯的,可以直接在影片中做筆記,還可以看到別人對這個影片的提問,但這應該短時間之內也沒辦法解決。

社群

目前計劃主要是以 Huli 為核心在運營,同學比較難知道彼此的學習狀況,也比較難交流(學習進度很多時候是比較出來),這是線上課程本來就會有的限制,如果再加上學習進度不同的話,討論上也很難熱絡,但如果不以 Huli 為核心的話也比較難把握同學的狀況,基本上也很難解。

前後端配合

第 12 週之後 React 雖然是前端的部分,但感覺後端應該還是應該讓自己做(比如說讓 11 週的 Express 和前端有連貫),比較能理解這個 API 為什麼需要這樣設計,或者可以讓要轉職前端的同學和轉職後端的同學合作,不過這就又要媒合很麻煩。

期末專題的必要性

面試時,個人作品的佔比其實不是很重,對於本來就很有自信的人來說可能也不需要,但當你能獨立依據自己的設想查資料、Debug 做出自己的作品時,會有比較大的底氣去相信自己能夠快速上手學習任何一個過去沒碰過的新技術。

給想參加第三期的同學

確定自己有明確的動機,準備充足的時間,想方設法的讓自己保持耐心和自信,學習程式語言和技術跟學英文一樣,只需要一個字:

後記

外人看來的彎路對自己來說都是直路。

不得不說這篇文章的其實有點標題黨,負基礎的意思其實是在於心態,以程式的基礎來說我並不算是個初學者也不算沒天份,但因為過去的經歷讓我遲遲無法跨出第一步,就像一隻從小被綁在木樁的大象,即便有能力掙脫,但還是逃不出心理上的束縛,這段時間因為各種限制最後選擇跳繩作為運動項目,經過一段時間的練習之後可以跳到 2000 下,是我上一次跳繩的 100 倍,一件事即便一開始再不擅長,經過刻意練習之後還是能夠掌握的,只是需要時間,過去一年半從老師變回學生身分,對於學習這件事也有更深的感悟,路還很長,你也不需要透過證明別人的錯誤,來顯示自己的正確,科學與信仰是不衝突的,記得在謙遜的同時抱持自信。

最後推薦一首歌似乎是種潮流

我希望

@aszx87410 aszx87410 added the 轉職成功 課程結業時已找到工作 label Mar 11, 2019
@peiyunchu
Copy link

peiyunchu commented Mar 11, 2019

很感謝你寫的這一篇, 將學習的每個階段紀錄得如此完整細膩,讓我知道自己的學習方式和態度有非常非常大的進步空間,也藉由這篇心得文,我對於自己學習過程中的一些無以名狀,有比較正向的看待和了解。這篇日後會成為我徬徨卡關時一再反覆參考閱讀的好文。 ( 引用愛麗絲夢遊仙境的那句話,我覺得有共鳴。 )

@aszx87410
Copy link
Member Author

aszx87410 commented Mar 12, 2019

在這一期裡面,有幾個我從收到報名信那一刻開始就看好的學生,futian 是其中一個。如果要問原因的話,就是他當初交的 Scratch 作業,這是我第一二期看了快一百份報名表裡做的最完整、最好的一個作業。

再加上他以前就有一些程式背景,對於程式基本邏輯跟前端的一些基礎都不陌生,有這種基礎以後,其實剩下的就是再練熟一點以及學一些工具跟原理的問題。因為那個 Scratch 作業實在是太驚豔了,所以我那時就對他印象深刻。

隨著課程的持續演進,我還是很看好這個學生,因為他偶爾會在群裡面 po 一些學習心得之類的,像是上面他所貼的他上課的方法,就是先求作業有寫出來,抄襲模仿也無所謂,之後再回來補進度。這是一個好的學習方法嗎?我不知道,畢竟每個人都有自己適合的學習方法,但無論是不是客觀上來說好的,都有一個優點值得稱讚:至少這是一個方法。

光是你找到一個學習方法並堅定地去做,就比很多還在摸索方向的同學進度快上許多了。

除此之外,這些心得也不是隨隨便便就可以寫出來的,你必須先有一段時間的積累、整理消化以後再轉化成文字輸出,每一個階段都必須付出一些心力,而且輸出是對知識的再整理,可以幫助自己重新整理所學。

所以從頭到尾我都滿看好這個學生,到現在都還是。他的面試過程不像其他同學那麼順利,如果論能力,我其實相信他不會輸到哪裡去,而且我看好他的學習能力跟整理資訊的能力,但要加強的地方可能是一些心理素質的部分。但這不只是他的問題,這是所有人的問題,連我自己也會碰到這種自信問題。

就像他自己說的一樣,可能是學習的方法造成了對自己能力的不自信。我上完課了、寫完作業了,可是我會什麼?我真的會寫 code 嗎?可是我確實知道我有好多東西還不會...

自信在面試時其實是會影響很大的一個因素,有沒有自信對方都看得出來,太沒自信的話就有種連自己都不相信自己,別人該怎麼相信你的這種感覺(除非對方能夠一眼看出你的潛力之類的)。所以再沒自信的人,面試的時候都要想辦法變得自信,至於該如何做到,請洽詢面試小達人 Amelie。

這是他的問題,也是我的問題。

如果在課程的教學上能夠再放慢一點,學生就能夠學得更紮實,而不是學完之後忘記自己學了些什麼。這樣的話結業時就會是有自信的,會知道自己學會很多東西。或至少我希望的是在出去工作以後,你能夠表現得比其他同事好,知道的東西比他們多、會的東西也比他們廣,到時候就能意識到原來自己在課程中其實學了超多東西,只是那時候無從比較所以不知道而已。

感謝心得提供,這篇真的寫得很棒,我最喜歡的部份是每一段的引言跟以楓之谷貫串全文,能夠有這樣完整的學習歷程真的很不容易,計劃前、計畫中甚至是工作以後都誠實地把想法記錄下來,對我來說是個很棒的參考資料。

希望課程就像給了你一張經驗加倍卡,讓你能夠不斷快速升等,祝之後上班順利 🍁

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
轉職成功 課程結業時已找到工作
Projects
None yet
Development

No branches or pull requests

2 participants