如同《轉職前端工程師的一路上:決心篇》中提到的,對我而言,下定決心轉職是一個漫長、謹慎的過程。在七年設計學習中,漸漸發覺自己並不享受做設計的過程,並開始探索其他職涯的可能性,進而下定了決心,決心轉職為前端工程師。
而本文《轉職前端工程師的一路上:自學篇》,則會先補敘過往自學程式語言,以探索對軟體開發興趣的歷程。其後則會分享我嘗試獨立開發專案的原因,以及從而發覺的自學困難。
- 《轉職前端工程師的一路上:決心篇》
- 《轉職前端工程師的一路上:自學篇》
- 《轉職前端工程師的一路上:培訓篇》
- 《轉職前端工程師的一路上:面試篇》
嘗試獨立完成專案
當你搜尋「前端工程師、轉職」,網路上的文章清一色地會和提到:寫出一個網頁是最直接的能力證明。面試者可以從你的作品當中很直觀地認識「你能完成什麼功能?」、「你會使用什麼技術?」,更有甚者,「你的程式碼寫得好不好?開發風格是不是公司可以接受的?」。專案導向是應該是轉職過程中十分重要的特徵。
那麼我們要做什麼專案呢?為了專注在開發上面,而不需要去分心關注產品體驗、介面設計相關的事項,我選擇直接臨摹網頁樣版服務商 Wix.com 的頁面。這樣的網頁樣板通常介面設計地相當主流、討喜,頁面呈現單純,沒有過多華麗的動態效果,並且有 RWD 的設計。我認為相當適合選作練習 HTML、CSS,以及少數 JavaScript 技能的專案目標。
自學技術來探索
透過客觀地評估「軟體工程師」這個職業,以我而言是個不錯的選擇,然而我喜歡做軟體開發嗎?我的能力可以負擔的了嗎?為了能夠解答這些疑問,我開始透過自學軟體開發的相關技術來確定自己的喜好及能力。
碩一的兩門課
在研究所的時候,我刻意地修習兩門與程式相關的課:行銷資料科學、參數式設計 — — 前者顧名思義,便是用 Python 來爬蟲進行數據分析,後者則是透過撰寫程式以輸入各種參數,探索設計的可能性。這是第一次我與程式碼的接觸,我發現我非常被撰寫程式的思維吸引,富有邏輯且需要推理,而且我在這兩門課的表現皆算不錯,上課時同學聽不懂也會問我;若我也不明白,使命感使然,更會促使我自發性地去找書,進一步鑽研知識再教予同學。
深入鑽研前端開發
自信的開端帶給我成就感,這讓我對於軟體開發存有好感,並確信自己有潛力學得這門學問。不過軟體開發領域何其大,其中前端、後端開發(之後簡稱前端、後端)是許多人劃分職能的方法 — — 在註一中,透過簡述網頁資料的傳輸來理解前端、後端的職能 — — 然而基本上,在一開始大概就打定主意選擇前端工程師為方向努力,因為相較於後端,設計背景對於轉職前端能帶來的幫助更多。
那麼如何進一步的鑽研前端開發的技術呢?我主要參考了兩個資源學習程式語法,包括:Jon Duckett 的系列書籍、清大開放式課程平台「Web Programming, Technologies, and Applications」。前者是書籍,後者是教學課程,主要都是在教授 HTML、CSS、JavaScript,並透過簡單的練習解釋程式碼。
學習的過程中,我喜歡搭配著學習資源的大綱來建立「世界觀」,以 JavaScript 來說,當時我搭配的書籍是鼎鼎大名的犀牛書,當我們翻開大綱,便可以看到一路看到「型別」、「陳述式」、「函式」,乃至「類別」等名詞,於是你可以理解這一個個章節是作者將千千萬萬個 JavaScript 的知識濃縮而成的十來個大概念,掌握這些大概念便可以對 JavaScript 語言的知識有一定程度的掌握。進一步地,舉例而言,第八章的「函式」是什麼呢?翻開第八章又會有許多分節、許多子概念來幫助你理解「函式」這個大概念。而每個大概念彼此有一定的獨立性,深入理解「函式」的同時,你對「類別」的想像可以僅止於「類別」二字,在往後的漫漫學期過程中,逐漸把這個「世界」建立起來。
好的探索結果
在大致掃掠、操作兩邊的資源後,我仍然覺得自己可以理解程式語法及其構成的邏輯,這讓我認為自己有潛力可以往軟體開發領域努力。如同《決心篇》所提到的,在自學的過程中,也會慢慢感受到自己喜歡軟體開發的原因。第一,程式語法是邏輯的、人造的,所以「凡事有果必有因」,Debug 時我會深信有一個未知的理由造就現在的結果,而我要做的就是去尋找他,這種讓我全神貫注,甚至忘卻時間流逝的感覺(所謂的心流啊)非常地好。再者,這個領域需要對「學習新知」這事敏感且積極,而投入學習會帶給自己「活著」的感受,也是從事軟體開發業務的良好副作用吧。
到這裡為止,探索的結果是好的,這也讓想要再多做點什麼,更接近這個行業,或許你可以說是我下定決心吧。在下定決心之後,下一個思考的問題便是:怎麼樣我才能找到一份前端工程師的工作呢?
當你搜尋「前端工程師、轉職」,網路上的文章清一色地會和提到:寫出一個網頁是最直接的能力證明。面試者可以從你的作品當中很直觀地認識「你能完成什麼功能?」、「你會使用什麼技術?」,更有甚者,「你的程式碼寫得好不好?開發風格是不是公司可以接受的?」。因此,有一個自己開發的專案應該是轉職過程中十分重要的里程碑。
嘗試獨立開發專案
那麼我們要做什麼專案呢?為了專注在開發上面,而不需要去分心關注產品體驗、介面設計相關的事項,我選擇直接臨摹網頁樣版服務商 Wix.com 的頁面。這樣的網頁樣板通常介面設計地相當主流、討喜,頁面呈現單純,沒有過多華麗的動態效果,並且有 RWD 的設計。我認為相當適合選作練習 HTML、CSS,以及少數 JavaScript 技能的專案目標。
自學做專案的困難
有了目標就開始努力執行,但這個過程卻充滿阻礙。我遇到的問題可以分為以下幾點。
找不到請教問題的對象
這個問題應該也很常見,總會遇到 Google 了也找不到解答(可能也找錯方向了)的時候。身邊沒有相關專長的人可以詢問,也提不起勇氣在相關的社團發文,害怕自己的問題會不會太基本?在網路上尋求解答,對我而言,是十分難跨出的一步,因此常常寧願自己卡在一個問題,轉個兩三天才自己找到解答,非常耗時。
不確定在正確的方向上前進
這大概是在過程中我最強烈感受到的疑惑了:我學的技術、寫程式碼的方式到底是不是業界主流?舉例來說,當時我發現 Wix.com 的介面設計的前景(資訊圖文)、背景(背景圖)對齊在格線上,因此我的直覺是先創造出一組格線系統,讓前景、背景的內容分別對應在同一個格線系統上,自然他們彼此的內容就可以互相對齊、合在一起。Google 了「CSS、格線」,我很自然地找到了「display: grid」的相關語法。
但我錯了。簡單說,我錯在將 grid 語法用在不適合的情境上,於是我在之後遇到了一堆我不知道應該如何處理的問題(同時也不知道我可以詢問誰,也就是下一個自學會遇到的困難),但這些錯誤的根本原因便是我一開始的方向就錯了。如果你問我什麼時候知道自己錯了,就是當你遇到一堆奇怪的問題,但卻 Google 不到相關的資訊時,你大概就會開始懷疑自己走錯路了。但你不知道你在什麼時候開始偏離航道,是回去前一個巷口?還是你剛剛出門就應該左轉而不是右轉?
當你不確定自己是不是在正確的方向上前進,這些猶豫會讓你不自信,不自信則沒有動力繼續做專案;當然你可能會不死心地在一個點上鑽牛角尖、不斷撞牆,可你未必有能力突破盲點,(然後還沒有人可以指點一二),這往往是非常沮喪的。打斷節奏、停止沈浸,這樣的狀況若持續太久,只會讓自己精神耗弱而無所得,很容易就把問題拖著,難以鼓起勇氣再去面對。
未完待續,培訓篇
在清楚地體會自學的種種難題後,我希望尋求一個管道可以有效地解決這些困擾。我最後選擇彭彭(彭兆蔚)所創辦的 WeHelp Bootcamp,接下來的故事會記錄在下一篇文章中:《轉職前端工程師的一路上:培訓篇》,包括參與培訓單位的過程,培訓單位如何解決我自學遇到的困難,以及在我意料之外其帶來的好處,最後會回到常見的問題:「一定要尋求其他資源才能順利轉職嗎?」、「如何選擇幫助轉職的資源呢?」。
〈註一〉前端、後端開發是什麼?
我們可以從平常「上網」這件事來認識他們。以 Google 首頁為例,這個頁面是你的電腦向遙遠的 Google 電腦(就姑且稱之電腦吧)要求取得的一堆「資料、程式碼」,透過你安裝的 Chrome 瀏覽器翻譯,變成畫面,讓你可以點擊按鈕、輸入資料等。其中使用者能直接接觸到的一切,包括畫面、互動行為等相關的程式碼,便是由前端工程師所負責的(這也是為什麼其對畫面、產品體驗有理解是加分項),這些事務便被歸類在前端開發。但就像一台手機,如果只有外殼,缺少裡頭的零組件,你也無法享受手機帶來的功能;網頁亦然,你來到 Google 的首頁便是想要告訴 Google 你想要做某些事(比如說:搜尋),於是你在搜尋列輸入資料,送到 Google 的電腦上,後端工程師負責的便是寫程式在 Google 的電腦上跑,讓它能收到你傳送的資料,存到資料庫裡,並回應相關的資料給你(比如說:你搜尋關鍵字的結果),這些也被囊括在後端開發的範疇中。
簡單來說,後端工程師負責與網頁相關,在 Google 電腦上跑的一切,即所謂的 Server-side,包括 Server、資料庫;前端則負責使用者用瀏覽器開啟看到的一切,即所謂的 Client-side。這中間的資料互動,像是透過一個櫃台窗口進行,基本上是由 Client-side 主動透過櫃台窗口向 Server-side 要求資料,Server-side 再透過櫃台窗口回應給 Client-side,這個櫃台窗口叫做 API。後端也需要負責撰寫 API 相關的程式碼,前端則需要串接 API 來取得使用者需要看到的資料。