Trunk Studio 實習心得 - DMoon

自我介紹

我是 DMoon,目前就讀彰師大資工系四年級。

在大二時的網際網路程式設計課程,發現自己對於實作更有興趣,於是我開始了我的 Web 開發之旅 (不歸路),在偶然的機會與同學接了案子,之後又經過專題的辛苦歷程,有喜悅也有痛苦,一直很嚮往能夠在大四到業界實習,更了解軟體開發實務上的細節和方法,並且累積實戰經驗。

感謝自己前三年的努力,通過了畢業門檻,能夠在大四這年離開學校的舒適圈,有不同的機會可以學習, 也感謝宗穎給我機會進入創科實習,新創公司的實習經驗真的很特別,與我之前預想的工作環境有很大的不同,在這裡的每一天都很開心,感受到自己的成長和尊嚴,而不只是一台每天照著指令工作的機器。

工作環境

公司位在辦公大樓裡面,空間並不大,是開放式的工作空間,不過每人有配一台螢幕,工作環境很舒適。還有一台裝滿可樂和果汁的冰箱以及點心區。記得冬天時,霸王級的寒流來襲,實在冷的發抖,老闆馬上買了一台電暖器,真的揪甘心。老闆同時也是咖啡愛好者,每到下午,辦公室總會瀰漫著咖啡香,剛好可以提振午休後的精神,回到工作狀態。

此外在學習上,公司除了每個月固定買一些優質新書,也會購買 Udemy 線上課程,有許多的學習資源可以更加充實自己,還會邀請業界高手來做課程教學。

團隊氣氛

這是一個很重視溝通的團隊,覺得和伙伴熟悉得很快,彼此感情也很好,同事之間的氣氛是非常輕鬆的,即使是兩位老闆,工作起來也像同事、朋友一般,中午休息時,都會一起吃飯看影片及聊天,分享一下看到的新聞趣事。公司沒有很死的規定,相反地有很多彈性和討論空間,兩位老闆也都是工程師,很能夠了解工程師的文化,也非常 Open Mind,希望打造一個愉快的工作環境,有什麼想法都能一起討論,互相分享學習,有一種越來越好、不斷成長的感覺,很高興能加入這個團隊。

定期 Meetup 交流

以往覺得台中最可惜的,就是沒有台北那麼頻繁的資訊交流聚會,不過近期台中前端社群也很活躍的舉辦活動,能夠有更多交流以及學習的機會,實在感到興奮!

創科也希望能夠提倡技術交流的文化,目前每個月都會舉辦一次 meetup,除了給予我們實習生機會,上台分享我們的學習心得,更重要的是能夠和其他開發者有更多的互動交流。也會邀請業界的大大們,前來分享他們的開發歷程,或是技術推廣,期望讓台中有越來越多的技術交流聚會,一同成長。

React X Redux Meetup

React X Redux Meetup

軟體開發

Agile 敏捷式開發:Scrum

Meeting

每週團隊都會開 Sprint Planning (衝刺規劃) 會議,團隊成員一起討論這週要完成的功能進度,並拆分成較小的 task,一起玩 Scrum Poker 估算預計花費的時數,在討論的同時了解彼此對於 task 的認知以及掌握度,再排定優先順序,一起在 Sprint 衝刺期努力達成目標。

每天會有 Daily Scrum (每日站立會議),各自報告目前的進度和今日預計完成的項目,讓大家對於整體進度有共識,也了解是不是有人需要支援,一起讓開發進度順利。

Sprint 結束後,會有 Sprint Review,demo 這次完成的功能。

每個月還會有 Sprint Retrospective,分享這次 Sprint 中想要感謝的人,以及可以改善或不錯的地方。

Code Review

能進到一間會做 Code Review 的公司實習真的很幸運,Code Review 使我獲益良多,不管是前輩的指點迷津,或是同事之間互相監督提醒,都讓程式能力提升許多,程式碼風格也能有所討論達到共識,專案的程式碼品質因此更是大幅上升。

Side Project

工作之餘,也會做一些有趣的 Side Project,像是搭配紅外線發射器,可以在 Slack 傳訊息來開關電視、電燈,或是點歌到連接音響的 Raspberry Pi 上播放,真的很好玩!

TDD 測試先行

一開始以為 TDD 是一種測試方法,後來才了解其實是一種開發方式。

先寫測試的開發方式實在和我以往的習慣相差很大,剛開始時思緒會一直卡住,畢竟先想結果的 output,和我以往的開發順序習慣不同,覺得在測試中呼叫一個還沒實作的功能很奇怪,一定會 error,另一方面也擔心測試寫的不正確,在過程中一直被這樣的擔心打斷思緒。

多寫幾次之後就漸漸上手了,TDD 的開發模式其實就是強迫我們先去思考功能的目的,確立需要的功能方向,避免開發過度或是方向錯誤的浪費,且在開發後還能有測試程式搭配像 Jenkins 這類的 CI Server 做自動化排程測試,保證持續開發整合的專案功能皆運作正常。

寫測試還有許多好處:

  1. TDD的規格就是一種可執行文件
    有了測試程式的 spec,工程師可以很快的了解該功能的目的及使用方法,等同於以往文件的功用。 且由於 TDD 的開發方法,可以保證這樣的測試程式文件,與程式碼是同步更新的。

  2. 快速確認功能正確性
    前後端分離的工作方式,當後端在開發後端功能和 API 時,若搭配測試程式,可以很快速地透過測試程式確認功能的正確性以及 debug,只要和前端溝通資料規格,不需要再等待前端測試、回報的來往時間。

  3. Test Case 即 驗收規格
    依照驗收規格撰寫測試程式,搭配上述說的 CI server 做自動化的排程測試,甚至與 git 做 hook,在每次 merge 時觸發測試流程,快速驗證規格。

DevOps 持續整合&持續交付

如何將新功能快速整合,交付到使用者手上,真的是一門學問。

相信大家以往多少都受過部署的痛苦,尤其是在開發環境與部署環境不同時,尤其麻煩,我們除了使用 Docker 來確立開發與部署環境相同外,加上 Jenkins 做自動化的 Testing 和部署,把許多繁瑣的程序自動化,可以有更多時間專注在程式的開發上,提高開發效率。

心得

我覺得到公司實習有些意外的收穫,雖然之前有和朋友合作接案的經驗,然而在實習過程中仍有許多的收穫,像是專案的開發流程及方法,團隊溝通及合作方式、工具,都讓我對於一個專案的開始到交付有更多的體會。

到創科實習,我最欣賞的是願意給新人學習以及犯錯的機會,也願意尊重每個人的想法,給予發揮的空間和自由。

相信很多人都有相同的疑慮,在決定到業界實習前,也會擔心是不是會每天都做相同的工作內容,沒有機會接觸一些比較不熟悉卻有興趣的項目。創科是一間特別的公司,只要你有熱情學習,都很願意讓你嘗試不同的挑戰,給團隊時間去摸索學習。團隊中可能各有所長,卻也都不藏私的互相教導、快速成長,犯錯時,也總是對事不對人,團隊不重複犯同樣的錯,就能越來越好,整個團隊也有向心力。

感謝創科主管願意給予我們工作上的空間和自由,而不是用時時緊迫監督的方式,只要工作的方向及方法沒有偏離目標,清楚知道處理的先後順序,能夠自我管理並交付進度即可。在這樣的開發氛圍下,能夠和團隊一起完成專案目標變成一件令人興奮的事情。

感謝主管和實習期間合作的伙伴們,給我一段愉快且寶貴的工作經驗,能和你們一同努力非常開心,也成長很多。

第一次聚餐