日记——程序员的烦恼

OLYMPUS DIGITAL CAMERA

前天(2014年1月7日,阴,据说有人在延庆看到了几片雪花)


我用了一晚上的时间写了三千字,写完后已至凌晨。古人云,白发三千丈,缘愁似个长。写完三千字之后我找到了这种感觉,又读了 N 遍,改了 N 遍,终于沉沉睡去。醒来后再读,发现自己被感动了。这一点充分证实了,Mac 君依然在写作的道路上狂飙突进,以一个二把刀的身份。希望在下个阶段,Mac 君能够从二把刀转变为一个合格的工匠。

这三千字,暂时还不能发。

昨天(2014年1月8日,晴,大风吹)


我开了一天的会,会议从早上9点持续到晚上7点,期间吃了一碗面。参会的每个人似乎都发言了,但我忘了他们说了些什么。我自己也发言了,我也忘记了自己说了些什么。似乎做了很多决定和决策,又似乎什么都没定下来。我很疲惫。晚上回到家想写点什么,打开微信后台看到有个叫麻花的兄弟在吟唱:强哥,发个文章看看吧,火车上睡不着啊。我心想,难道睡不着也要强哥哄吗?多大岁数了都!接着我又打开了用户分析,取消关注的人数又增加了几十个,于是我很伤感。掐指算算,这一年取消关注的读者也有2万了,好在新增人数永远大于取消关注人数,否则后果是严重的,成为负数也是可能的。据说防止取消关注的秘诀就是什么都不写,让你的微信号静静的躺在读者的折叠文件夹里,既不发声,也不回复,也许会躲过一劫。于是我决定这个晚上什么都不写……然后眼前一黑,睡过去了。

今天(2014年1月9日,晴的厉害,气温似乎更低了)


事情似乎都走上了正轨,下午一口气处理完这几天累积的「年关例行事务」,效率还不错,看来从明天开始就可以写点代码并考虑2014年产品规划和实施的事情了。2013年我们的平台产品做了一个重要的 Release,开发环境大部分都迁移到了 Git 和 Maven 上,如果没什么变化的话,2014年我会把重点放到企业移动应用和 UI 模式优化上。要做的工作还很多,不过我不急,只要有人、时间和空间,事情总是可以做成的。

前几天送书活动公开了我的 icloud 邮箱,最近收到了不少读者来信,其中大部分都属于「程序员的烦恼」,今天有点时间,做个答读者问吧。

1、工作中提前完成了自己的任务,应该学习提升还是去帮助他人?
帮助别人完成任务也是任务。如果你提前完成了自己的工作,最好的做法是去问你的上级接下来的任务是什么。如果暂时没有其他任务也没有兄弟找你帮忙解决问题,那么就去看书学习吧。提升自己是利人利己的事。

另外,不要忘了好好利用剩余的8小时。

2、应届毕业生投简历到 BAT(百度阿里腾讯)石沉大海怎么破?
那就不要投嘛。据我了解,BAT 对应届毕业生的要求还是很高的,候选人太多,自然可以好好挑挑。石沉大海并不意味着你不够优秀,只是你现在不够优秀而已。放低身段,先去一些不知名的公司锤炼一下,如果能够做到独当一面,你的眼光和技能、经验都会不一样的,到时候再「说英雄谁是英雄」。

3、我现在从事 Android 开发,但我看好 iOS,我应该放弃 Android 转投 iOS 的怀抱吗?
如果你在 Android 的怀抱里获得的是冰冷,在 iOS 那也未必能找到温暖。Android-Java,iOS-Objective-C,虽然我更偏爱 iOS,但是这两个平台和技术,都是好技术,要不然怎么能分庭抗礼这么多年呢?如果你觉得做 Android 悲催,其实是你自己悲催,任何一门技术做到顶尖都是需要坚持和磨练的。

另外,为神马不双飞呢?这又不是结婚,亲吻 Android 的同时,不妨碍你拉起 iOS 的小手啊。少刷微博少看电视,就行了。

4、操作系统、算法、数据结构、设计模式到底该不该学,工作中根本用不到嘛!
最近搞「自媒体」的人似乎功利心大盛,每个人都觉得自己写了这么多字,我容易吗?也该有回报了吧?也该套现了吧?所以好多事情就有些变样。还好我不是自媒体,不用担心这个。

其实学习也是一样,不要那么功利。如果每学一门知识都想着怎么换成银元,第一是心累,第二是学成二把刀的几率大大增加。做为一个程序员,操作系统、算法、数据结构、设计模式等基础知识当然应该学,这是程序员的尊严。至于实际工作中是否能用的上,那是另一回事,用上了就是你的运气,用不上也是很自然的,我小时候还学了一大堆无线电知识呢,最终也没成为无线电专家啊。有人说很多技术不用就会忘记了,那就用呗,做开源项目,写文章,这都是用。退一步就算忘了也没什么,再看一遍就是了。

多少美好的事物,都他妈的毁在了功利二字上!


二把刀定理:写作永远是自己冷静让别人激动的事情,被自己的作品感动的或涕泪涟涟或击节赞叹的货,一定是个二把刀,证明完毕。

池建强:我的人生元编程(图灵访谈)

themeaningoflife

2013年11月份我在图灵办公室接受了一次访谈,访谈的内容是我个人成长过程中经历的一些人和事,包括我的一些决定和思考。那次访谈聊了有四个多小时,访谈录音整理出来后超过了一万字。初稿发给我之后,我又做了一些微调,对我没说清楚的和疏忽的地方进行了查漏补缺。文章基本上是口语化的,保持了采访稿的结构和原貌。

整篇文章纳入了图灵社区电子杂志《码农》第九期的人物专题,也发表在了图灵社区上

因为访谈主题和 MacTalk 相关,所以在文章正式发表一个月后,也收入 macshuo.com 网站,是为记。

Yes, I can


“整个车间只有一台电脑,每天吃完饭,我就回到车间,把公司的硬盘拆下来,把我自己的装上。每天我都在那里,开一盏灯,拿一本书。”

你是怎么开始学计算机的?

以前看过一本叫《异类》的书,书里说大部分计算机大师都出生在20世纪50年代,比如史蒂夫•乔布斯,史蒂夫•沃兹,比尔•盖茨,保罗•艾伦,比尔•乔伊等等,这帮牛人开始设计个人电脑、操作系统和编程语言的时候是70年代,那时我刚刚出生。

到了80年代,苹果公司已经上市了,但大部分中国人对电脑还没什么概念。做为一个生于农村长于乡镇的土人,我小时候根本没见过电脑,所以开始编程的时间很晚,这一点和很多少年天才、编程神童的经历有很大差距,我真正接触编程是从大学开始的。我的专业是机械电子工程,这个专业里有几门计算机语言的课,包括C、Fortran等,数据库用过 FoxBase,电脑是386/486,黑白的脸,没有奔腾的心,我只记得给老师写过一些类似图书馆书籍管理的系统,但细节完全不记得了。

高中时我学习成绩很不错,但报志愿没报好,一本和二本都没有录取,导致心是高等学府的心,身是二流院校的人,所以就去了河北科技大学,哈哈。在大学里我很愤青,觉得这个学校很一般,没有太大学习热情,但我对计算机技术很感兴趣,可能和我小时候喜欢装配各种收音机有点关系。我经常和志同道合的小伙伴们一起交流和上机,当时机房使用时间也不是很充裕,还要交钱,所以我们会在上机之前做很多功课,把程序编好写在纸上,这样上机后就能直接录入程序并进行调试和跟踪了。还有一个乐趣就是我们通过各种程序和工具优化软盘空间和内存大小,以期那时的计算机能够运行我们喜欢的程序,我记得最常玩的一个黑白游戏叫做战斧,主角拿着一把斧子打怪,乐此不疲。

总体来说,我在大学学到的计算机知识并不系统,不像现在的很多大学生,在大学里学到的东西已经很扎实了。

那你真正开始学习其实是在工作后?

我是在工作以后才真正开始接触编程工作的。我毕业之后很想去北京,后来去了河北汇能亚奥集团,这家公司在北京的郊区顺义的郊区林河工业区有一个厂房,工厂和研发中心都在那边,于是我就来北京了,也算曲线救国。公司的主要产品是直流电源,公司里有一个实验室,实验室的办公条件很好,每个人配备一台电脑,还带沙发转椅,但是只有具备名校背景或者家庭背景的人才能去实验室,于是我们这几个不太招人待见的家伙就直接被派到车间了。我们去了之后第一件事就是擦散热器,到现在我已经不知道为什么要擦散热器了,只记得那上面好多油……散热器擦了三个月,然后开始“插件”,每个人一个工位,把分配好的二极管、三极管、电容等插到电路板上。后来我们又去搞测试,照着图纸修理返场的电路板和直流电源。

整个车间只有一台电脑,平常你是用不上的,只有晚上机器空闲。于是我去中关村买了一块硬盘,每天吃完饭,别人回宿舍看电视、聊天的时候,我就回到车间,把公司的硬盘拆下来,把我自己的装上。我还记得当时装的是一个盗版的Windows 98系统。每天我都在那里,开一盏灯,拿一本书,学一些互联网方面的编程知识。当时已经出了HTML4,可以通过JavaScript在网页上做一些动态的效果。一边学习新东西,一边把自己以前学的语言温习了一遍。大概学了半年多的时间,在99年年底,我离开了那家工厂。

你是怎么去面试的?

我把我自己写的程序都存在一张软盘里,每次去面试的时候就拿出来给人家演示。当时互联网第一波浪潮已经过来了,我做了很多动态的网页设计。很多人觉得我做的东西很新鲜,可能他们都在忙着做静态网站,没时间学这些东西。我还记得当时做了一个泰坦尼克主题的网站,用了一些电影里面的元素,大海、沉船、岩石等等,演示的时候会播放主题歌,画面的元素有各种互动效果。他们看了之后就不问我问题了,说:那你就来上班吧。于是我就去了洪恩。

快乐并痛的时代


“我和池宇峰说,我先出去看看,等你们开始做游戏了,你再叫我,我马上就回来。”

你刚去洪恩时做什么?

在洪恩的三年半时间,是我职业生涯中最快乐的一段时光。我刚去的时候,洪恩正在做洪恩在线和论坛。洪恩的创始人是池宇峰,因为我俩都姓池,这个姓又很少见,所以大家都以为我是他的亲戚,对我都挺好,哈哈。

当时我的头儿对我说,你有两条路可以选,一个是去做现在我们所说的UI设计师,走前端路线,也可以做后端、写服务器端的程序。我想了想,我还是写后台吧,前端不都是小姑娘做的么?

当时我刚从车间里出来,忽然来到这么一个地方,年轻、开放、热情,最重要的是每个人有一台电脑,这简直让我幸福到眩晕。我的同事都是年轻人,有很多刚毕业的清华北大的学生。池宇峰本人也是清华毕业的,后来创办了洪恩软件。池宇峰的管理方式很有特点,他总不在办公室呆着,四处转悠,看谁干活就想跟谁聊两句。结果无论白天黑夜,他每次过来的时候我都在闷头编程,面对花花绿绿的高亮代码,噼噼啪啪的敲击键盘。这时他就会和我聊一聊项目进度,问问我的想法,有时他也会讲讲公司的发展思路。过了一两个月之后,我就调工资了,结果2000年一年我就调了三次工资。老板都喜欢疯狂工作的员工啊!

洪恩在五道口的东升乡租了一栋三层楼,一共有一二百人的规模。当时很多同事晚上都住在公司,上午11点,大家穿着拖鞋开始上班,浏览下新闻就去吃午饭了,吃完饭偶尔我们还去清华踢场球。下午两点多,我们开始正式的工作,一直编程到天色变暗,吃完晚饭后,大家继续编程,通常是凌晨12点的时候开始更新网站,发布程序。之后想学习的继续学习,想编程的继续编程,有时候我们还会打场三角洲游戏,一般在凌晨四五点钟才回宿舍休息。池宇峰和我们一样都是七零后,所以整个公司的氛围就像学校一样。公司牛人很多,可以从他们身上学到很多东西,那个阶段我的成长也是最快的。

这样轻松的环境维持了多长时间?

这种的情况大概持续了一年左右。当时互联网的氛围有点像现在,很多公司都不挣钱,有人给投钱就花呗。洪恩在线是不挣钱的,主要是靠卖教育软件挣钱。我们那里真正挣钱的人工作都很辛苦,我们这些搞互联网的反而显得很悠闲。后来互联网泡沫终于来了,大家觉得钱不能再这么个烧法了,再不改变整个公司的现金流都可能出问题。于是洪恩在线只留了很少的人来运营,把以前从别的部门抽调出来的人还回去了。当时洪恩聚集了大量的技术人才,但是不知道让这些人干什么,搁到现在这些技术人员可能都会被裁掉吧。但是当时池宇峰觉得技术人员都是宝,琢磨出一个事儿来也得把他们留住。

为了解决这个问题,公司决定新启动一个项目,叫做数字校园,准备使用最新的技术Java实现,新的旅程又开始了。

数字校园当时的定位是基于BS架构的校园信息化平台,大部分功能使用浏览器操作,少数类似排课引擎要安装客户端。主要技术架构J2EE,支持Windows、Linux、Unix,数据库采用PostgreSQL,HTTP Server是IIS+Tomcat或Apache+Tomcat,主要语言是java和jsp,其他用到的语言包括汇编、C、VC、Shell等,当然前端的HTML和JS是少不了的。为了在浏览器上模拟客户端程序的效果,我们使用xml数据岛的技术实现浏览器异步加载,后来类似的技术有个更时髦的名称叫AJAX。为了实现智能排课和分班,我们走访了很多学校,编写排课和分班算法,分别实现了在线版和离线版……

虽然产品优秀,理念超前,但曲高和寡,而且洪恩本身缺乏企业级产品的运营和销售经验,学校的信息化需求也没那么迫切,现在看来,好像很多事都没踩到点上。系统虽然也销售出去不少,但是只能达到收支平衡的程度。当初做这个系统的时候,公司高层和我们自己对这个产品期待都很高,大家坐在一起数全中国的学校,想象着成为土豪的样子。一年后再坐在一起的时候,我们都无语了。后来这个产品被搁置起来,留下几个人做维护,其他人又被派走了。

这次项目失败之后你想离开吗?

当时很多人就想,怎么又失败了?于是很多人选择离开。我当时已经是一个技术管理者了,自己写代码,还要带团队,团队里还有清华北大的硕士、博士。虽然我是个Leader,但是我的技术并不是最突出的,很多人都比我强。我当时的老板觉得我在协调和管理方面有一些天赋,不像很多技术牛人那样比较容易情绪化。池宇峰有一天来找我,说:“你呀,你就不是做技术的料。做技术的人都是大学毕业的时候就已经非常強了,你应该走技术管理的路线。”我当时听了非常伤感,不过我表示还是挺想做技术的。池宇峰这个人很大气,他说既然你喜欢做技术,就把你放到了技术部吧。

在技术部做了一段时间的内部项目后,有一天池宇峰把我们叫在一起,说:“我们做英语培训吧。当年我做开天辟地学电脑的时候就有这种感觉,这次培训一定能成!”于是我们就想,怎么做培训呢?于是我们又做了一套软件,这次是用.Net做的。这套系统不仅可以记录学员的信息、学习进度、学习课程,还可以通过视频进行对话和练习,讲师会对学员的文字作业和视频作业进行点评,这是我们当时想到的一个卖点。我们开了第一期学习班,效果很好。但是谁也没想到,这个时候,非典忽然来了。我们当时正忙着招生呢,然后,就没有然后了。我们也不知道非典什么时候能结束,所以工作都停下了。老板也崩溃了,找我说:“你看,你确实不适合做技术。”于是我也崩溃了。

看来池宇峰已经认准你不适合做技术了,然后你被派到哪里了?

池宇峰又派我去管儿童事业部。那里主要是给儿童做电子产品,做书,设计版面什么的。里面需要技术的东西不多,有一大半是女生。儿童事业部的具体业务还需要懂儿童心理学,我不太懂,就找了两本书看看。

那里的同事有很多手工工作,比如录入数据、统计分析、文件分类等等,我说这些工作你们都不用做了,专心做产品设计,我来做!于是我写了几个程序让这些工作都自动化了。之后我还把整个事业部的工作流程梳理了一下,加强了项目组内的交流和进度跟踪。有一次一位女生负责的产品出了点问题,我要求她们组进行修改,结果这位女生竟然哭了。当时我想,这是什么情况?

其实我在那里工作是很开心的,但是做不了技术,技术这东西总不做就会忘掉。所以我决定离开了。

池宇峰有没有挽留你?

当时池宇峰和我说,你别走,咱们就快开始做游戏了。我说什么时候啊?他说,不一定。但是出于个人发展的考虑,我还是离开了。

后来池宇峰创办了完美时空,并于2007年在纳斯达克上市。完美时空的网游技术依靠的就是当时祖龙工作室和洪恩在线的技术班底,那帮家伙们现在都可以退休了。他们当年虽然没有为公司带来利润,但是池宇峰一直把他们作为技术储备放在公司,想做点什么就做点什么。等到完美时空出来,他们就开始大显身手了。池宇峰愿意用自己的资源去试错,并在试错中成长,这点和其他很多人不一样,多数人喜欢拿别人的钱试错,哈哈。他之所以能成事,和这点有很大关系。

那你后悔离开洪恩吗?

我当时不后悔,现在挺后悔,开个玩笑(笑)。现在想想,那时把儿童事业部做起来,未来也是不错的,只是和现在的路子不一样,或者也可能加入完美时空去做游戏。当时池宇峰跟我谈了很长时间,但是技术上确实已经没什么可做的了。我和他说,我先出去看看,等你们开始做游戏了,你再叫我,我马上就回来。

走走学学


“我去的时候技术部就只有三个人了,还都要离职。”

离开洪恩后你去哪了?

当时是2003年,百度那时候还很土,大家都用Google,用友软件如日中天。于是我给用友软件总部投了一份简历,接着就去面试了。我带着一台笔记本电脑演示了我做过的东西,面试的人看了看之后,简单问了问,我就被录用了。插一句,我是先投的简历,找到工作后才辞的职,穷人家的孩子都这样。然后我就进入了现在这家公司,当时叫用友软件工程公司,主要是面向国际市场和国内大企业提供技术产品和服务。我进入了技术部,同时期来的有 7个人,史称七剑客,主要研发企业软件开发平台。当时我们用的技术也不是很成熟,而且产品是给程序员用的。事实证明给程序员做东西结果是非常残酷的,一年后,我们这7个人走了5个,我是第6个走的。

你文章中说的名字和火箭有关的外企是不是该出现了?

是的,离开之后我就去了那家名字和火箭有关的外企,这个火箭公司开发了一套分布式的软件平台,名字不能提,因为老外的版权意识太强。我曾经的一位同事都移民到加拿大去了,只是在自己的开源项目引用了一点平台文档,结果被一纸法院传票追杀到异国他乡,而且直接导致这个同事的上司被辞退。

这家公司给我留下的财富之一就是见识了什么是真正的分布式开发平台。他们的平台技术架构很强悍,是由很多年纪一大把的老程序员(据说是制定CORBA标准的牛人)开发的,代码简洁优雅,我一边像读诗一样阅读他们的代码,一边感慨此生写不出如此优美的程序!他们底层用C,中间层用Python,上层用Java,还构造了自己的通讯协议和运行在各个节点的服务,形成了一套完整的架构体系。在使用这套平台的过程中,我学到了很多从书里很难学到的东西,当然我也为他们修复了很多bug。

在和这些资深老外程序员交流的过程中,我还学会了如何提问。如果你想提交一个bug,那你应该说明这些内容:什么情况下会出现这个bug,为了解决这个bug,你做了什么尝试,你觉得引发这个bug的原因可能是什么。然后还要把所有的log,crash,dump之类的文件都给他。详情可以参看“如何提问”这篇文章。很多人提问的习惯不太好,比如有人说:内存溢出了,怎么办?上下文都没有,我怎么知道怎么办!

在这家公司我还知道了,国外公司的老程序员远远多于国内,很多程序员都四五十岁了,有的级别和VP一样,但依然在编程。他们只是不需要去经营公司而已,他们做架构、编程、咨询、写书,每样都做得非常棒。

中间你在洪恩时的小伙伴有没有召唤你?

在这期间有一天池宇峰给我打电话,说,我们开始做游戏了,你回来吧。我当时那个团队里的很多人都回去了,但是我对网游的前景看不清,另外对做游戏这件事已经没有太大的兴趣了,所以委婉的拒绝了池宇峰的邀请。之后他们有一段时间确实很艰苦,打拼了几年,我当时还开车找这些小伙伴吃饭,他们骑的是破自行车。后来人家终于熬出来了,就开着奥迪A6来找我了,还是2.8L的(笑)。

冷静的思考一下,一家公司成功了,真正重要的是你在这家公司起到了多大的作用,如果你没去,人家成功了,那你还去干嘛呢?

之后你怎么又回到了用友的?

在我离开用友软件工程两年后,有一天公司的业务负责人找我,说第一任技术主管走了,第二任也走了,想让我回去。我想,洪恩没回去,要不这个就回去吧。外企也见识过了,确实没有太大意思,于是就回去了。现在这家公司已经改名叫瑞友科技了。

刚回去的时候还是挺艰难的。我去的平台部就只有三个人了,还都要离职。我开始重建团队,不仅要自己写程序,还要招人,还要帮助项目组解决问题。当时的所有项目都需要用我们研发的软件开发平台,压力特别大。以前平台部的人过于技术化,和其他项目组的关系搞得特别僵。技术人员的想法就是:我做出这个开发平台,你们爱用不用,不用拉倒。结果项目组就会投诉,恶性循环。我刚去的时候,很多问题没人解决,比如一个给客户做的实时业务系统,有个问题就是每天凌晨都要手动重启一下,否则系统第二天就可能宕机,这个问题困扰了项目好几个月,我去看了一下,其实问题很简单,原来是一个线程池的使用出现了问题,稍稍修改一下问题就解决了。

慢慢地,我把这些问题和关系都捋顺了,后来就开始做自己一直想做的平台产品,再后来公司成立了 IT 应用研究院,我开始负责公司的整体技术发展,目前我们做的产品在研究院的网站上都有介绍。

我从2006年回到瑞友科技,一直工作到现在,也算是公司的元老了,我主导研发的产品GAP平台服务了成百上千的企业客户,我的很多代码还跑在客户的服务器上,这是我比较开心的事情。当然,期间还有很多好玩的事情,以后我再和大家说吧。

成为Mac君


“大家提的问题多是Mac相关的,但也有问职业发展阶段的,问如何选择的,还有,问姻缘的。”

怎么开始使用Mac的?

Mac我用的不算晚也不算早,大概是2008年开始的。之前还是Windows和 Linux用的比较多。我在洪恩和那家外企的时候大部分时间是在Unix和Linux下工作,所以对Linux环境、Shell、Vim这些都比较熟。我在08年的时候买了一台MacBook Pro,开始了我的Mac生涯。我个人使用电脑对软件环境的要求比较高,就像普通人开车就是开车,玩车的都喜欢把跑车改造成战斗机。Mac就是电脑里的跑车,还特别容易改成战斗机,尤其适合程序员使用,我自己越用越顺手,就经常和我们的开发人员说,这个东西特别好用,很多程序员需要的环境和工具,Mac都是默认配置好的,包括编程语言环境、构建工具,版本控制工具,命令行工具、Shell 脚本等等,应有尽有。

你不光自己使用Mac,也影响了其他人?

是的,我影响了一些人,比如原来我们研究院只有我一个人用,现在有一半人在用Mac了。我在博客上写了一些关于Mac的文章,有一篇文章还挺有影响力的,叫《开始使用Mac》,在网上很容易搜索到,阅读量比较大。我们那原来有一个同事很喜欢Mac和iOS 移动开发,他说:我想学Objective-C,做移动 App。我们当时在做企业的移动互联平台,就让他去学iOS开发了,给他安排的工作内容也相对灵活。结果学完之后,走袅!我当时还想帮他推荐工作来着,结果他自己找了几家,问我的意见。我一看其中有丁香园,就说,这个丁香园的技术负责人冯大辉不错,你去那吧。现在他是丁香园iOS开发组的组长,所以冯大辉现在看到我还会感谢我一下,哈哈。

再后来我就开了微信公众平台。微信公众平台刚推出的时候我还不知道这是个什么东西,后来看了冯大辉开的“小道消息”,大概知道怎么玩了,于是申请了一个公众帐号,起名“Mac技巧”,ID 是sagacity-mac。Sagacity在英文里是睿智的意思,取自我女儿的一个字。后来因为审核认证的原因,Mac技巧改成了现在的“MacTalk By 池建强”。

你在写微信这一年中文章风格有什么变化?

我在刚开始写文章的时候花的时间并不多,当时主要推送一些Mac使用技巧。Windows的主要理念就是GUI,所以命令行几十年如一日的没有改变,也没什么使用技巧,无非是用鼠标点来点去,但是Mac缘自Unix,除了GUI,还提供大量的命令行工具和快捷键,把命令行、工具、快捷键和一些实用技巧用好了,效率就会有很大提高。所以前期主要是推送这些内容。

但是仅仅推送技术内容太干了,于是我就在文章前面加一些自己的思考,或讲个小故事,没想到这些内容越写越多,几十年来积累的东西似乎找到了一个出口,以前看过的书、学过的技术、经历过的人和事,全部涌上心头,然后再到手指、到键盘、到微信,一发不可收拾,到现在已经写了200多篇相对完整的文章了。至于纯粹的 Mac 技巧,写到四月份的时候,我感觉能写的差不多都写完了,后来这些Mac技巧整理成了相对完整的130项,收录到了《MacTalk•人生元编程》中。

我从去年12月15号开始写,写到现在文章风格有了很大的变化,毕竟每个人都在成长,前期写的东西比较零碎而无章法,后面的自己对文字有了要求,相对好了一些。

有的读者说你写文章很有毅力,能“池之以恒”,坚持写文章对你有什么影响?

写作占据了我很多时间,本来就少的娱乐时间现在更少了,你得把看电视、刷微博的时间都用来写东西。但是我会保证陪伴家人和正常的社交和运动。带来的好处就是我的写作能力提升了。

我现在会有意识读一些关于写作的书,而且看文学类作品的角度也不一样了,我会更关注文章的结构、文法、用词和节奏。写作这个东西是需要天赋的,也是可以练习的。如果你有天赋,加上后天的努力,就有可能变成一个大师级的人物。但是如果你天赋一般怎么办,也不用太伤心,通过练习也可以成为一个不错的工匠。文章有韵律,长短句该怎么结合,主句附句怎么搭配,文章结构怎么组织,怎么把文章写得有趣,都是很有说法的。(你未来会写技术书吗?)有计划,但不是现在。写书还是挺耽误时间的,关键是写纯技术书也不能解决生计问题啊。(技术书小众,解决不了生计。)所以我现在不是在学习写作嘛,准备将来出本畅销书,哈哈。

你能这样坚持下来,是不是有什么信念?

其实整个技术圈里个人坚持写微信没几个了,这需要付出很大的代价,不是所有人都能坚持下来的。开始的时候我每天都写,但是后来发现这太残酷了,就改为每周更新3-4篇,男人要对自己好一点(笑)。

有一些东西不写出来,就会从你的生活中消失,因为记忆是完全靠不住的,这是原因之一。另外,有时候你在写东西的过程中,还会有一些新的思想和内容冒出来,而这些东西在你动笔之前是不存在的,这种感觉特别好。我在写文章的时候很喜欢把一些有趣和幽默的话题和叙事技巧融合到一起,这样读起来会比较轻松,于轻松处响惊雷,大概是这种效果。很多人说看我的文章特别乐,我就很高兴。和编程一样,写文章是很有意思的事。

现在的正向激励很多,所以写不下去也得写。这就和做技术是一样的,逼着你向前走。我现在虽然要做一些管理和协调工作,但是技术也不能落下,你还得帮程序员解决问题呢,还得评估别人的工作成果呢。就算你以前做过Perl, Java, Python, C#等等很多技术,但是有一天你忽然发现,大家开始用Objective-C了。这些语言对于我和刚开始工作的程序员来说都是一门新技术,虽然我在整体结构上的把握可能更好些,但在编程技巧的掌握上并不会比一个新人快多少,所以你也需要不停的学习。

现在想想,我应该听池宇峰的(笑)。程序员很辛苦,也很快乐,技术更新换代太快,但是总有新东西也是件乐事。对于个人来说其实是一个选择,就看你愿不愿意花时间来做这件事。

你的写作主题是怎么决定的?

刚开始的时候我每天都更新,因为有积累,每天都有话可说。但是当你写到几百篇的时候,就会发现以前的积累不够用了,仿佛被掏空了。你不可能总讲技术,而且就算讲技术也要讲的有趣才行。我现在写东西就要经常从每天接触的事物中获得灵感,想到了新的主题就会把它们记在todo list里,将来要是没的写了,还可以写这些。

我的文章的大概分成两个类别,一类是规划类的,一类是非规划类的。比如我看了某个电影,突然想到了某个主题,把它写下来,这就是非规划类的。规划类的就是我写的一些系列文章,比如“Macintosh演化史”、“我和Mac”,职场系列,技术成长的系列等,还有一个演讲的系列,最后这个还没舍得动(笑),未来还规划了一个CTO练级之路,这个写起来应该很有意思。

恭喜你的书《人生元编程》大卖,你书的读者都是什么人,大多数都是你微信的读者吗?

很多人和我说,你看韩寒的书在多看的电子书平台上卖的还没你好。但真实的情况是人家走的是纸书渠道,没的比。大家总以为电子书那么便宜,一定会卖个十几万几十万本,其实现阶段电子书的受众还是很小的,只是外表看起来很美好,事实远不如大家的想象的那样。不过从收益上看,电子出版的收益和纸书对于个人作者来说其实是差不多的。

这本书的受众主要是技术人员或IT从业人员,用 Mac 的人也是主力读者,毕竟书里有三分之一的Mac内容,另外就是MacTalk的微信读者。我现在的微信读者是我微博粉丝的好几倍,但是并不是每一位读者都会来买这本书,但是他们的购买对书籍打榜很有用。我的铁杆读者在这本书刚上线时都会去买,这样书一出来就会升到排行榜首位 。一旦上升快,就会吸引出版商的重视,他们也会帮助推广。另外,我在写微信的过程中,结识了很多朋友,也参加了一些活动,比如“阿里技术嘉年华”、QCon等,他们也会帮助推广。

你的微信MacTalk的读者都是什么人,你每天收到什么样的反馈?

我的读者中,程序员、产品经理、大学生比较多,还有很多技术圈的好朋友都关注了,当然还有做技术出版的朋友,否则也不会有那本书了。除了 IT 圈的,还有很多其他行业的,可能主要来看我扯淡的吧(笑)。很多读者的忠诚度很高,他们经常和我说,每天晚上睡觉前就等着我的MacTalk,不看完不睡。

大家提的问题很多是Mac相关或技术相关的,也有问职业发展的,问人生选择的,比如现在自己处于什么阶段,有什么困扰,需要建议等等,偶尔还有问姻缘的,这个我还真回答不上来。

MacTalk 的读者里有很多年轻人,他们刚上大学或刚入职场,困扰会多一些,心智也不成熟,提的问题也比较多。我一般会帮助他们分析问题并加以鼓励,有的人还真的从此振作起来了。我去杭州参加阿里技术嘉年华的夜聊节目时,有个读者非要来机场送我,见了面就说:您当时的建议和鼓励对我帮助非常大,现在我已经有了一个更好的起点了……

能帮到这些人,我挺高兴的。

自由软件和开源协议

OPLicenses2

我在Linus 系列的上一篇文章中提到了系统调用,有读者问,System Call(系统调用)和 Library Function(库函数)到底有什么区别呢?我在这简单回答一下。

