2013年7月7日 星期日

林弘德學長(B87 ) Pietty作者

訪問對象 林弘德學長(B87)
訪問時間 2013 5
訪問人員 康永昌(b98902067) 田顏禎(b98902073)

背景: 資訊系B87畢業,pietty的開發者及目前PTT的主要維護者,推廣open source

1.請問學長當初選擇資訊系的原因是?
其實很早就對這條路有興趣了。
在國中高中的時候就常接觸電腦,也有參加包括科展與高中資訊高中資訊能力競賽等比賽,
還有資訊奧林匹亞的甄選與培訓營,所以大學的時候就推薦甄試選了台大資訊系。
一路上沒甚麼改變方向,因為原來就是對自己能創造東西比較有興趣,
資訊的世界幾乎都是應用你的想像力就可以完成很多東西,覺得這是一個很不錯的產業。

Q: 為什麼國中就對資訊有興趣
那時好不容易有了自己的電腦,所以就花了很多的時間在上面。
當時的軟體沒有像現在這麼好取得或多樣化,整台電腦就只裝了DOS作業系統、中文系統跟簡單的編輯器,只好有甚麼東西就玩甚麼東西,像把每個DOS的指令都試試看,或是看書然後下指令讓中文系統的字變大變小換字體。
所以那時很常跑去圖書館借書,由於是電腦剛起步的年代,借到的很多是程式設計的書(後來有了撥接的的BBS,還有Windows開始流行了之後,才比較有玩到所謂的套裝應用程式),
尤其是DOS裡就有附的QBASIC或是用DEBUG寫組合語言的介紹。
這些書就會教你怎麼畫個圓圈或是做個小東西,讓人覺得很有成就感,
還寫了些程式去參加國中的科展。
也因此看了不少電腦方面的書(雖然跟後來比,當時看的都只是皮毛而已),當年附中圖書館裡唯一的兩排電腦書櫃上可能過半的借閱卡上都有我的名字。
所以在高中時就確定了自己的興趣,大學決定科系時雖然家裡有建議我也考慮其它系所
(當時唸的是三類組所以選擇很多),但後來想一想我還是喜歡念資訊,而且也得到了家裡的支持。

2.學長的大學生活?
可能跟一般人的大學生活沒甚麼不同,在台大資訊系時大家就是一起在地下室聊聊天、
出去玩,沒甚麼特別大的差別。
我覺得台大資訊系的好處就是你會遇到很多很厲害的人,很多值得你學習的人。
那時候有些朋友,就是我們高中的時候有去資訊奧林匹亞(IOI)培訓營就已經認識的,
這些人對程式設計已經有一定的基礎、喜好,所以你有很多的機會接觸到關於程式方面更深的東西,
所以我大學也常跟這些人一起,像參加各種Open source project的研究開發或討論,
也因此有機會認識到很多跟程式設計有關的打工機會;大學主要就是這個樣子。

Q: 系上不久前有請高嘉良學長回來演講open source相關的議題,也是跟學長同一屆的樣子?
對,他跟我同一屆,是個很厲害又特別的人,也是在培訓營認識的。有一些打工的機會就是他介紹給我的。

3.學長念台大資訊系的時候有打工嗎?
我們那時剛好遇到所謂的dot com起飛的時期,整個產業界非常的瘋狂,
有成千上百的小公司成立了,這些公司都在尋找會寫網頁的人。
雖然那時的網頁跟現在的網頁等級非常不同,粗糙且技術不發達,
但所有的公司都在搶人,整個系應該超過一半的人都有在這種公司打工的經驗。
那時打工的經驗是非常容易取得的,很容易好友互相介紹,一個拉一個進公司。
像我就在學姐或是像高嘉良等人的介紹下,有在不少地方打工過。
其中有在過資策會寫政府的水利災害的報告系統,每個禮拜去個一天,維持了兩三年左右,
接觸到很多不容易在學校碰到的東西,像是用Delphi寫程式,
MS SQL處理大量的資料庫處理,或是用VBA產生報表。
後來又有去國家地震中心,也是待了兩三年的時間,還剛好碰上921大地震,
在當天晚上被call過去,他們急需一個網站馬上上線,
於是三四個人就在那邊熬夜用最原始的PHPMySQL刻了一個可以留言發布訊息的網頁出來。
現在來看那些東西很粗糙,沒有像現在那麼多方便的工具,但就會學到很特別的經驗。
我們那一屆其它不少同學則是在學長們開的公司,而且很多就在辛亥路上;那個時候大概都是像這樣的經驗。

