A. 為什麼程序員不願寫文檔
其中的原因很多,我自己歸納了幾點:
1.怕煩
程序員從入門之日起,就在心裡埋藏了一顆編程的種子,認為程序員就是編程序的,就是和計算機打交道的,程序就是程序員的全部。無論是在編程之前寫文檔,還是在編程之後寫文檔。他們都認為寫文檔很煩人。
1)文檔種類太多。越正規越多。一想到要寫那麼多的文檔,程序員的頭都要大了。
2)文檔寫作要求不低。有格式要求、內容要求,還需要畫各種流程圖、示意圖、關系圖、界面圖和填寫各種表格說明,以及要收集各種資料。雖然沒有技術含量,但是要花的時間比編程序多,而且也不一定能寫好。
3)在正規的開發公司中一般一個變更就要編寫一系列的變更文檔。當不斷變更時,只有最後的變更文檔是最重要的。當我們不知道當前是不是最後一個文檔時,我們就不願意寫可能被後面的文檔替代的文檔。
4)當寫了文檔之後,就會不斷有使用文檔的人來詢問細節,這些詢問往往會讓人崩潰。這是因為很難寫出讓每個人都提不出問題的文檔。
2.沒空
在很多情況下,程序員都處於一種「時間緊、任務重」狀態。在急於得出編程結果的驅使下,程序員一心撲在編程上,恨不得一分鍾一個變化,哪有心思和時間先把文檔寫好再去編程呢?即使他們擁有先把程序編出來,然後再補寫文檔的想法,但是一旦他們完成一段程序之後,就會立即撲向第二段程序。如此下來,編寫文檔只能放在項目開發的後期了。你要是真的寫文檔,那寫文檔的時間早已將編程時間給擠佔了,你的編程工作就完不成了。
3.沒有用
文檔的重要性其實對不同對象是不一樣的。如果你說文檔沒有用,立即會有人用唾沫把你淹死,他們立即會搬出哪個哪個說文檔是重要的,文檔是不可缺的。唯獨不敢說「我自己認為文檔是重要的」。這也反過來說明文檔的有用性程度對不同人是不一樣的。對於程序員來說,只要能把程序編出來就行了。很多程序員不寫文檔照樣編出程序來,在他們的觀念中文檔不寫也罷。如果按文檔編程序,那就要確保文檔的正確性、不可更改性。而實際上,文檔不如編程快,編程不如變化快,不斷變化的需求和代碼讓文檔如同一張過時的廢紙一樣。
在現實中,有的文檔變成了項目開發後的總結,對開發本身並不起作用,只是保留一個存在的形式,以應付各種各樣規范的需要。在這種情況下,文檔沒有任何實用價值,所以即使程序員寫了,也沒有什麼作用。尤其是項目投產後,幾經升級,最初的文檔早已和現實的情況對不上號了,文檔更新和系統的一致性更是難於控制。
4.沒好處
既然認為編程序才是正道,那麼程序員寫文檔就是一種額外和輔助的工作,做了就做了,對於程序員來說沒有任何好處。
當然,文檔的好處更多地體現在軟體公司、單位、軟體用戶、後續程序員身上,它是一種「前人栽樹,後人乘涼」的好事。所以程序員不願意寫文檔。
文檔有多麼重要呢?有人把它上升到「程序員頭腦的拷貝」的高度,有的人甚至說,程序員走了後,只要有了文檔,軟體公司可以再招新人,公司照樣運轉起來。如此說來,天性聰明的程序員會把文檔寫得清清楚楚嗎?
5.不會寫
從寫作本身來看,寫好一篇文檔不是一件容易的事。文檔有文檔的格式和寫作要求。現在的人只喜歡動嘴說事,沒有多少人在平時會動筆寫字,更不用說寫文章了。所以,寫文檔從理論上來說也是需要學習和訓練的,需要在平時進行寫作積累。當要求一些程序員寫文檔的時候,他往往會回答你:「怎麼寫呀?我不會。」你不會寫可以不怪你,你不去學,反而理直氣壯地說不會,則是你的不對了。難道那些會寫文檔的人都是「獃子」嗎?難道他們不懂幹活辛苦的道理嗎?
當一個男子向一個自己喜歡的女子示愛,需要用情書來表白的時候,難道他不會寫情書嗎?即使他不會寫,他也一定會克服千難萬險把情書寫出來的,這是他的主觀使然。如果程序員主觀上想寫文檔,怎麼會怕煩?怎麼會怕沒空?怎麼會怕文檔沒有用?怎麼會怕不會寫?這些怕其實都是借口。真正優秀的程序員應該不單是編程的高手,同時也應該是寫文檔的高手。
程序員真正不喜歡寫文檔的原因是:文檔是給別人看的,不是給自己看的。如果要使程序員喜歡寫文檔,那就要提高程序員的意識和境界,或者要給寫文檔的程序員以獎勵。而靠制度、管理讓程序員去寫文檔只能是一種職業上的弊端。當有一天寫文檔也成為一個專業化的崗位,程序員和文檔人員分開時,程序員就會一心一意看文檔寫代碼,文檔員就會以此為職業,一心一意寫文檔拿工資。我們將不再為此進行討論。這種分工一定是未來的趨勢。一些大的公司或管理規范的公司都已經有這樣的分工了。只是很多中小軟體公司或企事業單位里的IT部門還沒有專業化到如此程度。程序員不喜歡寫文檔也許說明他們不願意承擔太多的角色吧。
不管怎麼說,作為一個程序員(尤其想成為優秀程序員)一定要學會寫文檔,一定要學會欣賞文檔。無論你是否喜歡,你都應該可以在文檔的各種問題面前可進可退。可以這樣說,那些既不會寫文檔,又不會欣賞文檔的程序員是沒有資格說「我就不喜歡寫文檔」這種話的。
B. 程序員的日常就是不停地寫代碼嗎這行業是吃「青春飯」的嗎
其實不得不說是程序員的職業相對較為特殊,也正因為如此被網友們認為吃青春飯的行業也是很有道理的,從某些意義上來講,年長的程序員並不會取得老闆的重視,尤其是到了中年很容易被公司所辭退,所以也正是因為如此程序員的晚年,存在很多不確定性因素,總的來說,也要從以下幾個方面出發思考問題。
3,由於行業本身的特殊性,導致大多數程序員在中年都會改行從事其他產業。其實不得不說,是程序員本身就屬於 it產業,也正是因為技術相對更新周期較短,所以導致大多數程序員也是吃青春飯的,所以很容易在中年之後被公司所淘汰,為了生存大多數中年程序員都會改行從事其他產業。
其實不得不說的是程序員的日常確實相對較為辛苦,而且不停在輸代碼和代碼打交道,而大多數程序員由於行業本身特殊,所以一到了中年很容易被公司所淘汰,只能被動的轉行其他產業。
C. C語言程序改錯題(分析程序功能,指出題中的錯點,對錯誤進行分析並改正)
林銳的<<高質量C/C++編程>>
你看了這本書會有些認識的.
下面是本書的前言部分.....
軟體質量是被大多數程序員掛在嘴上而不是放在心上的東西!
除了完全外行和真正的編程高手外,初讀本書,你最先的感受將是驚慌:「哇!我以前捏造的C++/C程序怎麼會有那麼多的毛病?」
別難過,作者只不過比你早幾年、多幾次驚慌而已。
請花一兩個小時認真閱讀這本百頁經書,你將會獲益匪淺,這是前面N-1個讀者的建議。
一、編程老手與高手的誤區
自從計算機問世以來,程序設計就成了令人羨慕的職業,程序員在受人寵愛之後容易發展成為毛病特多卻常能自我臭美的群體。
如今在 Internet 上流傳的「真正」的程序員據說是這樣的:
(1) 真正的程序員沒有進度表,只有討好領導的馬屁精才有進度表,真正的程序員會讓領導提心吊膽。
(2) 真正的程序員不寫使用說明書,用戶應當自己去猜想程序的功能。
(3) 真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當然也很難讀。
(4) 真正的程序員不畫流程圖,原始人和文盲才會干這事。
(5) 真正的程序員不看參考手冊,新手和膽小鬼才會看。
(6) 真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。
(7) 真正的程序員認為自己比用戶更明白用戶需要什麼。
(8) 真正的程序員不接受團隊開發的理念,除非他自己是頭頭。
(9) 真正的程序員的程序不會在第一次就正確運行,但是他們願意守著機器進行若干個 30 小時的調試改錯。
(10) 真正的程序員不會在上午 9:00 到下午 5:00 之間工作,如果你看到他在上午 9:00 工作,這表明他從昨晚一直干到現在。
……
具備上述特徵越多,越顯得水平高,資格老。所以別奇怪,程序員的很多缺點竟然可以被當作優點來欣賞。就象在武俠小說中,那些獨來獨往、不受約束且帶點邪氣的高手最令人崇拜。我曾經也這樣信奉,並且希望自己成為那樣的「真正」的程序員,結果沒有得到好下場。
我從讀大學到博士畢業十年來一直勤奮好學,累計編寫了數十萬行 C++/C 代碼。有這樣的苦勞和疲勞,我應該稱得上是編程老手了吧?
我開發的軟體都與科研相關(集成電路 CAD 和 3D 圖形學領域),動輒數萬行程序,技術復雜,難度頗高。這些軟體頻頻獲獎,有一個軟體獲得首屆中國大學生電腦大賽軟體展示一等獎。在 1995 年開發的一套圖形軟體庫到 2000 年還有人買。羅列出這些「業績」,可以說明我算得上是編程高手了吧?
可惜這種個人感覺不等於事實。
讀博期間我曾用一年時間開發了一個近 10 萬行 C++ 代碼的 3D 圖形軟體產品,我內心得意表面謙虛地向一位真正的軟體高手請教。他雖然從未涉足過 3D 圖形領域,卻在幾十分鍾內指出該軟體多處重大設計錯誤。讓人感覺那套軟體是用紙糊的華麗衣服,扯一下掉一塊,戳一下破個洞。我目瞪口呆地意識到這套軟體毫無實用價值,一年的心血白化了,並且害死了自己的軟體公司。
人的頓悟通常發生在最心痛的時刻,在沮喪和心痛之後,我作了深刻反省,「面壁」半年,重新溫習軟體設計的基礎知識。補修「內功」之後,又覺得腰板硬了起來。博士畢業前半年,我曾到微軟中國研究院找工作,接受微軟公司一位資深軟體工程師的面試。他讓我寫函數 strcpy 的代碼。
太容易了吧?
錯!
這么一個小不點的函數,他從三個方面考查:
( 1 )編程風格;
( 2 )出錯處理;
( 3 )演算法復雜度分析(用於提高性能)。
在大學里從來沒有人如此嚴格地考查過我的程序。我化了半個小時,修改了數次,他還不盡滿意,讓我回家好好琢磨。我精神抖擻地進「考場」,大汗淋漓地出「考場」。這「高手」當得也太窩囊了。我又好好地反省了一次。
我把反省後的心得體會寫成文章放在網上傳閱,引起了不少軟體開發人員的共鳴。我因此有幸和國產大型 IT 企業如華為、上海貝爾、中興等公司的同志們廣泛交流。大家認為提高質量與生產率是軟體工程要解決的核心問題。高質量程序設計是非常重要的環節,畢竟軟體是靠編程來實現的。
我們心目中的老手們和高手們能否編寫出高質量的程序來?
不見得都能!
就我的經歷與閱歷來看,國內大學的計算機教育壓根就沒有灌輸高質量程序設計的觀念,教師們和學生們也很少自覺關心軟體的質量。勤奮好學的程序員長期在低質量的程序堆中滾爬,吃盡苦頭之後才有一些心得體會,長進極慢,我就是一例。
現在國內 IT 企業擁有學士、碩士、博士文憑的軟體開發人員比比皆是,但他們在接受大學教育時就「先天不足」,豈能一到企業就突然實現質的飛躍。試問有多少軟體開發人員對正確性、健壯性、可靠性、效率、易用性、可讀性(可理解性)、可擴展性、可復用性、兼容性、可移植性等質量屬性了如指掌?並且能在實踐中運用自如?。「高質量」可不是幹活小心點就能實現的!
我們有充分的理由疑慮:
( 1 )編程老手可能會長期用隱含錯誤的方式編程(習慣成自然),發現毛病後都不願相信那是真的!
( 2 )編程高手可以在某一領域寫出極有水平的代碼,但未必能從全局把握軟體質量的方方面面。
事實證明如此。我到上海貝爾工作一年來,陸續面試或測試過近百名「新」「老」程序員的編程技能,質量合格率大約是 10 %。很少有人能夠寫出完全符合質量要求的 if 語句,很多程序員對指針、內存管理一知半解, …… 。
領導們不敢相信這是真的。我做過現場試驗:有一次部門新進 14 名碩士生,在開歡迎會之前對他們進行「 C++/C 編程技能」摸底考試。我問大家試題難不難?所有的人都回答不難。結果沒有一個人及格,有半數人得零分。競爭對手公司的朋友們也做過試驗,同樣一敗塗地。
真的不是我「心狠手辣」或者要求過高,而是很多軟體開發人員對自己的要求不夠高。
要知道華為、上海貝爾、中興等公司的員工素質在國內 IT 企業中是比較前列的,倘若他們的編程質量都如此差的話,我們怎麼敢期望中小公司拿出高質量的軟體呢?連程序都編不好,還談什麼振興民族軟體產業,豈不胡扯。
我打算定義編程老手和編程高手,請您別見笑。
定義 1 :能長期穩定地編寫出高質量程序的程序員稱為編程老手。
定義 2 :能長期穩定地編寫出高難度、高質量程序的程序員稱為編程高手。
根據上述定義,馬上得到第一推論:我既不是高手也算不上是老手。
在寫此書前,我閱讀了不少程序設計方面的英文著作,越看越羞慚。因為發現自己連編程基本技能都未能全面掌握,頂多算是二流水平,還好意思談什麼老手和高手。希望和我一樣在國內土生土長的程序員朋友們能夠做到:
( 1 )知錯就改;
( 2 )經常溫故而知新;
( 3 )堅持學習,天天向上。
二、本書導讀
首先請做附錄B的C++/C試題(不要看答案),考查自己的編程質量究竟如何。然後參照答案嚴格打分。
( 1)如果你只得了幾十分,請不要聲張,也不要太難過。編程質量差往往是由於不良習慣造成的,與人的智力、能力沒有多大關系,還是有葯可救的。成績越差,可以進步的空間就越大,中國不就是在落後中趕超發達資本主義國家嗎?只要你能下決心改掉不良的編程習慣,第二次考試就能及格了。
( 2)如果你考及格了,表明你的技術基礎不錯,希望你能虛心學習、不斷進步。如果你還沒有找到合適的工作單位,不妨到上海貝爾試一試。
( 3)如果你考出85分以上的好成績,你有義務和資格為你所在的團隊作「C++/C編程」培訓。希望你能和我們多多交流、相互促進。半年前我曾經發現一顆好苗子,就把他挖到我們小組來。
( 4)如果你在沒有任何提示的情況下考了滿分,希望你能收我做你的徒弟。
編程考試結束後,請閱讀本書的正文。
本書第一章至第六章主要論述C++/C編程風格。難度不高,但是細節比較多。別小看了,提高質量就是要從這些點點滴滴做起。世上不存在最好的編程風格,一切因需求而定。團隊開發講究風格一致,如果制定了大家認可的編程風格,那麼所有組員都要遵守。如果讀者覺得本書的編程風格比較合你的工作,那麼就採用它,不要只看不做。人在小時候說話發音不準,寫字潦草,如果不改正,總有後悔的時候。編程也是同樣道理。
第七章至第十一章是專題論述,技術難度比較高,看書時要積極思考。特別是第七章「內存管理」,讀了並不表示懂了,懂了並不表示就能正確使用。有一位同事看了第七章後覺得「野指針」寫得不錯,與我切磋了一把。可是過了兩周,他告訴我,他忙了兩天追查出一個Bug,想不到又是「野指針」出問題,只好重讀第七章。
光看本書對提高編程質量是有限的,建議大家閱讀本書的參考文獻,那些都是經典名著。
如果你的編程質量已經過關了,不要就此滿足。如果你想成為優秀的軟體開發人員,建議你閱讀並按照 CMMI 規范做事,讓自己的綜合水平上升一個台階。上海貝爾的員工可以向網路應用事業部軟體工程研究小組索取 CMMI 有關資料,最好能參加培訓。
三、版權聲明
本書的大部分內容取材於作者一年前的書籍手稿(尚未出版),現整理匯編成為上海貝爾網路應用事業部的一個規范化文件,同時作為培訓教材。
由於 C++/C 編程是眾所周知的技術,沒有秘密可言。編程的好經驗應該大家共享,我們自己也是這么學來的。作者願意公開本書的電子文檔。
版權聲明如下:
( 1 )讀者可以任意拷貝、修改本書的內容,但不可以篡改作者及所屬單位。
( 2 )未經作者許可,不得出版或大量印發本書。
( 3 )如果競爭對手公司的員工得到本書,請勿公開使用,以免發生糾紛。
預計到 2002 年 7 月,我們將建立切合中國國情的 CMMI 3 級解決方案。屆時,包括本書在內的約 1000 頁規范將嚴格受控。
歡迎讀者對本書提出批評建議 。
另外,團IDC網上有許多產品團購,便宜有口碑
D. 作為一個好的程序員,都需要具備哪些基本的素質和能力
我上班第一天我的老闆讓我做的第一件事
看兩篇文章:
程序員隨想
雷軍
我不是天生的程序員,也並非天生就喜歡電腦,上高中時也沒有想過將來會當程序員,接觸電腦純屬偶然--小時候的一個好朋友上大學時選擇了電腦專業,為了和這個朋友有更多的「共同語言」我便選擇了計算機系。在大學,我略窺電腦世界,開始為之「發燒」;畢業後,開始了一個程序員的職業生涯。
從開始寫程序到現在快十年了,寫過的程序不少。從這些年的風風雨雨中走過來,不能不有些體會。說到體會,最大的體會就是這條路太漫長。
一、一輩子有你 苦一點也願意
我沒有奢望大家把寫程序和文學創作相提並論,但其中的苦楚卻不是一個普通用戶能夠體味的。為了寫好一個程序,我們度過太多不眠之夜。有個朋友如此評價道,「寫程序簡直是在自殺,巨費精力巨費腦子巨累」。但還是有許多人不畏其苦,前仆後繼。
我剛接觸到電腦就發現電腦的妙處:電腦遠沒有人那麼復雜,如果你的程序寫得好,你就可以和電腦有著非常融洽的關系,就可以指揮電腦干你想乾的事,這個時候,你是十足的主宰。每每坐在電腦面前,你就如同在一個王國里巡行。
電腦里的世界很大,程序員是活在自己想像的王國里。你可以細微到電腦里的每一個位元組、每一個比特的東西。
這樣的日子簡直就是天堂般的日子,很多人都愛上了這樣的日子。
不少人認為程序員最多干到三十五歲就可以收山,腦子也差不多該歇歇了,並認為寫程序是年輕人的事情,到了一定年齡,估計沒什麼人再當程序員。
我剛畢業時,意氣風發,也想先吃點苦,到了三十歲就不幹了。年長一點後就發現了自己的無知。一個人大學畢業就二十一二歲,技術成熟一點後可能二十五,接著就是票子、妻子和房子等等諸多忙不完的事情。一切搞掂的時候,也許就是三十五歲。如果三十五歲就放棄的話,我們就不用選擇程序員的道路。
電腦進入我國時間不短,但真正大規模開始用,還是八五年PC登陸我國時候的事。因此國內真正寫電腦程序的人最長也就寫了十幾年(不知道是否還有這樣的人)。由於電腦應用在國內時間比較短,國內程序開發的主力以三十五歲以下的年輕人為主,但這並不表示程序員如同紅粉佳人般的容易衰老。美國和台灣地區的開發者以三四十歲的人為主。開始寫程序的時候,我們覺得沒有什麼不能做的(現在還能聽到這樣的豪言壯語),而且更要命的是,好象我們特別聰明,特別適合開發軟體,比老外強得多。當我們真正接觸那些傑出的國外開發人員的時候,發現他們太厲害了,都有十多年的開發經驗,絕對多數的產品出自這些有豐富開發經驗的程序員之手。
畢業後,編程不僅僅是愛好,而且成了一輩子的工作,可以肯定會干一輩子,雖然我沒有打算一生只干這一件事。用一生來編程是一件既容易又困難的事。如果碌碌無為,為交差寫點程序,這樣寫兩輩子的人都有。但如果想全身心地寫程序,寫十年都不是一件容易的事。現在我的不少朋友都洗手了,有時我也有這種想法,但一旦面對電腦,立刻頓悟:電腦還是自己最擅長乾的事,也是最順手的事。
二、我的未來不是夢
有的人刻苦學習編程技術,努力提高編程水平,並把高級程序員作為追求的目標,甚至是終身的奮斗目標。後來參與了真正的商品化軟體開發後,感到非常困惑和茫然。
當我上大學的時候,高級程序員也曾是我的目標。當時,我通過等級考試獲得了高級程序員證書,並在自己的名片上印上「高級程序員」的字樣。後來,我的水平提高了,似乎也成了大家認可的好程序員了。這個時候我卻開始茫然。我希望我的技術能得到別人的承認,當得到別人的承認後,我又能如何呢?後來我發現,無論成為多麼高級的程序員都沒用,關鍵是是否能夠出想法、出產品,你的勞動是否能被社會承認,是否能為社會創造財富。
我的未來是明確的,開發出高質量的適用社會的產品,為社會創造財富。
三、每一個程序都是藝術品
有人認為程序員沒有什麼了不起,不過是一種熟練工種而已;也有人把編程說成是藝術創作,捧上天。這兩種意見爭論比較激烈,甚至可以說針鋒相對。
我們換個工種來看,石匠應該是熟練工種,跟藝術似乎沾不上邊。;但正是這些石匠,給我們留下了數不勝數的文物古跡,如樂山大佛、莫高窟等等。應該說這此石匠給我們留下了無窮的文化財富。我認為編程的工作和石匠比較相似,是技術,也是藝術。
現代軟體工業已具相當規模,很多軟體的完成需要的是大兵團作戰。一名精通程序員接受編寫某一塊的任務後,往往只是寫代碼,發揮的餘地很小。在大項目中,很多程序員只能了解到和自己所編模塊相關的很局部的細節,另外還受到開發環境的限制,真的很難體會到自己在從事「藝術」創造,更多的時候是感到自己在從事重體力勞動。有的時候還擔心自己苦苦參與的這個項目究竟有沒有意義,是不是在同類產品中有競爭力,會不會開發出來以後就因為硬體的發展、操作系統的換代而過時......
編程是技術活,才有可能大規模進行,才會有軟體工程的理論。也正是編程具備藝術創作的特點,我們的生活才會有如此多的好軟體產品。寫一個程序需要付出腦力和體力,當我—我們—某個群體完成一個程序之後,在我們的眼裡,每一個程序就都是藝術品。
程序員應具備的素質
前言
程序員是一種技術工作,在IT的發展中有相當重要的地位,從底層硬體通訊協議的建立, 到數據傳輸層的處理,到操作系統的建設,到資料庫平台的建設,一直到應用層上各種數 據營銷平台的搭建,程序員在裡面都扮演著舉足輕重的角色並為IT事業的發展做出了巨大 的貢獻。
中國有很多精於編碼的人,但是中國軟體行業,尤其是網路應用開發方面誤區很大,很難形成有規模的軟體開發力量和產品能力,不但比美國差距甚遠,和印度相比也是頗有不 如。這些問題不是在於中國程序員的智商和工作努力狀況,也不是在於國家和民間對開發 的投入程度,而是很大程度上,有一些對技術,對程序開發,對項目設計方面的思想誤 區,這些誤區,導致了軟體行業的產品化能力不足,缺乏規模化和大型復用系統研發能 力,可以說,改變認識誤區,是解決軟體行業小作坊模式和個體英雄模式所帶來的局限性 的重要工作。
中國有很多小朋友,他們18,9歲或21,2歲,通過自學也寫了不少代碼,他們有的代碼寫的很漂亮,一些技術細節相當出眾,也很有鑽研精神,但是他們被一些錯誤的認識和觀點左右,缺乏對系統,對程序的整體理解能力,這些人,一個網上的朋友說得很好,他們實際 上只是一些Coding fans,壓根沒有資格稱為程序員,但是據我所知,不少小網路公司的 CTO就是這樣的coding fans,拿著嚇人的工資,做著嚇人的項目,項目的結局通常也很嚇人。
一、程序員基本素質
作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有的素質。
1:團隊精神和協作能力
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最 重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力量都是有 限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球 的為linux寫核心的高手們,沒有協作精神是不可想像的。獨行俠可以作一些賺錢的小軟 件發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺 乏這種素質的人就完全不合格了。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發流程中 非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級 程序員和系統分析員,這個比例還要高很多。
缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇 到極大的麻煩。
3:規范化,標准化的代碼編寫習慣
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮 進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和 糾錯,也有助於不同技術人員之間的協作。
有些coding fans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自 己壓根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。
再看看整個linux的搭建,沒有規范化和標准化的代碼習慣,全球的研發協作是絕對不可 想像的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他們把性 能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考慮,有人曾 經放言說寫一個廣告交換程序很簡單,這種人從來不知道在百萬甚至千萬數量級的訪問情 況下的性能指標是如何實現的,對於這樣的程序員,你給他深藍那套系統,他也做不出太 極鏈的並訪能力。性能需求指標中,穩定性,並訪支撐能力以及安全性都很重要,作為程 序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險 和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經 驗才有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫 一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性工作變成 了熟練程序員的主要工作,而這些,其實是完全可以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一 些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在, 是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避 免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每一次研發過程中都考慮到 這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投 入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功能模塊 都能適合的很好,而現在我看到的是,很多小公司軟體一升級或改進就動輒全部代碼重 寫,大部分重復性工作無謂的浪費了時間和精力。
6:測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是並不是說有了專 職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很重要的特 點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行 認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效 率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常 調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務, 實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用 戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻 發的異常請求阻塞資源時的模塊穩定測試等等。當然並不是程序員要對自己的每段代碼都 需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和 各種性能需求,有針對性的進行相關測試並盡早發現和解決問題,當然這需要上面提到的 需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有 領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高 了。
但是學習也要找對目標,一些小coding fans們,他們也津津樂道於他們的學習能力,一 會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目 的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂 中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提 高。
善於總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有 目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高, 一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍的時候 馬上就到了。
具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的各種素質都不是由IQ決 定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。
二、高級程序員/項目設計者還需具備的素質
那麼作為高級程序員,以至於系統分析員,也就是對於一個程序項目的設計者而言,除了應該具備上述全部素質之外,還需要具備以下素質:
第一,需求分析能力
對於程序員而言,理解需求就可以完成合格的代碼,但是對於研發項目的組織和管理者, 他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什麼這么說呢?
一般而言,進行研發任務,也許是客戶提出需求,也許是市場和營銷部門提出的需求,這 時候對於研發部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是一些功能 上的要求,或者更正規些,可能獲得一個完整的用戶視圖;但是這都不夠,因為客戶由於 非技術因素多一些,他們可能很難提出完整和清晰,或者說專業性的性能需求,但是對於 項目組織者和規劃者,他必須能夠清醒認識到這些需求的存在並在完成需求分析報告的時 候適當的提出,同時要完整和清晰的體現在設計說明書裡面,以便於程序員編碼時不會失 去這些准則。
程序設計者必須正確理解用戶需求所處的環境,並針對性做出需求的分析,舉例而言,同 樣一個軟體通過ASP租用方式發布和通過License方式發布,性能需求可能就是有區別的, 前者強調的是更好的支撐能力和穩定性,而後者則可能更強調在各種平台下的普適性和安 裝使用的簡捷性。
第二,項目設計方法和流程處理能力
程序設計者必須能夠掌握不少於兩到三種的項目設計方法(比如自頂至下的設計方法,比如快速原型法等等),並能夠根據項目需求和資源搭配來選擇合適的設計方法進行項目的 整體設計。
設計方法上選擇不當,就會耽誤研發周期,浪費研發資源,甚至影響研發效果。
一個程序設計者還需要把很多功夫用在流程圖的設計和處理上,他需要做數據流圖以確立 數據詞典;他需要加工邏輯流圖以形成整體的系統處理流程。
一個流程有問題的系統,就算代碼多漂亮,每個模塊多精緻,也不會成為一個好的系統。 當然,做好流程分析並選擇好項目設計方法,都需要在需求分析能力上具有足夠的把 握。
第三,復用設計和模塊化分解能力
這個似乎又是老調重談,前面基本素質上不是已經說明了這個問題嗎?
作為一個從事模塊任務的程序員,他需要對他所面對的特定功能模塊的復用性進行考慮, 而作為一個系統分析人員,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的 分析能力分解為很多可復用的功能模塊和函數,並針對每一模塊形成一個獨立的設計需 求。舉個例子,好比是汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是量身定做 的,但是後來不一樣了,機器化大生產了,一個汽車廠開始通過流水線來生產汽車,獨立 部件開始具有一定的復用性,在後來標准化成為大趨勢,不同型號,品牌甚至不同廠商的 汽車部件也可以進行方便的換裝和升級,這時候,汽車生產的效率達到最大化。軟體工程 也是同樣的道理,一個成熟的軟體行業,在一些相關項目和系統中,不同的部件是可以隨 意換裝的,比如微軟的許多桌面軟體,在很多操作模塊(如打開文件,保存文件等等)都 是復用的同一套功能模塊,而這些介面又通過一些類庫提供給了桌面應用程序開發者方便 掛接,這就是復用化的模塊設計明顯的一個佐證。
將一個大型的,錯綜復雜的應用系統分解成一些相對獨立的,具有高度復用性的,並能僅 僅依靠幾個參數完成數據聯系的模塊組合,是作為高級程序員和系統分析員一項最重要的 工作,合適的項目設計方法,清晰的流程圖,是實現這一目標的重要保證。
第四,整體項目評估能力
作為系統設計人員,必須能夠從全局出發,對項目又整體的清醒認識,比如公司的資源配 置是否合理和到位,比如工程進度安排是否能最大化體現效率又不至於無法按期完成。評 估項目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的困難,都需 要大量的經驗積累,換言之,這是一種不斷總結的累計才能達到的境界。在西方一些軟體 系統設計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方面已經遠遠不 如年輕人那樣活絡,但是就項目評估而言,他們幾十年的經驗積累就是最重要和寶貴的財 富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那種年紀的程序員基 本上都是研究單位作出來的,都不是從專業的產品化軟體研發作出來的,他們沒有能積累 那種產品化研發的經驗,這也是沒有辦法的事情。
第五,團隊組織管理能力
完成一個項目工程,需要團隊的齊心協力,作為項目設計者或研發的主管人,就應當有能 力最大化發揮團隊的整體力量,技術管理由於其專業性質,不大同於一般的人事管理,因為這裡面設計了一些技術性的指標和因素。
首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單的代碼 行數可以計算的,因此要求技術管理人員需要能真正評估一個模塊的復雜性和工作量。
其次是對團隊協作模式的調整,一般而言,程序開發的協作通常分為小組進行,小組有主 程序員方式的,也有民主方式的,根據程序員之間的能力水平差距,以及根據項目研發的 需求,選擇合適的組隊方式,並能將責權和成員的工作任務緊密結合,這樣才能最大發揮 組隊的效率。
一個代碼水平高的人,未必能成為一個合格的項目研發主管,這方面的能力欠缺往往是容 易被忽視的。
綜上可以看到,作為一個主管研發的負責人,一個項目設計者,所需要具備的素質和能力 並不是程序代碼編寫的能力,當然一般情況下,一個程序員通過不斷的總結提高達到了這種素質的時候,他所具有的代碼編寫能力也已經相當不簡單了,但是請注意這裡面的因果 關系,一個高水平的項目設計者通常已經是代碼編寫相當優秀的人了,但是並不是一個代 碼相當優秀的程序員就可以勝任項目設計的工作,這裡面存在的也不是智商和課本的問 題,還是在於一個程序員在積累經驗,逐步提升的時候沒有意識到應當思考哪方面的東 西,沒有有意識的就項目的組織和復用設計進行揣摩,沒有經常性的文檔習慣和總結習 慣,不改變這些,我們的合格的項目設計者還是非常欠缺。
另外,為防止有無聊的人和我較真,補充一點,本文針對目標是作商業化的軟體項目和工程,那些科研機構的編程高手,比如演算法高手,比如圖象處理高手,他們的工作是研究課題而非直接完成商業軟體(當然最終間接成為商業產品,比如微軟研究院在作的研究課 題),因此他們強調的素質可能是另外的東西,這些人(專家),並不能說是程序員,不能用程序員的標准去衡量。
三、軟體項目研發的設計流程
最後補充一點東西,一個軟體項目研發的設計流程是怎樣的呢?以通常標準的設計方法為例,(不過筆者喜歡快速原型法)。
第一個步驟是市場調研
技術和市場要結合才能體現最大價值。
第二個步驟是需求分析
這個階段需要出三樣東西,用戶視圖,數據詞典和用戶操作手冊。
用戶視圖是該軟體用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,這裡麵包含了 很多操作方面的流程和條件。
數據詞典是指明數據邏輯關系並加以整理的東東,完成了數據詞典,資料庫的設計就完成 了一半多。
用戶操作手冊是指明了操作流程的說明書。
請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟體設計之前完成,完成 這些,就為程序研發提供了約束和准繩,很遺憾太多公司都不是這樣做的,因果顛倒,順 序不分,開發工作和實際需求往往因此產生隔閡脫節的現象。
需求分析,除了以上工作,筆者以為作為項目設計者應當完整的做出項目的性能需求說明 書,因為往往性能需求只有懂技術的人才可能理解,這就需要技術專家和需求方(客戶或 公司市場部門)能夠有真正的溝通和了解。
第三個步驟是概要設計
將系統功能模塊初步劃分,並給出合理的研發流程和資源要求。 作為快速原型設計方法,完成概要設計就可以進入編碼階段了,通常採用這種方法是因為 涉及的研發任務屬於新領域,技術主管人員一上來無法給出明確的詳細設計說明書,但是 並不是說詳細設計說明書不重要,事實上快速原型法在完成原型代碼後,根據評測結果和 經驗教訓的總結,還要重新進行詳細設計的步驟。
第四個步驟是詳細設計
這是考驗技術專家設計思維的重要關卡,詳細設計說明書應當把 具體的模塊以最』干凈』的方式(黑箱結構)提供給編碼者,使得系統整體模塊化達到最 大;一份好的詳細設計說明書,可以使編碼的復雜性減低到最低,實際上,嚴格的講詳細 設計說明書應當把每個函數的每個參數的定義都精精細細的提供出來,從需求分析到概要 設計到完成詳細設計說明書,一個軟體項目就應當說完成了一半了。換言之,一個大型軟 件系統在完成了一半的時候,其實還沒有開始一行代碼工作。
那些把作軟體的程序員簡單理解為寫代碼的,就從根子上犯了錯誤了。
第五個步驟是編碼
在規范化的研發流程中,編碼工作在整個項目流程里最多不會超過1/ 2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會極大提 高,編碼時不同模塊之間的進度協調和協作是最需要小心的,也許一個小模塊的問題就可 能影響了整體進度,讓很多程序員因此被迫停下工作等待,這種問題在很多研發過程中都 出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對於程序員而言,bug永 遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不發補丁的時候 嗎?從來沒有!
第六個步驟是測試
測試有很多種:
按照測試執行方,可以分為內部測試和外部測試
按照測試范圍,可以分為模塊測試和整體聯調
按照測試條件,可以分為正常操作情況測試和異常情況測試
按照測試的輸入范圍,可以分為全覆蓋測試和抽樣測試
以上都很好理解,不再解釋。
總之,測試同樣是項目研發中一個相當重要的步驟,對於一個大型軟體,3個月到1年的外 部測試都是正常的,因為永遠都會又不可預料的問題存在。
完成測試後,完成驗收並完成最後的一些幫助文檔,整體項目才算告一段落,當然日後少 不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟體的運營 狀況並持續修補升級,知道這個軟體被徹底淘汰為止。
寫這些步驟算不上賣弄什麼,因為實話講我手邊是一本《軟體工程》,在大學里這是計算 機專業的必修課程,但是我知道很多程序員似乎從來都只是熱衷於什麼《30天精通VC》之 類的,他們有些和我一樣游擊隊出身,沒有正規學過這個專業,還有一些則早就在混夠學 分後就把這些真正有用的東西還給了老師。
網上現在也很浮躁,一些coding fans亂嚷嚷,混淆視聽,實際上真正的技術專家很少在 網上亂發帖子的,如筆者這樣不知天高地厚的,其實實在是算不上什麼高手,只不過看不 慣這種對技術,對程序員的誤解和胡說,只好挺身而出,做撥亂反正之言,也希望那些還 沉迷於一些錯誤人士的coding fans們能認真想想,走到正途上,畢竟那些聰明的頭腦還 遠遠沒有發揮應有的價值。
E. 程序員們在公司寫的代碼手頭會私下裡留一份嗎
大公司好像有的不行的,非常嚴格,有的連U盤都禁用了!
小公司應該是無所謂的,沒那多限制,我經常會拷貝一份代碼,一來防止公司電腦有天掛了,代碼都沒了,二來有時公司沒做完的項目,在家也可以繼續做!像我同事也一般也這么做,會存在網盤或U盤中帶回家!
F. 程序員勵志經典語句
程序員勵志經典語句
真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。下面是我為大家整理收集的關於程序員的經典勵志語句,歡迎大家的閱讀。
1、信念和目標必須永遠洋溢在程序員內心。
2、功能說明書里不存在可操作性。
3、學習腳本最好的方法之一就是多練習。
4、真正的程序員不看參考手冊,新手和膽小鬼才會看。
5、軟體在能夠復用前必須先能用。
6、做技術一定要一顆恆心,這樣才不會半途而廢。
7、對於問題的理解,一定要透徹。這樣你才能實質的解決問題。
8、你要麼要軟體質量,要麼要指針演算法;兩者不可兼得。
9、簡單不先於復雜,而是在復雜之後。
10、一匹真正的好馬,即使在鞭子的影子下,也能飛奔。
11、不要漏掉書中任何一個練習——請全部做完並記錄下思路。
12、保存好你做過的所有的源文件——那是你最好的積累之一。
13、理想如果不向現實做一點點屈服,那麼理想也將歸於塵土。
14、真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。
15、程序是我的生命,但我相信愛她甚過愛我的生命。
16、在任何時刻都不要認為自己手中的書已經足夠了。
17、看得懂的書,請仔細看;看不懂的書,請硬著頭皮看。
18、把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡。
19、別心急,寫腳本確實不容易;水平是在不斷的實踐中完善和發展的。
20、設計是一個發現問題、而不是發現解決方案的過程。
21、程序不是年輕的專利,但是,他屬於年輕。
22、有兩種方法能寫出沒有錯誤的程序;但只有第三種好用。
23、編程之八字真言:八個字:1、專2、靜3、謙4、籌5、悟6、慎7、透8、恆。
24、記錄下在和別人交流時發現的自己忽視或不理解的知識點。
25、用代碼行數來測評軟體開發進度,就相對於用重量來計算飛機建造進度。
26、真正的程序員不畫流程圖,原始人和文盲才會干這事兒。
27、把在書中看到的有意義的例子擴充;並將其切實的運用到自己的工作中。
28、我們應該重視團隊的精神,一個人作用再大,也不過是一碗水中比較大的一粒水珠而已。
29、真正的程序員沒有進度表,只要討好領導的馬屁精才有進度表,真正的程序員會讓領導提心吊膽。
30、如果你沒有把握做到,最好就不要承諾,你什麼也不承諾,至少別人不會看不起你。
31、真正的程序員的程序不會在第一次就正確運行,但是他們願意守著機器進行若干個30小時的調試改錯。
32、這句話不是很文雅,徹底鄙視那些害怕別人超越自己而拒絕回答別人問題的程序員。
33、每一個問題都是一把鎖,你要相信世界上一定有一把鑰匙能打開這把鎖,你也能找到這把鑰匙。
34、真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當然也很難讀。
35、項目開發的六個階段:1、充滿熱情2、醒悟3、痛苦4、找出罪魁禍首5、懲罰無辜6、褒獎閑人。
36、一本好書,就像高級武功秘籍一樣,哪怕只是從裡面領悟到個一招半勢,功力提升起來都是驚人的。
37、其實你找不到錯誤不代表錯誤不存在,同樣你看不到技術比你牛的人並不代表世界上沒有技術比你牛的人。
38、調試完一個動態連接函數,固然值得興奮,但真正的成功遠還在無數個函數之後。
39、任何傻瓜都能寫出計算機可以理解的代碼。好的程序員能寫出人能讀懂的代碼。
40、最初的90%的代碼用去了最初90%的開發時間。餘下的10%的代碼用掉另外90%的開發時間。
41、編程是一種單調的生活,因此程序員比普通人需要更多的關懷,更多的友情。
42、人吶,眼光放得長遠一些,看到的東西也會多一些,生活也就會過得更有意義一點。
43、如果調試一個程序讓你很苦惱,千萬不要放棄,成功永遠在拐角之後,除非你走到拐角。
44、沒有情調,不懂浪漫,也許這是程序員的'一面,但擁有朴實無華的愛是他們的另一面。
45、如果你喜歡底層開發,千萬不要勉強自己去搞VC,找到你最真實的想法,程序員最不能忍受的就是萬精油。
46、程序員是值得尊敬的,程序員的雙手是魔術師的雙手,他們把枯燥無味的代碼變成了豐富多彩的軟體。
47、學腳本並不難,JSP、ASP、PHP等等也不過如此——難的是長期堅持實踐和不遺餘力的博覽群書。
48、優秀的代碼是它自己最好的文檔。當你考慮要添加一個注釋時,問問自己,“如何能改進這段代碼,以讓它不需要注釋?
49、看幫助,不要因為很難而自己是初學者所以就不看;幫助永遠是最好的參考手冊,雖然幫助的文字有時候很難看懂,總覺得不夠直觀。
50、不要看到別人的回復第一句話就說:給個代碼吧!你應該想想為什麼。當你自己想出來再參考別人的提示,你就知道自己和別人思路的差異。
51、初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是只對部分功能熟悉而已,不系統還是不夠的。
52、內存無論在怎麼發展,它都會有一個容量的限制。因此你應該堤防著它。你的程序如果導致內存泄漏,是程序員很可恥的事情。
53、無論在排練中演示是如何的順利(高效),當面對真正的現場觀眾時,出現錯誤的可能性跟在場觀看的人數成正比。
54、你的一個程序有時正常有時不正常,而你已經完全遵循編程的規則,為什麼?事實上我認為相信只要遵循別人所說就能得到想當然的結果的人其實是個傻瓜。
55、不要放過任何一個看上去很簡單的小問題——他們往往並不那麼簡單,或者可以引伸出很多知識點;不會舉一反三你就永遠學不會。
;G. 一名優秀的程序員必備的素質是什麼
程序員必備的七種素質x0dx0a1:團隊精神和協作能力 x0dx0a把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。任何個人的力量都是有限的,即便如linus這樣的 天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想像的。一旦進入系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人是不合格的。 x0dx0ax0dx0a2:文檔習慣 x0dx0a說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要 高很多。缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。 x0dx0ax0dx0a3:規范化,標准化的代碼編寫習慣 x0dx0a代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不同技術 人員之間的協作。有些codingfans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己?根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。沒有規范化和標准化的代碼習慣,研發之間的協作是絕對不可想的。 x0dx0ax0dx0a4:需求理解能力 x0dx0a程序員需要理解一個模塊的需求,很多程序員寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考 慮,性能需求指標中,穩定性,並訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險 和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。 x0dx0ax0dx0a5:復用性,模塊化思維能力 x0dx0a經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其實是完全可以避免的。 x0dx0a復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個 系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每 一次研發過程中都考慮到這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。 x0dx0a一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功能模塊都能適合的很好,而現在很多軟體一升級或改進就動輒全部代碼重寫,大部分重復性工作無謂的浪費了時間和精力,這是我們應當刻意克服的弊病。 x0dx0a6:測試習慣 x0dx0a作為一些正規化的開發而言,專職的測試工程師是不可少的,但是並不是說有了專職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很重要 的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對 整體系統建設的效率和可靠性就有了最大的保證。 x0dx0a測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定 性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。 x0dx0a當然並不是程序員要對自己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針對性的進行相關測試並盡早發現和解決問題,當然這需要上面提到的需求理解能力。 x0dx0ax0dx0a7:學習和總結的能力 x0dx0a程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高了。 x0dx0a但是學習也要找對目標,善於總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
H. 程序員在上班時,允不允許大量的看說明文檔來幫助寫程序
程序員日常開發工作,基本是上離不開閱讀文檔,這也是很多程序員喜歡兩個顯示器的原因。
項目方面
技術方面
是不是很多人都認為,如果在開發過程中,還要不斷地翻技術文檔,說明他的開發能力不扎實。其實不是這樣的。
首先IT行業技術升級換代的速度太快,當我們大多數公司還在用java8的時候,Java11都已經出來了。如果非得要程序員熟知每一個類、每一個方法,是很不現實的。
很多時候我們只需要了解有這么一個東西,作用是干什麼的,具體的細節可以在用的時候再去翻文檔,比如方法名字是什麼?參數有幾個,都是什麼類型的?
所以我們都習慣至少兩個電腦屏幕,一個屏幕寫代碼,一個屏幕看文檔;如果豪一些的話,再加一個屏幕展示日誌信息。
看文檔的屏幕要買豎屏!
我們團隊
我這幾年也帶過幾個團隊,對於每個團隊成員,我對他們的要求是:實現需求的前提下,最好能對所用的技術有一定的了解,千萬不要從網上抄過來一段代碼就用,這樣是很危險的行為。所以鼓勵大家多找一些資料,最好是閱讀框架的官方文檔。
現在的團隊,我已經這樣要求了:代碼寫累了,或者覺得自己沒有狀態寫代碼,可以找點兒自己有興趣的技術文檔學習學習,這個技術甚至是可以跟現在的項目沒有關系的。
首先,我不是程序員,我是一個設計工作者,不過我來說一下我的觀點:很多人以為程序員像電影里的一樣,啪啪啪幾下鍵盤,屏幕數據颼颼的變,其實真實情況是程序員寫代碼就像學生寫作文,也會遇到不會的詞語跟修辭手法,那這個時候就要停下來想一想,查一查,看看例子是怎樣寫的怎樣用的,寫錯了還要劃掉(刪掉)再來,至於這個大量不大量看的情況,如果這個是個新手,那肯定是可以的,那如果是個老手,還需要大量時間查說明文檔,那就說明這個項目肯定不會小,不是一兩天能做完的,那一個用月做單位的項目,用一個天做單位的時間來查文檔,不過分吧!程序員也是人,不是因為他的工作高端,就覺得這個人萬能,他也會當機,要吃飯,要休息,也會忘記一些東西,所以請各位多多體諒,能一起工作實屬不易,感恩2018,謝謝。
這個問題怎麼說呢,開發過程中會遇到各種各樣的問題,沒有一個人是全能的,也沒有人可以絕對的說自己在整個項目中不會遇到一點問題,不去查東西,自己大腦里的東西完全可以讓我把這個項目測測底底的做完,並且沒有任何bug。
上班的時間,也沒有老闆或者誰在後面一直看著你去做東西,大家都挺忙。文檔是幹嘛的,文檔本身就是用來看的,甚至很多項目開始之前,總監都會讓你去搜集一些這個項目可能會遇到的bug,可能會用到的效果,盡量在之前找到比較好用的插件,這樣會節省很多時間,自己如果寫代碼的話不可能百分百的確定沒有人和bug,但插件不一樣很多插件都是前輩通過很長時間慢慢完善出來的插件,所以很多人才會用。所以你提問的可以肯定的回答你允許。
說個我遇到的2個真事吧,
第一個,公司找的外包公司寫項目程序,已經要交付了,發現有幾個功能沒做,產品經理和開發那邊都找我,我一個搞運維的又不懂,只能讓他們去對開發文檔,我也就順便看了看,開發文檔中明確的寫明怎麼做,然後就讓他們就重新按開發文檔繼續寫,
另一個,由於 歷史 原因業務系統處於託管狀態,只有部分參考文檔可用,開發那邊只能按當前已有文檔進行開發參考,開發那邊也一直在根據現有相關文檔進行開發,杯具的是這幫子不仔細看,有問題總想著我能直接給他們答案,我也只是會用而已,開發我還真搞不來,然後和他們一起看開發文檔,加密演算法部分給她們指出後,問題解決了。
所以我覺得,開發團隊在開發中很有必要閱讀開發文檔,這可以避免繞圈子,也會清楚開發文檔中提供的內容。
程序員上班的主要工作就是看說明文檔,根據說明文檔編碼。如果實在沒有說明文檔,有時還得親自披掛上陣寫說明文檔。
寫介面的有API文檔,寫通訊協議的有協議欄位說明文檔,寫資料庫的有資料庫規範文檔,
總之任何一個大公司文檔扮演的一個至關重要的問題,因為形不成文檔,公司管理就會陷入混亂不堪的局面,當某個核心員工離職後,下一個接盤的程序員會丈二和尚摸不著頭腦,一頭霧水,邊填坑邊罵娘,有了文檔就可以看文檔結合代碼,了解其中模塊邏輯以及結構,包括哪些坑不能踩等等好處。有些公司會專門有文檔工程師這個職位來專門負責整理各種文檔,並且保存在伺服器上。
好的文檔都是程序員等人智慧的結晶,是一盞指路明燈,是一條通往光明的道路。程序員不能看說明文檔等於在黑暗裡摸爬滾打,有了說明文檔才迎來了黎明的曙光。
先說觀點,我認為看文檔沒什麼問題,但是「大量」這個程度很難衡量,按照需要看文檔是個非常重要的事情。
需要花費時間的情況 不需要花費大量時間的情況 小結
在工作中閱讀文檔其實也是工作內容的一部分,而且現在大多數互聯網公司都靠KPI進行考核,平時就算你把時間都用來看文檔沒關系,最後KPI沒完成一樣會被公司淘汰。所以公司不會阻攔你花費時間看文檔,最多你老闆會提醒你浪費這么多時間看文檔而沒有實際的產出會對你年終考核造成影響罷了。
題主對文檔的定義不是很明確
第一個是需求說明文檔
這個是在開發過程中必不可少的文檔,只有清楚了開發需求,程序員高效率的開發,程序員一天的工作時間並不是都是在寫代碼,而是在看文檔,了解需求,理清思路,只有什麼都清楚了,寫代碼或許只要十幾分鍾。
再者對於一個項目新人來說不看文檔了解需求,沒人給你從頭到尾的在講一遍需求,你不看文檔自己發揮?進入項目是和別人共同開發,你不肯能不顧及之前的代碼規范。
第二個是開發文檔
就拿微信開發來說,微信開發不是每個程序員必須會的東西,但是用到了怎麼辦,還不是去看他們的開發文檔,只有將開發文檔思路理清楚了,才可以進行下一步開發。
第三個是API文檔
在前後端分離的開發模式中API文檔是必不可少的文檔。不看API不知道數據是什麼樣。也就是不可能順利的和後端進行結合。
兄dei,假設你是程序員,你在寫程序時,旁邊會有人守著你嗎?
假設你不是程序員,你在做本職工作時,旁邊會有人守著你看你怎麼做事嗎?
答案肯定是沒有的。誰會閑著招個人去監督你,看你用什麼方式去完成給你的任務。
現在不管是大公司還是小公司,沒有人會在意你怎麼去完成你的工作,給你的任務,在很多時候,大家只關注結果。如果說有干預,最多隻是實現的方式。像寫程序,假設有個功能是即時通訊相關的,這種自己寫需要的時間成本投入較高,那麼很多公司就會選擇採用市面上比較穩定的第三方平台。這算一種實現方式的干預。但是在接入的過程中,不會有人去管你是通過閱讀第三方SDK文檔,還是谷歌搜出來的,最後能達到預期效果就ok了
所以,其實你看不看大量文檔,沒有人會在乎,關鍵是你自己,建議自己寫東西時,不要一味的復制粘貼,要有自己的想法。太依賴文檔對於自己成長很不利
當然允許看文檔。
要知道,隨便哪個類庫,都有無數的類和方法,每個方法又有若干參數,鬼知道它們都是什麼意思,誰的腦子能記得那麼多內容。別說是人家提供的類庫,就是自己寫的代碼,過一段時間也不記得什麼意思了。沒有注釋和文檔,怎麼看懂代碼?
如果沒有需求分析文檔,程序員怎麼理解正在開發的這個軟體的基本業務流程?
如果沒有架構設計文檔,程序員怎麼理解軟體各個功能模塊之間的功能與業務邏輯?
如果沒有介面文檔,那麼多類和方法,都怎麼調用,會返回什麼值,難道靠猜?
……
在日常開發工作中,不僅允許看文檔,還會強迫你寫文檔。如果你寫的文檔別人看不懂,別怪領導罵你不認真。文檔對於軟體開發的重要性是不言而喻的。
還有一個秘密告訴你,那些經常寫文檔的程序員,要比不寫文檔的程序員工資更高。
真的!!!
迎娶白富美,從會寫文檔開始!
毫無疑問是的。
對於程序員來說,在實際工作中進行代碼編寫和項目開發時,是離不開各種各樣的文檔的。文檔包括:
不允許看說明文檔,這基本上只會出現在面試或者考試中,為了考察程序員自身的編碼能力,才要求脫離參考資料,利用自身的知識和技術來完成。
當然了,程序員工作中也不能只看文檔,要是花費大量時間通讀不必要的文檔,工作可就做不完了。
I. 一個好的程序員至少應該具備哪些條件
樓上的幾位顯然誤會我的意思了,我並不是說不應當寫文檔加註釋注重團隊精神,看看下面的一篇文章,那位三天就寫出UNIX的他需要寫文檔注釋和團隊精神嗎,他用不著。哪個高手沒有一點傲氣和自信,他之所以敢對用戶說:拿到你想要的,然後滾蛋,你已經很幸運了!是因為他有這個資本。天才本就不循規蹈矩,那樣他就不叫天才了。
MIT BBS上說微軟電話面試的一道題就是「Who do you think is the best coder,
and why?」。我覺得挺有意思的,也來湊個熱鬧。排名不分先後。
Bill Joy, 前任Sun的首席科學家,當年在Berkeley時主持開發了最早版本的BSD。他還
是vi和csh的作者。當然,Csh Programming Considered Harmful 是另一個話題樂。據
說他想看看自己能不能寫個操作系統,就在三天里寫了個自己的Unix, 也就是BSD的前
身。當然是傳說了,但足見他的功力。另一個傳說是,1980年初的時候,DARPA讓BBN在
Berkley Unix里加上BBN開發的TCP/IP代碼。但當時還是研究生的B伯伯怒了,拒絕把BBN
TCP/IP加入BSD,因為他覺得BBN的TCP/IP寫得不好。於是B伯伯出手了,端的是一箭封
喉,很快就寫出了高性能的伯克利版TCP/IP。當時 BBN和DARPA簽了巨額合同開發TCP/IP
Stack,誰知他們的代碼還不如一個研究生的好。於是他們開會。只見當時B伯伯穿
個T-shirt出現在會議室(當時穿T-shirt不象現在,還是相當散漫的哈)。只見BBN問:你
怎麼寫出來的?而B伯伯答:簡單,你讀協議,然後編程就行了。最令偶暈倒的是,B伯
伯碩士畢業後決定到工業界發展,於是就到了當時只有一間辦公室的Sun, 然後他就把
Sparc設計出來樂。。。象這種軟硬通吃的牛人,想不佩服都不行的說。據Bill Joy的同
事說,一般開會的時候B伯伯總是拿一堆雜志漫不經心地讀。但往往在關鍵之處,B伯伯
發言,直切要害,提出漂亮的構想,讓同事們徹底崩潰。對了,他還是Java Spec和JINI
的主要作者之一。
John Carmack,ID Software的founder和Lead Programmer。上個月和一個搞圖形的師兄
聊天,他竟然不知道John Carmack, 也讓偶大大地暈了一把。不過也許搞研究的和搞實
戰的多少有些隔吧。想必喜歡第一人稱射擊游戲的都知道J哥哥。90年代初只要能在PC
上搞個小動畫都能讓人驚嘆一番的時候,J哥哥就推出了石破天驚的Castle Wolfstein,
然後再接再勵,doom, doomII, Quake...每次都把3-D技術推到極限。J哥哥的簡歷上說
自己的專長是"Exhaust 3-D technology",真是牛人之言不我欺的說。做J哥哥這樣的人
是很幸福的,因為各大圖形卡廠家一有了新產品就要向他「進貢"
,不然如果他的游戲不支持哪種卡,哪種卡基本就會夭折樂。當初MS的Direct3D也得聽
取他的意見,修改了不少API。當然,J哥哥在結婚前十數年如一日地每天編程14小時以
上,也是偶們凡人望塵莫及的。對了,J哥哥高中肆業(?),可以說是自學成才。不過
呢,誰要用這個例子來為自己學習不好辯護,就大錯特錯了。那 Leonardo Da Vinci還
是自學成才呢(人是私生子,不能上學)。普通人和天才還是有區別的。對了,其實偶們
叫「達分奇」是相當不對的,因為Vinci是地名,而Da Vinci就是從Vinci來的人的意
思。換句話說,Leonardo Da Vinci就是「從Vinci來的Leonardo」的意思。叫別
人「Da Vinci」就不知所謂樂。嗯,扯遠了,打住。
David Cutler,VMS和Windows NT的首席設計師,去微軟前號稱矽谷最牛的kernel開發
員。當初他和他的手下在微軟一周內把一個具備基本功能的bootable kernel寫出來,然
後說:「who can't write an OS in a week?",也是牛氣沖天的說。順便說一句,D爺
爺到NT3.5時,管理1500名開發員,自己還兼做設計和編程,不改coder本色啊。
D爺爺天生脾氣火爆,和人爭論時喜歡雙手猛擊桌子以壯聲勢。 日常交談fuck不離口。
他面試秘書時必問:"what do you think of the word 'fuck'?" ,讓無數美女剎羽而
歸。終於有一天,一個同樣火爆的女面對這個問題脫口而出:"That's my favorite
word"。於是她被錄取樂,為D爺爺工作到NT3.5發布。
Don Knuth。高爺爺其實用不著偶多說。學編程的不知道他就好像學物理的不知道牛頓,
學數學的不知道歐拉,學音樂的不知道莫扎特,學Delphi的不知到 Anders Hejlsberg,
或者學Linux不知道Linus Torvalds一樣,不可原諒啊。為了讓文章完整,就再羅唆幾句
吧。高爺爺本科時就開始給行行色色的公司寫各種稀奇古怪的編譯器掙外快了。他賣給別
人時收一兩千美元,那些公司拿了code,加工一下賣出去就是上萬上十萬。不過也沒見高
爺爺不爽過,學者本色的說。想想那可是60年代初啊,高爺爺寫編譯器寫多了,順帶就搞
出了個 Attribute Grammar和LR(k),大大地造福後人啊。至於高爺爺在CalTech的編程比
賽(有Alan Kay得眾多高高手參加)總是第一,寫的Tex到86年就code freeze,還附帶2^n
美分獎勵等等都是耳熟能詳的,偶就不饒舌樂。
順便說一下,高老大爺是無可爭議的寫作高手。他給Concrete Mathematics 寫的前言可
謂字字鏗鏘,堪為前言的典範。他的技術文章也是一絕,文風細致,解釋精當,而且沒
有學究氣,不失輕快跳脫。記得幾年前讀Concrete Mathemathics,時不時開懷大笑,讓
老媽極其郁悶,覺得我nerdy到家,不可救葯。其實呢,子非魚,安知魚之樂,更不知那
完全是高爺爺的功勞。說到寫作高手,不能不提Stephen A. Cook。他的文章當年就被我
們的寫作老師極力推薦,號稱典雅文風的樣本。庫爺爺一頭銀發,身材頎長,總是面帶
謙和的微笑,頗有仙風道骨,正好和他的仙文相配的說。
高爺爺其實還是開源運動的先驅。雖然他沒有象Richard Stallman那樣八方奔走,但他
捐獻了好多作品,都可以在網上看到,比如著名的Mathematical Writing,MMIXWare,
The Tex Book等,更不用說足以讓他流芳百世的Tex樂。
Ken Thompson,C語言前身B語言的作者,Unix的發明人之一(另一個是Dennis M. Riche
老大,被尊為DMR),Belle(一個厲害的國際象棋程序)的作者之一, 操作系統Plan 9的主
要作者(另一個是大牛人Rob Pike,
前不久被google挖走了)。Ken爺爺也算是計算機歷史上開天闢地的人物了。1969年還是
計算機史前時代,普通人都認為只有大型機才能運行通用的操作系統,小型機只有高山
仰止的份兒。至於用高級語言來寫操作系統,更是笑談。Ken爺爺自然不是池中物,於是
他和DMR怒了,在1969年到1970間用匯編在PDP-7上寫出了UNIX的第一個版本。他們並不
知道,一場轟轟烈烈的UNIX傳奇由此拉開了序幕。Ken爺爺在1971年又把Unix用C重寫,
於是C在隨後20年成就了不知多少豪傑的夢想和光榮。
Ken爺爺還有段佳話: 裝了UNIX的PDP-11最早被安裝在Bell Lab里供大家日常使用。很
快大家就發現Ken爺爺總能進入他們的帳戶,獲得最高許可權。Bell
Lab里的科學家都心比天高,當然被搞得郁悶無比。於是有高手怒了,跳出來分析了UNIX
代碼,找到後門,修改代碼,然後重新編譯了整個UNIX。就在大家都以為「這個世界清
凈了」的時候,他們發現Ken爺爺還是輕而易舉地拿到他們的帳戶許可權,百思不解後,只
好繼續郁悶。誰知道這一郁悶,就郁悶了14年,直到Ken爺爺道出個中緣由。原來,代碼
里的確有後門,但後門不在Unix代碼里,而在編譯Unix代碼的C編譯器里。每次C編譯器
編譯UNIX的代碼,就自動生成後門代碼。而整個Bell Lab的人,都是用Ken爺爺的C編譯
器。
(6)Rob Pike, AT&T Bell Lab前Member of Technical Staff ,現在google研究操作系
統 。羅伯伯是Unix的先驅,是貝爾實驗室最早和Ken Thompson以及Dennis M. Ritche開
發 Unix的猛人,UTF-8的設計人。他還在美國名嘴David
Letterman的晚間節目上露了一小臉,一臉憨厚地幫一胖子吹牛搞怪。讓偶佩服不已的
是,羅伯伯還是1980年奧運會射箭的銀牌得主。他還是個頗為厲害的業余天文學家,設
計的珈瑪射線望遠鏡差點被NASA用在太空梭上。他還是兩本經典,The Unix
Programming Environment 和 The Practice of Programming 的作者之一。如果初學者
想在編程方面精益求精,實在該好好讀讀這兩本書。它們都有中文版的說。羅伯伯還寫
出了Unix下第一個基於點陣圖的窗口系統,並且是著名的blit終端的作者。當然了,羅伯
伯還是號稱銳意革新的操作系統,Plan9,的主要作者。可惜的是,Plan9並沒有引起多
少人的注意。羅伯伯一怒之下,寫出了振聾發聵的雄文 Systems Software Research is
Irrelevant,痛斥當下系統開發的不思進取,固步自封的弊病。雖然這篇文章是羅伯伯
含忿出手,頗有偏激之詞,但確實道出了系統開發的無奈:開發周期越來越長,代價越
來越大,用戶被統一到少數幾個系統上,結果越來越多的活動是測量和修補,而真正的
革新越來越少。
就在羅伯伯郁悶之極的時候,google登門求賢來樂。如果說現在還有一家大眾公司在不
遺餘力地把系統開發推向極致的話,也就是google樂。隨便看看google的成果就知道
了。具有超強容錯和負載平衡能力的分布式文件系統GFS
(現在能夠用100,000台廉價PC搭起一個巨型分布系統,並且高效便宜地進行管理的系統
也不多哈),大規模機器學習系統(拼寫檢查,廣告匹配,拼音搜尋。。。哪個都很牛的
說),更不用說處理海量並行計算的各式google服務了。Rob在System Software
Research is Irrelevant里蕭瑟地說現在沒有人再關心系統研究的前沿成果了。想不到
他錯了,應為google關心。google網路了大批功成總是試圖吸取系統研究的最新成果。
想必Rob Pike在google很幸福。願他做出更棒的系統。
Dennis M. Ritchie, 既然Ken Thompson是我的偶像,新聞組上人稱DMR的Dennis M.
Ritchie自然也是,畢竟兩人共同締造了UNIX,而Dennis幾乎獨力把C搞大(當然,C的前
身是B,而B是Ken Thompson一手做出來的)。兩人1983年分享圖靈獎,是有史以來少數幾
個因工程項目得獎的工程師(本來是唯一的一對兒,但Alan Kay才因為SmallTalk得獎,
所以就成了唯二的樂) 一個人一生能做出一個卓越的系統已經不易,DMR的C和UNIX長盛
不衰近30年,至今生機勃勃,DMR此生可以無憾的說。
D爺爺也算有家學淵源:他老爸在AT&T貝爾實驗室工作了一輩子,並在電路設計方面卓有
成就,還出了本頗有影響的書The Design of Switching Circuits,據說在交換理論和
邏輯設計方面有獨到的論述。當然,D爺爺和他老爸是不同時代的人:他老爸的研究成
形於晶體管發明之前,而D爺爺的工作離了晶體管就玩兒不轉樂。:-D
不要看D爺爺搞出了C,其實他最愛的編程語言是Alef,在Plan9上運行,支持並行編程。
Alef的語法和C相似,但數據類型和執行方式都和C大大不同。說到語言,D爺爺對後來
人有非常中肯的建議:抱著學習的目的來開發你自己的語言,不要冀望於它被眾人接
受。這個建議不光對語言開發有用,也適用於其它大型系統的開發。別的不說,DMR後來
領導自己的團隊在1995年和1996分別推出了Plan9和Inferno操作系統,又用多少人知道
呢?其實,D爺爺當初也沒想過C會風行世界。他開發C的初衷和Eric S. Raymond
在Cathedral and Bazaar里闡述的一樣,就是要消除自己對現有工具的不爽之處。誰
知D爺爺無心插柳,C竟然受到眾多程序員的狂熱擁戴,連D爺爺自己都大惑不解。在一次
采訪中D爺爺說大概那是因為C的抽象程度碰巧既滿足了程序員的要求, 又容易實現。當
然C一度是Unix上的通用語言也是原因。但不管怎麼說,D爺爺對編程語言出色的審美意
識奠定了C廣為流傳的基礎。
最後八卦一下。D爺爺的業余愛好和NBA大牛Karl Malone一樣:開卡車。不過D爺爺更喜
歡開NASCAR,而KM獨愛巨無霸。J D爺爺自稱心中不供偶像,如果一定要說一個,那就
是Ken Thompson了。現在Ken爺爺退休當飛機教練去了,而D爺爺當了貝爾實驗室系統開
發部的頭,整日忙於開支票。他倆合作20年,屢屢創造歷史。這段令人神往的佳話,也
就長留你我心中樂。
P.S., 很多人都以為Brian W. Kernighan是C的作者。其實BWK只是寫了那本經典K&R C。
據D爺爺說,他,Ken, 和Kernighan三人中,Kernighan最能寫文章,他次之,而Ken寫
得最少;但說到編程,Ken爺爺才是當之無愧的老大。
Edsger Wybe Dijkstra, 對,就是E.W. Dijkstra. 一提到EWD,很多人就會想起找最短
路徑的Dijkstra Algorithm,就好像一提到Sir. Tony Hoare,就想起Quick Sort一樣。
其實這些個演算法不過是兩個牛人在他們職業生涯中最瑣碎的貢獻。比如Dijkstra演算法,
無非是戴爺爺在1956年為了展示新計算機
ARMAC的計算能力,初試身手的成果,屬於他的演算法處女作。據戴爺爺自述,他搞出最
短路徑演算法的時候連紙筆都沒用。當時他和他老婆在阿姆斯特丹一家咖啡廳的陽台上曬
太陽喝咖啡,突然就把這個演算法想出來樂。而且當時的演算法研究還比較原始,牛人們忙
著用計算機搞數值計算,對離散演算法不屑一顧。那時連一個象樣的專注於離散演算法的專
業期刊都沒有。戴爺爺於是推遲發表這個演算法。直到1959年,他才把這個演算法發表
在Numerische Mathematik的創刊號上,權為捧場。:-)
EWD在多個領域牛氣沖天,端的是理論和編程兩手硬的高手。只不過他的很多工作比較
深刻,學校的老先生們覺得本科生接受不了,不給本科生講而已。
戴爺爺大概因為最短路徑演算法一戰成名,於是有人請他參加另一台計算機X1的設計工
作,並且把設計實時中斷系統的任務派給了他。現在看來實時中斷也許不算什麼,但要
知到,X1前根本就沒有實時中斷的概念。實現它簡直就是一場豪賭。戴爺爺起初還不情
願,但經不住項目負責人Bram和Carel的輪番 「吹捧」:我們知道實時中斷讓您工作變
得非常困難,但象您這樣的牛人肯定能做出來的說。結果戴爺爺被糖衣炮彈徹底擊穿,
接下了這個燙手山芋。兩三年後,他不僅搞出了實時中斷,還圍繞這個寫出了自己的博
士論文,順利戴上博士帽。
讓戴爺爺真正成名立萬的還是在X1上開發的Algo60,最早的高級語言之一。戴爺爺沒日
沒夜地工作了8個月,就搞出了Algo60,也因此獲得了 1972年的圖靈獎。因為Algo60,
戴爺爺發表了一篇石破天驚的文章:Recursive
Programming,於是人們才知道,原來高級語言也可以高效地實現遞歸,原來從此以後,
所有程序員都不可避免地和戴爺爺發明的一個詞(應該說是概念)打交道:堆棧。
而且Algo60還讓戴爺爺深入地思考多道程序設計的問題,最終發明了每個系統程序員
都繞不開的概念:semaphore。當然,戴爺爺總是把他發明的概念嚴格形式化,極具科
學家本色的說。和這些成就想比,他提出的吃飯的哲學家問題,也就沒什麼好說的了。
說來好笑,當時的大學(忘了哪所了)還是覺得戴爺爺沒有受過正統的數學訓練,也不是
專門搞數值分析的,所以最後不太情願地給了他一個教職。這種小挫折並不能妨礙象戴
爺爺這樣的牛人創造歷史。他一邊教數值分析(:-D) ,一邊開始開發一個新的操作系
統,並培養計算機科學家。幾年後,THE Multiprogramming
System橫空出世。THE是第一個支持鬆散耦合,顯式同步的進程並由此使得嚴格證明系統
沒有死鎖變得容易的操作系統。可惜戴爺爺任職的系不識貨,還強行解散了他的研究小
組(1972年戴爺爺給他的系主任說他得了圖靈獎,系主任的第一反應是你們搞計算機就
喜歡亂發獎)。這讓戴爺爺相當郁悶,得了抑鬱症。在極度郁悶之中,戴爺爺決定用寫作
來治療自己的抑鬱症。於是經典就誕生樂:Notes on Structured Programming。戴爺爺
從此被尊為結構化編程的奠基人,而且他的抑鬱症也被治好樂。
EWD太牛,結果他的故事也太多。先到這里吧。1973起,他的故事就在美國發生了。
Anders Hejlsberg,微軟.NET的首席架構師,編程語言設計和實現的頂尖高手。他一手
做出了 Turbo Pascal, 也是Delphi, J++(尤其是WFC),C#, 和.NET的主要作者。這些作
品的名字足以為他立傳。作為一個程序員,我在這樣的大師面前實在無語。生子當
如Anders的說。李維的<>里已詳細講述了Anders的傳奇故事,我就不用費舌了:
http: //java.mblogger.cn/iexploiter/posts/1505.aspx
Artima上有Anders談C#的系列訪談。MSDN上有一段Anders導游的錄像 。有興趣可以去看
看牛人的豐采。
J. 軟體程序員的情書
茫茫內存里,你我不曾相見;寥寥代碼中,命運註定良緣.
當編譯開始,我們齊手共建
--中國軟體的春天!
雖然我們是不同的對象,都有隱私的一面,
但我相信你會找到我的介面,把我的最真給你看!
因為我是你的指針,在茫茫內存的堆棧中,
永遠指向你那片天空,不孜不倦!
我願做你的內聯,供你無限次的調用,直到海枯石爛!
我願做你的引用,和你同進退共生死,一起經受考驗!
只是我不願苦苦地調試你的心情,最終淪為你的友元!
而我更不願始亂終棄,刪不清借你用的空間,
最後一拍兩散,搞得內存混亂...
如今我們已被MFC封裝--事事變遷!
如今我們已向COM走去--可想當年!
沒想到在愛情的世界裡, 0與1也是同樣的道理。
自從見到了你, 我的愛情旗標立刻變成了 1。
雖然只是短短的一聚, 心中的振盪器卻再也無法平息。
每節上課, 我就變成一台多工的機器。
因為想你, 使得 CpU load 總無法降低。
每次考試, 我就變成一條不穩定的 Memory。
因為念你, 使得 parity Check 總無法 Error Free。
想對你說的話, 即使是 Giga 級的哈滴也不夠記。
只好期盼, 我會擁有一台可讀寫的光碟機。
多麼希望我們之間, 只有磁頭和磁碟的距離。
也希望你是我生命中的 Cache, 不要再讓我苦苦尋覓。
每次想打電話給你, 我總是在矛盾中猶疑。
我在你心中的 priority, 到底是怎麼樣的等級想對你表明心意, 卻又害怕遭遇 Deadlock 的打擊。
你我之間, 是否有 Algorithm 可來處理這種微妙的關系愛情是場如真似幻的夢境, 沒有一定的軌跡。
思想中的邏輯與定理, 在愛情中也無用武之地。
原來, 這就是為什麼世間的男女總在互猜心意。
告訴我, 我們之間的愛情到底是 0 或是 1
你對我說, 我們之間的一切沒有離散數學中的交集。
我回答說, 你沒用過線性代數中的對角矩陣, 又怎知數年後的推移但畢竟這一切已成定局, 終究造成了我們的別離。
在逐漸模糊的身影後, 我忍不住流下了淚。
經營一段愛情, 並不像安裝 Linux 那麼容易。
縱有 patch 程式, 又如何修補那段支離破碎的記憶。
指向地久天長的指標, 到最後總有一場 Null 的游戲。
可嘆紅塵痴情眾生, 又有多少能夠比翼
資料結構中的 AVL Tree, 據說在搜尋方面非常夠力。
但即使能在 log n 的時間內找到你, 也不再具有任何意義。
只好將這段情, 深深的埋藏在心底。
靜待多年之後, 再細細的回憶。。。
作為一個真正的程序員,首先應該尊重編程,熱愛你所寫下的程序,他是你的夥伴,而不是工具。下面是關於程序員勵志語錄的內容,歡迎閱讀!
1、永不放棄,永不放棄又有兩個原則,第一個原則是永不放棄,第二個原則就是:當你想放棄時回頭看第一個原則。
2、非優秀的程序員常常把空間和時間消耗殆盡,優秀的程序員則總是有足夠的空間和時間去完成編程任務,而且配合近乎完美。
3、這句話不是很文雅,徹底鄙視那些害怕別人超越自己而拒絕回答別人問題的程序員。
4、你比他好一點,他不會承認你,反而會嫉妒你,只有你比他好很多,他才會承認你,然後還會很崇拜你,所以要做,就一定要比別人做得好很多。
5、每一個問題都是一把鎖,你要相信世界上一定有一把鑰匙能打開這把鎖,你也能找到這把鑰匙。
6、內存無論在怎麼發展,它都會有一個容量的限制。因此你應該堤防著它。你的程序如果導致內存泄漏,是程序員很可恥的事情。
7、當你想在你的代碼中找到一個錯誤時,這很難;當你認為你的代碼是不會有錯誤時,這就更難了。
8、用代碼行數來測評軟體開發進度,就相對於用重量來計算飛機建造進度。
9、初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是只對部分功能熟悉而已,不系統還是不夠的。
10、當你用腳本到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將餘下的部分粗略的完成以保證這個代碼的完整性,然後分析自己的錯誤並重新編寫和工作。
11、真正的程序員的程序不會在第一次就正確運行,但是他們願意守著機器進行若干個30小時的調試改錯。
12、一匹真正的好馬,即使在鞭子的影子下,也能飛奔。
13、一個人靜靜坐在電腦面前寫代碼的感覺,那是什麼感覺?那是武林高手閉關修煉的感覺。
14、人吶,眼光放得長遠一些,看到的東西也會多一些,生活也就會過得更有意義一點。
15、真正的程序員不畫流程圖,原始人和文盲才會干這事兒。
16、看幫助,不要因為很難而自己是初學者所以就不看;幫助永遠是最好的參考手冊,雖然幫助的文字有時候很難看懂,總覺得不夠直觀。
17、優秀的判斷力來自經驗,但經驗來自於錯誤的判斷。
18、程序中蘊含著很多的道理,唯有大徹大悟者方能體會其中的奧妙。
19、如果建築工人蓋房子的方式跟程序員寫程序一樣,那第一隻飛來的啄木鳥就將毀掉人類文明。
20、真正的程序員不看參考手冊,新手和膽小鬼才會看。
21、程序是我的生命,但我相信愛她甚過愛我的生命。
22、別心急,寫腳本確實不容易;水平是在不斷的實踐中完善和發展的。
23、知道一點東西,並不能說明你會寫腳本,腳本是需要經驗積累的。
24、看得懂的書,請仔細看;看不懂的書,請硬著頭皮看。
25、我們應該重視團隊的精神,一個人作用再大,也不過是一碗水中比較大的一粒水珠而已。
26、程序員,他們想的是什麼?他們想的永遠都是技術,他們崇尚的也永遠都是技術。
27、真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。
28、程序員可以讓步,卻不可以退縮,可以羞澀,卻不可以軟弱,總之,程序員必須是勇敢的。
29、真正的程序員不接受團隊開發的理念,除非他自己是頭頭。
30、真正的程序員沒有進度表,只要討好領導的馬屁精才有進度表,真正的程序員會讓領導提心吊膽。
31、編程中我們會遇到多少挫折?表放棄,沙漠盡頭必是綠洲。
32、不要被對象、屬性、方法等詞彙所迷惑;最根本的是先了解最基礎知識。
33、把在書中看到的有意義的例子擴充;並將其切實的運用到自己的工作中。
34、我們這個世界的一個問題是,蠢人信誓旦旦,智人滿腹狐疑。
35、無私奉獻不是天方夜譚,有時候,我們也可以做到。
36、如果你喜歡底層開發,千萬不要勉強自己去搞VC,找到你最真實的想法,程序員最不能忍受的就是萬精油。
37、調試完一個動態連接函數,固然值得興奮,但真正的成功遠還在無數個函數之後。
38、設計是一個發現問題、而不是發現解決方案的過程。
39、就算我們站在群山之顛,也別忘記雄鷹依舊能從我們頭頂飛過。驕傲是比用Java進行底層開發更可笑的東西。
40、一本好書,就像高級武功秘籍一樣,哪怕只是從裡面領悟到個一招半勢,功力提升起來都是驚人的。
41、不要看到別人的回復第一句話就說:給個代碼吧!你應該想想為什麼。當你自己想出來再參考別人的提示,你就知道自己和別人思路的差異。
42、真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當然也很難讀。
43、任何傻瓜都能寫出計算機可以理解的代碼。好的程序員能寫出人能讀懂的代碼。
44、做技術一定要一顆恆心,這樣才不會半途而廢。
45、如果調試一個程序讓你很苦惱,千萬不要放棄,成功永遠在拐角之後,除非你走到拐角,否則你永遠不知道你離他多遠,所以,請記住,堅持不懈,直到成功。
46、你的一個程序有時正常有時不正常,而你已經完全遵循編程的規則,為什麼?事實上我認為相信只要遵循別人所說就能得到想當然的結果的人其實是個傻瓜。
47、對於問題的理解,一定要透徹。這樣你才能實質的解決問題。
48、編程是一種單調的生活,因此程序員比普通人需要更多的關懷,更多的友情。
49、對程序員來說大部分的快樂是從解決問題,特別是獨立解決問題中獲得,而不是從這個CASE有多大,獎金有多少中獲得。
50、有兩種方法能寫出沒有錯誤的程序;但只有第三種好用。
51、其實你找不到錯誤不代表錯誤不存在,同樣你看不到技術比你牛的人並不代表世界上沒有技術比你牛的人。
52、你要麼要軟體質量,要麼要指針演算法;兩者不可兼得。
53、一個人靜靜坐在電腦面前寫代碼的感覺,那是什麼感覺?是武林高手閉關修煉的感覺。
54、理想如果不向現實做一點點屈服,那麼理想也將歸於塵土。
55、沒有情調,不懂浪漫,也許這是程序員的一面,但擁有朴實無華的愛是他們的另一面。
56、如果你沒有把握做到,最好就不要承諾,你什麼也不承諾,至少別人不會看不起你。
57、『理論』是你知道是這樣,但它卻不好用。『實踐』是它很好用,但你不知道是為什麼。程序員將理論和實踐結合到一起:既不好用,也不知道是為什麼。
58、請把書上的例子親手到電腦上實踐,即使配套光碟中有源文件。
59、程序員是值得尊敬的,程序員的雙手是魔術師的雙手,他們把枯燥無味的代碼變成了豐富多彩的軟體。
60、把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡。
1.在那辦公室里電腦面前有一群程序員,他們沉默又靦腆,他們聰明但沒錢。他們一天到晚辛辛苦苦拚命寫軟體,如果累了就咬倒在沙發上睡!哦苦命的程序員,哦苦命的程序員,只要老闆不滿意他們就要重新搞一遍,但是期限只剩下最後的一天。
2.在你的資料庫里添些快樂的元素,給你的符號欄里加些如意字元,為你的人生下載好運軟體,在你的心間上傳幸福無限,程序員節,願你笑口常開,日子甜甜。
3.一個鍵盤一根網線你便能打下一片天下,幾個字母一些數字你便能創造輝煌人生,一個指令一次回車你便能成就世界,程序員節到了,復制一份快樂給你,粘貼一堆幸福送你,保存一世如意給你,願你開心永在。
4.一台電腦,一個鍵盤,盡情揮灑智慧的人生;幾行數字,幾個字母,認真編寫生活的美好;一個靈感,一段程序,推動科技進步,促進社會發展。程序員節,用心編寫程序,用智慧照亮人生!
5.「咳嗽、貧窮和愛」,無法編程,不能隱瞞,你想隱瞞,卻欲蓋彌彰;「身體、金錢和愛」,無法編程,不能揮霍,你想揮霍,卻得不償失;「生命、時間和愛」,無法編程,不能挽留,你想挽留,卻漸行漸遠;程序員節,願你把「珍惜、呵護和愛」編入人生程序,幸福快樂就會永遠把你伴隨!
6.點擊開快樂的界面,編寫下幸福的程序,好運就在你運算的腦海里,成功就在你敲擊的雙手中。程序員節,我把祝福編輯,願你把吉祥安康永遠保存!
7.冷靜的思維,點亮智慧的殿堂;抽象的理念,交匯靈感的火花;平凡的字元,串起別樣的精彩;細膩的語言,盤活冰冷的.程序;非凡的才華,開啟幸福的天地。程序員節,願你開懷,收獲精彩!
8.在你的程序里,快樂無需編譯,幸福自會運行;美麗沒有指令,人生也會計算;心情不必升級,自由自會擴展。程序員節,你的幸福數據在載入!
9.你很少用滑鼠,你都是直接輸入指令。你很少用五筆,你從來都是字母加數字。你敲鍵盤就像彈鋼琴,行雲流水一般,最後的回車將美好的創意上傳。你不需要世人理解,你龐大的程序,在凡夫俗子看來只是滑鼠一點。你享受寂寞,欣賞繁瑣,專門糾錯,只為了大家簡單快樂的生活。你辛苦了,程序員節快樂!
10.請用真情研製一個愛心程序,讓世界溫暖長存;請用智慧設計一個和平程序,讓人間充滿安寧;請用勤勞開發一個醫學程序,讓人們無病纏身;程序員日,願所有程序員們工作順心,快樂開心!
11.一條網線連接四面八方,敲打鍵盤帥氣的模樣,「蝸居」生活胸懷天下,編一套快樂的程序,讓世界歡暢,程序員日願程序員朋友好好休息,身體健康,「不著病毒」,祝福你們明天再次創造輝煌。
12.你從不玩游戲,你只編寫游戲程序。你很少用QQ,你可以在網路的任一角落留言,只要你願意。你很枯燥,但從不無聊。你娛樂很少,但卻常常微笑。你醉心於腦力的激盪,你是網路的源代碼,你是人類創意的奇葩。程序員節,祝你健康並快樂著!