操作系统的进程空间分为内核空间和用户空间,不同的空间需要不同的执行权限。其中系统调用运行在内核空间,库函数运行在用户空间。系统调用是通向操作系统本身的接口,面向设备驱动程序和硬件,属于底层调用,一般不具备可移植性。库函数是更高层次的接口,面向应用开发,通过执行系统调用满足应用软件的需求,并降低系统开销。

为了更好的理解这个问题,大家可以想象一个场景:你和你的小伙伴被空投到敌占区,抵达目标后,你通过对讲机呼叫小伙伴:
「土豆土豆,我是地瓜,请掩护我!」
「土豆收到,土豆收到,可我特么种你前头了,怎么掩护你啊?」
这种类型的通信,可以看作是库函数调用。

等摸清楚了敌人的军火库坐标,想干掉它得申请硬件资源,这时候就要呼叫总部:
「洞拐洞拐,我是地瓜,请向我开炮」
「洞拐明白,洞拐明白,你小子就等着一起飞上天吧」
这是系统调用。

之所以这么设计,主要是为了: 1、分层架构;2、避免把系统调用直接暴露在敌人面前;3、提高性能;4、增加应用层的可移植性。

大致如此。这个系列中会涉及一些技术话题,但大都浅显易懂,高手不屑一阅。有不明白的初学者或非 IT 朋友想弄明白的,Google 一下大致也能七七八八,实在不明白,提出来,我再用类似的方式给大家说说。


讲了 Linus,有读者说,给介绍介绍自由软件和开源协议吧,今天就讲讲这个。不过为了防止 Linus 系列成坑,我会继续写下去的,直到完成这个系列,请组织监督,请群众放心。

什么是自由软件呢?根据自由软件基金会的定义,自由软件(Free Software)是一种可以不受限制地自由使用、复制、研究、修改和分发的软件。不受限制正是自由软件最重要的本质。注意:其定义与是否收取费用无关,自由软件不一定是免费软件(整理自维基百科)。

自由软件运动的创始人是理查德·斯托曼,他的成就绝不输于李纳斯。这位奇才出生于1953年,那是个计算机大师扎堆出生的年代。20年后他正式成长为一个理想主义者和自由软件斗士,并开始了伟大的、光荣的、作死也不会死的战斗人生,他以个人对抗整个业界,他的对手不是人或公司,而是所有封闭的软件公司,比如苹果、微软、Oracle、IBM等等。他到目前为止的成就有三,个个牛逼二五:

1、开发了Emacs编辑器。Emacs不用介绍了,号称神的编辑器。 2、GNU通用公共许可证(GPL),这是世界上采用最为广泛的自由软件许可证。 3、Copyleft,所有的GNU程序都应遵循“Copyleft”原则,你可以复制、修改、出售自由软件,但是源代码相关的改动都必须公开,所有用户都可以获得改动后的源码。Copyleft保证了自由软件传播的延续性。

这些成就保障了自由软件世界的繁荣昌盛和长治久安,同时催生了一系列优秀的工具软件和函数库,比如文本编辑器、编译器、调试工具、Web 服务器等等,但 GNU 唯独没有开发出操作系统内核,可能是天意使然,就在这个节骨眼上,李纳斯开发的 Linux 内核横空出世了,并最终采用了GPL 协议,以完全自由、免费的方式发布,从此,GNU 算是功德圆满了,自由、开源和共享的精神一直延续到了今天。自由软件服务了千家万户,在这样一个信息共享的时代,我们每个人都或多或少的受益于斯托曼、李纳斯和自由软件的贡献。

随着自由软件的蓬勃发展,GPL 也根据开发者的需求和软件技术的发展衍生出诸多版本,目前世界上有上百种开源协议,常用的就有GPL、LGPL、Apache、MIT、BSD 等,如何搞明白这些协议对开发者来说十分困难,我根据网络资料画了一张关系图,大致解释了这几个流行的开源协议的关系和区别,感兴趣的看看今天的题图即可。

自由软件除了自由开放之外,还隐含着公民的隐私不受侵犯的含义。随着社会的发展,网络信息监控和审查越来越严重,伟大防火墙、实名制、审查制度等等,无一不包含着控制和垄断的意味。这就更加凸显处自由软件的意义。斯托曼说,「我们的社会正越来越依赖计算机,我们使用的软件对保证未来社会的自由至关重要。自由软件使我们能够控制我们使用的技术,让技术造福个人和社会,而不是让技术被商业公司或政府控制,用来限制或监视我们。」

很多软件人员使用自由软件更容易从经济角度关注免费的问题,事实上另一个Free与我们更加息息相关!

这个世界很多人觉得从未去争取过什么,活的也还不错。但真实的原因是,有很多类似理查德·斯托曼这样的人一直在风口飞翔,他们是一群特立独行的猪……

题图是用Omni Graffle制作而成,其中使用了 Flex Ding 提供的插件。