top of page
白色背景

莊承燕

Jenny Chuang

​專業實習報告

工作內容
工作內容介紹

       我支援的部門是 MIS 部門,主要是開發與維護公司的內部資訊系統,所以 user 的對象通常是公司的內部員工。我的工作內容是根據主管開的 JIRA 問題單,進入各個不同的專案進行修改和開發。

(一) 早會

       每天早上到公司的第一件事就是進會議室開早會,每個人輪流報告昨天做了什麼、遇到什麼問題和今天要做甚麼。透過工作進度的報告,不僅可以讓管理整個專案進度的主管了解每個人的工作狀況,如果開發過程中,有遇到不清楚的地方的話,也可以提出來讓大家一起討論,一起幫忙,讓問題不會拖太久。

(二) JIRA 單問題處理

       我們部門分派工作的方式是利用 JIRA 系統,將有需要處理的問題或開發中的系統功能分配成多個問題單,再分派給不同的人同時進行。在這系統中,可以查看單子的進度,也可以留言在單子上或貼上程式碼和截圖,讓之後維護同個系統相關部分的人可以參考。

共同工作空間
原圖已撤下

(三) Scrum 的專案管理模式

       而除了每天早上固定開的早會以外,我們部門專案管理的模式是以15個工作天為單位的 Sprint 進行,也就是每三個禮拜就會開一次 sprint 會議。會議主要分為兩個部分,先是進行本次 sprint  結束的 code review,其主要是在分享每個人在這次 sprint 中完成的成果,除了展示單子的需求和改善後的成果,也可以分享在程式開發或修改過程中所用到比較特別的寫法,更可以藉此機會相互交流程式的寫法和衍生的問題,正職們都很樂意給予建議與改進方式。

       在 code review 結束後,比較特別的是,都會有一小段時間輪流分享,如果再做一次相同的 sprint ,有哪些做法可以保持和哪些地方需要改進。我覺得這一部份對於實習生來說,是一個很可以即時反饋的機會,可以透過分享自己的心得和正職們的建議,更有方向的去精進自己;對團隊來說,也是個可以讓下個 sprint 更好的反省與回顧,有適時的交流與溝通,可以讓同事之間的情誼更緊密,不會越來越生疏。

       而會議的第二部分,就是進行下一次 sprint 工作分配的 planning meeting,因為每一次的 sprint 都會有規劃

好的目標,所以會先將要在下次 sprint 前完成的進度依據每個人的工作時數做一個分配。

實習期間完成進度
實習期間完成的進度

(1) 統計報表細項功能開發


       從實習開始到暑假前,主要是負責統計月報各個功能比較表的 UI 和 SP,例如:員工異動清冊、同仁聘用來源統計表、每月離職率統計表。其著重的部分是資料庫語言的撰寫,比較特別的是每月離職率統計表有很多比較的用途,像是以季度、年度、部門、職類、地區別、同期比較等方式做統計。各個不同的比較方式和報表呈現都考驗了資料庫語法和對資料的想像力。

統計報表細項功能

白色的白色
原圖已撤下

UI介面

會議室
原圖已撤下

(2) 請購單 / 採購單: 報表 調整 / 增加 欄位

​       暑假接觸比較多的單子是有關 請購單/採購單/採購單(國外廠商) 列印的欄位調整需求。這個專案是利用Oodo 系統來實現 ERP + CRM 的管理。在做單子的過程中,也需要不斷的匯出報表來看修改的狀況和撈資料庫裡需要新增的欄位資料。

Oodo 系統請購單頁面

掛燈
原圖已撤下
灰色主題對象
原圖已撤下

採購單/請購單樣式

帶平枕的椅子
原圖已撤下

(3) 行事曆整合

​       這個工作內容的需求是要把兩個系統原本各自的行事曆做一個整合,但在開發過程中,遇到一些需要和 user開會確認的問題,所以也多了和 user 開會討論的經驗。這是一個很特別的經驗,因為從自身工程師的角度和user 使用系統的角度是很不一樣的,user 不會知道系統背後的操作是什麼樣子,所以也不能拿和自己部門同事的溝通方式去跟 user 討論,必須透過敘述出一個故事的方式來讓 user 理解目前的問題點,所以溝通方面是個很重要的部分,避免最後做出的成果不符合 user 的預期。

(4) 網頁應用系統開發夏令營

