寫書計畫 – 追求神乎其技的程式設計之道

人生中很多事情做起來總是比看起來難,不親身去做永遠也無法體會其中的辛酸。最近有出版社跟我聯絡,想幫我把blog內容整理成書,很湊巧的是我也動過幾次這個念頭,所以也沒想太多就答應了。目前我的計畫是把「追求神乎其技的程式設計之道」系列文章重新整理,並且把後面還沒寫完的連載繼續完成補在書內。雖然是這麼想,但光是要擬定書籍結構就讓我和編輯們傷透腦筋。之前我在寫神乎其技系列時,把我個人的經歷以及對於程式設計一些相關的想法混合在一起,其實就是很隨興的寫。但說到要成書,事情就沒這麼簡單了。首先第一個問題就是,什麼樣的人會對這本書有興趣?是初學程式的人,還是有點經驗的人,或者是程式高手呢?之前曾經有讀者留言過說看了我的文章後都燃起熱血想動手學習程式設計了,說實在這真是超乎我的預期,但如果可以的話我也很希望有人因為看了我的書而立志成為一個優秀的程式設計師。無奈我雖然寫了很多blog文章,但談到寫書還真是第一次...。當個沒經驗的新手,我想就是要厚臉皮一點才能快點進步。所以呢,我決定要來公開徵求讀者們的意見,讓這本書可以變得更好。你可以簡單告訴我你的背景;告訴我你喜歡或不喜歡我這一系列文章的哪部分,為什麼?也可以告訴我哪邊可以寫得更仔細點,哪些地方想要我多補充一些細節或實例;也可以告訴我你覺得書應該怎樣編排,是要分成一篇篇獨立的散文呢,還是一氣呵成連貫到底?要保持現在這樣讓我的經歷和程式心得交織在一起,或是把他們拆成兩部分呢?歡迎大家在本文下面留言,或是透過plurktwitter,也直接寄信給我(vgod _AT_ vgod.tw),任何想法都很歡迎。即使是單純推一下,或是覺得我太衝動想要阻止我的也很歡迎XD閱讀全文

追求神乎其技的程式設計之道(十)

追求神乎其技的程式設計之道系列

程式設計師的生產力之謎

很多人都聽說過,同樣是寫程式,一個頂尖程式設計師和一個普通程式設計師之間的生產力可以有十倍甚至百倍的差距。這是其他行業很少見到的現象,於是不禁令人...閱讀全文

給程式設計師的Vim入門圖解說明

12-09 Update: The English version of Vim Visual Cheat Sheet is also available.PNG,PDF)(更新: 在圖內加入基本指令表和說明以及PDF版,方便大家列印出來貼在牆上隨時查看。)剛在寫那篇關於vi和文字編輯器的文章時,本來想附上一個vim的超簡單入門連結,但找了一下都沒有很滿意的,所以決定自己動手先來畫個入門用的說明圖。vim-cheat-sheet-fullPDF版下載vim-cheat-sheet-diagram這個圖把vim中基本的移動方法都畫上去了,為...閱讀全文

[HCI] 費茲定律Fitts’ Law與使用者介面設計

