最近的周邊有很多出人意料狀況出現, 第一個是某學弟堅持要用ASP 寫出一整套的EC平台, 雄心壯志的要包含Payment 機制, 包含後端金流跟物流的管銷. 他找上我詢問關於RAS 上的API 實作跟資料交換的安全性問題. 我先是很簡單的就我所知道的部份跟他作了解釋, 然後順便問了一句, 為什麼選用ASP 呢?
他說, 因為在ASP 上, 什麼需求元件都有solution了啊!
我心中一陣酸楚, 這不就是幾年前的我嗎? 接著又是一陣冷汗, 這會不會是幾年後的我看現在的自己呢?
現在也才慢慢感受到, 這個行業中, 技術迷信是一件很恐怖的事情. 科班出身的人, 在學校學了整整四年(或以上)的C/C++ , 熟悉OOP , 也熟悉了資料結構和演算法. 但是這樣子的人才真的可以適其所用嗎? 其實很難! 有個很淺白的例子, 有次作某新聞社的案子, 他們需要有能夠failover電訊傳遞系統, 也就是說, 必須有兩台server, 其中一台待命中, 當主要機器資料無法傳遞進來時, 主機器會給副機器一個signle, 讓副機器用另外一種方式去抓取資料; 當主機器復原時, 副機器要有辦法停掉讓主機器繼續運作. 熟悉網路的人, 幾乎都會選用兩方作socket通訊的方法, 而科班出身的人, 不但會選用socket, 還會規畫protocol, 寫white paper ,然後搬出RFC 的sample code 開始硬底子寫FSM 的server端, 寫select的client端….這些種種都看起來正確, 結果一個很資深的工程師的意見是
“直接用Perl的libwww走80 port溝通就好了….”
多麼直覺的解法! 我相信一定有很多人會嗤之以鼻, 不過這位資深工程師可不是不懂這個喔, 他可是有底子有能力的人. 為什麼一個有底子有能力的人會作這種的決定呢? 有次我私底下問他, 他說工程師不能流於技術迷信, 選擇好工具去做適合的事情才是工程師的正途.
這只是一個例子, 卻可以涵蓋很多部份. 最近各大ASP 公司都在走purejava的路, 動輒JavaBeans , Application Server等等, 但是深究來看, 拿這些東西作的事情都不是Java或Beans 的主要用途, 反而是給這些工具作不適當的應用, 換句話說, 好比拿著菜刀剪指甲一樣.
同樣的情形也發生在backend 的選用上, 有人知道Oracle好, 就一味的認為只要用到資料庫, 就是用Oracle, 但是太多的例子根本不需要資料庫, 或者用其他功能較少卻更快速的東西就能完成. 這樣的狀況層出不窮, 多不勝舉.
技術迷信不單只是白做許多不需要做的工, 白花許多不該花的時間而已, 更可怕的是在IT產業的發展偏執! 用不適當的工具可能會產生更多危險跟效能上的低落,進而影響到同事間或是同業間的競爭力.
所以, 我只能說, 選擇適合的工具做適合的事情, 會是身為IT工程師的必備能力. 解MIME用C/C++ ? 作multithread 用Perl? 作Data Mining 用Java? 寫EC平台用ASP ? 這些都會成為笑話….
多方瞭解各種工具, 才不會成為技術迷信的鐵齒工程師….