2007年11月2日 星期五

技術只是入場卷

技術從來都不應該被輕視,但同樣的技術也不是全部,技術單單只是一張門票,一張入場卷,通往特定市場的入場卷,沒有入場卷可以說是 "門都沒有",而有技術只是讓你進入這特定市場玩一回,並沒有保證你的成功,當走進了這競爭激烈的遊樂場,遊戲才正要開始,你還有行銷、管理、經營等等各種不同的課題等著你去努力,或許你會說,我們有的技術比別人高超,是的,這的確使你的門票硬是比別人的大張,但是別忘了隨之而來的各種其它層面的難題沒有因此而不用解決。

因此,從眾人之中脫引而出的方法,就是握緊你的入場票,往各種其它層面的項目努力發展,否則空有一張入場卷,進場玩一回,你會發現你空手而歸。

2007年2月20日 星期二

往熱門集中的現像

國內很常見到一個現像,就是什麼熱門就往什麼鑽,這是一個非常糟糕的現像。

一般人第一個聽到資訊工程、寫程式、工程師,所聯想到的不外乎是科技新貴,是個很好賺的行業,但是,事實並不是如此,賺錢的可以很賺錢,但是只有少數,但賺不了錢的可能卻佔大部份,原因很簡單,其實,寫程式的人不一定是資訊工程學系畢業的,因為大家認為很好賺,所以想分一杯羹,一個人可能在仿間補習班出來自稱會寫程式,接著投入生產的行列。

要知道一個好的軟體並不是程式寫出來、可以跑就成了,一個好的軟體從規劃到寫作、測試、文件撰寫等等都是非常重要的,一個適任的程式設計師豈是在補習班上過課就可以勝任的?這就是造成這個行業整體品質下滑的原因,太多人投入,良莠不齊,那麼多的人自稱會寫程式,分食整個市場,如此激烈的競爭下,價格自然會下降,劣幣逐良幣的後果,就是真正的專業不被重視,在台灣程式設計師的薪水/工作量的值跟國外比起來真的是低得可憐,所以才有很多公司直喊找不到人才,不是沒有人才,而是人才都被淹死了。

拼命往熱門的產業發展,不外乎就為了錢,資訊工程系就是一個很好的例子,想要坐擁高薪,所以讀資訊工程學系,但是到了畢業連程式都不會寫,這樣的例子很常見,整個國家都投入過多的人力在於沒有用的地方,那麼多的人,讀大學的熱門科系,畢業找不到工作,原因很簡單,就是把目標設在所謂的熱門產業上,但是這些熱門的產業真正的產值都在上層,而大家因為熱門兩個字拼命擠進去的只是在整個產業的底層,接著又發生劣幣逐良幣的現像,世代交替,上層的部份因為底層的拖累,下面升上來的部份因此而減少,整個產業的人口結構會呈現一個底層肥大、尖端細小的結構,這就是往熱門鑽所造成的後果。

一個產業,並不是單一某種人才特多就可以生存的,國內軟體產業最缺少的,就屬於管理的人才,一套軟體出來,寫程式的部份其實只佔全部的一點點而已,一套軟體需要的是一個建全的團隊,而不是一群只懂寫程式的黑手,在台灣大家都往所謂的熱門產業集中,特別是理工科系,卻不知道很多工程相關的產業如果沒有管理的配合,發展會是相當遭糕的,軟體工程就是一個很好的例子,大家拼命往以"寫程式"為生的工作鑽,而管理卻沒有人想去理他,這更造成了軟體產業的沉淪,整個軟體產業沒有良好管理的支持,就整個往下攤平,變成一個扁平的結構,就是今天見到台灣有Case沒軟體的慘狀。

再更往源頭追朔,最大的問題出在教育、人們的心態,要解決這個問題,就是放棄以強迫的方式去往所謂的熱門發展,那樣只會造成無謂的人力浪費,更進一步地拖垮整個產業,改以興趣為導向,每個人的興趣都不盡相同,可以廣泛地分散到各種產業上面,人才的結構得到穩定以後,整體才會往上發展,而且以興趣為導向的人才,不會是讀畢業還什麼都不會的人,就算沒能有好的收入,至少那是興趣,而不是一份自己厭惡的工作,將興趣發展到極致,整個過程就是對整體最好的貢獻,金錢只是實現過程中的贈品。

2007年2月19日 星期一

沒有聖經

