16、自己动手写框架 - 与屈原对话及开源精神

2019-07-03

端午节到了,人们都在讨论屈原不屈不挠的精神,以及龙舟、粽叶等世界文化遗产。粽叶清淡,给人无限的遐想。或者,你很容易想起和粽叶形状比较类似的竹叶,以及屹立挺拔的骨感竹子。竹在清风中瑟瑟的声音,在夜月下疏朗的影子,都让文人墨客深深感动。而竹于风霜凌厉中苍翠依然的品格,更让诗人引为同道。苏东坡曾在《于潜僧绿筠轩》里宣称,“宁可食无肉,不可居无竹。无肉令人瘦,无竹令人俗。人瘦尚可肥,士俗不可医。”当年郑板桥曾作《竹石》,细细品味,也给人许多思考。

作为开源参与者,其实我们可以联想到很多和竹子相关的典故,以及和竹子相关的精神。端午节前,困顿的晌午,我决定穿越时空,会一会屈原。

对话屈原

为此,我溯江而上,穿越雄伟险峻的长江西陵峡,抬头眺望长江北岸,有一座气势雄伟的建筑,半遮半掩在桔林与翠柏之中,这便是世人瞩目的屈原祠。

拾级而上,来到屈原祠里,一番膜拜之后,我准备与屈原做一次详谈。“屈大夫,我不想继续做程序员了,你能给我一个让我坚持的理由吗?”我问。

屈原回答:“你看看我的祠堂四周,看到那些山蕨和竹子了吗?去年我播种了山蕨和竹子的种子后,给它们光照和水分。山蕨很快就从地面长出来,茂密的绿叶覆盖了地面。然而,竹子却什么也没长出来。一年过去了,山蕨长得更加茂密。竹子的种子仍然没有长出任何东西。2年过去了,竹子的种子还是没有发芽。 然而,到了第5年,地面上冒起了一个细小的萌芽。与山蕨对比,它小到微不足道。但是,仅在6个月之后,竹子就长到100英尺高了。竹子花了5年时间来长根,正是根给了它生存所需的一切。”

屈原捋了捋胡须,缓缓说道:“孩子,你这段时间所做的挣扎,实际上就是你长根的时候。不要拿自己与别人对比。现在,你的时机到了。你会上升得很高。”我离开了屈原故里的香溪河口,带回来了这个故事。

一路上,我在反复琢磨,并百度了解毛竹的特性。原来,毛竹萌芽之后,最初4年居然只能长3厘米,但是到了第5年却以每天30厘米的速度生长,只用6周就可以长到15米。在这潜心钻研的4年里,竹子都是在扎根,它将自己的根在土壤里面延伸了数百平米。没有这种沉心钻研,哪有今日绿竹成荫!

竹子精神与开源

回到开源世界的现实生活,细细品味屈老夫子的话,让人感慨良多。做产品、做框架亦是如此,不要担心你此时此刻的付出得不到回报,因为这些付出都是为了扎根。人生历练何尝不是如此,多少人,没熬过那3厘米!

竹子的群生精神与开源

说到群生精神,李克强总理用很通俗的话解释了一次:“一个人干不过一个团队,一个团队干不过一个系统,一个系统干不过一个趋势。 团队+系统+趋势=成功。一个人可以走得很快,一群人会走得更远! 你能整合别人,说明你有能力; 你被别人整合,说明你有价值。 在这个年代,你既整合不了别人,也没人整合你,那说明你离成功还有很远!”这种启示,在竹子身上也可以看到。平时,人们看到的往往是一片竹林,而不是孤零零的一棵竹子。对一棵竹子而言,它面对的只有死亡。这说明团队成员之间,只有大家抱团才能生存和发展下去,否则,这个团队只有死亡。

