| 转载自:OpenTEKr 开源星系

| 编辑:胡佳

| 设计:周颖

| 责编:钱英宇

Talk is Cheap. Show me the code.

—— Linus Torvalds

导言:春节前,发了一篇《迷失的开源乌托邦》来讨论当下的开源迷思,以及我们正在努力寻找和发现着哪些才是开源的普适价值。今天,就接上一篇的话题来聊聊开源里有关程序员的匠性。

话说就在上周二(2月8日),美国参议院针对去年底发生那场开源 Log4J严重漏洞事件举行了一场就国土安全和政府事务相关的听证会。在听证会上由Apache 软件基金会主席 David Nalley表达了几个重要的基础观点 。其中第一个:开源不仅仅是软件行业的重要组成部分,它是现代全球经济的基础之一。无论他们是否意识到这一点,大多数企业、个人、非营利组织或政府机构都依赖于开源;它是美国数字基础设施不可或缺的一部分。

(图片来自网络,若侵权则删)

那就让我们试着问一下自己的内心:我们到底是因为认可了开源的重要,而选择拥抱开源?还是我们因为有一个真实而必须要解决的问题,而最后选择采用用开源的方式?

David 随后在听证会上陈述的第二个观点,也许就回答了上述问题。“开源软件的本质是一群杰出的个人贡献了他们的时间和专业知识来做解决问题的平凡工作,而这其中许多人原来的目的是将结果纳入雇主的产品中。这也就是为什么我愿意把我的职业生涯奉献给了它。我们知道开源软件运动倡导者之一 Raymond在《大教堂与集市》里曾经也做过类似阐述:如果你想解决一个问题,就要先找到一个有趣的问题。

1

 匠性为何物?

无论是今天的 David,还是30年前的 Raymond,在他们的话语里,我也似乎看到了一个先于开源存在的基本事实,即:首先是想把自己遇到的问题解决好。事实上,这些想法也印证了公共社会学家 理查德·桑内特(Richard Sennett)在《匠人》一书中的核心观点:制造就是思考

他认为“自身制造者的人类与生俱来的匠人精神实质就是一种持久的,基本的人性冲动,那是为了把事情做好而把事情做好的欲望和本能。” 而把事情做好的欲望和本能如果对应到开源活动,我则更愿意把这种匠人精神称之为程序员匠性。对我们而言,开源的重要性并不是因为开源成为了重要的方式,而是因为开源成为了很多软件人和程序员选择用来解决问题的一个基本方式。

(图片来自网络,若侵权则删)

桑内特当年曾经花了将近两年时间,以他自己亲身的观察来研究开源社区背后的本质。在书中他把 Linux系统的开发形象地描述为一门公共的匠艺。按照他的观点,当今世界里,这个在开源共同体下通过不断迭代进化而获得巨大成功的操作系统,是人类自身,不仅作为匠人个体,更是作为匠人共同体(一个具有非人格特征的人)内心一直存在着的古希腊匠人之神“赫菲斯托斯”精神的体现,并通过追求质量之上的劳动给人类带去的文明与进步。

桑内特在书中认为“人人都可以是匠人”。关于此,我并不赞同他的观点。事实上,成为一个匠人是有前提条件的,与其说人人都可以是匠人,倒不如说人人都拥有匠性。因为匠性是天赋的,其实未必是人人都可以成为匠人。

成为匠人,所需拥有的匠性至少具备两项条件:

1)可唤醒的匠性

2)可持久的匠性

2

匠性的唤醒

那么,以匠性来论述开源,则社区贡献者即程序员的匠性就是开源的价值内核。如果以此展开,开源或许可以用如下的语句来定义:以程序员的匠性为内核,基于回应的代码协作和基于回报的社区合作的程序员共同体追求进行高质量的劳动创造后给予社会的可共享成果。程序员的匠性则包含两层含义:项目创始人的原创设计中被唤醒的匠性,和随后项参与成员通过一系列连续协作或合作产生的匠性迭代聚合。并在开源社区内最终形成开源软件。以此而论,

一个成功的开源社区,需要两个必要条件:

1)对于程序员匠性的唤醒和聚合;

2)对于聚合下程序员匠性的持续维护

的确,我们承认桑内特的观点:匠人精神实质上是基于一种基本的人性冲动。如果用David 的话来说就是一些杰出的个人对于用他们卓越的才能来解决工作种平凡问题的渴望。但,对于这种匠性是否能够持久保持?如果没有被认可,没有回应和回报,又有多少人依然能够秉承自己内心热情的勇气和坚定的执着,那么,我们将始终会存在疑问。一如之前发生的Marak因为自身经济拮据而愤然删去自己辛苦建立的开源软件库事件。而人作为社会性的生物存在,实际上是由马斯洛的需求理论来确定自己的需求的。

(图片来自网络,若侵权则删)

正像上图,马斯洛的需求理论清晰而明确的定义了人在不同的存在阶段的不同诉求。你很难要求一个还在基础需求阶段即未能解决自身生存和安全需要的程序员来秉承自我实现的成长性需求去对待和参与开源。庄表伟老师在其《再谈“开源供应链安全”》 曾经提到:自从互联网流行以后,尤其是互联网上免费的商业模式流行起来以后,大家都会谈一个词,叫做“流量变现”。其实在开源软件领域,简单的“礼物文化”,也需要升级为“注意力兑换”。

以前的逻辑是:一个人贡献礼物 –> 获得社会地位;

现在的逻辑是:一个人贡献礼物 –> 吸引了多少注意力 。

用“兑换”一词来描述了程序员对于参与了开源之后的需求:但除了兑换社会地位之外,开源社区的程序员还有更多的需求:如将获得的注意力兑换成以下不同的标的物:

  • 兑换内心满足(有人用,我就很开心);

  • 兑换社会地位(更高的社会评价);

  • 兑换就业机会(跳槽到大厂);

  • 兑换风险投资(有投资人看中这个开源软件);

  • 兑换维护合同(有企业级用户使用,愿意找你维护)。

通过以上庄表伟老师对“程序员参与开源贡献而期望获得的注意力兑换”的描述,我们可以清晰地看出,每个开源程序员在开源社区注入自己的匠性之后,渴望得到的无非是这几点:内心自我满足、更高的社会声望、更好的职业机会、更多的商业利益、更大的权力。而我们必须接受和承认一个事实:不同的程序员存在不同的回报需求

所以,对于程序员匠性的持久释放只能出自于一个根本性的出发点:程序员的需求能够不断得到回报和满足。而这样的实现也只能来自两个方面:内在满足和外在回报。

内在满足:只有内在满足后被唤醒的程序员匠性才可以继续自我燃烧;

外在回报:只有获得外在回报后被唤醒的程序员匠性才可以继续持久释放。

如果把回报以广义来看待,那么回应也可以是回报的一种最基本存在方式。

当然,就算桑内特对于程序员匠性贡献的描绘是过于理想化的,我们可以拒绝它,但我也坚持认为不应该去否定它。因为将工作本身当成是热情付出的回报现象,现实社会中是确实存在的。

梵高传记《渴望生活》之中所讲述的就是这样一个故事。梵高的一生是在他对于绘画艺术上的付出几乎没有产生任何被回应、被接受、被赞美、被回报,甚至连一幅画都卖不出去的悲惨境遇中度过的,唯一只能靠自己的弟弟接济。但他却心无杂念地去执着于自己热爱的艺术,让自己获得内心的平静,真挚地表达自己的想往。他对于梦想的执着坚守,我们可以在他与弟弟提奥关于理想的讨论中略窥一斑:

“我们内心的思想,它们表露出来过吗? 也许在我们的灵魂中有一团烈火,但没有一个人前来取暖。过路人只看见烟囱中冒出的一缕青烟,便接着走自己的路去了。那么,听我说,应该怎么办呢? 难道不应该守护着心中的这团火,保持自己的热情,耐心等待着有人前来取暖的时刻吗?”

