国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
邢紅瑞的blog--[轉(zhuǎn)載] 一篇關(guān)于程序員性格的文章

軟件開發(fā)中人們很少注意個(gè)人性格問題。自從 1965年Edsger Dijkstra的有里程碑意義的文章“程序開發(fā)是一種人類活動(dòng)”發(fā)表以來,程序員性格被認(rèn)為是合理的和有成效的研究領(lǐng)域,雖然有些題目如“大橋建筑者的心理”和“對(duì)律師行為的研究實(shí)驗(yàn)”看起來可能是荒唐的,而在計(jì)算機(jī)領(lǐng)域,“計(jì)算機(jī)編程中的心理”和“對(duì)程序員行為的研究實(shí)驗(yàn)”等題目則是常見的。

    每個(gè)領(lǐng)域的工程人員都知道工具和他們所用材料的局限性。如果你是一位電機(jī)工程師,你就應(yīng)明白各種材料的導(dǎo)電性和使用電壓表的各種方法。如果你是一位建筑師,你就應(yīng)明白木材、混凝土、鋼材的性能。而如果你是一位軟件工程師,你的基本建筑材料是人的聰明才智,并且你的主要工具是你自己。建筑師是將建筑物結(jié)構(gòu)進(jìn)行詳細(xì)的設(shè)計(jì),然后將設(shè)計(jì)藍(lán)圖交給其它人去建造,而你則是一旦當(dāng)你從細(xì)節(jié)上對(duì)軟件作出設(shè)計(jì)后,軟件生成過程也就結(jié)束了。

編程的整個(gè)工作就如建造空中樓閣一樣——它并不是純粹的人工活動(dòng)。于是,當(dāng)軟件工程師研究工具和材料的必需性時(shí),他們發(fā)現(xiàn)自己正在研究人的智力、性格,不像木材、混凝土和鋼材等可見的東西。

1  個(gè)人性格是否和本書的主題無關(guān)

編程工作極強(qiáng)的內(nèi)部特點(diǎn)使得個(gè)人特點(diǎn)異常重要,你想想一天全神貫注地工作八小時(shí)有多么困難,你可能有過由于精力過分集中而今天無精打采的體驗(yàn)?;蛴捎谏蟼€(gè)月過分投入而本月沒有一點(diǎn)精神,你也可能在某一天從上午8點(diǎn)工作到下午2點(diǎn),以致于精神快要坍塌了。有時(shí)你從下午2點(diǎn)拼命于到5點(diǎn),然后花費(fèi)一周的時(shí)間修改你在其間所寫的東西。
    人們難以對(duì)編程工作進(jìn)行檢查,因?yàn)闆]有人知道你真正干些什么,我們經(jīng)常有過這樣的體驗(yàn),我們花費(fèi)8O%的時(shí)間進(jìn)行我們所感興趣的20%的工作,同時(shí)花費(fèi)2O%的時(shí)間生成其余80%的程序。

    你的老板并不能強(qiáng)迫你成為一個(gè)好的程序員,甚至過了很長(zhǎng)一段時(shí)間你的老板也無法判斷你是否是一個(gè)稱職的程序員,如果你想成為一個(gè)高手,你得全靠你自己下功夫。它和你個(gè)人性格有關(guān)。

    一旦你自己決定成為一個(gè)高級(jí)程序員,你發(fā)展的潛力是很大的,各種研究發(fā)現(xiàn),創(chuàng)建一個(gè)程序所需的時(shí)間比可達(dá)到10:1,同時(shí)也發(fā)現(xiàn)調(diào)試一個(gè)程序的時(shí)間,程序?qū)崿F(xiàn)長(zhǎng)度、速度、錯(cuò)誤率和所發(fā)現(xiàn)錯(cuò)誤數(shù)對(duì)不同的程序員其差別可達(dá)10:1。

你無法改變自己的聰明程度,但是你可在一定程度上改變自己的性格,已發(fā)現(xiàn)在程序員成為高級(jí)程序員的過程,性格是更有決定意義的因素。

2  聰明和謙虛

    聰明看起來似乎不是個(gè)人性格的一個(gè)貢獻(xiàn)。它也的確不是。恰巧的是,好的智力是和成為一個(gè)好的程序員有著并不嚴(yán)密關(guān)系的因素。

    為什么?難道這并不要求你有一個(gè)好的智力嗎?

    不,你不需這樣,沒有人真正同計(jì)算機(jī)一樣迅速敏捷。完全理解一個(gè)一般的程序需要你有吸收細(xì)節(jié)的很強(qiáng)的能力,并能同時(shí)理解所有細(xì)節(jié),你很好地利用你的聰明要比你有多聰明更為重要。

    在 1972年,Edsger Dijkstra發(fā)表一篇論文,名字叫作“謙虛的程序員”。他在此文中主張所有的程序員都應(yīng)盡力彌補(bǔ)他們很有限制的智力。那些最精通編程序的人往往是那些認(rèn)為自己的頭腦是多么有限的人,他們是謙虛的。而那些最為糟糕的程序員往往是那些拒絕承認(rèn)自己的能力不適應(yīng)工作任務(wù)的程序員。他們的自我妨礙自己成為優(yōu)秀程序員,你學(xué)到越多的東西來彌補(bǔ)你的大腦,你就越能成為一個(gè)好的程序員,你越謙虛,你取得的進(jìn)步也就越快。

    許多良好的編程風(fēng)格的目的是減少你大腦的負(fù)擔(dān),以下是一些例子:

Ÿ “分解”一個(gè)系統(tǒng)的目的是為了使其更為簡(jiǎn)單易懂。人們往往易于理解幾條簡(jiǎn)單的信息而不是一條復(fù)雜的信息。所有軟件設(shè)計(jì)方法的目的是將復(fù)雜的問題分解為簡(jiǎn)單的幾部分,不論你是否使用結(jié)構(gòu)化、自頂向下或是面向?qū)ο蟮脑O(shè)計(jì),以上目標(biāo)都相同。

Ÿ 進(jìn)行評(píng)審、檢查和測(cè)試是彌補(bǔ)人的錯(cuò)誤的一種方法,評(píng)審方法部份源于“無錯(cuò)編程”,如果你沒有任何錯(cuò)誤,你就用不看評(píng)審你的軟件,但是當(dāng)你知道自己的能力是有限時(shí),你就應(yīng)和別人討論以提高你的軟件質(zhì)量。

Ÿ  將子程序編短一些有助于減少你的工作量。你根據(jù)問題而不是計(jì)算機(jī)科學(xué)術(shù)語編寫程序并使用盡可能高級(jí)的抽象思維,有助于減少你的工作量。

Ÿ 使用各種交談方式可將你從編程的死胡同中解放出來。

你也許認(rèn)為靠聰明能更好地開發(fā)人的智力活動(dòng),所以你無需這些幫助。你也可能認(rèn)為使用智力幫助的程序員是走彎路。實(shí)際上,研究表明,那些使用各種方式彌補(bǔ)其錯(cuò)誤的謙虛的程序員們所編寫的程序,既易為自己也易為別人所理解,并且其程序中所含錯(cuò)誤也少。實(shí)際的彎路是出現(xiàn)錯(cuò)誤和影響進(jìn)度的路。

3  好奇心

一旦你認(rèn)為自己理解程序的能力是有限的,而且你意識(shí)到,進(jìn)行有效的編程是補(bǔ)償自己能力的方法時(shí),你就開始了你生涯中漫長(zhǎng)的探索過程。

在變成高級(jí)程序員的過程中,對(duì)技術(shù)的好奇心是很重要的。有關(guān)的技術(shù)信息變化迅速。許多PC程序員沒有在什么機(jī)器上編過程,而許多程序員還沒有用過電腦的穿孔卡片。技術(shù)環(huán)境的特定特征每隔5到10年就發(fā)生變化。如果你跟不上這種變化,你將面臨落伍的威脅。

    程序員往往很忙碌,以致于他們沒有時(shí)間對(duì)更好地工作或?qū)ぷ靼l(fā)生興趣。如果你真是這樣,你也不必在意大多,因?yàn)樵S多人都同你一樣,以下是一些培養(yǎng)你的好奇心的方法,你真應(yīng)該好好學(xué)一學(xué)它。

    在開發(fā)過程中建立自我意識(shí)。你對(duì)開發(fā)過程越了解,不管你是通過對(duì)開發(fā)過程的閱讀或自己的觀察得來的,你就越能了解各種修改,并使你所在開發(fā)組向一個(gè)更好的方向前進(jìn)。如果分配你的工作任務(wù)很少而不能提高你的技能,你也應(yīng)對(duì)此滿足。如果正在開發(fā)有良好市場(chǎng)前景的軟件,你所學(xué)的一半知識(shí)將會(huì)在今后三年內(nèi)過時(shí),如果你不再學(xué)習(xí)新知識(shí),你將會(huì)落伍。

在1988到200O年中,美國平均工作人數(shù)可增加11%到 19%,計(jì)算機(jī)系統(tǒng)分析員可增長(zhǎng)53%。程序員可增長(zhǎng)48%,計(jì)算機(jī)操作員可增長(zhǎng)29%——在現(xiàn)有的1,237,000份工作的基礎(chǔ)上再增加 556,000份新工作。如果你在工作中學(xué)不到什么,你可試著找一份新工作。

    實(shí)驗(yàn)。了解編程的一個(gè)有效途徑是對(duì)編程和開發(fā)過程進(jìn)行實(shí)驗(yàn),如果你對(duì)所用語言的工作過程不甚了解,你可編寫一個(gè)短程序以檢查此特征并看其是如何工作的,你可在調(diào)試器中觀看程序的執(zhí)行。用一個(gè)短程序而不是一個(gè)不甚了解的大程序來測(cè)試一個(gè)概念是很好的。

    如果短程序的運(yùn)算表明程序運(yùn)行結(jié)果并不是你所期望的,這時(shí)你應(yīng)怎么辦?這正是你所需要的,最好用一個(gè)短程序在有效編程的一個(gè)關(guān)鍵方法上迅速制造錯(cuò)誤,每次你可從中有所收益,制造錯(cuò)誤并不是罪過,沒有從中學(xué)到什么才是罪過。

    閱讀解決問題的有關(guān)方法。解決問題是軟件開發(fā)中的一個(gè)重要活動(dòng),Herbert Simon曾報(bào)道過人工解決問題的一系列例子。他們發(fā)現(xiàn)人們自己通常不能發(fā)現(xiàn)解決問題的方法,即使這種方法很容易學(xué)到。這意味著即使你想自己創(chuàng)造車輪,你也不能指望成功,你可能設(shè)計(jì)出方車輪。

    在你行動(dòng)之前進(jìn)行分析和計(jì)劃。你將會(huì)發(fā)現(xiàn)在分析和行動(dòng)之前存在著矛盾,有時(shí)你不得不放棄的數(shù)據(jù)和行動(dòng),對(duì)大多數(shù)程序員來說,問題并不在于過分分析和過分使用。

    學(xué)習(xí)成功項(xiàng)目的開發(fā)經(jīng)驗(yàn)。學(xué)習(xí)編程的一種非常好的方法是向一些優(yōu)秀程序員學(xué)習(xí)。Jon Bentley認(rèn)為你應(yīng)靜心坐下來,準(zhǔn)備一杯白蘭地,一枝好雪茄煙,然后如同讀小說一樣閱讀程序。實(shí)際上可能并不是這樣,許多人往往不愿犧牲其休息時(shí)間來閱讀——500頁的源程序,但是許多人往往樂意研究一個(gè)高級(jí)程序的設(shè)計(jì),并有選擇地研究一些具體細(xì)節(jié)。

    軟件工程領(lǐng)域很少利用過去成功或失敗的例子。如果你對(duì)建筑學(xué)有所興趣,你可能會(huì)研究Louis Sullivan,F(xiàn)rank Lloyd Wright和 I.M.Pei的設(shè)計(jì)圖,你也可能會(huì)參觀他們的建筑物,如果你對(duì)結(jié)構(gòu)工程有興趣,你可以研究 Broolyn大橋,Tacoma Narrows大橋以及其它混凝土、鋼鐵和木材建筑,你應(yīng)研究你所在領(lǐng)域中成功或失敗的例子。

    Thomas Kuhn指出,任何成熟的科學(xué),實(shí)際上是通過解決問題而發(fā)展起來的,而這些問題通常被看作本領(lǐng)域良好工作的例子,并且可用作將來進(jìn)行工作的例子。軟件工程是剛?cè)氤墒祀A

段的一門科學(xué),在1990年,計(jì)算機(jī)科學(xué)和技術(shù)委員會(huì)曾指出,在軟件工程領(lǐng)域很少有對(duì)成功和失敗的例子進(jìn)行研究的文件,在1992年3月的“ACM通信”中有一篇文章主張對(duì)別人編程中出現(xiàn)的問題進(jìn)行研究,總之,學(xué)習(xí)別人的編程是有重要意義的。

    其中一個(gè)最受歡迎的欄目是“編程拾萃”,它專門研究編程過程中出現(xiàn)的問題,這對(duì)于我們是有啟發(fā)的。

    你可能有或沒有一本研究編程的書,但是你可閱讀高級(jí)程序員所編寫的代碼,閱讀你所尊敬的程序員的代碼,或閱讀你并不喜歡的程序員的代碼,再將他們的代碼和你自己的代碼比較。它們之間有何異同?為什么會(huì)有差異?哪一個(gè)更好?為什么?

    除了閱讀他人的代碼之外,你也應(yīng)讓其它高水平程序員評(píng)價(jià)你的代碼質(zhì)量,找一些較高水平的程序員評(píng)論你的代碼,從他們?cè)u(píng)論中,你可剔除那些帶個(gè)人色彩的東西而著重于那些重要的東西。這樣可提高你的編程質(zhì)量。

    閱讀手冊(cè)。手冊(cè)恐懼癥在程序員中很流行。一般來說,手冊(cè)的編寫和組織都不好,但是程序員對(duì)手冊(cè)的恐懼也和他們對(duì)書本的過分恐懼有很大關(guān)系。手冊(cè)含有一些重要的東西。所以花費(fèi)時(shí)間閱讀手冊(cè)是值得的,忽視手冊(cè)中的信息正如忽視一些常見的首字母簡(jiǎn)略詞。

    現(xiàn)代語言產(chǎn)品一般都帶有大量程序庫,這時(shí),你花費(fèi)時(shí)間查閱參考手冊(cè)是值得的,通常提供語言產(chǎn)品的公司,已經(jīng)編寫了許多你可以調(diào)用的子程序。如果是這樣,你應(yīng)弄懂有關(guān)手冊(cè),每隔一段時(shí)間閱讀一下手冊(cè)。

    閱讀有關(guān)書籍和期刊。你應(yīng)為自己閱讀本書感到幸運(yùn)。你已經(jīng)學(xué)到了軟件工程的許多知識(shí),因?yàn)橐槐緯磕甓家辉S多程序員所閱讀,讀一些東西可能使你的專業(yè)知識(shí)向前邁進(jìn)一步,如果你每二個(gè)月閱讀一本好的計(jì)算機(jī)書籍,你的知識(shí)將會(huì)大大提高并能在同行中脫穎而出。

4  誠 實(shí)

    編程生涯成熟的部分標(biāo)志是不折不撓地堅(jiān)持誠實(shí),誠實(shí)通常表現(xiàn)在以下幾個(gè)方面:

Ÿ 不假裝你是一個(gè)編程能手

Ÿ 樂于承認(rèn)自己的錯(cuò)誤

Ÿ 力圖理解編譯器警告信息而不是對(duì)其置之不理

Ÿ 對(duì)你的程序有一個(gè)清晰的了解,而不是進(jìn)行編譯看其是否有錯(cuò)

Ÿ  提供實(shí)際狀態(tài)報(bào)告

Ÿ  提供實(shí)際方案評(píng)估,在你的上司面前堅(jiān)持自己的意見

    前二個(gè)方面——承認(rèn)你不知道一些事情或承認(rèn)你犯了一個(gè)錯(cuò)誤是你謙虛的反映。如果你不懂裝懂你又怎么能指望學(xué)到新東西呢?你最好是假裝自己知之甚少,聽別人的解釋,向他們學(xué)習(xí)新的東西,并評(píng)估他們是否真正了解其正在談?wù)摰臇|西。

    你應(yīng)對(duì)自己的能力作某種程度的估計(jì),如果你對(duì)自己的評(píng)價(jià)很完美,這可是一個(gè)不妙的信號(hào)。

拒絕承認(rèn)錯(cuò)誤是一個(gè)令人討厭的習(xí)慣,如果Sally拒絕承認(rèn)錯(cuò)誤,她看起來相信自己沒有錯(cuò),可能會(huì)使其它人相信她確實(shí)是無辜的,但是事實(shí)證明Sally出錯(cuò)誤了,這樣,每個(gè)人都知道她犯了錯(cuò)誤。錯(cuò)誤正如潮流一樣是一種復(fù)雜的活動(dòng),如果她在過去沒有發(fā)生過錯(cuò)誤,誰也不

會(huì)將錯(cuò)誤歸咎于她。

    如果她拒絕承認(rèn)錯(cuò)誤,到頭來她只能自食其果。其他人都知道他們?cè)谕粋€(gè)不誠實(shí)的人工作。這比僅犯一個(gè)錯(cuò)誤更令人反感。如果你犯了一個(gè)錯(cuò)誤,你應(yīng)迅速主動(dòng)地承認(rèn)錯(cuò)誤。

    對(duì)編譯器錯(cuò)誤信息不懂裝懂是另外一個(gè)常見錯(cuò)誤。如果你不理解某一編譯警告信息或你認(rèn)為時(shí)間太緊迫來不及檢查,你想想這是不是真正浪費(fèi)時(shí)間?編譯器將問題明白無誤地向你展示出來,而你卻不試圖解決問題,我碰到過不少人在調(diào)試過程中請(qǐng)求幫助的事,我問他們是否有一個(gè)完好的編譯器,他們回答是。于是開始解釋問題的癥狀,我說:“這看起來像是未對(duì)指針進(jìn)行初始比。但是編譯器應(yīng)對(duì)此給出了警告信息。”他們就說:“哦,編譯器確實(shí)給出了警告信息,我們以為它是指其它事情。”你自己所出的錯(cuò)誤難以蒙蔽別人,也更難以愚弄計(jì)算機(jī),所以你用不著浪費(fèi)時(shí)間這樣做。

    另外一種疏忽是當(dāng)你并不完全了解程序時(shí),你“編譯它看是否能運(yùn)行”。在這種條件下,其實(shí)并不意味著程序能運(yùn)行,因?yàn)檫B你自己都不清楚程序的有關(guān)情況。請(qǐng)記住,測(cè)試僅能發(fā)現(xiàn)錯(cuò)誤的存在,而不能保證一定不存在某種錯(cuò)誤。如果你不理解程序,你就不能進(jìn)行深入的測(cè)試,你如果覺得應(yīng)編譯一下程序以便了解程序的運(yùn)算情況的話,這可是一個(gè)不妙的信號(hào),這可能意味著你不清楚在干些什么。在將你的程序編譯之前你應(yīng)對(duì)其有一個(gè)深刻的理解。

    狀態(tài)報(bào)告也同樣是一個(gè)令人反感的領(lǐng)域。如果程序員在最后50%的項(xiàng)目時(shí)說,程序中  90%是完整可靠的,他們將聲名狼藉。問題在于你對(duì)自己的進(jìn)度缺乏了解,你應(yīng)對(duì)你的工作加強(qiáng)了解。但是,你為了迎奉上司而不愿說出真實(shí)情況的話,可就不同了。一般來說上司都愿意聽到對(duì)項(xiàng)目狀態(tài)的真實(shí)報(bào)告,即使不是他們所希望聽到的,如果你的觀察和見解是中肯的,你應(yīng)客觀地將其說出來,上司需要有準(zhǔn)確的信息以便協(xié)調(diào)各種開發(fā)活動(dòng),而充分的合作是必需的。

    和不準(zhǔn)確的狀態(tài)報(bào)告有關(guān)的一個(gè)問題是不正確的估計(jì)。典型的情況是這樣:上司問Bert要花多少時(shí)間才能開發(fā)出一個(gè)新的數(shù)據(jù)庫產(chǎn)品。Bert和一些程序員交談了一下,討論了一些問題,最后認(rèn)為需8個(gè)程序員和6個(gè)月的時(shí)間,但是他的上司說:“這并不是我們所需要的,你能不能使用較少的程序員在短時(shí)間內(nèi)完成工作?”Bert考慮了一段時(shí)間,并認(rèn)為可以通過削減培訓(xùn)時(shí)間和假期以及讓每個(gè)人的工作時(shí)間稍微延長(zhǎng)一點(diǎn)來達(dá)到上司的要求。他于是作出了需6個(gè)程序員和4個(gè)月時(shí)間的估計(jì),他的上司說:“這就行了。這是一個(gè)相對(duì)較為低優(yōu)先級(jí)的項(xiàng)目。你應(yīng)及時(shí)完成它,因?yàn)轭A(yù)算不允許你超時(shí)。”Bert所犯錯(cuò)誤在于,他沒有認(rèn)識(shí)到評(píng)估是不可商量的,他可以將估計(jì)作得更為準(zhǔn)確,但是他和老板的商量結(jié)果并不能改變開發(fā)一個(gè)項(xiàng)目所需的時(shí)間。 IBM公司的 Bill Weimer說;“我們發(fā)現(xiàn)技術(shù)人員一般都能準(zhǔn)確地估計(jì)項(xiàng)目。問題在于他們能否堅(jiān)持自己的決定;他們需要學(xué)會(huì)堅(jiān)持自己的意見。”Bert許諾在4個(gè)月里交付產(chǎn)品而實(shí)際上6個(gè)月才交付產(chǎn)品,肯定會(huì)使他的老板不高興的。時(shí)間一長(zhǎng),他可能會(huì)因妥協(xié)而失去信任的。否則,他會(huì)因堅(jiān)持自己的估計(jì)而得到尊敬的。

    如果上司施加壓力要改變你的估計(jì),你應(yīng)認(rèn)識(shí)到?jīng)Q定要怎樣作是上司職權(quán)范圍內(nèi)的事。你可以說:“看,這是項(xiàng)目的開銷,我無法說此開支對(duì)本公司是否值得——這是你的工作。我不能和你‘商量”項(xiàng)目所花的時(shí)間,這正如我們不能協(xié)商確定一里究竟有多少英尺一樣——這是不可變更的。你不能商定自然界的規(guī)律,我們只能商定本項(xiàng)目中影響進(jìn)度的各方面,然后重新評(píng)估。我們能減少一些特征,降低性能,分階段開發(fā)項(xiàng)目?;蛘呤鞘褂酶俚娜说珪r(shí)間延長(zhǎng)一點(diǎn),或者是使用稍多的人,而相應(yīng)地減少一些時(shí)間。”

    我曾在一次軟件開發(fā)管理討論會(huì)上聽到一個(gè)奇怪的說法。主講者是一本銷售很好的軟件工程管理書籍的作者。一個(gè)聽眾問:“你的上司讓你評(píng)估某一項(xiàng)目,你知道當(dāng)你得出準(zhǔn)確的評(píng)估時(shí)你的上司可能認(rèn)為代價(jià)太高而放棄項(xiàng)目開發(fā)。這時(shí)你認(rèn)為應(yīng)怎么辦?”主講者回答說,當(dāng)你說服你的上司做出開發(fā)項(xiàng)目的決定時(shí),他們就對(duì)整個(gè)情況了如指掌了。

    這是一個(gè)錯(cuò)誤的回答。你的上司是負(fù)責(zé)整個(gè)公司的運(yùn)轉(zhuǎn)的。如果開發(fā)某一軟件需10O000美元而你的估計(jì)是200000美元,你的公司就不會(huì)開發(fā)軟件。這是要由上司做出決定的。上面這位主講者對(duì)項(xiàng)目的開支說假話,告訴上司將比實(shí)際的要少,他這是在損害上司的權(quán)威,如果你認(rèn)為項(xiàng)目是有前途的,它能為公司帶來新的重大突破,或能提供有價(jià)值的培訓(xùn),你應(yīng)將其說出來。你的上司也會(huì)考慮這些因素的。你哄騙上司做出錯(cuò)誤的決定將會(huì)使公司蒙受損失。如果你失去了你的工作,你將會(huì)明白你最終得到了什么。