说到开源团队的群生精神,我还想引用一个群鸟南方的故事。每当秋季来临,天空中成群结队南飞的大雁就是值得我们借鉴的企业经营的楷模、一支完美的团队。雁群是由许多有着共同目标的大雁组成,在组织中,它们有明确的分工合作,当队伍中途飞累了停下休息时,它们中有负责觅食﹑照顾年幼或老龄的青壮派大雁,有负责雁群安全放哨的大雁,有负责安静休息﹑调整体力的领头雁。在雁群进食的时候,巡视放哨的大雁一旦发现有敌人靠近,便会长鸣一声给出警示信号,群雁便整齐地冲向蓝天、列队远去。而那只放哨的大雁,在别人都进食的时候自己不吃不喝,是一种为团队牺牲的精神。

据科学研究表明组队飞要比单独飞提高22%的速度,在飞行中的雁两翼可形成一个相对的真空状态,飞翔的头雁是没有谁给它真空的,漫长的迁徙过程中总有人带头搏击,这同样是一种牺牲精神。而在飞行过程中,雁群大声嘶叫以相互激励,通过共同扇动翅膀来形成气流,为后面的队友提供了“向上之风”,而且V字队形可以增加雁群70%的飞行范围。如果在雁群中,有任何一只大雁受伤或生病而不能继续飞行,雁群中会有两只自发的大雁留下来守护照看受伤或生病的大雁,直至其恢复或死亡,然后它们再加入到新的雁阵,继续南飞直至目的地。

同样,对于成功的开源团队而言,个人强大的技术是一方面,但团队力量远大于一群人的简单相加。项目组由项目管理、需求分析、软件设计、编码、测试、实施等各方面的专业人士组成,每位成员在自己专业领域内发挥主导作用,并可以为项目的成功提出非自己领域内的建议。最终的项目成果是各位专业人士共同努力的结果,所有人对最终成功承担同等的责任。这样,当系统部署后,系统出现了一个严重缺陷,请问谁应该负责?项目经理?测试?开发?……都不是,而是项目组全体都要负责!

竹子的自主生长精神

当年板桥就说过,“咬定青山不放松,立根原在破岩中。千磨万击还坚劲,任尔东西南北风。”也是说的竹子不屈不挠、自主钻研、任性成长的精神。

在常见的开源项目组中,难免有部分成员是新手,经验和水平不足,某些工作可能一时不能胜任。迫于项目进度压力,某些任务就会直接安排给他做,不让他提出自己的想法和见解。不少成员也喜欢以“接受任务”的方式来工作,而不是主动迎接挑战。于是有时候,你可能遇到一些成员会跟你说“今天工作已经完成!”“我按照任务要求来做的,我没有错!”之类的话。

就像竹子“千磨万击还坚劲”的精神一样,每个项目成员都有当家做主的机会,应相信自己在本领域内是专家,在我的专业范围内,我可以说了算!只要满足项目的大框架,只要出发点是为了项目成功,那么这段代码应该怎样写、这个功能点应该如何测试等之类的决定,完全可以让成员来做主!项目成员可能一时没有魄力独立做决定,可能担心犯错误,没关系,要多多鼓励他!Tiny团队就是这样,我们每个团队成员的自主精神贯穿在日常的工作始终。TinyFramework的立意是企业级的开发平台,因此在方法论、设计理念、开发体系、设计原则、生态圈、模块化、热部署、水平扩展、元数据等非功能性要求方面做了大量的自主探索和独立实践,当然在这些领域也都有了完美或者不错的解。

“扎根”与开源

不知道你注意没有,在成长的过程中,竹子始终是一节一节生长。竹子生长一段,就接一个箍,再生长一段,再接一个箍。这说明,竹子是会总结和反思的。所以,对团队成员来讲,也要学会总结和反思,才能不断地成长和发展。说到这里,我想谈一个扎根理论。作为质化研究中的一种建构理论,扎根理论是由斯特劳斯(anselm strauss)和格拉斯(barney glaser)两位社会学者在1967年出版的《扎根理论的发现》一书中提出的。扎根的理论,就是用归纳的方法,对现象加以分析整理所得的结果。在开源团队,尤其需要学习竹子的扎根精神。

