程序员年龄增大后的职业出路是什么?

这篇文章是我在知乎上的的一个回答,讲的略微有点深。另外感觉自己这两年越来越左翼,越来越觉得马克思不愧是20世纪最伟大的思想家之一。

今年 30 了,也开始考虑年龄问题了。
不过虽然 30 岁,但我实际作为程序员、以编程为业,也只是最近两年的事情(关于我的编程职业经历,在这个回答里写的比较详细:知乎用户:自学编程的人,都是怎么找到第一份软件开发工作的?)。因此对编程这个职业的理解,可能还不如一些 90 后小朋友深,写的不对的地方贻笑大方,请见谅了。

注:以下叙述,不局限于程序员,实际上包含所有职业。

中国的程序员在市场中的地位,不客气的说,随便翻开《1844经济学哲学手稿》里描写产业工人的段落,把这些一百年前的论断放到程序员身上,都言之凿凿:
例如:关于程序员的先进生产力与其对应的可怜回报

「的确,今天由于有了新的动力和完善的机器,棉纺织场的一个工人往往可以完成早先 100 甚至 250-350 个工人的工作。在一切生产部门中都有类似的结果,因为外部自然力日益被用来加入〔X〕人类劳动。如果说为了满足一定量的物质需要必须耗费的时间和人力比现在比过去减少了一半,那末,与此同时,在不损害物质福利的情况下,给精神创造和精神享受提供的余暇也就增加一臂。但是,在我们甚至从老克伦纳士自己领域中夺得的虏获物的分配方面,仍然取决于像掷骰子那样盲目的、不公正的偶然性。法国人有计算过,在目前生产状况下,每个有劳动能力的人平均每日劳动五小时,就足以满足社会的一切物质利益……尽管因机器改进而节省了时间,工厂中奴隶劳动的时间对多数居民说来却有增无已。」

例如:关于「越工作越贫穷」这一现象的分析

「工人生产的财富越多,他的产品力量和数量越大,他就越贫穷。工人创造的产品越多,他就变成廉价的商品。物的世界的增值同人的世界的贬值成正比.劳动不仅生产商品,它还生产作为商品的劳动自身和工人,而且是按它一般生产商品的比例生产的。」

例如:关于程序员异化为程序的奴隶

「因此,工人在这两方面成为自己的对象的奴隶:首先,他得到劳动的对象,也就是得到工作:其此,他得到生存资料。因而,他首先是作为工人,其次作为肉体的主体,才能够生存。这种奴隶状态的顶点就是:他只有作为工人才能维持作为肉体的主体的生存,并且只有作为肉体的主体才能是工人。」

以上,并不是呼吁大家都去读马克思,我也无意挑起关于马克思的政治经济学的争论(也希望大家尊重题主和读者们,不要做跑题辩论),只是希望各位静下心来想一想,我们和百多年前的纺织工人的区别,到底是什么?
伴随一个产业工人或程序员的老去,不可避免的是工作时长与强度的降低、工资的刚性提升(正常来说只能升不能降)、对家庭福利需求的增高(例如需要公司为家人购买保险)等等。而普通工人(程序员)的工作效率增长速度一旦无法达到其福利需求的增长速度,在公司里即成为累赘。换句话说,辞退你、换新人,对公司有很大好处,而这对资方来说是一个巨大的诱惑。
多亏劳动法和近二十年来的互联网产业红利,程序员的处境已经远远优于当年的工人,不用时刻担心被辞退,但是当到达了一定年龄后,大多数程序员的个人价值已到峰值,收入封顶,但生活压力却越来越重。这是「年龄-收入」的悲剧冲突核心,也是大量程序员夙夜忧叹的唯一原因。
而这种悲剧,集中式的出现在中国,其直接表现就是程序员的薪酬过低(例如在美国,普通工程师拿个十几万刀的 package 并不算天方夜谭,这种问题也就并不严重。)。
所以程序员老了怎么办?唯一靠谱的解答,就是脱离自己的产业工人身份,直面残酷的市场食物链,尽一切可能向上爬,脱离这个「产业工人诅咒」。
那么程序员以上的食物链有哪些?最直接的就是技术管理层、公司中高层,再次是资本方,最后是权力方。故而其方法也分外直接:要么争做管理层并获取股份、股权激励等非劳动收入,要么以资本进行投资、让别人为你打工,要么当个省委副书记、起码乡镇干部之类(这一条过于奇幻,当做笑话吧)。
但凡符合上述逻辑的职业规划,都是靠谱的,区别仅在于风险大小。
至于计算机领域的、乃至其他各行各业的技术专家,这是一类我非常崇敬和羡慕的人群,他们往往已经获得了超额收益,故而不在我上述论证范围内。我所说的一切,仅仅针对你我这样的普通职员。
所以,程序员们,不要为自己掌握先进的知识而沾沾自喜,这个世界并不属于知识劳动者,所有利润最终将归属资本和权力……
……和猫。

Tagged : / / /

合作类DBG桌游《XenoShyft: Onslaught》测评

最近买了一盒 CMON 出品的卡牌构筑机制的1-4人塔防类游戏《XenoShyft: Onslaught》,一个人试玩了一下,觉得比领土好玩多了。又意外获赠了一盒该游戏第一个大扩《Xenoshyft: Dreadmire》在2016年 Kickstarter 上众筹中回报的 KS 独享扩展卡包,内容丰富,很大程度上提高了可玩性。非常意外,非常感动。
1

游戏特点