在很多地方,都有所謂的教條,軟體的教條,寫程式的教條,選擇遵循這些被大家認可的教條是比較保險的做法,但是更進一步地,我們應該要了解教條背後的理由,然後從理由出發選擇適合我們自己的教條,或是自己創造教條,甚至我們可以丟掉教條,全部以環境和目標為考量來做決擇,有一句話這麼說:「盡信書不如無書」,所以保持理性做出決定,而不是將教條視為聖經來看待。

別讓太多的"將來"壓死你的軟體

眼光遠固然是好事,但是很多時候那不叫眼光遠,而是眼高手低。

程式設計師們常常抱著美好的幻想寫軟體,寫著寫著想到這軟體多麼地受歡迎,以及未來好多美好的事物,但是對於一個好的軟體而言,這樣過度的幻想並不是什麼好事,我們常常會想,將來我們的程式需要某種程度上的支援,以至於我們現在就想要把對於將來的擴充性在現在寫好,例如我們有時會幻想,這個程式將來可以移植到Linux或其它作業系統,以至於花很多的精神在於將有關作業系統的部份做抽像化等等的工作。

但是事實終就是殘酷的,程式被寫出來後,真正能夠碰上這種情況其實不多,程式如果沒有更新的話,也許一下子就被淘汰了,當初為了跨平台而做的抽像化就全白費了,因此,我們必需很清楚我們需要什麼,以及什麼是遠見,什麼是幻想,一步一步務實地進行,才是寫程式的王道。

2007年2月17日 星期六

用介面引導實作

很多時候我們會不知道自己該做什麼,陷入一種奇怪的狀況中,腦袋程現一片空白,那是因為要考慮的東西太多,面多那麼多的細節,我們沒辦法在同一個時間考慮到那麼多的東西,所以我們需要將專案切割,以各種面向來做思考,而軟體的目的,就是要給使用者使用,因此以介面引導實作會是不錯的方法。

當介面被製造出來時,我們就可以有明確的目標,每個介面的功能,從外表看起來是怎樣,骨子裡的東西就可以朝合它表面所表現的樣子去實作,這樣整個軟體的概念將會是統一的,而且介面也以使用為目的,而不是製造功能再來用介面來展現它。

2007年2月13日 星期二

將效能花在刀口上

程式設計師的壞習慣之一,就是喜歡以效能當理由,來做各種選擇,但是效能是否真的值得我們去為它賣命呢? 答案是肯定的。但是這並不表示我們為了效能,須要犧牲其它的好處,通常第一個被犧牲掉的是工作時數,很多時候我們為了追求不必要的效能,而花掉了大半的工作時間,回過頭來想,發現效能上的提升所得到的,遠遠比不上犧牲掉的工作時間,因此我們在選擇時,必須清楚地考慮到:

這樣追求效能真的有必要嗎?
這樣的效能是否真的花在刀口上了?
為了效能犧牲工時值得嗎?

寫程式必須先以穩定和安全為優先,接著再來考慮到效能,一個伺服器如果執行到一半會當機,又或著會被輕易地入侵,那麼再快的效能也是多餘的。

沒有銀彈,沒有萬靈丹

在某種程度上,我們都希望能夠擁有各方面考量都最佳解的一個選擇,但是事實上,這樣的選擇並不存在,當你選擇了A,A有可以帶來某方面的好處,但再另一些方面來講,可能就是它的缺點,而當你選擇了B,他可能可以補足A的缺點,但是卻不善長A所善長的,這時候我們就必須做出選擇,例如將兩者結合補足各方面的不足,但是這樣會帶來新的問題,例如程式的複雜度增加,體積變龐大等等,而成功的決策,就是能夠找到最適合的選擇,而不是去要求一個萬靈丹,能夠解決每樣問題的選擇。

選擇的過程往往是困難的,取捨之間,理性、非理性的因素都會影響到決策,程式設計師的壞毛病之一,就是會對於某些選擇有特別的喜好,對於某些選擇有些排斥,例如我們常常對於使用別人寫好的程式碼抱持著一種懷疑的態度,因為那程式碼並不是自己寫出來的,只知道要如何去使用,而不知道其背後的細節,一種"不知道"的不安便由此而生,此時就會產生各種疑文來質疑這些黑盒子,它效率夠好嗎? 它夠穩定嗎? 等等問題,就如我一開始遇到STL,我認為STL速度可能很慢,寧可自己寫資料結構來使用,可是到後來我發現STL效能好得很,就用STL替代掉土法鍊鋼的方式,所以,我們必須盡量以理性的方式去對待選擇。