全國咨詢(xún)熱線(xiàn):400-009-1906

首頁(yè)>學(xué)員故事>python新手如何度過(guò)小白期,不再當菜鳥(niǎo)程序員?

python新手如何度過(guò)小白期,不再當菜鳥(niǎo)程序員?

來(lái)源:尚學(xué)堂      閱讀數:9873

大家好,雖不是行業(yè)大牛找個(gè)機會(huì )和大家隨便聊聊。我這次不寫(xiě)那些方法論或者是感受的東西,這些可能大家get不到,也未必喜歡。這次寫(xiě)一點(diǎn)實(shí)際的,只要照著(zhù)做,基本上不會(huì )被認為是個(gè)菜鳥(niǎo),在職場(chǎng)當中也不會(huì )踩雷。

 

相信小習慣的力量

 

python菜鳥(niǎo)和大牛的區別除了寫(xiě)代碼、debug的核心能力差距之外,另外一個(gè)很大的差別就是在習慣上。大牛經(jīng)過(guò)摸爬滾打練出了一系列優(yōu)良的習慣,而菜鳥(niǎo)好習慣還沒(méi)養成,壞習慣有了一堆。所以身為菜鳥(niǎo)的時(shí)候一定要有規范和習慣意識,養成好習慣,去掉壞習慣讓自己越來(lái)越習慣寫(xiě)出優(yōu)質(zhì)的代碼。

 

關(guān)于習慣仁者見(jiàn)仁,每個(gè)人也都有自己的習慣。我簡(jiǎn)單提幾個(gè),給大家拋磚引玉。

 

1.一個(gè)函數只做一件事

 

如果有一天你接手了另外一個(gè)同事的代碼,發(fā)現他有一個(gè)函數里面裝了三千行代碼,你會(huì )是什么感受?

 

這是我親身的經(jīng)歷,我當時(shí)看到代碼的第一反應就是把這個(gè)人揪出來(lái)暴打一頓。代碼和其他文本信息不同,越擁擠可讀性越差。優(yōu)質(zhì)的代碼和優(yōu)質(zhì)的文章很像,結構清晰、層次分明、表達準確。一個(gè)函數里面裝幾千行代碼顯然是老太太的裹腳布——又臭又長(cháng)。

 

對于一個(gè)函數里究竟應該寫(xiě)多少代碼,每個(gè)人有不同的理解。實(shí)際上我們也沒(méi)必要硬扣,遵守一個(gè)簡(jiǎn)單的原則即可——一個(gè)函數只做一件事。舉個(gè)簡(jiǎn)單的例子,假設我們要從上游讀一批數據,然后畫(huà)出某一個(gè)函數作用之后的結果。我們簡(jiǎn)單分析一下,表面上是畫(huà)圖這一件事情,但是這一件事情當中其實(shí)包含了好幾個(gè)步驟,比如說(shuō)從上游獲取數據,獲得函數作用的結果,最后才是畫(huà)圖。那么我們完全可以拆分成三個(gè)函數,一個(gè)函數獲取數據,一個(gè)函數獲取結果,一個(gè)函數畫(huà)圖。

 

這樣別人以及以后的自己看這段代碼就會(huì )非常清楚,每個(gè)函數做了什么一目了然。假如有一天老板無(wú)意間翻了大家的代碼,別人的代碼一個(gè)函數里裝了幾千行,你的代碼層次分明,每個(gè)函數做什么都一目了然,你說(shuō)老板會(huì )怎么想?

 

2.起長(cháng)一點(diǎn)的變量名

 

新手一個(gè)很大的問(wèn)題就是總喜歡起很短的變量名,像是a,b,c,d?;蛘呤鞘裁碽d,aa什么的,看起來(lái)非常難看,可讀性也很差。之前有幾個(gè)同學(xué)找我幫他們看代碼,給的都是這種代碼,看起來(lái)感覺(jué)眼睛都被針扎了……

 

吐槽歸吐槽,老實(shí)說(shuō)我在之前打acm的時(shí)候也是喜歡短變量名,雖然不至于這么夸張,但一般一個(gè)變量名也不會(huì )很長(cháng)。當然這是由于當時(shí)比賽的需要,大家爭分奪秒,別人一個(gè)變量名叫btn,你叫binary_tree_node,很顯然拼敲代碼的速度你一定輸。

 

但問(wèn)題是后來(lái)畢業(yè)了之后我也一直保留這樣的風(fēng)格,不出意外地遭到了老板和同事的毒打。大家都表示不喜歡我這樣的代碼風(fēng)格,我當時(shí)還堅持,覺(jué)得是自己代碼能力的體現。后來(lái)去讀了一下一些大牛的代碼,嘗試換了一種風(fēng)格之后,發(fā)現真香了。雖然寫(xiě)起來(lái)的時(shí)候麻煩了一點(diǎn)(其實(shí)也還好,現在有各種代碼補全功能),但是讀起來(lái)是真的很舒服,思路也清楚了很多。所以如果你現在的代碼不是這種風(fēng)格的話(huà),請一定嘗試改一下,對自己對其他人都好。

 

另外一點(diǎn)是我們起名的時(shí)候可以是不規范的英文,哪怕不太準確也沒(méi)問(wèn)題,但一定一定不要用拼音。類(lèi)似用:fenbianlv等作為代碼。

 

拼音閱讀起來(lái)比半通不通的英文還要費勁,而且用拼音做變量或者是函數名是一件非常非常low的事情,絕對會(huì )讓對方對你的能力產(chǎn)生懷疑。市面上也有一些幫助起名的插件,有這方面需求的同學(xué)請務(wù)必去了解一下。

 

3.遵守代碼規范

 

在新手的意識里可能沒(méi)有代碼規范這個(gè)詞,但是這個(gè)確實(shí)是從新手走向進(jìn)階的必經(jīng)之路。

 

不同的語(yǔ)言的規范是不同的,比如說(shuō)Java和go當中流行駝峰命名法,所有變量都是駝峰的。而Python可能只有類(lèi)名是駝峰的,普通變量和包名傾向于全小寫(xiě)用下劃線(xiàn)分割。當然代碼規范并不僅僅是命名規范而已,還有很多很多的規范。比如中間件的使用規范、多線(xiàn)程的開(kāi)發(fā)規范、數據庫的使用規范等等。

 

為什么我們要遵守這些規范?因為我們的開(kāi)發(fā)工作并不是實(shí)現功能就完事了,以后還需要拓展和維護。遵守規范不僅可以不給以后的自己以及他人埋雷,更重要的是可以讓自己的代碼質(zhì)量更高,更加專(zhuān)業(yè)。而且一些規范當中往往是藏著(zhù)道理的,為什么套接字、線(xiàn)程以及數據庫連接都需要維護一個(gè)“池”?這里面肯定是有門(mén)道的,不然為什么大家不怎么簡(jiǎn)單怎么來(lái)?我們在遵守這些規范的時(shí)候也能便于我們更好地理解各個(gè)場(chǎng)景當中的原理以及細節,這也是技術(shù)實(shí)力的一部分。

 

當然我們一開(kāi)始未必能做得很好,但代碼規范并不是很困難的事情,從我們有這個(gè)意識到做到遵守規范并不需要很多時(shí)間,但是帶來(lái)的收益卻是非常豐厚的。之前在前公司,有聽(tīng)說(shuō)過(guò)過(guò)因為代碼風(fēng)格太差被老板給了差績(jì)效的事情,我覺(jué)得挺冤枉的,可能就是一時(shí)疏忽給老板留下了差印象,如果當時(shí)寫(xiě)代碼的時(shí)候能注意一點(diǎn),完全可以避免,代碼有些太大了。

 

會(huì )用不等于懂了

 

如果你是應屆生,那么當你畢業(yè)進(jìn)入職場(chǎng),你必然會(huì )面臨一個(gè)適應的問(wèn)題。別的我們不提,單單只說(shuō)技術(shù)方面。我們勢必需要快速學(xué)習一些我們之前沒(méi)有見(jiàn)過(guò)或者是不了解的技術(shù),來(lái)應付工作當中的任務(wù)以及挑戰。

 

這個(gè)是非常正常的,我想絕大多數程序員在剛畢業(yè)的時(shí)候都經(jīng)歷過(guò),我自己也不例外。剛畢業(yè)的幾個(gè)月是最辛苦的,我們需要承擔很大的壓力,對于轉變之后的生活也不是完全適應。但當幾個(gè)月過(guò)去,我們適應了生活,學(xué)會(huì )了一些基本的技能可以應付或者說(shuō)勝任當下的工作之后,一個(gè)潛在的陷阱就到來(lái)了。

 

有一些人會(huì )不知不覺(jué)地停止學(xué)習,因為他已經(jīng)足夠應付工作了。在工作當中他會(huì )有一種在這個(gè)領(lǐng)域我當下會(huì )的技能已經(jīng)足夠了的錯覺(jué),有些人甚至會(huì )因此覺(jué)得其他資歷更深的同事也不過(guò)如此,似乎并沒(méi)有比自己多會(huì )多少東西。我當初就是這樣,因為我發(fā)現我工作當中用到的東西玩的非常溜,用起來(lái)得心應手。我一度有些膨脹,覺(jué)得自己已經(jīng)算是一個(gè)經(jīng)驗豐富的程序員了。直到后來(lái)有一次面試,被問(wèn)到了一個(gè)常用的工具的技術(shù)細節,我張口結舌一句話(huà)也說(shuō)不上來(lái),我才發(fā)現,自己知道的只是皮毛而已,甚至連皮毛都算不上。

 