3

  匠性的回应和回报

社会学家查尔特.赖特.米尔斯在《白领:美国的中等阶级》中对20世纪中期定义的匠人特征这样描述:把自己当成匠人的劳动者专注于工作本身,从工作中得到的满足感本身成为了一种回报。桑内特认为像Linux 这样的开源共同体就很符合这个特征描述,其中很多程序员为此付出自己的代码成就自己的满足感。

无可厚非,存在于马斯洛需求理论塔尖的价值观的确可以作为少数天才的追求,毕竟这是一个具有高尚理想主义者的终极需求或者是在越过了基本需求阶段的卓越者的自我实现需要。

对于程序员,外在回报是基于“不同的程序员存在不同的回报需求” 这样一个不可否认的事实。所以,也同样有更大的理由值得我们让去继续追问:开源共同体除了那些把自己当成匠人的理想主义程序员的匠性贡献之外,我们还可以用哪些方式让他们能够在开源共同体中持久释放其程序员匠性?

雷蒙德所发现的那些在丰裕经济下的极客精神和礼物文化的驱动力,并以此努力去唤醒开源社区程序员的匠性,那是需要程序员在一定的经济和道德水准之上才能拥有条件去参与的。一方面,确实是理想主义的;另一方面,这在一定程度上无疑也局限了开源的未来

在深入阅读了桑内特的《匠人》之后,我发现他在书中其实是在列举了匠人精神在传统的命令体系和竞争体系的失效后,再转而去论述了匠人精神基于人的本能和内心冲动。但,我并不认同前者的简单无效,桑内特的那些反对意见倒仅是显得他为了支持自己的观点而偏废了其他方式的可行性。但这却并非证明了是这两种体系的失效,而可能只是在这两种体系下的回应和回报机制的失效,当回应失效自然导致了协作失效,当回报失效自然导致了则合作失效

“Marak删库事件”可能是个极端的例子,但我们同样也看到了仅在热情体系驱动下的脆弱和无奈。撇开道德和人性,Marak 所遭遇的情况肯定不会是个案。随着加入的开源项目的成员多样化,有个人爱好者,有在商业科技公司工作的,有在企业中的开源消费者,有开源基金会的成员,他们身处不同的激励体系,他们原本可能怀着不同的诉求,所以,当开源不再是一个程序员匠性贡献的乌托邦时,我们更需要以现实的勇气去面对。

如果每个开源人的匠性热情都值得珍视的话, 那么余下应该是讨论该如何去珍视和包容。对于程序员在开源社区所做匠性贡献做出恰当的回应与合乎理性的回报,则是每个参与开源活动的人员和组织应当思考和面对的挑战。

一报回一报

我们的朋友 tisonkun 在他的夜天之书博客《共同创造价值》一文中从社区运营的角度提出了如何吸引开源开发人员参与?又如何让他们留下来成为项目共同体的一部分?一方面,他重申了只有可做的事情是令人兴奋的创造价值,才有可能触发潜在的参与者兴趣;另一方面,提出了社区可以给予到参与者以足够的帮助,如在代码之内通过代码评审、缺陷修复等,在代码之外通过使用、发布和内容等互动。这些在对程序员匠性的回应层面给出一个具有实践价值的指引。

进而在程序员利益主张多元下的背景下,当我们进一步去探讨如何进行和开展程序员匠性的回报时,不管是命令体系,竞争体系,还是交换体系或者礼物文化的驱动,无论哪一种方式,实际上,罗伯特.阿克塞尔罗德在《合作的进化》一书中都给出了简单而直接的原则:

在没有任何预见的前提下,以善良和贡献为第一步的“一报回一报”策略是最值得实践的策略。对有预见能力的参与者而言,在掌握了合作的真谛后,可以加快合作的进化。

这样的合作进化,一旦发生,就是不可逆转的,一如人类文明的进程

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

相关阅读 | Related Reading

Nginx不接受俄罗斯的贡献,违背开源协议和定义吗?我们冤枉F5了吗?