​       因為暑假叡揚有在學校舉辦一個網頁應用系統開發夏令營的活動,而我是營隊期間的助教之一,所以暑假在公司的工作除了接需求單以外,也利用了一些時間準備教材內容和練習。夏令營的課程主要分為四個部分,分別是 SQL 資料庫語言、基礎前端、MVC 架構和進階前端,而每一個課程結束後都會有一個實作的 Workshop和 code review

1. SQL資料庫語言

       本夏令營的教學方式是採翻轉教學的方式進行,也就是透過已錄製好的教學影片,讓學生可以依據自己的吸收能力和進度在課程學習上自己做好調配。而第一堂 SQL 的課程就是有一系列的教學影片搭配九題的 Workshop 練習題,讓學生可以邊寫邊看教學影片,最後在 code review 時,驗收成果。

2. 前端 - 基礎

       這堂課的 Workshop 是要實作出一個擁有新增、刪除和查詢的圖書管理系統,把資料存在localStorage 裡面,並且使用 Kendo GridKendo WindowDropDownList 和 Datepicker 的 Kendo 套件。

主要是學習 jQuery 的語法和熟悉 HTMLCSS 的應用。

3. .Net MVC

       而接著的 MVC 課程算是這一系列課程中最重要也最有挑戰的地方,他是利用 MVC 的架構把程式碼分成三個區塊,分別是 ModelViewController,並且實際連接資料庫,從資料庫裡撈出所需的資料,最後做出擁有新增、修改、查詢、刪除的圖書管理系統。而也因為這堂課的重點在於後端,所以前端 View 的部分是先利用 .net Razor 語法 (HTML Helper) 來呈現,下一節課會再針對前端的部分改用其他方式改寫。

4. 前端 - 進階

       最後一堂課即是接續前一堂課做出的網頁,把前端 View 的部分改成用原生 HTML 的方式寫入,並利用 jQuery ajax 的方式呼叫 controller,且套用 Workshop3 用過的 Kendo 套件。除了基本的增刪改查功能以外,也有額外的加分題像是借閱紀錄查詢、AutoComplete 和系統邏輯的合理性,例如: 已借出的書籍不能被刪除、新增書籍的欄位驗證和增刪改動作後的提示視窗等…提供更好的使用者體驗。

網頁展示

工作中的同事
原圖已撤下

(5) RADAR 人力資源系統功能開發

​       部門近期的其中一個專案是在進行人力資源系統的部分功能開發,像是資料轉入或是計算等,一樣也需要撰寫 UI 介面和 SP,但在 SP 取資料和整理的部分變得比較特別且複雜,也可以從中了解到此功能整個程序的資料串接方式。跟實習前期開發的程式相比,此功能背後的商業邏輯會比較複雜一點,在功能開發前也需要充分了解有關 HR 的相關知識。

人力資源系統細項功能開發

梨
原圖已撤下

(6) 讀書會

​       部門定期會舉辦讀書會,由部分正職和實習生組成讀書小組,一起學習同一領域的知識,每個主題在每一次讀書會都會安排一到二人進行章節內容的報告,再透過一起討論與分享來學習。目前讀過的主題已有像是「30天快速上手 TDD」和 ChatBot 的相關知識。

學習收穫
學習收穫

​技術面

(一) GIT/SVN 版控管理

 

       在分工合作共同開發一個專案的過程中,對於龐大的程式管理是很重要的。進公司後,接觸到的第一個管理專案的方法就是 GitSVN,他是一個分散式的版控管理,藉由 commit 和 push 把每個人撰寫完的程式儲存在一個遠端的數據庫裡,其不僅能記錄程式碼的更動歷史,在程式改壞時也可以復原到編輯前的版本,確保由多人共同開發的專案是同步的。而在遇到版本不一致的情況時,也可以藉由比較前後版本的差異來解決衝突,更有效率的管理專案。

(二) Debug 技巧

       在程式開發的過程中,學到最多的就是程式 debug 的能力。以往在學校的程式作業都是比較單一且分散的程式,通常只會針對某一個習題或某一個功能來實作。但在進入公司寫程式時,是一整個專案在跑的,包含前後端和資料庫的連接,如果有一小部分出錯,網頁就會噴錯出不來,而這時候下中斷點、逐步偵錯的 debug 方式就是在尋找錯誤的方向。剛開始一碰到程式出錯,都是很茫然、沒有方向的不知道怎麼解決,但經過同事一步一步的帶著我 debug 後,現在遇到程式噴錯,都會知道要用什麼工具去看程式跑的情況,從錯誤訊息的表面一層一層的去找到問題的核心。