XenoShyft 的主题是合作防守,玩家们扮演星际战士对抗外星异种,游戏的目标并不是杀光异种,而只要在一定时间内保持不死即可——要么坚持9轮后游戏胜利,要么鏖战中途基地生命值降到0而失败。由此可见,游戏的难度颇大,异种怪物的可怕攻击力与特殊能力会给玩家们带来非常大的压力。在这样的主题下,玩家之间通过各种形式的合作进行快速战斗,游戏节奏异常的快,与《领土》类 DBG 完全不同。
昨天下午,我和几个朋友连开2局《Xenoshyft: Onslaught》,游戏过程非常紧张刺激,几个人都很过瘾。虽然2次尝试都以失败告终,但也终于见识到了 DBG 这个老套、繁琐、慢速的游戏机制,如果加以微调,完全可以支持快节奏的卡牌战斗游戏。
2
3
4
Xenoshyft 整体节奏非常流畅,速度极快,四个玩家共同合作防守基地,游戏过程中能够互相支援部队、道具等等,这样的设计打破了领土创造的经典但乏味的『二人埋头理牌』模式,不同玩家的互动极为丰富,这种配合贯穿游戏全程,即便不在自己的回合内,依然可以使用自己的即时效果牌和特殊能力部队进行协助;再加上所有玩家共享生命值,每一个人的成败都关系到所有人,任何一路被突破都会对基地造成破坏,因此可以说全程无尿点,基本没有 downtime 困扰。
另外需要提一下的是,XenoShyft 本身是一个变化颇多的游戏,玩家选择不同的部门(如医疗部、武器部、科学部等等)有不同的特殊技能和初始牌库,游戏 Setup 过程中随机出现可购的强大道具,以及8种从弱到强、能力各异的兵种互相搭配,使得每次游戏都具有巨大的差异性,可玩性极佳。同时由于游戏的高度合作性,不同玩家的策略区别极大,可以说基本很难玩出2局雷同的游戏。
5
(上图为游戏后期 Wave3 的一条战线,异能强大的「电震兽」和防守反击能力爆表的「海伯利昂突击装甲」在面对面的对抗)
6
(上图是游戏中期经常遇到的一种恶心的敌人,可以将我方阵亡士兵直接变成他们的提线木偶。这游戏的美术真是有点惊悚,而且相当血腥,儿童不宜。)

KS 卡包带来的变化

上一篇文章说到了,朋友赠送了我一套《XenoShyft: Dreadmire》的 kS 专属卡包,虽然由于部分卡牌涉及到「天气」这个新机制、而我仅有基础版、故而无法使用,但是其他牌的扩充实实在在的拔高了游戏的耐玩度。
KS pack
举个例子,这个 KS 卡包提供了些崭新而简易的增强规则。一个我方士兵如果经历了战斗而未阵亡,则可在下一回合升级为英雄(居然还是闪卡……)。每个兵种只有一个英雄,这些英雄相比普通士兵具有更为强大的能力,是战场上的中坚力量。同时,装备物品也有类似的「传奇」版本,比原本的武器更加强大也更加稀有。
9
8
除了士兵在战斗幸存后可升级为「英雄」外,还出现了4个具有强大能力的崭新兵种,目测强度略高于基础版,但面对同步增强的敌人,似乎显得并不算过分。
15
另外,XenoShyft 基础包中每一波有2个Boss级大怪,一共6个Boss;而这个 KS 包里则一口气为每个波次提供全新的全彩大画版本大怪6只,合计18只!这意味着,在玩家部队得到增强的同时,外星异种也在同步增强!下图中,第一张图是基础包中 Wave1 的2只 Boss,第二张图则是 KS 包附带的 6 只 Wave1 大怪!
11
12
除了船新版本的士兵、装备、怪兽外,分支机构也有了更多选择,同时相比原来的常规尺寸卡牌,做了一套「超大尺寸版本」,这样放在桌子上,就不会淹没在卡牌大海之中了。
14
在新增分支中,我最喜欢的是 Xenos Containment,可以翻译为「异种收容所」之类意思,但我习惯称之为「动物园」。它的能力也非常有趣,除了游戏开始前可以将任意2张3费以下的护甲或科学卡牌加入牌库外,每次部署部队时可以从异种牌库中抽取一张牌作为自己的士兵、部署到任意玩家的战线上,同时将其能力更换为每轮可以替其他士兵抗伤害一次。这样有个很大的好处,就是降低了对士兵数量的需求,可以将购买士兵的资金用于购买装备然后对己方4路战线同时进行防守。万一抽到一只大怪,就赚翻了,不仅等于消灭了一个大怪,还可以为己所用,成为巩固防线的一道工事。
10
在 DBG 这个大类之下,无论是早期的《领土Dominion》还是前两年推出的科幻战斗主题《星域奇航Star Realm》,都是桌游圈的传奇产品。但是 DBG 的缺点也很明显,如领土,节奏过慢,几乎毫无代入感;如星域奇航,虽然节奏快了很多,但战斗过程颇为枯燥,并未脱离自「领土」以降的线性的「买牌、构筑、Combo」的窠臼。
《XenoShyft: Onslaught》则刷新了我的 DBG 游戏排行榜,结结实实的成为我目前玩过的最佳 DBG 游戏,甚至在合作类游戏里也能排到前三名。激动之下,慌忙去亚马逊下了一单《Clank!》,想尝试一下另一款传奇 DBG,看一看坊间流传的将 DBG 与 Rouge Crwaling 完美结合的游戏到底是什么样,它和《XenoShyft》相比,二者谁能更胜一筹呢?


最后贴一下我定制的一款《XenoShyft》牌垫,我玩卡牌游戏喜欢做牌垫,在网络上找到素材后,直接淘宝定制一个,3天送达,相比基础包自带的纸卡牌垫来说,体验好了不止一点点。素材来源 BGG。
13

Tagged : / / /

技术部门团队管理的一点心得

最近半年公司一直在对整体业务后端数据存储做大修改,由我负责开发核心的数据存储、拉取组件,这个组件以 gRPC 为协议,完全重构了早先的 Java 业务,即将部署到公司线上产品以及机构产品。除了数据存储拉取以外,其他组件之间也统一使用 gRPC 协议,这种情况下,需要一个简单易用的 gRPC 接口测试框架对各个接口进行压力测试。
而此时,我刚开始管理公司的测试开发团队,团队的常规任务是完成开发团队的测试需求,但最重要的任务是为开发团队提供简单易用的测试工具。总的来说,更偏重于开发而非测试。因此近期测试开发团队的最重要任务就是搭建一个上述框架出来,保障即将上线的新产品顺利交付。
目前团队只有我和另一个新入职的测试工程师(正在招聘手工测试员一名)共二人,由于测试工程师并无开发经验,刚开始上手开发有一些障碍,因此对稍微复杂的开发任务表现出无力感。
在这种情况下,团队管理出现几个挑战:

1. 新入职员工对工作内容不熟悉、以及技术上有欠缺,无法独力完成项目
2. 团队人数较少时,人事关系容易出现扭曲,表现为团队负责人与成员过于亲密或过于疏远,这两种情况都会伤害团队未来的发展。
3. 新成立的部门往往被委以重任,甫一成立就会面对攻坚战类型的技术难题,而此时恰恰是作为新生儿的团队最脆弱的时候。

