計(jì)算機(jī)行業(yè)中無(wú)疑程序員的薪資待遇是極高的,每年都有大量的人投身軟件編程行業(yè),成為一名程序員。
1、缺少必要的注釋
大段的iF-else缺少注釋,讓維護(hù)者沒(méi)有辦法快速分辨分支邏輯。特定地方存在hack或復(fù)雜邏輯的代碼,缺少注釋會(huì)讓后面得人不明是什么原因。為了你好,也為了后來(lái)者好,請(qǐng)務(wù)必加上代碼。
2、不變和變化的部分拆分
程序員中流傳著一句話,此處不要寫死,將來(lái)必改。有經(jīng)驗(yàn)的程序員會(huì)將一些業(yè)務(wù)層的邏輯抽象出來(lái),寫成配置文件,好處就是如果后續(xù)需求有改變,只需改配置文件即可,肯定不會(huì)引入bug。

3、忽視測(cè)試部分
沒(méi)有測(cè)試的代碼等于沒(méi)寫,雖不敢全部贊同,卻也有幾分道理。從測(cè)試用例驅(qū)動(dòng)開(kāi)發(fā),持續(xù)集成,每次編譯自動(dòng)跑測(cè)試用例,能夠保證系統(tǒng)的穩(wěn)定同時(shí)也減輕測(cè)試成本。
4、直接操作數(shù)據(jù)
你應(yīng)該通過(guò)方法去操作數(shù)據(jù),而不是直接操作數(shù)據(jù),這樣能夠保證你總能操作數(shù)據(jù)正確。例如一個(gè)類中定義的屬性發(fā)生變化了,代碼中所有涉及到直接操作該屬性的代碼都需要修改。如果通過(guò)方法操作該屬性,則僅需修改操作方法,對(duì)于外部調(diào)用者,類屬性變化被屏蔽了,遵循了解耦的原則,代碼穩(wěn)定性大大提高。
5、沒(méi)有明確的職業(yè)目標(biāo)
沒(méi)有目標(biāo)的人生,就像無(wú)根的浮萍,水流到哪里就飄到哪里,一生漂泊。
如果你想要在軟件開(kāi)發(fā)領(lǐng)域獲得真正的成功,那么就必須知道該何去何從。或許面對(duì)遙遠(yuǎn)的未來(lái),你已經(jīng)有了一個(gè)粗略的目標(biāo)了。但是除了這點(diǎn)還不夠,你應(yīng)當(dāng)堅(jiān)實(shí)自己的目標(biāo)——清楚的定義在實(shí)現(xiàn)過(guò)程中的每個(gè)重要時(shí)間點(diǎn)所需要達(dá)到的效果。
我認(rèn)識(shí)許多程序員和其它方面的專業(yè)人士,數(shù)十年來(lái)他們都在相同的職位上反復(fù)地做著同樣的事情。是的,你沒(méi)有看錯(cuò),是數(shù)十年。接受職業(yè)現(xiàn)狀,不做任何改變,是造成這種悲劇的根源。對(duì)于未來(lái),如果你沒(méi)有明確的職業(yè)規(guī)劃,這樣的悲劇就很可能會(huì)發(fā)生在你身上。
6、不重視“軟技能”或非技術(shù)的東西
我認(rèn)識(shí)許多擅長(zhǎng)寫代碼的程序員,他們可以用所寫的算法把我耍得團(tuán)團(tuán)轉(zhuǎn),他們對(duì)復(fù)雜架構(gòu)的理解力和思考能力令我自愧不如。
但是真實(shí)的狀況卻是:技術(shù)不如他們的我,軟件開(kāi)發(fā)領(lǐng)域的職業(yè)發(fā)展卻全面超過(guò)了他們,除了職位,還包括薪水、生產(chǎn)力等諸多方面。
在這里我并不是為了吹噓自己多了不起,而是為了向那些只埋頭專研技術(shù)的程序員們說(shuō)明“軟技能”對(duì)于職業(yè)發(fā)展有多重要。
7、不融入社區(qū)生活
在程序員生涯中有一樣?xùn)|西令我受益頗深,它就是社區(qū)的幫助。成為這個(gè)大群體的一部分,不僅讓我擁有了歸屬感不再孤獨(dú),也幫助我改進(jìn)了自身的技能,向著更高的平臺(tái)發(fā)展。
如果你還沒(méi)有參與社區(qū)生活的話,我強(qiáng)烈建議你融入這個(gè)圈子里來(lái)。它是一個(gè)比自我寬廣得多的平臺(tái),有助于你的發(fā)展。
8、使用全局變量
話說(shuō)回來(lái),有的編程語(yǔ)言是完全沒(méi)有局部變量這個(gè)概念的,所以不得不使用全局變量。關(guān)于全局變量,雖然我們可以在子函數(shù)中使用它,但是卻沒(méi)辦法聲明這一變量只能在該函數(shù)中使用。盡管如此,全局變量依然非常受歡迎,因?yàn)槲覀冎恍杪暶饕淮危纯傻教幨褂茫r(shí)省力了有木有。
但是它的優(yōu)點(diǎn)也是它的缺陷,這也是關(guān)于全局變量最糟糕的事情——我們沒(méi)有辦法控制它的改變,也沒(méi)辦法控制何時(shí)去訪問(wèn)變量。假設(shè)某個(gè)全局變量在調(diào)用到程序之前賦予了一個(gè)特定的值,但是很可能調(diào)用完了之后值就變了,而你卻毫無(wú)察覺(jué)。
9、不進(jìn)行評(píng)估
你的目標(biāo)是寫一個(gè)應(yīng)用程序,你斗志昂揚(yáng),愈戰(zhàn)愈勇。但是突然間,你發(fā)現(xiàn)了性能問(wèn)題和內(nèi)存不足的問(wèn)題。
進(jìn)一步的調(diào)查表明,盡管你的設(shè)計(jì)對(duì)于現(xiàn)在這樣小型的用戶數(shù)量、記錄、條目運(yùn)行良好,但是卻不適合大規(guī)模的情況——Twitter就是例子。又或者它現(xiàn)在在你的8GB RAM和SSD的3GHz PC上運(yùn)行順暢,但一旦到普通的PC上,它會(huì)比烏龜爬還要慢吞吞。
10、大小差一錯(cuò)誤(數(shù)組邊界溢出)
這個(gè)錯(cuò)誤基本上每一個(gè)程序員都犯過(guò),通常在寫循環(huán)的時(shí)候,由于循環(huán)變量的步長(zhǎng)增加過(guò)多或過(guò)少,導(dǎo)致循環(huán)遍歷元素的次數(shù)發(fā)生錯(cuò)誤,產(chǎn)生數(shù)組溢出的異常。
這個(gè)錯(cuò)誤會(huì)導(dǎo)致遍歷數(shù)組元素時(shí)訪問(wèn)不存在的元素,或者遺漏應(yīng)該遍歷的元素。產(chǎn)生這個(gè)錯(cuò)誤的原因就是你忘記了數(shù)組下標(biāo)是從0開(kāi)始還是從1開(kāi)始了。
不要硬記代碼
很多畢業(yè)新生會(huì)去背一些常見(jiàn)問(wèn)題的答案。好比很多程序員都知道如何“用C中的位運(yùn)算來(lái)交換兩數(shù)”。但并不是所有人都知道那段代碼真正做了些什么,又是如何完成這項(xiàng)任務(wù)的。
死記硬背并不是C編程面試的捷徑。即便你僥幸答對(duì)了一兩題,如果不了解基礎(chǔ)概念還是無(wú)法通過(guò)整個(gè)面試。關(guān)鍵要了解編程背后的概念。重點(diǎn)并不在于你知道多少種語(yǔ)言,而在于你有多了解這些語(yǔ)言。
|