写程序真开心啊。

前阵子面试频繁的时候, 有一个工作了七八年的兄弟在简历上写, 自己大学学的是Java, 工作以后做的是全栈, 所以有十多年的Java开发经验, 七八年的前端开发经验, 还有若干年的Blabla…

当时周丞和我就很无奈, 假如工作经验真的是这么算的话。 那中学时期就开始参加OI的同学, 岂不是都是十年软件开发经验起步了?

经验

我一直觉得软件开发的, 或者说程序员的, “工作经验”是一件很扯的事情。 因为假如程序员停止了学习、思考与进步, 那么一个有十年工作经验的人, 只不过是工作的第一年学习了一年的工作经验, 然后又重复了九年。 真正的十年工作经验, 应该是那些“苟日新,日日新,又日新。”的人。

有一句俗话叫 朝闻道,夕死可矣。

这句话的意思就是一个人早上听到了一个很科学的道理, 想了一天, 到了傍晚终于发出了“死可矣”(すごい)的感慨之声。

当然, 人的一生不可能每天都在学习崭新的姿势, 就算某一天了解到了新的知识, 也不一定能够消化吸收, 说不定隔夜就忘了。

不过我们人类这种生命, 正是所有过去的积淀。 我们读的书、 吃的饭、 做的事情都会消失, 但是我们的生命会越来越厚重。

举个栗子, 我是记不得我写过的每一行代码的, 但是我能清晰地感觉到, 我身上有些特质, 和写程序有着一定的羁绊。

  1. 科学
  2. 试试看
  3. 问个问题

Quora上有个问题是 聪明人里面,懒人是不是比勤奋的人贡献更大? 有个回答我非常喜欢:

“I divide my officers into four classes; the clever, the lazy, the industrious, and the stupid. Each officer possesses at least two of these qualities. Those who are clever and industrious are fitted for the highest staff appointments. Use can be made of those who are stupid and lazy. The man who is clever and lazy however is for the very highest command; he has the temperament and nerves to deal with all situations. But whoever is stupid and industrious is a menace and must be removed immediately!” — General Kurt von Hammerstein-Equord

在我眼里,我的下属们一共占了四种属性: 聪明的、懒的、勤奋的、蠢的。 他们每一个人都占了两种属性以上。

那些既聪明又勤奋的人会做最重要的事情, 同样地,那些又蠢又懒的人也只会做最不重要的事情。 一个聪明的懒人也可以做很重要的事情,他有能力去处理各种事态。 假如一个人不仅蠢,生产力还巨高,那得马上开掉他! by 一个可能有名的将军

我部分赞同这个答案, 因为我不仅自认为是一个聪明的懒人, 我还认为大部分好的程序员都是聪明的懒人。

程序员很喜欢干的一件事情就是“自动化”。 GitHub之前有个很火的Repo (NARKOZ/hacker-scripts), 讲的是有个程序员离职以后, 其他同事在整理他写的程序。 发现他不仅写了一个自动泡咖啡的程序, 还写了一个“假如晚上九点电脑还开着,就随机编一个理由,给老婆发短信说会晚回家…”

所以我想说的懒, 其实是“程序员式的懒”: 不是不想干活, 而是不想干重复性的工作; 相比于简单但重复的解决办法, 更愿意选择工作量大但一劳永逸的办法。

毕竟聪明人支起世界, 懒人改变世界嘛。

科学

我有两个口头禅, 一个是“这很科学”, 一个是“这不科学”。

一方面, 我认为“万物都有自己的规律”, “物理世界存在大一统定律”, “事出反常必有妖”, “程序不会自己出bug,都是人写的”, “多用git blame我们就能找到那个人了”。

另一方面, 我也认为“人类是愚蠢的,是短视的”, “所以很多规律人类都没发现,比如关于人类自己的”, “像老师、HR、销售等,跟人打交道的,都是厉害的”, “更别提艺术那种,一千个人就有一千个freestyle的学科了”。

比如程序员修bug, 首先第一步要做的就是问一句: “能重现吗?怎么重现?” 假如一个bug不能重现, 我们就会说: “我这咋是好的,重现不了,不修了。” 假如一个bug不能重现, 但是它很严重, 必须要修复, 我们就会感慨: “卧槽,这不科学啊…”

试试看

直到目前为止, 程序都是为人服务的。 人是活在现实生活中的, 所以实践证明一切。

假如两个程序员battle, 基本上一句话可以终结: Talk is cheap, show me the code

因为万事万物都是有规律的, 一定的条件下, 试一次就可以学到了。 比如压缩食物怎么样?试一试呗。 创业公司是什么样子?试一试呗。 Kotlin和Java有什么不同?试一试呗。

就像诸葛亮用标记重捕法发现南蛮之地盛产孟获一样, 程序员也经常会用控制变量法来尝试。 比如之前说的重现一个bug, 试试ios,试试安卓, 试试win xp,试试有360的电脑。 世界这么大, 我们总会再见的。

问个问题

小时候看过一个比喻, 说人的知识是一个圆, 知道的是面积, 不知道的是周长。 (翻译成鸡汤就是“你知道的越多,你不知道的也越多”) 果然鸡汤披上了科学的外衣, 就额外迷人呢…

写程序做技术也是一样, 学到了更多的知识以后, 觉得未知的世界更大了。

大四的时候第一次实习, 那之前只是把git理解为一个ftp一样的放文件的工具, VIM更是从没用过, 所以我心中的问题那是多的一比。

我实习的公司QAD给每个员工会安排一个Mentor, 可以类比于“老师傅带徒弟”的模式。 第一天入职的时候我找到自己座位坐了下来, 发现离我最近的同事叫Justin, 于是问他:“你是我的Mentor吗?” (那时刻有种Saber问士郎的蜜汁即视感…) 他笑了笑说:“我也不知道啊” 最后发现其实他知道自己是我的Mentor -.-

一开始我经常会问他git怎么操作, 比如说John往dev分支提交了最新代码, 我想用他的一个函数咋办。 他就会站到我身后, 一个字母一个字母把命令说出来, 然后让我敲一遍: “打开Putty,git,G I T,空格,rebase,R E B A S E…” 因为有种自己被当成智障的感觉, 所以我压力山大地操作完了以后, 又上网查了一遍我刚才做的操作是什么意思… 这样来回几遍以后, 我发现自己收获很大啊, 之后git相关问的就越来越少了。

所以直到现在, 我还是很愿意当一个智障的好奇宝宝。 先看,再问,后想, 只要问到了,就是学到了。 每个人都有自己独到的厉害之处, 这个道理就跟老祖宗苏轼说的一样:

吾上可陪玉皇大帝, 下可以陪卑田院乞儿, 眼前见天下无一不好人。

苏轼写文章的能发这样的豪迈感慨, 我写程序那也可以一样豪迈呀 :)