軟件開(kāi)發(fā)10年學(xué)會(huì)的一些東西
不要只會(huì)一種語(yǔ)言
很多人對(duì)于一門編程語(yǔ)言的喜愛(ài)程度往往超過(guò)他們自己的認(rèn)知,有時(shí)候,他們會(huì)用一門編程語(yǔ)言來(lái)解決所有問(wèn)題,然而現(xiàn)實(shí)世界中,每個(gè)語(yǔ)言都有自己的最佳應(yīng)用場(chǎng)景。
我們都聽(tīng)過(guò)這樣一句話,當(dāng)你手中有一個(gè)錘子,你看什么都像釘子。當(dāng)你只會(huì)一種語(yǔ)言的時(shí)候,你的思維往往也被局限了,而這是會(huì)影響你的編程思維的。
vim永遠(yuǎn)都值得你學(xué)的編輯器
對(duì)于編輯器之前我并沒(méi)有特殊喜好,我用過(guò)ide,也用過(guò)sublime,atom,vscode,然而最后我還是更喜歡使用vim。
每當(dāng)看到那些在vim下快速編程的大神們,你會(huì)感覺(jué)到編程原來(lái)可以如此拉風(fēng)。
我喜歡vim的速度,它能夠讓我的思想和編程速度相匹配,當(dāng)你的編程速度無(wú)法跟上思想的時(shí)候,你可以嘗試下vim,一旦你體會(huì)到它的精髓,一定會(huì)愛(ài)上它。
算法和數(shù)據(jù)結(jié)構(gòu)是你的基本功
在我高中的時(shí)候,我的化學(xué)老師就曾對(duì)我講過(guò),學(xué)習(xí)任何東西都要把基礎(chǔ)打牢,為了打好基礎(chǔ),你可能需要練習(xí)無(wú)數(shù)遍。
對(duì)于編程來(lái)說(shuō),算法和數(shù)據(jù)結(jié)構(gòu)就是我們的基本功。你需要時(shí)不時(shí)地就溫習(xí)它們?,F(xiàn)在很多面試者抱怨手寫(xiě)紅黑樹(shù)太難,然而這些都是作為一個(gè)程序員必備的基本功,就和相聲的報(bào)菜名一樣,你可能不需要每天練習(xí),但是無(wú)論何時(shí),當(dāng)你被問(wèn)起它的時(shí)候,你都能夠把它手寫(xiě)出來(lái)。
技術(shù)永遠(yuǎn)是解決問(wèn)題的
技術(shù)的發(fā)展永遠(yuǎn)伴隨著問(wèn)題的產(chǎn)生,正是一個(gè)個(gè)問(wèn)題的解決提升了技術(shù)的發(fā)展。
你永遠(yuǎn)不要抱怨問(wèn)題有多么難處理,技術(shù)就是為了解決問(wèn)題的。你可以抱怨需求的不合理性,但是永遠(yuǎn)記住,解決問(wèn)題才是你應(yīng)該去做的,而解決問(wèn)題的同時(shí),就是你能力提升的過(guò)程。
你還應(yīng)該記住,解決問(wèn)題的速度越快,越有利于產(chǎn)品的發(fā)展。
平衡優(yōu)化和速度
程序員對(duì)自己的代碼都有嚴(yán)格的潔癖,他們希望可以寫(xiě)出完美的代碼,然而現(xiàn)實(shí)中,沒(méi)有十全十美的代碼,只有bug百出的代碼。
很多人喜歡寫(xiě)出符合規(guī)范的代碼,喜歡通過(guò)tdd來(lái)驅(qū)動(dòng)開(kāi)發(fā)來(lái)減少錯(cuò)誤,然而現(xiàn)實(shí)中你會(huì)發(fā)現(xiàn),很多情況下為了開(kāi)發(fā)的進(jìn)度,所有的規(guī)范都可以被拋棄,唯一的規(guī)范就是在最短的時(shí)間完成產(chǎn)品的功能。
產(chǎn)品沒(méi)有完美,只有相對(duì)完美,我們也不可能一開(kāi)始就設(shè)計(jì)出或者寫(xiě)出相對(duì)完美的代碼,我們只能通過(guò)不斷完善才能讓代碼更優(yōu)。重構(gòu)和改進(jìn)是你可以提升代碼質(zhì)量的第二次機(jī)會(huì)。
項(xiàng)目進(jìn)度永遠(yuǎn)無(wú)法精準(zhǔn)評(píng)估
無(wú)論你是團(tuán)隊(duì)工作,還是你單打獨(dú)斗,你都無(wú)法精準(zhǔn)預(yù)測(cè)項(xiàng)目的最終進(jìn)度。
有些看似簡(jiǎn)單的問(wèn)題,但是卻可能產(chǎn)生意外的困擾,你可能需要花費(fèi)額外的精力來(lái)處理它。而有些你預(yù)測(cè)的困難問(wèn)題,可能比你實(shí)際想象的還要困難。
有時(shí)候你完成項(xiàng)目的90%,卻發(fā)現(xiàn)最后的10%卻花費(fèi)了你90%的時(shí)間。
軟件開(kāi)發(fā)中各種險(xiǎn)象環(huán)生,你需要時(shí)刻提高警惕,每一次順利完成項(xiàng)目你都要謝天謝地,因?yàn)槟阋呀?jīng)足夠幸運(yùn)。
當(dāng)你認(rèn)為可能產(chǎn)生問(wèn)題的地方一定會(huì)產(chǎn)生問(wèn)題
你是否有過(guò)這樣的經(jīng)歷,你認(rèn)為某個(gè)地方的代碼可能有問(wèn)題,但是測(cè)試的時(shí)候就是沒(méi)有發(fā)現(xiàn),當(dāng)你項(xiàng)目上線的時(shí)候,它就會(huì)完全暴露出來(lái)。
代碼正常運(yùn)行是最基本的要求,而bug也總是產(chǎn)生在意外的情況下。
沒(méi)有人可以考慮到所有可能發(fā)生的意外,我們只能總結(jié)前人留下的經(jīng)驗(yàn),避免犯那些重復(fù)的錯(cuò)誤。
總結(jié)
軟件開(kāi)發(fā)它是一種職業(yè),需要我們有工匠精神,專注,創(chuàng)新是我們需要時(shí)刻牢記的。
不斷學(xué)習(xí),十年磨一劍,記住,你寫(xiě)得最好的代碼永遠(yuǎn)是下一次。