4.學長的個人網頁上有很多的自製的好用小程式,當初怎會想要製作這些程式?
這跟我以前的經驗有關,那時候沒有像現在一樣有那麼多遊戲可以玩,
很多時候都會想把自己想做的事情自動化,所以就跟程式設計比較有緣,
後來在大學的時候,一方面是因為參加了一些自由軟體的開發,一方面是自己有需求,
就更常寫些小東西。
像當時在系上的219實驗室,常常助理因為原來的公務就很繁忙、沒有辦法花太多時間調整機器,
所以那時我們有一群同學自發性的跑去協助管理機器;之後就遇到了很多問題,
像需要大量的deploy系統、幫每台電腦自動調整設定或發布一些訊息等等。
我那時候花了一些時間把自己所做的工作自動化,習慣性就會把它們放到網路上。
當年的網路跟算是剛起步,所以www上大家常隨便放東西,我就是放些自己寫的小程式,
雖然現在來看那些東西可能其實都沒甚麼。

5.學長畢業後對於製作的程式仍有維護和更新,例如PTT, pietty等,是甚麼讓學長願意這樣做
?
我覺得畢業不畢業,對我來說沒有很大的差別。我現在的工作常常要面試人,
有時會聽到對方說因為上一個工作到這工作的時間休息的有點久了,所以都沒有在寫程式;
現在要叫他寫程式他寫不出來。還有些人會問說你們平常放假的時間,還會需要寫程式嗎?
這些問題會讓我覺得很訝異,因為我覺得這不是對這個行業有熱誠的人會提出來的問題。
我覺得對程式設計有熱誠的人的特質,即使沒有工作要你做或是去當兵,只要抓到有機會
其實你滿腦子都在想著設計與程式,或者你有機會坐下來就會試圖寫些程式在玩,
在台大資訊系有非常多這樣的人,然後我自己也有這樣的喜好,
不管我現在有沒有畢業或是有沒有在工作甚至去當兵了,寫程式對我們來講是一種樂趣。
三不五時就會想寫一些東西,當然有一個目標寫是比較好的。
我畢業後也寫了或維護不少東西,但後來比較有在發表的就是PieTTYPTT的修改。

那些東西會發表出來是有一些特別的原因的;以前我在台灣的BBS界也算參與了蠻久的,
所以有一些理想與目標,像PTT算是台灣碩果僅存的BBS,在上面做了甚麼修改不會都沒人使用,
所以就會有一些動力會讓你繼續做這些事情。

我參與PTT的狀況有點特別,在大學時我以前參加過其他BBS像是SOB(陽光沙灘)那邊的程式修改,
PTT在那時因為很多原因所以沒有參與的。畢業後有次跟系上的同學和學弟妹聊天,
覺得PTT的中文處理有問題,都需要client幫忙做,像是刪除一個中文字的時候都只會刪除半格而已,
還有像是對大螢幕的支援很多問題(例如有時在終端顯示視窗大於80x24的時候只會顯示80x24
但有的地方又可以完整全螢幕顯示),整個都沒有做好。
我覺得PTT身為台灣最大的BBS竟然沒有做好這些基本的東西,真是太糟糕了,
所以就跟幾個同學一起改了一些程式,把patch交給當時的站長 in2,後來就mergesource tree了。
我是這樣子開始了幫忙修改PTT的經驗,不過我並不算那邊的站長也不想當,只想幫忙修改程式,
可說是獨立的開發人員。之後我跟一些同學還有學弟們(像是 MichaelHsin kcwu)改了不少的東西,
常討論PTT系統未來的方向。
一開始我們想要把它徹底地改掉,但後來覺得還是先一步步把目前壞掉的地方改好,像是不穩定、人數多撐不住的問題。在討論新架構時,有人說重寫很麻煩,需要一個文章檢視器、編輯器、把所有的TTY輸出入系統都寫好,而這些部份都充滿了一堆古老而難懂的協定與設定。
那時我想說應該也沒有這麼複雜,所以我就開始把一個一個的元件都重寫,
像是文章的檢視器從Maple BBS 時代(一個叫 more 的程式)開始十幾年都沒有人動過,我就重寫了一套,
也就是後來的pmore系統,甚至還加上了動畫的功能與制定新語言;
接下來又把鍵盤輸入、ANSI輸出等等的底層terminal系統都全部重寫;
幾年下來好像幾乎也快可以套出一個全新的系統了。
回到原來的問題,為什麼我願意做這些東西呢?對我而言,改這些東西是興趣,
也是練習程式設計的方法之一。因為這是一個正在使用中的系統,它有它獨特的問題,而且使用的人多。
有個著名的實作問題叫 「C10K problem」:如何用一台電腦同時服務一萬個連線?
如果只是寫一個小小的程式自己用或是開個小網站,你完全無法理解c10k的世界。
但面對PTT這種同時十萬以上連線等級的話,程式一個寫不好,就是幾萬個人連不上,
你就比較會接觸到大型的程式,還有比較有系統的設計,所以我把它當作一種練習、一種挑戰,
也有助於我繼續練習網路程式設計或系統方面的程式。
像我在前公司都是在寫Windows的程式,沒有機會碰UNIX;現在的公司則是前陣子都在用shell scriptpython在寫程式,很少機會碰C;所以寫這些東西可以幫助我保持對網路與系統的熟悉度,
包括練習也包括興趣,這也就是我繼續做的原因。

PieTTY是因為我自己也需要用,不只是為了上BBS,更常是用它來進工作站寫程式。
以前覺得原始的PuTTY有很多的需求(像是中文的一些相容性)做不到,於是我就做了修正與加強 。
一部份的修正(尤其是中文相容性)有送回給PuTTY的開發者,但有些過於特殊的功能,像點選開啟網址、純Windows導向的界面,或是台灣BBS特有的一字雙色等workaround,則因為PuTTY想維持本身的單純性所以我就直接分支成新的Project,也就是PieTTY

6. 學長對於open source 與自由軟體有甚麼想法 ?
開放源碼(Open Source)與自由軟體(Free Software)在台灣也差不多是我們那個時候開始風行的概念,
而且在嵌入式系統(Embedded system)流行時到達了高峰。
我自己因為那時參與了Mozilla/FirefoxVIM等自由軟體的中文化,
所以跟台灣有在推自由軟體或是中文化的偉大前輩們像葉平教授等人也有點接觸,
參與到了幾次政府、業界、學界聯合討論的會議,
也因此稍微理解當時各界對自由軟體的一些觀點。
在那個起步的年代,其實真正了解自由軟體精神的人不多,
有些單位急於推廣導致他們摒棄一切商業軟體,讓人覺得有點因噎廢食(也造成了日後部份的失敗);
系統的營運成本不是只有軟體的市價,還要考慮維修、教育訓練、相容問題等等延伸的支出。
全盤考慮後甚麼工具比較好用就用甚麼,才是比較好的作法。
另外也有不少公司只想著用免費的東西減少自己的成本支出,但並不想回饋給其它人,
甚至只想學會如何迴避GPL的規範。
隨著時代的進步,現在大多數的人就算不是完全理解自由軟體的意義與規範,
起碼也大概知道GPL使用方法的通則。
我覺得,開放源碼與自由軟體適合某些體系,尤其像學校或是有些公司不靠賣軟體本身
而是靠服務加值的,就非常適合在獲利的同時開放自己的軟體原始碼。
對於整個產業來說,開放源碼與自由軟體有一定的價值但也有很多爭議。
LinuxGPL,早期不少公司都喜歡拿Linux來修改整進自己的小裝置再拿去賣;照GPL的規定來說,
你需要把修改的部分也公佈出來,可是這些公司都不願意,他們覺得公布出來就會被偷走,
就不能賣他們獨特的技術;他們覺得改的Add-on部分是他們的秘密,賺錢的方法。
這樣的作法就違反了自由軟體的精神。

在我看來,開放源碼或自由軟體是很好的方向,但使用或參與時要好好思考使用的原因或獲利的方法;
不需要特別排斥,但也不需要將它視為聖經。
我也看過有的公司,因為使用開放源碼的官司太多,導致他們很排斥,甚至規定員工不可以使用。
這很難說是對或錯,只能說開放源碼有它的好處跟壞處。
開放源碼與自由軟體有其值得推廣之處,但也不能說不開放就是邪惡的。

Q: 那像自由軟體是不是也不一定是免費的 ?
自由軟體並不一定是免費軟體。另外,開放源碼(Open Source)也與所謂的自由軟體(Free Software)有些許的不同。前者指的是原始碼的公開可取得性,後者則著重在確立使用者掌控軟體的自由權,也可說是前者的子集。
自由軟體來自於當初Richard Stallman(rms)提倡的概念,也就是FSF (Free Software Foundation, 自由軟體基金會)追求的目標。
以它原來定義的自由軟體來說,精神在於你要允許分享或轉移你的原始碼。
當初的故事是這樣的,rms在使用實驗室的印表機時有一些問題,
那時印表機有提供相關軟體的原始碼,所以他可以自己修改後用得很開心;
後來換了一台新的印表機,但新印表機的公司不願意提供給他們原始碼,
導致他無法有效使用;rms覺得這是資訊界的阻力,是不對的,
所以他開始提倡自由軟體,著重在「自由修改的權力」(Free容易讓人誤解為免費)
rms當初的想法而言,他覺得軟體是可以賣錢的,可是你要提供軟體的原始碼,
這樣人家才可以修改,那個人對你的產品才有完整的控制權,也就是付費者得到他所應得的。
以原來的想法而言,如果我給你一個產品,我必須把我的原始碼給你,讓你可以盡情的修改。
可是只有給你沒有一定要給全世界,就是只有買了這個產品的人,才可以取得你那份軟體且合法使用。
接下來才導出所謂的GPLGPL是為了把這概念套入現有的法律框架而生出的。
如果你使用GPL的軟體的話,你所做的修改也就必須跟GPL的方式一樣發行
所以別人取得你這樣東西,都要可以拿到一樣的原始碼,要讓別人能夠修改,而且可以再發佈。
以印表機的例子來看沒什麼問題,沒機器的人拿到原始碼也沒用,
但如果是純軟體的話複製太容易,如果我取得了原始碼也很容易到網路上分享給別人,
所以才造成使用GPL就等於無法收費的印象。
以原來的精神看,我取得了你的東西之後,可以修改程式,符合我的需要,
這是原來自由軟體真正的核心概念,所以跟免費或拿不拿錢沒有關係。

7. 學長對於念碩博士的重要性有什麼想法 ?
我自己有念碩士但沒有念博士。博士的部分之前網路上有兩位名人(xdite 與台大資訊系的vgod)
發表了不少對博士的想法與意見(vgod念了MIT的博士)。我覺得他們的說法各有各的見解,很值得一看。
碩士的部份,有人說大學部是培養基本能力,碩士是在得知問題後可以實作解決問題的能力,而
博士則是解決未知領域的能力,這是不錯的定義。我自己覺得碩士在資訊界有一定的幫助,像
是有一些課程,比較深的資訊理論,碩士才會接觸,對於理解資訊的本質有很大的幫助。念碩
士有他的幫助,但不是每個人都要念,有些人沒念碩士直接去工作其實也很好。以實驗室的角
度來看,有助於對未來工作的銜接性,像是有些實驗室習慣和外面公司合作,很快可以了解公
司的工作模式,但有些人大四跟專題時也有機會學習到。
現實面來看,現在碩士滿天飛,所以沒有碩士有時在求職上會有一定的阻力。
起薪的部分要看公司,但確實在不少台灣公司是有差的。
以研發來講,碩士和博士都可以做研發,有一些需要很深入分析時,因為博士對於分析問題有較完整的訓
練所以有時較佔優勢,但不代表不念博士你就無法達到一樣的位子。
一開始起薪職位不同,但工作一段時間後這些是可以互換的。
在碩士的時候,可以學到很多做事的方法,如何做報告,如何和大家合作,
我以前是多媒體實驗室cmlab的,它的產學合作案很多,所以和公司合作的經驗也較多。
每個實驗室都有自己的特色,像有些實驗室就比較屬於純研究型導向。
我覺得碩士的時候可以去好好了解各個實驗室,想想對哪個比較有興趣,選選自己的路。

8.學長當時有出國的想法嗎?
關於出國,我們那個時代有點特別,當時當兵還要一年八個月,國防役剛好達到頂點,
當初的規則是4年,但薪水是公司付的,不是國防部付的,所以是全薪和一般員工沒有差別,
只是要綁在那邊四年,一開始只要去受訓3個月,所以在那個年代來看這是很優質的選擇,
我的前後幾屆有非常高的比例甚至超過一半會選擇國防科技役,但兩三年後事情就變了,兵役縮短了,
國防科技役改成科技替代役,印象是3年,可是薪水不一樣,前面幾年變成內政部付的就和義務役軍官、士官薪俸一樣很差的薪水,所以在有國防科技役之前,很多人出國,反正一定要當兵,當
兵完後選擇就多了,之後去替代役變成一個爛選擇,所以趕快服完兵役的也變多了,可是在我
們那幾年國防科技役似乎是比出國更常見的選擇。在那時空背景下我選擇了國防科技役。
對於應徵國內公司的工作時,我覺得有無出國影響有限,雖然學歷有蠻大程度的篩選效果,
但是一些公司對於出國給予的加分效果並沒有非常好,因為國外很多碩士不用提出論文,
念完就有學位,所以除非是名校不然幫助有限。
如果是想在外國工作就不一樣了。國外的碩博士班很容易跟公司合作,
常可以去公司實習三個月或半年,這是很重要的經驗,也有助於未來接軌進公司。
台灣直接去國外找工作有點困難,所以先去國外念碩博士時去實習,比較容易進去公司,
如果以這種角度看(想在外國工作)的話我蠻推薦出國唸書的。

9.學長會建議學弟妹去intern學習一些經驗嗎?
實習是個非常好的經驗,目前打工的機會似乎沒以前多。
常看到文章在討論大學生該不該打工,有人說大學生就好好的念書,
也有人說打工是很重要累積人生的經驗,這兩種說法都有點偏頗,
畢竟人都會覺得自己沒有的東西看起來比較好。
我覺得不應該為了錢而去打工,打工應該是在你有餘力下去增加經驗。
台大資訊系的話,打的工和資訊系有相關比較好,其餘的工作效益沒有那麼好。
打工和實習其實是很像的事情,我們那時打工的機會遠多於實習所以可以把打工想成另一種形式的實習。
最近台灣的學校實習的機會似乎變多了,像是台灣Google每年有提供不少的機會給在學生,
應徵的人數也蠻多的,這是很好的經驗,學生來了之後可以提早接觸公司是怎麼做事的。
心態方面,學校和公司是有些不同的,公司希望你做某些東西,他是需要有人把這事情完成,
學校目的是要讓你發展,公司也會讓你發展,但公司有他的目標,所以來實習可能會做
一些沒有那麼有挑戰性、可是最後需要完成的東西。能提早接觸這些事情,也比較知道進公
司之後在幹嘛,所以不會覺得和想像不一樣而有挫折感。在大三大四和念研究所時,若有機會很推
薦去找實習的工作,如果去國外更要實習。

10.如果要踏入職場,學長認為應該具備甚麼能力?
我常看到一些文章報導認為大學所學的東西和職場脫節,或是外面現在已經在用甚麼技術但學校還在用過時的工具。這種說法我個人覺得對大學而言有失公平。像專科技職本來目的就是一出去就上手,所以
要追業界最新的標準,但大學應該是讓你學會自我學習解決問題的能力,
尤其在資訊產業技術時時在更新,學生在學校時應該要培養好基礎,
像是很多基礎理論像是演算法和資料結構,你可能覺得他們已經過時了,
可是他們是未來很多東西的基底,很多都由這基礎去發展,
在職場遇到了很多問題,通常不是你在學校會學到答案,更多的時候要去網路上、
書上或自己去思考來找答案,這時基礎的知識很有幫助,這就是大學要給的東西。
學一些實務也有幫助,像是把CC++學好,有一兩項專門且是現在大家在使用的技術,
有助於直接踏入職場,但每個人未來進的公司都不一樣,不會說一定要學會甚麼程式語言和技術,
其實後來再學都來的及,大學時應該好好學好基礎的知識,電腦的理論、網路的概念、資訊的理論,
培養自己學習的能力,就算未來職場用了別的東西,也能夠追上去。
但是有一些還蠻基本的,像是這十幾年內C++C語言應該還是主流,學好還是很重要,像C的指標,
以電腦基礎理論來說,就是對於記憶體是怎麼配置的,電腦是怎樣去管理,要有一定程度的理解,
現在也可說是「不學C無以言」。選擇一兩項語言把它弄精深,畢竟未來是要接觸實務的,
如果只能在腦中想演算法,不能實作是很可惜的事,然後把基礎打好培養興趣並且多練習。

11.學長有什麼做過什麼讓自己後悔的決定嗎?
我的想法是人都會對當初沒得到的東西感到可惜,所以我選擇資訊系、選擇離開或加入哪家公司,
都比較不會對過去的選擇感到後悔。我比較贊同應該在做思考的時候都要多想一會,好好想一下可能得到
和得不到的東西,走下去然後堅持。人生其實不需要後悔,因為選哪條路都會得到一些東西,
不至於到事後會認為當年做了很大的錯誤決定。

12.學長有其他什麼想跟學弟妹說的話嗎?
台大資訊系是個很好的地方,既然在裡面了就不要浪費,好好地做想做的事情,有些人對於學
業沒有那麼熱衷,可以去開發自己的喜好,多多拓展自己認識的領域。
記得我在高中選大學的時候,曾經考慮過要選哪間學校,就有問了一些學長們的意見。
其中一位台大電機系的于學長的建議讓我下了最後的決定:他說在台大的好處就是能遇到非常多厲害的人,在台大、也因為在台北,所接觸到的各種資訊、機會跟知識相對的多。
確實,我後來發現很多同學在各個領域都很有很好的表現,而且跟這些同學的接觸也讓我學到很多事情。
以前看過有個文章,裡面說有個員工問老闆說,為什麼老闆認識這麼多領域的傑出人士,我都不認識,要怎樣才能像你一樣?老闆回答說等到你們這輩當家的時候你就會發現當年的朋友和同學都變成各領域最傑出的人了。
我覺得在台大資訊系這樣的機會是非常的高的,所以好好享受在學校的時間,多多認識朋友,也要盡量讓自己有事做不要虛度光陰。