從C++到Python,我的人生如何被改變?一個遊戲程序員的進階之路

從C++到Python,我的人生如何被改變?一個遊戲程序員的進階之路

Python 有那麼神嗎?

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

今天我們就來借這個問題看看Python的牛X之處。

Python昇華了我,也將影響未來的我。

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

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

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

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

從C++到Python,我的人生如何被改變?一個遊戲程序員的進階之路

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

《黑客與畫家》滿本書都透著濃濃的技術自信,和充足的技術底蘊。它就像是一個知識豐富的技術高手,迫不及待的將平生經驗一股腦傳授給你,為你指明發展的方向。

它的字裡行間透露著對傳統編程語言的鄙夷和對LISP的崇敬。它認為精巧的語言,加上聰明程序員實現的高度抽象代碼,會帶來極大的生產力提升,讓開發更快、BUG更少,讓一兩個開發人員也能撐起一個具有巨大經濟效益的網站。

在Web界已經是遍地動態語言的今天,《黑客與畫家》裡的判斷似乎已經沒什麼好討論的了(現在動態語言在很多領域已經成為了主流,和作者當年的情況已經有了天壤之別)。但對於當時的我來說,就是大海里的一盞明燈。

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

在寫了一些小練習程序之後,我在工作中找到了一個Python的用武之地——用Python實現一個數據表格分析程序,並檢查表格中的數據錯誤、邏輯錯誤。這種表格處理工具在遊戲中具有很大的作用,而且非常適合用腳本來靈活的擴展功能。

第一個實現的簡單版本,使用起來大概是這樣:

從C++到Python,我的人生如何被改變?一個遊戲程序員的進階之路

這個代碼主要問題在哪呢?在於讀取數據時,程序員自己要指定數據的類型。get_int,get_str,get_float等等等等。

很不幸而又幸運的,當時我用某某雲盤保存自己的代碼,有一次誤同步,導致在公司寫的很多代碼,在家裡操作時覆蓋了。迫使我重寫幾乎整個程序。這次,在同事的參謀下,我實現了這種用法:

從C++到Python,我的人生如何被改變?一個遊戲程序員的進階之路

這段代碼實現的功能與上面的完全一樣,但是有兩點變化:

1、用[]下標操作符代替了get_xxx()函數調用,更簡潔。

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

這種實現,對於當時的我來說,是一個理念上的重大突破!

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

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

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

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

我可以任意的寫代碼,幾行代碼就能實現對樹的操作、複雜的嵌套字典。我彷彿可以操作任意複雜的數據結構,或者複雜的遞歸,只要我想清楚了,根本不需要多少編碼時間。當時自認為掌握了葵花寶典,幹勁十足,所以還找了一個Python學習網站,沒事就到上面刷題。

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

後來

後來的我,仔細學習過wxPython庫,也實現過類似Web框架的遊戲框架,對Python的使用也不斷進入新的階段。當然也發現Python的很多弊端,並非語言層的,大都是虛擬機層面的。

私信回覆【基礎】可獲取python基礎教程視頻一套

學習Python的過程中,我總結出項目開發的三大要點——開發速度,運行速度,維護難度。軟件項目金三角。這個規則可以套用在所有的軟件項目上,作為看項目的一個可觀角度。而且有趣的是,這個三角形總是無法在三點上同時拿到高分。

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

Python對我的影響是巨大的,Python昇華了過去的我,也將持續影響未來的我。

從C++到Python,我的人生如何被改變?一個遊戲程序員的進階之路


分享到:


相關文章: