作者丨风力
我们两兄弟,信我,这波绝对不卖。
使用“码农”这个说法纯粹是一种个人习惯。我有不少程序员朋友,这个称谓并不包含任何贬义或侮辱。事实上,他们也经常自称“码农”——有时还自称“码畜”,这种恶习你就当没看见好了。
小时候,90年代初,我学过一点编程。当时用的机器是Laser310,语言是BASIC。后来上大学,学了一阵Fortran;2000年网络时代开启,研究了一点HTML、Javascript;再往后因为搞数值策划要用Excel,还用过Excel里的VBA。我的主业是PM也即产品经理,但粗通一点最基本的编程算法,这是个大前提。
接下来插播个老笑话:
“听说我们的PM被绑票了!绑匪要我们送200万不然就要浇汽油把他烧死!你要不要捐点?好多人都捐了。”
“一般是捐多少?”
“不好说,有捐10升的,也有捐5升的。”
这个老段子说明PM与码农之间的干群关系那是相当紧张了。作为粗通编程的PM,我有时会(跳出工作)思考一个问题,那就是编程到底有多难?如果难,有可能是难在什么地方?(还有一个问题就是“我要怎么学会编程,成为一个内行,然后再抽打这帮码农干活”,不过仅是想像)这种思考的历史相当悠久,有时会促使我去自学编程,但往往由于没有专业指导、缺乏实例,最后不了了之。
恰好最近出了个游戏《Human Resource Machine》,中文或可称为《码农游戏》。作者号称……(省略200字常见忽悠)基于上述原因,我斥资人民币30元,全款购置了这款游戏。玩了2个小时后,获得一些感受,现在与大家分享。
丨 一
第一个感慨是“需求”。我玩的是英文版本——下载下来就是英文,没找到在哪改语言选项。反正也勉强能看懂,就凑合着玩了(据说中文版是机翻,比英文版还要难懂)。但是人生总有不能凑合之处,比如在第4关就整了半天过不去,最后发现是读常量后取常量的顺序不对……
这让我想到码农们平时的抱怨:你们PM连个需求都提不好!天地良心,我本人做的策划和提的需求都无懈可击,因为我是编辑出身,“描述”于我而言不过是雕虫小技——但我也确实看过一些略显狰狞的需求文档。假如一定要下个结论,我觉得市面上起码有70%的需求文档、产品文档是有问题的,强于Sense,但输在Description。
copy this!
为了避开这个问题,很多情况下PM提的需求是“下载xxx(APP名),然后照着抄一个!”这个段子经常被拿来调侃PM的无能。事实上在我们看来,效率最高的方法就是最好的方法;所以如果这种方法程序员能理解,那也没有什么不可以,反正也没有更好的方法。但不管怎么样,需求,或说为了实现需求而必不可少的沟通,是PM和码农之间最重要、同时也是最困难的事。
丨 二
本着有限的编程知识,我曾作出总结:算法就是条件跳转+定义过的数组存取。在这么说的时候,我并没有意识到自己用的是何等高级的语言——BASIC很高级吗?好像还真是,因为Laser310上可以跑汇编语言(我不会,学长们用过)。当我开始玩这个游戏时,才明白BASIC、C、Python是何等方便……
好比让你造条航母但不给螺丝刀,你得徒手去把螺丝都给拧上……
举个例子。游戏里有一关要求你取两个数;如果它们同为正或同为负,输出结果0,否则输出结果1。这听起来非常容易且清晰,if a*b=|a*b| then print 0 esle print 1,一句话的事(||是数学上的绝对值符号,函数形式是Sab())。在不同语言里它的写法可能略有区别,但意思是清楚的。问题是,这一关里根本没有乘法让你用!不但没有乘法,当然也没有绝对值函数,没有条件判断或说不支持这个格式的条件判断……你定睛一看,除了最后输出的部分,这整行命令里没一条是能使的,好比让你造条航母但不给螺丝刀,你得徒手去把螺丝都给拧上……
后来我是用一个三叉判断实现了目的:英语不好的人想不出一个意思怎么说,就用一个从句代替,最后句子里从句套从句像野生糖葫芦。算法思路不清晰的人会大量使用条件判断,最后整个程序里满是条件判断和跳转,是数码版野生糖葫芦。这样做的恶果,下面马上就要讲到。
丨 三
游戏大概有30多关(我现在玩到19关),过关条件是完成经理的要求,但还有2个奖励目标(类似手游里的三星过关,打不到三星就扫荡不了,这么说你应该懂了),分别是命令数和步骤数。前者要求你尽可能少用命令,多用循环;后者相反,希望你提高效率少用循环。这两个目标一定程度上可以说是对立的,所以你往往需要写出两种风格截然不同的程序,分两次来完成。
还有一种可能就是两个目标都完成不了,对于那些半路出家的PM尤其如此——我写的程序,我自己都觉得臃肿而笨拙。我知道它一定能跑通,也知道它一定能实现需求,但同时我也知道它效率极低:游戏提示若只用30步实现就可完成任务,而我用了60多步!这个事情告诉我们老程序员的意义,那就是提高程序的整体效率。
“我一定用最少的步数完成这个需求”
讽刺的是,这种提高很多时候并不能体现出价值。王小波讲过一个故事,那是他在美国跟着导师(又叫“老板”)做项目、写程序的故事。第一个程序写完了,特别短,老师惊呆了。结果一跑之下居然没问题,老师大喜,但最后算钱时他的钱最少,原来程序是按行算钱。这可把他气坏了,第二次他就拼命往长里写——我们知道这相当简单——结果程序交上去老师一看长度,根本没问能不能跑,直接给他退回来了。
(这事情还有个后续。他被老师整得不轻,敢怒而不敢言,就把程序名取成”Caonima1″,“Caonima2”这样。老外不发“C”这个音,导师老是念成“Kaonima”,他就纠正,不是Kaonima,是Caonima!)
确实“效率”二字很难具现化为KPI。评论车的好坏,一个标准是“百码加速”,加速时间越短就越好,但程序却没有类似的“百毫秒响应值”,即便有,在整个产品流程里究竟占多大比重也值得怀疑。我看过一些关于传奇程序员约翰·卡马克的故事,内中提到他如何用一个天才公式进行显卡的多边形贴图运算。毫无疑问,卡马克是一个出类拔萃的程序员,码农之王。但说实话,他做的引擎不错,他出品的游戏(比如Doom4)却相当垃圾;他知道怎么让画面精美,却无法设计出有游戏性的关卡,更不知道怎么搞市场营销。他是码农之王,不是游戏制作人之王,更不是CEO之王。
“码农之王”
不幸的是,今天的行业里,经常要求一个人同时成为码农之王,制作人之王,CEO之王,甚至包括美术之王、市场之王、运维之王乃至成本控制之王。更不幸的是,一位码农如果真的精于Coding,他就难得在其他方面亦有建树。小团队的悲哀,一部分就在于此。
(反例肯定是有的。比如那位在常用表情里睁大眼睛对你说“想想如果不花钱你会变得更强吗”的人,他就是码农出身。但话说回来,这样的例子相当少啊。)
丨 四
还有一点小感受是UI方面的。这个游戏非常不友好地禁止了路标(或许是因为汇编语言特性),从而BASIC语言里极为方便的“Goto 行号”用法不可能有了,你必须手动把箭头拖曳至目标位置。当条件跳转超过5个时(由于没有循环,这个数量很容易达到),你会看到满天都是跳转轨迹。另一方面,屏幕所能显示的命令行有限,在拖动时又可能误操作、拖到跳转轨迹。而你根本不可能记住“那个箭头之前在什么位置”,于是唯一的解决方案就是拉到最下去使用游戏提供的“Undo”按钮,但这个拉动本身又可能触发其他的误操作……
神秘的“Goto”
我的意思是,一个好的编辑器很关键。我现在用的Sublime Text是以前一个写Python的好汉推荐的,当然我主要用它来做文字录入(取代了以前用的Notepad)。编辑器具体要用什么,码农朋友们肯定各有各的爱好,而类似的道理也可以应用在其他方面。就像我组电脑时,别的无所谓,但屏幕和键盘一定要选最好的。这个道理是这样的:屏幕天天看,键盘天天打,不选好的那不是和自己过不去?CPU慢你可以少开几个窗口,硬盘小之前下的片子你就勤删一点,未必屏幕15寸的你还能在自己脸上架个放大镜假装是17寸?
找到工作中的“关键点”,也是一种能力。当然,这个能力的主要因变量是工作经验。
丨 五
现在我卡在第19关了。这关要求对4个量进行排序然后依次输出,如果用BASIC来操作可能早已完成,但这该死的汇编……我现在写到69行了,还有最复杂的一个情况没有处理,最终结果应该会超过100行,这一定有什么地方不对:游戏给了Bump+、Bump-两个操作到底要怎么用?昨天玩到3点钟含恨睡下,今早8点起来之后还一直在思考——这游戏是有点烧脑子。有鉴于此我想起另一个关于码农的段子:
“昨天晚上我走的时候问你什么时候好,你不是说下班前一定给我?怎么今早来了你还没弄完?”
“我也没说我已经下班了啊?”
触乐丨高品质、有价值、有趣的移动游戏资讯
下载游戏或看更多内容,请点击 阅读原文