最近关于 996 的讨论愈演愈烈,其中一种看似理性的观点是:就业市场是自由的,如果 996 不合理那么可以换一个工作,这是一个自由的双向选择,996 公司的存在是因为员工自己认可该选择。

但是事实上会发现,绝大部分公司均有朝延长工作时间的发展倾向,本文尝试从理论层面分析,在现代经济结构下 996 工作制是现行规律的发展结果,不可能依靠市场调控自行解决,想打破现状一定要改变规则。

一、效用

首先需要说一下「效用」,这是经济学中一重要概念,即财富和其带给人的满足感并不是线性关系,效用函数的二阶导数小于零,即边际效用递减原理。

这个概念很好理解,如果你的月薪只有 1000 元,有人说我出 500 元你周末帮我干个私活,你可能非常愿意。但是当你的月薪有 100000 元时,你可能觉得他在侮辱你。同样是 500 元却因为人的不同而产生了不同的价值。这种价值的差异,是因个人在自身追求上的差异而产生,具体来说,当基础的物质需求被满足后,一般人对财富的追求就会下降。

但是边际效用递减原理对群体很难体现,因为群体中包含了大量的个人,每个人的诉求可能截然不同,导致只能以简单的经济指标进行衡量。

二、角色关系

现在的公司/企业这一组织结构里,大致可分为三个角色,我们来观察不对角色对效用的追求:

  1. 股东:对于一个上市公司,其股权散布于大量的投资者和机构上,所以作为股东这一角色,充分符合群体的特征,追求绝对的经济利益,而非效用。具体来说,作为理智的基金管理者,是否投资一支股票取决于企业的长期或短期的经济效益,如果有更优的股票选择,则不会投资该股票,则是由投资者的职业特性所决定的。所以对于股东来说,公司的经济收益和股东的效用为简单的线性关系,不遵从边际效用递减原理。
  2. 实际管理者:可以是 CxO、创始人、董事会,由于群体较小,其追求中会掺杂更多的非经济利益诉求。
  3. 员工:最符合边际效用递减原理的个人。

三、加班的高效率

延长工作时间对于企业整体来说是高效的。请注意这个高效指的是企业在合理补偿员工,即员工的平均时薪未受到降低的情况下,依然是高效的,因为:

  1. 同一件事若拆给多个人完成,会由于沟通成本导致效率下降。
  2. 同一件事若拆成两天完成,会由于衔接问题导致效率下降。
  3. 由于社保、公积金等强制员工福利的要求,即使时薪一致,雇佣一位每日工作 12 小时的员工所付出的成本,远低于雇佣两位每日工作 6 小时的员工的成本。

所以,若从纯粹的经济效益考虑,应该尽可能的延长员工的工作时间。

不过这个结论有一限制条件,即当公司的效益可由员工的工作时间提高而获得提升时,延长工作时间才有效。

四、股东的决定权问题

公司的股东对公司有着最终的控制权,若股东对一个公司不满,可能会采取以下两个措施:

  1. 股东可以通过股东会罢免管理者。
  2. 股东可以卖掉自己的股票,使得公司的股价下跌。

上文已说到,对于绝大部分股东,追求的是绝对经济利益,由于股东拥有最终的控制权,这使得股东的经济利益压在了管理者和员工的效用追求之上。

具体来说,只有当公司的股权回报低于其他公司的时候,股东才会不满,这种追求是相对而非绝对的,只要收益高于其他公司,股东就会继续持有该股票。如果公司的经济利益回报已经达到领先水平,股东通常不会继续要求企业更进一步,因为:

  1. 股东很难得知,公司目前的经济利益是否还可以通过某种手段提高。
  2. 通过股东会罢免管理者难度很高,绝大多数股东会选择以卖掉股票的形式表达不满,如果市场上并不存在其他更优的选项,那么股东并不会卖掉股票。

那对于管理层,如果股东不满,不满到了选择抛售股票,那就只有靠提高公司的经济效益解决。这本身并不是一个简单的事情,然而延长员工的工作时间却是一个有效的捷径。

五、相对业绩

通过上文的论述,我们可知,只有当公司的经济效益处于市场领先水平时,公司的管理层和员工才更有可能去进行自身的效用追求。如果相对低于市场水平,就会遭受来自股东的压力,这种压力会迫使企业选择最具有经济效益的手段,加班就是其中之一。

这是一个比较级,意味着市场上的公司一定会被分为三六九等,一定会存在部分公司受到这种压力的胁迫,这是由于自由资本市场对经济利益的绝对追逐导致的。

整体上看,市场上的工作岗位和人才数量保持平衡,那么意味着只有最具有竞争优势的头部求职者可以逃过被经济利益压迫的可能,不管生产力怎么发展,永远存在处于劣势地位的企业和其工作岗位,也就永远有人需要延长工作时间。

