歪說軟件工程18 - 小精靈的意見 - [原創(chuàng)]
話說《指環(huán)王》里的弗羅多說:“不要征求小精靈的意見,因為它們將會既說Yes又說No”。
商業(yè)軟件產(chǎn)品的許多用戶有時也是既說Yes又說No,或者說既要那個又要這個。
先換個領(lǐng)域,倘若一個生產(chǎn)豬飼料的,豬顯然不知道自己想吃什么該吃什么,即使是養(yǎng)豬的也未必都知道或能科學(xué)地知道,所以廠商有責(zé)任研制有
效的飼料產(chǎn)品,即告訴養(yǎng)豬的你的豬吃這些飼料就可以了。
軟件產(chǎn)品用戶雖然作為人是有積極主動性的,但大多數(shù)時候確實是不知道自己要的是什么的,所以作為廠商,應(yīng)該是特定商業(yè)領(lǐng)域的專家,有責(zé)任并
有義務(wù)研發(fā)有效的軟件產(chǎn)品。因為有長期的積累,所以不信口開河,因為有大量用戶的驗證,所以確實有效果。
不征求小精靈的意見,是因為有能力告訴它們可以這樣,而它們大多數(shù)認(rèn)為這樣確實可以。
歪說軟件工程17 - 橫過深淵的一根繩子 - [原創(chuàng)]
話說尼采認(rèn)為“人之所以偉大乃是他是一個橋梁,而不是一個目標(biāo)”。盡管這座“橋梁”如“橫過深淵的一根繩子”,“渡過是危險的,在路上是危險的,
回顧是危險的,在中途戰(zhàn)栗和躊躇是危險的”,但人卻必須越過它。
軟件產(chǎn)品即使把周期拉長,也很難斷定它是一個橋梁還是一個目標(biāo),但確實不管前進(jìn)、還是后退、還是躊躇也都是危險的。
比如CRT顯示器,幾年前還幾乎都是弧面的,沒有平面的,而現(xiàn)在幾乎沒有人買弧面顯示器甚至有人都知道什么是弧面顯示器了。兩種顯示器,從基本
需求的角度來說,都能滿足顯示的需求,但競爭總是使更先進(jìn)的功能變成常態(tài),競爭導(dǎo)致優(yōu)勝劣汰。
軟件產(chǎn)品如果前進(jìn)而沒走對,可能危及即得的地位,而如果不前進(jìn)或者后退就容易被競爭對手找茬,所以不管速度如何還是要前進(jìn),為了避免前進(jìn)的
風(fēng)險,我們求助于軟件工程的一些過程管理方法。
歪說軟件工程16 - 現(xiàn)場直剝 - [原創(chuàng)]
話說老Y住處樓下就是一個自由市場,好幾次聽到一個賣柚子的在吆喝:“梁平柚子,一元一個,現(xiàn)場直剝……”。“現(xiàn)場直剝”的意思是買了之后現(xiàn)場直接給
你剝開。
語言可以這樣用嗎,妙哉!隨意摘錄一句古文:“夫玄黃色雜,方圓體分,日月疊璧,以垂麗天之象;山川煥綺,以鋪理地之形……”(劉勰,《文心雕龍》)。
真不知道這些辭藻是怎么被堆砌起來的,奇哉!
發(fā)明漢字的倉頡看到這些,估計也會問道:“漢字可以這么用嗎?”。軟件產(chǎn)品用戶多了,有時收到用戶的反饋,說怎么怎么操作后出了什么問題,程序員
心里想:“這個軟件居然可以這么用?”
如果用戶說了怎么操作,那要解決問題比較好辦,如果用戶沒說,只說出的問題,就麻煩了。軟件中有很多隱藏的假設(shè),比如假設(shè)用戶會這樣操作、假設(shè)
用戶這個地方會輸什么內(nèi)容,一旦這些隱藏的假設(shè)被“不守規(guī)矩”的用戶觸碰到,就可能導(dǎo)致問題。
但軟件總不可能把什么都考慮到,就如倉頡不能限制賣柚子的也玩漢字諧音,程序員在軟件沒加約束時也不能限制用戶不能那么操作,所以為了避免出問
題,解決方法之一就加盡可能多需要的功能約束,之二就是遵循“契約編程”的道理,在每個方法、每個函數(shù)做約束,以便出問題時能知道問題所在。
簡單的方法是可以這樣:由于每個方法、每個函數(shù)對傳入的參數(shù)都會有一些假定,可以把已知的假定直接寫成代碼約束,比如用Assert來要求某某參數(shù)
不能為空,同時給出違反約束時的提示。
歪說軟件工程15 - 超人魯班 - [原創(chuàng)]
話說一個工地上,許多人在忙著修一座拱橋,其中一個老頭,每天不緊不忙地鑿著一塊石頭,鑿得方不方、圓不圓、長不長、扁不扁,大家都以為別人認(rèn)識他
,都沒理他,他鑿好后就揚長而去。橋快要竣工時,橋面中間出現(xiàn)了一個空隙,怎么努力也弄不來一個合適的石頭,有人想起那個陌生老頭鑿的石頭,把它
搬來,結(jié)果嚴(yán)絲合縫。那個老頭就是魯班。
古代的拱橋都不太長,魯班不畫工程圖也能把它修好,但如果請他來修舊金山金門大橋,估計他也得先學(xué)好幾何學(xué)和力學(xué)。軟件工程也有很多學(xué)問,下文摘
抄Martin Fowler在《企業(yè)應(yīng)用架構(gòu)模式》中的一段話:
“即使你對極限編程[Beck XP]不感興趣,你還是應(yīng)該認(rèn)真地思考三個方面的技術(shù)實踐:持續(xù)集成[Flower CI]、測試驅(qū)動的開發(fā)[Back TDD]和重構(gòu)
[Fowler Refactoring]。這些技術(shù)雖然不是萬能的靈丹妙藥,但它們能夠幫助你在需要的時候更容易地改變你的系統(tǒng)。除非你比迄今為止我見過的人
更能干或更走運。”
歪說軟件工程14 - 李宇春 - [原創(chuàng)]
話說李宇春成名后代言的廣告不少,可以被輕輕地總結(jié)一下。
老Y所知的大概有三種:食品、手機(jī)、電腦,第一種顯然是消耗品,手機(jī)基本上也已經(jīng)成為消耗品,商業(yè)社會的魔力就是能把技術(shù)轉(zhuǎn)化為商品并以時尚
的名義銷售,消費者既消費實用又消費時尚,但產(chǎn)品會在購買后一年后價值降低到原來的一半或更低,電腦也是這樣,所以也可以說是消耗品。
老Y一朋友,家里做批發(fā)生意,98年開始用管家婆軟件,用到現(xiàn)在沒做升級,當(dāng)然店面和店員也沒什么變化。許多商品軟件都是耐用品,當(dāng)然消耗品的
也多,比如售價<1000元的各種游戲,許多人買了用不久就會去買新的,而購買售價>1000元的商業(yè)軟件大多數(shù)消費者還是很慎重的,因為使用后如需
更換還要付出額外的成本。
作為耐用品的商業(yè)軟件,其廣告代言人,從各種廣告可以看出,大都選擇老成持重的。
歪說軟件工程13 - 樹 - [原創(chuàng)]
摘要:話說山上的樹長得高低不齊,高大的樹都有高大的主干,如果是千年老樹,則主干更尤龐大;許多低矮的灌木則到處都是枝椏,看
不出哪兒是主干。 軟件的生長理應(yīng)如能長高的樹,而不是低矮灌木。樹木從地底下長出來,先只有一片葉,一小枝,而后成兩片葉,枝
葉自己生長的同時,主干也不斷生長。 而許多軟件都生長成低矮灌木,因為主干沒有生長,即生長的過程中沒有不斷積累并形成自己的技術(shù)基礎(chǔ)。 (全文共205字)——點擊此處閱讀全文
歪說軟件工程12 - 浪漫的事 - [原創(chuàng)]
話說IBM向開放源碼社區(qū)貢獻(xiàn)了一個Java集成開發(fā)環(huán)境“Eclipse”,這個原來沒沒什么名氣的IDE,現(xiàn)在已經(jīng)成為一統(tǒng)Java開發(fā)工具江山的開放平臺,
IBM收購的Rational商業(yè)開發(fā)工具體系已經(jīng)全部遷移到Eclipse中,Borland的Java開發(fā)工具體系也在逐漸遷移,做Java的Sun原來也做有自己的IDE,
現(xiàn)在基本上放棄自己做了。
“Eclipse”是日蝕的意思,不過這個項目現(xiàn)在確實有遮住“太陽”(Sun)光輝的趨勢。中國人想象“月蝕”是天狗把月亮吃了,這是一件很浪漫的事情,
開放源碼也是一件很浪漫的事情,“天下為公,各盡所能,各取所需”,不過,開發(fā)的東西要能確實可用、實用,而不只是一種玩具,卻一點也不浪漫,
同樣要一行行代碼地編寫,一行行代碼地測試。
Eclipse的所有源代碼都可以在其網(wǎng)站上下載到,下面是3.1版本一些不完全統(tǒng)計數(shù)據(jù):
開發(fā)目錄 708M;
目錄個數(shù) 1.4萬;
文件個數(shù) 5.2萬;
Java源程序文件個數(shù) 3.5萬,共199M,代碼行數(shù)592萬;
其中JUnit測試代碼文件個數(shù) 1.3萬,共40M,代碼行數(shù)119萬;
文檔 *.htm 個數(shù) 0.36萬,共45.9M;
文檔*.ppt; *.doc; *.swf 個數(shù) 33個,共17.4M。
歪說軟件工程11 - 池魚 - [原創(chuàng)]
話說小池塘里只養(yǎng)了一種魚,冬去春來,春來冬去,魚兒不停地生殖繁衍,看著一群群小魚兒長大,然后又會有新的一群,但盡管沒有人捕撈,
魚兒從來沒有把小池塘填滿過。
魚媽媽會一邊生小魚,一邊把自己的小孩吃掉。簡單的自然生態(tài)自己維護(hù)著自己的平衡。
軟件市場也是一個自然生態(tài)系統(tǒng),微軟再大,它也不會吃掉所有市場,自己長滿整個池塘。
歪說軟件工程10 - 紅綠燈 - [原創(chuàng)]
話說比較早的時候街上的紅綠燈很簡單,一個方向紅的時候一個方向綠,每隔60秒交替變化。這時用簡單的定時模擬電路控制就可以了,而且
通過電阻電容的調(diào)整也能調(diào)整變化間隔。
后來覺得這樣很不人性化,用戶界面不好,讓行人干等不好,應(yīng)該加一個數(shù)字計時器,顯示還剩下的需要等待秒數(shù)。這時用模擬電路的架構(gòu)就不行了,
必須用數(shù)字電路,需求變化第一次導(dǎo)致架構(gòu)變化。
許多路口,由于兩個方向的流量不一樣,導(dǎo)致需要兩個方向的燈亮的時間不一樣,比如一個90秒,一個30秒,這時要求紅綠燈能進(jìn)行設(shè)置。對數(shù)字電
路架構(gòu)添加這種功能不是很難。
再后來,由于許多路口的流量變化很大,要求紅綠燈能智能控制,于是安裝了攝像頭監(jiān)控流量,與紅綠燈一起跟監(jiān)控中心聯(lián)網(wǎng)……,就是所謂的智能交通。
需求總是變化的,其中許多是由競爭對手而不是用戶驅(qū)動的;許多需求導(dǎo)致產(chǎn)品架構(gòu)變化,代價通常是很大的。
歪說軟件工程9 - 比基尼 - [原創(chuàng)]
摘要:話說老Y從鄉(xiāng)下來到迷人的夏威夷海灘,看到滿眼的比基尼泳裝,甚是不習(xí)慣,心里想到:“比基尼展示了令人感興趣的部分,但卻隱藏了關(guān)
鍵的部分”。 許多競爭對手的產(chǎn)品在它們的技術(shù)白皮書中展示了許多技術(shù)特性,許多業(yè)界領(lǐng)先的觀念得到了怎么樣的貫徹與實現(xiàn),甚是誘人,具體
研究,有些果然如此,但不知道它是怎么做的,當(dāng)然,這些就是被隱藏的關(guān)鍵,只有努力深入研究才能搞清楚。
歪說軟件工程8 - 鯊魚與天蠶 - [原創(chuàng)]
話說海里的鯊魚可以聞到1公里之外的血腥;陸上的雄天蠶能夠感知到4公里外正在求偶的天蠶雄蛾的存在。
離圣誕還有很多天,街上已經(jīng)布滿圣誕的味道,到處可見圣誕小屋和圣誕樹。幾十天后的圣誕商機(jī)是固定,似乎不需要去預(yù)測,但軟件行業(yè)變化多端,
1年以后的商機(jī)已經(jīng)很難預(yù)測,更不用說多年以后。
聽聞大公司為了保持競爭力,而投入研發(fā)力量現(xiàn)在做未來的預(yù)測產(chǎn)品,許多東西做出來時可能沒有意義,但等有意義時,哪怕只有1%的產(chǎn)品是成功的,
它也能因為遙遙領(lǐng)先對手而占盡先機(jī)。
歪說軟件工程7 - 安靜的迪吧 - [原創(chuàng)]
摘要:話說老Y在震耳欲聾的迪吧中與群魔亂舞,他突然停止下來,在聲音震動的浪濤之中,突然感受到一種寧靜,于是在旁邊坐下來,開始靜
靜底地享受,好像自己與整個世界都已沉寂下來。 人都是因冷才知熱,因熱才知冷。老Y喜歡技術(shù),時常把自己置身技術(shù)的不同領(lǐng)域,感受到
許許多多的嘈雜,同時也在寧靜中明白。 不論過程整體的RUP、XP、UML,還是架構(gòu)和編碼的OO、SOA、AOP、IOC,都是為了解決一個問題,
即分工合作的問題,即不同的部門、不同的人、不同的代碼,都能盡可能把自己擅長的事情做好,而不需要太多地管別人是怎么做的,但又能
低成本地實現(xiàn)有效的溝通與合作,自己已經(jīng)做好的事情別人不需要重新做。
歪說軟件工程6 - 思想生產(chǎn)力 - [原創(chuàng)]
話說丫丫生物公司發(fā)明了一種稻谷種子,既適合在水田播種、又適合在旱地播種,而且不怕任何病蟲害、產(chǎn)量遠(yuǎn)高于已有產(chǎn)品,所以一段時間后全球都種
這種稻谷了,但缺德的是,這種稻谷種子是做了技術(shù)處理斷子絕孫的,收割后的稻谷不能用于做種子,所以都只能不斷地從這個公司購買種子,所以它已
富可敵球。
當(dāng)然,這是沒有發(fā)生的可能。但,壟斷“種子”銷售的商業(yè)模式早已成熟,具體到信息產(chǎn)業(yè)就是有各種賣“標(biāo)準(zhǔn)”的公司,這些公司在商業(yè)價值鏈的頂端,對
標(biāo)準(zhǔn)有獨占的權(quán)力,其它人要用都要獲得授權(quán)。
“標(biāo)準(zhǔn)”通常伴隨著某種概念,概念是思想的產(chǎn)物,在軟硬件行業(yè),一個有價值的概念通常都能迅速地轉(zhuǎn)化為商品,不管是芯片還是軟件還是書籍。比如我
們耳熟能詳?shù)摹癇2B”、“UML”、“中間件”、“極限編程”等等,都已經(jīng)是某種產(chǎn)業(yè)鏈的基礎(chǔ)。
基本上沒有中國人原創(chuàng)的能成為生產(chǎn)力的概念,許多東西等中國人明白過來,別人已經(jīng)賺了很大一把了,不過也有努力跟進(jìn)也很賺錢的,比如金蝶的中間
件、阿里巴巴的B2B。
可能中國人太忙了,沒有時間思想。在思想能夠迅即轉(zhuǎn)化為生產(chǎn)力的社會,誰占據(jù)先機(jī)誰就將處于商業(yè)生態(tài)圈食物鏈的頂端。
歪說軟件工程5 - “小燕子”性感寫真 - [原創(chuàng)]
摘要:話說昨晚當(dāng)?shù)匕素噪娨暸_八卦節(jié)目播出一則消息,瞪著兩只白癡空洞的牛眼到處晃蕩曾經(jīng)看似清純可愛的“小燕子現(xiàn)在長大了,也拍起了寫真集,
穿著性感內(nèi)衣,把白花花的皮膚展示給大眾。不管她展示的是內(nèi)衣還是自己,給大眾展示性感的目的是達(dá)到了。 這不能說是進(jìn)步或者隨大流,只是
自然的成長,作為一個演藝公共人物,取悅大眾是她要做的工作,畢竟大眾的審美取向是多樣的,樸素可愛可以取悅一部分人,性感迷人也許可以取
悅更多的人。 作為軟件工程產(chǎn)品的軟件其所有功能最終通過軟件界面為用戶所用,如果一個軟件剛開始一直堅持樸素的界面風(fēng)格,后來也開始表現(xiàn)
得或性感或妖艷,這也不能說是錯誤或者退步,只是自然的成長,畢竟軟件是給用戶用的,尤其是用戶多的大眾軟件,用戶對軟件的認(rèn)可許多時候也
依賴于用戶對軟件界面的直觀感受和審美取向。
歪說軟件工程4 - 光彩守護(hù)員 - [原創(chuàng)]
話說老Y每天上班都路過一座大橋,注意到橋上總有工作人員值班,起初都以為是守橋的,但想想也不對,如果是守橋的應(yīng)該是荷槍實彈的武警才對,
后來有一天看到工作人員穿了一個馬甲,背后有幾個字“光彩守護(hù)員”。
這年頭可能不怕階級敵人炸橋,就怕小偷小摸偷裝扮橋的許多價值不菲的燈具,小偷拆不走橋,拆燈具則容易。不管是怎樣,修一座大橋,能創(chuàng)造一些
職業(yè)甚至行業(yè)是事實。
軟件工程經(jīng)過多年發(fā)展也創(chuàng)造了許多職業(yè)甚至行業(yè)。比如專業(yè)軟件工程咨詢師,以及咨詢公司,專業(yè)測試員,以及專業(yè)搞測試外包的公司,都有活得
上好的。這個世界變化快,如果總以己之見度人,容易范坐井觀天的錯。
歪說軟件工程3 - 成人紙尿布 - [原創(chuàng)]
摘要:話說楊利偉乘神州5號上天時不能用馬桶,是用的類似成人紙尿布的設(shè)備。 小孩帶尿布是因為撒尿是不自覺的,但大人用尿布,對于沒有
經(jīng)過特殊訓(xùn)練的普通人來說,不知道會是什么樣的感覺,估計會很不爽快。 軟件工程中也經(jīng)常有“使用紙尿布”的行為。有時因為軟件發(fā)布期限
所限,只能采用一個臨時的解決方案把需要解決的問題解決,由不得程序員用更多時間去實施更爽快的解決方案;程序員有時會因為暫時想不出
更好的方法而采用臨時的解決方案;或者確實因為水平所限,只能采用別人會覺得很不痛快的解決方案。 這些都沒什么,都很正常。最不爽的
是,當(dāng)更痛快的解決方案可以用時,仍然由于種種原因——比如懶得用、或不敢用、或習(xí)慣了用老方法等等——而繼續(xù)保持“使用紙尿布”。
歪說軟件工程2 - “SoSo”主義 - [原創(chuàng)]
話說小兩口A婚后財務(wù)由老婆打理,老婆每天給老公10元零花錢,并且經(jīng)常詢問老公花錢的情況。這種叫“精細(xì)管理”;
小兩口B,老婆每個月給老公300元零花錢,并告訴老公可以隨便花,但規(guī)定花完就沒有了。這種叫“粗放管理”;
小兩口C,老婆把自己和老公的工資一起全部放到一個抽屜里,大家都可以隨便取、隨便花,當(dāng)然花完就沒有了,沒花完的做為積蓄。這種叫“信任管理”;
軟件工程中的管理模式也大抵超不出以上三種或其組合。
英文中有個詞叫“SoSo”,福建方言中有個詞發(fā)音類似“Shǎo Shào”的詞,意思都是“馬馬虎虎”,即“tiger-tiger-horse-horse”。中國人有四種:
新加坡人、香港人、臺灣人、大陸人,大陸人大都喜歡“馬馬虎虎”,或者說許多時候都只能馬馬虎虎、難得糊涂,或者說大都是“SoSo”主義者。
軟件工程卻希望做到像上文所述第一種的“精細(xì)管理”,這時就會與大陸人的“SoSo”主義沖突,故大陸軟件公司搞軟件工程成功很困難。
但是,其實“SoSo”主義是“和諧社會”的基礎(chǔ)。
歪說軟件工程1 - 科學(xué)淪為藝術(shù) - [原創(chuàng)]
摘要:話說某大學(xué)生美眉在妓院找了一個操作電腦的工作,以后她要不淪為妓女,要不總被認(rèn)為是妓女。
當(dāng)軟件工程作為科學(xué)遭遇實踐,它要不淪為藝術(shù),要不總被認(rèn)為是藝術(shù)。 科學(xué)與藝術(shù)的相同在于都是人生產(chǎn)的;
科學(xué)與藝術(shù)的區(qū)別在于,科學(xué)操縱人,而人操縱藝術(shù)。 當(dāng)軟件工程不是去操縱人,而是由人來操縱,結(jié)果就是軟件工程還是管理的藝術(shù)。
當(dāng)科學(xué)淪為藝術(shù)或被認(rèn)為是藝術(shù),要不該怎么樣就怎么樣,要不原來怎么樣以后還怎么樣。