因為找不到人一起寫 code ,所以辦了臺灣程式路跑

臺灣程式路跑是我和子期舉辦的活動(還要靠很多朋友和導師的幫忙啦),希望傳承台灣現有自由開源軟體開發者的經驗給新進者,讓更多人接觸自由開源軟體開發。這篇文章說明一下我為什麼想要辦這個活動背後的脈絡。

——

最一開始其實是我去柏林參加兩次 ownCloud 黑客松回來之後產生的想法。感覺,對於這些歐洲開發者(裡面大概一半是歐洲其他地方來的)來說,寫開源專案好像只是「空閒時間跟朋友進行的休閒活動」而已,可能跟我們會約朋友一起打球很像。就算一開始不認識,也會透過 IRC 上面的閒聊(通常不會在 GitHub 或是 mailing list 上面閒聊)互相認識,而且大概又因為是屬於相近的文化圈和時區,本來的同質性就高,所以到最後多半可以互相認識。——感覺有點像在臺灣參加社群研討會籌辦一樣,大家一開始不認識,但是在為了同個目標工作的過程熟悉了彼此。

「貢獻自由開源軟體在歐洲是一件稀鬆平常的事情」,也跟風氣脫不了關係。很多人都在做,所以不覺得有什麼稀奇。在臺灣除了一開始貢獻的人數就比較少,二方面是,貢獻者之間的連結似乎沒有像在歐洲那麼強,很容易只知道自己的專案,不知道有其他人在寫、在寫些什麼,所以感覺上自由軟體貢獻者更少了。而自由軟體貢獻者在臺灣的稀少性,更強化了「貢獻自由軟體的人都很厲害」、「要很厲害的人才能貢獻自由軟體」的想法,無形中產生了心理上的門檻。

——

我也是那種新奇想法很多,但是很少堅持到底完成一個專案的人。我的興趣變的太快,幾乎每一天都在變,今天想 hack 某個專案,明天想讀另一個專案的程式碼,後天想研究什麼東西的架構。更別說每個禮拜還會突然發現某個功能很重要,為什麼沒有,甚至在洗澡的時候冒出超酷炫新專案的構想。構想的實現速度永遠比不上增加的速度還有在不同計劃之間 context switch 的時間。

計劃這麼多,卻因為自己似乎對什麼都有興趣,什麼都想學,反而沒什麼實際產出。這個問題苦惱了我很久,直到鳳梨酥計劃開始之後我才發現解法就是找人一起來。

鳳梨酥計劃的開始,還有高中的時候和同學整個暑假開發學校網站的經驗很類似。鳳梨酥計劃一開始只不過是因為我們都覺得在 OpenStack 上面跑 FreeBSD 很麻煩,於是隨口在社辦約了黑客松,另一個人看到我們的黑客松也說要加入,就形成了這樣的三人團隊。裡面正好我搞 OpenStack ,負責手動測試我們的 code ,Iblis 寫骯髒的 shell command ,Apua 寫 Python 。我們只花了大概三四次黑客松就把最基本的功能完成。每一次黑客松都很開心,大家遇到哪裡卡住馬上可以問另一個人,馬上測試也可以讓寫 code 的人有馬上的回饋,然後最後大家再說說笑笑去吃宵夜。高中的時候則是,我記得整個暑假我們不是泡在社辦(還用櫃子在角落隔出一個空間,裡面鋪上學校新採購電腦主機的大片包裝用塑膠軟墊,讓我躲在裡面睡午覺),就是整天掛在 Skype 上面 cowork 。

有朋友一起寫程式,不只是比較好玩、有人可以討論,對於我這樣三分鐘熱度每天轉移焦點的人,為了不和朋友失約,可以約束自己專注在一個專案比較久而不會分心去玩其他東西。

所以從這兩次的經驗,我瞭解到要做長久的專案,一定要找到志同道合的朋友。

——

既然如此,下一步很簡單,我就想辦法找人一起寫我覺得很有趣的專案就好了,一開始我一廂情願地覺得我只要跟他們解釋這個專案的願景,還有我發現他們現在沒有的功能、可以從哪裡參考類似的實作、有了這個功能之後世界是多麼美好,就可以說服他們一起來跟我寫 code 。——顯然我錯了,出乎當時的我的意料之外,我講的幾乎每一個構想,朋友們聽了之後的回應大多都是「哦,我覺得還好啊」。

這時候我才意識到,即使同為程式設計師,人之間的興趣還是有如此鴻溝般的差異。

也差不多是同個時期,我正在為自己維護的開源專案感到心煩,一個承諾已久的重大功能。雖說是重大功能,實在提不起動力實作,不是因為難度太高,而是因為完全沒有技術創新性,總覺得不過就是 API 接一接這樣簡單的事情。這樣一拖就拖了兩年了, ownCloud 都裂成兩半變成 Nextcloud 了。

我想到,有這麼多人想要踏入開源軟體的開發,也有許多開發者因為必須要開發那些不算是重複但是技術不有趣的必要功能感到厭煩(像我一樣),這兩者是不是可以結合,讓這些原本的維護者懶得寫的 code 作為新進開發者熟悉專案的練習?

這就是程式路跑活動的初步想像。

——

我和子期也開始進行很多討論,尤其是:我們到底要找哪一些專案的導師來?

一開始的想法很模糊,大概是「不要找那些商業型的開源專案」,有很多公司將專案開源只是為了行銷並且獲得免費的開發人力,舉個最極端的例子就是 MIUI ,早期很熱門的 Android 第三方韌體,一開始是開源的,因為漂亮的界面吸引了很多人,開發者免費幫他們把 ROM 移植到不同裝置上面,使用者則是開開心心地體驗了小米公司的軟體,順便幫忙推廣給親友。後來知名度高了,小米公司就拋棄開源的 MIUI 維護,不再釋出新版 MIUI 的源碼。高明的行銷。(順帶一提,我感覺以後 Deepin Linux 也會這樣,中國沒有什麼軟體公司真的有社群精神或是社會責任的,一切以賺錢為優先,大概是競爭激烈的文化氛圍所造就的吧)

