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