打工者的境界

早上7点,电话铃响了起来;
我躺在床上,听见妈妈起来去接电话,从谈话内容听出是爸爸打过来的。
我起床后,我妈告诉我:爸电话里说,一个20年前他在广东打工时的老板昨天去我们老家看望了老爸。

我们那边很多人都是世代相传的木雕手工艺者;包括我的很多同龄人,早早的离开学校;早早地承担起家庭的责任;我爸爸在我小学二年级的时候就出去广东那边打工了;基本上都是赚一些辛苦钱,鼎盛的时候可以一个月拿到10k左右;一直到我初中,高中,等我大学毕业的时候,他年纪大了,身体大不如前,另外浙江这边各种加工厂也风声水起的起来了,才带着我妈回了老家,还是陆续做些木雕方面的活。
从广东回来也快接近10年了,陆续总有一些之前工厂的老板打电话过来问好,问在哪里做工了之类。

多年过去,当年的boss还未曾把你遗忘;这就是打工者最好的口碑和声誉。我觉得这比那些打工皇帝的封号还要强一点。

另外我爸的缩影其实也透露出一个重要的信息:加工产业的迁移会越来越向加工资源密集地区靠近。而加工资源中最重要的是人力资源。10年前,我们村的年轻劳动力都是跑到广东那边做工,但是现在出去的人很少了。去年听到一个有意思的故事,广东有个卖家具铜配件(仿古家具上铜拉手之类)的老板,由于广东那边生意不如前,直接把店搬迁到了东阳。




生活

我在前面的博客里很少讲我的生活;最近越来越有感觉,生活和工作在很多方面是相辅、相成、相通的。

在4月份的时候买了一个单反,后面一段时间非常忙;以致买来后都没有打开看过;最近才开始学习怎么调光圈、快门;看了两本经典的书《摄影构图学》和《美国纽约摄影学院摄影教材》。我觉得比较好的是《美国纽约摄影学院摄影教材》。

我在很多工作场景中,喜欢先确认做事的原则;然后根据这个原则再来决定如何做。在5月份的时候,我们决定将服务按用户水平切分,先定了三个规则,来决定什么样的服务需要切分:
1、是否和核心应用相关?
2、是否频繁变更?
3、是否是单点服务?
当有了这三个原则之后,操作起来就非常地顺手。
在《美国纽约摄影学院摄影教材》里,一开始就讲到了三个原则:
1、好的照片要有主题;
2、好的照片要有主体;
3、画面简洁;
很多领域的原则都是很类似的,我曾经在公司内网里贴过一篇很骚包的文章;里面讲到了产品设计的三个原则:
1、简单;
2、延续一致性;
3、抽象;
我们可以发现在很多的领域都会把简单或者简洁加入到基本原理里去。一个优美的解决方案,它必然是简单的。复杂的另外一个同义词是混乱。

最近另外一个深刻的感觉是做一个事情失败是很容易的不及时做为通常导致我们的失败。
在星期五晚上的时候,我妈告诉我 马桶盖坏了;马桶盖子一般是两层的,最上面一层是一个盖板;下面一层是一个椭圆的圈;当时我仔细看了一下,发现只是马桶圈和底座胶合的地方断掉了,盖板和圈还是一体的;上淘宝看了下,只要再买一个螺丝就可以解决问题;所以也没做什么事情,但是周六的时候发现,由于没有及时的马桶盖拆掉,在后续的使用过程中,又把马桶圈和盖板的结合处给搞断了。
这个事情基本上都可以解释我们很多的软件故障;当一个小的故障点出来之后,没有及时深入的去隔离和处理;往往会导致故障放大。

这是我最近的两点体会。




坚持

有一段时间没有更新博客,我并没有忘记当时开博的原则,但是发现坚持的困难,要坚持一个星期写一篇非流水帐的文章基本上很难。很多事情,只有身体力行之后,才能更好的理解困难在哪里,关键点在哪里。不管如何,要坚持一下。

想起那句话:“很多年的历史,我们才会有一点点传统,很多年的传统,我们才会有一点点的文化”。同样技术观点的整理需要时间的验证和积累,所以频率会降低,但是我会坚持。

最近看了很多技术类的博客,很多同学实际上已经不再写纯粹的技术文章,更多的是谈架构或者一些管理方面的东西。但是实际上很多的架构不能算是架构;比如采用哪个http服务器,选用了哪个数据库。我一直认同一个观点:天下难事,必做于易;天下大事,必做于细。真正有价值的宏观的设计必须要有细节的支撑。一个好的架构设计当然很重要,但是如果没有足够的深入细节,你是无法理解其中的奥秘的。很多时候,你面对的问题都是细节局部的问题,解决局部的问题需要的两个基本素质:数据结构和算法这多年来一直都没怎么变化;但是为了解决这个局部的难题,可能需要宏观的架构来匹配。还有一部分文章是写管理类的,仔细总结发现这类文章都在讲两个内容:1、如何做人?2、你应该如何做,才能让组织满意;我觉得这是比较无趣的事情。

最近看了两套源代码 ,一套是lighttpd,另外是nigx; lighttpd基本上看完了重要的部分,nigx 只看了网路io事件的处理。
这两个http服务器对网络事件的处理还是不一样,nigx采用了aio,lighttpd在linux是用了epool;实际上,你要是看过其他的open source项目的代码,如squid等;发现目前主流的c代码的风格还是非常相似的,单进程,单线程, 用c语言构造类似面向对象的语法。
关于lighttpd的部分整理:
1、单进程,单线程,支持多进程模式;默认最大连接数4096;
2、sendfile,writev的频繁使用;降低系统级的开销;
3、内存缓冲池;我发现c++程序的一个问题是使用了stl后内存的使用情况经常不可控;但是c的代码对于内存的控制就强多了;