另一種商業型的開源專案則像是 OpenStack ,OpenStack 能夠維持開源同時維持熱門,主要的原因就只是對於這些參與 OpenStack 開發的公司來說,開源是能夠創造最大利益的選項,雖然無法排除競爭者從原始碼得利,但大家一起合作寫 code ,這些比較小的公司也才有機會和大型競爭對手 VMWare 甚至是 AWS 競爭,他們可以基於這個共同的開源平臺開發專屬的、不開源的武器,因為只要是相容於 OpenStack 的就可以使用,拉近了這些小公司和大型競爭對手的距離,然後再用專屬的武器突圍。

OpenStack 這樣的專案絕對堪稱是開源軟體的典範——但我們還是不希望程式路跑納入 OpenStack ,原因是一般的個人使用者幾乎不可能會直接用到 OpenStack ,而既然程式路跑以純粹個人的背景出發,我們考量的也是廣大個人用戶的利益,引用自活動的 FAQ:

有許多 FOSS 軟體背後有企業支持,如 OpenStack, Tensorflow ,有企業支援,這些專案要找到貢獻者相對容易,相對來說有許多得不到企業支持的 FOSS 軟體,只能靠現有貢獻者的熱情,甚至捐獻金錢才得以繼續,身為一個保持自由開源理念、駭客精神的個人,我們(主辦人)想要將我們的一己之力集中在沒有企業支持的 FOSS 軟體。

這樣的選擇,也是出自於一個疑問:臺灣這麼多 Linux/FreeBSD 桌面環境的使用者,其中有不少具有相當的程式能力,為什麼一些重要的桌面環境開源專案,像是 GNOME, KDE, ibus-chewing, Firefox 的臺灣開發者還是這麼少?(甚至是 bug report 來自臺灣的都很少?)

選擇開源桌面環境的使用者,我想或多或少都抱持一點理想性,認為自由軟體才能帶來使用資訊科技時真正的自由。而這點理想性,是我們以學生、年輕人,還不必負擔太多社會現實的身份負擔得起的,所以我們花時間精力舉辦的程式路跑,希望集中力量在這樣的自由軟體上面。

——

這個活動非常高興能夠獲得各方支持,尤其是幾位導師,Tim, Weicheng, 呂行, Mark, Acelan, Franklin, 4$ ,幾乎什麼都沒有問的馬上就答應支持,中華民國自由軟體協會慷慨的經費贊助,還有師大資訊社阿哲幫我們弄到場地。

我覺得活動算是蠻順利,結果也很成功,大家都有作出貢獻,幾個 bug report, patch 。也真的有產生出我想要的那個氛圍——坐在教室,真的有那麼一刻,我以為我回到 ownCloud 黑客松那時候柏林工業大學的教室裡面,大家吃東西討論 code ,很歡樂的黑客松的感覺。

希望真的有幫到臺灣的自由軟體和開發者就是。

(跳過八月的文章沒寫這次居然寫了三千多字,就當作是補償吧,發了之後 WordPress 告訴我這是這個部落格第兩百篇文章啦,真是值得慶祝)

來自另一個演化樹的 Grand Central Dispatch

前幾天讀了 Evan Miller 的 Four Days of Go ,裡面有一段提到 libdispatch ,就研究了一下。

每次發現 XNU, BSD, Solaris, Illumos 這些比較不一樣的 UNIX 有神奇的功能的時候就如同發現尼安德塔人的存在,還有他們某方面還比我們先進一樣。又像是重新發現亞特蘭提斯,是如此的先進,但卻不為多數人所知、所用。

感覺很酷炫,因為有共同的基底,類似的環境,發展出的科技卻截然不同,就像另一個演化樹一樣,也就是為什麼我說像尼安德塔人。

不禁想,既然有同個基底,移植過來,整合進大家常用的版本裡面,就技術大躍進了啊。

像是取得外星科技一樣,但外星科技意外地跟我們使用同一個基底,所以很快就可以移植過來。

鳳梨酥計劃:FreeBSD on OpenStack

最近都在交大計中內玩 OpenStack 相關的事情。

FreeBSD 是我架伺服器的首選,令人意外的是要在 OpenStack 上面跑 FreeBSD 到現在依然都還沒有很好的方案…

CNMC 和交大計中都大量使用 FreeBSD ,同時我們也在研究 OpenStack ,在 OpenStack 上跑 FreeBSD 能提供我們很多好處。同時,身為 FreeBSD 的使用者和支持者,當然希望更多人來使用,也擔心現在很多的使用狀況都是在 VM 裡頭,如果 FreeBSD 沒辦法在雲端環境下運行,就是多了使用上的限制,不利於 FreeBSD 的普及。

因此我,Iblis 和 Apua ,決定開始計劃來讓 FreeBSD 像各種 Linux 一樣在 OpenStack 環境下輕鬆順利的部署和運行。我們將計劃命名為鳳梨酥計劃!(這個名字讓我們笑了很久,會取這個名字是因為使用來自台灣的東西更可以凸顯這個計劃的發源)

鳳梨酥計劃基本上就是給 FreeBSD 用的 cloudinit

計劃分為兩大部分。一為 instance 的開機腳本,會在開機時讀取 OpenStack 的各種環境變數並依照環境變數來設定 instance ,這部分稱為 bsd-cloudinit ,做的事情和 Linux 上面的 cloudinit 相近。第二部分為 VM template 化腳本,在建立 template 的時候使用,負責移除 VM 的各種特徵,如 SSH host key ,以免屆時開新 instance 的時候 VM 的特徵重複。除此之外還要負責安裝 bsd-cloudinit ,我們將第二部分稱為 bsd-cloudinit-installer

命名

