在講這個主題前,我要來分享個人經歷,在創立高雄前端社群後,常會有人敲我訊息說對前端有興趣,想瞭解要到什麼程度才有辦法滿足職場需求。
當然在業界久了,自然可以推薦一些學習資源與方向,也協助幾位朋友投入前端,但過沒幾個月,他們不約而同出現以下對話。
朋友A:「洧杰問你一下,主管要我研究前端的 XXX,但都沒有頭緒怎麼辦?」
我:「哦,這在網路上有蠻多教學資源的,有先搜尋嗎?」
朋友A:「有啊,但都好難….怎麼辦壓力好大」
朋友B:「老闆要我用一個 HTML5 JS API 搭配 Google Map 開發一個東西,你那裡有 Code 可以參考嗎?」
我:「那段整合我沒碰過,你有看下 GitHub 有沒有相似的專案?」
朋友B:「你找比較快啦,之前都你提供資源給我的,給我個範例後面的我會再自己搞定啦 >”<」
我:「…囧」
此時才意識到自己反而害了他們,以前都習慣幫他們找適當的教學資源方便他們消化,但並沒有培養他們自行尋找學習資源,並內化成知識的能力。用常見的俗語就是「只給他們魚,但並沒有給他們釣竿」。
也因如此,在協助學生轉職前端時,我都會請他們做以下事項:
⚡培養關鍵字搜尋的敏銳度
我在六角學院協助學生轉職前端時,當我覺得對方學到一個深度後,就會開始幫助對方去試著自主學習新語法。例如你會 HTML、CSS 基礎排版後,接下來就會請他去研究什麼是 transition,接著試著用 animation 設計一個動畫效果。如果是 JavaScript ,懂陣列、函數、物件操作後,就會再進一步投入中階語法以提升他們對程式的掌握度。
接著他們就會依照我前面章節提到的「如何有效率地 Google 尋找問題與解法」開始自主搜尋答案,畢竟我並不能幫學生培養搜尋關鍵字敏銳度,因為大腦是他自己的,我沒那麼強可以幫他的大腦升級。
在你吸收一個問題時,你該下什麼關鍵字可以找到最接近的答案,成功與失敗數千次後,大腦就會自動建立專屬於你自己的搜尋流程引擎,遇到問題時,直覺就知道到某個技術論壇會比你到 Google 大海撈針有效,或是印象曾經有在 YouTube 找過豐富資源等等,當你這流程優化到個極致後,自然能幫助你在找問題能夠更聚焦地找出答案。
我在幫學生培訓時,也會出一些題目,讓學生們能夠培養「自主解決問題」的能力,並實作出前端功能提昇技術廣度,這裡也釋出部分題目,提供各位朋友參考與學習。
⚡評估技術複雜性
你需要有個認知,當你進入公司開發產品時,實作一個功能絕對會是很多個技術組合起來。舉例來說有個頁面要有好幾個時鐘,並即時顯示各時區的時分秒資訊。你可能知道 JavaScript 已經可以產生時間,但為了要顯示各時區,就還必須瞭解 UTC、GMT 是什麼,那些國家的時區要如何歸類,以及 JS 與 CSS 該如何控制,才有辦法做出一個動態時鐘出來。這在程式世界是家常便飯,因為你不是「學程式」,而是「設計程式做出人們可以用的服務」。
當主管在問你是否能實作出一個產品的重要功能時,你是否有辦法評估技術複雜性?
只知道七八成,其它兩成你完全沒聽過,不過曾經從網路或朋友得知早已有實作方案,自然當下回應這部分是可行。
只知道五成,另外五成你當下沒把握,雖然沒辦法即時回應主管是否能做到,所以告知給你兩三天研究,嘗試在最短的時間內做出一個最小可行性產品確保 ok,以回應主管這功能核心的技術都能達成,讓主管回應上層此技術的可行性。
如果是完全不懂的東西,主管只好給你個時限去研究,那你有沒有辦法將複雜的問題細分化,投入過程中瞭解自己距離目標還有多遠。假使如實交付,你能夠肯定自己,如果需要延期,也絕對不要拖到最後一天才告知主管,這樣他也沒辦法向客戶交代。
人在遇到未知會感到惶恐是理所當然,在程式世界上,更是家常便飯。所以會建議各位面對它,並善用番茄鐘來瞭解自己的投入狀況,當你將這個循環投入數百數千次後,自然就離資深工程路也不遠矣。
⚡先找出自己可以吸收的內容
以前我在實作一個主管交辦的功能時,會在網路上搜尋各種教學,有時候我會發現某個東西就是我要的,不過還是需要改一些內容才能放在我的專案上,但卻搞了很久都弄不出來。我甚至會亂下一些語法,自己也不知道自己在幹嘛,只求其中一行程式碼可以動,我就可以準時下班。想當然爾最後都沒搞出來,只留一肚子鳥氣回家。
這問題也是出在於技術債欠得太多,明明這功能你會有兩三個核心原理必須先搞懂觀念,但是你視而不見,試圖硬改現成的 Code 期待奇蹟發生,這本來就是很天真的想法。
欲速則不達,先找自己可以吸收的程式碼,等到觀念融會貫通後,做出自己想要的功能還不難嗎?
(文章待續,請接看下篇)