IT 實習生的心得筆記:4 個我所學的重點心法( 沒有程式碼 )

因為工作需求,筆者這週一直在做專案和實習過程的 review,我順手記錄一些自己的實習心得筆記,本篇文章比較不是生活 vlog 紀錄的類型,但我想和你分享我 4 個主要的所學,如果你也是想擔任程式開發實習生、或想學程式的讀者,都歡迎閱讀此篇文章。​


沒有最佳答案,只有比較適合需求的作法 ✅

某天,還是 Junior Engineer 的小明負責開發一個公司 Blog 網頁,煩惱要用什麼語言寫的他私訊問在公司的 mentor:

實習心得筆記範例聊天室縮圖
模擬示意圖,若有雷同純屬巧合

如果你是懂程式的人,也會覺得小明的問題很模糊吧?但不得不說很多寫程式的新手( 包括我 )也曾經問這種白痴問題。

以前我開發時常常會找 best practice,像是真的爬文找後端應該要用 Node.js or PHP?資料庫用 Mysql 還是 MongoDB 比較好?這或許是高中讀書下來的壞習慣:遇到問題,就會想找到所謂的標準答案。

但開始實習超過半年後,我越來越覺得「 資訊領域中,沒有所謂標準、或一定通用的答案 」在不同的需求和情況下,相對適合的作法跟技術也會不一樣,大家都推 A 技術,但如果你的條件下不適合 A 而你硬要用,那只會塗然增加開發的困難,到頭來也不見得能解決問題。

coding 跟寫高中數學不一樣,前者不存在所謂的標準答案

所以我現在的心法是:先回頭思考今天的主要需求是什麼?我們是要解決什麼問題?再列出不同技術、語法或作法的特性,去篩選能解決問題,且我能接受缺點的選項,它不會是通用的最佳解,但足以解決我的最終目的。

好的回歸正題,那如果小明考慮到手邊專案的特性跟需求後,換個問法會變怎樣呢?

這看起來是需要換個公司了喔⋯⋯

以「 目的 」為導向,有 Why 再想 How 🧐

再看下一個故事,過了一陣子後,小明完成了 blog 數據後台的開發,跟主管報告情況:

翻譯蒟蒻: PV 是指 page view,頁面瀏覽次數

看似很好笑的案例,但可說是屢見不鮮,雖然數據後台的網頁刻的很漂亮,但做到後面反而失去數據後台的意義:看到想知道的數據和資訊。

這就是我在實習期間的另一大所學,就是要以最終目標為導向,從 Why 延伸 How,從最後的結果回推前期要採用什麼技術跟計畫,讓我在前期規劃上更縝密,也比較能確保付出的心力跟資源能達到目標。

我公司的 mentor 主管真的讓我充分去應用「 以終為始 」這個思維,每週視訊我最常被問「 為什麼你會想這樣做?」、「 為什麼這樣選?」這不是 mentor 的質疑或反問,而是我們真的在討論我每個決策的原因為何?

所以跟上一點有關,我根據最終目的選擇技開發術跟架構,然後在問自己「 為何這樣選 」來驗證我的思路能否確實滿足我一剛開始的需求。

雖然我以前就在用第一思考原則,但「 以終為始 」這個思維讓我不只拆解原先的問句,而是能根據原先的目標去產生問句、確認自己的想法跟決策有沒有貼合一剛開始設定的目標。

像是我先前一個 project 的後台開發流程是:蒐集票數數據→ 開發後臺網頁 → 套 UI 跟圖表,將數據可視化

但這盲點在於:後台數據網頁的重點是顯示的數據能否讓我們驗證活動成效?而不是圖表票不漂亮,所以修正過後,我的思路跟流程變成:

跟其他學長姐開會討論,確定想評斷哪些活動成效?( 最終目標 ) → 思考這會需要哪些數據來證明成效 ( 避免漏抓資料 )→ 思考怎麼搜集這些數據 → 開發記錄數據的程式 → 最後開發後台網站

好比高中生做學習歷程本身只是過程,目的在於你能記錄你的學習與探索,去知道哪些你喜歡什麼、擅長什麼、還需要什麼。

別因為大家都使用、推薦這套技術或作法而用它,而是讓你的最終目標決定要不要用

好的,那我們切回小明的故事,看看他怎麼運用以終為始的思維:

哇勒這個直接跳到終點,要從頭開始的部分了

如果想打造東西,更該接觸底層技術( 和知識 )📚

又過了一陣子,想做一個 side project 的小明詢問他的 mentor 一些技術細節:

上面的案例有點太誇張了我知道 XDD 但我主要想說明:如果想打造更客製化,屬於自己的服務,光用線上的現成編輯器或看幾支 Youtube 影片而已是不夠的。

近年來,No code 和 low code 愈來愈盛行,例如以前要建個聊天機器人得手動從頭寫 code 寫到尾然後因爲一直報錯而崩潰,現在就有很多官方 SDK 可以用,甚至有第三方平台可以用介面設計 Chatbot,不用碰 code。

先說:筆者覺得這是很好的發展趨勢,代表技術能實際應用在生活中,讓沒有相關背景的人也能運用、成長自己的本業。

如果你確定想當一個 service 的 user,那原則上你只需要享受成果就好,然而如果你是想打造類似的 service,或是開始收費接程式相關的案子,我會說下苦功去鑽研底層技術是更理想的作法。

我也開始學習程式、網路和電腦的底層知識,從 call by reference vs call by address 到 OSI 7 layers 都在學( BTW,最近閱讀 clean code )

我在實習過程很能感受到:懂越底層,能客製化的程度、會的解法就越多,而不用拘限於現有框架或是服務。我意思不是一定要從頭重新打造輪子出來,只是懂越底層的話,就可以修改原本的程式,改成更獨特的功能,或是乾脆自己建更好的輪子( 如果原本的輪子不堪用了 )

拿架網站這件事來說好了,如果想開始收費幫人建立網站,只會 WordPress 可能還不足,還得學 SSH、FTP、backend、frontend,甚至 GET / POST request 等等等。

網站資安除了 CloudFlare,可以去學有哪些攻擊手法和原理?網路七層分別有哪些威脅?也會知道主機重要的 port 也可能要鎖 IP、做 Client Throttling、用 WAF 和 prepared statement 防範 SQL injection。

我今年也在慢慢去學一些程式開發和 Web 的底層基礎,確實在實作寫 code 上能想到比較多解法、也能寫出比以前更多客製化功能的 project,懂底層技術不會是 must to do,但我覺得 it’s really good to have( 不是 drink )

學底層知識有沒有必要?哩拎跨埋嘛,後ㄅㄡˇ

然後學底層技術最大的好處,就是能看懂純靠北工程師的貼文和資訊社團的梗圖笑點了,我最近在社群個版轉發 coding 迷因的次數逐漸增高,不知道該哭還該笑。

下圖留言為筆者

不要一直在 dev 端去想解法,也不是每件事都要自己寫 code 👀

我之前覺得在開發時,所有東西都是自己刻 code 出來、從 server 端處理,到後來才發現有些非即時性數據可以分析 access log 就好,不一定要寫 API 去即時記錄;我可以從 Client App 端撈的資料也不少⋯⋯這就貼合上一點,了解更深層的技術跟原理才會想到。

例如,前陣子玉山網銀鬧了個小笑話( 抓到錯誤的使用者登入 IP 記錄,好像是吃到 user 隨便掛的 IP )我就跟 mentor 討論我的想法,我原本只想到後端多抓幾組資料 ( REMOTE_ADDR、HTTP_CLIENT_IP、HTTP_VIA 等等⋯⋯)

但後來經過指點,才想到原來也能從 Client 端的 App、金控元件下手去抓資料,當晚會議後才深知自己視角還只停留在 developer 端,沒能看到整個 network 運作的系統流程。

所以我接下來的目標是訓練自己能更全面地去看待問題和專案,不讓自己寫 code 成為唯一的做法

這個區塊沒有小明的聊天室範例,是因為筆者寫到後面暫時想不到梗,下一篇再說。


實習心得筆記總結

以上就是筆者的實習心得筆記了,必須坦承我在實習前,會覺得自己程式底子跟程度不算太差( 以高中來說 )但我今年實際到一個公司環境去學習、產出後,才發現有很多需要訓練跟補強的地方,距離能獨當一面、進入職場還有很遠的距離。

接下來在大學階段的四年,我會期許能深入程式開發與管理的領域技能,也是考慮到自己已經不是高中生的身份,會希望別人看待我的重點不是我在什麼年紀做了一些事,而是我能把我擅長的事情學到什麼地步,未來有一定的所學也會持續在部落格和大家分享~


感謝看到這裡的你,希望本篇的一些淺見所學能幫上忙( 或是產生共鳴 XD )以下是幾篇我在高中寫的自我反思跟所學文章,也很推薦閱讀:

參考資料

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

前一篇文章

準大學生請看!2022 大學新生免費資源 & 優惠懶人包

下一篇文章
轉職心得分享與經驗談

從金融系到 UI 設計師:轉職心得分享與經驗談 ft. 學習家 & Elise Fu