您现在的位置: 首页 > 营销资讯营销资讯
“Python 在制作游戏方面很糟糕
从逃离到成为游戏开发,40岁了我才学会编程
发布时间:2020-09-26作者:青鸾传媒来源:全网营销点击:
声明:本文来自于微信公众号 InfoQ(ID:infoqchina),作者:Dave MacLeod,译者:Sambodhi,授权青鸾传媒转载发布。
尽管我早在小学的时候就电脑玩得如鱼得水,似乎注定要进入 IT 行业,但后来却经历了屡次失败。今年,当我步入四十不惑时,我终于学会了编程。也许我的经历会让你明白:只要你想开始,就永远不会晚。有时候,你只需要找到适合自己的语言。
1、“不想成为 Logo 明星程序员后再被派去参加比赛”
我的编程生涯始于 20 世纪 80 年代时拥有的第一台电脑。那是一台叫做 ADAM 计算机的怪兽,就是下图这样的:
这是一种个人电脑、ColecoVision 游戏系统和打字机的混合体:两个磁带机代替了磁盘驱动器 / 磁带盒、一台电视机代替了显示器,还有一台有趣的打印机,上面有个开关可以将它变成一台完整的打字机。很多其他 ADAM 计算机用户都有实际的磁盘驱动器,但这个没有,磁带要花很长时间才能加载出来。
我们刚得到它的时候,我父亲在地下室里录了很多磁带,但我不知道为什么会有这么多的游戏。我最喜欢的一款游戏叫做《Gateway to Apshai》(一款战斗电子游戏),这是一种类 Rogue 的游戏(迷宫探索式电子游戏)。后来他解释说,他是用 Forth 实现的。下面是他的原话:
当我们有了 Coleco Adam 计算机时,它有一个 Zilog Z80 CPU,因此,我用过一点 Forth。不知道你是否还记得,我从美国订购了一盘磁带(用于磁带机的),里面有几个黑客程序和一本名为《Adam 黑客指南》(The Hackers Guide to the Adam)的书,它允许我们将 ColecoVision 的游戏下载到空白磁带上,这样我们就得到了大量的游戏。我自己并没写过任何程序,但是磁带上的程序都附有源代码,所以你可以按照逻辑来写。在某些情况下,我需要调整参数并重新保存,以便优化任何需要破解的程序。这很有趣,也很好玩。
关键是他给我看了一种叫做 BASIC 的语言,当时的我以为 BASIC 是世界上唯一的编程语言。我开始学习这门编程语言,并跟着读了像《银山之谜》(Mystery of Silver Mountain)和《捕获狮头象》(Hunt the Wumpus)这样的书,很快就学会了如何编程。我开始根据 Steve Jackson 的《巫术!》(Sorcery!)这本书制作我自己的小型 RPG 游戏。
它们最后就像下面这段从 Wikipedia 上抄来的代码的一个较大版本,其中有很多 RAND 的掷骰子和 GOTO 调用。随着时间的推移,我不得不添加越来越细的行号(比如,在 60 行和 70 行之间添加了一个 65 行,然后是 64 行,最后当我用完空间就得给整段代码重新编号)。
所有这些代码都是我自己完成的。那时候,人们还不能在网上搜索示例代码,所以大家都认为我注定要从事 IT 行业。
与此同时,我们在学校里学了一种叫做 Logo 的东西。这就没那么有趣了,你需要做的只是让一只海龟在屏幕上画出形状就行了。你可以给它函数,比如 FD 90、RT 90,然后用 REPEAT 4,它就会重复四次,画出一个正方形。画一个圆要花很长的时间,因为你必须给出 REPEAT 360,看着海龟重复 360 次才能画出一个圆。所以有时候你可以作弊一下,执行 REPEAR 180,让海龟一次向右 2 度,这样计算机最终会绘制出几乎相同的东西,但只需进行 180 次计算即可。
为了增加趣味性,你可以像下面这样做一个形状,告诉它做一个圆,然后告诉它向右转一点,然后开始下一个圆。
在看到 Bryan Cantrill 的这段视频之前,我几乎完全忘记了我用过 Logo 这件事。Cantrill 年纪跟我差不多,小时候也学过 Logo。我们经历也很相似:对让海龟画圆这件事完全心不在焉,但他幸运地遇到了 C 语言并真正投入到编程中,而我没有。这是我自身的原因。
在 20 世纪 80 年代的计算机课上,我们都坐在 Calgary Ranchlands 社区学校的一间没有窗户的房间里,对着电脑让海龟画圆。由于 Logo 超级容易上手,以至于我和其他几个人都觉得,它根本就不像是一门编程语言。老师们注意到了这一点,就说马上要举行 Logo 竞赛了,我们应该去参加。那应该是一场全市范围的比赛,也有可能是一次省级范围的比赛。
比赛持续了两三天,我们终于在最后一天鼓捣出了一个产品,得到了评委们的认可并有望获奖。我的队友比我更投入,而我却开始表现出对比赛的兴趣缺乏。我觉得我们拿到第四或第五名就可以了,但队友并不满意。所以当比赛结束时,我如释重负。我知道我不想编程,不想赢了比赛后作为 Logo 明星程序员再被派去参加其他比赛。
我当时的人生目标就是让那个我小学时一直暗恋的女孩喜欢上我。还有就是在当时,人们认为会电脑的人都是书呆子。所以那时候,我在公共场合都会和电脑保持一定的距离,来保持这样的形象:是的,我是很擅长电脑,但我并不是一个电脑爱好者或其他什么。
在看了两三天的 Logo-Proficient 比赛和他们所做的东西后,我们得到了一件 T 恤和一个瓶子作为参与奖励,这是我最后一次使用 Logo 。与此同时,我又持续用了一段时间的 BASIC ,直到 90 年代初,我们把 ADAM 计算机换成了 386,BASIC 就被我忘得一干二净,而我也不打算花钱买一本关于编程的书。
Bryan Cantrill 第一次接触 Logo 的经历是这样的:
我想我用过的第一种语言是 Logo,现在回忆起来,这是一种虐童的行为,Logo 太可怕了!如果现在你去看 Wikipedia 上的 Logo 词条,你会说:“嗯,这很好,就像一种受到影响的 Lisp 方言……”但是这些都是错的。“Logo 是一只什么都不会做的海龟,我说的海龟就是指大脑袋显示器上的一个三角形,它什么都不会做。它的魔力就像你告诉它“box”(绘制正方形),它会告诉你“I don't know how to box”。
我记得三年级的时候,计算机是必修课。我还记得当时那种机械、冷漠的感觉,因为这个东西不知道如何绘制正方形,而我也不在乎你知不知道怎么绘制正方形。我第一次接触计算机就是“我对这件事一点儿也不关心”。
2、Python、Ruby 还是 Lua?
从 90 年代到 2000 年代这段时间,我没有做过任何编程。然而,在这段时间里发生了两件至关重要的事:我成了《星际迷航:下一代》(Star Trek: The Next Generation)和《创世纪 VII》(Ultima 7)的超级粉丝。
Data 是我最喜欢的角色,因此我经常思考 Soong 博士是如何做出来 Data 的,我们需要多长时间才能达到这样的阶段。当我玩《创世纪 VII》时,我曾有过并且现在仍然有同样的感受:这个世界充满了细节,我会继续玩这个游戏甚至只是为了和人们聊聊天、逛酒吧、看人们读书。
所以,这段时间是让我对编程再次感兴趣的重要时期。编程不再是关于海龟和令人沮丧的比赛,而是科幻小说、电影、奇幻游戏、音乐以及其他一切我认为很酷、很有价值的一切。
那时候,我知道有一种叫做 C++ 的编程语言是用来开发游戏的,也许有一天我可以用它做出一个长得像 Android 机器人那样的 Data 和《创世纪 VII》那样的游戏。这让我对 C++ 产生了一定的崇拜,但我已经和编程无缘了。
我从加拿大搬到了日本,然后移居韩国。有一天,我遇到了一位来自多伦多的韩裔加拿大人,他在韩国当程序员。作为一名韩裔,他可以在没有严格的雇主允许让他保持签证的情况下从事自由职业,只需整天坐在星巴克用两种语言进行编程:PHP 和 Python。我知道 PHP 这个名字,一直以为它只是一个电子公告板的名字。他跟我说应该试一试,因为可以很快学到新技能,也会对我的职业生涯有帮助。
他向我推荐了 Python,说应该先从这门语言开始。初次使用 Python 非常迷茫,只有一些小小的成功。我记得我读过关于 Python 2 和 Python 3 的帖子,这些帖子都是说 Python 2 如何更好,Python 3 如何强迫每个人接受的。不管这意味着什么,我注意到一些熟悉的东西,比如 print,但熟悉的 $ 却不见了,也没有任何行号或 GOTO。在没有主函数的情况下,我设法将一些东西放在一起,但我真的不知道,一个程序没有行号和其他类似有用的东西该如何从头到尾运行。
那时候的互联网开始普及,人们在网上会对一种语言与另一种语言进行比较和讨论。我注意到一种叫做 Ruby 的语言更像我的风格,所以我尝试了一下。然后我又看到一种叫做 Lua 的语言,感觉它好像就是为我做的。我不知道如何使用,但我就相信 Lua 是我想要的。我认为 Lua 是最容易学习的编程语言,如果我能学好这门语言,就能学会所有其他编程语言。
几个月后,我在星巴克又遇到了那个韩裔加拿大人,他问我 Python 学得怎么样了。我告诉他,我觉得 Lua 应该是适合我的编程语言,但我说不出理由,显然我还没有掌握如何写代码。他最后评论说:“嗯,也许你没有编程基因。”
不知为何,我却固执己见地认为自己有这方面的基因。我小学的时候就自学了 BASIC,我知道我有这个天赋。我只是需要真正喜欢上 Lua 并学好它……或者我应该学习 JavaScript?但大家都说你应该先学 Python,虽然我确实更喜欢 Ruby……结果我一直没完没了地纠结着,直到我再一次失去了兴趣。
最后,我又回到加拿大生活了几年,编程根本不在我的考虑范围内。2011 年到 2015 年期间,唯一与编程有关的事情只有一次,就是听说隔壁办公楼里都是写 C++ 的人,他们为管道和其他能源项目定制 SAP,赚钱很多。
3、40 岁,第一次学会编程
2015 年,油价崩盘,Calagary 经济也随之崩盘,我们整个团队也解散了。拿到了丰厚的裁员补偿后,我决定开始真正学习编写代码。
我学会了如何编写函数,如何创建对象等等,但是 self 关键字仍然让人困惑,使用对象也是如此。再努力点就足以解决这些问题了,但我的老毛病又犯了: