|
提要:軟件開(kāi)發(fā)是一個(gè)“以人的智力為加工原料”的工程活動(dòng),在開(kāi)發(fā)過(guò)程中會(huì)不斷的對(duì)智力和性格作研究。需要注意20/80原則,并不是最勤奮的才是最優(yōu)秀的。編程的工作難以檢查,是否成為高手和個(gè)人性格有關(guān)。你無(wú)法改變智力,但可以改變性格。在軟件開(kāi)發(fā)者的成長(zhǎng)過(guò)程中,EQ還是占主要因素。
1. 聰明和謙遜
一個(gè)人越謙虛進(jìn)步越快,承認(rèn)自己的無(wú)知才會(huì)去正視和彌補(bǔ)自己的錯(cuò)誤。理解程序需要通常很強(qiáng)的對(duì)細(xì)節(jié)把握和理解能力,這對(duì)程序員的智力有很大要求,但是很好的利用聰明要比你到底有多聰明要重要的多。有個(gè)程序員需要也需要謙虛,用謙虛去促進(jìn)自己的智慧,使得自己更加聰明。這是軟件開(kāi)發(fā)者的兩個(gè)基本素質(zhì)要求,它們互相依賴促進(jìn),有時(shí)候也互相排斥,把握好自己的才智和謙虛就能更大程度提高能力。
也許某些事情很麻煩和困難,我們這時(shí)就需要使用一些方法去聰明的解決它們。比如:采用良好的程序風(fēng)格便于理解、采用分解的辦法使復(fù)雜問(wèn)題簡(jiǎn)單化、多進(jìn)行評(píng)審和測(cè)試,多和別人討論和關(guān)注軟件質(zhì)量問(wèn)題、盡量使用高度抽象的思維使問(wèn)題一般化,提高重用率減少工作量、如果問(wèn)題走進(jìn)一個(gè)“死胡同”不妨和杯咖啡放松情緒,或和別人交談交流觀點(diǎn),這是解決鉆牛角尖的好方法。
2. 好奇心
一旦你認(rèn)為自己理解程序的能力是有限的,而且你意識(shí)到,進(jìn)行有效編程是補(bǔ)償自己能力的方法時(shí),你就開(kāi)始了你職業(yè)生涯中漫長(zhǎng)的探索過(guò)程。對(duì)技術(shù)的好奇很重要,否則你將在知識(shí)爆炸的時(shí)代迅速落伍。別在忙碌的工作或瑣事中,失去了對(duì)學(xué)術(shù),自然和生活的好奇心和激情。我們可以在:
1 開(kāi)發(fā)過(guò)程中建立自我意識(shí)。通過(guò)在開(kāi)發(fā)中有意識(shí)的可以使用進(jìn)行新技能的鍛煉,多對(duì)開(kāi)發(fā)工程進(jìn)行觀察,和學(xué)習(xí)其他解決方法,這樣就對(duì)整個(gè)項(xiàng)目有很強(qiáng)的把握能力,甚至可以帶領(lǐng)整個(gè)團(tuán)隊(duì)走向更好的方向。如果你現(xiàn)在做的是市場(chǎng)前景很好的工作,那也意味著工作中的某些技術(shù)可能會(huì)很快被淘汰,注意保持好奇心和創(chuàng)造力。
2 實(shí)驗(yàn)。了解編程的一個(gè)有效方法就是對(duì)編程和開(kāi)發(fā)過(guò)程做實(shí)驗(yàn)。你可以編寫(xiě)一個(gè)程序并觀察它是如何工作的,調(diào)試器里跟蹤程序的執(zhí)行把握它的特性。用個(gè)小程序去檢驗(yàn)一個(gè)不太了解的概念,這對(duì)增進(jìn)理解有非常大的幫助;蛘哂靡粋(gè)短程序,去試圖制造一些錯(cuò)誤,通過(guò)錯(cuò)誤去學(xué)習(xí)。錯(cuò)誤不是罪過(guò),沒(méi)有從錯(cuò)誤中學(xué)到什么那才是罪過(guò)。
3 閱讀解決問(wèn)題的有關(guān)方法。解決問(wèn)題是軟件開(kāi)發(fā)過(guò)程核心的活動(dòng)。一個(gè)奇怪的現(xiàn)象:人們通常不能從自己面臨的問(wèn)題找出解決的方法,即使這個(gè)方法很簡(jiǎn)單。
4 行動(dòng)前先做好分析和設(shè)計(jì)。盡管實(shí)踐和分析設(shè)計(jì)過(guò)程有很大的矛盾,但是好的分析會(huì)避免讓你過(guò)早走向一個(gè)錯(cuò)誤的方向,好的設(shè)計(jì)可以避免混亂。
5 學(xué)習(xí)成功或失敗項(xiàng)目的開(kāi)發(fā)經(jīng)驗(yàn)。學(xué)習(xí)編程的好方法是向一些優(yōu)秀的程序員學(xué)習(xí)。應(yīng)該要注重項(xiàng)目的戰(zhàn)略思想,把握項(xiàng)目中解決關(guān)鍵難點(diǎn)的戰(zhàn)術(shù)。任何成熟的科學(xué),都是通過(guò)解決問(wèn)題發(fā)展起來(lái)的。這些問(wèn)題通常被看一些被良好解決的例子,并可為將來(lái)工作做指導(dǎo)。(這可能也是目前很多公司注重工作經(jīng)驗(yàn)的原因吧?)我們應(yīng)該努力對(duì)別人工作存在的問(wèn)題做研究,學(xué)習(xí)別人的無(wú)論成敗的解決辦法都是很有意義的。多拿自己的代碼和比你優(yōu)秀人的代碼做比較,看看你們間有什么異同?為什么會(huì)有這樣的差異?誰(shuí)的更好?為什么?也要多讓自己的代碼讓別人評(píng)價(jià),這樣可以提高自己的程序質(zhì)量。
6 閱讀手冊(cè),書(shū)籍和期刊。手冊(cè)中往往對(duì)帶有些可以直接調(diào)用的子程序,這對(duì)我們研究和解決具體問(wèn)題有很大幫助。書(shū)籍中往往是介紹系統(tǒng)理論,多閱讀可以提高專業(yè)能力;期刊中常常包含著流行的技術(shù)和觀點(diǎn)可以開(kāi)闊眼界。
3. 誠(chéng)實(shí)
編程生涯成熟的部分標(biāo)志是堅(jiān)持誠(chéng)實(shí)。通常是:不假裝自己是高手、樂(lè)于承認(rèn)錯(cuò)誤、尊重編譯器的警告、對(duì)程序有清晰的了解,而不是編譯看其是否有錯(cuò)、提高實(shí)際狀態(tài)報(bào)告、提供實(shí)際方案評(píng)估,在上級(jí)面前堅(jiān)持自己的意見(jiàn)。你最好假裝自己知之甚少,聽(tīng)別人的解釋,向他們學(xué)習(xí),并且評(píng)估他們是否了解其正在討論的東西:)
你應(yīng)該對(duì)自己能力做某種程度評(píng)估,認(rèn)為自己完美是一個(gè)不妙的信號(hào)。錯(cuò)誤正如潮流一樣是一個(gè)復(fù)雜的活動(dòng),如果你過(guò)去沒(méi)犯過(guò)錯(cuò)誤,那么沒(méi)有人會(huì)將錯(cuò)誤歸咎于你。所以正視自己的錯(cuò)誤。當(dāng)你并不了解程序時(shí),編譯運(yùn)行并不是解決問(wèn)題的方法。測(cè)試是證明錯(cuò)誤的存在,而不是保證沒(méi)有錯(cuò)誤。如果不能深入理解程序,就不能深入測(cè)試。依據(jù)事實(shí)給出準(zhǔn)確的狀態(tài)報(bào)告,不能欺騙自己和別人,這是充分合作的前提。不能因?yàn)閴毫Χ穸ǚ弦?guī)律的做法——這個(gè)項(xiàng)目需要10人月,要用5人月完成除非降低性能或其他做法——準(zhǔn)確的向上司說(shuō)明情況。
4. 交流與合作
真正優(yōu)秀的程序員應(yīng)學(xué)會(huì)怎樣和別人工作和娛樂(lè)。真正閱讀你寫(xiě)出的程序是人,而不是給計(jì)算機(jī)——注意代碼的可讀性。絕多數(shù)高水平的程序員堅(jiān)持自己代碼的可讀性,并抽出充足時(shí)間這么做。對(duì)程序員能力的界定標(biāo)準(zhǔn):
1 初學(xué)者
是能使用一種語(yǔ)言基本能力的程序員,他能使用子程序、循環(huán)、條件語(yǔ)句或其他許多語(yǔ)言特征。
2 中間者
有使用許多語(yǔ)言的能力,并且至少非常熟悉某一種語(yǔ)言。
3 專家
對(duì)其語(yǔ)言或環(huán)境或這二者有很深的造詣。這種級(jí)別的程序員對(duì)公司是有價(jià)值的,而且有些程序員往往就停留在這個(gè)水平上。
4 大師
有著專家那樣的專業(yè)知識(shí),并且意識(shí)到編程只是15%和計(jì)算機(jī)交流,其余85%是和人打交道。一般程序員只有30%時(shí)間或更少。而且大師注重給人看的清晰易懂的代碼,并注意建立有關(guān)文檔。
不強(qiáng)調(diào)可讀性的高水平代碼者可能停留在級(jí)別3上面。并且根據(jù)經(jīng)驗(yàn),編寫(xiě)不可讀代碼的主要原因是:代碼質(zhì)量差或是編寫(xiě)者自己并不能完整地理解自己的代碼。當(dāng)你知道自己的水平后,不必內(nèi)疚和自愧。在你知道如何提高水平后,你倒應(yīng)該為自己停留在初學(xué)者或?qū)<宜缴嫌卸嚅L(zhǎng)時(shí)間而內(nèi)疚。
5. 創(chuàng)造力和紀(jì)律
雖然一些有創(chuàng)造力的程序員將各種標(biāo)準(zhǔn)和約定視為對(duì)其創(chuàng)造力的阻礙,但是沒(méi)有這些約束項(xiàng)目實(shí)現(xiàn)是不可能的。不要在無(wú)關(guān)緊要的領(lǐng)域建立約定,應(yīng)該在值得的地方發(fā)揮你的創(chuàng)造力。一個(gè)杰出的程序員需要遵守許多規(guī)則。如果編碼之前不分析需求就設(shè)計(jì),那么你就學(xué)不到項(xiàng)目的許多東西,那樣工作就像小孩畫(huà)畫(huà)而不是藝術(shù)品。
6. 懶惰
懶惰的三種形式:1 拖延自己討厭的工作 2 迅速解決討厭的任務(wù)以擺脫任務(wù) 3 寫(xiě)一個(gè)工具來(lái)完成討厭的工作解脫自己。當(dāng)你不是透過(guò)玻璃看問(wèn)題的時(shí)候,你就看到了懶惰的另一方面!摆s著做”是一種多余和沒(méi)有必要的“努力”。有效的工作最重要的現(xiàn)象是人們?cè)谒伎挤N往往顯得冷靜而不忙。一個(gè)一直很忙碌的程序員不是好程序員,因?yàn)樗⒉皇窃谑褂脤?duì)于他來(lái)說(shuō)最有價(jià)值的工具和頭腦。
7. 并不是你想象中起作用的性格
堅(jiān)持:這是一筆財(cái)富也是不利的條件。你可以稱它為頑固或者堅(jiān)強(qiáng),這完全取決于應(yīng)用它的場(chǎng)合。在多數(shù)情況下,軟件開(kāi)發(fā)的“堅(jiān)持”就是頑固的意思!當(dāng)你遇到新問(wèn)題時(shí)候,你再固執(zhí)己見(jiàn)并不是好事。你應(yīng)該迅速適應(yīng)它,或原方案并不起作用時(shí),學(xué)會(huì)用另一種解決方法。調(diào)試中,當(dāng)你發(fā)現(xiàn)一個(gè)困擾你4個(gè)小時(shí)之久的錯(cuò)誤時(shí),你一定感到非常滿意。但是實(shí)際上,如果你在一段時(shí)間——通常為15分鐘沒(méi)有取得任何進(jìn)展時(shí),你應(yīng)該放棄找錯(cuò)。用你的潛意識(shí)去思考問(wèn)題,嘗試用別的方法解決問(wèn)題,甚至重寫(xiě)厭煩的代碼段。和計(jì)算機(jī)錯(cuò)誤做斗爭(zhēng)時(shí)不明智的,你應(yīng)該盡量避免它們。知道在時(shí)候需要放棄時(shí)困難的,但是必須面對(duì)一個(gè)問(wèn)題:當(dāng)你覺(jué)得自己受挫折時(shí),是否考慮嘗試其他不同的方法。
經(jīng)驗(yàn):過(guò)于依賴經(jīng)驗(yàn)會(huì)導(dǎo)致知識(shí)的落伍。今天的經(jīng)驗(yàn)必須為明天的工作服務(wù)。如果不在過(guò)去經(jīng)驗(yàn)中去歸納總結(jié)出一些有價(jià)值的原則或規(guī)律并改變自己去適應(yīng)它們,那么經(jīng)驗(yàn)也將一文不值。如果你的經(jīng)驗(yàn)還是停留在上一次戰(zhàn)斗而不是下一次,也不因時(shí)間做出應(yīng)變,那么經(jīng)驗(yàn)更像是一個(gè)阻礙。此外,錯(cuò)誤的經(jīng)驗(yàn)往往得不到客觀的評(píng)價(jià)。錯(cuò)誤的經(jīng)驗(yàn)可以讓你得出重要的不同結(jié)論,學(xué)習(xí)其他人的錯(cuò)誤經(jīng)驗(yàn)是一個(gè)好方法——你更可以對(duì)它做客觀的檢查。其他領(lǐng)域有成功經(jīng)驗(yàn)的專業(yè)人員往往使人放心,而在軟件開(kāi)發(fā)中,知識(shí)更新迅速使得此領(lǐng)域中“經(jīng)驗(yàn)”處于一個(gè)奇怪的地位。為了使自己有所價(jià)值,你必須緊跟潮流,對(duì)于年輕求知欲旺盛的程序員在這點(diǎn)有優(yōu)勢(shì),而有些年老的程序員認(rèn)為自己有所資格而厭倦一年接一年都要證實(shí)自己的能力。如果你已工作了10年,你得到了10年的經(jīng)驗(yàn)未必是真正的經(jīng)驗(yàn)——你如果堅(jiān)持不斷地學(xué)習(xí),你就能得到經(jīng)驗(yàn),但如果你并不想學(xué)到什么,不管多少年你也學(xué)不到什么。
編程狂:如果你還沒(méi)有至少在一個(gè)相同的項(xiàng)目上花費(fèi)一個(gè)月的時(shí)間——一天工作 16 個(gè)小時(shí);為了發(fā)現(xiàn)你的程序中最后一個(gè)錯(cuò)誤睡眠中你也念念不忘它,你接連幾天沒(méi)日沒(méi)夜地工作——即使你所編的程序并不復(fù)雜,那么你可能不會(huì)意識(shí)到編程中有某種令人興奮的東西。 Edward Yourdon
這種對(duì)編程的癡迷純粹是胡鬧,并且?guī)缀踝⒍ㄒ。但是那些通宵程序員使你覺(jué)得他們是世界上最好的程序員,但是隨后你不得不花費(fèi)幾周的時(shí)間來(lái)修正你在這短時(shí)間的輝煌中所帶來(lái)的錯(cuò)誤,你可能對(duì)編程非常熱愛(ài),但是你應(yīng)能冷靜地處理這個(gè)問(wèn)題。
8. 習(xí)慣
好的習(xí)慣起作用是由于你為一個(gè)程序員所作的大部分事情是你在無(wú)意識(shí)中所完成的。成為某方面好的或差的程序員,主要是靠你自己的所作所為。你所作所為習(xí)慣,決定了你的編程品行。最終,你的習(xí)慣好壞決定了你是否能成為一位好的程序員。當(dāng)你開(kāi)始學(xué)習(xí)某一件事時(shí),你應(yīng)按正確的方式學(xué)好它。當(dāng)你開(kāi)始學(xué)時(shí),你已對(duì)其進(jìn)行了思考,并且你可在正確或錯(cuò)誤的途徑間作出輕易的選擇。在你作過(guò)一段時(shí)間后,你對(duì)你所作的不太注意,此時(shí)“習(xí)慣的力量”會(huì)開(kāi)始起作用。確保起作用的習(xí)慣是你所希望的。
|
|