工作內容

工作環境介紹


在實習期間,我待過兩個辦公室,分發到各部門後, 我所屬的部門是公文部門的產品部。
以開發維護公文線上簽核管理系統-SPEED30為主, 而公文部門正是屬於總部。

1. 總部-世界之頂大樓(民權西路站附近)

總部位於民權西路站附近,其工作環境如下圖,有抽屜和書架可以放置私人物品,每個位子也都有延長線,每一區辦公室也有飲水機跟洗滌台可以使用,也有放置垃圾桶,會有打掃人員定時清理。而飲食部分,因為附近是晴光商圈,因此美食很多,又因為附近是大同大學的校區,所以也有許多方便的商店,交通方面則位於民權西路與中山國小站之間,所以基本上非常便利,生活機能也很好。

2. 創富中心(芝山站)

創富中心則是今年才設立的新辦公據點,在5月後整個公文部門即進駐創富中心,而我正是其中的一員,屬於第二批進駐人員。相較於總部世界之頂大樓,創富中心位於芝山站路程約十多分鐘距離的地方,雖有交通車於上下班及午休往返車站與公司,但車站附近僅有少數連鎖店,且因交通車班次問題,不能移動太遠。附近也都是重劃區,未來規劃會蓋其他大樓,但目前皆為空地,交通也比民權西路站更難到達。唯一的好處就是景觀優美。


工作詳述


1. 新人訓

在 1/17 到 2/14 的 18 天中,主要觀看事前錄影好的錄影帶並且配合其內容完成作業,課程內容主要分成五堂課:資料庫語言(SQL)、前端基礎課程(Front End Basic)、.Net MVC 課程、前端進階課程(Front End Advanced)、後端處理課程(Back End)。每堂課都按照看影片、再來寫 Workshop 的作業、最後進行 CodeReview 由講師檢討每個人的程式碼。

2. 公文部門領域知識

進入公文部門後,由於公文部門使用的技術與新人訓學習的技術並無差異,但公文是一個艱深的領域,所以一開始的幾天主要在觀看mentor給我的公文部門的領域知識,學習公文的生命週期流程與其相關的製作規範、以及團隊的coding guideline。

3. 維護SPEED30系統

稍微了解了公文的領域知識後,就算是加入了產品部的一員,我們的部門採取scrum的流程,以jira作為輔助軟體,每兩周為一個sprint。在週五會進行會議結算上個sprint做的事情以及分配下個sprint要做的事情,而每個sprint都會有許多問題單,可能是測試人員測試到的問題、客戶回報的問題、專案回報的問題、開發遇到的問題、或是新開的需求。

而我主要是跟我的mentor拿問題單做,去解決問題單上描述的bug或是需求,做完後我需要寫成測試報告以跟測試人員說明正常運作該有的狀態,並且要發送merge request,而在jira上需要填寫規範好的回報內容,等待code review,而每週四則是我們團隊進行code rivew的時間,我則會抽出每周四下午的一小時參與。需要講解每一條MR給所有團隊成員看,而團隊成員則會提出對應的質問或是修改見解。若全員同意後則可進行合併入master branch。合併後再由測試人員進行測試,若測試發現仍有問題則會reopen此張jira單重複以上流程,直到沒問題為止。

4. 工作內容

主要使用.net framework MVC、jquery、kendoUI的組合進行開發。而我主要的工作就是處裡問題單。


實習期間完成之進度


(1) 新人訓練

在17天的新人訓練中,重新審視了自己擁有的技能,第周重新學習了 T-SQL與進階的資料庫語法;第二個禮拜學習了jquery和kendoUI的東西、並重溫了MVC 的程式寫法;第三個禮拜則是把前兩周和並,並且使用ajax進行分離、第四周則把後端的專案改變成分層架構實作。最後照著進度完成了一個簡單的圖書管理系統。

(2)公文領域的學習

在公文部門中一開始會拿到整理過後的公文知識,他就像濃縮液一樣,一開始完全看不懂,但隨著一次又一次的修改系統的任務,我逐漸對公文這塊領域有所了解,現在已經可以從頭到尾製作一篇公文到發送。

(3)資訊安全與智慧財產權課程

這是每個新人都要進行的課程,在此課程中我們了解到作為資訊開發人員必須要了解的智慧財產權與資訊安全的相關理論法規知識以及實際案例。

(4)修改公文系統

最主要的工作即是此,我每周都會完成2到3張的問題單,有可能是修bug、新增功能、修改規格。一方面更了解手上的系統、一方面則是更加精進我的技術。目前已經完成31張問題單

(5)暑假期間

暑假五天都在上班,因此也接觸到了每兩周一次的planning meeting,跟完整的code review流程。而我因為有更多時間,因此拿到了完整的功能開發單。開發了外陳外匯的檢視器,可以針對電子簽核檔(SI檔)進行檢視與下載相關附件的功能,完成此功能後我更加了解檔案的格式以及處裡傳輸,在八月份我解決了更多的問題單,現在已經累積到87張問題單。


學習

一、了解在大型專案與軟體工程師實際工作的流程

在大公司的好處就是事情都比較有流程化,相對的就是比較死板,但針對大型專案這是非常有必要的,我在這段實習中,學習到了要怎麼成為大型專案的一分子,我們按照scrum的流程進行開發,照著一定的開發週期與SOP,這對我來說我學到了很多平常自己開發沒有辦法學到的經驗。例如git flow的開發,我們照著issue的單號開branch並且修改,改完後code review沒有問題才由資深的工程師進行合併。或是大專案特有的議題與困難。 而我也學到了作為一個軟體工程師實際的工作流程與其的一天生活。而不是如以前一樣止步於想像,我實際的作為一個在公司中的工程師工作。

二、更了解怎麼使用開發工具輔助開發與尋找問題

在大型專案中工作,最重要的必定是尋找問題的能力,而這份能力又可以靠著開發工具來提升, 我在這段時間中學習了很多快捷鍵,更熟習了不論是visual studio或是瀏覽器的development tool,由於我的工作較多為找出回報的bug並且解決他,所以我對於瀏覽器提供的開發者工具比起以前僅止於知道可以檢查元素,現在更會懂得利用她的網路功能來檢查傳輸與接收到的資料,也學會了如何在前端進行下斷點的動作,而因為在大型專案中,有許多是沒有文件記載的,因次找bug需要自己去尋找並且驗證程式究竟是因為哪一行而動的,我在這個過程中知道了ctrl+T與ctrl+shift+s等在visual studio的好用快捷鍵,這個過程就像是偵探一樣,找出犯人在哪裡、推敲其可能的犯罪原因、找出其犯罪證據、並且修改好他。

三、更深入實用的技巧

以前在學校自己開發往往都是小型的系統,做的也僅止於之前學過的東西,沒有更深層的應用,也沒有分層的改念,更沒有大型的系統與維護的概念。僅僅是覺得寫出來只要可以動就好,沒有考慮太多我只有考慮到可讀,並沒有考慮到可改與可維護性。 我學習到命名的真正重要性、註解存在的時機、一個程式到底要寫到什麼樣子才算是比較好維護的樣子。

在公司也會用到比較專業或是比較實務上會使用到的概念,例如transaction,這個概念在資料庫實務上有接觸過,但我直到在進入公司的專案後,我才明瞭為何要使用tracsaction。或是何時要使用。

也藉著在公司的機會,我接觸了本來並不會特意去接觸的jquery,並且也學到了kendoUI這個跟jquery配套的UI程式庫,也接觸了許多新概念,如MVVM。也接觸了Scrum的開發流程、git的更深入的應用,而不是以前僅知道push跟commit而已。

在暑假後,我開發了更多更多的功能,讓我學到了更多瀏覽器的api,舉凡node API、mutationObserver、range API、selection API,也透過在產品的原始碼中尋找問題迷路的過程,學到了許多不該寫或是應該寫的寫法。


自我評估及心得感想

實習至今,其實我發現了很多事情,也對很多事情有更新更多的認識。進了公司後,雖然我早有了解,我對程式並不是屬於特別有天賦的人,我只是比同一群人花了更多的時間跟努力在上面。

真正論天賦,我並不是有天賦的人,我也不是邏輯能力特別出眾的人,我只是花了很多時間跟努力堆積而成罷了。

進公司後,我才了解,自己寫程式跟在人家手下寫程式的差異有多大,以前都是自己寫得開心最重要,想寫什麼就寫什麼,一開始只有個草案,做不出來或是突然想到看到什麼有趣的技術或是想法就馬上加上去。

不過在別人手下寫程式就很不一樣了,能動只是最低標準,還要依照提出要求的人所想的動。若是不是依照他們的方式動了,就算他並沒有出任何錯誤,也算是錯了。

我是在公文部門做公文系統,雖然公文系統不是一個很常見的domin,但這塊仍是一個很困難艱深的domain,其實基本上我沒有任何機會去看清整個資料庫的關聯全貌,我只是在一次次的修正的問題單上慢慢了解常用的關聯。以前則是先規劃好我看得見全體我才能動作。但我只是在管中闚天,並且我還要補天。

我要學的要做的還有很多,我個人認為我離能夠勝任junior的工作還有一段距離要補足。

經過暑假的五天上班的洗禮,個人覺得還算是能夠適應上班族的生活,儘管工作困難有逐步增加,但還算是能夠跟上,有覺得應該有慢慢接近一個junior工程師的程度,但還是有些差距,希望下半場的實習生活我也能順順利利。


對系上的建議

我認為系上針對專業實習的制度已經行之有年,從面談到媒合到成果發表安排都已經有很多學長姐經歷過,制度本身沒有特別的問題。經過大學接近四年的學習,我認為系上有幾點是可以加強或是修改的。

針對程式進階的課程

我認為系上已經開了很多針對單獨程式語言的課程的課了,但我覺得針對程式要怎麼寫得更好並沒有相關課程,比方說資工與資傳在程式設計二學習的是物件導向的概念,而我們在程式設計二學習的卻是視窗程式設計,不能說沒有物件導向的概念,但確實本系的同學包含我對於物件導向這件事情確實缺乏了很多概念。

又或者是演算法,或是設計模式,系上並沒有提供相關的資源讓想學的同學學習。對寫程式這件事情我覺得比起懂得更多不同的語言,加強對這件事情本身的功力應該比較重要。我認為系上有些課程確實有與時俱進(例如網際網路程式設計),這點很好,但有很多課程實際上的內容卻是與實際運作上有些過時。若能夠將這些課程修改成比較貼近現代的課程會更好。

學長姊的分享

在我在學時確實有過cornor的制度讓學長姊來分享他們學到的,我認為這個很好,尤其是可以開個時間讓學長姐分享他們在業界所見所學,或是讓剛接觸程式的學弟妹能夠知道程式究竟能拿來做什麼實際一點的用途。也許可以不定期找在業界的學長姐回來分享工作內容,或是讓高年級的學長姊教比較應用的程式之類的。