之前在[HCI] 談人機介面設計與Usability一文中提到了usability的概念,並用了Windows的開始鈕說明了在設計UI上容易忽略的陷阱。這篇文章我會繼續探討介面設計與usability,並以效率(Efficiency)與UI設計時最重要的定律之一費茲定律(Fitts' Law)為重點。設計軟體的操作介面並不難,但很多時候直覺的設計並不一定能達成想像中的目的。這就是usability的研究想要了解的,到底什麼樣的設計才是「更好」的設計?什麼樣的設計其實只會讓usability變得更糟?以menu bar為例,menu是圖形介面(GUI)的最基本元素之一,現代軟體功能越來越強大,包山包海的結果就是menu變得越來越多、越來越深,每一個menu展開後幾乎都有sub-menu,甚至還有sub-sub-menu等等複雜的選單。我每次教我爸媽用電腦時,都覺得Windows的menu根本是設計來折磨使用者的,奇妙的是竟然很少聽人在抱怨這介面很難用,而是紛紛強迫自己「學會」這種操作模式。我想會看到這篇文章的讀者,早就很習慣於操作GUI了,也沒想過選單能有什麼好用或難用之別。所以先讓我們來想想要開啟一個埋藏在sub-menu裡的功能是多困難的工作(就假設是檔案/最近開啟/某檔案.txt好了)。第一,把游標移到menu bar的「檔案」上,並停住不動;第二,按下滑鼠左鍵打開檔案選單,把游標「垂直往下」移到「最近開啟」上停住;第三,等sub-menu打開,把游標「水平往右」移進sub-menu裡;第四,再度「垂直往下」找到某檔案.txt,在上面停住並按下左鍵。好,想像完畢後你可以試著用你的非慣用手操作滑鼠做一次看看。如果是已經很熟悉GUI的使用者,想必都不覺得操作選單有什麼困難的,但當你被迫用非慣用手操作時,一定會感覺到操作速度大大的降低,甚至沒辦法精準控制游標進入sub-menu,這時我們才有機會體認到操作滑鼠其實並不容易。除此之外,如果仔細觀察,還可以發現進入sub-menu又比平常把游標移到任意地方還困難,因為必須把游標保持在一條狹長的「隧道」裡水平移動,如果在移動時不小心移出了這條隧道,sub-menu就會關閉。gimp有個有趣的案例發生在一個著名的open source影像處理軟體GIMP上(可以說是免費版的photoshop)。當初開發GIMP的團隊曾做過一個有趣的決定,他們決定拿掉固定在視窗頂端的menu...閱讀全文

追求神乎其技的程式設計之道(九)

追求神乎其技的程式設計之道系列最近被很多人提醒這個神乎其技系列停在第八集很久了...(汗)。其實這集草稿已經存很久了,今天總算決定要把它告一段落後貼出來。先來個題外話,台灣最近遭受莫拉克颱風帶來的巨大災難之苦,雖然我人不在台灣能幫上的忙很小,但還是希望災區的所有人都能平安度過這次災難。

高中到大學

春天的國際科展結束後,我的高中生活也即將劃下句點。回顧高中三年,從校內的資訊比賽一路走到奧林匹亞的國際舞台,在保送大學資格的保護下,到高三又誤打誤撞變成國際科...閱讀全文

Google Wave Devloper Preview

昨天透過神秘管道拿到了Google Wave的developer sandbox的邀請。這看起來是對之前有參加Google I/O的人發送的開發用測試帳號,裡面處處可以看到Google I/O的影子。第一次登入Google Wave後,乍看之下真是個讓人摸不著頭緒的東西。左邊的Navigation和Contacts看起來很像傳統gmail的介面,但神奇的是inbox裡會一直冒出來新的"wave",但這些wave卻不是特別寄給我,而是公開給所有人的。看起來Google Wave像個大型論壇(後來發現更像聊天室,因為你可以看到討論串中每個人正在打的每一個字元慢慢出現!),裡面已經可以看到英文、日文、中文的wave,大多是正在嘗鮮的開發者們的測試文章。wave到底是什麼呢?Google Wave目前給我的印象像是超大型的協同工作+溝通合作平台,Google似乎想把wave變成一種新型態的溝通媒介,可以取代傳統的email或是可多人共享的google docs。一個wave融合了許多概念,除了文字、圖片外還可以包含一種特殊的小程式wave gadget。wave gadget是開放給所有人可以自行開發的,就像igoogle gadget一樣。wave的特色是它可以讓許多人同時編輯、回應,除了可以即時看到每個人的修改外,還有一個時間軸可以回溯整個wave的編輯和討論過程。時間軸可以讓人從最初的樣子開始播放,看每個時間點有誰進來改了什麼,或是做了什麼回應,就像錄放影機一樣。感覺的出來當wave正式推出時又會是一場新的革命,目前先一步進去的developers就像是幫Google探路的先鋒部隊一樣,除了探索可能的殺手級應用外,也幫Google開發盡可能多的wave gadget。目前的sandbox雖然看起來已經有基本的樣子了,但速度還蠻慢的。我想這是因為這還沒有廣泛的deploy到production機器上的關係,希望正式版時就不會有這問題。目前我可以登入的這個developer sandbox裡已經有不少開發者在裡面亂玩,有興趣想先睹為快的人,可以試試看填這個Developer Sandbox Account Request。這是我在sandbox裡面的其中一個wave找到的連結,我不保證一定可以申請到,也不知道要多久,有興趣的人就自己試試看吧。(如果成功申請到也請順便跟我說一下,這樣我才知道這個表有沒有用。)閱讀全文

Android G1初體驗

android-art_537x496

自從昨天拿到一隻免費的android手機(G1)後,這兩天全泡在android裡。昨天花了一晚研究怎麼不插sim card啟用這隻手機(我寫了簡單的筆記,但是是用英文寫的,我懶得再用中文寫一次了,有需要的就將就著看吧),花了幾個小時降級、取得root、升級後,就不知不覺掉入可怕的android世界裡,這也第一次讓我親身體驗到開放平台造成的震撼。

因為android手機上的軟體完全是開放的,從boot loader、firmware、OS、系統程式...

閱讀全文

傳奇人物就在我身邊

今天老闆突然寄來一個youtube video給大家,影片內容是1988年世界上第一隻Internet worm:Morris worm出現時造成的話題新聞。Morris worm是網路上出現的第一隻worm,它會利用系統的bug (sendmail、fingerd、rsh)複製自己並散播到其他UNIX主機上。當時這隻worm還被稱為virus,但它的威力比起一般virus又強大許多,因為一般的virus只能在同一台電腦中複製自己感染不同檔案,所以擁有向外擴散能力的Morris worm在當時引起了很大的風暴。這隻worm當時是從MIT開始擴散的,所以讓很多人認為作者是MIT的學生。但後來發現,作者其實是Cornell的研究生,會選擇從MIT開始散播就是要混淆視聽。據說這隻worm當初被開發出來的目的並不是要造成什麼破壞,而是為了測量Internet的大小,只是程式有點bug,沒想到...就造成了全世界的電腦大癱瘓。因為這隻worm實際上造成了非常大的損失,所以作者也成了美國第一個被以電腦詐欺及濫用法定罪的人。雖然作者遭到定罪,但他仍被視為某種傳奇的英雄人物,因為這隻worm暴露出網路系統的bug可以造成多大的危害,也迫使所有人開始重視網路系統的安全問題。很有趣的是,這個當初在Cornell企圖利用MIT來混淆視聽的學生,現在竟然是...MIT的教授Robert Morris。從他在MIT的網頁完全看不到這段過去的「傳奇事蹟」,但如果去看他的wikipedia頁面,就會發現整頁幾乎都是在講Morris worm而已XD我在知道這件事後實在非常驚訝,因為我上個禮拜才因緣際會跟他一起吃了許多頓飯。雖然坐在一起吃了很多次飯,也都沒聽人說起這件事,直到今天迂迴的發現原來他就是Morris worm的作者,才讓我大大吃了一驚。另外,藉由他的wikipedia page,我還發現他跟Paul Graham是超級好朋友,曾一起開過一家公司Viaweb (後來賣給Yahoo!,成為Yahoo! Store的前身) ,後來還一起發明一個程式語言Arc。(Paul Graham是著名的LISP Hacker,寫過很多LISP的書,還有一本我很喜歡的「駭客與畫家」。)正覺得世界很小的時候,我又發現更驚人的事情。原來Robert Morris的老爸竟然是美國國家安全局底下的電腦安全中心首席科學家,專長是密碼學,每個UNIX都會有的/etc/passwd裡的加密密碼就是用他寫的crypt library產生的。把全世界搞得雞飛狗跳的hacker,老爸竟然是國安局的密碼學家,這可以說是....虎父無犬子嗎XD閱讀全文