针对挑战一,我的解决方式是,结伴编程快速提升工程师的基础开发能力,并使之在短时间内熟悉公司的技术栈和代码规范。这段时间压力会很大,学习内容也会很多,但是要求并不能放松,需要管理者持续关注工程师的进度和心态,对成员烦躁、失落的情绪及时进行安慰和疏导,同时在某些环节进行必要的技术辅助。
针对挑战二,首先避免过分亲密的关系,保持普通的社交距离,同时也在处理「挑战一」的时候让对方感受到你的关心。张弛有度,会使双方关系有序的发展下去,也为团队的长远发展打下基础。
针对挑战三,要和部门的上级主管进行沟通,确定部门的目标方向,然后主动将目标按优先级一一列出,根据实际情况向上级索要资源(要么给人,要么给时间,要么降低任务量)。以我的经验,能够主动索要资源的团队,往往是资源最充沛、进度最快的团队;对于管理者来说,一个能够合理索要资源的下属,也大概率是一个有思考深度和执行力的团队成员。
在数年前做运营的时候,团队管理就是一个我很重视的问题,每个工种对人有不同的影响。例如运营部门的基础运营成员往往看不到职业发展的前景,进而转行到其他行业;一线工程师则埋头于技术,疏于梳理工作内容和工作前瞻。这样其实给团队管理提出了很大挑战:作为管理者,到底能在多大程度上纾解这些职业对成员的负面影响、并提高团队运行效率?
在前些天给 CTO 提交的一份测试开发团队工作计划书中,我提到了进行人才梯度建设。虽然测试开发团队人数不多,以后最多也不会超过5人,但是由于分工不同,必然产生事业层次的高低。在团队内部明确人才梯度,告知每个人未来的上升渠道,指明上升的途径,不仅成员会主动成长,人员流失率也会得到降低(软件测试行业的流失率非常高)。一旦形成稳定的循环,那么这个部门将能够实现「无人驾驶」,几乎自动化的在公司内部高效运转。这也是我未来的工作目标。


最近买了一款 CMON 出品的卡牌构筑类的塔防主题游戏《XenoShyft: Onslaughter》,感觉比领土好玩很多,无论美术或游戏机制都远远超过其先辈们。先贴几张图以飨读者,后面会写一篇文章,来介绍和评论一下这款游戏(前两张图是我拍的,图中还乱入了我的猫「三十」。最后一张游戏图是 Google 来的,仅供示范)。
WechatIMG55
WechatIMG56
Xenoshyft-Board

Tagged : / / / / / /

我是怎样自学编程并找到第一份工作的

这是今天我发布在知乎上关于『自学编程的人,都是怎么找到第一份软件开发工作的?』的一个回答,链接在这里,喜欢的老铁可以去帮我点赞刷一波666

Link: https://www.zhihu.com/question/25034235/answer/295451575

我本科专业是政治学,28岁开始学习编程,29岁找到工作,现在马上30岁。现在一家互联网创业公司里做 Python 后端开发,写了非常核心的后端组件,也完成了公司90%的自动化测试,简单的、难的项目都参与过。其实我是编程弱鸡,仰仗同事帮忙,这一年学了很多。
我清楚,从自学编程到找工作,这是一个很痛苦的过程。
从学习第一行代码开始,你就很清楚自己和科班程序员有巨大差距,随着学习深入,会发现这个差距之大,以我们普通人的资质和勤奋水平,真的很难弥补。及至你终于鼓足勇气找工作,却发现竞争对手全是你仰望的『科班选手』(在我这个岁数,还会发现他们都比你年轻),会气馁,会沮丧。
心里默默念叨:真的没什么优势啊……
转行前,我在深圳一家互联网公司做运营总监,成绩斐然,搞了一些业内独一无二的运营策略,做了很多现在看来依然牛逼的运营项目。由于项目中涉及大量自动化工作内容,而我们只能人工完成,于是2015年底决定自学 Python 希望降低团队工作量,不久后做了『教练,我想写代码』的打算并离职,2016年1月开始正式脱产自学。9月开始找工作,2016年10月31日正式入职现公司,专职后端。
从找工作到入职,一共面过3家公司。

第一家公司:位于华强北附近的行业数据公司,主要工作是写分布式爬虫。

我对此毫无概念,面试的时候问用没用过数据库,回答没用过,然后做了一份笔试题,有一道题印象很深,问从1+2+3+…+100怎么计算,于是我写了个 for loop了……;还有很难的题,例如让我写一下分布式爬虫架构……最后让我回家等消息,当然是没消息。通过这次面试,知道了数据库这东西很重要,于是回家后马上买了一本 SQL 入门书快速读了一遍,学会增删改查。至于这家公司本身,我看了现场气氛后没太大兴趣,对工作内容也并不感冒,所以没有很遗憾。

第二家公司,腾讯。

能混到腾讯面试,我也很意外,居然没有被刷简历刷掉。我没有通过腾讯的社招平台投简历,而是在 V2EX 上看到了腾讯云工程师发的招聘贴,于是把直接发简历到腾讯云工程师的 QQ 邮箱里面,附带了一封求职信。某一天接到电话,说定个日期来一次电话面试。腾讯的这场电话面试是我最紧张的一场面试,电话期间被问及冒泡算法的复杂度,我脑子一片空白,完全想不起来,当然是遗憾收尾。对面工程师说,其实觉得我的工作态度非常好,而且之前的运营工作经验说明我善于利用工具解决问题,只要技术水平达到他们的最低标准,就很乐意让我加入,只不过……

重点说说第三家,现公司,米筐。

