回到文章列表

程式導師計畫第二期結業心得

TWGD / 2019-05-16

這是一篇參加「程式導師計畫第二期」的結業心得。零程式基礎,四個月轉職前端工程師。心得文發佈來源及計畫主持人 huli 的回覆請見:https://github.com/Lidemy/mentor-program-2nd/issues/27


因為每一個決心轉職的人都很努力,而我沒有程式相關背景,能夠在計劃結束之前,被看見、被認可,我覺得自己是很幸運的。

零程式基礎、無理工背景,投入自學計畫

大學文組,工作專業是整合行銷,程式基礎為零

高中是雄女。大學念的是傳播學院,主修的領域橫跨傳播及管理。因為在學時就有一些接案機會,畢業之後,我直接延續這樣個工作型態,成為了一個整合行銷領域的獨立接案工作者。在轉職工程師之前,我沒有投過其他履歷,也沒有面試過其他全職工作。

除了知道 Wordpress 是什麼之外,在我投入導師計畫之前,無論是工作或是學習背景,都與寫程式沾不太上邊。至於我為什麼會知道 Wordpress,是因為在網路上看到類似「不會寫程式也能架站」的字眼,覺得太神奇了,爬了一些免費教學文章,就照著上面的教學去買網域、虛擬主機跟安裝 Wordpress.org。哇!還真是太神奇了,可以一鍵安裝、可以套版,架一個站只要按幾個按鈕就完成。不過,後來想到「我為什麼不直接用 Wordpress.com 就好了呢(欸」,再加上其實自己架站還有很多意想不到的維護要注意,覺得沒有資訊背景的自己根本應付不來,就不想再繼續研究了。Wordpress 裡面有個「自訂 CSS」,當時認為那是給工程師寫的東西,我那時不想寫程式就懶得深究了。回想當時,真的是很一鍵架站,只知道有 HTML 跟 CSS 這兩個東西,但實際怎麼寫完全不知道。

擴張、進修或跨界?Pokemon Go 給了方向

而我為什麼會動了轉職的念頭呢?起因是工作到一個階段會開始思考下一步該如何走下去,你會開始盤算:現在的工作規模是否要擴張?現在的自己是否有哪些不足,而應該繼續進修?或是,有沒有其他跨界的可能?有一篇文章 文組生轉工程師攻略 裡的自我盤點,滿接近同為文組人的我,當初對自身的職涯評估。

同時,我是開服以來從沒棄過坑的 Pokemon Go 休閒玩家,在玩家群中,常常開玩笑 N 社每次更新就有新的 Bug 給大家驚喜,甚至有人笑說 N 社到底是美術公司還是遊戲公司。有次朋友一句玩笑話說:「該不會你這樣不會寫程式的人去投履歷也會上吧 XD」,雖然這是句玩笑話,但對於當時在思考人生下一步的我來說,這真是太有趣了,不妨就來 Google 看看「如何成為工程師」。

如何找到課程?Google、PTT 爬文

我開始 Google,下幾個關鍵字「工程師 轉職」之類的,老實說,真的會冒出很多資訊。從這些資訊之中,可以再進一步下想繼續了解的關鍵字,這個議題的輪廓慢慢變得更清楚,例如:你會開始了解工程師分為哪些、知道有個 Soft_Job 版可以去爬、有哪些轉職的經驗分享、有哪些轉職的管道。

我就是在這些爬文的過程中,漸漸梳理出:轉職的目標(網頁工程師)、可能付出的成本、該具備什麼能力、有哪些學習資源。然後我看到了 huli 的文章與程式導師計畫。

為什麼選程式導師計畫

其實決定學習程式之後,對於學習的方式,我是偏好自學的,因此先排除了一些實體課程。Google 下了關鍵字「程式 自學」,第一頁就會出現 huli 的文章:十年程式自學之路,之後我陸陸續續爬了不少 huli 的文章(也包括其他跟程式無關的文章,爬這麼多,好像變態 XD),發現我滿欣賞 huli 這個人的思維與特質,且程式導師計畫的進行方式好新奇,就決定全職投入計畫了。

至於為什麼偏好自學的方式: 因為已經滿習慣學習新事物用自學的方式,例如:學日文(阿宅嘛~)、學一些剪輯或繪圖軟體之類的,滿享受自己找資源的過程。另外,這時候也大概有覺悟,未來若作為工程師,是需要常常自學並自主解決問題的,不如在入門時就用自學的方式來試試吧。

❗ unsupported type: quote

收到錄取通知後,就開始預習了

其實我就是那群壓 deadline 送出報名信件的其中之一,雖然前面做了不少評估,也花好一段時間準備報名資料,但送出這個決定之前,還是會糾結一下。畢竟送出後,就沒有退路了。

從收到錄取信到開課之間有大約一兩週的時間,huli 請大家輕鬆等待課程開始,但我其實一點都輕鬆不起來 XD,因為緊張沒有程式基礎,擔心之後會不會跟到挫賽,然後黯然放棄。所以,我開始預習課程,先看 Lidemy youtube 上釋出的第一期試看課程,先去 W3Schools 學習 JavaScript 基礎語法,先試著做了第一期課程前一兩週的作業。本來計畫課綱預計花兩週學習的 JavaScript 程式邏輯,其實我大概花了一個月吧。如果我沒有先預習,我在前兩週作業一定也會大卡關。

另外,huli 在公布錄取通知的時候,有請大家之後可以參考排版:中文文案排版指北。雖然我之前會注意排版的舒服與否,但從沒看過這個文字排版指北。我覺得這種排版習慣很棒,所以準備開課前,我也開始練習依這份指北的原則來撰寫文字,例如:在中英文之間加上空格、標點符號要用全型。現在的我,已經養成這樣的習慣了。

課程前期:前端基礎 & 後端基礎(九月、十月)

一開始要先學 Git,之後作業都是用發 PR 的形式來繳交。我是先看 為你自己學 Git 來學習的,因為自己相對偏好文字及有系統的章節編排來做為基礎教材。裡面的【狀況題】都是之後滿常遇到的 Git 情境,現在還是很值得時常參考。

我自己覺得,學習前端基礎階段最大的階梯在於 第四週。這週要知道:如何用 JavaScript 操控 DOM 物件、什麼是 API、什麼是 Ajax 等等。我自己覺得資訊量有點大,一週的時間內要消化完這些觀念並實作出作業,非常有挑戰性。現在回想,這些都是前端很重要的觀念,如果可以拉長點時間來做更多的重複小練習,體會更多的細節,我想會對自己更有自信,前進的步伐會踏得更穩健。

五~八週是實作留言板,體會開發一個產品,一次次加新功能上去的感覺。例如:實作出留言板、再實作登入系統、再導入 Ajax、最後部署到主機。另外,學習 Session 機制的部分我覺得很有趣,是先用 Cookie 來實作出 Session 的概念,之後才真正用 Session 來實作登入機制。在資訊安全的部分也談到 XSS、SQL Injection、CSRF,我認為資安這塊很深奧,自己目前只能算是有概念而已。不過課程中有帶到資安觀念,是我現在回想起來感到很珍貴的部分,一個工程師如果不具備資安的敏銳度,真的什麼都不用談。

體會到課程特點:課綱的安排注重理解概念

這個時期,體會到的課程優點就是:『課綱的脈絡』。我可以清楚察覺到 huli 安排在課綱中的巧思是什麼,作業的安排是想讓大家學到什麼,如同前面提到留言板五~八週的演進。另外,由課綱的脈絡中也可以發現,huli 的教法不求你套用工具速成,而是要求你體驗原生的觀念及用法,例如:先學 Vanilla JS 後才談到什麼是 jQuery、為什麼要用 jQuery 等等。

實體小聚會

九月底在小樹屋辦了兩場小聚會,我去了其中一場,獲得不少學習資源分享及面試經驗談,第一次知道原來面試工程師是可能會有技術考試的(筆試或是 Live Coding)。

❗ unsupported type: quote

課程中期:接觸現代前端工具(十一月)& 課程微調

留言板的一對一 code review

這個階段 huli 稍微調整了一下課程進行的方式,完成留言板的人可以報名一個時段,有一個小時的一對一 code review 時間。第一次開口介紹自己的 code 怎麼寫,很緊張但也很新奇。透過一對一,可以梳理一下當初寫留言板時的邏輯,老師還能揪出一些自己沒注意到的小細節。另外,發現 Zoom 滿好用的!

一步一步拆解,更易理解 JavaScript 的運作

這時期談到簡單的資料結構及 JavaScript 的 event loop,是我覺得很有趣的地方。我從來沒想過自己可以對一個程式語言產生興趣,並想理解它的運行,也許是 huli 擅長把流程拆解開來一步一步說明吧。我發覺:先理解一件事物後就會慢慢對它產生興趣。而且熟悉 event loop,對作答面試題很有幫助!

前端變化快速,看官方文件學習最準確

同時這階段帶入了現代前端工具:Gulp 跟 Webpack。這時候 Gulp 版本已進化成 4.0,寫法已經跟 huli 之前錄的影片(使用 Gulp 3.x)不一樣。好險我習慣會去看官方的文件再來練習寫作業,如果發現跟影片有衝突的部分,基本上都是以官方的教學為主。因為版本會更新,教學影片只能作為某個時間點(版本)的參考。

❗ unsupported type: quote

課程後期:學習框架 & 調整步伐(十二月 & 一月)

這階段其實沒什麼特別的,我覺得比起前面的基礎來說,很單純,就是一直在『學習新工具』。不過單純不代表簡單,單純的地方是指:稍微有點基礎之後,學習新工具的第一件事就是好好去研究『官方文件』,至於熟不熟練只剩下時間 & 反覆實作的問題。

能力分班後,調整了一下自己的步伐

上個階段(十一月)分了一些時間做其他事,沒有全心全意跟課,進度慢了很多下來。huli 課程後期又做了一次課程調整,採取了能力分班制度,每班有不同的目標進度。我分配到了 B 班,看了一下 B 班的目標,與原本的計畫目標一樣是在 3/14 前要找到工作。只要與原先目標一樣,其實分到 B 班的進度滿剛好的。也藉由這一波小改版,調整了一下學習的心態與步伐,我思考了一下自己進度滑落的主因,不是碰到課綱的難關,而是『投入的時間變少、變不專注』。前期剛好有熟人在準備考試,他可以把我拎進圖書館一起奮戰,感染高張力的氛圍;後期熟人考完試,我們一樣一起去咖啡廳工作,但很悠閒 XD。想了又想,會有惰性的日子才是真實人生呀,如果總是想著強迫自己持續 365 天高張力學習,其實很容易產生倦怠感。對我這種人來說,合理的情境應該是工作之餘還是會想追追新番、追影集、熬夜看網球(欸太過分了),我必須把耍廢的時間也盤算進來才叫真實。以後成為工程師是要每一天跟程式碼為伍的,如果要避免產生倦怠,我現在就要有覺悟得先在工作、成長與耍廢之間找到一個平衡點,找到自己持續前進的模式。回過頭來,我應該思考的是:如何與耍廢共存,又能達成目標?

更專注於「找到工作」這個核心目標

因此,課程後期我就不用什麼乖學生的心態來跟課了,先不管課綱訂的進度、先不管有沒有跟完課,反正學程式本來就應該變成習慣。我現在只管定義好目前的『大目標』,緊咬著不放,有短計畫或沒計畫都好,想到缺什麼就馬上補什麼。同時,12 月底時跟一些已經成功轉職的同學們聚餐閒聊,經由他們的經驗,大概知道:做完一些 React 作品之後,出去求職應該沒什麼大問題、有沒有做 final project 也沒什麼影響、履歷用 CakeResume 簡潔就好,不用寫什麼自傳。心裡大概有底,我的大目標就是『228 連假結束前找到工作』。(因為連假我要出去玩耍)

另外,huli 錄了一些新課程:更仔細的留言板教學 & React 教學,不過這兩部分我之前已學習完成,就先沒看。反而是『進階 JavaScript:那些你一直搞不懂的地方』這門新錄的課程,講解:closure、prototype、this 等觀念,對我來說超級有用,剛好可以幫助準備面試題。

不安中繼續前進的能力

課程默默到了尾聲,其實一路上的學習我內心都充滿著不安與緊張。儘管不安,但還能繼續前進,或許這要感謝過往的經驗。在我過去的求學及工作經驗中,已經很習慣:沒有人帶著你一步一步做,你只會接獲目標,不管過程中遇到什麼事,只能想辦法自己解決。應用在這個以自學為重的計畫,好險自己還駕馭得住。

  • 這個計畫中卡關的時候怎麼做? 想辦法解決(好像在講幹話 XD),除了「do something」之外真的沒別條路。舉例來說:這個計畫是在學習新事物,接觸新事物時的卡關狀況,通常是不夠熟悉或不夠理解造成的,這個時候就是大量的閱讀與瀏覽關於不了解的地方的資料,多半都能再繼續推進。不過問題的面相有很多種,還是要自己慢慢體會解決各種問題的過程,才能更有自信應對新問題。通常我遇到問題有粗略幾個步驟:先定義問題、想想造成問題可能的原因、找出對策、嘗試解法。
  • ❗ unsupported type: quote

    面試期:準備履歷作品集 & 一邊繼續學 Redux

    準備面試這個階段是我最害怕、心理壓力最大的時期。主因是我對於自己的經歷沒有自信,我認為自己履歷上的硬傷在學經歷,且過去的工作型態太特殊,很害怕自己根本無法被認可。潛意識其實很想逃避求職,很不想面對履歷。記得 12 月底時,huli 開始推 A、B 班的同學們勇敢出去投履歷面試,感謝他推了我一把,儘管心魔纏身 XD,還是得面對現實。我一邊說著要把 Redux 學完,一邊拖延,一邊逼迫自己緩慢完成履歷。也許其他人很快就寫好履歷,但我因為太害怕學經歷不夠符合就業市場的需要,會造成履歷的硬傷,斷斷續續修了約一個多月。

    課程給的幫助

    我覺得課程在求職時給的幫助滿恰到好處的,有以下:

  • 求職管道 & 工具:除 104 之外,huli 分享了 Youratorf2etwCakeResume 幾個求職管道,另外還做了一個簡單的 CakeResume 履歷供大家參考方向。
  • 幫助建立正確的求職心態:huli 分享了自己過去的求職歷程,也分享過去學員的求職經過,給予大家信心,鼓勵大家要「勇敢試錯」。對於我來說,這部分的幫助真的很重要,一開始我會一直覺得自己沒有準備好而不敢投履歷,但 huli 告訴大家:「求職這件事(或是人生中大部分的事)你不要想成它是一口氣做好做滿的,寫程式也不是這樣。一定是你先寫一點,出了點錯然後改一下,接著再繼續往下寫。它不是一條筆直的路,而是一連串的 S 彎。每一個彎道你都有可能卡住,但修正以後下一個彎道會變得更好跑,更快地去通過。」
  • Slack 有一個頻道 #interview-experience,有些同學會主動分享一些面試經驗。
  • 沒有媒合,較有自己出去試錯的真實感,也代表投履歷所得到的回饋很真實。
  • 找到工作後的感想

    我是在年後開始投履歷排面試(約 60 幾封,先排了 10 場左右),228 連假結束後收到一些 offer。

  • 面試其實是一段自我尋覓的過程:面試期可以感受到自己的成長,每面試一間公司就做一些檢討與調整,在這個過程中,會更熟練於面談,透過面試所得的回饋知道自己不足的是什麼,也能漸漸梳理出自己未來想要的是什麼、想進什麼樣的產業及公司。
  • 沒有白走過的路:我從沒想過跟寫程式無關的工作經歷,也可能成為公司對自己有興趣的理由。所以要有自信,別忘了自己擁有別人無可取代的經驗。
  • 選擇 offer 根據的是每個人對職涯的考量:我認為選擇 offer 沒有絕對的標準,而是取決於自己的職涯規劃。
  • 總結

    其實我沒有上過其他培訓班或是課程,無從比較優缺點,以下列一些我個人感受到的特點及可以加強的地方:

    特點:

  • 我個人認為最強大的地方是:課綱的脈絡安排
  • 以自學為主,不會有多餘的人際互動,必要時又能感受到社群的力量
  • huli 的個人特質
  • 可以加強的地方:

  • 基礎細節的說明與要求 我記得簡章說過:
  • 面試時,發現優化的部分在學習時的感受比較少:因爲課程作業規模很小,儘管知道優化的概念,沒有實際體驗其實很難感受到優化的差異。
  • 想嘗試任何事,應該先靠自己勇敢找答案

    很多還沒踏出第一步的人,習慣先問別人說:「我XX歲,OO背景,可以轉職工程師嗎?」。老實說,這種問題真的是無法從別人口中得到解答的,只能自己去嘗試才有答案。決定做一件事的步驟不外乎是:盤點自己、設定目標、擬定策略、執行、檢討修正。做不同決定就有不同的代價,一開始就看自己有沒有看清現實、願不願意付出代價而已。

    我當初決定投入計畫,沒跟太多人提起,也沒問過別人,因為答案其實都在自己心底(好啦,一方面是放棄的話,方便假裝什麼事都沒發生過)。在計劃進行中,也是自己默默進行。到拿到 offer 之後,才開始跟一些朋友討論,老實說,自己心裡其實早就有答案,只是想找個人確認想法而已。總之,別人真的無法幫自己找答案,想做就先嘗試吧。

    工作之後才是開始

    每一天都還是覺得自己不足,有很多需要繼續努力的目標,例如:兼顧自己解決問題與效率之間的平衡、多練習看別人的 code、深入 JavaScript、演算法......。

    說這麼多,最重要的還是要開心啦,雖然從學習開始的第一天起每天都很抖,不過坐在電腦前還是能感到開心的~(希望工作幾年後也能依然如此 XD

    P.S. 現在有一種獵人試驗剛結束的感覺 XD,挑戰才正要開始!