| 转载自:OpenTEKr 开源星系

| 编辑:周晶晶

| 设计:马丽娜

| 责编:王玥敏

整体的我们会比其中任何一个来得聪明。

你看,会有整整一代的代码诗人,都在疯狂工作。他们热爱自己的事业,虽然彼此之间会有摩擦,但正在创造着下一个谷歌或脸书。

这些个体创造了信息时代的煤炭和钢铁。不过,这些钢铁不再属于卡内基家族了,而属于全人类。那就是未来。

未来,是一个在丰富自我的同时,又能丰富他人的世界。

—— Jim Zemlin

玩开源的程序员,大多了解 Linus 曾经说过的那句霸气无比的话,“Talk is cheap. Show me the code”。

代码胜于雄辩

这是 Linus 于 2000 年 8 月 25 日在社区邮件列表上讨论关于 Linux 内核线程优化问题时,其中一个人提出了个他认为非常高效的方案,而 Linus 认为这个方案不够好,于是他在回信中就写下了这句在今天足以堪称经典的话,这也令很多程序员感觉非常惬意。

从此,每当程序员们产生各种言语纷争而又一时无果时,往往便以这句话来结束唾沫横飞的争论。一方面,我们看到的是程序员文化中“与其你口头 zhuangbility,不如代码 Niuabiity” 的内涵;另一方面,我们也可这样理解:代码胜过一切含糊不清的争论

因为平常的语言沟通,即使一个明确的想法,即使用同样的字词,却因为语境或者语法造句等因素,让自己原本想表达的构想无法被对方精准理解和捕捉,从而产生各种歧义和误解。而写出来的程序因为代码规则的标准性和编译后的可运行性产生了所见即所得的效果,让代码就不言自证了其原先想法的清晰性,正确性或者优越性。当一切用可见的代码及运行结果来说话,争论自然就偃旗息鼓。

Facebook 创始人扎克伯格也曾在自己公司上市的前一天发表的上市演讲中说过了类似的话,他当是这样说的:“Code wins argument”,即代码胜于雄辩”。言下之意是两层意思:

  • 码是一种比平常语言更能精确表达思想的工具

  • 代码运行出来的结果可以见证想法的恰当与否

于此,我们必须接受和承认这样一个事实:在沟通误解和语言歧义的困境面前,程序代码比日常语言有着更加精准表达的优势。程序员拥有比普通人更好的沟通载体,这个载体就叫程序代码。代码首先是一种能清晰和精准表达思想的语言载体,其次是可以通过编译后运行来直接验证效果的沟通工具。如果说数学是最精准而抽象的语言,那么程序代码可以说是精准而同时有事半具象半抽象的语言。

代码穿流是什么?

开源因为继承了由理查德·斯托曼所开启的自由软件运动所倡导的代码开放共享精神,使得程序员们可以在拥有了代码语言进行精准表达自己构想的基础上,更可以通过这些开放且透明可见的源代码承载着他们的思想,在不同的程序员间或者开源社区的不同成员之间来回穿梭,以此充分交换和反馈各自自己的想法。我把它这个过程定义为代码穿流,而这样的代码穿流正是因为代码语言的精确性,成为了开源社区不同社区成员间的低歧义和几乎零误解的沟通载体,创造了开源社区独特的高效且有效的沟通基础。

一般我们认为,开源共同体的创新基础在于分布式的社会化协作。实际上,社会化协作是代码穿流后的一种结果表现。而开源的代码语言作为沟通基础,辅之以如 GitHub 一类的开源协作平台工具,直接效果当然是提高了开发效率,但究其本质其实应该是代码穿流后形成了开源共同体间的创新价值。

为什么这样说呢?

知识的显性和去粘性化

在知识创新的领域里,实现价值创新的一个重要基础是知识的可传递。知识作为一个特殊而无形的物品,其可传递的核心是解决两个问题

1)知识的显性化

2)知识的去粘性

进而实现知识的无损耗传递。程序代码则作为人类知识领域的一部分,当然也存在同样的显性化和去粘性问题。

人类的显性知识是可以通过文字、数据、代码、图像等方式进行传递和学习的;而隐形知识则属于人们在长期的学习工作实践中获得并积累下来,与个体的经历及体验有关,或者只能从结果推测,且大多只能意会却难以用语言明示或学习的知识。

对于显性知识下的隐形知识,在翻译美国作家菲茨·吉拉德的名作《了不起的盖茨比》时,作为译者的日本著名作家春上村树在对于如何翻译好开头和结尾、该如何表达原作者想在语言中表达的情绪时,曾经如此纠结过:

读上几遍还是只能感慨文字的美,每一个词都有丰富的含义和实质,既有深刻的暗示性,犹如乙醚般清淡,想要捕捉时它却从指尖溜走。

从这段评论中,我们可以看出在日常语言下,即使对于一个专业的作家而言,知识显性化的提取也是非常高难度。当然,菲茨·吉拉德用显性语言来故意蕴藏他想表达的隐含之美是另外一层艺术创作境界,而对于可以我们得出的一个结论是:日常语言对于知识的显性化传递是无法做到足够清晰的;同时,那些受高度语境限制且不确定的语言则更会成为粘性知识。所谓粘性知识,是指必须通过近距离的观察和沟通甚至面对面的交,才能了解获得的知识。

大家应该知道,有个一个古老的游戏叫“拷贝不走样”。百度百科中是这样描述的:

规则是先给第一个人看他要表演的话语或素材,第二个表演给第三个看,依次下传。最后一人要把他理解的意思讲出来,猜中则胜利。该游戏起源于曾经在上海电视台热播的综艺节目《智力大冲浪》。节目最早的版本其实是,人们隔着厚厚的移动墙向下一个选手传与该词相关的动作,然后最后一个人说出第一个人做的姿势的含义,往往笑倒一片观众,拷贝不走样的游戏性在于“拷贝走样”。在活动中,观众可以亲眼目睹动作渐渐走样,这是因为,清楚知道词语的 B 不一定能表达相同信息给后面的C,动作的模仿中关键的“细节”容易遗漏,或是被C、D、E等人再创造而传承。

实际上,这个游戏的隐含意义就是粘性知识在信息的传递过程中,由于传递者自身及语言,动作姿势的模糊性及多义性,信息会被迅速衰减。从这个游戏的结果,我们大致可以得出一个粗浅的结论:粘性知识的传播是距离的衰减函数。

编译成二进制且不提供源代码的程序,虽然通过运行可以看到显性结果或者使用,但事实上因为代码的不可见就是一种典型的隐性且粘性的知识。传统的软件提供商在提供可运行的软件时会附带软件使用手册或者技术文档来局部显性化,也会通过一些面对面的交流沟通(这些往往以培训、现场指导等形式出现)来局部去粘性。但最直接和最透彻的显性化无疑就是提供源代码。当初自由软件运动和随后兴起的开源运动的初心,就是为了让代码知识显性化的无损穿流。

所以在开源软件实践中,程序员通过代码编写将自己的想法精确表达出来,并且通过代码开源行动开放共享出来,就是一次非常典型的知识显性化过程。随后通过社区开展的各类活动如论坛、meetup、会议等线上线下活动进行知识的去粘性化,进而让显性化的代码知识在开源社区的不同成员间无损穿流达到分享传递和协同,让不同程序员的匠性得以聚合,最终达到社会化协同创新。

我们的结论

所以,软件代码通过开源让软件程序的隐形知识显性化加强,显性化的知识进而通过开源社区的各类活动以最大限度去粘性化,形成代码穿流。这,应是开源集市模式卓越性的一个本质所在。这也就是代码穿流力。由此,我们可以得出第一个结论:

结论1 :开源的软件代码是软件类知识传递损耗系数最小的传递载体。

软件代码的开源是软件知识显性化的最优方式,而积极的开源社区活动则是软件知识去粘性化的最佳手段

前不久,Apache 基金会主席 David Nelly 在美国参议院的听证会上所言中看到,开源已经成为数字经济的重要基础设施。那么程序代码必然是开源创新协同的重要载体。Linux基金会的执行董事Jim Zemlin曾经在2013年的一次 TEDx 演讲中提到这样一些数据:荷马史诗《伊利亚德》15,000行,《战争与和平》45万字,在Linux项目中,每一天的每一小时至少有7个变化在 Linux项目里发生,仅2012年就有近一百万行的代码被提交,这又是由分布在全球的407个公司、几千个程序员一起合作产生的结果。

到今天,Linux毫无疑义的已经成为在过去30年以来最成功的全球化开源协作项目。正是这些 Linux 里开源的代码穿越了时间,跨越了地理空间,更涵盖了不同种族的人群,进而造就了人类软件史上的一次伟大奇迹,这几乎和代码穿流的力量密不可分。由此,我们可以得到了代码穿流的另一个结论:

结论2:开源的代码在时间、空间和不同人群之间穿流的程度决定了这个开源社区的价值。

我们也可以这样认为,在开源项目原始创意价值确定的前提下,开源社区的价值是代码穿流的时间,空间和人群的函数。即如果代码所穿越的群体越广泛、时间和空间,那么价值可能就越大。而它的逆否命题则可以这样描述,如果一个开源社区无法在跨时空和跨群体里穿越,那么它的创新价值有限。

代码穿流后,软件代码知识就不再是时间和空间的衰减函数,反而可能成为时间和空间的递增函数。进一步而言,开源社区也未必会因为多样化和多元化角色间的差异衰减社区价值,而可能表现为随着社区成员多样化和多元化,以及其中成员间的争论增多而更显得有价值。那时,如果开源社区的代码如果想更快更新迭代,也未必需要社区成员很擅长懂得如何协作,也未必需要每个成员成为不敢争论的“老好人”,社区可能更多需要地是能够经常相互批评并捍卫自己想法的成员。当然这里有一个必要的前提就是对于所有的争论,最后能够以 show me the code 来终结,并且也足以让争论分出胜负。也许我的这个想法有些乌托邦,但事实可能也就如此。

关于“激烈辩论有利于创新”这一点,在2003年伯克利大学曾经做过一次称作"一个想法是如何被创造出来的?”的实验。当时,一些实验者被分成两组,其中一个组采用“传统的头脑风暴法”,即该组成员不相互批评、而鼓励每个被提出来的想法,认为没有一个想法是坏的想法。另外一个组则采用"激烈辩论法",即小组成员相互批评各自想法,鼓励以积极的辩论去捍卫自己的想法。出乎我们的意料,这个实验最后的结果竟然是激烈辩论法的那一组获胜,相比头脑风暴组而言,他们反而产生了高出头脑风暴组一个数量级的好想法。由此,我们又得出第三个结论。

结论 3:开源社区内的激烈争论将有利于开源软件的创新

当然,这条结论的前提是代码语言的精准表达性和代码编译运行后的可校验性。Jim Zemlin 在那年的 TEDx 演讲中还如此动情地讲到:

All of us are smarter than any one of us.. there's a whole generation of code poets out there, working furiously. Poets who love what they do, who may not get along, but are creating...These indivuals have created the coal and steel of the informaiton age...The future is a world in which can enrich yourself, while at the same time enriching others...

这就是代码穿流的威力。

也恰如在关于乔布斯生前往事的纪录片《失落的访谈》中,提到乔布斯在1995 年接受的采访中所说,程序语言在未来应当像其他我们日常所用来沟通的语言一样,成为我们每个人必备的交流工具。虽然这对一般普通人要求过高,但无疑他看到了代码作为思想的传达载体具有比数学更具象,比语言更精准的表达。

抉择

如今开源的代码已经成为了软件知识传递过程中的一种最佳工具和载体。开源的内在价值取决于开源的代码在时间、空间和不同人群间的无损穿流力。

我们也由此相信,任何一个开源项目的创建者在明白了开源的生命力和创新力来源于代码的穿流力之后,应该可以在所处的环境中做出理智的选择,除非已经放弃了开源的初衷。

注:封面图和文中引用图片均来源于网络,侵删。本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

相关阅读 | Related Reading

刘天栋:开源是打破内卷的最好方式

活动预告 | 开发者如何贡献开源,从入门到大牛

对话 ASF 2022 年度董事姜宁,深入 Apache Way,直播预约中

开源社简介

开源社成立于 2014 年,是由志愿贡献于开源事业的个人成员,依 “贡献、共识、共治” 原则所组成,始终维持厂商中立、公益、非营利的特点,是最早以 “开源治理、国际接轨、社区发展、开源项目” 为使命的开源社区联合体。开源社积极与支持开源的社区、企业以及政府相关单位紧密合作,以 “立足中国、贡献全球” 为愿景,旨在共创健康可持续发展的开源生态,推动中国开源社区成为全球开源体系的积极参与及贡献者。

2017 年,开源社转型为完全由个人成员组成,参照 ASF 等国际顶级开源基金会的治理模式运作。近七年来,链接了数万名开源人,集聚了上千名社区成员及志愿者、海内外数百位讲师,合作了近百家赞助、媒体、社区伙伴。

代码穿流-迷失的开源乌托邦之三相关推荐

  1. 瞰见|迷失的开源乌托邦

    这幻想仅止于此--我不允许--尽管 泪水从我脸上滚落,但我没有哭泣,也没有失控. 我只是等了一会儿,然后转身回到车上,驱车朝我该去的地方驶去. --<莫失莫忘>/ 石黑一雄 作者 | 狄安 ...

  2. C++写的一个聊天室代码,用于XEIM开源即时通讯软件上的

    // C++写的一个聊天室代码,用于XEIM开源即时通讯软件上的,欢迎大家一起交流. // XEIM_ChatroomDlg.cpp : implementation file // [即时通讯软件] ...

  3. 代码阅读——十个C开源项目

    代码阅读--十个C开源项目 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性 ...

  4. 老板心血来潮要自己搞低代码平台?这个开源项目试一试!

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 平日里大家编码的时候肯定想着如何能提高自己的工作效率,那么一种方法肯定是提高自身的编码水平,但是同时工欲善其事必先利其器,如果有一款好 ...

  5. Git仓库代码同步到GitHub开源社区开源代码库

                    Git本地仓库代码同步到GitHub开源社区开源代码库                                                         ...

  6. 基于MISRA-C和VS Code的代码静态检查的开源解决方案

    基于MISRA-C和VS Code的代码静态检查的开源解决方案 简介 工具 配置步骤 简介 MISRA-C是汽车嵌入式软件开发中常用的静态代码检查工具.常用的商用静态代码分析工具,比如QAC.Cove ...

  7. 新朋实验室之玩具遥控车改装为ARDUINO蓝牙遥控小车(代码及制作过程开源)

    新朋实验室之玩具遥控车改装为ARDUINO蓝牙遥控小车(代码及制作过程开源) 2017年08月21日 12:55:25 XPLab 阅读数:4008 你家里的玩具遥控车坏了?遥控器丢了?先不要急着丢掉 ...

  8. java pmd_java代码扫描:pmd开源项目介绍

    java代码扫描:pmd开源项目介绍.能够扫描java代码,并发现潜在的问题与bug. PMD scans Java source code and looks for potential probl ...

  9. AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie

    原文 Airbnb 发布的 Lottie 是一个面向 iOS.Android 和 React Native 的开源动画库. 简单来说,就是可以直接利用 AE 导出的 JSON 动画文件,将其解析为原生 ...

最新文章

  1. 基于CAP:深入剖析分布式一致性机制
  2. 从R-CNN到Mask R-CNN的思维跃迁
  3. ngx_lua中的协程调度(三)
  4. 狗屎一样的代码如何重构?
  5. 前端面试分享:秋招总结(html和css篇)
  6. ztree插件的使用
  7. 是可改写的随机存储器_PPT下载:磁阻随机存取存储器
  8. 怎么让几何画板中点和点的坐标移动
  9. (CSCD 理工科)中文科技核心期刊汇总
  10. python实现爬取12306所有站点及其编码信息(附源代码)!
  11. Ubuntu-区域截图
  12. UVA 10066 The Twin Towers
  13. CH340G软件识别、usb转串口软件识别、测试
  14. 【C++】模板进阶 — 模板特化
  15. 并发控制中的乐观锁与悲观锁
  16. 影像组学|特征定义以及提取
  17. html文本隐藏内容占位,在HTML中如何隐藏某段文字具体该怎么实现文
  18. C++迭代器之'插入迭代器'
  19. vue 项目 想修改代码严格模式 lintOnSave
  20. PLSQL如何保存用户名和密码

热门文章

  1. python图片增强 曝光度,亮度
  2. Sqlalchemy 使用总结
  3. 第7篇:SELECT条件查询
  4. 赛马网基本算法之--将功赎过
  5. 计算机网络安全知识征文,网络安全从我做起作文(精选5篇)
  6. docker中文管理神器Portainer一键安装
  7. 数据库之多表联合查询
  8. 重庆北大青鸟解放碑校区J12班 chickenNice队【游戏账号交易平台】
  9. 单板吉他,音质还可以
  10. git/github学习笔记