Firefox 57 毀掉分頁群組之後怎麼辦

眾所周知,預計 2017 年 11 月釋出的 Firefox 57 將移除所有舊版附加元件(使用 XUL/XPCOM/Addon SDK 的附加元件)的支援,只支援 WebExtensions 的附加元件。

如此重大的修改將會讓我失去 Firefox 對我來說最重要的分頁群組功能,原本分頁群組功能的開發者 Quicksaver 已經表示不會將原本的 Tab-Groups 插件移植到 WebExtensions API ,等於是宣判了這插件的死刑。

除了分頁群組之外,過去所有使用者熱愛的附加元件都將停止運作,各大討論版上面使用者哀嚎四起,還有 change.org 的連署,可惜沒過。

Mozilla 這個決定蠢斃了:

  • 大部分的使用者不使用附加元件沒錯,但不支援 XUL 附加元件會讓一大群 power user 和死忠粉絲背棄
  • 畢竟 Firefox 雖然比 Chrome 慢,但也只有 Firefox 可以讓你客製化到都認不出來,像我使用的 Firefox-on-OS-X Label 附加元件。 Chrome 你要做這 API ?還要先重新定義一個 Javascript 的界面、新增 API Permission 、一堆重複的工。Firefox?登登!Components.interfaces.nsIMacDockSupport !附加元件直接 tap into 原本就是負責處理這東西的內部界面,不需要重新定義界面巴拉巴拉。附加元件 15 行寫完收工。

好吧抱怨就此結束 :-p 我比較喜歡 Firefox 這樣可以自己自由 mod 的舊架構,而不是開發者爽開給你 API 才能 mod 的新架構。

身為一個分頁群組難民兼任自己要的功能自己寫的開發者,當然想要調查一下有什麼可行的解決方案可以拯救分頁群組功能,我整理出這些方法:

1. build 自己的 firefox fork ,把 legacy extension 直接包進去讓它可以用 legacy API

這會有點麻煩,每次釋出新版的時候要自己 patch 加入想要的 extension ,每個人想要的 extension 可能也不一樣,但這是保留原汁原味 legacy extension 唯二的方法。

挖了一下 Firefox 的 source code,原本內建在 Firefox 的 Panorama (就是分頁群組功能)在 codebase 裡面的這裡(應該是啦我有點不確定):mozilla-esr38/browser/components/tabview ,後來 tabview 被獨立出去成為 tabgroups extension ,所以理論上我只要把這個過程逆向操作,我就可以把現有的 extension 包回去 firefox 。但這 code structure 跟後來獨立出來成為 extension 的 tabgroups 長相實在差有點多,讓我有點搞不清楚到底當時是怎麼整理 codebase 獨立成 extension 的,這還需要更仔細的研究。

這麼做也有極限,因為 legacy API 和 extension 都不會再被維護,所以如果有新的 codebase 影響 legacy API 的運作,也不會被修正,legacy extension 也不會為了 broken API 去 workaround ,所以在更久的未來可能終究無法正常使用。

2. 啟動 legacy API 相容設定

猜測在 57 應該會有個 about:config 設定值可以允許 legacy extension 被安裝並且使用 legacy API 才是,雖然我還沒仔細去看這個設定值在哪裡。(等我找到再來更新這一段)

這個和方法1也有一樣的問題, legacy API 和 extension 都不會再被維護。

3. 使用 /firefox-tabgroups

這個 extension 本來是 tabgroups 的替代方案,也使用 legacy API, 但是和 tabgroups 不一樣的地方是作者 denschub 承諾說會支援新的 firefox ,雖然怎麼做、會有什麼功能他沒有說,但勢必一樣得受限於新的 WebExtensions API 。

4. 使用 contextualIdentities API 的相關插件

Firefox 前陣子新推出了一個 containers testpilot,基本上的概念是「在 Firefox 中透過不同容器來管理不同的線上身分,不論是線上購物、規劃旅遊行程、工作使用,更可以建立其他不同色彩與名稱的自訂容器。每個容器當中的 Cookie 會分開儲存」,它的目標使用情境看起來和分頁群組有些相關,因為分頁群組確實偶爾會被拿來這樣使用,但又有相當不同,containers testpilot 原本不是設計給「分頁管理」的情境下來使用的,所以沒有提供「顯示/隱藏」特定分頁的 API 。

有人去 containers 的 github 開了一個 issue 說,可不可以接受 containers 作為分頁管理工具的用途,獲得超多回應,畢竟現在這看起來是最有希望帶回分頁群組功能的道路了。

基於 contextualIdentities API  的插件目前有 eoger/tabcenter-reduxjonathanKingston/sea-containers ,這兩個是一開始就以 WebExtensions API 開發的插件,另外未來 denschub/firefox-tabgroups 應該也會使用這個 contextualIdentities API 。

contextualIdentities API 的問題

我去看過 contextualIdentities API 之後就覺得這真是個噁心霸道的東西,在棄用 legacy API 之後,插件沒辦法直接修改到 Firefox 的內部,所以照理來說 containers testpilot 是做不出來的,因為原本根本就沒有這種 WebExtensions API ——結果! Firefox 團隊就這樣直接幫 containers testpilot 開了後門,量身打造了一個 API 給他們——就是 contextualIdentities API 。

覺得很噁心,這不就剛好證明了能夠作出重大有意義的功能靠現有的 WebExtension API 根本做不到嗎?以前可以自己直接用 XPCOM ,現在還要先跟 Mozilla 開發團隊搞好關係才能在 core 塞進自己的插件需要的 WebExtensions API 。

撇開這個不說,這個 API 的設計看來也是一個 monolithic piece of poorly designed code 。正常來說 API 的設計應該是先暴露出最基礎的核心功能,然後由開發者自己組裝核心功能調用來作出有意義的插件吧?結果 contextualIdentities 這個 API 裡面直接把幾個在這個用途以外不相干的核心功能綁在一起暴露給 containers extension 使用:

  • 新增、刪除獨立的 cookie 儲存空間,一個新的 contextualIdentities API 會自動建立一個新的 cookie 儲存空間,完全沒有考量到獨立的 cookie 儲存空間可能會有 contextualIdentities 以外的用途,也沒有考慮到新的 contextual identity 想要分享現存 cookies 的狀況(共用一個 cookie 儲存空間)。
  • 更動右鍵選單項目,這個 API 直接自動新增了 “Open Link in New Container tab" 的項目。雖然我們已經有了 contextMenus API 可以新增右鍵選單項目,但顯然我們需要複製一份 code 給 contextualIdentities API 來讓使用者可以輕鬆地在新的 container 分頁裡面開啟連結,這樣複製一份 code 還可以減少 containers testpilot 插件開發者需要寫的 code ,非常棒。
  • 在 tab 頁籤上色的功能,在每個 contextual identity 裡面可以新增 tab ,在 contextual identity 當中新增的 tab 會自動被上色。顯然在分頁上色的功能只會有 containers 實驗會用到。
  • contextual identity 本身的頁籤顏色和圖示都只有固定的幾種可以選,圖示像是 cart, fingerprint, briefcase 等等,顯然不可能會有其他狀況下需要其他的圖示。

……正常的設計應該會是把前面三種功能分成三種不同的 API , 插件作者自己把這三種 API 結合在一起形成 contextual identity 的概念才對啊!!

另外,雖然有了 contextualIdentities API ,但還缺乏很多 API ,導致這些插件的功能還沒辦法實作出完全復刻原本 quicksaver 開發的 Tab Groups 的功能:

  • 如上所述,建立 contextual identity 的時候不能選擇共用 cookie store ,但 quicksaver 的版本裡面所有的分頁群組還是共用同一個 cookie store 的
    • 狀態:沒有查到相關的 feature request
  • 沒辦法選擇性只顯示部分的分頁(也就是只能顯示所有的分頁),quicksaver 的 tab groups 一次只會顯示一個群組。
  • 現在無法把某個 contextual identity 中的分頁移動到另一個 contextual identity ,只能關掉原本的分頁,然後開一個新的
  • 如果要使用類似 tree-style tabs ,把所有分頁和分頁群組放到側邊欄,那原本的橫向頁籤列應該要被隱藏,但現在沒有這樣的 API

相關資料、討論

個人感想

原本我以為沒希望了,更久以前我在搜尋的時候都找不到替代方案,幸好最近有 containers testpilot 所以才有這麼多延伸應用冒出來,有種燃起一線希望的感覺。但上面的那些 bug 大部分都還沒有被 mozilla 批准,我不太有信心 57 出來的時候分頁群組替代方案能夠完全提供舊有的功能,感覺上面當中一兩個還是很有可能會被 mozilla 拒絕…

YYP OOP 之亂

前情提要

個人想法

YYP OOP 作業的問題點並不在於實際上有多難,而是我覺得大學部的必修課本來就不應該讓這麼多人覺得困難,就算本來已經很簡單了,很多人抱怨困難的話還是應該要更簡單。
大學部必修課的重點在於讓學生瞭解基本概念,如果讓學生有撞牆的感覺的話,很多人就會直接放棄了,無助於達成「讓學生瞭解基本概念」這個目標。

有人說,如果現在不設這樣的標準,不教這麼多內容,那以後出去工作是要怎麼辦?
重點再講一次,必修課的重點是「讓學生瞭解基本概念」,而不是「讓學生有工作能力」。
大學什麼時候有訓練學生符合業界需求的責任了?這本來不是大學的目的。

有人說,就是要這樣的難度,讓學生知道 C++ 很困難,或是讓他們知難而退。
再講一次,必修課的重點是「讓學生瞭解基本概念」,不是篩選學生,或是讓他們知難而退。

我並不想討論 OOP 作業內容上是否太難或不合理,問題在於實際上就是有相當比例的人覺得過於困難,對於他們來說是一種撞牆的感覺,這時候這門課就已經與「讓學生瞭解OOP的基本概念」這個目標偏離了。
如果你覺得這些東西是「本來就應該要會」的東西,那你大可自己精進或修選修課。讓這麼多人撞牆,不是必修課應該產生的合理現象。

以現在作業的難度,你批評那些做不出來的人是「不夠認真」、「不適合唸資工系」,那假設作業的難度再提升,你花了更多的時間把它完成,同時有更多人做不出來,那些人是否仍然「不夠努力」?
換句話說,假設難度不斷提升,通過的比率越來越少,失敗的比率越來越多,用這樣的方法去強迫大家「努力」,那何時停止?因為努力永遠都還可以更努力啊
有沒有發現,為什麼「夠不夠努力」是由一個外部的標準評定的?而且原本「夠努力」的人,我只要把標準再提升,馬上就變成「不努力」」。這樣有意義嗎?

教育並不是不斷地把標準提高以激勵(逼迫)學生符合標準,教育也不是篩選,教育…是讓大部分的學生學到東西(不管東西在你看來是多麼地少)。
因為有興趣的人大可以自己精進,可是對於初次接觸的人,你讓他這樣撞牆,可能就是讓他永遠不會再碰這個美妙而有趣領域的轉機了。

黑客松的真諦

最近在 Facebook 分享了 Hacker News 上面一篇針對黑客松的討論,引起了一些迴響,所以決定寫一篇文章整理我的想法。

首先,黑客松本質上就是一個程式設計師的活動,所以我不只是從一個程式設計師的角度看黑客松,而是黑客松本質上就是從寫程式出發的。那些商業包裝的部分都不是本質,商業包裝並無不好,但是在不瞭解黑客松本質狀況下進行的包裝往往扭曲了黑客松的核心精神,很不幸的是這種狀況經常發生,導致大家都覺得黑客松就是包裝過的那個樣子了。

關於黑客松的歷史就不多介紹了,有兩種起源,Sun 和 OpenBSD ,見維基百科
因為起源的不同,可以形成對黑客松兩種不同的詮釋。

黑客松的 OpenBSD 詮釋其實很簡單,一群程式設計師聚在同一個地方開發一個專案,就可以叫做黑客松了。一開始 OpenBSD 的黑客松也不過是這樣而已。

再延伸一些,大家一起找個場地,合資買些飲料、食物,一起寫程式、討論程式,做事情之餘吃批薩聊聊天、認識新朋友,大家開開心心,也就是黑客松了。

上面講的是比較沒有壓力的黑客松,有時候黑客松也會有一個明確的開發目標,讓大家像馬拉松一樣在活動的幾天日以繼夜地寫程式,這時候的目標往往是用各種 hack ,在最短的時間內達成開發目標,這種黑客松就真的融入了 marathon 的精神。這也就是黑客松的 Sun 詮釋了。

不過什麼是 hack ?(印象中《黑客列傳》將其譯為「黑技」)

hack 泛指用聰明絕頂的方法解決問題,通常也包含著戲謔、嘲諷、炫耀、懶惰、小聰明的特質,著重在解決問題本身,甚至會為了快速解決問題,而故意忽略問題的其他面向。

舉例來說, Richard Stallman 做的 GNU 計劃就是對 UNIX 一個絕妙的 hack ,根據授權條款規定,他不能使用 UNIX 的原始碼,但還是靠著自己的聰明才智寫出源碼不一樣但是完全相容的程式。

另一個例子是 MIT 的 hack 傳統,有一次一群學生(應該是一群學生,不過這種惡作劇的始作俑者通常都不會被找到)把一台完整的消防車放上 MIT 圓頂:

雖然只是為了惡作劇,但仍不得不為了投注在其中的設計巧思拍案叫絕。

以寫程式來說,有時候為了解決某個問題(作出某個功能或是修掉某個 bug),可是完整的解決方案要花費很久的時間才能實作的時候,我們有時候會用一些「骯髒」的方式來解決,譬如說把某個值寫死 (hard-code) ,或是某個應該要模組化的功能,為了快速實作,直接把它做在核心裡面。

從這點講回黑客松,為了要在短時間內達到開發目標,實作過程中很可能大量使用各種 hack ,寫出各種骯髒的 code ,所以不斷 hack 的 marathon ,就叫做 hackathon 了。

雖然骯髒的程式碼不利於長遠維護,不過有時候為了 proof of concept 或是快速驗證可行性,工程師們還是會寫骯髒的 code 。反正萬一真的成功了再修改也不遲。

我翻譯一下討論串原作者所提出的質疑:

I am an american CS student that goes to (a lot) of hackathons. The purpose of this post is to get feedback/opinions from people that are outside the “Hackathon Hackers" bubble to determine whether or not my rant is founded and if the issues I am highlighting are characteristic of the tech industry.It bothers me to see how obsessed with success this generation of “hackers" seems to be. I have met people who were justifying censorship, population control and unfair business practices because they could benefit from them someday. I was expecting a little more regard to civil liberties and ethics from students and so called “hackers".
我是一位美國 CS 學生,我參加過很多黑客松。這篇的目的是聽聽那些「黑客松的駭客們」圈圈外的人的觀點和意見,來讓我瞭解我的抱怨是否具備合理基礎,還有這些我點出的議題是否真的是科技產業的特性。這年頭的「駭客」是如此地執迷於「成功」讓我有點感冒,我曾遇過一些人為言論審查、人口控制、不公平的商業手法辯護,只因為他們有天可以從此獲利。我認為學生和所謂的「駭客們」對於公民議題應該有更多的重視。

People win by making “cool" apps (Uber for X) whereas technical hacks are totally ignored.
人們製作酷炫的 app (像是 Uber for X)來贏得黑客松,卻完全不在意那些技術上骯髒的地方。
譯註:Uber for X 是指,把 Uber 的模式套用到其他領域上面去,就像我們會說 LinkedIn 是給業界人士的 Facebook 。

I am glad that people are motivated to succeed but this lead to some of them taking themselves very seriously. Often to the expense of ethics.
我很高興有人立志成功,但這導致他們自視甚高,時常到了違反道德的程度。

“There is such ignorance in this world about who we are. We are not criminals. We are innovators. We create things. We change the world.[…]"
「世界嚴重輕視我們,我們不是罪犯,我們是創新者,我們創造東西,我們改變世界……」

And this is one example among many other from a guy who has never engineered anything. Weeks are spent planning for their new “great project" with at the end little to no execution.
上面這句話是來自一個從來沒有設計、作出一個東西的人。他們花了數週來計劃這個「偉大的計劃」,但到最後幾乎沒有實際執行。

Students who believe to be 1000x SE because they can stick two APIs together and use bootstrap end-up to be very condescending older engineers.
學生覺得自己是超厲害的軟體工程師,因為他們可以把兩個 API 接在一起然後用 bootstrap 把它做得美美的,就這樣輕視較老的工程師。

This “bro"/"my framework is the best"/"Make money fast" culture that stinks a little bit IMO.
我覺得這種「我做的框架最棒,可以快速賺錢」的文化已經開始發臭了。

Hackathons are great to try out new technologies, meet new people and outreach to demographics that are traditionally under-represented in CS but I don’t like where this is headed.
黑客松是嘗試新科技、新工具,並且認識那些 CS 領域當中的少數族群的好機會,但是我不喜歡很多黑客松的發展方向。

