从C++到Python,一个游戏程序员的进阶之路

我的第一份工作是一加国内知名游戏公司的逻辑程序员,必须技能是C++,但是一开始只是写语法和C++很类似的一种脚本(后来知道是从一个开源脚本引擎AngelScript修改而成的)。学习游戏开发的流程,填数据,用脚本定制各种任务、副本等等。第一年还很有兴致,第二年开始就意兴阑珊了。

后来熟悉了整个系统,介入到C++部分的代码里。涉及到道具、任务等等逻辑。那时候觉得最难的部分,是UI系统。当时的UI系统,是用XML拼出界面,然后用类似C++的那种脚本来给它写逻辑。从一开始被迫学习,到最后使用的时候遇到各种问题,前后折腾了很久。

写程序的热情,在实际工作中被一点点的磨灭。我想,很可能许许多多的程序员,都会遇到和我一样的问题。因为爱好而走上这条路,却被琐碎的工作磨灭了最初的冲动。等到我成为一个独当一面的程序员的时候,我甚至有一种感觉,觉得自己似乎什么都会,但是除了项目任务以外的东西,什么都做不出来。相比高中时候的自己,甚至有一些退步。

直到有一天,我看了一本书《黑客与画家》。

在你迷茫的时候,多吸收一些各方面的知识,偶尔会突然打开一扇窗。

《黑客与画家》满本书都透着浓浓的技术自信,和充足的技术底蕴。它就像是一个知识丰富的技术高手,迫不及待的将平生经验一股脑传授给你,为你指明发展的方向。

它的字里行间透露着对传统编程语言的鄙夷和对LISP的崇敬。它认为精巧的语言,加上聪明程序员实现的高度抽象代码,会带来极大的生产力提升,让开发更快、BUG更少,让一两个开发人员也能撑起一个具有巨大经济效益的网站。

在Web界已经是遍地动态语言的今天,《黑客与画家》里的判断似乎已经没什么好讨论的了(现在动态语言在很多领域已经成为了主流,和作者当年的情况已经有了天壤之别)。但对于当时的我来说,就是大海里的一盏明灯。

虽然书里对Python(作者当年还是1.x版本)的看法很具有批判性,但是由于那时Python 2.x已经有了长足的发展,加上一个同事的推荐,我全身心投入到了Python的学习之中。

在写了一些小练习程序之后,我在工作中找到了一个Python的用武之地——用Python实现一个数据表格分析程序,并检查表格中的数据错误、逻辑错误。这种表格处理工具在游戏中具有很大的作用,而且非常适合用脚本来灵活的扩展功能。

第一个实现的简单版本,使用起来大概是这样:

这个代码主要问题在哪呢?在于读取数据时,程序员自己要指定数据的类型。get_int,get_str,get_float等等等等。

很不幸而又幸运的,当时我用某某云盘保存自己的代码,有一次误同步,导致在公司写的很多代码,在家里操作时覆盖了。迫使我重写几乎整个程序。这次,在同事的参谋下,我实现了这种用法:

这段代码实现的功能与上面的完全一样,但是有两点变化:

1、用下标操作符代替了get_xxx函数调用,更简洁。

2、读取时不需要指定类型,执行时,data1自然是整型,data2自然是字符串。

这种实现,对于当时的我来说,是一个理念上的重大突破!

为什么这么说呢?因为强类型的问题。在Python中,我用一些很简单的处理,让mb库的底层自然的处理了类型。而你知道吗?在C++中,做到这点难如登天!

C++常常为了推断一个类型,不惜使用模版技巧,写出天书一般的代码。而且,结果上,仍然不能做到动态语言的这种用法。也就是说,显式强类型特性,并不仅仅是约束程序员减少BUG的工具,它同时也是实现高抽象系统的一个束缚。这是个很有意思的事情,对我当时的触动很大。不知读者能否理解。

到了写出这个表格分析库之后,我生命中的一扇门打开了。

我回到了可以自由写代码的时代,就像是我的高中时代,而且比那个时代更为简洁,充满了更多的可能。

我可以任意的写代码,几行代码就能实现对树的操作、复杂的嵌套字典。我仿佛可以操作任意复杂的数据结构,或者复杂的递归,只要我想清楚了,根本不需要多少编码时间。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网技术栈

领域驱动模型(DDD)

2004年Eric Evans 发表《领域驱动设计——软件核心复杂性应对之道》(Domain-Driven Design –Tackling Complexit...

2841
来自专栏程序员互动联盟

C语言能干什么?

C语言几乎是所有语言的实现基础,所以不存在做不了的事情,只是相对来说谁做更合适,编写游戏和软件都不是问题。 为何C语言如此强大? 1、C语言是许多高级计算机语言...

6704
来自专栏程序员八阿哥

你是如何自学 Python 的?

我是自学的Python。从对Python一无所知,到在博客上写Python相关的系列文章(Python快速教程),前后有将近三年的时间。期间有不少门槛,但也充满...

1861
来自专栏程序员维他命

2017年5月iOS招人心得(附面试题)

在2017年5月中旬,技术老大让我招两个1-2年的iOS开发,把简历的筛选和第一轮技术面试的任务交给了我。于是便自己准备了这套面试题。

1804
来自专栏北京马哥教育

从入门到上手,如何快速学会Python?

因为清晰易读的风格,广泛的适用性,Python已经成为最受欢迎的编程语言之一。在TIOBE 排行榜中位居第四,是名副其实的人工智能第一语言。 风靡的另一个原因...

36811
来自专栏C语言C++游戏编程

为何C语言如此强大?到底可以做什么?

C语言几乎是所有语言的实现基础,所以不存在做不了的事情,只是相对来说谁做更合适,编写游戏和软件都不是问题。

1790
来自专栏牛客网

趋势科技、美团、小米、网易互娱 C++后台开发offer面经

前言 经过六月到九月这几个月的努力,九风有幸拿到了趋势科技、小米、美团、网易互娱的offer,之前看了好多分享的面经,是时候该回馈了一波。 先介绍下九风的基本情...

5577
来自专栏程序人生 阅读快乐

编写高质量代码:改善Java程序的151个建议

在通往“Java技术殿堂”的路上,本书将为你指点迷津!内容全部由Java编码的最佳实践组成,从语法、程序设计和架构、工具和框架、编码风格和编程思想等五大方面对J...

951
来自专栏云飞学编程

Python机构系统高清大图分享!让你有方向地学!

Python语言简单易学,加上现在AI的盛行,学习Python成为了好多小伙伴们的选择。但是没有基础怎么自学Python呢?今天小编就来教教大家,并且小编整理了...

932
来自专栏企鹅号快讯

对主流编程语言的吐槽

1.C 语言 ? ? 作为拥有「便携式汇编语言」头衔的 C 语言, 绝对充斥着各种问题!相信没有人会喜欢编写,大量独立的头文件,也更没有几个人能在使用预处理器的...

2358

扫码关注云+社区

领取腾讯云代金券