1. 程式人生 > >一位優秀的工程師寫的文章

一位優秀的工程師寫的文章

軟體中的折衷策略是指通過協調各個質量因素,實現整體質量的最優。就象黨支部副書記扮演和事佬的角色:“…為了使整個組織具有最好的戰鬥力,我們要重用幾個人,照顧一些人,在萬不得已的情況下委屈一批人”。

要讓軟體專案失敗很容易,只要符合下列條件之一即可:
(1)專案經理對軟體一無所知;
(2)技術負責人對程式設計不感興趣;
(3)真真編寫程式碼的程式設計師是臨時僱用的。
如果上述三個條件同時具備,就請放心失敗好了。

一個出色的領導,加上一支技術過硬的隊伍,才有可能創造業績。不能光指望請諸葛亮當教練,就能讓弱不禁風的男足去捧世界盃。

優秀的程式設計師喜歡與優秀的程式設計師一起工作,這是一種理想的願望。一個普通的軟體公司不可能有非常多的優秀程式設計師,即便有,他們也不可能天天聚在一起幹同一件事並且和睦得無法形容。中國自封建社會起就有喜好內鬥的風俗習慣,幾千年下來早已滲透到社會各個角落,那怕黃河水流斷了,估計這民風也會延襲下去。要使程式設計師隊伍穩健,必須有合理的等級制度來維護。等級制度並不限制自由和民主,它能讓自以為聰明絕頂、誰也不服的人們懂得如何合作與奮鬥。就象有了一架梯子,每個人才有機會爬上牆頭摘下那嚮往已久的野花。當梯子散成一堆木棍時,只可能造就幾個賣炭翁。

我覺得這些受害人一點都沒有醒悟:他只知道法輪功是個邪教,並不知道自己為什麼信了邪教。有些事情只要用腦袋去想一想就能分辨是非,可人們就是不去思考,卻渴望能跟對“福星”,甘願把自己的腦袋拴在別人的褲帶上。難道這就是人民的純樸與可愛嗎?回顧一下歷史,在“文革”時期,億萬人民跟著合法的黨組織大幹傷天害理的事,一干就是十多年哪!可見世界上哪個人哪個組織都不能確保絕對的英明。

一個技術出色的程式設計師可以自豪,但不可以目空一切。上天不可能賦於一個人太多的優點,以致於他沒有表示謙虛的餘地。

不要讓人覺得程式設計師只管鑽研技術,可以不懂世事並且應該自由散漫。程式設計師不該因為幼稚而顯得單純,應該是成熟了才變得單純,才配得上這個充滿活力的職業。
如果程式設計師每天要面對那麼多質量因素咬文嚼字,不久就會迂腐得象孔乙已,並且有找不到女朋友的危險。

使用者都希望軟體的執行速度高些(高效能),並且佔用資源少些(高效率)。舊社會地主就是這麼對待長工的:幹活要快點,吃得要少點。程式設計師可以通過優化演算法、資料結構和程式碼組織來提高軟體系統的效能與效率。優化的關鍵工作是找出限制性能與效率的“瓶頸”,不要在無關痛癢的地方瞎忙乎。如果你想職稱升得快,光靠增加課時能頂屁用;你就該一年寫它幾十篇文章,爭取破格升教授。

程式設計時還要注意不可濫用技巧,應該用自然的方式程式設計。我們的確不知道自己的得意之舉究竟是錦上添花,還是畫蛇添足。就象蒸出一籠饅頭,在上面插一朵鮮花,本想弄點詩情畫意,卻讓人誤以為那是一堆熱氣騰騰的牛糞。

聯想集團領導人柳傳志曾說:“沒錢賺的事我們不幹;有錢賺但投不起錢的事不幹;有錢賺也投得起錢但沒有可靠的人選,這樣的事也不幹。”柳傳志為決策立了上述準則,同時也為可以行性分析指明瞭重點。

那些對你的產品說恭維話的人並不見得就是要買貨的人,俗話說“嫌貨才是買貨人”。當你沒碰到一個挑刺的人而感覺這產品好得會讓你發大財時,就要做好會破產的心理準備。

打破水缸的小孩子很多,但並不見得就會有司馬光的業績。由於“經濟、技術、社會環境、人的因素存在差異,有些事情美國人能做成,我們模仿著做未必就能做得成功。雖然“星星之火、可以燎原”,但我們的國力薄弱,實在容不得把有限的火種扔到不毛之地。所以要進行可行性分析,如果不可行,就不要急著去做。

只有在具備極大的市場需求、極優秀的知識產品、業界傑出人物的條件下,才可能使一個公司的股值遠遠高於其“原始投資 + 經營利潤”。

李敖曾說過:“當你沒法扶一個人上馬時,也許應該拉他下馬”。

有些客戶對需求只有朦朧的感覺,當然說不清楚具體的需求。例如全國各地的很多政府機構在搞網路建設,這些單位的領導和辦公人員大多不清楚計算機網路有什麼用,反而要軟體系統分析人員替他們設想需求。這類工程的需求是如此的主觀,以致產生很多貪汙腐敗現象。

據歷史記載,沒有一個軟體的需求改動少於三次。唯一隻改動需求兩次的客戶是個死人。這個可憐的傢伙還是在運送第三次需求的路上被車子撞死的。(Marshall P. Cline, Greg A. Lomow, C++ FAQs, Addison-Wesley)

(1)體系結構就如同人的骨架。如果某個傢伙的骨架是猴子,那麼無論怎樣餵養和美容,這傢伙始終都是猴子,不會成為人。
(2)模組就如同人的器官,具有特定的功能。人體中最出色的模組設計之一是手,手只有幾種動作,卻能做無限多的事情。人體中最糟糕的模組設計之一是嘴巴,嘴巴將最有價值但毫無相干的幾種功能如吃飯、說話、親吻混為一體,使之無法並行處理,真乃人類之不幸。
(3)資料結構與演算法就如同人的血脈和神經,它讓器官具有生命並能發揮功能。資料結構與演算法分佈在體系結構和模組中,它將協調系統的各個功能。人的耳朵和嘴巴雖然是相對獨立的器官,但如果耳朵失聰了,嘴巴就只能發出“啊”“嗚”的聲音,等於喪失了說話的功能(所以聾子天生就是啞巴),可人們卻又能用手勢代替說話。人體的資料結構與演算法設計真是十分神奇並且十分可笑。
(4)使用者介面就如同人的外表,最容易讓人一見鍾情或一見噁心。象人類追求心靈美和外表美那樣,軟體系統也追求(內在的)功能強大和(外表的)介面友好。但隨著生活節奏的加快,人們已少有興趣去品味深藏不露的內在美。如果把Unix系統比作是健壯的漢子和婦人,那麼Windows系統就象嫵媚的小白臉和狐狸精。想不到Windows系統竟然能興風作浪,佔去大半市場。有鑑於此,我們應該鼓勵女士多買化妝品(男士付錢)以獲得更好的介面。

醫生可以把他的錯誤埋葬在地下了事,但程式設計師不能。

有些學生在證明數學題時,喜歡用“顯然”兩字矇混過關。文件中很多內容對開發者可能是“顯然”的,但對使用者而言不見得都是“顯然”的。

以下一些因素將導致維護工作變得困難:
(1)軟體人員經常流動,當需要對某些程式進行維護時,可能已找不到原來的開發人員。只好讓新手去“攻讀”那些程式。
(2)人們一般難以讀懂他人的程式。在勉強接受這類任務時,心裡不免嘀咕:“我又不是他肚子裡的蟲子,怎麼知道他如何程式設計。”
(3)當沒有文件或者文件很差時,你簡直不知道如何下手。
(4)很多程式在設計時沒有考慮到將來要改動,程式之間相互交織,觸一而牽百。即使有很好的文件,你也不敢輕舉妄動,否則你有可能陷進錯誤堆裡。
(5)如果軟體發行了多個版本,要追蹤軟體的演化非常困難。
(6)維護將會產生不良的副作用,不論是修改程式碼、資料或文件,都有可能產生新的錯誤。
(7)維護工作毫無吸引力。高水平的程式設計師自然不願主動去做,而公司也捨不得讓高水平的程式設計師去做。帶著低沉情緒的低水平的程式設計師只會把維護工作搞得一塌糊塗。

在對待一個不良之徒時,可以進行思想教育並給予他關心和幫助,這種方式類似於“軟體維護”;也可以把他關進監獄,送去勞改,這種方式相當於軟體的“再生工程”;如果此人壞透頂了,就斃掉算了。

圖形程式的最大魅力是即 便它毫無用處,你也可以自我欣賞。總有人擔心“花很多精力、物力讓介面那麼漂 亮,圖形那麼逼真是否值得?”這種問題不能強求別人與你一致。我當時讚美女孩 子的最高境界就是把她和我的圖形程式相提並論。

我一直認為馬佩軍是西電程式設計第一高手,他程式設計的時候根本不是人,是指標。之所以我的名氣大,一是因為他不好名利,二是我把他的程式寫上了我的名字(並且賣了不少錢)。

我曾在上海的一輛公共汽車上與一位北京來的旅客聊天,此公極健談。似乎他 到上海旅遊的目的就是為了發掘北京的優越性。見我掛著浙江大學的紅色校徽,且對清華、北大並不神往,不禁十分迷惑,就問:“浙江大學在浦東還是浦西?我要 去看看。” 北京已經是極度優越了,那裡的處長局長比我見過的土豆還多。就請不要把什麼雞毛蒜皮的好東西都拿走,給我們留點希望吧。

我一般隔幾個月去看望大媽一次,中秋節我就和她在一起。朋友們知道我和大媽有這層關係,就紛紛託大媽物色女朋友。大媽果然稱職,她就象特務那樣審視大樓裡的女生。可大媽畢竟是大媽,她採用的“標準”是幾十年前的版本,無法與現今的相容。她盯住了不該盯的,卻漏掉了不該漏的,至今都未“推銷”成功一個。這件事讓我又明白了一個軟體工程道理:光有完善的資料庫還不夠,還應該提供很好的搜尋引擎。

一、主動去創造環境,否則你無法設計人生。
二、生活和工作要充滿激情,否則你無法體會到淋漓盡致的歡樂與痛苦。