(三) SQL 語法

       在實習期間接到的需求單中,負責最多的就是撰寫 SP 的部分。從新人訓練的第一個 SQL 課程到下部門接的專案,和在學校學的相比,學到的東西更深更複雜,也真正了解到 SQL 在公司多個資料庫和資料表之間的應用。像是 inner joinleft join 多個 table 時會影響到的效能問題,和在 insertupdatedelete 資料時包的  transaction 避免錯誤資料的寫入。

(四) MVC 架構模式

       在公司大型專案的開發,如果都把程式寫在一起,不僅降低可讀性,需要花很多時間去理解開發者的邏輯,在找程式的方面也是一大麻煩。MVC架構的模式是讓前後端分離,把相同作法的部分寫在一起,區分成三塊,這樣不僅對程式的擴充性高,也方便管理。

​非技術面

(一) 筆記紀錄

       面對龐大的資料量和很多第一次接觸的東西,聽一次就記在腦袋中是不可能的。原本就有記筆記習慣的我,剛開始是用一本筆記本手寫紀錄 code review 學到的東西,但隨著要記錄的東西越來越多,發現手寫筆記不僅浪費時間,如果因為某些意外筆記本不見,就白費功夫了。所以主管推薦了我一個線上的筆記本「Evernote」,把一些專案基本環境操作的步驟、學到的新語法、程式開發中的心得和要注意的地方都記錄下來。不要覺得自己一定都記得起來,有很多專案的開發在當下寫完時很清楚,但在多年以後要進來做一些修改時,就未必會記得當初寫得是什麼,和當下的做法是考慮到什麼因素。

(二) 工時預估

       在每一次 sprintplanning meeting 時,都會要針對一些單子預估工作的時數。這個是在程式開發前必要的流程,因為不管是 user 還是工程師自己都必須要知道這張單子預計完成的時間,才可以做整個專案的管理和安排。剛開始要我對問題單進行工時預估時,我是毫無頭緒的,因為是第一次接觸,我自己也不知道在這之中會遇到什麼困難、會花多少時間,但隨著寫的程式越來越多,才開始有個基本的參考。先把要改的部分分成多個步驟,在針對每一個步驟根據以往開發的經驗做一個時間的預估,最後加總起來,就不再只是靠直覺去預估工時了。

(三) 多方面考量

       在程式開發時,需要考量的不只是如何修改要改善的部分而已,還需要考量到後續維護時的可行性,因為在未來如果有一些額外的更動,像是公司名稱突然要更改時,在每個系統裡的微調都希望做到最少的修改。公司有成千上萬支程式,如果每支都要進去修改的話,想必會花不少時間。另外,最基本的命名方式和排版也是很重要的,不僅能讓後續的維護者減少理解上一個開發者邏輯的時間,在程式的可讀性上也可大大提升。

(四) 溝通能力/問問題的方式

       我相信不管在哪一個行業,溝通的能力都是很重要的。在工程師的角度來看,如何跟 user 溝通,做到user 想要的需求是一件比寫程式還重要且困難的事。如果最後寫出來的功能不是 user 所想要的,最嚴重的情況也就是砍掉重練,浪費的是自己的時間和心血,所以在跟 user 開會時,要多聽也要多想對方提出的需求是否可行,不要等到開始著手程式後才想到更多的問題,還要再花一次時間開會。不過跟 user 談需求的這個部份我是還沒有接觸到,這些都是在 code review 時聽到同事的經驗分享。

       對我來說,現階段學到的是如何問問題,因為很多東西都是剛開始接觸,每一個專案和系統的細節也不是一下就能說完的,所以通常都是一步一步的做,有遇到問題時,提出來問才會知道更多細節和方法。而問問題的方式也是有很多要學習與注意的地方,像是在問問題之前,必須清楚自己的問題點在哪,而不是只說一句網頁出不來就要對方幫你解決,可以先了解一下問題的來龍去脈,是動了哪部分的程式才出問題,也可以試著用自己初步的想法來解決。經過前面的測試得到一些問題的蛛絲馬跡之後,不僅可以較清楚的跟求助的人解釋卡關處,也可以節省彼此的時間。