會開始做這件事情是想說,這件事情應該很簡單,但是卻沒有人做(我也很納悶為什麼沒有人做)。在 FreeBSD 上面做各類的系統管理只要用 CLI 就可以完成,我們要做的事情只是把外面的資訊拉進來,和這些動作黏在一起,就做完了。

剛開始我們就確立了一個方向,就是不要管 code 有多髒,能動就好。後來覺得這真的是正確的決定。由於不管架構、維護性等問題,我們很快就做出基本的功能。快速做出基本功能有一個重要的好處就是可以迅速獲得進度的回饋(你看,我們這麼快就做出這個功能了!),有進度就產生成就感,成就感對於計劃的繼續進行我認為很重要。要是我們顧慮很多,拖了很久還做不出第一個功能,因為沒有明顯的進度,心理上就很難產生成就感,很可能連第一個功能都沒做出來就不想做了。

計劃的命名也讓我們想了很久和笑了很久,剛開始我們提了一堆希臘神明之類的名字(因為拼起來很酷XD)。可是其實我一直覺得開源計劃的名稱應該要達到幾個目的:能夠顯示計劃的緣起、計劃的功能、好念、好記,再來還要看起來很酷很先進。

計劃剛開始我只有找 Iblis ,那天我給 Iblis 做 OpenStack 架構的簡報,Apua 走進來問我們要幹嘛,我就簡單講了一下然後附帶問了一句「要不要加入」,然後 Apua 就加入計劃了www

第一天我們就開始想名稱了哈哈,剛開始想了一堆希臘神明的名字,那天我剛好有帶鳳梨酥當點心,靈機一動就提出用鳳梨酥當名字XDD

鳳梨酥這名字超棒,首先,它顯示了我們的起源——台灣,只有台灣有這種點心。再來,它好念而且念起來很酷(對於不會中文的人而言),想像一個老外說 “feng li su" 的聲音XD

但是為了顯示計劃目標,我們還是再加了一個附標題:bsd-cloudinit

開發過程

幾乎都是以半 hackathon 的方式進行的,我們大概花掉幾個週末和平日晚上吧。

Iblis 負責用各種骯髒的方法用 shell script 實作各種動作,因為我們兩個都不會寫 Python ,Apua 提供 Python 支援,幫我了解 cloudbase-init 的架構,我比較了解 OpenStack 和 cloudinit 的架構,所以我要提供其他人方向,還有架構用以前弄好的 OpenStack 提供測試環境,還有負責 build template 、寫文件、去 mailing list 宣傳什麼的。

我們三人的領域都不太相同,但都互相稍微了解對方的領域。合作起來很愉快的一點就是一旦遇到問題就可以互相回答,像是不確定要用哪種實作的時候馬上就有人可以討論、分析和決定。不像我常常自己寫程式寫到一半沒辦法決定 implementation 就整個卡在那邊猶豫很久,要是猶豫太久就會開始打混了XD

成果

我們的計劃被加進 OpenStack Image Guide 了!超爽

下一步

最大的重點就是把 cloudconfig 的功能加進去,這樣才是真的自動化啊。

還有很多很髒的的地方要稍微修一修⋯⋯

鳳梨酥計劃主網站及說明文件

回顧各種關於線代用途的評論

本文原本是對於金國興教授對於我在交大資工的心得的回覆的回覆,但我覺得直接回覆他好像是在針對他,這些話應該是針對那些告訴我線代有何用途的教授,那些回覆我線代用途的人如果不是教授也值得一看本文。

這篇大概才是我寫那篇心得所希望帶來的改變,我希望帶來改變而不是得到一堆「線代很有用」、「線代有某種用途」的評論。心得沒有導致教授們理解到這些我所希望的改變是因爲,那篇我本來就不是寫給教授而是自己看的,打算帶進主觀情緒來寫,也沒有料到會有這麼多教授來回覆我。

—–

謝謝您又提供了另一種線代的應用。

不過很多人在我的 blog 做的也只不過是這樣,我期待的是教授們看到這篇文章,把它轉給其他的教授,慫恿教授們改變教學方式。

也就是說,爲什麼您做的事情是花時間在這個 blog 上面留言,而不是去跟其他教授(甚至反省自己)說,我們的教學方式有問題?以我看來第二種做法能帶來更大的效益。(當然兩種都做更好)

這篇文章(心得)的目的不是要讓教授們來回我,告訴我線代可以做什麼,而是希望系上的課程能夠有所改善,教授們能夠有所改進。

這邊的各種關於線性代數應用的評論,比起我在線性代數課程中學到的有價值多了,可是爲什麼不是在課程當中就提到這些東西?這樣我還可以省下寫文章的時間。

我在線性代數課程學到的是什麼?教授跟我們說怎麼做計算、介紹我們瞭解線性代數各種名詞的定義與概念,但是這些東西有什麼是我不能從 Khan Academy 學到,甚至是自己看書就能理解的嗎?

可是線性代數的各種應用,是 Khan Academy 不會提到的,曾經需要利用線性代數解決問題的人,才會有這些觀念、方法是如何實際應用的經驗,這也才是我在大學所期望學到的。

如果你說,這些東西不應該是由大學來教,那大學的線性代數課程應該要學什麼?我真的不知道答案,我進來大學也不過1年,如果您願意希望您講一下您覺得大學應該是要教些什麼、學些什麼。

如果你說,這些東西不應該是由大學來教,是我抱持錯誤的期待,那教授們是不是應該去想辦法瞭解,學生對於大學究竟有什麼期待?然後試着去滿足我們的期待?因爲在這個教育體制下,大學是我們這種 PR 90 ,或許70 ,以上的學生唯一的選擇。學生被家長鉗制,我們無法改變什麼。但是您是教授,雖然我也猜到教授會受到各種制度、經費、上級、升等壓力的鉗制,但是教授擁有的影響力依舊比學生多太多了,何不利用您的影響力幫助學生一下?

我並不是說教授和學校必須完全符合學生的期待,我是說師生之間值得溝通,我和幾位教授聊過,我認爲教授們對於學生、大學的目的等等的期待,與我們學生有頗爲嚴重的落差。但我也瞭解現在大部分學生不喜歡向教授表達意見,很多人都有所意見,但是見到教授時,往往又選擇保持沉默。對於我這種樂於表達意見的學生,某教授也對我說過,我一個人無法表示多數,多數人的沉默讓上級無法有所改變,因爲通常沉默就表示沒有不滿,不需有所改變。

我表達意見時,時常遭遇到的困難是,很多時候教授沒有真正認真理解我的目的、我的訴求,時常帶着開導的心態來回應。開導的人並不認真思考、瞭解這些抱怨背後的原因,而是覺得「你還年輕、你之後就會瞭解」、「我有經驗,這些經驗可以幫助你」,並努力說服被開導的人不要抱怨、認真培養實力、以我的經驗爲指標等等,開導的人沒有不好,只是這並不是我表達意見的目的,也不是我想聽到的回覆。

如果教授真的想要幫我,幫學生,去聽聽看別的老師的線代課,甚至別的課吧,想想我爲什麼對於線代課會有這樣的評論。

如果您真的去聽了別的老師的課,那我在此致上敬意,並懇請您與我分享看法。

服務學習教授訪談心得

總之因爲服務學習神奇複雜的原因,所以我們這組要去跟教授訪談(並記錄、寫報告)。今天訪問的教授是我上學期的線性代數的教授。

這篇的重點是訪談的問題之外的談話。

訪談的問題結束之後,教授開始跟我們閒聊,他提到我上學期問他「爲什麼要學線性代數」的 email ,他說的大概是:「我看到這個問題就很興奮,這個問題非常有破壞性,首先你有提出你的想法,然後再問我的想法。能夠提出你的想法表示你有思考過這個問題。但是我身爲大學教授當然不能像國中老師一樣直接給你答案,我只能指引你方向。我後來期待我們會有後續的對話,但是很可惜並沒有。」我也老實的告訴他,我沒有再回他的原因是我對他的回覆非常不滿意,我決定不再問教授,我要自己找答案。

他也提到他第二次對我產生深刻印象的事件。從學期中後我上他的課幾乎都是帶着耳塞坐在最後一排自己試着讀懂線性代數的教科書,有一次他下課經過我旁邊突然問我耳朵上的是什麼東西,我跟他說是耳塞,他問爲什麼要戴耳塞,我當時差不多是這樣跟他說的:「我覺得你上的東西我都聽不懂,還倒不如自己讀。」這句話隱含着我想要表達的含義是:「我覺得你教的很爛。」當時內心帶着點憤怒這樣跟他說。拉回訪談當下,教授又問我:「那你爲什麼還要出席?不在宿舍讀就好?」我也誠實的回答了他:「我怕你會點名,以防萬一。」我也跟他坦誠,自己讀的效果也並沒有好到哪裏去,跟聽他上課一樣會睡掉一半,大概是翻1頁就會睡半個小時。還好最後有 Khan Academy 救我,雖然沒有救到考試成績,但至少我對線代有最基本一點點的瞭解了。

這次的訪談是我在前2週的導師時間詢問他的。他說當時要是問他的不是我,他也不會那麼輕易的答應。

我自己是很高興教授對我印象這麼深刻啦,這樣要拜託教授幫什麼忙的時候比較容易。

從教授的各種說法看來,我發現教授對於大多數的學生,太過於理想化(高估)他們的學習興趣和動機。在我看來一些人是直接把大學當高中念的,意思是說,學校、教授、家長告訴他們要念什麼、什麼是必修科目,他們就去修這樣,這些人恐怕也就是考試過了、作業交了即作罷,然後出去莫名其妙的當個工程師或是賣雞排這樣。這是他們自己的選擇,不是不好,只是我並不欣賞這樣的選擇,我自己也絕不會做這樣的選擇。但是教授似乎都認爲,會來修這門課的,一定是瞭解這門課的大綱、修課的原因與目的,或是有興趣的。教授似乎並不瞭解這些人的想法,但也是情有可原。

我有點不滿,爲什麼我問教授「爲什麼要讀線代」這個問題的時候,他要我自己找答案;但在線性代數的課程上,卻不斷的用作業、考試塞給學生一題又一題的答案?教授或許是認爲,來修線性代數的學生都已經瞭解自己爲什麼要修線性代數了(除了「線性代數是大一上必修」這個原因),會主動問他這個問題的人想必是不知道答案,需要指引,所以纔會這樣給我指引。而若沒有問問題的人,就通通當作沒有問題。理想狀況下(學生已經瞭解爲什麼要修線性代數),這樣操作確實是很好,但是現實狀況並非如此,教授這麼做也昧於現實。

但又想想,如果第一堂課就花時間簡介線性代數、說明爲什麼要學線性代數、又爲什麼要當作必修,對於那些從來就不打算瞭解「爲什麼要學線性代數」的人來說,大概也不能造成什麼差別。

昨日導師時間之所得

說明:導師時間乃交大近年的新政策,據說原始目的是希望讓老師多多關懷、瞭解、輔導學生。在資工系的實施狀況爲導師時間看不到導師,又名「浪費你時間」,大致上有3種實施方式,第一種爲強迫學生參加某些學校舉辦的演講,第二種爲資工系自己找講者(通常是學長姐)進行經驗分享,第三種爲實質的浪費時間,通常出現在學期初,內容爲說明導師時間的點名方式、重複新生訓練的內容,或是交換學生的廣告。三者均通常爲時2節課(約2小時),均需繳交演講摘要報告,作爲點名用途。謝天謝地我這屆到了大二應該就不再有導師時間。

昨天導師時間的經驗分享由2爲交大學長進行,其中一位是轉入資工系,另一位是轉出。基於學校(系辦)強迫學生參加導師時間的不尊重的反抗心理,當時我正在試着讀懂 ownCloud 一部分的 code ,因此並未專心聽,然經驗分享的片段依舊讓我產生了一些看法與感觸。

第一位是從外系轉入資工系的學長,從分享的內容,以及上次導師時間經驗分享的內容,可以感受到學長們(或是老師、系辦)想要讓大家瞭解的核心理念:「就算你不會寫 code ,對電腦一點興趣也沒有,只要你認真堅持下去念,一樣可以在資工系得到好成績。然後升上研究所或是去工作。」這在我看來極爲諷刺,讓我點評一句:「就像高中一樣。

「我高中的時候,根本不知道 code 是什麼,考大學的時候,成績剛好有到資工系,想說資工系好像不錯,未來比較不會失業blablabla,然後就進了交大資工了。」

「遇到室友,平時打 LOL ,趁遊戲載入的時間,隨便去寫幾行 code ,然後就100分。我絞盡腦汁,最後只交得出20分的屍體。」

「但是我沒有放棄,雖然沒有很喜歡寫程式,但是也不排斥。我認真研讀程式書,後來漸漸感覺到自己的進步,雖然沒辦法拿100分。其他科目也是,我堅持下去認真讀,雖然沒有第一名,但還是拿了個中間的成績。blablabla」

跟高中比較一下:

「考高中的時候,成績剛好有到XX高中,想說XX高中好像不錯,升學率也不錯,然後就進了XX高中。」

「遇到同學,平時上課睡覺 ,補習班翹掉,結果段考還班排2,我補了這麼多科,最後班排不過20。」

「但是我沒有放棄,我認真準備各個科目,問補習班老師各種問題,後來漸漸感覺到自己的進步,雖然沒辦法拿100分,但還是拿了個中間的成績。blablabla」

當然不是每個人都是這樣,這樣也沒有錯(可能錯在家長就是)。

雖然沒有很喜歡XXX,但是也不排斥,爸媽/同學/老師/新聞說XXX不錯,於是我就去做了」,我不喜歡這種態度,這跟隨便選一個不是一樣嗎?這是基於我沒有辦法理解、體會那種「什麼都不排斥,也沒有明顯興趣」的人的想法。在我看來應該做的事情是去做那件最喜歡、最有興趣的事情,就算比起其他東西,沒有多喜歡多少。如果真的找不到最喜歡的是什麼,那上面那種隨便選的方法似乎也是唯一能採用的。

但反過來說,隨便選、什麼都好像喜歡、什麼都不排斥這樣似乎也不錯,別人強迫你做這些事情的時候大概也不會太痛苦。這似乎是針對臺灣的環境(升學主義、考試、強制讀書、大家都讀大學)所演化出來的態度,這個環境中能改變、能選擇的機會比較少,被(半)強迫的機會還是頗多,如此的態度讓人面對衆多無可奈何時不會太痛苦,可以活得下去(雖然在相反想法的人看來這不過是行屍走肉)。

另一點我不認同的在於,那個室友,你不應該覺得你追不上他的程度。真正的全能天才很少,這種專精於某方面的天才,他想必是付出了代價,才能做到這種程度。換句話說,我覺得應該要這麼想,我也會這麼想:「若是我下工夫(付出代價)一定也能和你一樣強。」但是是否要付出這個代價換取這樣東西的決定權是在我,我當初只是沒有做和你一樣的選擇。就算你覺得你追得上他的程度,我也不認爲「讀書」是追上他的方式。能做到這種程度的人,確實有很高的機會是苦讀、努力研究而得來的,但是在苦讀和努力研究背後絕對有強大的夢想、興趣在支撐。我認爲可以做的是去體會他爲什麼對這件事情有這麼大的興趣,甚至進一步去自己培養這個興趣,或許你後來也會在這件事情找到樂趣。

第二位學長的主軸其實也接近上面所講的核心理念。但是他最後播了一部 MV ,我看了很感動。

https://www.youtube.com/watch?v=mqlZVBcs1Wg

「我不想只是當齒輪而已啊!!」

在交大資工一個學期的觀察與心得

小提示:如果你是高中生,可以先看給高中生的大學選校系建議

前言(寫於2013九月)

實在是太多人在下面留言告訴我線性代數到底有什麼用了,看到這麼多相似的留言我已經有點膩了。我寫這篇的目的也不是想要知道線性代數的用途。

這篇文章似乎很容易讓人抓錯重點,這篇本來只是寫給自己看的,我也沒料到會在搜尋引擎衝到那麼前面。不過我不打算因爲流量衝高就去修改內文以澄清我的重點。

有一位朋友私底下和我說(在文章發佈很久以後),這不過就是我來錯地方了,這地方的風氣不適合我,我覺得大概就是這樣吧。

可以這麼說,我來到(交通)大學,然後發現這個地方和自己先前所想的不一樣,於是寫了這篇描述我原本的預期或是理想。就風氣這方面來說,選大學是場賭博,因爲要進來之後才能體會這究竟是不是對的地方。

我大致上不喜歡這個地方,但我也發現這個地方爲我所提供的也並不是完全沒用,也不盡是壞處。並且,這些壞處不值得我再去賭一次,意思是我會繼續待在這裏。只是我發現的這些好處和待下來的理由,和我原本的預期、一般學生的理由、教授認爲讀大學的理由已經不一樣了。也沒關係,就各取所需就好了吧。

正文

在交大也一個學期了。寒假聚餐時聽臺大資工的同學談臺大的情形,也有點感覺到兩個學校不同的…應該說中心思想吧。

必須承認,我非常笨的以為到了大學就可以做自己喜歡的研究,自己學想學的東西,但這兩件事情其實在交大受到了嚴重的阻礙。

