top of page

董晉豪

Nick Dong

​專業實習報告

工作詳述和實習期間完成的進度

(1) 新人訓練 - 圖書借閱系統的開發

        在正式分發到部門之前,我們實習生會先經歷兩個禮拜的新人訓練課程,課程內容包含認識開發工具環境和規範、SQL語言、網頁前端基礎、網頁MVC架構與前端設計、MVC分層及程式品質檢測,這些訓練課程的進行方式都是公司那邊先把教學影片錄置好,然後每段的課程都會有一個類似作業的Workshop要我們在期限內完成,我們就是邊看影片邊學,如果有不會的地方就請教在場那些負責專門幫我們實習生解惑的正職員工,每一段課程其實都有各自技術面及非技術面的知識要學習,像SQL語言那段課程,公司給我們的練習題其實都有埋一些陷阱,像是資料庫的資料可能有誤,或是資料撈出來的數量與題目的範例不符,這些其實都是在考驗我們如果發現問題的時候,應該要去跟SA或客戶做確認,而不是自己猜想要怎麼解決;而後面那段開發網頁的課程,除了教導我們MVC架構的實際運作方式外,也常常糾正我們平常打程式的縮排及變數命名習慣,甚至是在處理會去送SQL給資料庫的時候,也要注意自己打的程式會不會有SQL Injection的安全漏洞。

        而且每次的作業驗收都會請影片的講師跟那些正職的助教來跟我們一起Code Review,我們除了可以觀察其他人在面對同一個需求時的處理方式有哪些不同,講師們還會提供一些我們常忽略但其實應該要注意的小細節,像是平常網頁上給使用者輸入的Textbox欄位應該要限制能夠輸入的字數,不然如果使用者故意輸一堆文字然後傳到後端的話,整個程式就會報錯,最壞的情況報錯的時候可能會把一些機密的資料或程式碼顯示到前端的錯誤訊息上;還有另一個重點就是不要相信前端傳回來的任何東西,因為在Google Chrome頁面按下F12會跑出來的那個開發人員工具實在太好用了,不但可以修改網頁上顯示的東西,還可以直接下jQuery指令,甚至是查看網頁傳到後端的封包內容,而前端也是駭客要攻擊網頁最容易的地點,所以任何要去做判斷的東西應該要在後端才判斷,不應該放在前端,不然有心人士只要F12按個幾下,你放在前端的判斷式根本如同虛設。

查詢葉面.png
(2) 分發部門初期 - 醫療資訊分析系統的開發         

        我被分發到的巨量資料事業處主要的客戶是衛生福利部中央健康保險署(以下簡稱健保局)及衛生福利部疾病管制署,而我是負責處理跟健保局有關的相關事務。剛下部門後,我所被指派的工作並不是馬上跟大數據有關,而是先去支援部門的醫療資訊分析系統的開發,那個系統主要就是他會有一堆資料分析的模版,像是抗生素使用分析,急重症品質指標分析之類的,然後使用者就可以自行點選他想觀看的分析模版,網頁會根據資料產出Power BI的報表給使用者觀看,而我負責的是進行某些模版的對資料庫進行增刪改查的功能,就跟新人訓練時開發的圖書借閱功能很像,但是看到業界實際上在運作的程式專案真的是大開眼界,我的圖書借閱系統整個專案的大小頂多也才一百多MB,可是部門的那個醫療資訊分析系統整包卻有三四GB,那個程式碼的數量真的是這輩子還沒有接觸過的,光是要用Visual Studio要把他建置起來都要花上幾分鐘的時間,而且也可以體會到一個系統如果當初開發的時候有一個豐富的底層共用函數是多麼的方便,像是對資料庫進行增刪改查的功能函數都已經寫好了,我只要把他所需要的參數傳遞進去就行了。我總共進行了三個模版增刪改查功能的開發,從中也可以體會到,我從一開始的完全不知所措,只能一直去問正職員工這邊該怎麼做,到最後我已經可以自行獨立完成的成長,算是有小些的成就感。而這段期間我學到最大的觀念就是,如果遇到不會的就要馬上問,不要害怕問問題,也不要自己一個人卡在那邊,因為你不講的話不會有人知道你不會,而且與學校不同的是,在學校你如果作業的進度卡住只會影響到你自己或是你的組員,但在公司會影響到整個部門產品開發的進度,所以不會的地方如果自己已經努力研究了一段時間還是徒勞無功,就要勇於發問,同事們也都會耐心的幫我解決問題,讓我在這個階段就養成了勇於發問的好習慣。