(五) 時間安排

       而在 debug 過程中卡關時,也要為自己設立一個停損點,如果在時間之內還是沒辦法解決的話,就主動問人,但前提是把問題點和卡關的地方釐清再尋求幫助,這樣不僅可以節省很多不必要的時間,也可以做好時間的掌控,因為在自己看來可能是花了數個小時都想不到的問題,在別人眼裡是十分鐘就能解決的事,所以適時的尋求幫助是必要的。不過調配時間的部分也是我還在學習的地方,常常會花較多的時間在理解需求的方面,或是做到一半才發現自己好像理解錯誤,必須重作,因此浪費掉很多時間。

(六) 資安維護的重要性

       資安方面的議題,算是進了公司後才真正了解到他的重要性,以往在學校上課時,都是抱著一種我應該不會那麼倒楣被駭客攻擊的想法,但在資訊的這個行業,是最該重視這個議題的。而公司也都會有資安方面的講座和考試,確保每個人都具備基本的資安知識,防止被釣魚信件的攻擊。

自我評估與心得感想
自我評估與心得感想

       在叡揚的實習,從一開始對新的語言、系統、開發的陌生與學習,到現在漸漸的上手,不管是在 debug上或是需求的理解上都有很大的進步與掌握度。

       實習期間,印象最深刻的就是從回顧自己在新人訓感受到的衝擊到變成了夏令營的助教。因為夏令營的教材是取一部分新人訓的訓練課程來當營隊的課程內容,所以在營隊開始的前一個月,我就有把之前新人訓的教材拿出來重新複習一遍。在複習的過程中,很明顯的感受到自己的進步。當初第一次看影片時,常常有看沒有懂,前後反反覆覆看了好幾遍也還是不太了解其真正的用意,但過了半年後再回來看,就瞬間搞懂了很多當初一直不解的東西。

       實習得到的收穫,和我預期的一樣,學得很充實,也感覺的到自己一直在進步。很多事情在一開始看似很難很複雜,但實際去做了就會發現,其實也沒有想像中的那麼困難。也不是說一定要做好萬全的準備才能開始新的一個任務,實習期間,我被分配到的工作和面臨的事情很多都不是我一開始就有能力負責的,像是暑假被新來的實習生問新人訓課程的問題時,即使自己當初也經歷過一遍新人訓,但實力也沒有到可以拿來教人的程度。不過在這過程中,我把我所知道的教給他們,同時也跟著每一個來問問題的人一起學習,從一開始不知所措地不知從何看起對方的問題,到可以有邏輯有順序的幫助他們找到錯誤和問題點,漸漸的也把自己的實力提升了上來,和當初新人訓的自己也已經有些許差距了。所以很多東西都是在邊做邊學的過程中,讓自己累積實力的。

       實習越到後期,接觸的程式和系統概念就越深,每天也都有很多不同的挑戰,如何面對、接受和克服也是我在實習過程中,得到的一個很大的收穫。很謝謝部門的主管和帶我的正職在實習期間對我的照顧和幫助,給了我很多機會也教了我很多開發上的技巧和觀念。很榮幸可以在叡揚當實習生,也很感謝學校安排了校外實習的課程,雖然還是覺得自己有很多不足的地方,希望可以帶著在這裡學到的東西,持續不斷的精進自己,成為自己想成為的人 : )

對系上的建議
對系上的建議

        對於系上在學生大三的時候進行校外實習和校內專題覺得是個很好的安排,不僅可以提早透過實習與業界接軌,也有充分的時間去學習、彌補不足的地方。

        但也因為在大三時就要把所學應用在工作上,大一大二的課程安排也相對緊湊,沒有額外必修的課程去跟著老師做專題。耳聞別校的實習生有些都是先有了專題經驗後才來實習,這樣的優勢在於學生都有了一定的基礎,對實習工作的銜接較容易上手,也比較清楚自己想做甚麼,對於實習公司職缺的選擇較有明確的方向。

        因為學校的課程學的東西比較分散,沒有整體系統的概念,建議可以多開一些類似叡揚在學校主要為大二升大三同學辦的夏令營課程作為選修課程,讓同學在實習之前可以先有一些基本的網頁前後端連接的概念,就類似把在校所學的程式課做一個整合,會對學生在整體概念上有很大的幫助。

bottom of page