六、总结

股东追求绝对经济效益,该效益的评判标准是公开市场上的利益回报排名,股东作为企业所有者其意志最为强大,延长员工工作时间是提高经济效益的直接手段。

所以,市场中总是会出现选择延长员工工作时间的企业。

七、应对措施

要想打破这种现状,一定要做出改变,不然在目前的规律下,不管生产力怎样发展,永远会存在压迫员工效用追求的问题。

一些可能的方式如下:

  1. 不追求上市(如一些家族性企业),非上市企业的股东不会像上市公司那么零散,他们对效用的追求不会因为群体特性而被抹除。但是这对于需要靠公开市场融资的商业模式并不适用,也可能不符合管理者自身的追求。
  2. 同股不同权(目前科技公司大多采用 AB 股结构实现了同股不同权),提高管理者的控制权,使得管理者可以对抗群体股东的绝对利益追求。但是这依然无法阻止股东通过变卖股票实现控制权。
  3. 进一步打破股东、管理者、员工的界限,现代企业中已经常使用期权奖励计划来模糊三者的界限,但是由于员工持股比例和其他股东差距悬殊,作用还不是很明显。一个美好的例子为合伙人制度(如律所),但是并不适用于所有的公司,也不适合于目前的社会经济状态。
  4. 调整投资者的追求,发达国家中,对基金的评价标准,已经由简单的经济回报发展为社会贡献的综合评价,即将投资人的追求也由绝对经济利益追求转变为效用追求。投资者会选择购买自己所认可的股票与基金而非单纯考察经济利益回报。目前这个观念在我们国家几乎不存在,所有投资者都在追求绝对的经济利益,甚至嘲笑其他带有非经济追求的投资者。
  5. 政策性强制限制,社会所追求的并不是经济利益最优,而是每个人的效用最优。

以上是我在观察现状后给出的个人观点,这个观点是否正确,这个规律是否起到了主导和核心作用,还需要进一步验证与讨论。


阅读前请注意:本文是尝试以形式逻辑去辨别一句话的对错,这是个很有趣的过程,本意不是抓住一个问题一直不放,非严肃讨论主要是趣味性。

前文已经充分的探讨了关于程序员一词的讨论所引发的各种值得深思的问题,有些读者还在纠结关于我的「员」后缀的观点是否正确。其实这个正不正确真的不是很重要,其中包含了很大成分的主观因素,背后所映射的问题才更值得讨论。

但是非要去深究这个观点正不正确,也是个有趣的事情,判断一个观点是否正确,归根到底是说这个观点有没有逻辑。对于语言的讨论本身更适合采用非形式逻辑,但是这种论证很困难,不存在绝对的标准,我们不妨以形式逻辑这一非常明确的标准来判断。

我的原文是「员所代表的职业多为偏重重复、轻创造性」。第一步先将这句话尽可能的明确为形式逻辑命题。

「多为」一词没有明确的数学定义,宽泛的来说 >50% 总样本数量即可说「多为」。但站在严格的角度,我们提高一下这个标准,一般在社会中,当我们说少数服从多数时,会以三分之二的标准去进行投票,即 > 66% 即代表是多数人的意见,我们再把这个值提高到 >75%,避免因「多为」一词的使用差异造成逻辑上的瑕疵。如果认为 >75% 的标准依然不可代表「多」,也过于苛刻了吧。

再来理解「创造性」这个词汇,一个标准释义是「一般认为创造性是指个体产生新奇独特的、有社会价值的产品的能力或特性,故也称为创造力。新奇独特意味着能别出心裁地做出前人未曾做过的事,有社会价值意味着创造的结果或产品具有实用价值或学术价值、道德价值、审美价值等。」

注意创造性一定代表产生的成果是先前不存在的,同样内容的不断生产不是创造性。而对于重复性,广义上的范围太大,作家每天写作是一种重复、软件开发者每天写代码也是一种重复,几乎一切人类活动广义上都可以归结为重复。而我语境下的重复性其实是相对创造性而言的,其实是和创造性表示的是同一个含义。

可得出,原文的形式化的表述为:

定义员后缀职业为集合 A
创造性为属性 B

命题可写为:对于集合 A,其中 >75% 的元素,不具备属性 B。

要想对该命题进行证伪,需要证明:

对于集合 A,其中 ≥25% 的元素,具备属性 B。

我们来看一下评论中的一些反驳观点:

第一类:「“员”是指工作或学习的人;而“师”是指1.称某些传授知识技术的人,员与师的区别在于是否强调“技艺”」,「员一字是人员的缩写并无特殊含义」、「員字源於二形,一是上口下貝,一是上口下鼎。其本意是指「物的數量」,這個物是什麼呢,是貝,貝是錢。而後引申為人數,比如關羽乃一員猛將,再引申指人,便有了官員、吏員。」

这一类为对「员」字本意的观点,我们定义的集合 A 为员后缀职业,不能抛弃职业特性来谈这个问题。即该反驳观点中所叙述内容不符合集合 A 定义。

事实上这些观点就是和原观点可以并存且不冲突的,不是互斥关系。

第二类:「运动员、研究员、演员、公务员同样需要创造性」

至于哪些员是有创造性的,要去讨论也是个很繁杂的问题,从严格的要求上,我们就暂且将这些个例和有争议的词语全部认为是有创造性的。

这类反驳可归结为命题:对于集合 A,存在个别元素具备属性 B。

这个命题并没有去考察总量和个例的比例关系,依然也是无效的反驳。

所以这两类反驳虽然本身是一句正确的话,但是在逻辑上并无法对原命题证伪。

那我们就更直接一点,把现在主流语言中除程序员外的「员」后缀均拿出来看一下,我能找到的有:

店员,文员,演员,船员,官员,公务员,出纳员,制图员,售货员,宇航员,审计员,快递员,打字员,接待员,推销员,播音员,收银员,救生员,服务员,消防员,清洁员,研究员,管理员,统计员,行李员,运动员,邮递员,采购员,飞行员,驾驶员,技术人员,邮政人员,(图书、仓库等等)管理员。

(司令员、党员等词并非现代语中对职业的描述)

共计 33 个,创造性的定义很难明确,那么我们取一个很宽泛的标准,其中涉及或者可能涉及创造性的有:

演员、研究员、运动员、公务员、宇航员、推销员、飞行员,共 7 个。

说实在的,说运动员、公务员、宇航员、飞行员有创造性已经有点强词夺理了,不应该去看这些职业到底有没有创造性的可能,而应该看社会主流印象中,创造性和这些职业是否有关联,你随便找一个人,问他一个运动员有怎样的特性,我觉得不太可能有人回答创造性。

但即使把这些统统归入反例,7/33 ≈ 21%,也达不到证伪的要求,而且这其中已对各种模糊的细节全部取了最利于反对意见的标准。

证毕。


事情的起因是我在几天前发表了一段推文,原文如下:

一直很不喜欢「程序员」这个描述。
以「员」为后缀的职业,如收银员、驾驶员等,多为一种机械地反复做同一件事情的工作,这个标准对 coding 来说太低、太无趣了。
「软件工程师」则好的多,既表明了专业性,也包含了 coding 所具备的艺术和创造的可能。

这段话一时引起了波澜,有人表示赞同,有人觉得我在贬低其他职业,有人觉得这是对「员」字的偏见,有人觉得是文字的隐含义造成了冒犯,有人觉得程序员并不比其他职业更需要创造性,有人觉得这是矫情没必要扣字眼。一时间夹着各种观点的评论风起云涌。

说实话,这句话更多只是一个「吐槽」,所得到的结论也只是「我不喜欢」,并非严肃讨论,我在发推时也没有特别的去斟酌每句话的词语和表达方式,完全没想到会引发这么多的争议。但是既然已经打开了这个社会话题,那就不妨就把这个问题说个清楚讲个明白。

「程序员」的称谓为什么会造成不适感?

我会给出不喜欢「程序员」这个说法的观点,源自于我对被称为「程序员」时内心所产生的不适感。(这个不适感并不是我一个人的独家偏见,有不少的人表示了赞同)所以我会想要去纠结,这个不适感从何而生。

一种解释是说程序员和收营员、驾驶员等社会地位不高的「员」职业混在了一起。所以产生了一定的贬低义,引起了不适感。

但是这个解释是有明显的问题的,运动员、演员、公务员、飞行员,存在着大量社会地位不低的「员」后缀职业。我没有理由会因为社会地位高低问题而产生不适感。

(注:上述职业的社会地位高低问题是客观存在的事实,不是我的观点。)

所以经过思索,我给出了一种可能的解释,「员」所代表的职业多为偏重重复、轻创造性。而如果评价一个软件开发人员是在进行重复、非创造性的工作,可能会构成一种误解甚至冒犯,导致了不适。(关于软件开发和创造性的关系在后文中讨论)

一个类比,如果你把一个作家说成是打字员或写字员,当然是一种冒犯。如果你说一个设计师是美工也是一个冒犯。这个冒犯的本质是因为这个词语未能准确的描述我们所从事的工作,忽略了其核心:创造性。

因为我们对作家的工作足够了解,使得我们明白什么时候该称呼作家,什么该称呼为写字员。但是对于软件开发人员这一职业,社会上统称为了程序员,这是不合适的。就和把作家称为写字员是不合适一个道理。