在开源产品的成长过程中,我们同样要发挥这种扎根精神,不断总结提高。一般来说,一个开源产品,从开始,到发展,到最后能有收入,能营收平衡,这个一个漫长及艰难的过程。按照一般人的观点,牛人总是喜欢和牛人在一起工作,这句话是有道理的,然而要组建一个全是精英的团队,对于大多数开源产品来说只能是一个梦想。一般的团队,招到团队来的人,精英只是个别,也就是所谓的骨干了,而大部分还是熟练工、生手甚至是新手。团队由各种层次的人组成,这也就是所谓的团队梯队配置了。

为何团队会需要梯队配置?原因其实很简单,你的团队所负责的工作,不可能全部由精英骨干力量去完成。个人能力再突出,不适合团队的人或许给你团队带来的是负面影响。唐僧四师徒西天取经,如果每个人都是孙悟空,不是自己内斗死,就是被妖怪吃掉!从研发编码的角度举例,需要更多具有扎根精神、各具特长的成员来参与,才能取得成功。比如在Tiny框架开源团队中,有句口头禅,嘴巴讲的不算。所以不管是需求还是BUG,都要统统录到Issues当中,于是提出问题、批注问题、解决问题、跟踪问题、关闭问题,都在Issues当中进行管理。当然,所有的过程也就成为呈堂证供,抵赖不得。

竹子精心耕耘,能够延伸数百平米,就是靠的这种不断接“箍”的“扎根”精神。加入到开源团队,做开源产品,就要耐得住平淡,经得起风雨,把开源之根留住!软件研发活动是人类复杂的高级智力活动,是需要team work的活动。如果明白这个道理,研发团队中的每一个人将是值得尊重的、有血有肉的、充满激情和战斗力的专家!也只有这样,才能开发出具有高质量品质的开源产品。Tiny架构的设计师最初就致力于做一个各方面比较均衡的开发平台,于是就从各种小的专题性验证开始“扎根”,比如:流程化编程、模块化设计、数据库分区分表等等一一进行验证,当验证的范围越来越大,涵盖的领域越来越多的时候,才真正开始决定做一个开源框架。这实际上也是一个“竹叶成荫”的开拓过程。

竹子的虚心精神

竹在荒山野岭中默默生长,无论是峰峰岭岭,还是沟沟整整,它都能以坚韧不拔的毅力在逆境中顽强生存。尽管长年累月守着无边的寂寞与凄凉,一年四季经受着风霜雪雨的抽打与折磨,但她始终“咬定青山”、专心致志、无怨无悔。这种虚怀若谷的精神,让人敬佩。

大家注意到没有,所有的竹子都是中空的,都是能容得下其他人的,都是能像其他团队成员虚心学习的。以Tiny框架为例,在Tiny框架早期,整个团队还是默默无闻的,因为Tiny团队不想在框架还是一个半成品的时候就拿出来,直到Tiny已经开发完毕并且在自己的项目中进行了充分验证的时候才真正的在社区或相关网站进行露面。开发者们互帮互助,虚心求教,一个问题提交到社区的“有问必答”栏目,往往就会有许多同伴互相帮助,问题也能在最短的时间内得到解决。由于Tiny框架是立足于在需要稳定、安全要求非常高的应用环境中使用的,因此其稳定性就是框架构建者首要思考目标,核心部分只使用经过充验证及广泛应用的第三方包。

细细品竹,便会觉得竹子是学习的楷模。竹子挺拔俊逸,做人应该具有这种翩翩君子的开源风度;竹子中空外直,做人应该修炼这种虚心自持的开源品格;竹子弯而不折,做人应该学习这种柔中有刚的开源智慧。开源是一个艰辛的选择,需要长久的坚守,需要一份不急不燥的态度。团队合作、团队协作也是如此,达成配合与默契更需要不断的沟通、磨合与深厚的信任。只有这样,我们才能见证优秀的产品是如何一步步走向成熟,才能在开源的氛围中快速成长!