2014年1月17日 星期五

2014年了,我們的銀彈在哪裡?

在大學時期,我曾短暫接觸過網頁技術。

當時我們有門課,其中教的是網頁的基本語法(也就是所謂的html),另外也有涉足到一些Flash
在當時,其實我認為我算學得不錯的了,即使我壓根兒不知道什麼叫網站程式。
畢竟那時大夥兒都還停留在 web 1.0 的思維階段,寫寫靜態網頁、用Flash跑跑動畫大家也就很高興了。
程式?有的,我們教了 C 語言,學校也教了我們一點點做 3D 遊戲的基本程式。
但其實當時的我,根本不知道這些東西是拿來幹什麼用的,所以總是對這些課程興趣缺缺。
這部份就這樣被我給放掉了,畢業後當然也從沒想過要用走這一行,以寫程式換飯吃。
一直到我從澳洲回來,進入資策會重新學了半年多的網頁程式技術,我才重新認識了程式設計。
也幸好資策會的課程規劃裡,是用了比較簡單易懂的程式語言(PHP)作為入門,挫折感沒那麼大,我才能繼續念下去。
因為 PHP 天生的特性,讓程式很快、也很容易就能得到回饋,也就是說只要你把環境設定好,程式寫了什麼,馬上就會在網頁上秀出來給你看成果,這大幅增加了學習上的成就感。
不像以前學的 C 語言,寫了半天還要去給它編譯,編譯完了就在螢幕上秀出幾行字...然後呢?沒了!
如果你要做個有畫面有特效的應用程式,那可不是初學個幾天就能搞定的了...

當然,C語言雖然不像表面上那麼方便,但它的彈性相當的大,甚至可以寫出一個新的程式語言都沒有問題,無論是在效能上與用途上,都與 PHP 是不同等級的,但學習上就必須多花點功夫了。

半年的受訓很快的結束了。
2013年初,我進入了某知名網路公司,擔任網路程式設計師一職。
經過了一年的時間,對網站技術絕不能稱已經是精通熟練,但也至少脫離新手村有一段距離了。
前陣子,偶然在網路上看到這篇,裡頭介紹了許多軟體工程相關的必讀經典。
其中的一本,人月神話,前陣子在圖書館剛好有找到,當下就借回家來細細品嘗一番。

看完的心得,以後有機會在寫,這一篇不是讀書心得。
我提到這本書的原因,是因為作者(他算是軟體界大師級的人物了)在書後附了一篇名為沒有銀彈的文章。
有關於這篇文章有多麼的有名,在此就不贅述了,你或許也可以在網路上搜尋到這篇文章的全文。
它的大意就如同 wiki 上寫的,軟體工程無論如何的發展下去,依舊『不會有任何特效藥』。

所以作者在文章中表明,不會有那麼一天,我可以直接把需求說出來,電腦就會自動產生程式與軟體來解決我的問題,這完全是癡心妄想。

許多人在這篇文章公諸於世之後,紛紛提出了自己的見解與主張。
有人同意、有人不同意,而我呢?老實說程式資歷這麼淺、各種技能也都還沒熟透的我,根本沒資格去討論什麼。

但在玩了網站程式一年多之後,我越來越傾向去同意,沒有銀彈這個理論,至少在網站技術這一個領域上來說。

如果要針對程式本身的進步與方便性來講,銀彈確實是慢慢的製成中。(但還沒完成!)
比起10年前,現在要寫一個可以跑程式的網站,實在方便太多太多了。
我根本無法想像,以前如果沒有這些方便的程式語言時,要用 C 語言來寫網站該怎麼做。
雖然技術上來說絕對是做得到的,但我的學習時間恐怕要比 PHP 在長個兩、三倍以上,效能也不見得會比 PHP 自己幫我處裡來得好。

所以如果要稱 PHP 是網頁程式設計上的銀彈,以某種角度來說,確實是如此沒有錯。
你可以省掉超級超級多的心力,去開心的建置一個網站,好好發揮你的想像與創意,不必拘泥在那些細節上。

但是,以一個已經身陷於專案之中的工程師的角度來說,真的是如此嗎?

對,PHP是很方便沒有錯,但程式是不是還是得寫?
當網站功能一多起來,麻煩的地方還是麻煩,問題還是一堆問題。
這些問題或許不是像古早年代,那種記憶體溢位、或是資料型別錯誤那樣,但是在程式整體結構上依舊是一片狼藉。

為什麼會這樣?因為『需求』阿!

需求本身造就了麻煩的程式,不斷變更的需求將會導致程式的複雜度與日俱增。

這是所謂作者所說的程式『本質性』的問題。
如果今天我們只需要知道 1+1 等於多少,那當然簡單阿!
但偏偏人的需求千變萬化,甚至很多時候連我們自己想要什麼,我們自己都說不太清楚了,更何況寫程式...

再來是『附加性』的問題。
程式的部份,老實說算是還算容易的了。
雖然很多架網站的環境已經先進到可以讓你一鍵上線,但如果你要依照自己的需求效調東西,那又另當別論。
程式的部份看看那個跨瀏覽器問題...
可能一段 JS 或是一段 CSS(這兩樣都是建構網站不可或缺的東西),在 Chrome 跟在 IE 上跑起來卻不一樣?

怎麼會有這種事情發生?

現在讓我們以一個普通人用普通的思考方式來仔細想想看,2+2 等於多少?
答案很簡單對不對?
但如果有天某一個國家公佈 2+2 等於 5,那該怎麼辦?行得通嗎?

當然行不通!

但令人難以致信的,現在網站的技術就是這副德行!
在真實世界裡已經發生了 2+2=5 這種事了!

現在的網站對 Chrome 來說可能 2+2 是等於 3、而 FireFox 可能等於 6、另外 IE 又是等於 500
各自為政的結果就是讓所有網路從業人員一個頭兩個大!浪費了許許多多的時間,用各種奇奇怪怪的方式去解決這種根本性的問題!
這整件事從一開始就有問題。
原因呢?當然是因為所謂的利益阿!
當技術伴隨著過大的利益而持續演進時,簡單的事情就會變得麻煩,快樂的事就會變得痛苦。
各大知名網路公司推出自己的瀏覽器,只支援自己的技術,讓別人都不用不得、或吃不到、或跟不上,心裡想得是怎麼樣才能從中獲取最大利益,做的盡是些阻礙技術發展的垃圾步!
這就是為什麼已經到了2014年了,網路技術的銀彈卻還是生不出來的原因!
試想一下,如果大家全體達成共識,將技術與利益分配給說好、談好,然後各自為了那一方面而努力,今天跨瀏覽器的問題會是問題?
更不要說其實這種鎖國政策的技術發展根本也沒讓你賺到多少錢,卻得賠上千千萬萬的技術人員寶貴的時間與金錢,浪費在不必要的事物上。
我承認上述的技術世界烏托邦思想有點太過一廂情願,但我真的認為,即使是從商業利益面來看,各自為政的網路技術策略絕對沒有同心協力來得好賺!這是我敢百分之一百打包票的!
可惜那號稱個個都絕頂聰明、頂尖大學畢業的CEO或是創辦人們就是選擇對這個問題視而不見。
不管再多少個十年,我認為都不會有銀彈產生。
甚至還會有人主張要將銀彈摧毀,而且這是現在就在發生的事。
為的就是那點私心,技術人員終將活在一個充滿錯誤、挫折以及滿是荊棘的世界之中。

我或許太悲觀,但是面對越來越多的新技術、新標準、以及大型公司的商業策略與發展,我實在無法眛著良心說,我在網路技術的領域中,已看見了光明的未來。