摘要
Python 有那么神嗎时呀?
我打算去了解一下 Python,結果好像看到一個新世界了晴玖, Python 在他們口中好像無所不能读存,編寫一些自動化程序啊,黑別人網(wǎng)站啊呕屎,做游戲外掛之類的好像真的很牛逼让簿,那么,Python 真的那么神奇嗎榨惰?
今天我們就來借這個問題看看我的人生是為何離不開Python的拜英。
前言
我的第一份工作是一加國內知名游戲公司的邏輯程序員,必須技能是C++琅催,但是一開始只是寫語法和C++很類似的一種腳本(后來知道是從一個開源腳本引擎AngelScript修改而成的)居凶。學習游戲開發(fā)的流程,填數(shù)據(jù)藤抡,用腳本定制各種任務侠碧、副本等等。第一年還很有興致缠黍,第二年開始就意興闌珊了弄兜。
后來熟悉了整個系統(tǒng),介入到C++部分的代碼里瓷式。涉及到道具替饿、任務等等邏輯。那時候覺得最難的部分贸典,是UI系統(tǒng)视卢。當時的UI系統(tǒng),是用XML拼出界面廊驼,然后用類似C++的那種腳本來給它寫邏輯据过。從一開始被迫學習,到最后使用的時候遇到各種問題妒挎,前后折騰了很久绳锅。
寫程序的熱情,在實際工作中被一點點的磨滅酝掩。我想鳞芙,很可能許許多多的程序員,都會遇到和我一樣的問題。因為愛好而走上這條路积蜻,卻被瑣碎的工作磨滅了最初的沖動闯割。等到我成為一個獨當一面的程序員的時候,我甚至有一種感覺竿拆,覺得自己似乎什么都會,但是除了項目任務以外的東西宾尚,什么都做不出來丙笋。相比高中時候的自己,甚至有一些退步煌贴。
人生的轉機
直到有一天御板,我看了一本書《黑客與畫家》。
在你迷茫的時候牛郑,多吸收一些各方面的知識怠肋,偶爾會突然打開一扇窗。
《黑客與畫家》滿本書都透著濃濃的技術自信淹朋,和充足的技術底蘊笙各。它就像是一個知識豐富的技術高手,迫不及待的將平生經(jīng)驗一股腦傳授給你础芍,為你指明發(fā)展的方向杈抢。
它的字里行間透露著對傳統(tǒng)編程語言的鄙夷和對LISP的崇敬。它認為精巧的語言仑性,加上聰明程序員實現(xiàn)的高度抽象代碼惶楼,會帶來極大的生產(chǎn)力提升,讓開發(fā)更快诊杆、BUG更少歼捐,讓一兩個開發(fā)人員也能撐起一個具有巨大經(jīng)濟效益的網(wǎng)站。
在Web界已經(jīng)是遍地動態(tài)語言的今天晨汹,《黑客與畫家》里的判斷似乎已經(jīng)沒什么好討論的了(現(xiàn)在動態(tài)語言在很多領域已經(jīng)成為了主流豹储,和作者當年的情況已經(jīng)有了天壤之別)。但對于當時的我來說宰缤,就是大海里的一盞明燈颂翼。
雖然書里對Python(作者當年還是1.x版本)的看法很具有批判性,但是由于那時Python 2.x已經(jīng)有了長足的發(fā)展慨灭,加上一個同事的推薦朦乏,我全身心投入到了Python的學習之中。
在寫了一些小練習程序之后氧骤,我在工作中找到了一個Python的用武之地——用Python實現(xiàn)一個數(shù)據(jù)表格分析程序呻疹,并檢查表格中的數(shù)據(jù)錯誤、邏輯錯誤筹陵。這種表格處理工具在游戲中具有很大的作用刽锤,而且非常適合用腳本來靈活的擴展功能镊尺。
第一個實現(xiàn)的簡單版本,使用起來大概是這樣:
import mb
t = mb.table( "data/index.txt" );
l = t.get_line( 1001 ); # 1001 is line index
data1 = l.get_int( 2 ); # 2 means colum 2
data2 = l.get_str( 3 );
這個代碼主要問題在哪呢并思?在于讀取數(shù)據(jù)時庐氮,程序員自己要指定數(shù)據(jù)的類型。get_int宋彼,get_str弄砍,get_float等等等等。
很不幸而又幸運的输涕,當時我用某某云盤保存自己的代碼音婶,有一次誤同步,導致在公司寫的很多代碼莱坎,在家里操作時覆蓋了衣式。迫使我重寫幾乎整個程序。這次檐什,在同事的參謀下碴卧,我實現(xiàn)了這種用法:
import mb
t = mb.table( "data/index.txt" );
l = t[1001]; # 1001 is line index
data1 = l[2]; # 2 means colum 2
data2 = l[3];
這段代碼實現(xiàn)的功能與上面的完全一樣,但是有兩點變化:
1厢汹、用[]下標操作符代替了get_xxx()函數(shù)調用螟深,更簡潔。
2烫葬、讀取時不需要指定類型界弧,執(zhí)行時,data1自然是整型搭综,data2自然是字符串垢箕。
這種實現(xiàn),對于當時的我來說兑巾,是一個理念上的重大突破条获!
為什么這么說呢?因為強類型的問題蒋歌。在Python中帅掘,我用一些很簡單的處理,讓mb庫的底層自然的處理了類型堂油。而你知道嗎修档?在C++中,做到這點難如登天府框!
C++常常為了推斷一個類型吱窝,不惜使用模版技巧,寫出天書一般的代碼。而且院峡,結果上兴使,仍然不能做到動態(tài)語言的這種用法。也就是說照激,顯式強類型特性发魄,并不僅僅是約束程序員減少BUG的工具,它同時也是實現(xiàn)高抽象系統(tǒng)的一個束縛俩垃。這是個很有意思的事情欠母,對我當時的觸動很大。不知讀者能否理解吆寨。
到了寫出這個表格分析庫之后,我生命中的一扇門打開了踩寇。
我回到了可以自由寫代碼的時代啄清,就像是我的高中時代,而且比那個時代更為簡潔俺孙,充滿了更多的可能辣卒。
我可以任意的寫代碼,幾行代碼就能實現(xiàn)對樹的操作睛榄、復雜的嵌套字典荣茫。我仿佛可以操作任意復雜的數(shù)據(jù)結構,或者復雜的遞歸场靴,只要我想清楚了啡莉,根本不需要多少編碼時間。當時自認為掌握了葵花寶典旨剥,干勁十足咧欣,所以還找了一個Python學習網(wǎng)站,沒事就到上面刷題轨帜。
寫了很多平時懶的寫的復雜算法魄咕,還看大神們寫的“一行Python”(其實是利用了列表解析等方式做的很簡短但是有點難讀的代碼),收獲了很多樂趣蚌父。
后來
從那以后我就愛上了Python哮兰,為了呆在家專心鉆研Python,我直接把當時的工作給辭了苟弛。
在辭職之前喝滞,心里還是有一些擔憂,害怕學得不好嗡午,找不到工作囤躁,不過很快我就看開了,我覺得學習這種事情,更多的是要看自己的態(tài)度狸演,要始終嚴格要求自己言蛇,確保自己在認真努力的學習,而不是自欺欺人的假努力宵距。
我自己也比較有信心腊尚,我知道我能做得到,所以20年初满哪,我毫不猶豫的選擇裸辭回家婿斥,開始了為期半年的學習之旅。
閉關修煉出關后哨鸭,然后就開始給Python的崗位投簡歷民宿,boss,拉鉤大量海投像鸡,一開始沒有經(jīng)驗也沒有好好準備活鹰,第一個星期勞而無功,于是總結經(jīng)驗只估,在家好好準備面試考點和失敗的面試經(jīng)驗志群。
苦心人天不負,第二個星期面試了7家公司拿下4個offer蛔钙,編程半年锌云,我選擇了一家待遇較高做文本智能的公司,13k底薪吁脱,14到18薪年終獎以及項目提成桑涎。
也許大部分人都無法理解一門語言對一個程序員生涯的影響,所以特撰此文豫喧。
Python對我的影響是巨大的石洗,Python升華了過去的我,也將持續(xù)影響未來的我
關于Python技術儲備
學好 Python 不論是就業(yè)還是做副業(yè)賺錢都不錯紧显,但要學會 Python 還是要有一個學習規(guī)劃讲衫。最后大家分享一份全套的 Python 學習資料,給那些想學習 Python 的小伙伴們一點幫助孵班!
一涉兽、Python所有方向的學習路線
Python所有方向路線就是把Python常用的技術點做整理,形成各個領域的知識點匯總篙程,它的用處就在于枷畏,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面虱饿。
二拥诡、學習軟件
工欲善其事必先利其器触趴。學習Python常用的開發(fā)軟件都在這里了,給大家節(jié)省了很多時間渴肉。
三冗懦、全套PDF電子書
書籍的好處就在于權威和體系健全,剛開始學習的時候你可以只看視頻或者聽某個人講課仇祭,但等你學完之后披蕉,你覺得你掌握了,這時候建議還是得去看一下書籍乌奇,看權威技術書籍也是每個程序員必經(jīng)之路没讲。
四、入門學習視頻
我們在看視頻學習的時候礁苗,不能光動眼動腦不動手爬凑,比較科學的學習方法是在理解之后運用它們,這時候練手項目就很適合了试伙。
四贰谣、實戰(zhàn)案例
光學理論是沒用的,要學會跟著一起敲迁霎,要動手實操,才能將自己的所學運用到實際當中去百宇,這時候可以搞點實戰(zhàn)案例來學習考廉。
五、面試資料
我們學習Python必然是為了找到高薪的工作携御,下面這些面試題是來自阿里昌粤、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料啄刹,并且有阿里大佬給出了權威的解答涮坐,刷完這一套面試資料相信大家都能找到滿意的工作。