尚學堂 老師好!

上海:15201841284

廣州:020-2989 6995

深圳:0755-23061965

武漢:027-8798 9193

西安:029-8822 8155

python新手如何度過小白期,不再當菜鳥程序員?

大家好,雖不是行業大牛找個機會和大家隨便聊聊。我這次不寫那些方法論或者是感受的東西,這些可能大家get不到,也未必喜歡。這次寫一點實際的,只要照著做,基本上不會被認為是個菜鳥,在職場當中也不會踩雷。

 

相信小習慣的力量

 

python菜鳥和大牛的區別除了寫代碼、debug的核心能力差距之外,另外一個很大的差別就是在習慣上。大牛經過摸爬滾打練出了一系列優良的習慣,而菜鳥好習慣還沒養成,壞習慣有了一堆。所以身為菜鳥的時候一定要有規范和習慣意識,養成好習慣,去掉壞習慣讓自己越來越習慣寫出優質的代碼。

 

關于習慣仁者見仁,每個人也都有自己的習慣。我簡單提幾個,給大家拋磚引玉。

 

1.一個函數只做一件事

 

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

 

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

 

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

 

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

 

2.起長一點的變量名

 

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

 

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

 

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

 

另外一點是我們起名的時候可以是不規范的英文,哪怕不太準確也沒問題,但一定一定不要用拼音。類似用:fenbianlv等作為代碼。

 

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

 

3.遵守代碼規范

 

在新手的意識里可能沒有代碼規范這個詞,但是這個確實是從新手走向進階的必經之路。

 

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

 

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

 

當然我們一開始未必能做得很好,但代碼規范并不是很困難的事情,從我們有這個意識到做到遵守規范并不需要很多時間,但是帶來的收益卻是非常豐厚的。之前在前公司,有聽說過過因為代碼風格太差被老板給了差績效的事情,我覺得挺冤枉的,可能就是一時疏忽給老板留下了差印象,如果當時寫代碼的時候能注意一點,完全可以避免,代碼有些太大了。

 

會用不等于懂了

 

如果你是應屆生,那么當你畢業進入職場,你必然會面臨一個適應的問題。別的我們不提,單單只說技術方面。我們勢必需要快速學習一些我們之前沒有見過或者是不了解的技術,來應付工作當中的任務以及挑戰。

 

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

 

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

 

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

 

能夠想明白這些問題可以讓我們保持一個清醒的頭腦,對自己的當下的處境以及長遠的發展目標都會有一個清楚的認識。

 

積累知識而不僅是經驗

 

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

 

如果這個命令解決不了呢?這些人可能會換個命令試試。如果常用的解決問題的命令都試過了還是不行呢?這些人可能就僵住了,覺得這個問題解決不了了,得請大牛來看了。

 

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

 

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

 

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

 

少說廢話,多寫代碼

 

著名的Linux之父Linus有一句名言:talk is cheap show me the code。翻譯過來就是廢話少說,代碼拿來。我覺得這句話非常符合這一行的精髓,我們不是靠嘴皮子吃飯的,而是靠實實在在的產出,這個產出最終是要落實到代碼上的。作為一個新人,可能我們會有這樣的問題,那樣的困惑。然而這許多的問題和困惑我們光想是沒用的,只能用硬實力來解決。

 

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

 

以上就是我自己積累的一些思考和想法,如果你是一個小白的話,希望它能夠幫助你順利度過新手期,向著大牛的目標進發。

 

分享:0
  • 北京校區
  • 西安校區
  • 山西校區
  • 武漢校區
  • 深圳校區
  • 上海校區
  • 廣州校區
  • 保定招生辦
  • 黑龍江項目辦

北京京南校區:北京亦莊經濟開發區科創十四街6號院1號樓 賽蒂國際工業園
咨詢電話:400-009-1906 / 010-56233821
面授課程:?JavaEE+微服務+大數據? ???大數據+機器學習+平臺架構?????Python+數據分析+機器學習??人工智能+模式識別+強化學習???WEB前端+移動端+服務端渲染

地址:陜西省西安市高新區西安軟件園西區創新信息大廈A座三層尚學堂

電話:029-88228155 / 18291433445

山西學區地址:山西省晉中市榆次區大學城大學生活廣場萬科商業A1座702

武漢學區地址:武漢市東湖高新區光谷金融港B22棟11樓
咨詢電話:027-87989193

深圳校區地址:深圳市寶安區航城大道U8智造產業園U6棟3樓
咨詢電話:0755-23061965 / 18898413781

上海尚學堂校區地址:上海市浦東新區城豐路650號
咨詢電話:021-67690939

廣州校區地址:廣州市天河區車陂街道大崗路5號中僑廣場2棟321室(四號線車陂站D出口,或brt車陂站)
咨詢電話:18948349646

保定招生辦公室

地址:河北省保定市競秀區朝陽南大街777號鴻悅國際1101室

電話:15132423123

黑龍江項目辦
地點:哈爾濱市松北區博文路青年部落孵化器1層
電話:15321415678
Copyright 2006-2021 北京尚學堂科技有限公司  京ICP備13018289號-19  京公網安備11010802015183  
網站維護:北京尚學堂科技有限公司昌平分公司