Welcome to GSS
壹、 工作內容
工作詳述
JIRA 單問題處理
前輩會先從自己的案子或詢問其他同事手上的案子挑出我能做的,在開 JIRA 單需 求單轉給我,需求單上則會有客製的工作資訊,上面的區塊是寫公司名、JIRA 單號及需 求單的名稱,右邊的區塊會有誰負責處理這張單子,還有到期日的資訊,下面的區塊則 是在說明需求內容,或是會有需求內容的文件。
每天還需要在這裡登記工時,當完成這份需求單時會按 Workflow 紀錄處理的狀況, 像是修改的哪些檔案,還有處理內容的邏輯。
新人訓練
實習期間完成之進度
資料庫語言
在 join 表格的部分,在公司是禁用逗點去 join 表格的,將來程式會有幾百 行,若持續用逗點去 join 表格,要花非常多的時間才能看出表格之間關係,也很 容易漏寫 Table 關係,還有就是逗點無法寫出 left join 和 right join 的關係。
還有當要新增、修改及刪除時,在使用這些功能時很有可能需要更動很多個 Table,可以包 TRANSACTION 防止資料錯誤,因為有新增和修改的功能,若沒有包 TRANSACTION,當修改的資料若因有誤而沒有修改成功,新增卻成功了,那就無法達 成我們想到的兩個功能同時都有做到,而包了 TRANSACTION 就能解決這個問題,它 會先檢查裡面的功能,當某一個功能沒有成功,另外一個功能也不會去改到資料庫 的資料,當都沒有問題時,才會去做新增跟修改的動作
Front End Basic
在學校只有碰到 html 和一些些的 javascript,而在這個課程中也學到了如何 使用 jQuery 和 kendo,還有可以將資料存放到 localstorage 裡。
.Net MVC
在學校時都是以前端後端的方式分開教學,而在這個課程中讓我了解將前端和 後端串在一起運作的,在撰寫的時候相較於其他單元也較不容易,因為要分成 Model、Controller 及 View 去寫,而撰寫的主題為圖書維護系統。
Front End Advanced
這堂課是需要將.Net MVC 的.net Razor 換成純的 Html 語法,再透過 jQuery ajax 的方式去呼叫 controller。 其中我覺得最特別的是將新增、修改及明細畫面合併,已縮減重複的程式,可以透過去設定網址傳遞的參數,在判斷是哪個參數後用 ajax 呼叫 controller,以 下圖為例就是要撈出要修改的那筆圖書資料。
Back End
這堂課分成兩部分,第一個是必須將 Front End Advanced 作業 Model 的 Class 抽離到其他專案,還有針對 Service/Dao 內的 Class 抽離出 Interface,還有將 Spring.NET 實作 IOC/DI,第二部分則是要想可以做什麼單元測試。
部門接案
我在的部門為 HRSBU,也就是人力資源部門,主要的工作是為其他公司客製化 功能,修改的內容為公司已開發的人力資源系統網頁及 RADAR,人力資源系統是專 門為各個公司處理員工的資料,像是基本資料、薪資、出缺勤狀況、勞健保等,主 要修改新增的程式分為下列四項:
新增、修改及刪除欄位
在部門剛開始接的工作大部分都是新增、刪除欄位等,還沒做之前會覺得只要 在 SQL 下一個新增欄位的指令和增加畫面的控制項就好,但其實在一支程式裡會包 含很多功能,像是查詢、新增、修改和刪除等,除了需要新增欄位到資料庫和新增 控制項之外,還得撰寫撈出那個欄位的明細,將欄位的值輸入進資料庫等,而像是 查詢的資料會寫在 SP 裡,需要讀懂 Table 的關係才能加上那個欄位,並不是只是加 個欄位那個簡單,因為通常都會關聯到其他程式的運作。
列印報表
列印報表的部分可以分成很多種,像是以每個部門做區分,去計算員工認證證 照的數量所產生出來的報表,或是像列印員工在職證明書。 以員工在職證明書為例,下方是套印範本,標籤會對上在 SP 撈出的欄位名稱, 這樣在列印的時候就可以直接從資料庫撈出資料,放到正確的位置上,不用手 動一個一個輸入,減少錯誤率。
通知信排程
以員工證照認證到期通知為例,需撰寫一支 SP 掛排程執行,若是在到期日往前 60 天需寄信,SP 的內容首先需要先撈出證照剩下剛好 60 天就過期的員工資料,在 去處理如果那個員工同為主管時,就要往上撈一層的主管,接著再去處理 Mail 的內 容格式,像是若是有多個員工都在同一天剩 60 天證照過期,且又是同一個主管,這 樣就要在同一天記非常多的信給主管,對主管來說會非常的不方便,所以通常會合 成一個表格只寄出一封信,列出有哪些員工證照在 60 天就過期了,處理好在寫入欲 寄發通知的 e-mail 至實體檔就完成了。
大批資料匯入
這支程式的功能主要是讓客戶能方便將員工的資料大批匯入,不用一筆一筆輸 入進資料庫,還能使用 excel 先輸入好員工資料在統一匯入。 客戶能下載 excel 範本下來,資料類型可能會分為很多種,像是履歷資料、履歷 個人基本資料、任用資料、薪資、學歷、經歷、證照、考核及訓練等九種,填入員 工的資料後,在將資料上傳,會先檢核資料的正確性,例如必填欄位是否空白或輸 入的代號是否為代碼檔裡的資料等,若資料錯誤則會出現錯誤訊息,確認無誤後再 執行另一支 SP 將資料大批匯入資料庫。
薪資轉存媒體檔案
這支功能主要會產生出薪資的檔案,而每家公司產生每家銀行的媒體格式都不一樣,而我主要是會依照客戶的需求修改格式內容。
這支功能主要會會產生出薪資文字檔,撈資料的時候,程式會先判斷銀行別為哪家銀行,再帶出那家銀行的媒體格式資料。
Debug
有很多案子是客戶在操作產品遇到的問題,有些是之前的工程師在撰寫時,程式邏輯有Bug,但客戶可能那時候沒有測到這個問題,或是產品本身設計有漏洞,當我接到這類型的單子時,需要先去了解這支功能撰寫的程式邏輯,以及客戶測試到的問題是什麼,進而去推論出導致問題的部分。
當寫好一支程式時,都需要去測試有可能發生的問題,測試沒問題後就需要寫測試 報告,測試報告則是為了給客戶確認程式寫好的結果是不是他們想要的,免得他們程式 看完了才發現不是自己想要的,而浪費了寶貴的時間。
都弄好後就會將建置好的程式放到特定的資料夾,讓前輩方面更新給客戶,接著再 把修改過的程式上傳到 git 或 svn,弄好後就能去填寫 JIRA 已完成。
資安課程
在科技蓬勃發展的世代,資訊安全是越來越重要,公司有幫我們安排上資安的相關 課程,有智慧財產權及個資法的課程,上完後需做測驗,需考到 80 以上才算通過,沒通 過則需補考。
而我在的部門是專門在維護員工的基本資料,所以在資訊安全的部分也非常重要, 像是在作測試報告時,個人隱私資料的部分就需做遮罩,絕對不能去透漏客戶的資料。
月會
在每個月都會舉辦一次月會,主管會請學長姐做 PPT 報告,內容為在部門學到的技 術和工具,或是分享學長姐的經驗談。
在技術和工具方面,除了在自己部門所學的,也能去了解其他的技術及工具,因為 就程式語言舉例,就可以分成非常多種語言,將來不一定會只寫現在所學的語言,所以 能多接觸了解會比較好,工具也是如此。
在學長姐分享經驗談的方面,學長姐可能會分享一邊準備考研究所,一邊上班的話 需如何分配自己的時間,或是實習生轉正職時會有什麼樣的事情轉變,我在這個部分也 學到了很多,因為我們可能會發生到的問題,學長姐也都經歷過,所以能從他們的經驗 談去學習,調適自己的心態、工作方式及時間安排。
產品課程
對於工程師來說,若要撰寫程式,最先要做的事就是了解產品,而在人資部門裡,每兩週的週三就會開一次會,專門教學產品的邏輯及操作,並且講解完後前輩會指派作業,並且在下一次上課的時候驗收大家做的作業。
舉例: 若公司現在要將一名員工換部門,並且調本薪加獎金,要如何操作系統?並且在更新完後發現員工更改資料有誤,要如何操作?
在操作過程中就有遇到當反更新後,再重新建一筆資料時會出現資料已重複的問題,原因是反更新並不會刪除原本的資料,所以可以直接去修改錯誤的部分就好。
還有像在進行反更新後,薪資其實不會還原回去,需手動還原,這些問題若是沒有親自操作就不會知道,在實際操作過後,能了解到自己對哪些部分還不熟悉,針對問題去尋找解答,更能加深印象。
工作當中扮演的角色
我認為我目前扮演的角色為輔佐者,由於前輩會先跟客戶商量問題單內容,談好價錢和 內容後再開 JIRA 單,再由前輩先判斷哪些案子是我能做的,再指派給我,並且大概說明問 題單的內容,若覺得內容有點問題,也會先詢問過前輩,前輩也覺得有問題的話,就會再去 詢問客戶,而有不會的部分,也會去詢問前輩能怎麼做,或是怎麼做比較好,在完成問題單 時,前輩會去測試程式的正確性,在告訴我有哪些地方需要再修改,改完後才會將程式更新 到客戶的公司那裡,所以我目前還無法負責這一整套流程,只負責客製修改程式的部分,在 修改時也還需要多多請教前輩。
貳、學習
一、語言
SQL
Stored Procedure 預存程序(SP)
是在資料庫儲存複雜程式,以便外部程式呼叫的 資料庫物件,可以視為資料庫的一種函式或子程式。
User Defined Function 使用者定義的函式(UDF)
可讓您使用其他 SQL 運算式或 JavaScript 建立函式,這些函式會接受輸入資料欄並執行各項動作,再以資料值 的形式傳回這些動作的結果。
FOR XML PATH:
可以將多筆資料合併為一筆顯示,在工作中也經常需要用到這 個語法。
CODTABLE Table:
這個 Table 是用來儲存參數,像是可以分成假別會有很多個代 碼,分別為不同個假別,這樣在系統上才不用寫死資料,還可以直接使用在其他 需要使用到假別的程式裡,如果客戶突然停用某個假別代碼,可以直接將那個代 碼加入條件篩掉資料,也不用每個地方都去改。
二、GIT/SVN
兩者皆為版本控管系統,舊案子會使用 SVN,新案子則會使用 GIT,在處理需求單時, 前輩會先請負責案子的人開權限給我,接著取得專案交接文件裡的程式原始碼所在位置,就 能將客戶公司的程式下載下來。
在 SVN 的部分,修改完程式後,將有修改的程式 commit 到 SVN,並記錄修改的是哪張 單或是做了什麼事,這樣之後的人在修改,發現之前的程式有問題時,就能從 commit 的資訊 尋找可能是在哪個版本就有問題了,或者是當這一版的程式發生問題,也能還原成上一版的 程式。
在 GIT 的部分,在修改前需先新增 Branch,並且切換至那個 Branch 才能開始做修改, 到最後 commit 及 Push 完,才能 merge 回去。由於是多人共同開發的專案,需維持版本的一 致性,當有兩人同時在修改同間公司的程式,merge 回去的程式就會發生衝突,原因是自己 上傳並沒有包含對方所修改的程式,這時就能比對前後版差異去解決衝突,有效率地解決多 人共同開發的問題。
三、工具
SQL Server Profiler
這是在工作過程中,缺一不可的工具,有了這個工具,就能快速找到那支程式使用 的是哪支 SP,也可以測試自己所撰寫好的 SP 有沒有被錄到,如果沒有錄到,有可 能出錯的地方是在執行前的,如果到了執行 SP 噴錯,那就是錯在 SP。 在登錄公司帳密後,選擇 Events Selection,接著勾選中間幾欄,DatabaseName 是執 行的資料庫名稱,StartTime 是執行的時間,TextData 則是錄到的 SQL 語法。
接著按下 Column Filters,會出現 Edit Filter 這個視窗,若知道程式會執行在哪個資料 庫可以直接輸入資料庫名稱進行篩選,若只知道某部分的字,可以在前後加上%, 也能篩選到自己想要的資料庫。
開發人員工具(快捷鍵按 F12)
像在改範本時,若直接在程式碼那邊改寬度,可能會需要是很多次才能調到適合的大 小,可是如果用此工具,就能直接先改後馬上看到結果,因為在這邊改不會直接動到原始程 式碼,所以當試到自己想要的結果就能把程式碼在貼過去,若改了太多恢復不到原本程式也 沒關係,重新整理又會變回原始程式碼。
還有更有效率的方法就是點擊紅色框裡的箭頭,再去點選想修改的區塊,程式碼就會自 動跳到那行,就不用多花時間去找或是改錯行了。
grepWin
當想參考某些TABLE是怎麼去JOIN時,用這個工具可以快速搜尋在資料夾下的檔案內容,查出有哪些檔案包含你所輸入的關鍵字,但缺點是不能去搜尋目錄名稱。
下載完成後,可在想查詢的資料夾直接按右鍵選擇grepWin。
Search in是搜尋路徑,Search for是搜尋的關鍵字,按下Search後搜尋出的檔案資訊會在Search results那裡,這個工具也有取代的功能,但若要使用取代的功能就需要小心去使用。
四、技巧
參、自我評估及心得感想
之前在選實習公司最重要的因素考量,就是在實習的時候能不能學到很多東西,因為我 覺得實習一方面是能讓自己知道這個行業的工作內容是什麼,是不是真的喜歡這份工作,另 一方面則是多學習多訓練自己,與其以後需要辛苦的工作,還要趕上別人的進度,倒不如現在先好好努力,所以最後我選擇了在叡揚實習。
在實習的過程中,儘管在學校事都能應付,但在這裡,我也得知到了自己還有非常多的 不足,有很多東西沒有碰過,都是第一次做,所以常常需要一直詢問前輩,有時因為搞不清 楚方向,所以還常常在做白工,導致每次做的工時都超出預估的時間,每次一個需求單拖了 很久都還沒寫完,或是寫不出來一直卡關,我就會覺得壓力很大,也常常聽到很多同學都說 他們實習的公司很輕鬆,沒什麼事要做,就會覺得自己為什麼要那麼辛苦,還選了一個離自 己家非常遠的地方實習,導致每天都至少需要花 3 小時來回在車程上,每天只睡 6 小時。
但在後期我漸漸適應了,也慢慢調適自己的心態,以及自己對於工作方式的調整,像是 只要接到一個新的案子,我就會先跟前輩確認我理解的方向是不是正確的,解決我常常我會 做白工及沒效率的問題,還有因為學到了很多東西,也需要常常去紀錄自己學到的東西,不然很容易忘記,在填公司的問題單時,其實也會大概寫這支功能修改或新增內容的邏輯,有時常常會做到自己不知道在做什麼,但最後收尾填單時,就能好好整頓自己的思緒,知道這 次做了些什麼,這樣當以後做到類似案子也能再回來參考。
至於之前會與同學比較的心態也漸漸改善,因為我想起了當初我就是為了能多學習點技能,早點開始努力,才來這家公司的,只是各種挫折下,我變得很迷惘,常常懷疑自己是不是不適合這個領域,但在剛開始學習的時候一定是如此,不管做什麼都一樣,而且每當我完成一張需求單,就會覺得非常有成就感。
還有當完成一張單時,並不代表就沒問題,除了前輩會去測試之外,更新到客戶那後,客戶確認沒問題才算真的完成,當前輩或客戶測試到程式有問題時,他們並不會直接幫我們解決問題,而是會讓我自己去試著解決問題,能培養出負責任的態度。我知道我是真的很喜歡撰寫程式,只是為了朝這個目標走,我還需要非常非常多的努力,儘管路途很艱辛,我還是會走下去,只要每當迷惘時,就回頭看自己當初的目標,莫忘初衷。
肆、對系上的建議
對於系上有安排校外實習和校內實習覺得非常好,因為聽聞有些學校是沒有安排的,或 是在校外實習的部分可能只有寒暑假,而我們就有一年的時間能好好的去精進自己。
但我覺得校外實習和校內實習應該兩者都要有,像可能在大三時是校內實習,我們能擁 有自己的作品,也會比較了解自己想朝哪個領域邁進,而大四則是校外實習,可以知道自己 是否合適這個工作,銜接畢業之後,如果想推甄考研究所,也有專題能當作品集,如果想直 接工作,也許可以在實習的公司轉正,或是找其它間公司應徵,相較起來也比較能適應上班 的生活。
由於在實習的過程中常常會遇到一些網路的問題,但在學校比較少見到是有關網路的課 程可以選擇,所以希望能多開一些網路的課程,由於在學校學的課程都是較分散的,希望能 開一些整合前端和後端的課程,這樣在實習的時候可能會比較好銜接。