昨天剛好在 Facebook 程式人社團社團,看見一個準備要升大學的小朋友詢問:

想問一件事情,我已經會寫程式。 大學明年可以自由選系,如果不選資工選數學的話, 會是很不明智的決定嗎?

認真探討這個問題前,先說說最近的感受,剛好契合此問題。

工具迭代有感

最近趕工一些專案,重新學習 [Modern Web](A Modern Day Front-End Development Stack) 的 Framework 和 Tools,網頁前端工具迭代速度非常快,大約每3年都會重新大洗牌一次。面對問題選擇適合的工具,在工具琳瑯滿目的年代成為生從必要一種技術。各種 Framework 和 Tools 像是工具箱中的神奇法寶,但如選擇不當,下場會是事倍功半。

工具快速迭代時空下,我要抓住什麼才能存活下去? 不斷學習,只是基本條件;不斷突破自己的極限,是挑戰 我們還能作什麼?

文章到這裡,是不是也發現問題和前面小朋友的問題,也許有幾分神似?如果能夠重來,你會把時間投注在哪些項目?做些什麼事情?

回到原本的故事,小朋友的問題

如果是我,怎麼回覆他的問題?

我會把問題拆解成幾個部分,先別亂下開處方(建議)

  1. 你了解自己適合什麼嗎?
    • 做什麼事情讓你感到興奮?
    • 哪先事情能夠你願意不眠不休投入,樂此不疲?
    • 有什麼確定很定厭惡的事情嗎?
  2. 你能把自己表達問題表達清楚嗎?
    • 你有什麼考量?工作導向?經濟?包袱?
  3. 理解你想選擇的內容是什麼嗎?
    • 資工系在學什麼?為什麼而學?應用?
    • 同樣的問題,數學系?

大家怎麼回答?

我大致用上面拆解問題架構分一類,就簡稱__第一類__、第二類__與__第三類

第三類

這則留言是所有這類中最好,直接點出重點,夠豐富與精闢,資訊科學是在做什麼?本質的精神內容都被詳細列舉。

資訊科學: 計算的本質 + 電腦軟硬體架構運作原理

資工系從來都不是程式系

資工的精神,在於瞭解計算的本質。

舉例而言,Data Structure 教我們如何有效管理複雜且龐大的資料。Algorithm 教我們何謂高效率的計算方法。Compiler 教我們如何系統化的轉換高階語言。Computation Theory 教我們如何定義一個問題是否可被計算,與如何評估計算複雜度。Computer Architecture 教我們如何設計有效的計算機器。

寫程式本身只是一種實作方法,不同領域的人,學習與使用不同的程式語言解決該領域的特定問題。寫程式本身如此而已,當然,要寫的好,還是得有多年的苦練才行。

資工系的本質亦是解決問題。針對一個可被計算之問題,找一種更好的抽像計算方法,用軟體或是硬題實作皆可,使得問題可以在更短的時間內,或是更少的計算資源之下被解決。

資工領域的聖殿,Turing Award。
資工領域的聖杯,P = NP ?

回應網址, 回應作者為實驗博士班學長

這篇的內容提醒了我,選擇當寫一位__寫程式的工匠__,還是理解__電腦科學的專家__。

第一類、第二類

這兩類在討論串相對很少,但以我觀點是最重要的,但最難用文字表達在網路上討論。重要在於__釐清自我的需求(動機)才是__點燃行動克服困難的關鍵。當你是不情願、被勉強去作一件事情,所有的事情是痛苦、枯燥乏味的。困難在於單純文字討論缺少了畫面和氣氛的資訊,單純用文字詢問相關問題,給他人一種質疑他人、倚老賣老的態度。這種討論需要面對面,真誠並深刻向當事人提問,循循善誘的幫助他探索自己。

後記

前段日子,我閱讀一本生人規劃的書 <做自己的生命設計師:史丹佛最夯的生涯規畫課,用「設計思考」重擬問題,打造全新生命藍圖>,其中觀念非常實用。舉例:大家都會說多去嘗試不同事務或領域,但常常遺漏__觀察__的重要,觀察自己的感覺、體會自己的情緒,試圖描述成文字、圖像等等,記錄下來分析自己,這些真實的紀錄都是找出自我羅盤,傾聽內心的聲音,才不會被外在的紛紛擾擾給打亂步調。