最早在拉勾看到米筐的招聘信息,投了然后被拒。然后在 V2EX 上(又是 V2EX,想找工作的朋友一定要重视这种社区)看到他们的招聘贴,继续发简历,同时附上了求职信(这封求职信起了关键作用,后面会细说)。去公司所在地(当时公司在深圳一个别墅区里租了几间房子)面试,和 CTO 简单聊了一下自己学过的东西、写过的代码,然后给我留了一个作业,就是在2周内学习冒泡、插入、选择、希尔、归并、堆、快速,桶排序,并用代码实现。
接下来的2周我足不出户,靠着一本红色的《Algorithms》、一本《算法导论》以及网上的零散内容,大致知道什么意思,然后面向 Google 编程,最后实现了。发邮件回复 CTO 后,1小时内得到回复,说不错,但是没有函数、没有继承,就是一堆命令的堆积,让我用 类 来改写一遍,时限1周。
继而又是兵荒马乱的1周。CTO 第三次发来邮件说不错,但是有几个技术细节和我讨论一下,然后再让我把排序内容输出为表格并增加自动化测试进行验证,时限又是1周。
这次稍微简单一些,但是从没写过测试,也没输出过表格,所以学习了几天,然后实现之(这里有个插曲,我当时的『表格』就是在命令行里绘制一张表格出来,现在想想 CTO 可能是想让我输出成 csv 之类的文件)。这次邮件之后,CTO 通知我第二次面试。这次面试我自觉带上了开发用的 Mac,现场也确实用到了,简单讨论后,CTO 说恭喜你加入米筐。
以上是我仅有的三次面试的经历,第三次就找到工作,只能说自己运气不错,另外求职技巧也有一些可以分享的。
技巧1:良好的邮件习惯
标题写个人基本信息、应聘岗位等,正文简要介绍自己,附件包含 docx 和 pdf 格式的简历各一份,然后附上一封像老朋友面谈一样的诚恳的求职信。
技巧2:求职信
从投腾讯简历开始,我在太太的帮助下认真的写一封求职信,详细介绍自己的优势、劣势、以及对新工作的期望,在信中表达出极为诚恳、诚实的态度,而非吹牛逼、忽悠。记得在给米筐的求职信里我写过『知道自己的水平和其他工程师有差距,所以并不要求工资水平和别人一致,只求多一点实战机会、多一点成长』。因为我也面试过不少人,深知市场上的聪明人太多,老实踏实的人太少,所以装一装老实,可能算是一个蛮突出的『竞争优势』吧。
技巧3:不要海投,不要投 HR 邮箱,直接发简历到工程师邮箱
我们这种自学编程的人,绝大多数水平真的不行,没有相关工作经验,没有相关学历。类似我当年不会用数据库、不知道多线程多进程的区别和用途,海投简历只会收获海拒。因此最好能绕过 HR,与工程师直接联系(例如腾讯那场面试,如果我走正常招聘程序,不可能获得面试机会)。
我的工位
基本上我就是这样在自学编程后找到第一份开发工作的,到现在,工资数倍于入职的起薪,深深觉得米筐给我的东西,远远多于我给米筐的,很感激公司同仁的宽容与善良。写代码是一项实践性的工作,不进入生产环境,很多东西自己是搞不懂也不会接触到的。希望各位自学编程的人,都能早日找到工作,快速学习和成长,不断进化和突破,最终超越自己。

Tagged :

steemit 流量哪里去

pic_proxy_meitu_1
最近连续看了一些 steemit 的介绍文章,我也动了上去写作的念头,毕竟博客被墙久已,访问量不高,实际上纯粹是一个日记本。
在读了 steemit 的官方入门指南后,我发现想要在这里有出众的访问量,还真是需要花一番心思。研究了一下中文写作的榜单,似乎目前 steemit 仍处于开荒阶段,大家的写作内容也偏向生活和琐碎,很像新浪博客和新浪微博刚刚兴起时候的样子,高流量贴的主题性并不强,看起来整个 steemit 上,大家更喜欢窥探彼此的生活(这里专指中文写作者,英文内容则相对丰富的多)。
在这个流量逐渐兴起的领地内,主题性强、写作领域较集中的作者,或许会在漫长的优胜劣汰中取胜(也许并不漫长),而日记型作者将逐渐成为边缘。这是网络流量的特性导致的,所有以内容获取流量的网络圈地运动,无不以『主题』为圈地的围栏,即便如微博、知乎等巨量流量的集散地,其内部也是如此——流量在比特海中寻找着相似的彼此,然后聚合到一起,形成了相对封闭的流量圈子。
steemit 的无审查机制(其实也是有审查的,low rating 文章会被隐藏)与现金鼓励机制的对冲,可以实现在无人值守的情况下,尽可能保障文章内容质量,这是一个很好的、但有漏洞的机制,一旦发布 low rating 内容的收益高于发布 high rating 文章的打赏收益(例如 @alexanova 发布边缘色情内容,会被打上 NSFW(Not Safe for Work) 的标签并默认『折叠』,需点击两次才能打开),则大家会忽略被隐藏的风险,尽可能多的发布类似内容。好在 steemit 的社区讨论气氛很棒,大家彼此讨论规则的合理性,这是社区区别于中心化的审查、实现自我进化的重要方式。

例如关于垃圾留言,就有这样的讨论:https://steemit.com/steem-help/@charles1/how-spam-is-killing-steemit-and-what-to-do-about-it

而作为中文读者和写作者,最需要担心的仍然是政策风险。steemit 这样的内容聚合网站,一旦规模到达某个量级,势必会遭遇防火墙。当然,这并不是网络自我审查的理由,政治写作者仍然会愿意通过一切平台表达政治异见,但想靠流量赚钱的人却要早做准备、未雨绸缪。
流量在 steemit 上仍野性的游荡着,屈指可数的几位中文『大V』,很有可能会被新出现的写作者夺走流量,这是内容迭代的趋势。所以各位写作者,留给诸位调整内容方向的时间可能并不多了,抓紧走专业化道路吧!

Tagged : / / /

树莓派3初体验之一:搭建 Python 开发环境

最近新买了一个树莓派3(购买前还考虑了 Orange Pi 等 Linux 开发板,但最终仍然选择了树莓派),主要目标是想通过折腾这个信用卡大小的 Linux 电脑,学习一下 Linux 系统知识,熟悉服务器的各项操作,顺便给自己搭建个 Web Server。
WechatIMG17
安装步骤很顺利,通过官网下载了 NOOBS 版的 Raspbian 系统,并复制到 TF 卡中,然后启动树莓派,一路 Next,很快就可以看到图形界面。然后看了一下树莓派内置的 Python 版本,发现是 2.7.9 以及 3.4.2,于是机智的我马上制定了第一个任务——把树莓派的系统自带 Python 3.4 升级到最新的 Python 3.6.2。
升级的过程是这样的:
1. 从 Python 官网下载 Python 3.6.2 的压缩包。
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
2. 解压编译
cd ./Python-3.6.2
./configure
make
sudo make install

3. 将 /usr/bin/python 的原文件删除,然后link到刚编译好的Python3命令上
rm /usr/bin/python
ln -s /usr/bin/python ~/Python-3.6.2/python

结果是虽然我把原本是2.7.9版本的python命令变成了3.6.2,但是配套的pip等工具却乱套了,一运行就会报语法错误,看来这样生变过去是不行的,于是想恢复回去,几经尝试后失败,遂格式化TF卡,重装系统。
第二次我不再 link /usr/bin/python, 而是机智的换成了/usr/bin/python3,但是依然出错,具体什么错误已经不记得了。再次格盘重装。
第三次终于成功,在命令行输入python3指向了/usr/local/bin/python3,我还没搞明白是怎么弄得,反正搞定了,明天去问问同事在哪里设置……

