2014年2月27日 星期四

沒有事情像表面看起來那麼簡單 Nothing is as Simple as it Seems



沒有事情像表面看起來那麼簡單 - Nothing is as Simple as it Seems
http://tinyurl.com/38nl9u3


如果你這輩子寫過20分鐘以上的程式,可能已經發現這個很好的基本原則:沒有事情像表面看起來那麼簡單.
就連複製一個檔案這麼簡單的動作都充滿陷阱。如果第一個參數是目錄會如何?如果第二個參數是檔案又如何?如果目的地已經有相同檔名的檔案又會怎樣?萬一沒有寫入權限又怎麼辦?
如果檔案拷到一半出錯要如何?如果目的地是需要認證才能繼續的遠端機器又如何?如果檔案很大而連線很慢,必須顯示進度欄時又會如何?萬一傳輸速度慢到幾乎完全不動...你要等多久才放棄並傳回錯誤訊息呢?
有個好方法可以用來面試應徵測試工作的人,就是要他針對一件簡單的操作,把所有可能出錯的地方全都列舉出來。微軟對面試測試人員有個經典題目:如何測試開檔對話盒?優秀的測試人員可以滔滔不絕地列出幾十種測試項目(在你選好檔案,要按「開啟」之前,另一個使用者把原本存在的檔案殺掉了)。


你必須先做設計再去實作。
我很抱歉讓你失望了。沒錯,我知道你看過Kent Beck的書,而且現在認為不先設計而直接實作是正常的。很抱歉,這並不正常。改程式就是沒法子和改設計文件「一樣簡單 」。大家一直都這樣說,不過這並不對。「現在我們都用Java和XML這種高階工具,幾分鐘就可以改好程式,為什麼不直接在寫程式時做設計呢?」我的朋友,你可以替你老媽裝上輪子,不過她並不會因而變成巴士。另外如果你自認能把錯用執行緒的檔案複製函數,重整改正成先佔多工的作法,而且速度和我寫這個句子一樣快,你根本就在自己騙自己(deep denial)。

人的工作切換有害無益 Human Task Switches Considered Harmful

Human Task Switches Considered Harmful
http://www.joelonsoftware.com/articles/fog0000000022.html


人的工作切換有害無益 
http://tinyurl.com/3u4mktf


如果你給某人兩件工作,應該要感謝他們只做一件工作而放棄另一件,因為這樣能做好更多的事,而且平均上也能更快完成工作。事實上這一切的重點就是絕對不要讓人同時做一件以上的事。請確定你有明白它的意思。好的經理人會認為自己的責任是消除障礙,好讓大家都能專注在一件事情並把它真的完成。遇到緊急狀況時,請先想想能不能自己處理掉,真的不行再丟給深陷在專案中的程式師吧。

揭露冰山般的秘密 The Iceberg Secret, Revealed

揭露冰山般的秘密

http://tinyurl.com/b2clht

關於軟體的客戶(或非技術經理)以及程式師兩者間語言翻譯的秘密。

你知道冰山有90%是在水面下嗎?沒錯,大部份的軟體也是這樣。那些漂亮的使用介面只
佔10%的工作,而其他90%的程式設計都是看不到的。如果再考慮到一半時間在抓蟲這個事
實,使用介面就只佔了5%的工作。如果只計算使用介面中的視覺部份(能在PowerPoint裡
看到的部份),其實就不到1%了。
這並不是秘密。真正的秘密是非程式人員並不知道這件事。



重要的推論二:把使用介面的畫面展示給非程式人員看時,如果這個介面非常漂亮,對方會認為這個程式幾乎已經完工。
非程式人員只會看著畫面,他們看到的是一堆像素的組合。如果那些像素看起來像個有功能的程式,他們就會認為:「哦,要讓這個程式真的動起來應該不會有多難吧?」 這裡有一個很大的風險:如果你先做出使用介面的原型,認為這樣就能與客戶進行討論,結果每個人都會認為你幾乎都做完了。接下來你花了整整一年去做「裡面」的事,卻沒人會看到你的工作成果,大家還以為你什麼都沒做。

重要推論四:因為政治因素要求由各技術經理或客戶「啟動」專案時,可以提供數種美術設計讓他們選擇。
改變某些元件的擺設方式,改變外觀和字型,移動標誌位置,標誌也可以變大或變小。拿些無關緊要的家家酒內容給他們玩,讓他們覺得自己很重要。這些他們就不會嚴重影響你的時程了。好的室內設計師會定期拿些樣本之類的小東西給客戶選,不過從來不會跟客戶討論洗碗機的位置。不管客戶想怎樣,反正洗碗機就是放在水槽邊,沒必要浪費時間去爭論,就是得放水槽邊,連擺高一點都免談;客戶想玩設計就讓他去碰些無害的東西,比如流理檯面要選義大利花崗石,還是用墨西哥瓷磚還是挪威木砧板,這種事他改變主意200次都沒關係。


