從C++到Python,為什么我的人生已經(jīng)離不開它

摘要

Python 有那么神嗎?

我打算去了解一下 Python,結(jié)果好像看到一個新世界了, Python 在他們口中好像無所不能,編寫一些自動化程序啊,黑別人網(wǎng)站啊,做游戲外掛之類的好像真的很牛逼,那么,Python 真的那么神奇嗎?

今天我們就來借這個問題看看我的人生是為何離不開Python的。

前言

我的第一份工作是一加國內(nèi)知名游戲公司的邏輯程序員,必須技能是C++,但是一開始只是寫語法和C++很類似的一種腳本(后來知道是從一個開源腳本引擎AngelScript修改而成的)。學(xué)習游戲開發(fā)的流程,填數(shù)據(jù),用腳本定制各種任務(wù)、副本等等。第一年還很有興致,第二年開始就意興闌珊了。

后來熟悉了整個系統(tǒng),介入到C++部分的代碼里。涉及到道具、任務(wù)等等邏輯。那時候覺得最難的部分,是UI系統(tǒng)。當時的UI系統(tǒng),是用XML拼出界面,然后用類似C++的那種腳本來給它寫邏輯。從一開始被迫學(xué)習,到最后使用的時候遇到各種問題,前后折騰了很久。

寫程序的熱情,在實際工作中被一點點的磨滅。我想,很可能許許多多的程序員,都會遇到和我一樣的問題。因為愛好而走上這條路,卻被瑣碎的工作磨滅了最初的沖動。等到我成為一個獨當一面的程序員的時候,我甚至有一種感覺,覺得自己似乎什么都會,但是除了項目任務(wù)以外的東西,什么都做不出來。相比高中時候的自己,甚至有一些退步。

人生的轉(zhuǎn)機

直到有一天,我看了一本書《黑客與畫家》。

在你迷茫的時候,多吸收一些各方面的知識,偶爾會突然打開一扇窗。

《黑客與畫家》滿本書都透著濃濃的技術(shù)自信,和充足的技術(shù)底蘊。它就像是一個知識豐富的技術(shù)高手,迫不及待的將平生經(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)語言在很多領(lǐng)域已經(jīng)成為了主流,和作者當年的情況已經(jīng)有了天壤之別)。但對于當時的我來說,就是大海里的一盞明燈。

雖然書里對Python(作者當年還是1.x版本)的看法很具有批判性,但是由于那時Python 2.x已經(jīng)有了長足的發(fā)展,加上一個同事的推薦,我全身心投入到了Python的學(xué)習之中。

在寫了一些小練習程序之后,我在工作中找到了一個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等等等等。

很不幸而又幸運的,當時我用某某云盤保存自己的代碼,有一次誤同步,導(dǎo)致在公司寫的很多代碼,在家里操作時覆蓋了。迫使我重寫幾乎整個程序。這次,在同事的參謀下,我實現(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ù)調(diào)用,更簡潔。

2、讀取時不需要指定類型,執(zhí)行時,data1自然是整型,data2自然是字符串。

這種實現(xiàn),對于當時的我來說,是一個理念上的重大突破!

為什么這么說呢?因為強類型的問題。在Python中,我用一些很簡單的處理,讓mb庫的底層自然的處理了類型。而你知道嗎?在C++中,做到這點難如登天!

C++常常為了推斷一個類型,不惜使用模版技巧,寫出天書一般的代碼。而且,結(jié)果上,仍然不能做到動態(tài)語言的這種用法。也就是說,顯式強類型特性,并不僅僅是約束程序員減少BUG的工具,它同時也是實現(xiàn)高抽象系統(tǒng)的一個束縛。這是個很有意思的事情,對我當時的觸動很大。不知讀者能否理解。

到了寫出這個表格分析庫之后,我生命中的一扇門打開了。

我回到了可以自由寫代碼的時代,就像是我的高中時代,而且比那個時代更為簡潔,充滿了更多的可能。

我可以任意的寫代碼,幾行代碼就能實現(xiàn)對樹的操作、復(fù)雜的嵌套字典。我仿佛可以操作任意復(fù)雜的數(shù)據(jù)結(jié)構(gòu),或者復(fù)雜的遞歸,只要我想清楚了,根本不需要多少編碼時間。當時自認為掌握了葵花寶典,干勁十足,所以還找了一個Python學(xué)習網(wǎng)站,沒事就到上面刷題。

寫了很多平時懶的寫的復(fù)雜算法,還看大神們寫的“一行Python”(其實是利用了列表解析等方式做的很簡短但是有點難讀的代碼),收獲了很多樂趣。

后來

從那以后我就愛上了Python,為了呆在家專心鉆研Python,我直接把當時的工作給辭了。

在辭職之前,心里還是有一些擔憂,害怕學(xué)得不好,找不到工作,不過很快我就看開了,我覺得學(xué)習這種事情,更多的是要看自己的態(tài)度,要始終嚴格要求自己,確保自己在認真努力的學(xué)習,而不是自欺欺人的假努力。

我自己也比較有信心,我知道我能做得到,所以20年初,我毫不猶豫的選擇裸辭回家,開始了為期半年的學(xué)習之旅。

閉關(guān)修煉出關(guān)后,然后就開始給Python的崗位投簡歷,boss,拉鉤大量海投,一開始沒有經(jīng)驗也沒有好好準備,第一個星期勞而無功,于是總結(jié)經(jīng)驗,在家好好準備面試考點和失敗的面試經(jīng)驗。

苦心人天不負,第二個星期面試了7家公司拿下4個offer,編程半年,我選擇了一家待遇較高做文本智能的公司,13k底薪,14到18薪年終獎以及項目提成。

也許大部分人都無法理解一門語言對一個程序員生涯的影響,所以特撰此文。

Python對我的影響是巨大的,Python升華了過去的我,也將持續(xù)影響未來的我

關(guān)于Python技術(shù)儲備

學(xué)好 Python 不論是就業(yè)還是做副業(yè)賺錢都不錯,但要學(xué)會 Python 還是要有一個學(xué)習規(guī)劃。最后大家分享一份全套的 Python 學(xué)習資料,給那些想學(xué)習 Python 的小伙伴們一點幫助!

一、Python所有方向的學(xué)習路線

Python所有方向路線就是把Python常用的技術(shù)點做整理,形成各個領(lǐng)域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應(yīng)的學(xué)習資源,保證自己學(xué)得較為全面。

二、學(xué)習軟件

工欲善其事必先利其器。學(xué)習Python常用的開發(fā)軟件都在這里了,給大家節(jié)省了很多時間。

三、全套PDF電子書

書籍的好處就在于權(quán)威和體系健全,剛開始學(xué)習的時候你可以只看視頻或者聽某個人講課,但等你學(xué)完之后,你覺得你掌握了,這時候建議還是得去看一下書籍,看權(quán)威技術(shù)書籍也是每個程序員必經(jīng)之路。

四、入門學(xué)習視頻

我們在看視頻學(xué)習的時候,不能光動眼動腦不動手,比較科學(xué)的學(xué)習方法是在理解之后運用它們,這時候練手項目就很適合了。

四、實戰(zhàn)案例

光學(xué)理論是沒用的,要學(xué)會跟著一起敲,要動手實操,才能將自己的所學(xué)運用到實際當中去,這時候可以搞點實戰(zhàn)案例來學(xué)習。

五、面試資料

我們學(xué)習Python必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。


無論如何,最后非常感謝大家點擊觀看我的文章,如過對你有幫助煩請?zhí)∈纸o小編點點贊。有任何問題或者需要文章內(nèi)的資料可以后臺私信我,歡迎“騷擾”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容