WFU

2023年11月26日 星期日

軟體工程師之旅:WeHelp Bootcamp 第二階段的心路歷程和心得感想

作者:楊于葳




過完第二階段,心境上有很大的變化,一方面覺得學會的技術變多了,整個世界又更開闊了,另一方面覺得新的挑戰又要開始了。和第一階段一樣,我幾乎都是在接近週末的時間完成當週任務的,雖然完成的速度和以前差不多,但感受到的壓力卻比第一階段大很多,這篇文章記錄了一些當時的想法。


宛如偵探解謎遊戲的第二階段




這階段的主要任務,是要獨立完成一項旅遊電商網站的專案。它幾乎是把第一階段的指定任務、自由任務、晚間討論的內容全都用上了,指引文件依舊簡潔,但要思考的地方多了很多,或者說,要完成的內容多了很多,必須運用僅存的一點線索,拼湊事實的全貌,就像是進行一場程式語言版的偵探遊戲,而努力找出文件中挖給大家的「技能洞」,完成自我設定的挑戰,是每週最大的樂趣。

記得有一次,在一個地方卡很久,一直解決不了,不停換方法就是得不到答案,我告訴自己:「再試一下,如果不行,明天就直接去現場用問的。」沒想到,這個「再試一下」讓我一試再試,直至天明。找到解決方法的瞬間,那份難以言喻的喜悅,讓我感到深深的快樂。


每個階段都像新的開始




第二階段開始的每個禮拜五,都是實體聚會的日子,每週都會發生很多不同的有趣事情。還記得第一週的任務是要處理後端相關的問題,而後端對我來說是很大的障礙,於是抱持著想找人求救的心態,參加了第一次的實體聚會。

結果到現場才發現,坐在我前面的人,不是已經完成就是正在等待通過(還有人在看動畫影片、做碩士作業),右半邊的人,也是都只剩一點點,不然就是已經有部署經驗,只有我和另外兩個同學還卡在 API 的設計。

我們從下午開始討論,一直處理到晚上10點,都處理不完,隔天再繼續努力,雖然我們晚了別人一些,但還是可以繼續前進,最後我們當然是都順利通過了,也都有進入第三階段。


從來都不覺得會無法通過任務




每週的任務都很難,需要花費相當多的時間,但好像從來都不覺得會無法通過任務,一直相信只要有行動、有不斷去嘗試,只要每天都很努力的往前一步,就能明顯感受到今天的自己比昨天更進步,這些問題也都能迎刃而解。

自由任務挑戰成功的時候、讀書會裡有人願意分享的時候、知道資料庫設計的精髓的時候、開始想進一步瞭解演算法的時候⋯⋯,這些時刻都很讓人很開心。知道一個新技術的使用方法,去實驗、測試,做出一個小作品,心裡也會感到很滿足。

一開始可能會追求「一次通過」,後來變成是希望收到「Good. Well Done.」,到後來當自己跳脫規格文件,做出額外的功能的時候,除了滿意之外,還會覺得很過癮。這個過癮是因為終於不需要依賴文件指引,而是根據需求更動既定規範,做出滿意的成果。


大量的助教 office hour

這階段有大量的 office hour 可以和助教們互動,每一場的主題都不一樣,我盡可能每一場都參加,有時是學到不同的技術操作方式,有時是學到不一樣的實作觀點,聽一聽其他同學的提問,收穫也很豐富,接近第二階段的尾聲時,也有抓住面對面的機會,和峰林與政儀助教討論第三階段的專案內容,讓第三階段不會太慌張。

無論是在線上還是線下,阿傑助教總是很願意分享,也會提點我們很多需要注意的地方,每週五的實體聚會,儘管沒有每次都去問問題,但看到阿傑助教的身影就會覺得很安心。對於講過的內容,他不只一次的說「我們聽過就會忘了」,但我還是很努力去記得,因為我相信這些內容都會變成「轉職的養分」,一定可以在未來的某一天發揮巨大的作用。


業界資深業師 Wu Chia-Hua:「面試就像相親!」




這場演講對我來說意義非凡,因為這是在完成全端專案開發後,第一次長時間思考想成為什麼樣的軟體工程師。思考人生,本身就是一件很費時、費力,又不見得在短時間內一定能得到結果的事情,剛好演講中拋出的問題,以及提到的幾個面向,都帶給我很多省思,邊聽的同時,心中的答案也慢慢浮現。

比起盲目地前進,我更偏好停下腳步,好好審視自己的狀況、確定方向再前進。很幸運的是,在演講後有一個另外和 Chia-Hua 業師請益的機會,對於履歷的編排、第三階段的專案規劃、未來求職的選擇等,都在這一次的談話中找到了明確的前進方向,而演講中「面試就像相親」的觀點,也讓我對未來的求職碰壁比較不會那麼灰心。


多人合作專案開發


(開發中的信箱有大量的 Pull Request)


有別於之前幾週的獨立開發,第八週是第二階段的多人開發專案週,是短時間內和同學合作最頻繁的一週,也是時間不是屬於自己的一週。

因為我們才剛完成一個全端的旅遊電商購物網站開發,所以其實不管是前端還是後端,每個人都有辦法處理,我們就在一場「前端和後端都可以」談話之下,完成了第一次的團體會議。

團隊合作最重要的就是達成共識,並且按照共識下的規則走。分工後我們各自在自己的開發範圍,完成各自負責的功能,過程中幾乎沒有遇到合併衝突(Merge Conflict)。

本來還很擔心操作 git 會不是很順暢,這完全是多慮了,用到後來,打字的速度都比講出來還快,還有人說連做夢都在打 git 指令(笑)。

為了完成專案開發,在最後兩天的時間,幾乎都不是自己的,處於一個隨時待命的狀態,就算時間到了,也幾乎沒有真正完成的那一刻,總是有許多地方想要修改,有些地方還想更好,是一次很有趣的多人開發經驗。


通過第二階段了!




比起以前,現在才能理解動態網頁的「動態」是什麼意思。從設定 AWS、寫 API 、切版,一直到把幾十筆景點資料,一口氣從後端渲染到前端畫面的時候,突然想起以前那個沒學過程式語言,用很笨拙的方式幫公司做網站的自己,當時花了很多時間,用一個、一個的 HTML 檔案,建立不同的產品頁面⋯⋯,想想真的是差了很多呢!

對於做出來的成果或小工具,可以優化和檢討的地方當然很多,但現在每天打開 VS code 寫寫東西,變成是一件稀鬆平常的事情,需要切版就去寫前端,需要 API 就去寫後端,對於一項專案的架構更有概念,克服了以前難以理解的後端資料庫設計,與找到合適的寫 API 工作流程⋯⋯。

接下來就是站在巨人的肩膀上,盡情的發揮了,很開心能做的事情又多了幾件!


JavaScript 線上讀書會




《忍者:JavaScript開發技巧探秘》全書共506頁,是很硬的一本書,對初學者來說並不友善,但也因為如此,我們才有機會用不同的角度去理解 JavaScript 的全貌,深深感受到 JavaScript 的彈性和重要。

忍者讀書會在第二階段的第一天正式開始,持續進行 7 週左右,中間我們內部舉辦了 5 場讀書會 meeting、5 場任務討論和技術分享會,以及 4 場 JavaScript 閱讀分享會,以及最後由包含自己在內的十位成員,各自用 5 到 10 分鐘,對整個第四屆的 WeHelp 學員,分享書裡的一個章節,在第二階段的最後一天劃下句點,很開心能和一群人共同完成一件事。




除了和大家一樣,在未知的狀況下迎接每週任務之外,我需要用剛學會不久的程式技術,額外寫一個統計系統,解決讀書會每週繁瑣的統計問題,以及為讀書會的進度規劃、活動安排做出適當的調整,這些都是在第二階段獨屬於自己的挑戰。





就像第二階段一樣,第三階段我成立了一個 React 線上讀書會。之所以選 React 為主題,是因為它是最能夠延續 JavaScript 的一個語言,也是現階段前端框架的熱門選擇之一。

除了要完成個人專案之外,我們要額外花時間閱讀、學習 React,希望六週後每個人的專案都有了一定的結果,也順利把這本書讀完了!