The Iceberg Secret, Revealed by Joel Spolsky
http://www.joelonsoftware.com/articles/fog0000000356.html


Important Corollary Two. If you show a nonprogrammer a screen which has a user interface which is 100% beautiful, they will think the program is almost done.

People who aren't programmers are just looking at the screen and seeing some pixels. And if the pixels look like they make up a program which does something, they think "oh, gosh, how much harder could it be to make it actually work?"

The big risk here is that if you mock up the UI first, presumably so you can get some conversations going with the customer, then everybody's going to think you're almost done. And then when you spend the next year working "under the covers," so to speak, nobody will really see what you're doing and they'll think it's nothing.


Important Corollary Four. When politics demands that various nontechnical managers or customers "sign off" on a project, give them several versions of the graphic design to choose from.

Vary the placement of some things, change the look and feel and fonts, move the logo and make it bigger or smaller. Let them feel important by giving them non-crucial lipstick-on-a-chicken stuff to muck around with. They can't do much damage to your schedule here. A good interior decorator is constantly bringing their client swatches and samples and stuff to choose from. But they would never discuss dishwasher placement with the client. It goes next to the sink, no matter what the client wants. There's no sense wasting time arguing about where the dishwasher goes, it has to go next to the sink, don't even bring it up; let the clients get their design kicks doing some harmless thing like changing their mind 200 times about whether to use Italian Granite or Mexican Tiles or Norwegian wood butcher-block for the countertops.



2014年2月25日 星期二

無痛軟體時程 Painless Software Schedules

Painless Software Schedules  by Joel Spolsky
http://www.joelonsoftware.com/articles/fog0000000245.html


無痛軟體時程
http://tinyurl.com/2u9mpwx

11)在時程中加上緩衝時間。事物總是容易用完。你可能要考慮兩種重要的緩衝。
第一種:預防工作耗時超過預期的緩衝。
第二種:針對未預期但必要的工作的緩衝
               (這通常是因為管理階層決定某功能超級重要,絕對不能等到下一版)。

你可能會很驚訝地發現、休假、國定假日、除錯、整合還有緩衝時間加起來超過實際做事的時間。如果被嚇到表示你程式寫得還不夠久,不是嗎?你要忽略這些項目的話後果自行負責。

12)絕對不要讓經理叫程式員縮減估計時間。

很多菜鳥軟體經理認為能用精細「緊密(短得不切實際)」的時程,「激勵」程式人員做得更快。我認為這種激勵根本是腦袋壞掉。
當我進度落後時,我會覺得內疚消沈毫不積極。當我進度超前時,會非常快樂而且充滿生產力。時程可不是玩心理遊戲的地方。

如果你的經理要求你縮短估計時間,這裡告訴你要怎麼做。
在時程表上加一個叫Rick的估計(當然是假設你叫Rick)的新欄位。把你的估計填進去。
隨便經理怎樣要求,直接把她定的時間填入Curr Est欄位後就不要管了。
等專案結束時再看看誰的估計比較接近實際狀況。我發現光是威脅說要這樣做,效果就很驚人了,特別是當你的經理瞭解到,他們剛參加了一個看你能做得多慢的競賽時更是有效!


為什麼不適任的經理們總會試圖要程式員縮短估計時間呢?

當專案開始時技術經理會去見經營人員,然後會得出一個他們認為三個月(實際上要9個月)做得到的功能列表。

如果你認為寫程式不需要先想清楚所需步驟,然後估算出來某工作需時n,實際上很可能會耗時超過3n。

在訂定真正的時程時,把所有工作加總起來,就會瞭解專案耗時遠比想像中多得多。歡迎光臨真實世界。

不適任的經理的處理方法是想辦法讓員工做得更快。這一點其實不太實際。你或許能雇用更多員工,不過他們需要時間適應,

可能前幾個月都只有一半的效率(還會拖慢必須引導他們的其他員工)。而且無論如何,在這個業界得要6個月才找得到好的程式員。

你可能可以讓員工在一年內全力以赴,暫時提高10%的初版程式(譯註:指未整理除錯的程式)產量。算不上是什麼大躍進,而且這樣有點太短視了。

你可能可以懇求員工不計辛勞超努力地工作,提高20%的初版程式產量。砰!可惜除錯時間倍增了。真是了不起的自爆蠢方法。

不過你絕對絕對不可能由n變成3n,如果你自認有這種本事,請寫信告知貴公司的股票代碼好讓我放空。

2014年2月21日 星期五

中文亂碼解決方法:環境編碼設定改 UTF-8

http://www.onejar99.com/2011/12/eclipse-file-encoding-utf8.html