Like HS there is “cool kids" who are “Student Entrepreneur" or “Innovator, UX Artist blah blah", “RoR Genius" etc… and the rest of the world.
就跟高中一樣,那些酷傢伙可以自稱「學生創業家」、「創新者」、「UX 設計師」、「RoR 天才」巴拉巴拉巴拉,其他人就只能在旁邊看。
譯註:大概就是「啊不就好棒棒」的意思。

My apologies if this post is a little bit ranty, I hope to get other perspectives on this.
如果這篇讀起來太多抱怨我道歉,我想要聽聽其他人的意見。

再來我想要引用幾句 Hacker News 討論串裡面特別中肯的留言:

Yes, I think that the idea that a hackathon can be “won" is silly too.
是啊,我覺得黑客松可以「被贏」的這想法也蠻蠢的。

不過後面有人補充了:

There are two types of hackathons: The Sun and the OpenBSD type. Most of what is talked here seems to be more of the former, but that term can mean two entirely different things.
有2種黑客松,Sun 和 OpenBSD 的。這邊討論的似乎大部分都是指前者,但是黑客松一詞可以有兩種完全不同的意義。

For starters, the OpenBSD one can’t be “won".
簡單來說,OpenBSD 黑客松不能「被贏」。

有另一個針對原作者的留言:

Honestly? You’re hanging out with a bunch of ambitious, entry level devs, probably all college students. This is what you should expect from a crowd like this. Take what you need and leave the rest. For more depth and maturity, go to your favorite language meetups and attend/participate in talks from/with folks with some industry experience under their belt. Kudos for having perspective enough to ask for feedback about this. You’ll be fine.
你認真的嗎?你本來就是和一群有野心的初階開發者,很可能全是大學生互動,你看到的這狀況對於這群體來說本來就是正常的。各取所需,別在意其他的。如果想要更深入、更成熟,去參加你最愛的語言的聚會,參加相關領域的演講,聽聽那些業界前輩的經驗。你有觀察到這樣的現象來尋求回饋很好,你會過得很好的。

馬上被打臉:

I think a key part of the question though is the fact that it didn’t used to be just entry level devs and college students at hackathons.
我覺得這問題的背後還有一項重要事實:從前的黑客松不是只有初階開發者和大學生。

另一個回覆:

Well, it depends on hackaton. Most of the hackatons now are commercial events, designed either to milk participants for free work or promote some third party services.
其實要看個別黑客松而定,現在大部分的黑客松都是商業性質的活動,不是想要把參加者當廉價勞工就是要行銷某個第三方服務。

I remeber when hackatons were made by programmers for programmers, when they were about hacking on actually cool projects and having fun. Those hackatons had some serious devs participating, because hell, even if you’re doing this professionally, you need to take a break every now and then and do something just for fun.
我很懷念那些由開發者籌備給開發者參加的黑客松,他們注重的是開發真正酷炫的計劃還有從中得到樂趣。這些黑客松有大量的開發者參與,因為即使你用很專業的方法開發,偶爾你還是需要休息,做些單純只是為了好玩的事情。

有個建議蠻中肯的:

Take a look at the free software community (which is incidentally very well-correlated with what the “hacker" community used to be 20-30 years ago, and has much more of a claim to being the intellectual heirs of that group than the hackathon crowd does or even the HN crowd does). There’s a lot of focus on ethics and civil liberties, and maybe a bit too little focus on effective PR and on shipping, but it’s very refreshing.
你可以看一下自由軟體社群,比起那些黑客松的人們,或甚至是 HN (Hacker News) 這邊的社群,他們跟二三十年前那些真正的駭客比較像,更有資格被稱作駭客精神的人繼承者。他們非常關注公民議題,雖然或許有些輕視公關和行銷部分,不過依舊值得一看。

最後,我希望有更多真正的黑客松啊。

真正的黑客松並不難,也不需要什麼錢來舉辦,更不需要什麼宣傳。三五好友,找個下午,一起來做個專案,大家開心寫 code 開心吃批薩喝飲料,也就是黑客松了。

我一直覺得,寫程式不只是能讓你賺錢而已,程式之所以酷炫,就是因為有駭客精神在裡面,你可以踩在前人的肩膀上,快速地改變這世界。這也就是為什麼自由軟體很重要。我認為,寫程式是改變世界最有效率的方式

所以別再浪費了。

我計劃要再寫一篇我對駭客精神的詮釋,寫完會把連結貼上來。

評交大資工學士班學生「自我實現」計畫

前幾個禮拜收到系辦的一封信,「交大資工學士班學生「自我實現」計畫」,讀完覺得這計劃怪怪的,前後花了幾個禮拜的時間整理想法,整理在這篇文章。以下為信件內容:

各位同學:

在過去數十年間,交大資工系曾是全國資訊領域的第一把交椅,所培育出來的大學生不僅具有極強的設計實作開發能力且有濃厚的興趣及企圖心自行開發對國家社會有價值的應用及系統,因此交大資工系的大學畢業生不僅為產業界所重用,他們也在國家資通訊產業的蓬勃發展中做出了極大的貢獻。

但目前,由於社會風氣的改變,大學生普遍欠缺企圖心、理想、主動學習及勇敢創新創造的精神,再加上各大學研究所推甄偏重學業成績而不重視設計實作能力的審查方式,近年來交大資工系的大學生已經逐漸看不到過去交大資工系大學生的精神及特質,目前已經很少看到有交大資工系的大學生為了自己的興趣或理念來充滿熱情的、自發的、長期的開發自己的作品。若讓此現象持續而不做改變,長久下來交大資工系所培育出來的大學生將無法像過去一樣帶領國家的資通訊產業在世界的舞台 上與其他先進國家競爭,交大資工系的光環將很快消退,交大資工系將不再是全國資訊領域的第一把交椅,也不再是學生、家長、及產業界重視的著名校系。

有鑑於此,交大資訊工程學系於2014年10月15日 的系務委員會中訂定了交大資工系大學部學生「自我實現」計畫辦法,採用「學生自我興趣導向」的作品開發方式,鼓勵具有企圖心、理想、主動學習及勇敢創新創 造精神的交大資工系大學部學生們開發他們自己想開發的作品,教授們則從旁提供指導來協助他們實現自己的理想。由於這種以學生為本位的實施方式,因此此計畫 稱為「自我實現」計畫。

為 了讓學生能自發性的且甘之如飴的想把一個作品做到最好,此「自我實現」計畫讓學生能依其興趣及理想自訂所要開發的作品,但因學生所學不足,學生勢必要主動 尋訪能指導且願意協助他開發其作品的老師來拜師學藝。由於是學生主動懇求老師指導及協助,學生需要敬重及珍惜老師的指導及協助,否則指導老師隨時都可拂袖 而去不再指導。另外,由於是自己想要開發的作品,學生會願意廢寢忘食也要把自己的作品給做到最好。

這個計畫辦法日前已經正式通過,有理想有熱情的大學生歡迎提出申請。目前為大一的學生需等到大二上學期才能開始進行。目前為大二或大三的學生則在2015年春季的那一學期(103學年度下學期)即可開始執行。申請截止日為開學兩週前,申請相關表格可向系辦公室詢問及取得。此計畫的詳細申請及執行辦法如下所列,請各位同學參閱。

 

交通大學資訊工程學系

————————————————————————————————————

附件:

國立交通大學資訊工程學系學士班學生「自我實現」計畫辦法

103.10.15 資訊工程學系系務委員會議修訂通過

  1. 目標:鼓勵大學生要有理想、企圖心、自我學習精神、以及積極開發自我興趣導向的軟體或硬體或軟硬體整合專案
  2. 從大二及大三上學期開始,有濃厚興趣及企圖心想要開發自我興趣導向作品(非指導教授所指定的題目)的學生,可以申請參與此計畫來敦請有意願的教授給予指導及協助。
  3. 此計畫可單人執行,亦可由 2 ~ 3人組成團隊一起執行。
  4. 此計畫為期一年(連續兩學期),亦可包含一學期(下學期)及一個暑假。
  5. 申請參與此計畫的學生需提出一個包含動機的自傳及自我作品開發計畫書(格式不拘),並獲得某位教授的書面同意來指導開發此作品。申請學生若不清楚系上哪位教授的專長適合指導開發此作品,可向系辦公室申請協助,系主任及各所所長會提供適合指導此計畫的一些教授名單供學生去請益。
  6. 若 以團隊申請,每位成員需清楚分工執行一個子計畫,並將各自子計畫的作品開發計畫書整合成一份進行申請。此整合計畫書中需清楚說明每位成員各自負責開發子計畫的細節以及為什麼需要用團隊的方式來進行此計畫。此外,每位團隊成員均需提出各自參與此計畫的動機及自傳。系務委員會審查團隊計畫時,若部分團隊成員所 提的子計畫不符合此「自我實現」計畫的積極開發精神,得不予通過這些成員的申請。
  7. 申請學生或團隊尋找到及獲得某位教授的指導同意書後(需請同意指導教授簽名,此指導同意書表格可向系辦公室索取),學生或團隊需填寫參與「自我實現」計畫的申請書(此申請表格可向系辦公室索取)並連同教授的指導同意書送交系務委員會進行審核,獲得審核通過後,此申請案才被系辦公室正式核可及承認。
  8. 計畫核可通過後,若學生或團隊作品開發成果優良,可申請獎助學金。在期中(第一學期後)提供期中報告及期末(第二學期後或暑假後)提供期末報告時,若開發作品成果優良經指導教授推薦(需請指導教授寫推薦信,格式不拘)及系務委員會核可,每位學生每次可分別獲得 $5,000 元獎助學金。若以團隊方式執行計畫,想申請獲得上述獎助學金的學生,其子計畫的開發成果需獲得指導教授的推薦且其期中及期末成果報告的品質需獲得系務委員會的核可通過。
  9. 上述學生,若能獲得自己作品的期中成果報告獎助學金及期末成果報告獎助學金,每年系辦公室會自動造冊保管,在資工系碩士班進行推甄審查時,主動提供名單給審查老師,並為其加分。
  10. 由 於此計畫的精神是屬於「自我實現」的精神,若計畫執行期間學生志趣改變不想再繼續接受指導教授的指導來繼續執行其作品開發計畫,可隨時終止此計畫,不需經其指導教授同意。反之,若指導教授認為學生已喪失其當初之作品開發興趣及熱忱,亦不需學生同意,可隨時終止與學生或團隊之間的指導教授關係。
  11. 本辦法由資訊工程學系系務委員會議訂定、修正時亦同,未盡完備處得隨時修改。

信頗長,真是抱歉。

大學生普遍欠缺企圖心?

首先,「由於社會風氣的改變,大學生普遍欠缺企圖心、理想、主動學習及勇敢創新創造的精神」我不知道寫這份公告的人是誰,看的究竟是有多廣可以觀察到所有大學生的狀況,我想應該沒有人有這種能力。一竿子打翻所有大學生的這種過度推廣顯然有問題。

這個計劃是資工系系務會議通過的,所以寫這個計劃書的人很可能是由交大資工系的學生為樣本來進行推斷,其中「大學生」一詞也有可能指的是「交大資工系大學生」,總之,這段話似乎是在說「交大資工系的大學生普遍欠缺企圖心、理想、主動學習及勇敢創新創造的精神」,既然縮限了指涉對象的範圍到「交大資工系的大學生」,那反過來思考,有沒有可能是篩選的過程導致交大資工傾向於收到這樣的學生呢?

依我來看,交大資工的篩選過程有些問題。從最近一屆的交大學士班入學資訊來看,在第一階段當中,首先必須滿足英文前標、數學頂標、自然前標,並依照篩選倍率比序後,前N名才能進入第二階段。在第二階段的評分當中,學測成績佔了總成績的40%,備審資料佔了60%。我去查了前二屆、前三屆,篩選標準大致相同。

來看看臺大資工,依照大學招生委員會聯合會的資訊,103年第一階段標準英文、數學、自然都是頂標,第二階段評分當中,學測成績佔20%,備審資料40%、數學筆試或程式設計40%。

如果想要收到對資訊領域本來就有興趣,甚至已經具備一些技術的高中生,那提供一個考程式設計入學的管道不是最能夠吸引這些人嗎?(雖然臺大資工的成績限制本身還是很嚴格)

事實上,臺灣的高中課業本來就不輕,再加上多數家長的心態,讓高中生平常就已經很少有時間培養興趣和專長。高中也缺乏專業選修課程,幾乎全部的時間都花在基礎學科(國英數物化生)的訓練,要利用學校課程培養興趣專長也不太可能。有時間培養興趣專長的,一種是本身極為擅長應付課業(我不想用聰明這個詞,不過擅長應付課業通常就是家長老師所說的聰明),不需要花費太多時間,把其他時間拿去培養專長;另一種是大多數,沒有那麼擅長應付課業的人,他們放棄了一部分的課業,把時間挪給興趣和專長。

臺大資工的篩選,極有可能篩選到第一種人。至於交大資工的篩選,就要看那佔分60%的備審資料究竟是如何被評分的,這個過程一向不公開,不過從一位教授對我的說法,可以略知一二。教授表示,他們在看備審資料來推測實作能力的時候,比較傾向參考獎狀,如程式競賽的獎狀。對於像我這種沒有獎狀但是高中時代就實作了一些系統,甚至還接過案子的人,教授說,這些作品沒有一個評分的組織來為它背書,教授難以快速判斷這些作品的技術含量,教授事務繁忙,也不可能花很多時間仔細看備審資料,去評估這些作品是否真的能夠證明學生的實作能力。

交大資工的教授也不願意把成績門檻拉低,並透過更仔細的審查備審資料,甚至是口試,來讓那些對資訊領域懷有大量興趣、熱忱,但是成績並非頂尖的高中生有機會進來。對於教授來說,降低成績門檻是一個很困難的決定,有些教授可能會覺得,數學成績不好的人,資工系必須花更多時間教他們基本的數學;或許有些教授知道,成績好不代表興趣高,衡量興趣程度也不像衡量成績那般那麼簡單,更容易判斷錯誤,收到假裝有興趣但是成績不好的人,但他們寧願收這些成績好的人(多少代表他們願意唸書),中規中矩地唸完4年,也不願意冒風險,收到基本能力不佳的人吧。

為什麼要申請?

這個計劃究竟對學生有多大吸引力呢?分析一下申請的優點:

  1. 期中期末各有5000塊,可是要有教授的推薦信和系務會議核可
  2. 對研究所推甄有幫助
  3. 有教授指導

首先,10000塊……我不知道這對於一般大學部學生這價錢能不能引起他的興趣。至少以我來說,審查過程那麼繁複,要交自傳和企劃書,還要系務會議核可,還要說服指導教授同意,而且做完了還要寫各種報告,整個計劃要拖2學期,這樣才一萬塊……未免太麻煩。一萬塊大概是架設一個 WordPress (不包含外觀主題設計)並且維護伺服器3個月的費用;一萬塊我暑假去實習10天就賺回來了,在學校打工時數多一點一個月也有五千塊啊。

雖然說這個計劃是做「自己想做的事情」,做自己想做的事情就可以拿到一萬塊,好像還不錯。不過因為一萬塊實在是太低了,比較像是學生做這計劃的附加價值,而不太可能成為做這計劃的主要目標,也不太可能構成吸引力。(意思是,若本來有興趣的學生,就還是會參加這計劃,可是對於本來沒有興趣的學生,不太可能因為這一萬塊就開始想有什麼專案可以做,加入這個計劃以爭取到這一萬塊

第二,對研究所推甄有幫助,對於很多學生來說,這應該相當有吸引力。就算申請的不是交大的研究所,這種系上背書認證的專案,到其他學校應該也會有相當幫助吧。

不過這種做法治標不治本,信件中提到:「再加上各大學研究所推甄偏重學業成績而不重視設計實作能力的審查方式」,所以寫信的人其實知道現在資工研究所推甄入學的問題,可是這個計劃幫助推甄的方式是「在資工系碩士班進行推甄審查時,主動提供名單給審查老師,並為其加分」,可是要讓大學生具備「企圖心、理想、主動學習及勇敢創新創造的精神」,根本上的解決方法應該是徹底改革研究所推甄入學的方式,讓研究所入學的時候不只看申請者的成績、參加什麼學校計劃、拿了什麼獎狀,而是更全面性地評估申請者是否具備「企圖心、理想、主動學習及勇敢創新創造的精神」。研究所入學一旦開始崇尚這種精神,想要進研究所的大學生自然就會開始注重培養。

不過當然,這優點也只有對想要申請研究所的人有吸引力而已。

第三,有教授指導,不過「若指導教授認為學生已喪失其當初之作品開發興趣及熱忱,亦不需學生同意,可隨時終止與學生或團隊之間的指導教授關係」(不過學生也可以隨時單方面終止)。

乍看之下很棒。不過想想,就算沒有這個「自我實現計劃」,學生若自主發起一個專案,請求教授協助,教授難道會拒絕嗎?教授應該會覺得很高興吧?

教授的專業是否能夠幫助到學生也是一個問題。我猜很多學生應該需要網頁和 App 開發相關技術,可是資工系完全沒有這方面的課程,教授通常也對這方面不熟悉。不過資工系沒有這方面課程和師資也還算合理,電腦科學裡面本來就不包含網頁和 App 開發。網頁和 App 開發還是在網路上或看書自己學比較好。

這些優點裡面,對學生具備實質吸引力的,我看只有第二點,對研究所推甄有幫助。

為什麼不申請

上面已經講了幾個根本不是優點的優點,再來講幾個缺點:

  1. 申請申請審核審核報告報告,太多申請審核報告
  2. 計劃需為期2學期或1學期+1暑假

首先,要申請進行「自我實現」計劃,就要「提出一個包含動機的自傳及自我作品開發計畫書」,並取得教授的書面同意指導書,接下來還「需填寫參與「自我實現」計畫的申請書」,然後「送交系務委員會進行審核」,通過之後方能獲得系辦的承認和背書。

上面還只是「申請進行」而已,要取得每次五千塊的獎學金,分別需要撰寫期中與期末報告,並且「經指導教授推薦及系務委員會核可」。若是以團隊方式進行,每個子計劃也需要分別提出期中與期末報告,和教授的推薦信。

正是因為「各大學研究所推甄偏重學業成績而不重視設計實作能力的審查方式」,所以推出自我實現計劃,為學生的實作能力提供一些背書,講難聽一點就是把實作能力轉換成另一種成績,希望透過系上背書的方式,培養學生的「企圖心、理想、主動學習及勇敢創新創造的精神

不覺得怪怪的嗎?怎麼會是透過外部的承認(系上背書)來讓學生具備企圖心、理想、主動學習的精神呢?企圖心、理想、主動學習都是發自內心的不是嗎?人本來就具備企圖心和理想的,只是透過臺灣的教育系統的時候,我們把這兩樣東西和主動學習全部都磨掉了。

那大學又要怎麼重新喚起這樣的精神?應該是建立環境,讓學生重新相信理想(相信理想會成真大概就可以產生企圖心了),還有設計課程,讓學生喜愛課程,讓我們相信,這些課程所學出去真的是有用的。

環境、風氣要怎麼營造?

課程方面,應該設計更彈性的修課制度,讓學生多修自己有興趣的方面的課,允許他們少修一些跟志向不相關的課。譬如有人的志向在研究人工智慧,就不要強迫他們修一堆編譯器、數位電路的課。(這邊是就我的理解人工智慧領域跟編譯器和數位電路的相關性很低,有錯請指正)不要再說什麼「數位電路是資工系基本能力」了,臺灣的國高中教育就已經被「基本能力」鉗制住了,讀了一堆歷史地理國文,對大部分將來從事的行業沒什麼用,更糟的是,歷史地理的教學在培養學生的國際觀方面完全失敗,國文的教學對於培養學生的閱讀、表達能力也不甚成功,真正更基本帶得走的能力,像是查資料、分析的能力、討論的能力、合作的能力,反而沒有什麼機會培養。大學教育比國高中更具專業性,到了這個時候學生也該瞭解自己的志向了,應該允許他們更專精地鑽進一個領域。強迫一個想要研究人工智慧的人學習編譯器和數位電路只是佔用了他們學習更專精的知識的時間罷了。

關於營造環境、風氣,除了上述的方法之外,我也有想過其他的,不過在這篇討論的話就有點離題了。

鼓勵很好,但是那不是問題所在

交大資工系現在的課程蠻糟的,在鐵腰的部落格上面有提到一些,它糟的方式是…最糟的 (the way that it sucks, is … the worst)。不是課程沒有內容,讓學生可以輕輕鬆鬆就通過;也不是分數給太鬆,這兩種狀況都至少讓學生有很多時間去做規定課程以外的事:修其他領域的課、做 project 、實習、玩社團……就算沒有在學校學到什麼東西,至少他們做了很多其他事情。

交大資工的課程糟的方式是,它用最無意義的繁重課業榨乾你的時間,而且從來不想辦法改善教學內容或方式來引起學生興趣,而只會一直跳針說「這個課程很重要」、「這以後出去/研究所一定用得上」、「這東西是身為資工系的基礎能力」。教你10年前的技術,作業出各種苦工,除了專題之外從來沒有一個作業可以自己決定題目……

課程可以抱怨的事情很多,總之我要表達的是,課業都這麼重了,學生哪有時間去做什麼計劃啊?

自發性的探索和學習總是要基於:一、有時間;二、有興趣。交大資工的課程:一、消耗大量時間;二、從來不試圖提升學生的興趣,甚至還消磨學生的興趣。你要學生哪來的自發性探索和學習啊。

教授的心態

看到這個計劃,我也不禁懷疑教授的居心。有沒有注意到,在這個計劃當中,教授從來就不用主動做任何事情?都是等學生提案,等學生來找教授就好。

在大部分學生花費大量時間應付現有課業之時,拋出這個計劃,坐等。學生無暇參加這個計劃,教授於是再度批評學生「欠缺企圖心、理想、主動學習及勇敢創新創造的精神」,一切的錯看起來都在學生。從頭到尾無視問題的根本在於課程不好。

或許又會再拿有進度但是緩不濟急又搔不到癢處的課程改革來反駁說「我們其實有改革」。

附帶一提

最原始那封信裡面把 103 年入學的學生的信群地址寫錯了,edu 寫成 efu。不知道有沒有人發現然後重寄,不然大一們到現在都還沒收到這封信呢。

行政院青年顧問團……

在UDN新聞看到,7/22是行政院青年顧問團第一次開會。

新聞畫面中,觀察到成員們的發言幾乎都只是提到「希望」,希望政府如何如何,多關心某方面,多協助某方面,但卻都沒有提出具體希望是如何關心、如何幫忙。這是我看到的一個缺陷,但因為只是第一次開會,或許細節等到未來開會的時候才會提到,第一次開會只提大方向我覺得還可以接受。

「青年」顧問團的成員組成在我看來倒是有些問題,行政院青年顧問團本來就是政府為了要對學運有所反應的產物,但青年顧問團裡面的人沒有(或是只有少數)學運代表就算了,學運參加者的年齡層在顧問團裡面也不具代表性,依照誰來「學運」?太陽花學運參與者的基本人口圖象

每五歲分成一組的話, 「20-24歲」這組占44.5%,為數最眾;「25-29歲」占22.3%,次高。

554位學生樣本當中,93%為專科以上學生。其中,專科占學生樣本的2.2%,大學占73%,碩士班占17.2%,博士班占0.7%。403位大學生樣本當中,年級越高,參與比例越高。大四占30.2%,大三27.0%,大二22.4%,大一15.9%。

而實際上依照行政院官方公佈的行政院青年顧問團錄取名單,我實際計算出來的結果如下,計算原檔在此

在學運佔最多的20~24歲這一組在「青年」顧問團並沒有得到相對比例的代表。

其中報名資格限制年齡必須35歲以下,還會出現這麼多35歲以上的人也真是自打嘴巴。

不過或許也是20~24歲支持體制內改革的比例太少了吧,導致他們完全不想參與這個顧問團,這似乎也是學運主要領導人的看法,我可以體會這種看法。

我一直以來對交大資工主要的抱怨點

Shaform:

不禁想到,很久以前我覺得每個人都應該找到自己有熱情的事,然後對讀資工系沒有熱情的人應該要跑去做別的有熱情的事,空出缺口。這樣對那些有熱情但考不進資工的人才公平。

後來才發現其實很多人一生都找不到有熱情的東西,能找到熱情也是件滿幸運的事。

然後又發現也有很多人並不想過著一直「追求」的生活。只想過著不是那麼「用力」的人生。仔細想想或許也不好批評什麼。

然後才發現其實以前的我或許太過批評「不認真的人生」了 XD

我跟你的看法相反,我覺得世界上大部分的人都可以找到自己的熱情,如果他們真的去找的話,但是臺灣的教育體制把學生訓練成接受現狀然後在現狀下做最好的準備,很多人根本就不相信自己可以找到熱情或是找到了也沒辦法克服現實去從事自己的熱情,於是就放棄。
總之我傾向不接受現狀。

不確定你是不是在說我批評那些「不認真」的人,但你沒有直接說。但,不,我不是在批評他們,我對他們的希望是他們不要這麼容易接受現狀,但是這是個人選擇我無從干涉。我一直在批評的是資工系還有教授不應該逼這些不想認真的人學這麼多東西,因為這些不想認真的人就把必修設定的很多,把課程設定的很僵化,要求學生交一大堆作業以確保他們有能力寫課本習題、瞭解很多「基本」觀念,殊不知雖然這些觀念雖然基本雖然重要,但也只有在那個特定領域重要而已,以後學生事實上也不一定會用到這些東西。

國外 CS department 很多必修學分比我們少很多,很多人沒有選數位電路的課所以不會 Verilog ,沒有選線性代數、密碼學、選編譯器……所以都不會,那這些國外學生不具備教授們這些所謂「線性代數基本能力」要怎麼辦??工作也不見得會比較難找。

教授們花很多時間塞給學生這些他們所謂的「基本觀念」所犧牲的是那些真正重要帶得走的能力,自學能力、表達能力、團隊合作、討論、發問,etc 。教授們說「這是同學們應該自己努力培養的,不是我們能做的」,可是教授們一點機會都不給我們啊,我修到現在沒有任何一門資工系的課有課堂報告,作業的spec都訂的死死的,所謂創意是在做完spec之後只能拿來「加分用」,團隊合作也只有數位電路實驗和資料庫概論(spec也都是死死的)。課堂上教授也總是偏好自己教自己的,不會花心力去激發學生發問或討論(這方面我不完全怪教授,學生被動也是一個原因)。

教授也不該認定每個人都很認真或是每個人都很不認真,教授要搞清楚現實。

臺灣的資工系好像都不是資工系

我所認知的理想的資工系應該是要像美國主要大學(Havard, MIT, Berkeley, Stanford 這些)的資工系那樣。

前幾天跟 jserv 前輩聊天,他說臺灣的資工系幾乎都淪陷了,很多CS基礎的課程都不開了,他舉的例子是正規語言和程式語言,這兩門課在臺大和成大資工都已經數年沒開了(但據說臺大明年要恢復正規語言)資訊有誤,見留言。這些系反倒是開了一堆創業、寫app,或是非常高階很專精的課程。他覺得交大資工很好,是臺灣最正統的資工系,意思是大部分正統的CS課在交大都還有。

我補充我的觀察,創業課程在交大資工只有1門,交大資工沒有寫app或是網頁開發的課程(但是電機系有,神奇)。這類的課程確實本來就不是CS,只是有了之後對學生會有很大的幫助。

雖然交大資工確實還有正規語言、程式語言這兩門課,但是老實說這兩門課的教學狀況都不是很好,正規語言是我親身經歷,程式語言是聽學長轉述的。

正規語言老師上課就是介紹課本的各種觀念,依照課本的進度這樣教下去,講完一個觀念會有一些 example 演練這樣。沒有作業,只有期中考和期末考。這樣我覺得大致沒什麼問題,因為正規本來就是比較概念性、思想性的東西,習題就幾乎只是練習用課本裡面教的專用符號表示這些概念,重要的是概念本身不是符號,所以不出作業這點沒什麼問題。這門課其實有點像……概念非常困難的通識課,就是懂了就可以。

程式語言據學長說法狀況就比較糟,有位老師花一整個學期講某個 functional programming language 和 functional programming 的概念,但 functional 其實只是 programming paradigm 裡面的一種而已,只講 functional 太狹隘;另一位老師則是用一整個學期快速教了5種程式語言,不講程式語言的分類或是設計或是寫法習慣的不同。

其實也是聽 jserv 一講才知道原來交大資工算是「正統」的 CS department,只是那只是表象而已,內容物有很多是爛的啊。