2012年7月8日 星期日

為什麼軟體工程無法估算時間?


以下文章轉貼自下列網址 :

http://mrjamie.cc/2011/04/11/why-cant-devs-estimate-time/


為什麼軟體工程無法估算時間?

April 11th, 2011 by Jamie 切換為細明體
我們都有這樣的經驗:要開發一個東西,請工程師估算時間,大概要五天。結果過了一個禮拜,東西還沒出來。一問之下,碰到了原先完全沒有預期的情況,否則就是某個套件原來不能這樣用,必須要換一個,否則就是一個莫明的錯誤,找了一個下午還是不知道為什麼。久而久之,工程師開始習慣在回報的時間裡面灌水,預留空間給這些「未知數」,而我們也常常把他們給的時間乘以二,來得到最壞情況的數字。問題是這樣的方法之下,最後整個組織開始習慣用最龜的速度前進,因為估算精準、動作快,在這中間一點好處也沒有。更壞的情況,是叫九個女人去生一個小孩,那才是災難的開始。

為什麼軟體工程無法估算時間?

要了解這件事情發生的原因,你必須要先知道為什麼軟體工程是無法估算時間的。我以前常常喜歡用「常態分布」來解釋軟體工程時間的花費 — 上述的情況,讓大家慢慢從 Average 變成 (Average + 3 STD) 估算,最後平均浪費了 3 STD 的時間 — 不過這只是統計學上的解釋,並不是真正的「原因」。直到我前幾天看到這篇文章:「Why Can’t Developers Estimate Time?」,才給了我超大的一個領悟。(文章有點難,不過英文不錯的人,我鼓勵你們去讀讀。)
作者 Ashley Moran (愛許麗‧莫倫) 說:
我們無法預測軟體開發中每一個項目的時間,是因為這些工作的本質就是「創造新知識」。開發軟體的目的是創造「自動化的流程」,一但目標達到,自動化後的流程就可以重複的被執行,在可預測的時間裡面。所以一個軟體就像是「食譜」一樣,而電腦就是「廚師」,輸入的資料是「食材」,而輸出的資料是「晚餐」。
因此,我們在做的事情是讓未來從不可預測,變得可預測,讓大哥小弟、老爸老媽、只要想煮飯的,人人都可以當食神,給他三十分鐘,都可以弄出一鍋超級無敵海景佛跳牆。所以,「開發食譜」這件事情的本身,是一個創造新知識的過程,時間上當然很難預測。

如何管理

因此,軟體工程用硬體工程的模型去管理,從出發點就是錯誤。一個建築案是先有了「藍圖」,才去估算每個細項需要的時間。當我們在做的是藍圖本身,怎麼能夠沿用他們的模型?如果是這樣,一個創業團隊該如何「管理」開發的時間?
我的答案是你沒辦法 — 你怎麼能夠控制臭蟲什麼時候要出現?但是你可以管理「生產力」,也就是確認團隊總是在高效率的情況下工作,那最後你會得到的是 Average 的工作時間,比起前述 Average + 3STD 快上了 3 STD,這前後有可能就快了 2-3 倍。
而要管理「生產力」,一個現代化的軟體開發團隊,我認為有以下的幾個好工具可以用:
  • Pair Programming (兩人小組) — 一個人寫程式常常會有盲點,兩個人一起則可以看到對方遺漏的地方。更重要的是兩個人都會從對方身上學到很多知識和技巧,彼此都會成長。而當兩個人都了解一組程式碼,日後的維護也有了兩個選擇,不會因為一個人請假、離職,這些 code 就變成孤兒。記得給他們兩個鍵盤,實務上這會比鍵盤移來移去有效率。
  • Daily Stand-Up Meeting (每日早會) — 每天早上固定開一個快速早會,全部人都站著,每個人依序報告昨天的進度,碰到的問題,和溝通彼此程式間該如何傳遞資料。這讓團隊明確的知道彼此的進度,也省去很多溝通不良的麻煩。
  • 高效率的工作環境 — 開放、明亮、舒適的工作環境,或許讓大家換上拖鞋,確認團隊成員們可以取得他們需要的飲料、食物,但是不會吃得過飽、或是喝下過多的咖啡因。當其中一個成員困惑時,確認有人可以幫助他。
  • 隨時找得到使用者 — 代表「使用者」的那個人 (通常是 PM),最好是使用者本身,必須要隨時在現場,幫團隊解釋開發上細節不明確的地方。
  • 設定上線時間 — 雖然你沒辦法知道每一個子項目會花的時間,但是你可以設定一個上線的時間,然後所有的人通力合作在那個時間之前,盡可能做出一個可以推出的版本。當然,如果第一個版本推出時你不會覺得丟臉,那就是花了太多的時間
以上,希望可以幫助你們重新思考軟體開發該如何做,也希望對你們正在做的網站、行動應用有幫助。(當然這不是完整的列表,歡迎大家提出你們喜歡用的工具。)

2012年5月28日 星期一

Storyboard use in iOS

Storyboard feature only can use in up iOS5.0, The ARC feature also only use in up iOS5.0

Note :

1. The View controller in storyboard that need use a class file to handle it.

The class name need to connect to the storyboard view controller. ref up picture.


2.When return to up view can not use modal to recall original view controller. because the original view controller did not dismiss. that only be over view in this new view controller. so need to use method of

 [self dismissModalViewControllerAnimated:YES];
for return to original view controller.


3.The methods of view controller will can be used in new class for the UIViewController. you can find this method in the new files.



Other note is use for class use in iOS, if you use the method is -(void) ..... that is an instance classe method then when you want to use it that need to declare the class for an initial.



if you use the method is +(void)..... that is class method then when you want to use it that can direct to use [classname classmethod : parameters];  this is big difference from the instance class.

=== the global variable use in iOS that can not use static variable === 
=== the extern variable can not be used static in iOS                     === 


2012年5月15日 星期二

UTF8 Code use in Objective-C


//My Memo for UTF8 code in Objective-C
// How to use UTF8 中文字串 在 iOS


const static char *Word[] = {
    "一乙",
    "二力刀乃人匕又入了卜几丁
}



NSString *stringFromUTFString ;



stringFromUTFString = [[NSString alloc] initWithUTF8String:Word[1] ]; // load code to NSString
NSLog(@"%d" , stringFromUTFString.length  ); // 結果是 12 
    
for (int i = 0; i < stringFromUTFString.length; i++) {
        NSRange  strRange = NSMakeRange(i, 1); // i = index , 1 = range length
        NSString *subStr = [stringFromUTFString  substringWithRange:strRange];
        // subStr 結果是 @"二力刀乃人匕又入了卜几丁" one by one output     
        NSLog(@"%@" , subStr  );
}

2012年5月8日 星期二

android view的setVisibility方法值的意思


android view的setVisibility方法值的意思 

有三个值 visibility  One of VISIBLE, INVISIBLE, or GONE. 


imgBtn1.setVisibility(View.VISIBLE);

imgBtn1.setVisibility(View.INVISIBLE);

imgBtn1.setVisibility(View.GONE);

常量值为0,意思是可见的 

常量值为4,意思是不可见的 

常量值为8,意思是不可见的,而且不占用布局空间

2012年4月16日 星期一

2012年3月26日 星期一


「真空管運輸」不須離開地面 2小時從北京到紐約

國際中心/綜合報導
交通運輸工具不斷革新,迅速又節省能源是未來必然的趨勢。最近有人提出「真空管運輸」(Evacuated Tube Transport)的概念,透過磁力懸浮的管狀系統,旅客不須脫離地面,就能在短短2個小時內,從北京抵達紐約。
「真空管運輸」是將超導磁懸浮列車裝設在管狀線路中,藉由沿線電動馬達驅動,使膠囊狀列車能夠持續加速。由於管道內永久保持在接近真空的狀態,這些磁懸浮的膠囊列車阻力極小,預計能以每小時6500公里的速度前進。
不過膠囊列車需要時間來加速,因此在短程旅行時,它無法達到理想中的超高速。此外,若要實現跨國、跨洲旅行的想法,勢必得建造超長的管線軌道;儘管「真空管運輸」的支持者宣稱它無聲、價格比火車便宜、速度快過噴射機,但真要執行起來仍有難度。

2012年3月24日 星期六

災情發布 試辦LBS(Location Based Service)簡訊突槌


災情發布 試辦簡訊突槌

(中央社記者黃旭昇新北市24日電)新北市複合式災害演習以LBS災害簡訊系統,提供災情發布多元管道,不過,災區範圍仍有參演人員無法收到訊息,消防局解釋,恐因基地台訊號漏網、接收人數過多,才有疏漏。
鑑於去年日本三一一地震,部分海嘯災民即時逃生的經驗,市府23日演練災害防救演習時,規劃以中華電信發布手機簡訊災情,提醒民眾把握逃生黃金時間。
消防局表示,中華電信透過「適地性簡訊廣播服務」LBS(Location Based Service)技術,以基地台針對特定區域的對象發送簡訊,與日本手機的「細胞廣播」簡訊警報不同。
消防局「災難緊急訊息通報系統」對有時間差的災害,如颱風、土石流等,可提醒民眾預先防範。原來在去年的演習中就首度實施,且評估功效後,今年繼續列入演習項目。
位於新店溪陽光運動公園演習範圍內的民眾,只要是中華電信的手機用戶,都可收到即時信息。但昨天在實施LBS災害簡訊系統時,有部分在場人員無法收訊。
部分民眾與參演人員的手機響起簡訊,並且有假想狀況,但為了避免民眾恐慌,有加上「防災演習」字樣。對於中華電信手機用戶無法收到LBS簡訊,有參與演習者說,他參加3次預演,也曾無法收到簡訊。
消防局今天解釋,災難緊急通報系統,涉及成本和計費,可能是消防局在23日演習時,現場湧入人數超出設定的簡訊人數,且部分地區恰好無法收訊所致。
適地性簡訊廣播,可以劃定區域、指定時段,只要手機用戶在指定時段內進入該區域,就會立即收到相關簡訊。LBS簡訊在商業用途上,常用於遊樂區、購物中心或商業促銷廣告等,委託人不必準備門號清單,只需告知簡訊內容與發送地區及時段,交系統業者發送。
另外,消防局表示,去年日本大地震後,多數災區手機基地台受損,通訊中斷,有部分民眾也透過網路推特(Twitter)關心,並以推特的追蹤和引用功能,即時傳遞災民寶貴的救災情報。