这个解释建立在对「员」后缀职业偏重重复、轻创造性这一特征的归纳上,并不与「员」字本身所表述的本意以及其他含义冲突。有一种意见是「员」是「人员」的缩写只是表一群人的概念,还有一种意见是「员」的字本意是通过工作换取钱财,这些说法本身无疑是正确的,但是我们讨论的范围是职业称呼中的「员」后缀问题,如果按照上述意见,那无疑所有职业都可以用「员」去作为后缀,然而职业称呼里还存在「师」、「家」、「匠」、「工」、「人」等等后缀,我们所探讨的是职业称呼里这些后缀的区别。

具体来说,常见的一些「员」职业有:服务员、收银员、驾驶员、飞行员、图书管理员、快递员、运动员、演员、公务员、打字员、制图员、文员、清洁员、研究员。
创造性可构成关键因素的职业有:设计师、建筑师、摄影师、作家、设计师、插画师、漫设计师、工程师、发型师、科学家。

虽然如研究员、演员等个别「员」职业,同样很需要创造性,但是整体上来看,「员」后缀确实较少包含「创造性」因素。而「家」、「师」等后缀则大量包含了「创造性」。(至于什么才是创造性,在后文中讨论)

历史上看,程序员最早的工作,是辅助数学家进行运算,只是把别人的逻辑转写为机器代码,对于这个工作内容,程序员一词是非常合适的,这也是程序员一词的由来。但是现在软件开发人员的工作内容早已超越于此,这也是为什么我们要重新审视程序员一词的原因。

创造性和软件开发这一职业的关系是什么?

首先应准确的去理解创造性这个词汇,一个标准释义是「一般认为创造性是指个体产生新奇独特的、有社会价值的产品的能力或特性,故也称为创造力。新奇独特意味着能别出心裁地做出前人未曾做过的事,有社会价值意味着创造的结果或产品具有实用价值或学术价值、道德价值、审美价值等。」

所以创造性和重复性这两者其实说的是一件事,如果是在不断重复某个行为,那自然不会有创造性。不同的职业对创造性的需求是截然不同的,举例说明:

  • 我们不会要求一个驾驶员拥有创造性。
  • 一个作家如果不具备创造性那么不可能被称之为作家。

那么软件开发与创造性的关系是什么?这点上我之前的一些观点确实有些片面,对于目前「程序员」这一词语所描述的职业,创造性可能确实并非必要。只靠照搬现成逻辑和代码,也能应对很多工作。

但是就如打字员与作家、美工与设计师的区别,创造性的融入使得职业的本质发生了区别,在最近几十年中,软件开发者们靠着这种创造力给整个世界带来了翻天覆地的变化,软件世界能够发展至今,和软件开发者们自身的创造力是密切相关的,而并不是像房屋建设那样,由建筑师先进行设计,再由建设工人去施工,软件开发者自己完成了从思考到编码的整个创造过程。

一个伟大的创造能改变世界。如大家熟知 zip 压缩算法,其算法实现存在于所有主流操作系统中,这个创造最终流入到现代几乎每个人的指尖上。而这些伟大的创造,最初也只是软件开发人员为了解决自己所遇到的一个问题所创造的。现代人生活赖以为生的复杂软件系统,建立在这些无数的「小」创造之上。

为此,我们应当将具有创造性和不具有创造性的编程职业区分开来,给具有创造性的编程人员一个独立的职业称谓。有两个替代称谓可能合适,一个是「软件工程师」,另一个是「软件开发者」,简称「开发者」,由于工程师的后缀多与职业认证相关,且一般是进行某些庞大的工作,甚至在某些国家,没有 license 的情况下自称为 engineer 是违法的,我认为「开发者」是一个最合适的词语。

这里我们纠结的是语言准确性问题,至于为什么要纠结这个称谓的准确性,将在最后一段中进行叙述。

当明确了词意后,我们再来看,相对于开发者,程序员所表述的工作是否为低标准的。同样拿出已经反复使用过的例子,美工的工作技能就是平面设计师的基本功,程序员的工作技能也是开发者的基本功,我们不用去考究两者是否是严格的包含关系、一个设计师是否一定能做好一个美工的工作,至少以美工的标准去考量一个设计师,以程序员的标准去考量一个开发者,这就是低标准的。

对事实的叙述可否构成冒犯?

这里引用这一段评论:
「原文 Tweet 建立了一個矛盾衝突,將程序員與收銀員、駕駛員等對立起來,而這個矛盾衝突是比較激烈的,如果沒有「這個標準對 coding 來說太低、太無趣了」一句,則衝突會低很多。分析此句,「這個標準」即是指「收銀員、駕駛員等」的標準,不異於指桑罵槐:你們收銀員、駕駛員等的工作標準太低、太無趣了。」

这段评论是从文学的角度在分析我文字所表现出的衍生意,说的是正确的,我确实隐约表达了收银员和驾驶员这两个职业要求低且无趣这个观点。但是指桑骂槐的「骂」却是不妥的。

收银员和驾驶员的工作要求就是很低。收银员和驾驶员的工作就是很无趣。

如果要在这两个事实上来和我争论,我会觉得你极度缺乏常识。

那么,如果我所表述的内容,是一个公认的事实,是否能构成「骂」呢?骂的词典义是:用粗野或带恶意的话侮辱人,侮辱的词典义是:使对方人格或名誉受到损害。对事实的叙述无法符合这个定义。

当然这有些在对「骂」咬文嚼字,更应该讨论的问题是:对事实的叙述可否构成冒犯?我觉得是可以的,即使一个人公认长得很丑,但是如果说出「你真丑」这样的言论依然是一种冒犯,类似于揭开伤疤的行为。从这个角度说,我原文确实无意间产生了冒犯,在此表示歉意并反思。

为什么会有原文是在贬低其他职业的误解产生?

贬低一定是一种冒犯,但是冒犯却不能直接构成贬低,贬低一定是一种基于价值观的判断。在另一篇文章中我已经对为什么原文会让人觉得是贬低进行了详细的剖析与批判。可总结为:

只有当批评者持有「脑力劳动者优越于体力劳动者」这样的价值观,才能从原文归纳出我有贬低其他职业结论,而这种价值观绝非我的表述,是读者自己价值观的反射。

具体详见:https://link.medium.com/nVhkAMH8Ybb

为什么应该去平等的看待各种职业?

我们必须先在客观上承认,职业间是有无聊和有趣的差距的,是有创意性和非创意性的区别的,是有门槛高低之分的。

在承认这些差异的基础上,我们才能去谈职业平等的问题,拒不承认职业间的差距,是站着说话不腰疼,得了便宜还卖乖,这才是对其他职业的不尊重。

在社会主义价值观中,要求我们对各职业应该不分高低贵贱,是因为每个职业对于这个社会的运转都是必须的,是社会分工的不同。有些职业就是无趣、苦闷、低报酬的,从公平的角度,社会应该以某种形式去更多的补偿和关怀这些职业。

而在另一种价值观中,因为创造是人类进步的源动力,往往给予和创造性相关的职业更高的社会评价。得到更高评价的职业令人向往,以此促进更多人往这种职业去发展。

更高的社会评价值对应的是赞许等具体行为,对于社会评价没那么高的职业,也不应该去贬低和歧视,应对所有正当职业的从业者抱有尊重。

1949 年后的中国人自小接受的是社会主义价值观教育,但事实上人人都明白,现在社会中科学家、公务员比保安、收银员享有更高的社会评价和地位。这种价值观上的割裂是我们不愿意去正视的问题,所以当原推文可能触及到这个问题的时候,部分读者会变得格外敏感。这里不去评价各种价值观的对错与高低,我自己也没能清晰的想清楚这件事,但至少我们应该要求一个理性的成年人抱有统一的价值观,而不是根据自己的感情需要在各种价值观里跳来跳去。

是否应该对这种称谓「咬文嚼字」?

一个方面关于语言,我们对语言的反思和修正,本身就是语言的发展过程,我们应当尽量去纠正语言中可能包含的错误观念,使之与事实更为符合。这是对语言准确性的追求,关于语言准确性的重要有很多大家都进行过论述,我就不再去重复了。

但是这种对语言「咬文嚼字」的行为,应该严以律己,宽以待人,大众并不是很了解软件开发人员的工作到底是怎样的,所以一概以「程序员」描述,这个行为没有什么不对,我也不会为此而感到生气,只有靠开发者们自己去进行解释,才能让一般人了解到创造性所带来的区别,从而可能产生主流语言的变化。

本文就是一个开发者在尝试对开发者工作内容进行澄清,不去进行澄清,那么这个误解 — — 开发者的工作只是机器语言翻译员,就很难被消除。

英语中也有 coder、programmer、developer、software engineer 等对软件开发这一职业的不同称谓,就简单以这几个词去搜索,就能找到大量分析和比对这些词语差异的严肃讨论。而我在中文互联网上去搜索,鲜有对程序员、软件工程师、开发者等词语的区别的讨论,能找到的少量结果中,基本都是在讨论工程师和程序员在工程性这一问题上的区别。

而另一个方面,则是通过这种咬文嚼字,对我们自己的职业进行反思,我们需要意识到创造性对这份职业有多重要,重要到可以因为有无创造性而直接划分为两个不同职业。

现在有些程序员,不主动去思考与创造,只负责把产品经理的命令翻译为机器语言,甘当「代码猴子」。虽然这样可能也能完成程序员这个职位的工作要求,但请问一下你们是否心甘情愿。

有些职业上的跨越,在客观上会有很多障碍,比如一个司机要想成为一个赛车手,客观上经济条件的限制就使得这个转变极为困难。而创造性不存在客观上的门槛,当有了编程的基本技能,即可以通过创造性去解决问题,经常能看到很多初学者活跃在开源项目中,有很多初高中生编写的开源项目被广为使用,所以是否要从程序员「晋升」为开发者,完全是一个主观上的事情,主要看你越不愿意。

所以如果通过这一咬文嚼字的讨论,能使一些「程序员」开始有意识的往「开发者」发展,那我相信这一咬文嚼字的讨论就有其意义了。

另外,通过咬文嚼字去指出文字背后所反应的社会问题,并不新鲜,鲁迅先生就曾干过这事,于 1925 年发表了《咬文嚼字(一、二)》两篇短文,以当时的中国人给外国女性取中文名时「加些草头,女旁,丝旁。不是“思黛儿”,就是“雪琳娜”」这种文字现象,指出这背后存在男女不平等的歪风邪气。

一个题外话,我在写这篇长文前,有和一些朋友讨论,这个问题的严肃讨论是否有必要,他们大都抱以悲观的态度,认为是在对支持这一观点的人重复解释,对于持反对意见的人鸡同鸭讲。这里我想进行一个匿名小调查,算是一个社会实验,只有一个问题,请参与支持一下。

https://forms.gle/JCk6HpigFZFvQcic9


在经过和多位推友对话后,我终于理清了为什么昨天关于程序员称谓的一个吐槽,能被上升到是对其他职业的贬低的逻辑。

原文如下:

我原推的核心观点是:创造性对于软件开发很重要,单纯重复性的工作对于软件开发是相对低级的。而「程序员」这个员后缀的称呼,会强调重复性,忽略创造性,所以我不喜欢。

这里包含了几个子论点:
1. 「员」后缀是否隐含有重复性、忽略创造性的特征,这个问题可以讨论,我给出的是我的主观论断。我的论据是常见的员后缀职业如服务员、收银员、驾驶员、飞行员、图书管理员、快递员、运动员等等,均包含了这个两个特征,虽然存在一些例外,但是总体特征是有的。这个论点上的各种讨论是非常合理的。
2. 对于软件开发这一职业,创造性是否是必要的,重复性是否是低级的。其实这个观点上大家都能达成一致,几乎没什么异议。

但是,有些人却觉得我是给出了这样的结论:程序员这一职业比其他职业高级,这是在贬低其他职业。

这个帽子扣的也太大了,我不得不认真的回应。按我原文的逻辑,我一直讨论的是软件开发中,创造性和重复性的关系,根本没有涉及职业间的对比。在和多位批评者对话后,我终于理清了他们的逻辑链条:

1. 我说了创造性对软件开发这一职业很重要,对其他「员」不那么重要。
2. 所以软件开发这一行业更需要「用脑」,而其他行业「无脑」。
3. 所以我在贬低其他行业。

我们来仔细梳理这个逻辑链条:首先从 1->2,这个就已经是在扭曲语言原意,脑力活动和创造性是一个包含关系,职业要求不包括创造性,不是说这个职业是无脑的。从来没有哪一个标准会要求快递员、运动员、驾驶员等职业应具备创造性。但是这些职业当然是需要「用脑」的,但不是以创造性的形式为核心输出。

而 2->3 这个结论,背后的逻辑说出来就十分刺耳了,只有当批评者持有「脑力劳动者优越于体力劳动者」这样的价值观,才可能从 2 归纳得到 3 的结论。

一个高尚的价值观,之所以应该认为各个职业是平等的,不是因为职业的「含金量」一致,而是因为各个职业都是对社会所必须的。

举个最极端的例子,保洁员是不是一个极其没有门槛的职业?说这个职业可以「无脑」做虽然不妥但是确实是事实,那按照批评者的逻辑,保洁员这个职业就是应该被贬低吗?

如果已持有「脑力劳动者优越于体力劳动者」这个价值观,那么批评者可以直接得出「程序员更高贵」这个结论。根本不需要跑到我的论述里来绕一圈。而如果没有这个价值观,我想不通怎样能够构造出一个合理的逻辑链条得到这个结论。

另外可以看到,批判者们致力于找出其他职业也是需要「用脑」的案例,企图说明每个行业都要「用脑」,所以大家才是平等的,这是在自欺欺人。

所以只是我的言论映射出了批判者自己内心的价值观,而这些批判者往往也是善良的,这个价值观很刺眼他不愿意相信是自己的偏见,所以要怪罪于我的言论。核心问题是他自己的潜意识价值观与理智价值观尚未得到统一。如果破除了「脑力劳动者优越于体力劳动者」这个偏见,就不会推导出我在贬低其他行业这个结论。

最后补充一句,我身体力行的尊重各行各业的人们,越是从事更「低微」工作的群体,我对他们越是宽容和礼貌。这个行为的原因不是因为他们的工作「含金量」高不高,而是对认真完成自己职业的人的尊重。