(3) 分發部門中期 - ETL轉檔程式的開發         

        到了三四月的時候,我終於如願所償可以接觸到跟大數據有關的工作,但整體的進行難易度也馬上飆漲了起來,因為這個是我這輩子完全沒有碰觸到的領域,我的工作主要就是處理被分配到的客戶問題單,內容可能是要幫資料庫新增欄位,或是有新的轉檔程序要開發,我們主要都是用IBM開發的DataStage來進行ETL的工作。整體ETL的流程就是,要先去抓取客戶來源資料庫的資料,然後依據客戶給的TableLayout來設定要抓取哪些欄位,然後每個欄位可能都會有各自要額外處理的工作,也就是要進行資料的格式轉換或初步的資料核驗,像是身分證字號或醫事機構代碼之類的要進行加密,日期欄位也要轉換成使用者想要的格式,有些甚至還要依據來源的資料來儲存不同的數字,像是有個欄位叫年季,如果來源資料的時間是一月到三月就要儲存1、四月到六月就要儲存2,以此類推;有時候也要將同質或異質資料來源的資料作Join或Union的資料運算,或是針對資料的某些欄位分組後進行加總之類的資料運算以產出新欄位的資料值。

ETL流程.png
(4) 分發部門中後期 - 網頁弱點處理及Java程式改良           

        有時候因為暫時沒有什麼ETL的問題單要處理,就會被派去支援撰寫處理網頁弱點掃描被掃出來要改的程式,我們部門的某個系統拿去給Fortify源碼檢測工具掃描後被掃出有五百多個跟資料庫有關的風險,就是資料在拿去當資料庫的Where參數使用時沒有經過處理就直接拿去用,我們其實有做了字串黑名單的處理,但是Fortify不承認那種處理方法,最後我們用的是白名單的方法來處理那個風險問題,我負責的工作就是把他被掃出來的說有風險的那段程式碼,前面加上一行已經寫好的白名單函數,然後依據參數的類型,看是要使用只能通過數字字串的函數,還是只能通過英數字字串的函數。整體來說非常簡單,就是一直做差不多的事情重覆五百多次就行了,相比於之前的ETL程式開發,所要顧及的東西少了許多。

白名單函數.png
(5) 分發部門後期 - SA邏輯文件撰寫           

        暑假比較特別的是我被派了一個要把客戶的需求改寫成我們倉儲邏輯文件的工作,也就是平常SA的工作,這個工作對我來說真的是一大挑戰,因為要處理的客戶對倉儲相關流程並沒有很了解,連資料庫主鍵的定義是甚麼都不清楚,所以一開始派出來的需求文件幾乎是沒有甚麼人看得懂,而且流程又很複雜,又有一堆代碼要CASE WHEN去給值;可是經過兩個禮拜的與客戶的一問一答,深入了解客戶想表達的邏輯且補上可能缺漏的東西,最後我終於靠自己的力量寫出一份邏輯文件了,而因為整個邏輯文件都是我寫的,所以同事就叫我順便把ETL程式也做一做,光是看DataStage上的流程就知道這張單子有多複雜,不過因為我也摸這些東西摸半年了,所以還算扛的住,因為雖然他流程複雜,但是基本上複雜的就只有他要JOIN一堆東西,還有超長的代碼條件要設而已。做這張單子的時候也是多災多難,像是最後在驗證資料的時候,驗出來的筆數跟客戶給的測試資料完全不一樣,可是我們這邊依照客戶給的邏輯去撈母體資料的數字是對的,客戶給的是錯的,所以只能叫客戶再給我們更正後的測試資料。

邏輯文件畫面.png
Ds畫面.png

學習

工作詳述
學習

技術面

(1) DataStage的操作

        ETL就是將資料從來源端經過萃取(Extract)、轉置(Transform)、載入(Load)至目的端的過程,因為過程複雜,所以通常都是用工具來協助開發,而我目前有接觸到的ETL工具就是IBM開發的DataStage,他可以把來源的資料庫或是文字檔根據自己所定義的資料規則,把資料抄寫到指定的倉儲目的端,然後還會自行做有效性檢查,而且也支援多種類型的資料庫,像是IBM DB2、Oracle、Sybase、Microsoft SQL Server,而DataStage有很多的元件可以使用,有些是JOIN的功能,有些是UNION的功能,經過了暑假的磨練之後,我對這些元件的條件設定也更加了解,基本上普通的單子,只要來源資料不要有髒資料,基本上我都可以自己一個人獨立完成。

自我評估與心得感想

自我評估與心得感想

           我覺得來叡揚實習真的讓我收穫許多,不僅是讓我知道自己的能力有哪裡不足,也讓我體會外面的職場生活是怎麼運作的,在實習這快一年的過程中,可以體會到自己有所成長。一開始下部門的時候壓力真的很大,因為自己什麼都不會,會覺得自己很多餘,然後又會覺得自己是不是選錯部門了,如果當初選擇平常寫系統寫網頁的部門會不會比較好,甚至還會害怕同事那邊傳來的任何訊息,因為同事會傳訊息給我,通常都是指派要我做什麼,或是說我有哪個地方做錯了,哪個流程忘了做,然後同事們又都很有耐心,人也都很好,可是我卻沒有表現得很好,所以感到很愧疚,而且職場也不像在學校只要拿個60分就算及格,職場上是要把事情完成才算及格,然後也不會有人給你像是做得很好做得很棒之類的鼓勵性言語,因為我們被分派到的工作一定是最基本的,所以有可能自己以為自己做得很好,可是在正職眼裡可能只是應該要達到的水準而已。但經過幾個月的調適跟熟悉後,情況就比較減緩,也因為對於工作的熟悉度提升了,所以也稍微恢復了一點自信心,而且我覺得很棒的是,我的部門幾乎把我當正職員工來看待,就是我做的工作不是雜事,而是平常正職也需要做的工作,然後每個月部門要開會的時候,也會要我一起去聽,再來就是從我被分派到的工作就可以體會到其實部門也是滿信任我的,因為我是大數據部門,在資料移轉的時候的資料量常常可能都會千萬起跳,雖然也有一個缺點是這樣的信任讓我前期壓力實在很大,因為同事不會每個階段都來檢察我有沒有做錯,所以也有可能我自己有地方做錯了,但我不知道,導致我很害怕我會不會有地方做錯,然後後續造成別人的困擾,或是其實資料移轉的過程中資料有誤,然後沒有被DataStage偵測出來,人工驗證的時候也沒有驗出來。

 

        但我覺得實習中學到東西的幅度就跟效用曲線一樣,到最後學到的東西其實很有限。一開始甚麼都不會,所以每天幾乎都在學新的東西,可是到後來像現在已經做快一年了,對一些軟體的基礎操作或是程式語言的基礎運作邏輯都大概摸熟了,但是接派工作的難度不可能像學習那樣有個平滑曲線,就算我現在覺得我已經熟了,接到更難的工作也是全新未知的領域,可是那種困難的工作通常有一定的期限跟一定的風險,交給實習生做我自己都會覺得很怕,所以就會感覺到自己除非轉正職,不然每天做的事情就差不多也是一樣改系統需求、補資安漏洞,就覺得自己是來工作的,不像以前覺得是來學習的。

 

        而且因為要校外實習,所以自己對時間的安排也很重要,像我四上9、10月的時候要忙推甄研究所,11月的時候要忙期中考、期中報告、成果展,12、1月的時候要忙期末報告、期末考,然後一個禮拜有三天整天都要上班,而且我被交派的東西通常都是那種要自己研究,拿去問正職也不一定能得到答案,然後又有限期限的工作,所以我常常加班,早上八點多出門,回到家都差不多九點多了,到家也沒什麼體力做其他事情就直接睡了,跟以前大一到大三的生活比起來可以說是非常的忙碌。

對系上的建議

對系上的建議

        我覺得除了找學長姐分享校內與校外實習的經驗,也可以找畢業的學長姐,看有沒有空回來分享一些自己當初推甄、考研、實習轉正職的經驗,因為實習結束的時候就要迎接大四下了,大學生涯也差不多快結束了,要決定自己未來是要繼續往上研讀學業,還是直接進入職場,但這方面的知識其實沒有甚麼管道可以獲取,像是推甄技巧的分享,碩士學歷與學士學歷在職場的差距,考研的一些心路歷程之類的。

bottom of page