壹、工作內容
一、工作環境
舊公司環境
實習的前幾個月公司在板橋創新樓(板橋區四川路一段332號),通勤方式為內壢搭火車到板橋後,再搭公車即可抵達公司門口,進出採取刷卡制度,實習生配有筆電和個人座位,內部有許多會議室可供討論,也有販賣部、飲水機、自動販賣機…等,而飲食方面附近步行五至十分鐘也有亞東醫院外市場可以吃午餐。
新公司環境
五月份時公司搬家,搬至TPKC大樓(板橋區遠東路68號),搭捷運至亞東醫院站下車,步行約五分鐘即可抵達,新公司採取「敏捷辦公室」,講究辦公效率與便利性,相較舊公司更為寬敞、明亮,除了舊公司有的設施外,還多了很多人性化的設計,例如:提供按摩椅給久坐的人按摩紓解痠痛、隨處可見座位讓討論可以隨時進行
上班模式
疫情期間,在家遠距實習,直到緩解後才以分流模式上班,目前是在公司上班,部門名稱從數位通路後台開發部(DCBD)更動為行銷解決方案開發部(Marketing Solutions Development),工作與先前相似,處理新生活後台開發事宜,提供行銷人員有效與客戶溝通平台,進行會員管理、精準行銷,如:咖啡票券上架管理、權限管理。
二、工作介紹
1.環境設置
遠傳大部分使用Java語言來寫程式,工作初期為建置開發環境,而我們使用Eclipse作為開發工具IDE(整合開發環境),功能包含了編譯、連結、除錯,可處理如:html、xml、json、java…等各種型態檔案,需要配合Java版本供IDE使用,並透過此工具學習如何建立專案,在實習期間基本都在使用此工具學習Java,除了程式語言外,學到更多的是如何更好建立專案。
2.資料庫設置
利用Mybatis框架實現CRUD,建立與資料庫連線環境,目前使用PostgreSQL作為專案使用的資料庫,下載免安裝版本,只需啟動服務即可透過Mybatis操作資料庫進行CRUD。
3.暑假前心生活APP後台開發
開發關於後台的票券處理系統,讓使用者能夠透過心生活後台管理系統,管理票券匣,例如:咖啡折價券、兌換券…等,而我們的主要工作是製作頁面,負責管理票券匣,輸入各種型態資料,包含:文字、圖片、日期、檔案等型態,而透這些匯入的資料則會透過所寫的java存入資料庫以及本機,在這項工作中有運用到SpringMVC架構、Mybatis架構、html編寫和Thymeleaf應用。
4.暑假後心生活APP後台開發
目前工作為權限管理功能,提供需要新增後台帳號的使用者能新增權限,由於功能的使用上有一定的限制,例如:後台有票券管理、活動管理、列表狀態、電子報管理…等功能,使用者可能只有使用票券管理的權限,因此帳號內就只有顯示票券功能,而其他功能則不會顯示,每個帳號登入時都會先讀取資料庫內該帳號的權限,此帳號只能瀏覽對應權限的內容。
5.SA/Sd文件撰寫
練習繪製流程圖、循序圖,繪製過程能夠感受到使用者與工程師間的平衡相當重要,繪製出的圖必須有一定的規範,使用者與工程師雙方都能夠了解內容,除了讓工程師看懂外,也要簡化、易讀,讓他更理解使用者的需求目標,流程圖顯示了頁面流程,包含使用者操作時的動作,循序圖細部顯示程式間的交互作用,並補充說明關聯。
三、實習進度
1熟悉環境
使用Java語言來寫程式,使用Eclipse作為開發工具IDE(整合開發環境),功能包含了編譯、連結、除錯(Debug),可處理如:html、xml、Json、Java…等各種型態檔案,需要配合Java Development Kit(JDK)版本供IDE使用,並透過此工具學習如何建立專案,在實習期間基本都在使用此工具學習Java,除了程式語言外,學到更多的是如何更好建立專案。
2SA/SD文件撰寫
繪製遠傳新生活後台流程圖與循序圖,讓使用者與系統設計人員(SD)能夠透過文件、圖形的方式交流,彼此交換意見,減少雙方認知上的差異,一個優質的系統分析人員(SA)具備:對管理制度或作業流程設計熟悉、熟悉UML或系統描述工具、邏輯溝通能力良好。
3後台開發
目前後台開發工作:除了原先票券、電子報的管理,自行開發權限功能,管理者可以透過群組管理、功能管理來控制使用者的權限,當管理者更改功能時會影響該功能觸及的範圍,例如:票券列表以及新增票券的關聯,若把兩者的映射刪除,則無法透過票券列表進入新增票券頁面;群組管理則是利用身分來定義使用者可瀏覽的內容,例如:使用者的群組為票券使用者,而票券使用者群組包含票券的新增、修改、刪除和查詢,一名使用者可以有多個群組身分,屬於一對多屬性。
後台開發頁面
SA/SD文件
貳、學習
一、Java
二、Maven專案
(1)命名與import
Java命名時具備規則習慣,例如命名類別(Class)時,首字採大寫、駝峰式命名法,且要與內容有關聯,不能隨便取a、b、c…等名稱,程式碼可能不只自己閱讀,要考慮其他因素;當有某個套件需要使用時,則需要透過import套件或util來使用。
(2)Debug
在程式報錯時,可以使用Debug功能,透過中斷點來判斷程式是否有經過或,若步驟太繁瑣還可以跳過函數,將滑鼠放到變數上也會顯示目前變數狀態,利用Debug除了能看出程式出錯部分,能更了解整個程式運行時的步驟,甚至是中途的狀態。
實習初期接觸到有關Maven專案的建立,同事解釋以前開發一個Java專案,需要先把jar包下載下來放到專案的目錄下,並需要注意jar包版本是否正確,手動添加導致工程過大。
Maven架構的出現不再手工加入jar包,若本機 (local) 電腦中沒有這些套件,Maven會從預設的網路位置下載到我們本機的repository中,之後所有Maven專案需要用到的套件,Maven都會先找本機repository,關鍵字找出需要的jar包,通常可在 "Maven Repository" 網站中找到,複製放入pom.xml的依賴 "<dependency>" 中,再執行 "Maven build",出現 "BUILD SUCCESS" 後即完成專案建置。
三、Spring
(1)MVC框架
MVC的三大元素:模型(Model)、視圖(View)、控制器(Controller),Model負責進行資料管理和資料庫設計,Model不處理資料的顯示、操作;View是負責呈現模型數據和讓客戶端的瀏覽器能夠將資料展示出來,像是負責前端的UI介面(html);Controller用於控制應用程式的流程,包括用戶的行為和資料Model上的改變;MVC的優點:將一個專案的開發分成三個不同階層來處理,讓每一層的分工更清楚,同時增加協同作業的效率,團隊每個人可以在各自負責的部份進行開發,也能有的一致的開發設計與方式。
(2)Spring
Spring就是讓物件與物件之間的關係沒有通過程式碼來關聯,都是通過配置類說明管理的,當用已經初始化的對象時,例如:某資料庫實體(Entity)、某功能(Util),可以直接注入@Autowired,而非new一個新的,可以將創建的對象或依賴交給它管理,並且支援各種框架如:Mybatis,目前專案建立也圍繞著Spring建構,透過"@"(annotation)標明要讓Spring所掃(scan)到的屬性,程式只需要一個主程式(Main)即可啟動,Spring的功能不僅於此,現在所學還只是皮毛,加上持續有方法推出,了解整個架構才能更加上手。
四、Mybatis
(1)Mybatis
在上述資料庫建置中提到mybatis各層的建立:DAO層、Service層、Entity層、Mapper層,支援使用Java進行CRUD的資料庫操作,前提是要在Mapper.xml中寫好SQL語句,在我們使用Mybatis時會發現,每當要寫一個業務邏輯的時候都要在DAO層寫一個方法,再對應一個SQL,即使是簡單的條件查詢、即使僅僅改變了一個條件都要在DAO層新增一個方法。
(2)Mybatis-plus
使用Mybatis-plus可以更簡化撰寫Mapper.xml的時間,可以產出原生SQL,包含基礎CRUD語法,只需要預先寫好設置檔,即可產出Entity、Service、DAO以及Mapper內容;Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎上做了增強,卻不做改變。我們在使用Mybatis-Plus之後既可以使用Mybatis-Plus的特有功能,又能夠正常使用Mybatis的原生功能。
五、SA/SD文件
SA:系統分析師(System Analyst),是對設計中(Under Design)的系統來作分析,既然是分析,那麼,應該是需要 “剖開” 系統內容,來對其系統內部的結構組成元素,以分析其脈絡,一般的SA的定位,是在於對客戶端操作者(Operator)與領域專家(Domain Expert)的需求訪談。
SD:系統設計師(System Designer),焦點仍就於系統內部的結構,與SA所不同的是,SA所建構的是屬於偏向於領域的概念模型;而SD則是根據領域模型,再配合實體的平台,如.NET or J2EE的框架(Framework),考量其效能、穩定、分散與安全性等,所建構而得的軟體規格模型。
兩者均可撰寫包含流程圖、循序圖,只是根據的參數不同,這些圖架構用意在於使用者(客戶)與工程師(後端人員)間的溝通能更為順暢,SA更側重在邏輯及工作順序搭配的表達,不需要去關切使用什麼作業系統或是什麼開發工具;SD則扮演了系統最佳化的推手。SA所規劃出來的構思,在不同的工具上,可能有更好的方法,也可能難以展示,這都需要藉由SD對使用環境及開發工具的瞭解,來進行調整和規劃。
六、Git
工作中時常遇到一個工作,由不同的同事進行作業的情況,這時Git就發揮它的作用了,當有不同人在進行新增、修改、刪除等動作時,在沒有Git的情況下就需要馬上通知其他人更動,但Git無論是誰改動都不會影響到自己的程式碼,當你想要看先前版本時可以透過樹狀圖往前看是誰更改、改了什麼,Git提供了一個視覺化的版本線圖(commit graph),來呈現出主幹與各分支連結形成的樹狀架構;執行推(Push)指令,可以把自己目前本機端儲存庫的相關檔案,上傳到遠端儲存庫;拉(Pull)指令則把遠端儲存庫的最新版本下載至自己的本機端,並將遠端分支合併到本地分支;複製(Clone)可以複製整個分支的程式碼。
七、Other
在心生活後台開發中需要將表單(form)中輸入的資料傳回本機,必須使用到傳資料的方法,當使用"get"時,網頁的網址會出現表單所傳送的封包內容,而"post"則是表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址,用戶看不到這個過程,因此資料相對安全,比較不易外洩。
參、自我評估及心得感想
實習開始後,首先是生活作息上的改變,從學校進入職場,不在像大學一樣,能夠自由彈性分配課程以及休息時間,需要自我規範生活作息,畢竟這是我選擇的方向,必須對自己負起責任,為了保持自己最佳學習狀態,每當上班的那天就必須提早準備,深怕會錯過上班時間,在剛實習的前幾天,還需要適應通勤的繁忙;其次是學習職場方面的知識,我發現跟學校所學習的知識有所出入,經常麻煩同事來指導,例如面對專案框架的介紹或是遠傳獨有的工作術語,是我從前沒有接觸過的領域,還好有主管與同事的指導、解惑,再加上現在非常發達的網路查詢,還學習到如何利用關鍵字搜尋法,更有效率、準確地找出相關文章,讓我更快進入狀況,若是沒有這些協助,我可能無法了解的這麼透澈;接下來是心態上的轉變,從學校到職場,原先我在學校的心態是為了應付考試,而努力學習,雖然有學到東西,但不一定是有興趣的內容,導致學習品質不佳,不會想再接觸額外的內容,然而職場上的學習心態就有所變化,由於不用在為了考試而學習,不再有壓力的學習,進而增加學習新知識的動力,除了交代的工作外,還會想學相關領域的技能,充實自己,進而有更好的專業實習體驗。
綜上所述,經過這些時間的磨練,我不後悔我所做的決定,畢竟在實習過程中我學到很多實用的技能,接下來的實習我會更加努力。作為一個工程師的能力還遠遠不足,像是與人溝通時的技巧,需要表達的更加清楚,提問時能抓住重點,問對核心問題,未來在寫專案的時候,注意專案架構是否合邏輯,具有可讀性,命名檔案時,依照公司的習慣,而非只寫給自己看,我相信成為一個工程師不僅要具備這些能力,還有很多我還沒接觸到的問題。
肆、對系上的建議
技能方面
實習過程中,難免會遇到課堂上沒有接觸過的知識或技能,例如:前後端概念、專案設計架構、問題解決...等,學校學習期間除了對於基本知識的涉略,希望能夠在課堂中能有關的知識介紹或是加開相關課程,這樣在實習的時候可能會比較好銜接,讓有興趣的同學能夠了解。
疫情影響
因為疫情影響,導致暑假前期上班改為遠距實習,相對於在公司實習較不方便,公司筆電因為網路問題無法在家中使用,且與上司無法隨時討論目前進度,必須要等待有空閒或是特別排定開會討論,才能反應進度以及目前遇到的問題,以上種種原因,進而影響實習品質,因此我認為報告數量方面可以減少,以配合目前疫情狀況。