我今年发表过很多引起争议的言论,比如:

  1. 中医与西医的问题
  2. App 窃听推广告的问题
  3. Apple OCSP 的问题
  4. 中年软件工程师为什么不受待见
  5. 程序员这一称谓的问题

这些发言会引发争论可以说是必然的,因为这和我的发言动机密切相关:当我看到大众认知与真相不一致时,就会迫切的想澄清真相。

一是将西医和中医看作对立体系而不是进步和传承的误解。

二是以「巧合」去相信大公司以窃听的方式推送广告(其实就单说这个巧合,在总概率上也并不罕见)。

三是恶意地去揣测大公司的动机,然而事实上只是一个疏忽。

四是解释这个现象是职业发展曲线和市场需求导致的,不是企业黑心。

五是试图强调创造力对于软件开发者的重要性。

那么既然是要挑战多数人(或者说不少人)的意见,自然会引发争论。从另一个角度说,正是因为会有争论所以才有了讨论与发言的必要性,如果说了句让所有人都赞同的意见,那基本就是句废话。

这在过程中,收获了一些推友的很有价值的意见,对此表示感谢。

但是也有不少评论,是出于愤世或嫉妒等负面情绪而生,虽然理智上我知道该忽略掉他们,但看多了不免还是有点心烦。

然而最让我烦心的一种言论,是本身不带有恶意,或者不是明显出于恶意,但是言论背后的逻辑是扭曲的,或者是在一些细微末节的问题上反复纠缠,遇到这种言论我会本能的去回应,最后不管是否说服了对方,都耗费大量时间精力,但说实话这个过程对于我来说是一种折磨,我没有任何收获。

这使我不得不考虑以后不在 Twitter 上发表言论,因为这件事对于我来说是负收益。且大多数人只喜欢看到自己所赞同的言论,只要看到一个不赞同的观点,发言人就是傻逼。那么只要说的话足够多,终会被这类人列为傻逼。(虽然我并不在意这类人的评价,但总归也不希望这种评价存在)

但我也不愿因此主动放弃掉发言,我们大都对社会的各种问题有所不满,而发言就是改进社会最有效的手段之一。这同时也是公民义务。不去谈敏感话题,不去「冒犯」别人,是逃避主义。我们幻想能有一个代表真理和正义的发言人来替我们反驳那些谬论,但其实最终只有我们自己能为我们所坚持的真理与正义发言。

但在解决掉这个矛盾前,我会暂停掉在 Twitter 的发言,我需要寻找到一个更合适的发言方式和渠道,和值得的人去交流。


不同的职业有不同的特征,有些职业极其依赖人脉,比如 sales、PR/GR、投资人、猎头等,人脉的积累不可能一蹴而就,一定需要长时间的经营。有些职业极其依赖经验,如律师、医生、管理职位等等,有很多经验必须通过实践积累,只依靠系统教育是完全不够的。对于这些需要人脉和经验的职业,越老越吃香,相对的,这个行业年轻人会很苦很累,赚的也不多。

我们再来看一下软件工程师这个职业,我觉得核心竞争力在于:思维能力、经验,以及精力。(基础知识储备是必备要求,不能算竞争力)
1. 思维能力:思维能力我不知道该怎样刻意的去锻炼,仅从结果来看,对于脱离教育系统后的成年人,似乎很难见到有人思维能力上还会有很大的提升。
2. 经验与精力:工程师的经验,当然不可以说不重要,但是相对其他职业,确实没那么重要。

医生经验不够会把人治死,律师没有经验会让客户入狱。工程师呢?一个经验丰富的资深工程师可能做完一件事只需要一小时,新手要三小时。那年轻工程师加班搞就好了,没什么大不了的。年轻人的精力可比中老年人多太多了。

这是由现在的市场需求所决定的,大部分软件工程师的岗位的需求是能「出活」,只有极少数岗位的要求是「出好活」,由于现在软件分发的成本太低,经验差写出 bug 不是一个很严重的问题,补测试人员和勤发更新就能弥补。

由于要求只是「出活」,是可以靠堆人解决的,而且一个高级工程师的工资可能可以抵 2–10 个初级工程师,即使假设精力相同,你也需要保证你的经验带来的效率提升能和你的工资成比例。而对于医生、律师等职业,你拿 100 个初级医生来也取代不了 1 个资深专家。

所以,软件工程师这个职位的发展曲线对年长者不友好,是一个由市场决定的客观事实,你不能指望因为公司的仁慈去解决。而且相对的,所以这个行业的年轻人才能明显比其他行业赚的多。

那怎么样去改善这个事情?个人上:
1. 让自己的经验在那些更不容易被抛弃的事情上去多积累,比如那些 Web 框架每几年就更新换代,如果你的经验都是在这个层面上的,那么很快就会被时代抛弃。相对的,比如像搜索引擎技术的经验就非常宝贵,坊间传闻大公司这种职位,宁愿发高薪让你在那躺着,也不会让你跳槽出去。
2. 如果评估自己后觉得自己未来和年轻人竞争确实没有什么优势,尽早开始积累其他职位的经验,最常见的就是管理职位。

外部条件看:
1. 希望政府和企业加强对劳动时间的限制,不能让有更多精力的年轻人以牺牲更多时间的方式进行竞争,中老年人承担着更多的社会、健康和家庭压力,这不公平。用流行的话说叫内卷。

2. 等待市场对工程师具体需求的转变,不再是以「出活」为关键,有更多的必须要靠丰富经验才能「出好活」的职位。

一个衍生问题是为什么近年来几乎所有的软件质量都在下滑

  1. 互联网发达分发成本降低,Bug 的修复成本变低了。
  2. 各种软件系统越来越复杂,越复杂就越容易出问题,这是真理。
  3. 开发流程的问题,产品经理设计需求,工程师负责开发,最后测试团队测试,最终有 Bug 这个锅大部分情况会丢给测试,但是测试绝不可能覆盖到所有场景,如果工程师不用对最终问题负责,那么闭着眼写等测试报 Bug 再修就好了。


在讨论中依然有很多人分不清「事实」和「观点」,把两者混为一谈,借着 Apple 在 OCSP 这事我想来展开讲讲,什么是事实什么是观点,以及为什么有些观点是不负责任的。

在这起争议中,「事实」部分有:

1. Apple 是否有能力阻止我使用某个 app?
有的,不仅可以通过 OCSP 吊销开发者证书实现,还可以通过 Notarization 机制定点封杀单个程序,这不是什么新闻,很早前就可以。

2. 作为用户可否绕过这个限制?
可以,macOS 和 iOS 不一样,有多种方法可以绕过该限制,最简单的方法是用 codesign 命令去掉签名再用 xattr 命令去除下载应用的标记。但是对于一般用户确实可能比较难。

3. 这个机制是否会泄漏我的隐私?
有风险,由于 Apple 直接使用了现成的 X509 …


请求在处理完毕后将被转发。如果 Surge 的出站模式设置为直接连接,那么该请求将被直接发往目标服务器,如果出站模式设置为全局代理,那么将转发给代理服务器。

当出站模式设置被设置为规则判定时,将根据配置的规则决定转发策略。

规则系统

规则系统中有两个基本概念:策略和规则

  1. 策略:描述了 Surge 进行转发的方式,有三种类别:
  • 内置策略:DIRECT、REJECT、REEJCT-TINYGIF、REJECT-DROP
  • 代理策略:每个策略对应一个代理服务
  • 策略组:根据一定的规则从子策略中选择一个最终策略。
  • select 策略组:通过 UI 菜单选择一个策略。
  • url-test 策略组:选择延迟最低的策略。
  • fallback 策略组:选择可用的策略中,最靠前的策略。
  • ssid 策略组:根据当前的 Wi-Fi SSID 选择一个策略。
  • load-balance 策略组:随机使用一个子策略,可选进行可用性检查 …


本章详细讲解了 TLS 和 HTTPS 的关系,TLS 的作用,以及怎样进行 MITM。本文只阐述方法、流程和高层抽象概念,尽量不涉及具体的算法和技术实现。

TLS 和 HTTPS 的关系

现代计算机网络体系结构的设计采用的是分层思想,HTTP 是基于 TCP 协议层的应用层协议。

TCP 层所提供的核心功能是可靠传输,上层应用不必担心数据包的构造、拆分、乱序、丢包等实现问题,当使用 TCP 协议与目标主机通信,即有了一个可靠的双向的流式数据通道。

HTTP 协议基于 TCP 协议的基础上,定义了更详细的数据传输标准,将数据流抽象成了会话制,客户端发送一个请求,服务端回应一个响应,一一对应,更方便使用。

HTTPS 则是在 TCP 层和 HTTP 层之间,又插入了一个 TLS 层,TLS 层可以使 TCP 层的数据流得到加密和安全保护 …


处理

在对连接进行处理之前,首先需要对被接管的网络连接进行分类,目前版本主要有四种类型:

1. HTTP 连接:由 Surge HTTP 代理服务接管的连接。在 Dashboard 中会显示请求的完整 URL 和 HTTP 方法名(GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS 等)
2. HTTPS 连接:由 Surge HTTP 代理服务接管的,且使用 CONNECT 方法转变为 TCP 数据流的连接。在 Dashboard 中会显示请求的目标主机名和端口号,方法显示为 HTTPS。
3. TCP 连接:由 Surge VIF、Surge SOCKS5 代理服务接管的 TCP 连接。在 Dashboard 中会显示请求的目标主机名和端口号,方法显示为 TCP 和 …

Yachen Liu

iOS Freelance Developer, Technical Advisor

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store