后来才想起来,要改环境变量里面的$PATH……这是刚学 Python 时候就遇到的问题,现在居然都想不起来了……

WechatIMG16
此时又遇到了第二个坑——Rsapbian没有安装若干必要的库,需要手动安装。
顺利配置好 Python3.6 后,我试着pip3 install requests,结果出现ssl module in Python is not available的报错,几经搜寻,发现是由于 OpenSSL 等库没有预置在 Raspbian 中,而 pip 则需要访问 https 加密的地址,故而报错。
首先,apt-get 安装这些库:
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
然后重新编译一次 Python 即可解决问题:
cd ~/Python-3.6.2
./configure
make
sudo make install

于是经过不知多少次编译,我终于装好了 Python3.6。后来又安装了 PyCharm,但实际运行中感觉延迟严重,所以这样大型的 IDE 可能无法在树莓派上顺畅运行,如果需要写代码,可以考虑轻量级编辑器(同时还有一个问题没有解决,就是如何卸载 PyCharm ……)。
最后说一下树莓派的整体感觉。
开箱之后的树莓派需要自己安装散热片、风扇、外壳,当然这些配件都需要另外购买。组装过程很简单,把散热片粘到处理器上,然后一层一层安装外壳,最后在外壳上方固定和连接风扇。如果有过装机经验,那么整个过程即为简单。组装完成后,我通过一根 HDMI 转 VGA 线,将树莓派连接至一个古董19寸显示器。
我(也是大多数树莓派素人)选择的是官方推荐的 Raspbian 系统,是 Debian 的树莓派分支。其实树莓派有大量的系统版本可以选择,例如 CentOS 的 ARM 版、Ubuntu Mate等等,可按需选择。Raspbian 的 GUI 没有 Ubuntu 那么炫酷,但是能在这么小的板子上运行如此完整而流畅的桌面版 Linux,也让人很欣喜。
目前我已经把若干连接线(视频线、鼠标、键盘)从树莓派上移除,仅剩供电线路并连上 WiFi,通过 Mac 远程登录进行管理。本来想设置一下 DNS 实现通过 hostname 直接访问主机,结果家里没有多余的机器做 DNS Server,华硕路由器的官方系统又不原生支持 DNS、我还懒得再折腾路由器,所以只是通过改本地的 hosts 来实现 hostsname 登录(我给树莓派起的名字叫做 footboy)。以后可能会在树莓派上搭建几个服务,通过 supervisor 管理;或者做几个 Cronjob 的定时任务。
WechatIMG15

Tagged : / / / /

暗黑科技物语——跑团游戏《祸不单行》原创剧本

祸不单行这个游戏,我已经跑过挺多次了,但其实依然不太熟练,因为规则泛用而限制极少,所以反而需要人们约束自己在跑团时的想象力,否则就会发生天马行空、同时让人容易出戏的剧情。例如我最近一次跑团,就生生把一个解密剧情跑成了科幻恐怖,脑洞固然够大,但是乐趣也相应的被扯淡所替代。
Pathfinder和DND的成熟之处在于大家共享一个成熟的世界观,有DM作指导,不会出现太奇葩而损坏故事背景的情况(例如牧师念了一段咒语召唤出了一架UFO)。这是泛用轻规则跑团游戏面临的共同困境。所以我对刚刚结束众筹的《命运Fate》核心规则保持审慎客观态度,虽然支持了众筹,但并不是特别看好。而即将开始众筹的《龙蛋物语》,由于具有温馨的主题和统一的世界架构、且规则简单易学,则更容易让玩家感受到跑团的乐趣。
下面这里贴出来的,是我原创的《祸不单行》剧本,以现代科技行业为背景,交织了复仇、阴谋、科幻等等元素,大致上可以发展出两三个故事走向。当然,具体玩成什么样,要交给玩家了。目前我还没有测试过这个剧本,如果有朋友对该剧本进行了测试,请让我知道,我会表示自己的深深谢意。
black_lotus
(图文无关,这是万智牌史上最有名的一张牌——黑莲花,算是卡牌游戏里面的黑科技吧……)

简介

2017年4月下旬,某市科技园区……
你站在楼顶,看着四周环绕的密密麻麻的写字楼,对未来充满茫然。科技初创公司像野草一样在这块土地上疯狂的生长,有的人一将功成、成为了坊间的神话,有的人堕入地狱、永世不得翻身。贪婪的种子慢慢侵袭每个人的心灵,而喧嚣兴旺的表面以下,则有一股潜藏的力量正在崛起……
此时,你正站在巨大漩涡的中心……
由声音最像机器人的玩家高声朗读

电影之夜

美剧《硅谷》,电影《黑客帝国》《硅谷传奇》《社交网络》

关系

亲属:① 亲兄弟(姐妹)② 命运交叉的远亲③ 夫妻④ 岳父(岳母)与儿媳(女婿)⑤ 祖孙关系⑥ 被遗弃的孩子和父亲(母亲)
竞争对手:① 两个初创公司的CEO② 黑客与网络安全专家③ 新手销售和精明的客户④ 政府官员和叛乱分子⑤ 情敌⑥ 彼此抢夺优质投资项目的风投基金经理
阴谋诡计:① 破坏分子及同伙② 叛徒③ 口蜜腹剑的『朋友』④ 卧底⑤ 某个重大秘密的共同知情人⑥ 富豪与马屁精
同一家公司:① 同为核心工程师② 技术总监职位的两位候选人③ 相同信仰或彼此高度认同的非专业人士④ 亦师亦友,面临类似的困境⑤ 你们认为彼此的工作毫不相关,事实上却恰恰相反⑥ 职场新人和公司老油条
感情纠葛:① 爱过,现在却是路人② 炮友③ 因某个原因产生了巨大裂痕的情人④ 情敌⑤ 新婚夫妇,其中一人怀有秘密⑥ 幸福美满的同性伴侣
历史渊源:① 世仇② 大学同学③ 曾经最好的朋友④ 分手的情侣⑤ 赌徒与债主⑥ 同一场战争的幸存者

需求