5  交流和合作

    真正優(yōu)秀的程序員應(yīng)學(xué)會(huì)怎樣和別人工作和娛樂,編寫可讀代碼是對(duì)程序員作為組中一員的要求之一。

    計(jì)算機(jī)也就同其它人一樣能讀懂你的代碼,但是它要比其它人更能閱讀質(zhì)量差的代碼。作為可讀性原則,你應(yīng)將修改你的代碼的人時(shí)刻記在心上。開發(fā)程序首先應(yīng)同程序員交流,其次則是和計(jì)算機(jī)交流。

    絕大多數(shù)高水平程序員喜歡使自己程序的可讀性強(qiáng),并抽出充足的時(shí)間這樣作。雖然只有一些人能堅(jiān)持到底,而且其中一些人還是高水平的代碼編寫者,對(duì)開發(fā)中程序員級(jí)別的了解,有助于解釋什么地方適合于此原則:

    級(jí)別1:初學(xué)者

    初學(xué)者是能使用一種語言基本能力的程序員,這樣的人能夠使用子程序、循環(huán)、條件語句和其它許多語言特征。

    級(jí)別2:中間者

    中間級(jí)程序員有使用多種語言的能力,并且至少非常熟悉某一種語言。

    級(jí)別3:專家

    編程專家對(duì)其語言或環(huán)境或?qū)@二者有著很深的造詣,這種級(jí)別的程序員對(duì)公司有價(jià)值的,而且有些程序員往往就停留在這個(gè)水平上。

    級(jí)別4:大師

    大師有著專家那樣的專業(yè)知識(shí),并能意識(shí)到編程只是15%和計(jì)算機(jī)交流,其余85%是和人打交道。一般程序員只有30%的時(shí)間甚至更少。大師所編寫的代碼與其說是給計(jì)算機(jī)看倒不如說是給人看的。真正的大師級(jí)程序員所編寫的代碼是十分清晰易懂的,而且他們注意建立有關(guān)文檔。他們也不想浪費(fèi)其精力去重建本來用一句注釋就能說清楚的代碼段的邏輯結(jié)構(gòu)。

    一位不強(qiáng)調(diào)可讀性的高水平代碼者可能停留在級(jí)別3的水平上,但是問題還不止如此。依作者本人的經(jīng)驗(yàn),人們編寫不可讀代碼的主要原因在于他們所編代碼質(zhì)量較差。他們并不是自言自語地說:“我所編代碼不好,所以我要使其難以讀懂”,而是他們并不能完整地理解自己的代碼以致于不能使其是可讀的,這就使他們只能停留在1或2級(jí)的水平上。我所見的最差的代碼是由一個(gè)任何人看了她的程序后都會(huì)望而生畏的人所編寫的。最終,她的上司威脅說如她再

不改正就要解雇她。她的代碼是不作注釋的,并且其程序中充滿了如x,xx,xxx,xx1和xx2這樣的全局變量。她的代碼給了她大量的機(jī)會(huì)顯示她的改錯(cuò)能力。

你不必為自己是初學(xué)者或中間者而內(nèi)疚,你同樣不必為自己是專家而不是大師自愧,在你知道怎樣提高自己的水平后,你倒是應(yīng)為自己停留在初學(xué)者或?qū)<业乃缴嫌卸嚅L(zhǎng)時(shí)間而內(nèi)疚。

6  創(chuàng)造力和紀(jì)律

    當(dāng)我走出校門時(shí),我自認(rèn)為是世界上最好的程序員。我會(huì)編輯令人容忍的井字游戲程序,也能用 5種不同的計(jì)算機(jī)語言編寫一個(gè) 1000行的WORKED程序。然后我進(jìn)了 Real World 公司。我在 Real World 公司的第一個(gè)任務(wù)是閱讀和理解一個(gè) 200000行的 Fortran程序,然后我使其運(yùn)行速度提高了2倍。任何真正的程序員將會(huì)告訴你所有結(jié)構(gòu)化編碼將無助于你解決問題。

                                         “Real Programmers Don’t write Pascal”

    向一位剛走出校門的計(jì)算機(jī)科學(xué)畢業(yè)生解釋為何需要約定和工程紀(jì)律是困難的。當(dāng)我還是一個(gè)大學(xué)生的時(shí)候,我所編寫的最大的代碼是5O0行的可執(zhí)行代碼,作為一個(gè)專業(yè)程序員,我也已編寫了許多小于500行的實(shí)用工具,但是一般項(xiàng)目的長(zhǎng)度為5000到25000行,并且我參加過超過50萬行的項(xiàng)目的開發(fā)工作,這種類型的工作不是需要較高的技巧,也不需要使用新的技巧。雖然一些有創(chuàng)造性的程序員將各種標(biāo)準(zhǔn)和約定視為對(duì)其創(chuàng)造力的阻礙,但是,對(duì)大項(xiàng)目來說,如果沒有標(biāo)準(zhǔn)和約定,項(xiàng)目的實(shí)現(xiàn)是不可能的,而此時(shí)要發(fā)揮創(chuàng)造性也是不可能的。不要在一些無關(guān)緊要的領(lǐng)域建立約定,這樣你就可在你認(rèn)為值得的地方集中發(fā)揮你的創(chuàng)造力。

    McGarry和 Pajerski在對(duì)美國宇航局的軟件工程實(shí)驗(yàn)室過去15年的工作回顧中說,強(qiáng)調(diào)紀(jì)律的方法和工具是非常有效的。許多有很高創(chuàng)造力的人都能很好地遵守紀(jì)律,高水平的建筑師在材料的物理性能、時(shí)間和代價(jià)的限定范圍內(nèi)進(jìn)行工作。藝術(shù)家同樣如此,許多看過Lenoard的設(shè)計(jì)的人,都為他在細(xì)節(jié)上對(duì)約定的遵守產(chǎn)生由衷的敬重。當(dāng)米開朗琪羅設(shè)計(jì)天花板時(shí),使用了各種均衡的幾何形式如三角形、圓周和正方形,他按一定層次將以上三種圖形安排在三個(gè)區(qū)域,如果沒有自我約束和結(jié)構(gòu),這300個(gè)人物的排列將是混亂的而不是有機(jī)地結(jié)合在一起的藝術(shù)杰作。

一個(gè)杰出的程序員需要遵守許多規(guī)則。如果你在開始編碼之前不分析需求就進(jìn)行設(shè)計(jì),你將在編碼過程中學(xué)不到關(guān)于項(xiàng)目的許多東西,你工作的結(jié)果看起來更像一個(gè)三歲小孩的手指畫,而不是一件藝術(shù)作品。

7  懶 惰

懶惰表面形式有以下幾種:

Ÿ  拖延自己討厭的工作

Ÿ  迅速地將自己討厭的任務(wù)做完以擺脫任務(wù)

Ÿ   編寫一個(gè)工具來完成自己討厭的工作以解脫自己

 

    當(dāng)然,有一些懶惰形式要比其它方式好一些。第一種方式是沒有任何益處的。你可能有這樣的體會(huì):你常?;ㄙM(fèi)幾小時(shí)來做一些沒必要作的工作,而不愿面對(duì)自己所無法避免的次要的

工作,我討厭數(shù)據(jù)輸入,但是許多程序需要少量的數(shù)據(jù)輸入。別人都知道我已拖延了數(shù)天的工作僅因?yàn)闉榱送涎訜o法擺脫的用手工輸入幾個(gè)數(shù)據(jù)的任務(wù),這種習(xí)慣是“真正的懶惰”,你編譯某一子程序以檢查有關(guān)情況,這樣你可以避免人工檢查程序同樣也是一種懶惰行為。

    這些小任務(wù)并不像看起來那樣令人反感,如果你養(yǎng)成馬上完成這些任務(wù)的習(xí)慣你就能克服拖延這種懶惰。這種習(xí)慣叫“明懶惰”——懶惰的第二種方式,你仍然是懶惰,但是你是通過在自己所討厭問題上花費(fèi)盡量少的時(shí)間來避開問題的。

    第三種選擇是編寫工具來做這令人討厭的工作。這是“長(zhǎng)期懶惰”。它無疑是懶惰中最有積極性的一種形式,只要你通過編寫工具最終節(jié)省了時(shí)間,通過討論可知,一定程度的懶惰是有益的。

當(dāng)你不是透過玻璃看問題的時(shí)候,你就看到了懶惰的另一方面。“趕著做”或“努力”并不能發(fā)出炫目的光芒。趕著做是一種多余和沒有必要的努力。它只是說明你的焦急而不是你進(jìn)行工作的努力程度。在有效編程中最為重要的現(xiàn)象是人們?cè)谒伎贾型@得并不忙。如果我和一位看起來一直很忙的程序員一起工作,我將認(rèn)為他并不是一位好的程序員,因?yàn)樗⒉皇窃谑褂脤?duì)他來說是最有價(jià)值的工具和自己的頭腦。

8  不是你想象中那樣起作用的性格

“趕著做”并不是唯一的一種看起來可能受敬重而實(shí)際上并不起多大作用的性格。

堅(jiān)持

    依賴于環(huán)境,“堅(jiān)持”可能是一筆財(cái)富也可能是一種不利條件,和其它許多多義概念一樣,對(duì)它有不同的解釋,這取決于你認(rèn)為它是一種好的特性或壞的。如果你想將堅(jiān)持定義為壞的性質(zhì),你可能說它是“頑固”,如果你認(rèn)為是一種好的品格,你可稱其為“堅(jiān)強(qiáng)”或“堅(jiān)持”。

    在大多數(shù)情況下,軟件開發(fā)中的堅(jiān)持是頑固的意思,在你碰到某段新代碼時(shí),你再固執(zhí)己見并不是什么好事。你應(yīng)試著用另一個(gè)子程序,用另一種編碼方法,或返回原來的地方,當(dāng)某種方法并不起作用時(shí),你應(yīng)換用另一種方法。

    在調(diào)試中,當(dāng)你終于發(fā)現(xiàn)一個(gè)煩擾你達(dá)4小時(shí)之久的錯(cuò)誤時(shí),你一定感到非常滿意。但是如果你在一段時(shí)間——通常為15分鐘沒有取得任何進(jìn)展時(shí),你應(yīng)放棄找錯(cuò)。用你的潛意識(shí)去思考問題,嘗試用別的方法解決問題,重寫全部令人厭煩的代碼段。當(dāng)你的精神有所恢復(fù)時(shí)重新回到原來的問題上。和計(jì)算機(jī)錯(cuò)誤作斗爭(zhēng)是不明智的,你應(yīng)盡量避免它們。

    知道在什么時(shí)候放棄是困難的,但是這是你必須面對(duì)的一個(gè)問題。當(dāng)你覺得自己受挫折時(shí),你可向自己提出這個(gè)問題,你問問自己并不意味著放棄,但可能意味著是對(duì)自己的行動(dòng)設(shè)置規(guī)范的時(shí)候了:“如果我不能用這種方法在30分鐘時(shí)間內(nèi)解決問題,我將用幾分鐘時(shí)間考慮不同的方法,并在下一小時(shí)內(nèi)嘗試不同的方法。

經(jīng)驗(yàn)

    和書本知識(shí)比起來,軟件開發(fā)中經(jīng)驗(yàn)的價(jià)值要比其它領(lǐng)域小,這有幾種原因。在許多其它領(lǐng)域中,基本知識(shí)變化緩慢,以致于10年前畢業(yè)的某人所學(xué)到的知識(shí)在現(xiàn)在仍沒有什么變化。而在軟件開發(fā)中,即使基本的知識(shí)也發(fā)展迅速,在你以后10年畢業(yè)的某個(gè)人可能學(xué)到了二倍

于你的有效編程方法,一些老的程序員往往被另眼相看,不是由于他們對(duì)某些特定方法缺乏接觸,而由于他們?cè)谧叱鲂iT后對(duì)一些聞名的基本編程概念缺乏了解。

    在其它領(lǐng)域中,你今天在工作中學(xué)到的東西可能對(duì)你明天的工作有所幫助,在軟件開發(fā)中,如果你不改變你在使用從前的編程語言中的思維方式,或你在你的舊機(jī)器上得出的代碼調(diào)試方式的習(xí)慣,你的經(jīng)驗(yàn)將不值一文。許多進(jìn)行軟件開發(fā)的人往往花費(fèi)時(shí)間準(zhǔn)備上一次的戰(zhàn)斗而不是下一次,如果你不因時(shí)間而做出應(yīng)變,你的經(jīng)驗(yàn)與其說是幫助倒不如說是一個(gè)阻礙。

    除了軟件開發(fā)中的迅速變化外,人們常從其經(jīng)驗(yàn)中得出錯(cuò)誤的結(jié)論,客觀地對(duì)自己進(jìn)行檢查是困難的,你也可能忽視經(jīng)驗(yàn)中使你能得出不同結(jié)論的重要之處,閱讀其它程序員的研究材料是有益的,因?yàn)檠芯坎牧辖沂玖似渌说慕?jīng)驗(yàn)——它們都經(jīng)過充分的精煉,你可客觀地對(duì)其進(jìn)行檢查。

    人們也往往荒唐地強(qiáng)調(diào)程序員的經(jīng)驗(yàn)。“我們需要有五年以上C語言編程經(jīng)驗(yàn)的程序員”就是其中一例,如果一程序員在頭一、二年沒有學(xué)C語言,第三年學(xué)也不會(huì)產(chǎn)生很大區(qū)別。這種類型的經(jīng)驗(yàn)和其工作能力沒有多大區(qū)別。

    在程序開發(fā)中,知識(shí)更新迅速使此領(lǐng)域中“經(jīng)驗(yàn)”處在一種奇怪的地位上,在其它許多領(lǐng)域,過去有著成功歷史的專業(yè)人員,往往令人放心,并且因其一串成功的事情而得到尊敬。退步很快的人將很快和潮流格格不入。為了使自己有所價(jià)值,你必須緊跟潮流。對(duì)年青的、求知欲旺盛的程序員,他們往往在這點(diǎn)上有優(yōu)勢(shì),而有些老的程序員認(rèn)為自己有所資格了而討厭一年接一年都要證實(shí)自己的能力。

    最后一個(gè)問題是:如果你已工作了10年,你得到了10年的經(jīng)驗(yàn)應(yīng)當(dāng)是真正的經(jīng)驗(yàn),你如能堅(jiān)持不斷地學(xué)習(xí),你就能得到經(jīng)驗(yàn),如果你并不想學(xué)到什么,不管多少年你也學(xué)不到什么。

計(jì)算機(jī)迷

    如果你還沒有至少在一個(gè)相同的項(xiàng)目上花費(fèi)一個(gè)月的時(shí)間——一天工作 16個(gè)小時(shí);為了發(fā)現(xiàn)你的程序中最后一個(gè)錯(cuò)誤睡眠中你也念念不忘它,你接連幾天沒日沒夜地工作——即使你所編的程序并不復(fù)雜,那么你可能不會(huì)意識(shí)到編程中有某種令人興奮的東西。

                                                                 Edward Yourdon

