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