從小學還算愉快,到國中悲慘的3年,再到附中…我大概是從國中就對電腦產生濃厚的興趣,到了附中加入網管之後才篤定要將電腦作為我一生的職志,不管做什麼工作,反正大概就是與電腦相關。所以從上高中開始我讀書的主要目的就漸漸變成「拿到不會太爛的成績」,然後把其他時間拿去玩電腦(主要啦,社交活動、打遊戲的時間老實說也不少)。那時候生活的主要目標就是電腦、社團,讀書從來不是目標,讀書只不過是為了達到目標而必須克服的障礙。考大學呢?考大學在我當初以為,也是一個阻礙,讓自己有更多自由時間的阻礙,為了讓自己未來有更多自由時間,我犧牲考大學時的自由時間。

進了交大才知道,交大比起附中並不會讓我有更多時間,反之在交大,取得自由時間的阻礙更大了,意味著我必須花更多的時間才能克服這個阻礙。

我不知道該說我笨、天真,還是我從小學到高中都是被制度、家長、老師騙著長大的,被騙著以為大學就可以做自己喜歡的研究、自己學想學的東西(理想中是由我自己訂想學什麼,然後自己找資料學習,遇到瓶頸問教授,研究完成之後交報告,沒有考試)。不管是哪種,到了交大,一廂情願以為從此可以自己學習(或至少更接近自己學習)的理想正式破滅。

大一上我覺得我90%的心力都在對付線性代數與微積分,尤其是線性代數。線性代數的抽象讓我難以理解,每每遇到瓶頸,我又會開始思考究竟為什麼要讀線代,我問了老師,「為什麼我們要讀線代?」,老師回答的還是老生常談 google 一下或是看維基百科就可以得到的答案:「線代在圖形處理、訊號處理等方面非常有用 blablabla」。這我也知道啊, but shut up and show me the code ,哪個計劃、哪隻程式使用線性代數解決了什麼問題,這活生生的例子才是我想知道的,我想知道線代究竟實際上可以幹嘛,而且我要看到原始碼。但是畢竟是我一開始沒有講清楚我要的是什麼樣的答案(第一次問問題就這麼直接的問如此特定的問題,還要求教授舉例,這似乎也有點咄咄逼人,不太禮貌。這是兩難。),教授自然也不太可能給我我想要的答案。得到這個完全沒用(google 都知道)不滿意的答案之後,再加上我作業已經好幾次沒交(此教授的作業幾乎都是是該章節課本習題全部),上課一直睡著(不是故意的,是因為聽不懂…),小考成績很差,我也不好意思再回教授說:「這不是我要的答案」。我不希望讓他覺得說這學生自己不唸書、態度不佳還來問我這種問題,要我給答案。這不知道為什麼而學的感覺讓我格外痛苦,一方面我覺得到了大學不應該再是家長老師告訴我們要學什麼就學什麼,一方面那時我還有自己程式的計劃進行中(這計劃完成之後說不定可以賺錢),不能把時間分配給有用(能賺錢)又有趣的事情而要費心讀一個教授說很有用但我卻找不出到底有用在哪裡的科目。

當初,在我心目中的排名,交大資工是比臺大資工還要好的選擇,想要進來交大資工的原因很大一部分是因為我覺得我在交大資工比較有機會遇到真正對電腦有興趣的人,而不是那些因為資訊奧林匹亞保送進大學的人,我覺得資訊奧林匹亞的某一些人,他們「數學很好」、「對數學有興趣」,但是他們有興趣的是數學,不是電腦。我想遇到的是對電腦有興趣的人。

題外抱怨一下,我覺得資訊奧林匹亞沒資格稱作「資訊」奧林匹亞,「演算法奧林匹亞」才是比較符合事實的名稱。

確實,我在交大資工遇到不少真的對電腦很有興趣的人,這些人有一些以前也有自己努力研究過電腦的東西,具備實力。但我看到一些人不是在(試圖)發揮/提升自己的實力,打造自己的 project 之類的,而是為了應付各種的作業、考試而忙得不可開交。或許他們單純是被課業壓住,或許他們覺得學校的課程是提升實力比較好的方法,但我認為接 case 、做 project 這是比較好的方法。更何況我覺得做 project (不管後來是為了要創業,或是單純 opensource 出來)是對這世界比較負責任、有貢獻的做法。電腦、網路給了人類很大的力量,對於這些實力已經足夠改變世界(就算是一點點)的人來說,為什麼不是去思考如何讓這世界(或者狹窄一點,臺灣社會)更好,而去花時間做好考試、作業?身為臺灣頂尖的交通大學資工系學生,又正處於人生最有創造力的幾年,為何要選這麼多課,花時間學這麼多東西,而不是利用這種優勢去改變世界、回饋世界?

對於那些單純想要在學術界鑽研的人,他大概也覺得沒什麼關係吧。我是比較喜歡關心社會罷了。

希望臺灣能再有多一點人致力於改善臺灣。

上面講的改變世界,或許有人看了會覺得我太理想化,當然有些人會是比較顧慮現實面。我所抱持的理念是:「只有那些笨到以為自己可以改變世界的人,才能真的改變世界」至少在我還相信這一套的時候,在我未來或許被現實逼得無法再相信這一套之前,我還是要為這世界、為我所相信的東西做一點事情。

即使我能做的不過是送個 bug report , 翻譯一些自由軟體,轉貼、瞭解、思考反媒體壟斷、關廠工人的議題。

聽臺大資工的朋友說,最近接了什麼 case 、有學長姐回來找人做 part-time ,我覺得很羨慕。交大在這方面的機會比較少,比較需要靠自己爭取。以臺大、清大、交大來說,我看來交大的創業風氣是三校當中稍弱的。臺大有創意創業學程,這可能不代表創業風氣,但至少表示校方有著墨在這塊。聽臺大的同學說很多回來找 part-time 人員的都是學長姐開的公司。清大和交大的一些學生有(應該算是)合辦 AppUniverz 。我比較有明顯的感覺臺大的創業風氣比交大盛行,清大的情形我就不清楚了。