這種對(duì)編程的癡迷純粹是胡鬧,并且?guī)缀踝⒍ㄒ 5悄切┩ㄏ绦騿T使你覺得他們是世界上最好的程序員,但是隨后你不得不花費(fèi)幾周的時(shí)間來修正你在這短時(shí)間的輝煌中所帶來的錯(cuò)誤,你可能對(duì)編程非常熱愛,但是你應(yīng)能冷靜地處理這個(gè)問題。

9  習(xí) 慣

    好的習(xí)慣起作用是由于你為一個(gè)程序員所作的大部分事情是你在無意識(shí)中所完成的,例如,有時(shí)你可能會(huì)感到以前愛采用縮進(jìn)循環(huán),但是現(xiàn)在每當(dāng)你編寫一個(gè)新的循環(huán)時(shí)你不會(huì)這樣想了。這種情況確實(shí)在建立程序格式時(shí)存在。你最后一次向自己提出這個(gè)問題是在什么時(shí)候?如果你已經(jīng)有五年實(shí)際編程經(jīng)驗(yàn),你就存在較多的機(jī)會(huì),如果你最后一次向自己提出疑問的時(shí)間在4年半之前,剩下的便是受習(xí)慣的支配時(shí)間了。

你在許多地方都存在習(xí)慣。例如,程序員往往愛仔細(xì)地檢查循環(huán)變量而少檢查賦值語句,這就使得發(fā)現(xiàn)賦值語句中的錯(cuò)誤要比發(fā)現(xiàn)循環(huán)變量的錯(cuò)誤困難一些。你能對(duì)別人的批評(píng)作出

友好或不友好的反應(yīng)。你一直在尋找使代碼可讀或編碼速度更快的方法,也可能你無意尋找它們,如果你不得不在可讀性和編碼速度方面作出選擇,你每次都會(huì)作出相同的選擇,當(dāng)然,你并不是在真正選擇;你是在習(xí)慣性地作出反應(yīng)。

成為某方面好的或差的程序員,主要是靠你自己的所作所為,建筑師要通過建筑而程序員要通過編程。你所作成為習(xí)慣,決定了你的編程品行,最終,你的習(xí)慣好壞決定了你是否能成為一位好的程序員。

微軟公司的 Bill Gates——董事會(huì)主席兼 CEO——曾說過,任何好程序員在開始的幾年都做得很好。從那以后,程序員的好壞便基本定型了。在你進(jìn)行編程很長(zhǎng)一段時(shí)間后,很難見到你突然說“我怎樣才能依循環(huán)進(jìn)行得更快呢? " 或“我怎樣才能使代碼更可讀呢?”這些都是好的程序員一開始便養(yǎng)成的習(xí)慣。

當(dāng)你開始學(xué)習(xí)某一件事時(shí),你應(yīng)按正確的方式學(xué)好它,當(dāng)你開始學(xué)時(shí),你已對(duì)其進(jìn)行了思考,并且你可在正確或錯(cuò)誤的途徑間作出輕易的選擇,在你作過一段時(shí)間后,你對(duì)你所作的不太注意,此時(shí)“習(xí)慣的力量”會(huì)開始起作用。確保起作用的習(xí)慣是你所希望的。

如果你沒有養(yǎng)成最有效的習(xí)慣你應(yīng)怎么辦?對(duì)這些問題沒有一個(gè)明確的答案,以下是對(duì)此問題的部分回答,你無法用沒有習(xí)慣取代壞的習(xí)慣,這就是為什么突然停止抽煙或節(jié)食的人如果不用一些別的什么替代的話會(huì)存在很大困難的原因。用一種新習(xí)慣代替舊習(xí)慣比完全戒除舊習(xí)慣要容易一些,在編程中,應(yīng)盡力養(yǎng)成良好的習(xí)慣。你應(yīng)養(yǎng)成在編寫代碼之前編寫PDL(流程圖)和在編譯之前閱讀代碼的習(xí)慣,你不必為失去壞習(xí)慣而多慮。在用新習(xí)慣取代后壞習(xí)慣會(huì)自然而然消失的。

10  小 結(jié)

Ÿ   你的個(gè)人性格直接影響你編寫計(jì)算機(jī)程序的能力。

Ÿ   最有明顯作用的性格為:謙虛、好奇心、誠實(shí)、創(chuàng)造性和紀(jì)律,還有文明的“懶惰”。

Ÿ   高級(jí)程序員的發(fā)展和生成與天才并無多大聯(lián)系,任何事情都和個(gè)人的發(fā)展有關(guān)。

Ÿ   令人吃驚的是,小聰明、經(jīng)驗(yàn)、堅(jiān)持和欲望既可幫助你也能妨礙你。

Ÿ    許多程序員不主動(dòng)去吸收新信息和新技術(shù),而是靠偶然地上獲得一些新信息,如果你抽出少量時(shí)間學(xué)習(xí)別人的編程經(jīng)驗(yàn),過一段時(shí)間后,你將在你的同行中脫穎而出。

Ÿ     好的性格對(duì)養(yǎng)成良好習(xí)慣有很大影響,為了成為一位高水平的程序員,你應(yīng)養(yǎng)成良好的習(xí)慣,其余的就會(huì)隨之而來。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
程序員特有的9個(gè)壞習(xí)慣
學(xué)編程從開始要養(yǎng)成哪些好習(xí)慣?
程序員最討厭的事,告訴你,別去招惹他們。
程序員不得不注意的十大編程禁忌,你造嗎?
不適合當(dāng)一名開發(fā)人員的10種跡象 - 開源中國社區(qū)
編程即人生:從編代碼中學(xué)到的三條生活感悟
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服