當(dāng)你開始成為一個(gè)程序員的時(shí)候,在編程的時(shí)候很容易陷入下面所述的一些壞習(xí)慣。作為一名程序員,犯錯(cuò)誤不可避免,這是你學(xué)習(xí)編程課程中的一部分。在你的職業(yè)生涯中你會(huì)犯很多錯(cuò)誤 – 有的特別、有的普遍 – 通過這些錯(cuò)誤你可以學(xué)習(xí)如何避免在將來再犯同樣的錯(cuò)誤。
但是如果你是一個(gè)初學(xué)者,你犯的錯(cuò)誤可能會(huì)比其他人更頻繁。那么如何才能避免大部分程序員每天都犯的這些普遍的錯(cuò)誤呢?
想要避免錯(cuò)誤,就要對(duì)它有所了解。這也是為什么我要和大家分享一些在我們的程序員生涯中阻礙我們成長的普遍錯(cuò)誤。
在開始之前,你可能想知道為什么我知道這些是錯(cuò)誤,不是最佳的方法?
有一個(gè)簡單的回答就是 – 在我的職業(yè)生涯中,所有這些情況我都遇到過。有些情況經(jīng)常遇到,有些只遇到過幾次。每次犯錯(cuò)之后,我都后悔莫及。最壞的情況是我根本你不知道我在做錯(cuò)的東西。一旦我意識(shí)到我在做錯(cuò)事,我就開始避免這些失誤。至少,我現(xiàn)在寫的代碼比以前寫的要好多了。
現(xiàn)在你們也可以避免這些錯(cuò)誤。首先要知道你現(xiàn)在在做的是錯(cuò)誤的。我知道大部門程序員都不會(huì)做任何錯(cuò)事,因?yàn)樗麄冋J(rèn)為那是正確的,所以他們的行為會(huì)對(duì)程序和程序員的職業(yè)成長產(chǎn)生不利影響。
絕大部分的不良編程習(xí)慣都源于無知,而沒有任何其他原因。要成為一個(gè)好的程序員,我們必須一個(gè)一個(gè)的去掉這些無知。這也是那些好的編程書籍所盡力展示給我們的。
我們犯這些錯(cuò)誤的部分原因在于它們確實(shí)完成了工作。并不是我們要做的 – 讓我們的程序運(yùn)行起來,完成我們?nèi)粘5墓ぷ鳌?/p>
但是讓什么好用只是你工作的一部分。如果想要讓你的應(yīng)用程序好用,你將不得不定期更新,修復(fù)任何新的 bug,這些將有可能變得很頻繁。這樣一來能讓你的工作變得比較容易的方法就是遵循好的編程實(shí)踐。
另外,即使你在小型程序中能夠擺脫這些錯(cuò)誤,在大型程序中你也可能碰到他們。如果你仍然犯這些錯(cuò)誤,可能你的程序依然正常運(yùn)行,能夠完成需要的任務(wù),但是它會(huì)變得易出 bug,充滿低效率的代碼,難于維護(hù)。并且,當(dāng)你很長時(shí)間后再來看它的代碼的時(shí)候,你會(huì)發(fā)現(xiàn)代碼很難理解。
作為程序員,我們的工作不僅僅是讓我們的程序工作,而讓用戶來處理 bug。我們的工作是確保用戶即使輸入錯(cuò)誤也不會(huì)得到意外的結(jié)果。
所以要?jiǎng)?chuàng)建高品質(zhì)的應(yīng)用程序,請(qǐng)確保你不會(huì)在編程的時(shí)候犯下面的這些普遍的錯(cuò)誤:
不加理解的拷貝代碼
你經(jīng)常會(huì)發(fā)現(xiàn)你需要的代碼在一些別的程序里面有。整段的拷貝代碼并且就這么使用它而不去煩惱于理解每一行代碼是很誘人的。
有時(shí)候你拷貝的代碼可能太大了以至于沒有時(shí)間去完全理解它。如果你拷貝任何代碼都像這樣,就會(huì)有讓你的程序變得脆弱易出 bug 等風(fēng)險(xiǎn)。
這樣可能讓工作完成,但是如果這段代碼在某種情況下產(chǎn)生了一些意外的行為將會(huì)怎么樣?如果使你的程序變慢或者有惡意行為將會(huì)怎么樣?因此需要恰當(dāng)?shù)睦斫膺@些代碼,或者需要絕對(duì)的確信你拷貝的代碼的出處。
如果以后產(chǎn)生了 bug,你會(huì)發(fā)現(xiàn)很難理解這些代碼,因?yàn)槟銖膩頉]有寫過它。甚至于你會(huì)發(fā)現(xiàn)很難去找出 bug 并且修復(fù)它,特別是如果拷貝了很多代碼在程序的不同地方。
所以當(dāng)拷貝代碼的時(shí)候要小心,即使很少的代碼。確保你完全理解它了。如果你以前用過一段代碼并且可以百分之百的保證它可以工作,那么它是安全可用的。但是如果不是的話,就要當(dāng)心了。
每次都從頭開始
這和我之前說完全相反,但是這確實(shí)是初學(xué)者容易犯的另外一個(gè)錯(cuò)誤。
也許你認(rèn)為每次都從頭開始會(huì)很好,但是實(shí)際上它浪費(fèi)了太多資源–時(shí)間,精力和思維,你可以更好的在其他方面使用它們。
如果你需要的東西已經(jīng)存在了,那么使用它們。不要反復(fù)重復(fù)最基礎(chǔ)的東西。
你可以使用這些時(shí)間讓你的應(yīng)用在其他方面更加優(yōu)秀。
如果一個(gè) API、框架或者游戲引擎讓你的任務(wù)更加輕松,你沒有理由不使用它們。你的目標(biāo)不是展示你有多么的優(yōu)秀,也不是證明你可以獨(dú)立完成任何任務(wù)。你的目標(biāo)是保證你的應(yīng)用完美工作,并且盡可能少花費(fèi)一些資源去創(chuàng)造它們。
如果你這樣做,你可以用更少的時(shí)間去完成同樣地工作。時(shí)間就是金錢,即使是你為你自己工作,你也應(yīng)該試著在同樣的時(shí)間賺更多的錢。
沒自己嘗試就開始 Google
很多次,出于習(xí)慣,每次出現(xiàn)新的問題,你都會(huì)通過 Google 來找找解決方案。對(duì)于程序來說,這不是個(gè)好辦法。如果你總是沒有自己試一試就通過外部方法來搜索答案,那么你的思維永遠(yuǎn)都不會(huì)受到挑戰(zhàn)。
當(dāng)你的思維停止挑戰(zhàn),你自身的編程技能就會(huì)停止增長。把你自己的任何技能都練得很棒,你就可以自己解決問題,這也適用于程序開發(fā)。
你是創(chuàng)建一個(gè)已經(jīng)存在的東西,你從來不進(jìn)行原創(chuàng)。這真是你想要做的嗎?
搜尋存在的解決方案看起來很聰明,但是這會(huì)蒙蔽你的雙眼,你的懶惰會(huì)阻止你成為一個(gè)好的程序員。如果你真的你想要搜尋一個(gè)解決方案,至少,開始的時(shí)候你在這個(gè)問題上先花一點(diǎn)事件思考一下。
也許你自己不花多少事件就能解決掉它。也許你會(huì)有比其他人更好的解決它。也許你的解決方案比其他人的更加精確。
如果你不嘗試,你永遠(yuǎn)都不知道。
忽略警告
這是一個(gè)早期我進(jìn)行程序開發(fā)時(shí)犯的另一個(gè)錯(cuò)誤。我不能告訴你當(dāng)你的程序中出現(xiàn)幾百個(gè)警號(hào)和一次都不出現(xiàn)有什么大的不同-最重要的是忽略掉它就出現(xiàn)新的問題。
警告通常是你做的東西可能不是每次都能正常工作的一個(gè)標(biāo)志。有時(shí),忽略這些警告會(huì)造成很大的安全問題。但是真正的問題通常是出現(xiàn)在程序出現(xiàn)幾百個(gè)警告,或者程序不能正常工作時(shí)。
很難確定到底是什么原因造成了那個(gè)錯(cuò)誤,你必須花更很多的時(shí)間來分析每一個(gè)警告來找出造成問題發(fā)生的根本原因。相反,你可以在警告發(fā)生的時(shí)候就處理掉它。
通常你僅僅需要使用正確的變量或者正確的函數(shù)來處理這些警告。不會(huì)花你幾小時(shí),只需要幾分鐘遇到它們就把它們處理掉。
要盡早的處理警告。干凈的代碼看起來舒服工作起來也會(huì)很高。記住- 對(duì)待警告和對(duì)待錯(cuò)誤一樣 .
快速修復(fù)而不是永久性解決
是的,我對(duì)這樣做感到愧疚。我不為此而自豪。但通常,我們僅僅是草草的修復(fù)一下,很少會(huì)去從根本上解決這個(gè)問題。它能正常工作了,問題也處理掉了。但是如果你一不小心,問題又會(huì)以不同的方式重新出現(xiàn)。
無論你怎么修復(fù)一個(gè)問題,都應(yīng)確保你不會(huì)把整個(gè)系統(tǒng)破壞掉。修復(fù)應(yīng)該提升整個(gè)系統(tǒng)的運(yùn)行狀況,而不是讓它更慢或更笨重。
同時(shí),進(jìn)行一個(gè)修復(fù)要能永久性的解決這個(gè)問題。要長期,不要短期。有時(shí),由于懶惰和無知,我們通常喜歡快速的把問題解決掉,而不想在上面花太多時(shí)間。這就是為什么我們的寫的代碼能正常的工作,但是卻不是在所有情況下都能工作。
如果你在工作的時(shí)候把它忽略掉,你會(huì)在后面花更多的時(shí)間。
了解上面這些錯(cuò)誤能有助于你避免它們。如果你知道你所做的是錯(cuò)誤的,一般來說你就不會(huì)去做。為了把工作干好你應(yīng)該熱愛你所做的。如果因?yàn)槟承┰蚰悴幌矚g編程了那么你幾乎不會(huì)花額外的功夫來編寫好的可維護(hù)的程序。
如果你打算寫一手好程序那么你就應(yīng)該改變你對(duì)編程的看法。你要把編程看成一門藝術(shù)而你自己則是一個(gè)藝術(shù)家。那么你就不會(huì)因?yàn)閼卸韬筒恍⌒亩稿e(cuò)。
作家會(huì)把一篇未完成的文章發(fā)表么?畫家會(huì)把未完成的畫作拿來出售么?歌手會(huì)在他的歌中唱沒有用的歌詞么?
絕不會(huì)。
對(duì)編程來說也一樣。任何情況下,都別編寫未經(jīng)測(cè)試的半吊子代碼。在你的程序未寫完前,不要發(fā)布它。別編寫不會(huì)使用的無用代碼。這都是一些我們犯的一般性錯(cuò)誤,因?yàn)槲覀兿矚g在工作花更少的時(shí)間而去干其他事情。但這是不行的,遲早你都會(huì)為確保你的代碼不出問題而負(fù)責(zé)。
越早的練習(xí)正確的編程方法,就對(duì)你的用戶和自己越好。有時(shí)成為一個(gè)好的程序員意味著你不會(huì)犯糟糕程序員同樣的錯(cuò)誤。