Tag Archives: 技術

技術應為服務而生

在前面的一系列文章裡,我發現有些人有些很有趣的想法,有些人覺得使用Windows是很落後的事,或是要用vim、gcc、gdb來寫程式才顯得有技術,我自己也是從小玩技術長大的人,事實上我很能理解這樣的想法,或著說我以前也是這樣的想法,但後來漸漸地想法就改變了 在大學時有位組合語言很強的傳說中的教授,他的組合語言課真的很令人印相深刻,他從來不帶課本,一上台就開始畫圖,然後用很粗俗易懂的例子講解,可以看得出他對低階的這塊領域實力有多深厚,有一次他在上課談到 我以前在做賭博電玩時,有人來跟我推銷繪圖晶片,可是我跟他說,不用,我覺得自己寫一個pixel一個pixel畫才有技術 可是後來發現別人用繪圖晶片來畫圖,一下子就做出來了,我還在刻低階的繪圖功能 後來因為這樣做不過別人就不做了 聽了之後仔細想想我自己也是這樣的想法,以前在寫遊戲時最初是用Direct Draw,後來覺得使用現成的函式庫沒什麼技術,在之後重寫的版本中,就自己寫畫圖的函式庫,一個pixel一個pixel去填,半透明混色也是自己去算,甚至想自己寫3D的繪圖引擎,雖然確實在這過程中學到很多東西,但事實上整個寫遊戲的過程中有好一大半的時間是花在底層的這些基礎繪圖功能上,後來漸漸理解,重覆利用別人做好的輪子是很重要的事,只因為覺得 “那樣才叫有技術” 而去自己做別人已經做好的東西是很不成熟的想法,後來我終於理解到 技術只不過是在工程中完成目標的手段,並不是最終的目的 除了技術以外,事實上在整個軟體的工程當中,還有太多值得注意的事,從你學習那項技術需要花多少心力,技術相關的社群,如果你是商業公司還得考慮到有沒有支援商業服務,還有你用這項技術的話能不能找到人來接替你的位置? 你用了這項技術生產力有因此而提升嗎? 以先前提到的例子,用gcc直接下指令編譯,用gdb下指令除錯,你的生產力有因此而提升嗎? 為了從一般的IDE環境下切換到這樣的環境需要多少的學習成本? 如果你找一個人來接續你的工作,他是否有辦法像你一樣熟練地使用這些工具? 如果你要教新來的人熟悉你的環境,你需要花多少時間? 我相信,大部份提到要使用這些工具的人都沒想過這些問題,這很正常,因為他們熱愛技術,但是實際的工程應用這些都會是很重要的問題。 人適應工具 而在這些提到的一些工具中,有個很極端例子,那就是vi/vim,我自己有用vim,因為打大量程式會比較有效率,或在Linux下改程式都得用到,為什麼說vim是很極端的例子,因為它的設技概念與我們一般常見的IDE是相反的,一般的工具都是設計工具來適應人,然而vim卻是設計工具要人去適應它,因為如果需要打大量的字,手一直保持在鍵盤上是最有效率的,所以它設計讓你手都不用離開鍵盤,就能進行所有的操作 Vim cheat sheet 來自 http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html 當然,缺點是它的學習曲線很陡,在一開始你可能打幾個字都會弄得灰頭土臉,身為技術人員如果你覺得打大量的字是很常有的事,這投資是值得的話,學一學vim確實是不錯,但推薦初學者學vim就不是什麼好事 所以,當你很興奮地覺得這個東西才算有技術,或著是開源萬歲之類的理由,推薦給別人時,想想你自己花多少時間學這東西,別人又能因此得到什麼好處好嗎? 而當你開始設計產品時,你想想如果Apple的Macbook廣告詞是 經過三個月的練習,使用我們的系統工作效率提升了50%!! 你覺得還會有人買這樣的產品嗎? 工具適應人 另一種設計的想法,也是主流的設計思維就是讓工具去適應人,大多數你能在市面上看到的產品都是這樣的設計,我們舉一些例子,Visual Studio最近推出了一種新的UI,叫Debugger Canvas,是將整個debugging trace的過程以泡泡視窗的方式串聯在一起,讓你可以很直覺地理解程式呼叫的過程 [yframe url=’http://www.youtube.com/watch?v=3p9XUwIlhJg’] 有這樣視覺化的輔助,除錯的過程會輕鬆許多,在有現代化工具可用的情況下,除了學習以外的炫技理由堅持使用原始的工具,就只是浪費寶貴的開發時間而已 再舉另一個例子,就是git或mercurial在送commit之前,我個人都會對送出的內容review一次,以免將測試用的程式也送進去,例如像是這樣糟糕的例子 def auth(user_id, password): # … Continue reading

Posted in 中文文章, 嘴砲 | Tagged , , | 16 Comments