作者:天驰
那是2011年夏天,北京的空气还不呛,颐和园的荷花正香,昆明湖上的小船荡起双桨。偶尔迎来个晴空万里,小伙牵着姑娘,南锣鼓巷、烟袋斜街、荷花市场。哟,当个诗人如何,不羁放纵,浪荡天涯。那年我18,坐在后海 Lotus Blue 吧台,这样想。
若干年后,我就职微软,成为了一名工程师。我写诗,逻辑的诗,神秘、优雅、价值连城。在这里,我们就谈谈计算机行业。
一个段子说,哥们儿电脑坏了,请来朋友帮忙。朋友把自己手机连上电脑,然后在手机上不停按键,只按0和1,速度非常之快。哥们儿不明白,也不敢问。4个小时之后,朋友说,好了,电脑上是全新的 Windows 系统。后来,这位朋友去了美国,杳无音讯…
信息时代,一切都是0和1。计算机科学里有层级结构(Abstraction layer),最底层的比特(Bit),就是0和1。一定规律的0和1构成机器语言,处理器通过识别机器语言来执行指令,加减乘除,存储读取。人不能直接写机器语言,这是段子的笑点。当然,你也可以说按键手机或者去美国是笑点。机器语言之上是汇编语言,简单来说就是把一定排列的0和1直译成可以读懂的符号,反之亦然。在汇编语言 x86 AT&T syntax 里,addl %edx,%eax 的意思是,把名为 edx 寄存器里的数值和名为 eax 寄存器里的数值相加,再把结果写入寄存器 eax 里。人们可以写出有意义的程序了,但细节过于复杂。一个简单计算程序可以实现,一个文本编辑器就会有百万行类似指令。这时就要在层级结构里再上一步,也是大家熟悉的一层,程序语言。常见的有 C, Java, Python。程序语言不是直译汇编语言(试想直译意义何在?),而是自动化了绝大部分的底层细节,并引入了软件工程概念。这些程序语言最终会通过编译器或解读器,转换成汇编语言、机器语言或者另一种程序语言。Python 里,一行 print(“hello world!”),不用解释大家也会明白含义。这一行源代码背后,对应着后台复杂程度超出想象的细节。程序语言出现后,开发人员可以把精力放在重点逻辑上了。 Windows, Mac, Linux(用过安卓没) 的内核部分基本都是用 C 或 C++ 写成。谈到操作系统,我们又上了一个层级。操作系统自动化了硬件、软件的资源分配,相当于计算机硬件和软件之间的媒介。假设你一边看电影一边写文章,这时你的 IE 和 Word 就在共享一块 CPU(98年的单核联想,你是有情怀的人)。电影在演,文字在输出,你的 Win 98 系统在以毫秒为单位,命令 CPU 交错运行不同线程,让你有种仿佛两个程序在同步运行的错觉。操作系统之上,就是各种应用了。
其实,上文核心概念只有一个:抽象(Abstraction)。对于一个复杂系统,我们需要把它层层拨开,每一层都有每一层需要解决的问题,每一层都建立在每一层之上。1970年代发明的 C 语言依旧流行,操作系统基本被微软、苹果垄断。行业里,绝大多数人都集中在应用开发这一层。广义地说,云端产品、服务器开发,也属于应用这层。
大学期间,我做过一个很有趣的项目。项目是个匿名浏览程序 Tor 的迷你版,叫做 Tor61。Web 2.0 时代,你在网络上的一举一动都会留下痕迹。一些非政府组织呼吁匿名浏览,于是有了 Tor Project。它的工作原理是,把每一个用户端的计算机变成一个网络节点,然后随机选取几个节点作为路径(Circuit)进行数据传输。流经每个节点的数据(Data packet) 都会被重新标记。你在其中任何一个节点截获的数据,既不知道从哪里来,又不知道到哪里去,更不能破译。你要是关注技术行业,就很有可能听过暗网(Darknet)、丝绸之路(Silk Road)这样的词。这些是搭载在 Tor 基础之上的,以比特币为媒介的地下交易网站。我一直没搞清丝绸之路的创始人怎么被抓的,连线杂志有个长篇传奇,讲的就是这个84年的小伙, 如何赚了80 million 又被判了终身监禁的故事。Tor 计划的初衷是为了给欠发达地区提供言论自由平台,没想到因为地下交易出了名。这是个经典的,科技双刃剑例子,也正是这个项目的迷人所在。题外话,Tor Project 是个开源项目,依旧定期更新,丝绸之路也上线了3.0版本。据说,CIA 最近找到了破解 Tor 的方法。
Tor61 是我本科一门课的作业,用一个月的时间,从零开始做一个 Tor 的迷你版。其中艰辛,不言而喻。这个项目我们是满分100分,平均分只有60左右。我和搭档的分工堪称经典,这个项目我主力,另一门课她主力。那门课同样艰辛,感谢搭档耐心辅导。就 Tor61 这个项目,我想写下这几年来,对计算机行业的一些主观认识。
“带着你的爱和你的创造走进你的孤独吧,我的兄弟;以后正义才会跛足随你而行。” 本科无数夜晚,从实验室出来,只有天上的北斗七星,和草丛里的浣熊作伴。好比一件艺术作品,一个优秀的软件项目使人废寝忘食。诗歌里的一句比喻,交响乐里的一个音符,往往会让创作者冥思苦想。同理,程序里的一个逻辑,可能会有一百种表达方式,一个优秀的开发人员会通过思考,找到最简洁、优雅的那种方式。正如所有创造性工作,这一过程是唯心的、自省的。他精神高度紧张,大脑飞速运转,深度的思考同时带来深度的愉悦。请试试,写一篇3000字的原创小说,就能理解了。创作的过程大多孤独,一个大型项目可能会有几千同时打理,但核心往往由少数人,甚至是一个人完成。比如 Linus Torvalds 与他的 Linux kernel,Mark Zuckerbery 和他的第一版 Facebook。少数人创造了绝大多数的伟大艺术,少数人道出了百年流传的伟大思想。这是一种,傲视星空的,充满张力的孤独感。
原创的机会并不总有,维护与更新会占据一个软件工程师职业生涯的绝大部分时间。调试(Debug)的过程尤其能体现行业的技术性。打个比方,工厂车间里的机器坏了,请了个老工程师。他看了看机器,换了个螺丝钉,机器好了。老工程师收了一大笔钱,花了10分钟,走了。工厂里所有的工人,花上再多时间,也解决不了这个问题。行业新闻里常会报道,说硅谷人才恶性竞争。你入职 Google 的当天,也许就会收到 Apple HR 的邮件,以1.3倍工资邀你到 Apple 工作。这是夸张说法,可事实是,一个团队里的资深工程师,可以撑起团队的半边天。他在,产品顺利运行,他不在,团队可能要花很长时间才能恢复元气。当然,这里说的是资深工程师。
分享一段在微软工作的感受。我才入职半年,经历尚浅。我所在的小组,行事风格成熟稳健。老板来自埃及,古铜色皮肤,高大健壮,技术扎实,立场坚定。同事除了本地人,还有来自瑞士、加拿大、中国和印度的新移民。工作时间朝九晚六,没有打卡,属半自由职业。组里每人负责产品的一部分,自己写设计文档,自己实现,自己测试。因为是后台部门,和 PM 组的交流并不很多。遇到技术难题,大家讨论决定。诚然,微软面临着所有巨头公司面临的问题,管理层冗余、文化单一、个体才能难以得到充分施展。Satya 在努力,大家也理解改变不是件容易的事。人各有志,也许有一天我会离开公司,但无论到哪,我都会很骄傲自己曾在微软做事。
最后,送给大家一首喜爱的诗:谁终将声震人间,必长久深自缄默;谁终将点燃闪电,必长久如云漂泊。
天驰
03/07/2016 拂晓
Redmond, WA
生命之中,我又发现了一件可以给我带来深刻痛苦与深刻快乐,使我久久不能平静的事 ——— 写作。
You must log in to post a comment.