有時候打開一些別人的專案,或是以前所寫的程式,會發現怎麼中文都變成亂碼,不僅無法辨識,也無法編譯,Eclipse 的程式檔的圖示上,會有一個紅色的小叉叉。這是由於檔案的編碼和開發工具的環境編碼不一致的緣故。

比如檔案原本的編碼是 UTF-8,開發工具的環境編碼設定卻是 MS950 ( MS950 是繁體中文 MS Windows 作業系統的編碼)。

解決方法很簡單,將開發工具的環境編碼也改為 UTF-8 就行了。

Step 1. 首先選擇上方選單中的「Window」->「Preferences」,開啟設定視窗。

Step 2. 選左邊樹狀結構中的「General」->「Workspace」。

Step 3. 在右邊有一個「Text file encoding」,將 Default (MS950) 改成「Other:」,並選擇「UTF-8」。

Step 4. 之後按下「Apply」就設定完成。


http://tomkuo139.blogspot.tw/2012/01/eclipse.html

Books 書櫃


約耳的程式師書櫃
http://tinyurl.com/jwkhfkh

必看!IT好書101
http://www.ithome.com.tw/itadm/article.php?c=63952

iThome 2012年 iT人必看的好書(上)
http://www.ithome.com.tw/itadm/article.php?c=76293

iThome 2012年 iT人必看的好書(下)
http://www.ithome.com.tw/node/76438#.UwdAifmSyCk





約耳 (Joel Spolsky):
「如果你在這個業界待得夠久,幾乎無可避免地突然發現自己得管理一大筆錢。如果你不想把事情搞砸,有幾件事是一定得知道的。
噢,不過你會說這些東西看起來如此地複雜,怎麼比得過那麼吃人不吐骨頭的華爾街狡猾老狐狸呢?光是想投資獲得合理收益,似乎都得不斷的研究,研讀,工作,閱讀還有學習才做得到。有那麼多的年度報表。而你還得訂閱各種寫得密密麻麻的無聊報紙,上面滿是用小字印刷的專欄。
如果我說你只要讀一本書就能學到管理投資所有必須瞭解的東西,你覺得怎麼樣?我是說所有東西哦。沒錯,這是事實。答案就是這本書。如果你沒工夫去看其他有關投資的東西,就讀這一本書吧。」
A Random Walk Down Wall Street by Burton Gordon Malkiel

Joel on software

http://www.joelonsoftware.com/


http://local.joelonsoftware.com/wiki/%E9%A6%96%E9%A0%81


Use spaces instead of tabs in Eclipse

http://stackoverflow.com/questions/407929/how-do-i-change-eclipse-to-use-spaces-instead-of-tabs

On Eclipse 3.6

 Window->Preferences->General->Editors->Text Editors->Insert spaces for tabs

===

 “Window -> Preferences -> Java -> Code Style -> Formatter”

Active Profile:
new a profile  => choose "spaces only" for "tab policy" in the first tab "Indentation"

====

If you havent got too much code, you could do a search and replace manually.

Find: \t
Replace: (4 spaces)

and check the "Regular expressions" option.

[API 19] ApiDemo Build Error : android.support.v4"

ApiDemo Build Error

import android.support.v4.print.PrintHelper;   <=  Build Error

google " add library eclipse android.support.v4"


Project > Properties > Java Build Path > Libraries
Add External jars

<sdk>\extras\android\support\v4\android-support-v4.jar
e.g.  C:\Users\KOD\android-sdks\extras\android\support\v4\android-support-v4.jar

Done


====

https://developer.android.com/tools/support-library/setup.html

http://developer.android.com/tools/support-library/index.html

If you are including the v4 support and v7 appcompat libraries in your application, 
you should specify a minimum SDK version of "7" (and not "4"). 
The highest support library level you include in your application determines the lowest API version in which it can operate.




Java Source Code Attachment in Eclipse

How to change Eclipse's “associated source” for debugging?

In the package explorer, where the jar is in a library (JRE, Maven dependencies, etc...);
right click => properties => java source attachment.

Alternately in the project properties => Java build path => Library tab => select the jar => edit.

====
http://www.cavdar.net/2008/07/14/3-ways-of-jdk-source-code-attachment-in-eclipse/     (for eclipse 3.4)
as for eclipse 4.3.1, only method 1 works.

打開某class   (e.g. import android.app.ActionBar; )
會跳出 source file not found錯誤訊息的那頁 有個可以讓你設定的按鈕
"change attached source"

External Folder
choose
<sdk>\sources\android-19

=========

不必再用External File (add external jar)

即以下都不必做  (不必再另外下載jar檔)

browse android source eclipse
Where can I browse Android source code on-line
http://stackoverflow.com/questions/449763/where-can-i-browse-android-source-code-on-line


I usually refer this site for the android source code.
http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/
http://grepcode.com/snapshot/repository.grepcode.com/java/root/jdk/openjdk/7-b147/

// http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android-apps/4.2.2_r1