开源先锋启示|有爱的开源

开源社 ONES Group 开源战略研究组第一次线上工作会议顺利召开

开源社简介

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

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

程序员匠性的唤醒和维护相关推荐

  1. 浅谈对程序员的认识_浅谈IT界程序员大佬普遍对性的追求

    原标题:浅谈IT界程序员大佬普遍对性的追求 业界程序员大佬跟普通程序员的差别,别的不说,对于完成一个需求来说,除了更少的 bug,还有什么优势? 还有程序员对性的追求. 下面谈谈最顶级的程序员对20个 ...

  2. 自学成为程序员_成为程序员不需要的10件事

    自学成为程序员 Do you have what it takes to become a programmer? Chances are, you will base your answer on ...

  3. 完全拷贝的一份,程序员阅读书单

    Apocalypsa Rumination Introspection 博客园 首页 新随笔 联系 订阅 管理 随笔 - 28  文章 - 1  评论 - 1046 程序员必读书单 作者:Lucida ...

  4. 程序员必读书单1.0

    原文:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必 ...

  5. 转:程序员必读书单 1.0

    本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a ...

  6. 程序员必读书单 1.0 ----转自Lucida

    本文转载自:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书 ...

  7. 程序员是干什么的呢?

    电子商务 随着电子商务的飞速发展,越来越多的程序员涌入电商服务领域,在这个领域中,他们发挥着极其重要的作用.那么,程序员是干嘛的呢? 简单来说,程序员是电商服务平台中的技术支持人员,他们负责开发.设计 ...

  8. 程序员必读书单 (仅供参考)

    转载:http://zh.lucida.me/blog/developer-reading-list/ 程序员必读书单 1.0 发表于 2015-02-25    |   分类于 阅读    |   ...

  9. 计算机经典书籍电子书合集(适合计算机学生学习以及程序员笔试、面试)

    2楼JAVA篇 此篇收录:.<Java 2核心技术>.2.<Java编程语言>.3.<Effective Java>.4.<Java解惑>.5.< ...

最新文章

  1. 简单看看PageHelper的配置
  2. 从C ++定义QML类型
  3. EF增删查改加执行存储过程和sql语句,多种方法汇总
  4. 行!人工智能玩大了!程序员:太扯,阴谋!你怎么看?
  5. mysql客户端重置密码是多少,mysql重置root密码
  6. shell之case和function
  7. 计算机网络学习笔记:第三章
  8. js点击按钮改变字体大小并给他颜色_如何在Elementor中修改文本的字体、大小、颜色、样式...
  9. 二、三角高程测量计算(C#语言)
  10. 产品读书《产品经理的第二本书》
  11. SpringBoot整合Redis实战
  12. 电工技师技能实训考核装置QY-W601C
  13. 田英章硬笔书法24课 课堂练习
  14. 苹果手机铃声制作教程
  15. 如何在微信中使用企业邮箱,企业微信邮箱密码是什么?
  16. [从头读历史] 第261节 左传 [BC657至BC598]
  17. 字节跳动工程师收入世界第五,2021年全球程序员收入报告出炉
  18. Spring Cloud 极简入门
  19. androidStudio分包引起的系统崩溃,报错ClassNotFoundException: Didn‘t find class “XXXView“ on path: DexPath../.apk
  20. Jquery将table转换成excel实现下载

热门文章

  1. Java时间日期显示
  2. FPGA学习——verilog捕捉信号上升沿下降沿
  3. 倾斜摄影模型数据在gis中的应用
  4. 传奇扑克联合30位顶级投资人,数百家众创空间,打造扑克联赛新生态
  5. C#读取钉钉打卡记录(四)——获取员工信息
  6. LM324电压比较器介绍
  7. 部署Kubernetes集群(二进制 v1.18.5版)
  8. Mac 下安装composer 及全局安装
  9. 数据挖掘 (三)——基于python的当当网小爬虫
  10. 转:攻击JavaWeb应用[6]-程序架构与代码审计