发财:① 通过公司上市② 通过劫富济贫③ 通过干掉某人④ 通过伤害大量无辜的人⑤ 通过盗取知识产权⑥ 通过成为网红
获得尊重:① 使所有人怕你② 大家都为你着迷③ 获取权力④ 让自己成为英雄⑤ 变成行业权威⑥ 人们不会再提过去的事情
毁灭:① 毁灭证据② 毁灭某人的机遇③ 毁灭一家公司④ 毁灭一个人的声誉⑤ 自我毁灭⑥ 毁灭这个行业
逃离:① 努力忘掉曾经的惨剧② 逃离障碍重重的职业生涯③ 安静的逃出垃圾处理厂④ 逃离猛烈的围攻⑤ 逃离巨大的骗局⑥ 在警察发觉前逃离这座城市
复仇:① 向凶手复仇② 为老百姓复仇③ 击败曾经羞辱你的对手④ 因嫉妒而摧毁他人的生活⑤ 为情所伤,向曾经的爱人复仇⑥ 拿回你应得的东西
查明真相:① 凶杀案的真相② 某项高科技的真面目③ 那些钱到底去哪了④ 自己究竟是谁⑤ 服务器里到底存储了哪些内容⑥ 那项合同背后的阴暗面

地点

办公场所:① 键盘声噼噼啪啪的办公室② 满地烟头的楼道吸烟区③ 有淡淡臭味的厕所④ 安静的会议室⑤ 安保监控室⑥ 日光充足的顶楼
声色犬马:① 夜店② 美国人开的桌游吧③ 高档自助餐厅④ 喧嚣的派对⑤ 高尔夫球场⑥ 按摩店
商务场所:① 铺着大理石地砖的豪华谈判室② 简陋的路演现场③ 市长办公室④ 顶级科技巨头的总裁办公室⑤ 大学实验室⑥ 到处是创业者与投资人的咖啡厅
闹市:① 兰州牛肉拉面店② 量贩式KTV③ 廉价的私营幼儿园④ 烧烤摊⑤ 便利店⑥ 公共停车场
法律:① 法院庭审现场② 收费高昂的律师事务所③ 到处是鲜血的杀人现场④ 法院物证处⑤ 街道派出所⑥ 工商局
私密的地方:① 寂静的豪宅② 私人办公室③ 存放大量现金的秘密仓库④ 狭小的出租屋⑤ 神秘的宗教仪式场所⑥ 更衣室

物品

电子产品:① 一台被入侵的服务器② 人工智能机器人③ 崭新的苹果手机④ 据说可以连接人脑与电脑的『脑波模拟器』⑤一枚优盘 ⑥ 脏兮兮的机械键盘
武器:① 钝斧头② 手枪③ 丝袜④ 一行破坏力惊人的代码⑤ 剧毒氰化物⑥ 古代宝剑
一句话:① 『既然如此,那就再见吧……』② 『让我们一起改变世界!』③ 『你……是救世主……』④ 『都是谎言。』⑤『他们觉得你不行,我不这么认为。』 ⑥ 『对不起。』
秘密:① 伪造的合同② 针孔摄像机③ 奢华酒店的房卡④ 程序里的『后门』(即故意留下的漏洞)⑤ 塞进某人口袋的潦草字条⑥ 一小袋钻石
动物:① 草泥马② 烈犬③ 野猫④ 蛇⑤ 兔子⑥ 食人鱼
服饰:① 夜行衣② 高级西装③ 防弹衣④ 破旧的T恤⑤ 红色的斗篷⑥ 假发

Tagged : / /

新玩家入坑,你该试试哪些桌游(战争类)

这篇文章是写给一家桌游吧的稿件,介绍了两个规则简单、节奏明快、还可以痛快对决的轻策略桌游,如果你对桌游有兴趣,大可不必从那些主题较低龄的游戏入手,战争主题会玩的更痛快。当然,这取决于你的偏好。

桌游在国内是一种偏小众的娱乐活动,几个人、几杯饮料、几张版图、几个骰子,就能惊险刺激的度过一个下午。相比其他娱乐方式来说,一方面费用不高,另一方面趣味性爆棚,加上可以与朋友面对面的现场互动,几乎是社交与娱乐的完美交集。
一般来说,刚接触桌游的玩家并不会选择很『重口』的游戏,那些一局动辄3-4个小时的重度策略游戏应该不会出现在新入坑玩家的桌面上。原因在于这样的游戏需要一群硬核玩家的参与,而新人仅凭自己很难构筑这样的圈子。
所以老玩家向新人玩家推荐桌游时,常常会推荐一些清新、简易、对抗性偏弱的游戏。然而作为曾走过一圈冤枉路的『老新人玩家』,我只想说:别给我推荐什么『妙语说书人』了好吗!我对清新、超轻口的游戏无感!我只想来点规则简单、有些策略深度、容易安利给身边小伙伴的游戏!
如果你和我一样,好,恭喜你少年,我这有两套关于拯救世界的桌游便宜卖你了……不好意思走错片场,我是说有两款桌游要推荐给你,而这两款桌游有一些共同特点:超便携、规则简单、战争主题、游戏体验短平快!这样的游戏,实属居家旅行杀人越货必备佳品,完全可以靠它们把基友拖进桌游的深坑之中!

一、星域奇航

《星域奇航》是一款出版于2014年的双人对战卡牌构筑游戏,以太空战争为背景,目前在全球最大的桌游主题网站Boardgamegeek(简称BGG)上排名桌游总榜的第80名。全球桌游总榜第80名是什么概念?当当当,各位同学请看黑板——2016年全国高考人数960万人,北大清华共录取本科生约7000人,录取率约为万分之7;而目前BGG共收录桌游8万余款,第80位相当于在总榜的前万分之8。鉴于这个纸牌游戏的出品迄今已有3年时间、排名会略微下滑,《星域奇航》在桌游圈绝对是一款『高考状元』级别的顶尖桌游!
starrealms
这款桌游的主要机制是牌库构筑(DBG),你每次从牌库抽5张手牌,然后或购买新牌或攻击对手。随着游戏进行,牌库会越来越丰富,组成的combo也越来越强大。星域奇航的爽快之处,就在于明明还有几十点权力点(实际就是你的生命值),却被一套连招一回合秒杀,这种体验目前我只在《星域奇航》中遇到过。但是请不要误会,这游戏并不是运气定输赢,行云流水的combo能否实现,完全依赖于你构筑的牌库质量,这就需要你认真对待每一次选择、最终成就一代宇宙霸业了。
1
《星域奇航》只有两盒扑克牌叠起来的大小,这款如同古龙小说中高手对决一样刺激的对战卡牌游戏,一般会在15分钟内结束战斗,要么双方死死咬住、以分毫之差致胜,要么发动精心构筑的宇宙舰队将敌人一波带走,无论输赢,都会让你在游戏结束之时一拍桌子,大喊一句:
『店小二,收拾桌子,洒家要与这厮再战三百回合!』

二、小小史诗王国

Kickstarter近年来神作频出,一款能成功众筹的作品,往往也能取得相当棒的市场销量。《小小史诗王国》最早由Gamelyn Games在BGG上放出了该游戏的PNP版本(Print&Play,『打印即玩』版本),并一举夺取了2013年GoldenGeek的年度最佳PNP游戏奖。随后在2014年,《小小史诗王国》开始Kickstarter之旅,顺利通过众筹。2016年,由MYBG引进、乐聚桌游独家代理,开始在中文地区发售。
1463379611118078
《小小史诗王国》的标题即体现了它的最大特点之一——小!在长宽高为18x12x4(cm)的小盒子里,包含了16个具有迥异科技树的种族,一大堆Token,以及8张正反面共16种地形的游戏版图,是一款超级微缩的奇幻主题经典4X游戏(explore探索/expand扩张/exploit开发/exterminate战争),你作为某个奇幻种族的一国君王,安排手下或探索远方、或开发资源、或以武止戈、或入侵邻国,同时不能忘记要研发更强大的魔法、建造更宏伟的高塔……听起来这个国王当的好累哦,其实在游戏过程中,这些『国策』的选择深刻体现了你对当前敌我形式的分析和应对,你不会出现茫然无措的情况,相反,面对强大的竞争对手,你总是会嫌自己的行动机会太少呢。
《小小史诗王国》的游戏时间同样不长,大约在30-40分钟。一个小小的纸盒,包含了这么多变数,是接触工人放置类游戏的最好选择。还记得我上文说到过的那些游戏时长能轻松超过3小时的硬核类游戏吗?其中很多也用到了工人放置这个桌游中的重要机制,而玩过《小小史诗王国》后,你也可以去尝试一下那些硬核桌游而不用担心面对复杂情况无所适从了。
TEK_SETUP_meitu_1
这款作品能在方寸之间容纳这么多的策略与要素,在我亲身体验之前是完全没有想到的。每次游戏过后,我的耳边都会想起古罗马军事家韦格蒂乌斯的那句名言:
『你想和平,就要准备战争!』

后记

桌游仅仅是游戏,没有高下之分,其实无所谓入门不入门。这篇文章的目的,只是希望能帮助那些模模糊糊知道自己的喜好、但又一时无法找到适合自己的桌游的玩家。如果你能通过我的文章试着接触一下这两款游戏、进而对更多的桌游产生兴趣,那这篇文章就已经完成了它的使命。
最后,也是最重要的——无论如何,一定要玩得开心哦!

Tagged :

代码、桌游、结肠息肉

代码

和郭老师在泰国过完了2017年春节,回深后就很快完成了三个月的试用期,成为一名正式工。我的工作内容也从开发变成了测试,强度相对低了一些,让我松了一口气,不过也面临很多新知识的学习。这段时间,深入学习了 Selenium/PhantomJS 等前端测试工具,感觉前端测试比后端难不少,主要在于测试用例很不容易写完善,往往代码写好了但因为各种网络原因就是无法通过、然后自己再去处理网络超时、页面加载错误之类的问题,似乎前端的不稳定性远远超过后端,需要对各种情况进行处理。
除了学习 Selenium,还在朱老师的推荐下买了一本《单元测试的艺术》,不过这本书以 C# 作为讲解语言,看起来略吃力。同时买了早就想一睹为快的《Python绝技:运用Python成为顶级黑客》,这本书绝对不能带到公司去,不然一定会被同事笑话……

桌游

前段时间由于还没适应程序员的工作强度,完全没有时间玩桌游,现在闲暇时间多起来,已经可以有机会约朋友玩桌游了。原本以为自己对桌游的热情在入坑一年多以后会慢慢消退,没想到不减反增,还有了更大的热情去探索自己早先并不了解的桌游分类。
三周前,加入DM熊猫的SDE(Super Dungeon Explore超级地城探险)团,玩了一次纯模型主题桌游。说实话并不感冒,玩起来和 DND/Pathfinder 的战斗阶段毫无二致,而且自由度低很多,不知道乐趣何在。一下午也没有完结一场战斗,节奏慢的要命,让我对这种战斗为主的模型游戏很失望。手机摄像头坏掉了,拍的照片很渣,将就看一下。
DSC_0604_meitu_1
DSC_0603_meitu_3
看着就很无聊吧?那你的感觉和我一样诶!
不过还好我自己最近也买了一套模型游戏,就是大名鼎鼎的《约德尔战斗学院Mechs VS Minions》!目前在BGG上居然排到主题类桌游第6名!相对价格不菲的SDE,这套桌游的超大箱体、超多模型、5个预喷涂的精致手办(4个英雄+1个超大Boss)简直是在以赔本价的450元人民币销售,难怪 Dice Tower 的节目里3个主持人大约花了1/3的篇幅在感慨《约德尔战斗学院》有多超值……
超大箱体入境!
mmexport1488284721287
mmexport1488284756062
mmexport1488284795099
mmexport1488284813244
mmexport1488284816149
mmexport1488284823344
mmexport1488284829504
mmexport1488284832627
《约德尔战斗学院》是合作类桌游,玩家扮演4个约德尔人驾驶机甲在战斗中完成特定任务。
两周前,张老师、郭老师和我在家中完成了这套游戏的第一个任务(11个任务分别密封在11个牛皮纸信封中),三人需要顶着小兵的猛攻下将炸弹推送至维修站。游戏规则简单,容易上手,同时也非常欢乐。强烈推荐用游戏配件中的沙漏进行计时,会让游戏进程变得异常紧凑,从而产生意想不到的状况。我们三人经常在沙漏的催促下手忙脚乱的做决定,使机甲颠三倒四的乱跑,确实符合约德尔人的不靠谱性格。
mmexport1488641701615
mmexport1488641704824
游戏机制为行动编程,很新颖的机制。由于是 Riot 公司官方出品的 LOL 主题桌游,粉丝量之巨大毋庸置疑,这也可能是这款桌游能在发售后迅速攀登至如此高位的重要原因。不过遗憾的是,游戏设计师在 Reddit 的 boardgame 板块和大家交流的时候表示,这款桌游仅仅是 Riot 的玩票之作,不会成为公司的利润点,言下之意就是估计不会有续作或扩展了,让人非常伤心。
mmexport1488641712168
mmexport1488641721340
除了《约德尔战斗学院》,还买了向往已久的《银河卡车司机》。这是一款欢乐向的策略游戏,玩家在规定时间内拼凑出一家太空卡车,然后进入太空装载货物,期间还会遇到人贩子、陨石等危险,灾难过后飞船往往濒临解体。到达终点时,再根据载货价值和船体损伤,计算每个人的分数。
mmexport1489673558292
mmexport1489673547014
mmexport1489673525801
《银河卡车司机 Galaxy Trucker》有安卓版 App,强烈推荐下载试玩一下,很有趣的游戏!由于刚刚入手,还没有机会试玩,因此没有游戏现场图片,偷一张国外桌游店的照片做演示,见下图。
137832221538