我有去過交大創業俱樂部(非正式學生社團)的聚會,跟裡面的人聊天之後發現,大部分的人都有想過要創業或是做 project ,只是顧慮到課業上的壓力、自己的能力、創業的機會,大多都沒有著手實現。創業俱樂部以外,我也聽到一些學長在討論創業或是 project 的構想,並且有幸認識一位學長做了很多有趣的計劃,其中很多都 opensource 出來了。

想想自己,在交大的這一個學期當中,也有很多需要反省改進的。時間的利用上我做的特別糟,作業幾乎都是前1、2天才開始趕工,禮拜四下午的作業交出去之後的這段時間最頹廢,因為到了禮拜五下午才需要再去上課,就會覺得自己時間好像很多,於是就開始看電影、聽音樂、打遊戲之類,有時候做的事情更少,因為線代遭遇到重大挫折然後就開始思考究竟為什麼要讀線代、為什麼要讀大學,想了很久總是得不到答案,陷入憂鬱狀態地做什麼事都提不起勁,不想洗衣服、不想洗澡,什麼事都不想做,就只是坐在椅子上逃避、拖延,然後整個禮拜四就耗掉了。睡眠時間也比高中時長多了,不是每天都需要6點起床,睡眠也就睡得很不規律。躺在床上的時間8、9個小時,其中睡不著,或是醒了但是賴床的時間就佔了1、2小時。

高三時喜歡交大資工有很大一部分的原因是 CCCA ,交大網路策進會,雖然它倒了,但是我那時候想說繼任的 NBA 應該會有類似的性質、環境。為什麼會喜歡 CCCA ?因為我在附中網管 CNMC 受到很大的啓發、學到很多東西和經驗,附中資訊中心給 CNMC 的權限和資源相當大,這是超級難能可貴的。我期待到了規模更大的交通大學,我可以在 CCCA (NBA) 學習到更多專業知識和難得的網管實務經驗。

後來發現 NBA 和交大校計中的實際狀況和我想的真的是天差地遠,NBA 的資源(設備、經費、權限)與 CNMC 相比少得可憐。NBA 根本不是 CCCA 的繼任者,而是完全被砍掉重練,而且校計中以我看來也沒有想要「重練」它的意思,完全就要靠社員自己。社團內部的課程也都還沒有上軌道,以我看來社團的宗旨也還不夠明確。

我也在 NBA 開一些課,希望哪天計中看到我們的實力能夠給我們更多的機會和資源。雖然這幾堂課我自認都還頗認真準備,但是整體的課程來說,我對自己也不甚滿意,這幾堂課(好像3堂吧)只能讓聽衆學到零碎的知識,缺乏整體的認識。因為我自己時間上的限制,沒有辦法每週開課,我覺得教學的效果頗為有限。就連 CNMC 完整2學期+寒暑假的課程我都覺得稍嫌不足了,何況是這短短3堂課。

光是關於 CNMC 、CCCA 、NBA 、兩校計中的環境,這就可以寫一整篇了……

隔週週一晚上的 PyHUG (Python Hsinchu User Group) 是我一整個禮拜最快樂的一段時間(另一段快樂的時間是週二的神經科學導論),雖然老實說,我從來沒有寫過 Python ,短期之內也不打算學(因為沒有需要),PyHUG 講題我也很多聽不懂。快樂的地方在於可以互相技術上的交流、瞭解老師、同學之外的人的生活、價值觀。我在 PyHUG 聽到許多新技術和工具,像是 Scrapy 拿來做 crawler 看起來頗方便、RabbitMQ 的用途還有某公司究竟是如何使用 RabbitMQ 等等,雖然我短期之內可能用不到,不過我至少知道了新工具、新方法,未來遇到問題的時候用這些工具解決起來應該會比較輕鬆。光是認識這些人,跟他們聊天,其實就很開心,跟他們講我最近在玩什麼,比起同學他們會比較聽得懂。

至於神經科學導論,喜歡這門課的原因很大一部分是因為我真的有興趣,教授的教法也適合我,最後我覺得我整學期學到最多的也是這門課。現在想想,「有興趣」和「教授方法」對「會不會學到東西」有重大的影響。我對線代完全沒興趣,再加上不適應教授的教法,導致線代最後應該是教授幫我加到60分我才過的,老實說我自己覺得我也並未瞭解線代、觸碰其核心想法,根本不具備通過這門課的資格。我對微積分起先沒興趣,幾堂課之後逐漸熟悉教授的教學方法,剛好跟高中三年的數學老師很類似,後來有感受到一點微積分的微妙與有趣,興趣漸漸提高(感謝這位教授)。另一堂法學緒論是原本自己有興趣,結果選到的教授卻只會照講義念,學到的也不過是民法和刑法上的各種名詞、概念,大部分與高中公民重疊。

從學期中開始,我有越來越強烈的想法開始覺得,很多的東西都可以自己靠網路學了。記得神經科學導論的教授剛開學的時候提到,這門課不需要買任何書籍,如果想要複習的話,可以去看投影片和維基百科。我去讀了維基百科的一些條目,如 Neuron , Brain ,我十分訝異於這些條目的詳細、結構分明與容易理解。看完了 Neuron 一整個條目,我就已經瞭解神經元的運作(瞭解程度差不多剛好到通識課程的難易度與詳細度),而且到了寫文章的這時候,雖然許多細節忘掉了,但是我發現整個大圖像 (Big picture) 還是清楚的,我的整個骨架都還記得(學起來了),就差細節可以隨時再從維基百科填補。維基百科真的幫助我在神經科學學到了不少。

另一個親身經歷又讓我加深了這種看法。線代課程我的進度一直是落後的(因為完全靠自己讀課本),剛開始是一章、然後2章、3章,學期中我意識到如果我再只靠這個方法大概永遠也追不上,我想起先前在網路上看到的 Khan Academy , 它是一個類似開放課程的線上教學網站,我去試聽了一堂線代的影片(很前面的章節),發現我居然聽得懂,於是就再聽第二個影片,也聽得懂,然後幾天之後我已經補完一個章節了(雖然說我依舊是懶得寫習題)。不像真的老師,因為他的課程是影片,所以看不懂的地方可以一看再看,要是不小心睡著了也可以重來,也可以快轉(像是他在計算矩陣相乘時我就可以跳過)。影片的長度7~30分鐘,相對於教授的課程上需要注意力集中50分鐘,要維持30分鐘注意力的集中簡單多了。(因為對線代沒興趣所以注意力沒辦法集中很久……)

網路上的資源這麼多,除了維基百科和 Khan Academy ,全世界很多的大學也都有開放式課程,就算不是 MIT 、哈佛的學生,也可以免費享受他們高品質的課程。我不禁開始想,那讀大學究竟是為了什麼?上大學最主要的目的不就是為了要「學習」嗎?如今這麼多的學習都可以透過網路和圖書館自己完成,那教授為什麼還要教這些我根本就可以自己學的東西?教授還應該繼續教線性代數、微積分嗎?是不是應該去教網路上學不到的東西?(這是以我的觀點來說,我也知道不是每個人都有能力、意願自己學習)

以我看起來,我所修的課,有些取代性非常高(可以輕易的被網路上的東西取代),我不希望我來大學學到的是別人在網路上也可以學到的東西——如果是這樣的話我去網路上學就好了,幹嘛還要來大學。我期待我來大學所學的是網路上所學不到的、只有在大學能夠學到的東西,那麼這些東西是什麼?主要是人,我覺得。教授的經驗、同學、PyHUG 這些!學習人,大概就是去瞭解他們的想法和經驗吧。大學應該提供的是更多這種與人接觸的平臺,而不是更多的必修課啊。

想想上面那一段的論述其實也有點瑕疵,總而言之,我所希望學到的內容是知識性的東西少一些,因為知識比較容易從網路和書上取得,而經驗性的東西多一些。大致上是如此。

更新

以下是對於 Facebook 上面一些留言的回應。

有人提到,要在網路上學到一些文組的科系的內容,還是有些困難。以我目前所看到的,確實如此,不止是很多文組的科系,我看起來目前的狀況來講要在網路上學東西能夠學得最完整的還是資工系的主題居多。對於有些理組科系來講可能也有點困難,像是核工系和建築系,這兩個是比較明顯的例子,但是我的推測是除了資工系的東西可以靠網路,要在網路上學到其他科系的內容都還有一段路要走。

Philip Chen 學長提到:

對於"大學"這個議題可以參考 肯.羅賓森 寫的幾本書
我記得裡面有提到現代的大學體制出現於工業革命之後,現代大學的出現是為了"製造"產業所需要的人才。

所以在苦惱為什麼大學是這樣那樣,而不是我所想要的那樣這樣時,或許可以用這個角度來思考:大學之所以教我們某些東西而不教我們另外一些東西,是因為政府、產業、資方等等認為社會/職場上需要這樣的人。現代的大學在根本上是在服務產業的,所以它不會專注在如何讓學生發展成他自己想要的樣子,它只是很單純的從一個"如何製造出需要的人"的角度去思考。

所以這種教育總是以一個宏觀的角度看事情,它關注的是整個體制裡的多數的人,至於那些非主流(?)、較有獨立思想的人而言,這些人本來就不是主要被關注的對象,所以在這個體制理會覺得格格不入、不適應、感到痛苦都是很自然的。也不是說這樣的體制就是萬惡的根源,因為100%客製化的教育本來就是有困難的。

所以如果發現自己是這類非主流的人,似乎只要能清楚了解上述的邏輯,也清楚體制的設計不適用在自己身上,那麼與其試圖抵抗整個體制,不如就坦然地設法找到一條自己走得通的路就是了。剛好身在現在也很幸運能有open course,讓不適應體制的人能夠獲得更良好的客製化教育。

比較矛盾的是
現在產業在嚷嚷找不到需要的人、學生在學校又覺得學的東西用不到,所以學校該不該直接變成職業訓練所?
但是如果這麼做,又會有新的意見說大學失去原有的意義了。
所以還是回到自己吧,知道自己想成為什麼樣子,然後看看學校裡、學校外有什麼資源就都拿來用吧

大學的兩個目的,「學術研究」與「培養產業所需的人才」有時候是還蠻衝突的吧。每個系在所因爲產業環境的不同,對這兩個目的的努力都會有不同的比例吧,以資工系來說,本來就是比較傾向培養人才這邊。另一件值得思考的事情是,大學究竟應該培養人才到什麼地步,像是該不該教網頁設計、App 創作?還是將這些東西交給電腦補習班,而資工系只負責基礎理論,像是計算機概論、計算機網路概論?

最後謝謝學長的建議,確實還是要靠自己。

更新2

好像蠻多人關心我的線代的,也感謝很多人給了我線代有用的實例,另外也有些人說我在逃避。至少我覺得我自己沒有逃避啦,雖然我線代的進度落後,但是 我還是有試圖修補它啊,我很認真的試著讀懂教科書(雖然效果不彰),還去看了線上課程。這學期的所有課程我也都有通過啊,這樣至少沒有逃避的很嚴重吧?有 位學長說的很好:「要學一個自己不知道要用在哪裡的東西,有點難激起學習動機」、「只知道圖學相關會用到,然後實際情形是如何,上課根本沒提到」。我確實 也有找尋過我的學習動機(線代應用的實例),我最後是在接近期末考的時候找到了。我並不是說線性代數一無是處,我的意思是:若是上課時能夠提到線代應用的 實例,那這門課應該更能夠引發學生的學習動機,學起來應該會更快樂。

最後,我希望讀文章的大家能夠不要一直把焦點放在我的線代上面,也請瞭解一下我其他的觀察和想法啊。