當然我們工作當中對很多技術(shù)的要求都只是會(huì )用,你會(huì )用就夠了,這并沒(méi)有問(wèn)題。我也并不覺(jué)得每一門(mén)我們用到的技術(shù)都需要去刨根究底,但我們需要對我們的實(shí)力有清醒的認識,哪些是勉強會(huì )用的?哪些是真正了解掌握的?哪些是需要掌握但是只是勉強會(huì )用的?

 

能夠想明白這些問(wèn)題可以讓我們保持一個(gè)清醒的頭腦,對自己的當下的處境以及長(cháng)遠的發(fā)展目標都會(huì )有一個(gè)清楚的認識。

 

積累知識而不僅是經(jīng)驗

 

新手或者是小白有一個(gè)特點(diǎn)就是往往更加依賴(lài)經(jīng)驗而不是知識,舉個(gè)例子吧。比如新手后端經(jīng)常遇到的問(wèn)題之一就是maven package失敗,很多人解沖突的辦法就是mvn clean & mvn install。也就是清空重新建立,因為大部分情況下這個(gè)命令可以解決問(wèn)題。所以很多新手就記住了這個(gè)命令,每次遇到maven失敗就這么來(lái)一次。

 

如果這個(gè)命令解決不了呢?這些人可能會(huì )換個(gè)命令試試。如果常用的解決問(wèn)題的命令都試過(guò)了還是不行呢?這些人可能就僵住了,覺(jué)得這個(gè)問(wèn)題解決不了了,得請大牛來(lái)看了。

 

這里的核心問(wèn)題是新手積累的是經(jīng)驗而不是知識,他們只是簡(jiǎn)單機械地把出現的問(wèn)題和解決方法做映射而已,并不是從原理和核心層面理解問(wèn)題出現以及解決方案生效的原因。那么帶來(lái)的結果就是,積累到的只是經(jīng)驗,下次能解決問(wèn)題不是因為學(xué)會(huì )了問(wèn)題的解決方法,也不是理解了這一塊技術(shù)內容,只是單純地記住了而已。這顯然也是一種偽成長(cháng)。

 

其實(shí)我之前也遇到過(guò)這樣的問(wèn)題,雖然我每次都有意識遇到問(wèn)題記錄下解決的辦法,這樣下次就可以不用請教別人了。然而雖然我記錄的問(wèn)題越來(lái)越多,但是每次遇到新的問(wèn)題還是解決不了,需要請教別人。直到有一天,被我問(wèn)的大牛露出了不耐煩的神情,才讓我下定決心自己學(xué)會(huì )解決問(wèn)題。

 

于是我不再是頭痛醫頭腳痛醫腳地解決問(wèn)題,而是去學(xué)習了一下問(wèn)題背后的原理和機制,再從報錯日志上分析錯誤產(chǎn)生的原因,思考解決方案,最終徹底學(xué)會(huì )了解決這一類(lèi)問(wèn)題的方法。之后不但能夠自己獨立解決問(wèn)題,而且還可以去幫助別人了。我后來(lái)回過(guò)頭來(lái)想想,如果我第一次遇到問(wèn)題的時(shí)候就自己嘗試去學(xué)習其中的機制,而不只是記住解決方法,應該可以做得更好。

 

少說(shuō)廢話(huà),多寫(xiě)代碼

 

著(zhù)名的Linux之父Linus有一句名言:talk is cheap show me the code。翻譯過(guò)來(lái)就是廢話(huà)少說(shuō),代碼拿來(lái)。我覺(jué)得這句話(huà)非常符合這一行的精髓,我們不是靠嘴皮子吃飯的,而是靠實(shí)實(shí)在在的產(chǎn)出,這個(gè)產(chǎn)出最終是要落實(shí)到代碼上的。作為一個(gè)新人,可能我們會(huì )有這樣的問(wèn)題,那樣的困惑。然而這許多的問(wèn)題和困惑我們光想是沒(méi)用的,只能用硬實(shí)力來(lái)解決。

 

著(zhù)名的C語(yǔ)言作者譚浩強也有一句名言:新手學(xué)編程最應該做的事情就是寫(xiě)滿(mǎn)一萬(wàn)行可以運行的代碼,之后你就自然入門(mén)了。道理其實(shí)也是一樣的,少說(shuō)廢話(huà),多做實(shí)事。多做多練,實(shí)力自然不會(huì )差??障氪当剖浅刹涣舜笈5?。所以如果你猶豫想要學(xué)習一門(mén)新的領(lǐng)域,但是不知道從何做起的時(shí)候,不妨想想這句話(huà),別管它三七二十一,先搞起來(lái)寫(xiě)起代碼來(lái)再說(shuō)。搞著(zhù)搞著(zhù),你自然就明白后面應該怎么做了。

 

以上就是我自己積累的一些思考和想法,如果你是一個(gè)小白的話(huà),希望它能夠幫助你順利度過(guò)新手期,向著(zhù)大牛的目標進(jìn)發(fā)。