结肠息肉

其实半个月来最大的事情,是做了一场小手术,切除结肠息肉。大约一年前,我右侧肋骨下方在吃完饭后经常会有隐痛,剧烈的时候需要用手抵住,同时最近几个月一直拉肚子。一直以为是胃或胆的问题,2016年12月份做了胃肠镜才知道,胃口没什么问题(其实也有慢性胃炎),关键是结肠里长了一个大息肉,需要手术切除。于是上周二做了手术并一直在医院休养,这周也无法出门,只能在家里上班。
手术后无法进食饮水,完全靠点滴葡萄糖提供能量。连续3天水米未进的我居然并没有饥渴感,大为惊奇。术后4天才能进食流食,同时持续葡萄糖注射。从周一入院到周日出院,一直是郭老师悉心照顾并陪床,我的精神状态很好,反倒是郭老师在几天操劳下迅速憔悴了很多,令人心疼。出院后我俩都大舒一口气。
在家工作的日子也不轻松,除了需要按时坐到电脑前写代码、第一时间对同事的需求做出反馈外,还要时刻对抗自己的懒惰。所以说实话,这一周的工作效率还蛮低的,难怪大家还是要去办公室上班的,程序员可能更是如此。
算了算,手术后至今10天,居然瘦了10斤,主要原因是医嘱提到的饮食规范:不可吃粗纤维的蔬菜和肉,只能吃烂面条、粥等物。我本人的精力在这几天一直很充沛,可见目前的饮食也是可以提供充分的能量,减肥所谓『三分练七分吃』诚不余欺也!希望把这个减肥势头保持下去,不要浪费了这段强制控制饮食的经历。

其他

除了上述的几件事,还有其他一些功课压在我心头。例如一篇关于断网后如何利用互联网的稿件,我已经拖欠了约一个多月,每每动笔都会犯懒,不知为什么。
在泰国清迈期间一口气看了 Neil Gaiman 的《American Gods》前几章后,至今也没再看几页,也颇为焦急,希望自己早点看完。
几本积灰的技术书都还没看几页,总没有一个学习计划去填充自己的知识空白。
一直想写的微信群助手迄今没动笔,只是下载了几个库试着发了几条消息而已。
『编程随想』维护的 Resilio Sync 文件夹(就是那个翻墙软件大合集)里面的翻墙软件版本已经很老旧,我一直想搞一个能及时更新的新同步文件夹出来,也拖了好久。
要做的事情太多了,而我最想做的为什么永远只是玩……

Tagged : / / / / /

关于开发流程的一些体会

工作近5周,共完成了2个项目(第二个项目已经基本完成测试,准备收尾中)。第一个项目,是用爬虫抓取数据,然后做好 API 供用户使用。第二个项目,是扫描僵尸用户,发邮件唤醒,如未唤醒则关停僵尸用户的进程。
做这两个项目的过程中各有各的体会。
首先,是关于解决问题的方式。做第一个项目时,刚刚进入公司,很难适应工程师文化,加上和同事不熟悉,脸皮薄,不愿意问问题,甚至没有仔细确认需求和工程方式就动手开搞,最终耽误了不少时间。在工程上,沟通极为重要,工程师不是低着头闭门造车的,恰恰相反,工程师们是用集体合作的方式共同搭建一个或繁或简的系统,最终完成个体无法完成的大规模工程。这应该是工程师们在一起工作的最重要意义之一吧。
工程被分割成一张张工单,并不意味着其整体被切割成无关联的个体。在完成工作的时候需要尽可能多的理解工程的有机性。例如我将爬下来的时间序列存入数据库时,每条数据的时间都被我存成了str,于是在后期制作 API 的时候就遇到了一些问题,最后需要通过将其转成datetime来解决。类似的问题说明我在完成某件工作时,并不知道这件工作在工程中的位置与意义,这就需要多问和多做了,在对整体熟悉了以后,自然会逐渐清晰。
其次,是关于单元测试的重要性。其实『单元测试』这四个字,有弱化其意义的副作用。我在做第二个项目的时候,由于内部处理数据的逻辑比较复杂,导致大大小小的 Bug 一大堆,每次提交都认为自己已经做得差不多了,但还是在 code review 时被打脸,来来回回提交了若干次,花费大量时间,甚至同事成了我的人肉 Debug 处理器。最后同事说,你还是写一些测试用例吧,覆盖的情况越多越好。
果然,写了一百多行的测试用例后,将单元测试完成,自然发现了一些之前很难发现的 Bug,无论对我还是其他工程师来说,都节省了大量调试改错的时间,多灾多难的第二个任务也随之迎刃而解。经此一役,我对单元测试的意义恍然大悟,其实单元测试并不仅仅是『测试』这么简单。在『测试』的背后,其实是将代码化整为零、各个击破的写作过程,因此单元测试的写作时间,应当与程序本体同步,也即『写一个函数,就写一个测试』,二者几乎是同步完成的。这样看上去花了很多时间在设计测试用例上,其实是规范了自己的思路和代码,同时大大提高了后期的可维护性。
在明白了第二点(也就是单元测试的真正意义后),觉得自己仿佛突破了一个模糊边界——一个软件工程师和业余代码爱好者的界限。虽然现在代码依然很烂,但是本着对代码负责的态度和对自己职业的尊重,我会把以后写下来的所有代码都同步加上单元测试,配得上一个专业人士应有的严谨。
以上就是我在完成了两个项目后的些微体会。工程师的快乐,是由一个个微小的痛苦组成的。此生竟有幸成为工程师,真是一件幸福的事情。

Tagged : / /