• 我們在8月號的雜誌上要做一個封面故事,講的是關於這一個時代的軟體工程師及寫程式的這些人,他們到底在做些什麼樣的事情、對臺灣有什麼影響。

    其中我們除了規劃有人物採訪之外,還有規劃一些相關的議題,就像上次有先提供給您的那幾個議題,今天想來請教一下您的看法。

  • 好啊!所以你大概有多久時間?

  • 我們大概半個小時,你方便嗎?

  • 當然,完全是以你為主。

  • 好的,好的。

  • 然後你會錄音嗎?

  • 對,我會錄音。

  • 好,那就交給你了。然後等我一下,我看一下。你看得到我的白板嗎?

  • 好,OK,那就這樣。

    那所以你有四個子題?

  • 對,那我們就一題一題來。

  • 第一個是關於務實可靠的工程師文化,你本來訪綱是一個是非題,就是說我同意不同意這樣子的看法,就是臺灣有務實、可靠的工程師文化?

  • 為什麼會想問這個?

  • 因為正好她(蔡英文)提到這個問題,連帶讓我們想要做這個題目,我們想知道所謂她提到「工程師文化」到底是怎麼樣的一個文化。

  • 所以其實你們這個專題就是想問說這個文化到底是什麼?

  • 對。然後再來她提到「務實可靠」這四個字是不是足以代表我們現在臺灣的工程師文化?以及這樣的「務實可靠文化」是不是足以帶領未來的產業轉型?

  • OK,就三個部分。

  • 在是非題上面,因為臺灣是一個有多元文化的地方,所以臺灣當然有這個文化,臺灣也有很多別的文化,蔡英文這一個前後文的話,她例如還提到完整的產業鏈、中小企業、創業文化、海洋經濟那事實上都是不太一樣的東西,所以我覺得把它作為五、六種她提到文化,甚至五、六百種之一的話,臺灣當然是有這樣的文化,所以只能是「是」,不太可能「不是」,所以比較是修辭性的問題。(笑)

    我們回到「務實」跟「可靠」這二個,我自己對於「務實」的解釋是這樣子:一件事情目前實際上的狀態是怎麼樣,我們一般是把它叫做「實(physis)」,人覺得它應該要怎麼樣,我們應該是叫做「名(nomos)」。這個應該是在紀元前四、五世紀時的中國跟很後面的雅典其實都有過一樣的討論,就是有一派人會覺得所謂的techne就是當時他們叫做「技術」,其實我們現在還是用這個希臘字,或者在中文叫做「工」,這個東西事實上大部分當時的想法是把自然實際的狀況去作因應,然後如果你們沒有辦法因應的話,那其實就需要出現新的技術才能因應它;但是當然也有另外一個想法是說它應該是從應然面,就是我們先設想這個社會要怎麼運作、法律要怎麼去運作等等,我們再去做相應的基礎。而這二個一個叫「務名」、一個叫「務實」,這二個事實上一直在我們做技術或工程師這邊也有「從下而上(bottom up)」設計跟「從上而下(top down)」設計的這二個差別,所以當我們在說「從上而下」的時候,是有一整套以前叫做「瀑布設計法」的做法,這一些你都知道吧?

  • 你如果不知道就隨時打斷我。

    這種「瀑布式」的東西毋寧把它說可能不是「務實」的,可能是「務名」的,就是他認為的事情應該怎麼樣,所以工程師去配合,但當我們說「務實」的時候,我們看的是實際目前可用的資源是什麼、使用者需求是什麼,這在最近十幾年可能叫做比較敏捷的開發方法。所以工程師裡面,這二種方式各有互相消長,而且在不同的產業採用的程度提到不一樣,當你提到「務實」的時候,我腦裡直覺比較是想這種由下而上的這種設計方法,這種設計方法在軟體裡面是到最近十幾年才主流,先回答對於務實的這一件事。

    你說這一個現在慢慢開始去主流「bottom up」的設計,它是否已經成為文化,我覺得是啊!它確實是一個文化,但我會補充說是工程師文化裡面的次文化。

  • 這一部分還好嗎?有什麼要追問的嗎?

  • 好,繼續。

    「可靠」這邊,因為我自己是做資訊科學,所以其實我對於別的領域工程可靠性並沒有研究,所以我接下來就只能從資訊科學的角度來講。

    我們在資訊科學裡面,我不曉得你知不知道有一個協定叫做「TCP(Transmission Control Protocol)」,等於在網際網路上面最常用的一種協定,電腦最常互相討事情的一種方法,就是把二台電腦連上去的方法。這一個TCP在設計的時候就是有一個「可靠性原則」,業界叫做「Postel法則」,這個法則非常簡單地講是「Be conservative in what you do; be liberal in what you accept from others. 」,就是你自己做的事情盡可能容易預測、盡可能地保守,但對於接受到別人所做的事情盡可能地開放、盡可能地什麼都接受,所以翻成中文的話,我不知道耶!可能就是自我要求比較高,但要求別人比較沒有那麼高,就是「嚴以律己,寬以待人」。

    這個東西為什麼會變成我們在二份很重要的RFC(設計網際網路的標準文件),3117跟7282裡面都把這個當作重要的因素,是因為要求自己是做得到,但在網路,尤其是網際網路異質性的環境,「inter-」的意思是你把各種不同性質的網路連在一起,在這個時候可靠有二種方式,一種是我們剛剛講的「瀑布式」的,就是你要求所有連上的網路都要用相同版本的作業系統,基本上再用相同版本網路堆疊都要說相同的話,那就是所謂「同質性的解決方式」。

    但是為什麼我們現在的internet是用TCP,而不是用TCP之前的很多同質性AT&T系統或Telex系統或別的系統,是因為那一些系統的可靠性是建立在不可靠的基礎上,好比你有一個新的版本出現,就希望全世界都馬上更新到那個版本,那是不可能的;反而是這一種異質性或多元性的這一種軟的可靠性、bottom up的可靠性,被證明在四十年的網際網路發展裡面這樣才是真的可靠,也就是要求自己可靠,並不是要求別人。同樣的,我會說這是一個次文化,不是所有的工程師都有這樣的文化,尤其我們做資通訊,資通訊的「通」部分,我們會特別在這一種定義下的可靠性。

    這有問題嗎?再追問嗎?

  • 其實我們會想要問這個問題,還有另外一個原因,因為我們一般聽到「務實可靠」這四個字會聯想到是不是比如做事要一板一眼、遵循這樣的邏輯在做,這樣當然沒有不好,但是不是少了一些創意或創新思考的部分?

  • 你剛剛提到的「一板一眼」事實上是所謂的同質可靠性,大家都遵循同一個標準流程,這如果你不需要跟別人通訊的話,那當然也許這是行得通的;但我剛剛說我們做資訊科學裡,做網路的是奠基在通訊上,只要是在同一個通訊有超過一個人環境的時候,其實這個同質的可靠性,你剛剛講的一板一眼其實是不可靠的,我們會說是脆弱(fragile)的。

    我們這邊說的可靠性,英文是「robustness」,很難直接翻成中文,所以我就不翻了,但它的意思是即使是別人犯錯或者是你的犯錯,即使情況有所改變、即使實際的部分每天的狀況可能跟前一天都不一樣,但我們對環境的要求少,我們對自己的要求高,所以我們反而可以很彈性地應變,所以這個我覺得比較接近不是一板一眼,可能跟蔡英文講話裡提到「中小企業敏捷、靈活、創造性」的這種可靠。

  • 下一題的字面是現在很多的業界都以技術作為他們轉型的契機,但工程師卻很少被放在決策的高度,「決策的高度」的意思是什麼,可以多說一下嗎?

  • 像我之前有採訪KKBox,他們是說他們的工程團隊在他們公司裡面所佔的角色與地位都是非常高的,所以就是轉型以技術為核心。我不曉得是不是所有的企業都是這樣的狀況,如果讓工程師站在企業的核心帶動整個公司轉型的話,是不是會比其他的公司更好?

  • 所以這邊聽起來的意思是,並不是完全以工程師的方式來治理,而是具有決策權或議程設定權,傳統上是董事長或總經理的位置,轉而讓工程師去參與,是不是這個意思?

  • 我想是這樣子的,我覺得當然本來在決策的這一個團隊裡面,本來就是盡可能多元不同訓練的人會最好,這包含不同的養成背景或訓練或社會階層的人。因為你越多元,你的使用者才能越多元,越同質就越無法反應實際上社會的狀況,所以我覺得工程師當然是多元裡面的一元。如果傳統上很缺乏工程師參與決策的企業,當然把工程師帶進去絕對有好處;反過來,如果已是工程師主導了,帶進一些不是工程師的想法也會有好處,所以我覺得重點在於多元性上面,這是一件事。

    另外一件事情就是說,因為你剛剛提到KKBox,KKBox的一個特性是會非常注意目前我們現有的開源技術,「開源」的意思是不管是大小公司都可以使用的公用資源,我們叫做公有地(commons),這很像一個生態系或是一個生態圈,哪裡突然間冒出土地不曉得什麼時候肥沃了,就像游牧民族一樣到那邊去,因為那邊有大家已經建立好的生態系,去那邊的話,可以節省維護成本、開發成本、人力成本,在zero-cost沒有成本的情況之下,當然你不管做什麼創業或創造或創新,它都可以,因為你可以試一千個主意,九百九十九個失敗了,一個成功,反正沒有成本;但如果不運用這個commons的話,什麼都要自己做,你試一千個,可能沒有辦法,因公司的資本額,你只能試五個,若五個都失敗了就玩完了。

    所以我覺得另外一個重點是,這裡特別講的技術是能夠有效到降低成本,甚至是到達零成本的技術,開源技術是大宗,我覺得這也是轉型的契機。這一題還有什麼想說的嗎?

  • 另外一個的話,想請教你就你的觀察,目前國內外有哪一個公司的做法足以作為臺灣企業參考的嗎?

  • 我不是很理解這個問題,臺灣那麼多企業,每一個企業能參考的當然都不一樣。

  • 因為現在大家可能有些企業面臨他們想要轉型,但好像有一點轉不過來的感覺,除了剛剛提到KKBox之外,在你心目中,有沒有哪一家公司他們導入工程師、把他們拉到決策高度,這樣的做法還滿好的,可以作為一些想要轉型企業的參考?

  • 因為我覺得每一個產業別能夠參考的都完全不一樣,所以這個問題很難輕率地回答。

    我剛剛所說的是完全如果只講應用資通訊科學(Applied ICT),當然最近轉型最成功的例子應該就是微軟了吧!它其實是一個資本額非常大的上市公司,但之前有人講說在Steve Ballmer底下會變成下一個IBM被時代淘汰掉的一家公司。IBM當時是轉型成了服務業,但也花了非常久的一段時間,才看得出效果。但我覺得微軟轉型花的時間特別短,當Satya Nadella上來之後,他就說:「我們擁抱開源,我們所有東西只要開發相關,核心的東西都開放出去,現在我們甚至在Windows裡面內建Ubuntu Linux。」

    之前凡是他們那種從上而下覺得「我一國,你一國」或是戰爭性的切割性、領域性的東西,這些修辭他完全不用,他完全用實際目前的開發者需要什麼,即使不是自己人開發的,沒有關係就開源跟採納開源技術,讓它直接導入到微軟的生態系,微軟專心去做資通訊科技應用的這件事。

    我覺得在這個領域裡面算是作得相當好,也包含它內部的文化也都有很大的改變,本來有點像公務員考核機制那樣的東西,但現在變成內部創新這些,當然這有管理學方面專門的書,而且沒有辦法在這麼短的時間講這麼多,但如果在應用資通訊領域的話,是可以參考微軟的例子;但在任何別的領域這個就不適用,所以這個也是要先講的。

  • 這邊OK了,謝謝。

  • 好,繼續。

    下一個這個我沒有很看得懂耶!這個你講的比較接近是在家上班的這種事情。

  • 對,或是專案外包的方式。

  • 哪一個是哪一個?微型化是專案外包?

  • 對,虛擬化等於是在家上班,不受地理環境限制。

  • 也就是我們叫「電傳勞動(telework)」的工作方式。好的。

    因為我自己其實已經快要忘記微型化、虛擬化之前是什麼這樣子(笑),我從出社會是1995年開始,就是可能比較混合式,大部分時候是在家上班,從2008年開始就完全是微型化、虛擬化,就是完全不去辦公室了,到現在大概也有八年多左右的時間,所以我這邊講的就是非常個人經驗,就是對我自己的影響,因為很多公司其實會想要員工去他的總部上班。

    舉一個例子來講:像我合作的一家企業,我在2011年的時候,當時還算是一個開發者的身份進去,後來才慢慢變成顧問,但這家公司的特性就是他很希望員工都希望能在辦公室上班,但因為我一直拒絕這件事情,所以變成這家公司裡面,因為他們已經不會再hire這種電傳勞動者,我好像變成碩果僅存的獨立合約顧問角色,當然跟企業文化是拉鋸的,但至少我是用我個人在Apple跟Socialtext(現在變成 Peoplefluent了),就這二家的經驗稍微描述一下。

    我覺得外包對工作者的影響,是從我們叫「同步作業」變成所謂的「異步作業」,舉實際的例子就是好比像品質管理在印度,界面設計在加拿大,我在臺灣,所以就會變成他必須把設計已經都寫到可能八、九成完成,等印度醒來之後討論一下就去睡了,在印度的朋友醒來之後就要從設計師的東西轉換成故事測試(Story test)。所以我們一開始有一個界面設計,然後它被轉譯成對使用者經驗的描述,然後我在臺灣醒來,可能就是跟在印度的朋友開始討論出一個系統架構,讓它可以實際施作出來。

    如果我們是同步作業,也就是三個人在會議室開會的話,我們只要談到我們三個人腦裡有一個相同的圖景就可以了,因為我們是一個團隊。但因為我們現在是異步作業,結果就是我們會產生很多artifact,我不知道中文要怎麼翻,意思就是過程中的產出,也就是說每一個部分它都要變成「即使寫這個人的去睡了,剛醒來的人可以靠自己的理解,就搞懂當時他腦裡的狀態」,所以我們經過幾年下來都非常擅長於表達,也就是把自己腦裡的狀態在睡前文字化或畫成白板,然後在下一個醒來的人在最短的時間之內理解。

    所以透過這樣異步循環的好處,是它可以變成我們一個叫做「學習型組織」的材料。

    為什麼?因為中間這些東西都不需要付出認知成本就可以理解,所以旁邊不相干的同事,他可能剛進來、可能是新人,可能並沒有參與這個專案,但看我們不斷進行的這一些共筆產出的時候,他無形當中就學到我們做事的方法,我們就不必再特別辦新人培訓,他就等於是參與了這整個過程,但我們如果是三個大頭關在會議室裡面開會,其實旁人是沒有辦法學到任何東西。

    所以我覺得微型化的特性,不管是透過小公司之間的策略聯盟,或透過大公司裡面異步分組,變成一切的東西都有中介的工藝品,這樣的產出可以變成更廣泛學習型組織的基礎,這事實上是國際開源社群他們一向工作的方法,在開源工作裡面就是跟著linus、rms、matz這些人,他們每寫一行程式,他們可能一小時就會公布到網際網路上面去,所以等於每個小時跟著他的思路走。如果他是自己閉關一年再放出來,你不知道一年是如何經過思路到達這個位置,所以我覺得「過程的公開」,是微型化對工作者最大的影響。

    對於企業的影響,我覺得比較沒有那麼快看出來。當一個企業慢慢從同步作業變成異步作業的時候,是會影響營運結構,因為傳統上為什麼會有科層組織?好比以前只能打電話的時候,電話一次只能對一個人打,如果要傳達訊息有點像是要寄國際郵件的時候,確實透過郵局寄到總局再轉到別國再派到他們的市,用這種方式確實有網際網路之前是最快的方式,如果只能打電話的話,電話打給老闆,老闆再打到大老闆,大老闆再打到別的合作公司,再往下丟給承辦,這是當年比較容易的。

    但自從有網際網路之後,點對點中間的聯繫成本事實上是比較低的,但企業科層的設計往往並沒有把這個考慮進去,並沒有考慮到現在不但發一封信給一百人是很容易的,從一百人收問卷回來也是很容易的,本來的設計是單向連結,但我每一個虛線都是雙向連結。所以我覺得微型化對企業的影響是,慢慢的企業可以擺脫中介管理,就是中間管理層會消失,所謂中間管理是人型的集線器,如果把通訊設置成雙向、點對點,其實就不需要人型集線器的那一層。

    所以我覺得像蘋果其實這部分做得很好,我當然沒有辦法講細節,但就是逐漸變成了在企業內部不需要中間管理層,也沒有什麼陞遷梯子(幾職等),每個人在自己最適合的那一個位置,他旁邊的通訊結構會幫它設計好,這也是花了很久。

    微型化這個部分大概就這樣,有沒有什麼想追問的?

  • 虛擬化就是「電傳勞動」,我覺得對工作者其實只有一個影響,也就是生活品質變好了,其實除此之外就沒有什麼別的影響,它就是讓大家生活品質變高了;但另外一個好處就是我覺得大家會有一個叫做「發生即典藏」。什麼是「發生即典藏」?如果我們二個今天採訪是面對面的話,我們還要記得把錄音機打開,可是因為我們現在是透過電傳視訊在見面,所以對我們來講,捕捉這個訊號其實沒有額外的成本,因為這個訊號我們本來就要產出了,只是因為典藏變得很容易,因為所有發生的事情都可以典藏的格式發生的,所以這回來到學習型組織這邊去。

    如果你有很好的會議設計,你在實體的場域也可以做到一樣的事情,並不一定要靠虛擬化,但虛擬化是會加速這一件事的發生,這是對工作者及對企業的二個影響:對工作者當然生活品質變好了,還有更容易我們所謂的微創型,也就是自己採用想要用的那一個比較好的工具,他不需要去改變辦公室,而是改變自己的家裡;另外一方面企業因為透過「發生即典藏」的通訊模態,所以企業的過程產出都很容易被捕捉下來,同樣的也可以更容易,即使不往外成為開源企業,也可以往內開源,變成所謂的學習型組織。這點OK嗎?

  • 那我們往下。

  • 這個是最後一個問題。

    最後一個問題,其實現在這個問題是社會有一股潮流要鼓吹大家都要學程式,當然學習程式並不是一件壞事,大家要多瞭解不同的事情,但並不是每一個人學習程式之後就適合成為工程師,我們在想是不是有怎麼樣的人格特質特別適合做這樣的角色?

  • 我是覺得因為其實這已經限縮了,你把工程師直接限縮到軟體工程師去。

  • 其實軟體工程師是所有工程師裡面,最不像工程師的工程師。我們常常說軟體工程師是「凌空建造,憑空建造」(building in the thin air, from the thin air),我們做的東西完全沒有物理基礎之外,我們制作的材料也沒有物理基礎,完全只使用文字跟數學,不使用別的東西,而這二種東西都完全是符號。在任何別的工程領域,都要受地心引力、受物理法則、受材料等等的限制,只有軟體工程師除了運算速度受硬體限制之外,其他東西都不受限制。所以其實我不是很確定我要回答的,是一般的工程師人格特質,或是特別只講資訊軟體工程師的人格特質。

  • 我們這邊比較著重在軟體工程師這一塊。

  • 在軟體工程師上面,其實第一批最早軟體工程師大部分是數學家,像「computer」這個字本來其實講的是作為運算的人,並不是講電腦,而是後來機器做得特別好,才變成電腦。

    所以當時第一代的資訊科學家們,他們自己在檢討時,他們都是說他們的數學很好,像Dijkstra教授他會說:「除了數學當然要好之外,決定工程師可以走多遠,就是你對母語掌握的程度,就是你的文字能力多好」。因為其實不管我們寫程式,還是我剛剛講的那一些中間產出,除了讓機器懂是最低要求之外,你要讓人能懂,若不能讓人看懂的話,一個人能做的事情其實是很少的。如何讓五、六百個人能夠同時看懂一個東西?那是最基本的閱讀跟書寫的能力,也就是我們所謂的表達力。

    所以一個人在母語表達裡的表達力多好,就決定他的思路可以多寬。他可以思考多複雜的架構,同時還能夠讓別人理解,就決定了他在資訊科學或軟體工程裡面走多遠,所以第一代的人反思都在講文字能力,幾乎是完全跟數學能力一樣重要的:二個是不可或缺的,如果二個缺一個是走不遠。

    當然我們今天做的是有點反過來,我們會邀請文字能力比較好的人,作傳播或者作行銷的朋友回過頭來學軟體工程,其實他們的文字能力已經中上了,至少看書絕對沒有問題;但反過來可能要補足一些數理邏輯的訓練。

    我是覺得數理邏輯也並不是工程,它其實就是一種思考方法、語言,我覺得這一種東西的掌握,並不需要學微積分或是高深的數學,實際上是我們教小孩七、八歲以上就可以瞭解的,我覺得這對人格特質並沒有特殊要求。但反過來如果同時掌握數理邏輯跟文字表達理解能力的話,軟體工程師當久了,人格特質會有所轉變。

  • 會轉變成什麼樣子?

  • 另外想說明的是,我覺得反而不是說你先挑哪一些人適合學軟體工程,我的意思是幾乎任何人能夠聽說讀寫,基本上都能學會軟體工程。所謂當軟體工程師,可能就是你業餘的興趣,就像我們學吉他或學小提琴,裡面跑去演奏廳或組團的人,一百個人裡面有沒有一個人?但這不影響你每天花半小時彈吉他讓自己高興。我覺得從很多角度來看,軟體工程就是一種樂器,只是它的音符可能是文字跟數學,演奏出來的東西可能變成人互動的空間,但從我們在練習它的人的角度來講,跟它跟任何一種別的樂器並沒有什麼兩樣。

    一個樂器你玩久了,它當然對人格特質有影響,所謂學音樂的小孩不會變壞,就是這個意思。好比有侵略性、攻擊性或生活上有所不滿或有所擔憂,它讓你有一種表達的方法,可以轉化為藝術,一方面你自己心理比較平靜,二方面做出來的東西對別人是有價值的,有一些美感上或應用上的價值。

    當你掌握了任何一門樂器,包含程式設計,到達你覺得得心應手程度的時候,負能量就會有一個出口,慢慢就會掌握到創造、昇華的原則。

    其實我覺得比起別的樂器,可能僅次於聲樂吧!軟體工程師最不受時間跟空間的限制。一把吉他或一把琴,你還要找其他地方放、還要擔心會不會吵到鄰居,如果畫油畫還要買顏料之類的。但是除了唱歌是身體內建的樂器之外,我覺得軟體工程師特別不需要額外的投資,任何時候都可以做藝術,而我覺得跟任何藝術一樣──做久後,人格特質就會改變。

  • 我有一個滿好奇的是,你剛剛說人格特質會改變,假設一個完全沒有接觸過程式設計的人,接觸之後會有什麼樣的改變?

  • 要看他本來對於文字跟數學這二件事情的附屬情感。

    如果他一開始是很怕數學,或覺得數學是遙不可及的,程式設計提供一個方式,讓每一步犯錯都有電腦幫你檢查。這等於不是一個很陡的坡,而是非常緩的坡,就可以一小步、一小步掌握數學。當然在學理上,這樣可能只能掌握離散數學,但離散數學也是數學的一個大分支,就可以透過這種方式完全理解。

    這時我覺得很多對數學的懼怕,或對於一下子看到數理報告的距離感,會因此而消失。我們很多做資料新聞學的朋友,因此會發現數字是他們的朋友,並不是他們的敵人,從而拉近於對於資料的距離。

    反過來,如果數學很好,但表達力不好的人,也就是比較宅的朋友,我覺得他會比較願意與人相處,比較真的能夠聽懂別人在說什麼。因為透過異步的關係,等於是在一個比較安全的方式練習,就像在臉書上面,你看到別人寫的字是五小時之後才看到,並沒有「他正在生氣,要立即去處理」的問題,但你還是看到了他當時的心情狀態,所以你還是可以想說這個要如何處理。這有一點像是練習場合,等到對這個足夠嫻熟之後,在同步的狀態底下,別人表達出來的東西,你就比較有處理的能力,而不會是一下突然間就手足無措。

    就表達力跟通訊力來講:一方面是實事求是、比較能夠跟數字說話,另外一方面比較有表達力且可以處理其他人的情緒及感受。這邊就這樣?

  • 嗯,那這邊,我問題都差不多了。

  • 好,那這樣子也快40分鐘了,所以你會把錄音檔寄給我,對不對?

  • 然後我再把它轉文字給你。

  • 好,今天謝謝你。

  • 好,掰掰。