高質(zhì)量自然是程序員的技術(shù)追求,也是職業(yè)道德的要求。
寧可進(jìn)度慢些,也要保證每個環(huán)節(jié)的質(zhì)量,以圖長遠(yuǎn)利益。
人員管理,項目管理,可行性與需求分析,系統(tǒng)設(shè)計,程序設(shè)計,測試。
軟件開發(fā)中的三種基本策略:“復(fù)用”、“分而治之”、“優(yōu)化——折衷”。
進(jìn)步是應(yīng)該的,但不進(jìn)步則是可恥的。
在一個新系統(tǒng)中,大部分的內(nèi)容是成熟的,只有小部分內(nèi)容是創(chuàng)新的。
面向?qū)ο螅∣bject Oriented)學(xué)者的口頭禪就是“請不要再發(fā)明相同的車輪子了” 。
將具有一定集成度并可以重復(fù)使用的軟件組成單元稱為軟構(gòu)件(Software Component)。
分而治之是指把一個復(fù)雜的問題分解成若干個簡單的問題,然后逐個解決。
優(yōu)化工作不是可有可無的事情,而是必須要做的事情。當(dāng)優(yōu)化工作成為一種責(zé)任時,程序員才會不斷改進(jìn)軟件中的算法,數(shù)據(jù)結(jié)構(gòu)和程序組織,從而提高軟件質(zhì)量。
一些不正確的觀念:
觀念之一:我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標(biāo)準(zhǔn)與示例,可以幫助我們解決軟件開發(fā)中遇到的任何問題。
客觀情況:好的參考書無疑能指導(dǎo)我們的工作。充分利用書籍中的方法、技術(shù)和技巧,可以有效地解決軟件開發(fā)中大量常見的問題。但實踐者并不能因此依賴于書籍,這是因為:(1)現(xiàn)實的工作中,由于條件千差萬別,即使是相當(dāng)成熟的軟件工程規(guī)范,常常也無法套用。(2)軟件技術(shù)日新月異,沒有哪一種軟件標(biāo)準(zhǔn)能長盛不衰。祖?zhèn)髅胤皆谀承╊I(lǐng)域很吃香,而在軟件領(lǐng)域則意味著落后。
觀念之二:我們擁有最好的開發(fā)工具、最好的計算機(jī),一定能做出優(yōu)秀的軟件。
客觀情況:良好的開發(fā)環(huán)境只是產(chǎn)出成果的必要條件,而不是充分條件。如果擁有好環(huán)境的是一群庸人,難保他們不干出南轅北轍的事情。
觀念之三:如果我們落后于計劃,可以增加更多的程序員來解決。
客觀情況:軟件開發(fā)不同于傳統(tǒng)的農(nóng)業(yè)生產(chǎn),人多不見得力量大。如果給落后于計劃的項目增添新手,可能會更加延誤項目。因為:(1)新手會產(chǎn)生很多新的錯誤,使項目混亂。(2)老手向新手解釋工作以及交流思想都要花費時間,使實際開發(fā)時間更少。所以科學(xué)的項目計劃很重要,不在乎計劃能提前多少,重在恰如其分。如果用“大躍進(jìn)”的方式奔向共產(chǎn)主義,只會產(chǎn)生倒退的后果。
觀念之四:既然需求分析很困難,不管三七二十一先把軟件做了再說,反正軟件是靈活的,隨時可以修改。
客觀情況:對需求把握得越準(zhǔn)確,軟件的修修補(bǔ)補(bǔ)就越少。有些需求在一開始時很難確定,在開發(fā)過程中要不斷地加以改正。軟件修改越早代價越少,修改越晚代價越大,就跟治病一樣道理。
程序設(shè)計是自由與快樂的事情,不要發(fā)誓忠于某某主義而自尋煩惱。
失敗的技巧通常是技倆.
開發(fā)人員應(yīng)該意識到:所有的錯誤都是嚴(yán)重的,不存在微不足道的錯誤。這樣才能少犯錯誤。
管理的目的是讓大家一起把工作做好,并且讓各人獲得各自的快樂和滿足。當(dāng)一個組織被出色地領(lǐng)導(dǎo)時,雇員甚至不知道他們已被領(lǐng)導(dǎo)。在項目完成時,他們會自豪地說:“看看我們通過努力取得的成績吧”。所以管理者不能老惦記著自己是一個官,而應(yīng)時刻意識到自己是責(zé)任的主要承擔(dān)者。
真正的程序員都有如下秉性:
一、誠實
程序員在學(xué)習(xí)與工作期間幾乎天天與機(jī)器打交道,壓根就沒有受欺騙或欺騙人的機(jī)會。勤奮的程序員在調(diào)試無窮多的程序Bug時,已經(jīng)深深地接受了“誠實”的教育。不誠實的人,他肯定不想做、也做不好程序員。
二、簡單——實用主義
目前即使最先進(jìn)的計算機(jī)也不具備智能,程序員的基本工作就是把復(fù)雜的問題轉(zhuǎn)化為計算機(jī)能處理的簡單的程序。如果一個問題復(fù)雜到連程序員自己都不能理解,他就無法編出程序讓更笨的計算機(jī)來處理。所以程序員信奉“簡單——實用”主義。
三、愛憎分明
程序員大都喜歡技術(shù)挑戰(zhàn),不喜歡搞測試與維護(hù)。高水平的程序員喜歡與高水平的程序員一起工作,因為他們怕“與臭棋佬下棋,棋越下越臭”。程序員大都厭惡拉幫結(jié)派、耍政治手腕。不信,數(shù)一數(shù)你認(rèn)識的程序員,有幾個是黨派人士?
四、工作單調(diào)但不乏味
有人問編程大師:“程序設(shè)計的真正含義是什么 ?”
大師回答說:“餓了的時候就吃,困的時候就睡,只要時機(jī)恰當(dāng)就進(jìn)行程序設(shè)計。”
其實程序員的生活和工作已融為一體,盡管單調(diào)卻不乏味,還能獨享孤獨。有詩為證:
我編程三日
兩耳不聞人聲
只有硬盤在歌唱
結(jié)論:優(yōu)秀的程序員沒有理由不讓人喜歡,他們遠(yuǎn)比怪僻來得可愛。
微軟公司在選擇經(jīng)理人員時,總是把他們的技術(shù)知識和運用技術(shù)去賺錢的能力放在首位。
比蓋曾這樣描述聰明:人聰明人一定反應(yīng)敏捷,善于接受新事物。他能迅速進(jìn)入一個新領(lǐng)域,給你一個頭頭是道的解釋。他提出的問題往往一針見血、擊中要害。他能及時掌握所學(xué)知識,并且博聞強(qiáng)記,他能把本來認(rèn)為互不相干的領(lǐng)域聯(lián)系在一起使問題得到解決。他富有創(chuàng)新精神與合作精神……
好的程序經(jīng)理應(yīng)該具備以下幾個條件:
一、技術(shù)水平是程序員隊伍中的最高級別
每個程序員骨子里頭都有一股傲氣,如果你不能技壓群雄,他們就不會聽你指揮。一個技術(shù)水平較差的人被任命為程序經(jīng)理真是個悲劇,就象一個略有權(quán)勢的太監(jiān),表面上有人對他點頭哈腰,背后卻被人鄙視。
二、能做最多且最難的工作
程序經(jīng)理編程要快且好。別人要干一天的活,他半天就能做完,這樣才會有精力去搞管理。程序經(jīng)理應(yīng)負(fù)責(zé)系統(tǒng)分析、系統(tǒng)設(shè)計這類最難的開發(fā)工作,并指導(dǎo)不同水平的程序員把各自的工作做好。如果人手不夠,程序經(jīng)理要能同時干幾個人的活。
三、有人格魅力
軟件開發(fā)是智力創(chuàng)作過程,你不能指望僅通過執(zhí)行規(guī)章制度來產(chǎn)生好的作品。很多軟件公司的程序經(jīng)理都不是管理專業(yè)出身的,他們也不可能為了搞好管理而成天玩弄心機(jī)。技術(shù)出色的程序經(jīng)理一般少有心術(shù)不正的,所以管理的重點應(yīng)是“以身作則”、“公正待人”。如果程序經(jīng)理在上班時趴在桌上睡覺,其他程序員也會這樣干。如果程序經(jīng)理發(fā)現(xiàn)有兩個程序員趴在機(jī)器旁睡覺,不能只對其中一個大聲吼叫:“你一編程就想睡覺,看看人家,在睡覺時都想著編程。”
如果管理者沒有人格魅力,就沒有人信服你,團(tuán)隊就不會有凝聚力,烏合之眾不可能開發(fā)出優(yōu)秀的軟件。
結(jié)論:一個有活力的軟件公司的各級經(jīng)理都不會這樣感嘆,“因為我啥也不會干,所以只好當(dāng)領(lǐng)導(dǎo)。”
在軟件領(lǐng)域,技術(shù)的力量是無窮的,一天之內(nèi)就可使整個產(chǎn)業(yè)發(fā)生巨變。
好兵好將都不是天生的,是后天練出來的;既要學(xué)會冷靜地分析問題,又要充滿激情地去工作。
等級制度并不限制自由和民主,它能讓自以為聰明絕頂、誰也不服的人們懂得如何合作與奮斗。就象有了一架梯子,每個人才有機(jī)會爬上墻頭摘下那向往已久的野花。當(dāng)梯子散成一堆木棍時,只可能造就幾個賣炭翁。
把技術(shù)水平分為四級,第一級最低,第四級最高。第一級技術(shù)水平的程序員主要考核編程基本功,要求質(zhì)量合格(他們主要來自剛畢業(yè)的大學(xué)生)。第二級技術(shù)水平的程序員編程質(zhì)量要高,做過幾個軟件項目,有數(shù)年的工作經(jīng)驗,并能指導(dǎo)新手的工作。第三級技術(shù)水平的程序員主要考核系統(tǒng)分析與系統(tǒng)設(shè)計的能力,要求其技術(shù)有足夠的深度和廣度。第四級技術(shù)水平的程序員是成功的軟件產(chǎn)品的設(shè)計師,他不僅技術(shù)超群,并且能使技術(shù)轉(zhuǎn)化為有價值的商品。
把管理(這里僅指軟件業(yè)務(wù)的管理,不考慮行政事務(wù))水平也分成四級。第零級最低,第三級最高。第零級管理水平的人沒有管理職務(wù),就是普通員工。第一級管理水平的人是開發(fā)小組的組長,可帶領(lǐng)幾名程序員工作。第二級管理水平的人是項目經(jīng)理。第三級管理水平的人決定某些產(chǎn)品是否要開發(fā),以及如何去占領(lǐng)市場。
當(dāng)我們在工作中碰到挫折時,先要冷靜地分析問題(事出有因哪),找出問題的內(nèi)因與外因。內(nèi)因是最主要的,應(yīng)該予以最先解決。
“迷信”是傻子碰到騙子的結(jié)果。
為了不讓自己“傻”,善良的人們應(yīng)該用腦子去多學(xué)一些知識,努力讓自己來把握命運,不要急著把一生托給某個人或某個組織。
上天不可能賦于一個人太多的優(yōu)點,以致于他沒有表示謙虛的余地。
我們在求學(xué)時可能太功利太挑剔,導(dǎo)致知識結(jié)構(gòu)非常單薄,只怕到了晚年也成不了大器。當(dāng)程序員擅長技術(shù)時,還要時刻留意彌補(bǔ)自己并不擅長的非技術(shù)才能。揚長補(bǔ)短才能提高綜合素質(zhì)。
人是最有價值的資源。
進(jìn)度安排并不見得一定要符合邏輯順序。應(yīng)盡可能地先做技術(shù)難度高的事,后做難度低的事。也就是辛苦在前,輕松在后。
里程碑就象心靈的燈塔,使忙碌的人群不混亂,不迷失方向。
人在做一件事情時,由于存在很多不確定的因素,一般不可能100% 地達(dá)到目標(biāo)。假設(shè)平常人做事能完成目標(biāo)的80%。如果某個人的目標(biāo)是100分,那么他最終成績可達(dá)80分。如果某個人的目標(biāo)只是60分,那么他最終成績只有48分。
如果沒有高目標(biāo),人的墮落就很快。如果沒有“零缺陷”的質(zhì)量目標(biāo),也許缺陷就會成堆。
軟件是如此的靈活,如果沒有規(guī)范來制約,就容易因無序的喜好而導(dǎo)致混沌;但規(guī)范如果太嚴(yán)密了,就會扼殺程序員生機(jī)勃勃的創(chuàng)造力。
簡潔是一種美!
每當(dāng)我們沉迷于短期利益不思進(jìn)取時,應(yīng)該好好回憶童年時代那些偉大的抱負(fù),給自己一些激勵。
“人分四類——人物,人才,人手,人渣。”
我曾得到很多炫目的榮譽,但學(xué)生時代的榮譽只是一種鼓勵,并不是對我才能和事業(yè)的確認(rèn)。
“當(dāng)你沒法扶一個人上馬時,也許應(yīng)該拉他下馬”------李敖
為什么軟件系統(tǒng)分析員的工資要比普通程序員高?就是因為需求分析困難嘛。
如果您學(xué)會了客觀、科學(xué)的可行性分析,在作決策時就要果斷。
系統(tǒng)設(shè)計的優(yōu)劣在根本上決定了軟件系統(tǒng)的質(zhì)量。
文學(xué)中有科學(xué),音樂中有數(shù)學(xué),漫畫中有現(xiàn)代數(shù)學(xué)的拓?fù)鋵W(xué)。漫畫家可以“幾筆”就把一個人畫出來,不管怎么美化或丑化,就是活像。為什么?因為那“幾筆”不是別的,而是拓?fù)鋵W(xué)中的特征不變量,這是事物最本質(zhì)的東西。 -------楊叔子
體系結(jié)構(gòu)是軟件系統(tǒng)中最本質(zhì)的東西。
內(nèi)聚(Cohesion)是一個模塊內(nèi)部各成分之間相關(guān)聯(lián)程度的度量。耦合(Coupling)是模塊之間依賴程度的度量。
技術(shù)進(jìn)步最快也快不過人們欲望的增長。
對象(Object)是類(Class)的一個實例(Instance)。
醫(yī)生可以把他的錯誤埋葬在地下了事,但程序員不能。我們必須要學(xué)會測試與改錯,并且把測試與改錯工作做好。
測試并不僅是個技術(shù)問題,更是個職業(yè)道德問題。
測試只能證明缺陷存在,而不能證明缺陷不存在。
改錯是個大悲大喜的過程,一天之內(nèi)可以讓人在悲傷的低谷和喜悅的顛峰之間跌蕩起伏。
程序中的錯誤只有開發(fā)者自己才能找出并改掉。如果因畏懼而拖延,會讓你終日心情不定,食無味,睡不香。所以長痛不如短痛,要集中精力對付錯誤。
編程大師曾說:“哪怕程序只有三行長,總有一天你也不得不對它維護(hù)。”
posted on 2007-06-09 22:19
星夢情緣 閱讀(2267)
評論(1) 編輯 收藏 引用 所屬分類:
關(guān)于編程