从对「程序员」称谓的吐槽而产生的严肃讨论

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

关于这个问题的纠结也不是一个新鲜事,比如我们会将一些杰出的歌员或演员尊称为歌唱家、表演家、艺术家,那么这个从「员」到「家」的背后表明了什么?具体怎样的标准才能称为「家」?这个答案可能会很主观且复杂,我认为和创造性密不可分,且不论这个判断是否正确,但至少表明,后缀的不同真的有不一样的表意。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

https://forms.gle/JCk6HpigFZFvQcic9

年长的软件工程师为什么不受待见?

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

我们再来看一下软件工程师这个职业,我觉得核心竞争力在于:思维能力、经验,以及精力。(基础知识储备是必备要求,不能算竞争力)

  1. 思维能力:思维能力我不知道该怎样刻意的去锻炼,仅从结果来看,对于脱离教育系统后的成年人,似乎很难见到有人思维能力上还会有很大的提升。
  2. 经验与精力:工程师的经验,当然不可以说不重要,但是相对其他职业,确实没那么重要。

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

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

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

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

那怎么样去改善这个事情?个人上:

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

外部条件看:

  1. 希望政府和企业加强对劳动时间的限制,不能让有更多精力的年轻人以牺牲更多时间的方式进行竞争,中老年人承担着更多的社会、健康和家庭压力,这不公平。用流行的话说叫内卷。
  2. 等待市场对工程师具体需求的转变,不再是以「出活」为关键,有更多的必须要靠丰富经验才能「出好活」的职位。

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

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

2020 生活手册系列:针对新手的美股投资建议

先前简单介绍了下目前美股券商的优劣,不少朋友跃跃欲试,让我再分享些股票经验。

我犹豫了很久要不要写,一方面因为二级市场投资我并是不专业人士,写出来在一些从业者面前未免有点班门弄斧,另一方面有很多经验想法也不能肯定就是正确的,投资策略这事千人千语。不过线下和一些朋友分享后他们觉得很有收获,建议我还是写出来。

以下想法为是我自己对刚入门或者想入门的、非投资专业人士的一些个人美股投资经验,仅供参考,最终投资策略还是要自己靠思考去决定。

另外这些经验和建议是以获取稳健收益为导向的,如果你的目标不在于此,想要获得超额收益,同时能承担更大风险,那么本文的部分建议可能不适合你。


我喜欢以这样的方式去思考股市投资,投资的收益是三个函数结果的叠加:基本面、技术面、损耗。给对这几个词不太了解的朋友先简单描述下:

  • 基本面:即整个经济趋势和股票的公司经营业绩所带来的收益,可能是公司的利润,可能是财政的放水等等。

  • 技术面:即当股价偏离其应有价格时,通过高抛低吸等手段赚的差价,通常各种乱七八糟的炒股技巧,均属于技术面的事,

  • 损耗:包括交易手续费、杠杆借贷利率、做空借股利率、爆仓损失等等。

我对选择股票的理解,即为以你的经验对社会发展做出判断,正确的话可获得经济奖励,错误即亏损,以此构成了一个巨大的决策系统去调配社会资源和生产资料。

而基本面的收益,一方面就是人类社会发展所带来的经济福利,另一方面则就是对你决策的奖励。

技术面则是零和游戏,你在技术面上赚的钱一定是另一个人亏的。作为非专业投资者需要有自知之明,自己凭什么可能战胜以此为生的职业操盘手和投资机构?一般散户的专业知识、时间投入、信息渠道等因素均大幅落后于专业选手,这样的零和赌博游戏不要去参与。

所以,我的核心投资经验是,作为散户投资者,只该思考怎样从基本面获取利润,尽量将自己从技术面中剥离,同时避免损耗。

具体操作上:

  1. 应该尽量减少操作,不要去干高抛低吸的事情,投资和其他工作不一样,不是说付出了更多的时间和精力盯盘就一定能有更多收获。从概率上讲,你需要将资金竟可能长的放在市场中,才能赚到更多的来自基本面的收益,如果频繁操作,不仅是在进行技术面上很可能输的零和游戏,还会错过基本面的收益。

  2. 可以考虑用逐步建仓或定投的方式去购买股票,以获得一个较为平均的买入价格,减少技术面波动影响。

  3. 长期持有股票,从历史经验来看,美股是世界上回报率最优秀的投资市场,以纳斯达克指数为例,即使你在 2008 年初股灾前最高点买入,在 2010 年末就能解套,然后在 2017 年将获得本金一倍的利润,到现在 2020 年 10 月将获得 3.28 倍利润。

  4. 避免损耗,不要使用杠杆和各种衍生品,那是为专业投资者进行对冲用的,非专业投资者使用就是在赌博。认真了解不同交易所的佣金差异,购买基金时需要注意手续费和管理费。

  5. 购买多个股票或者基金,不要把鸡蛋放在一个篮子里,这个是常识了。

  6. 稳定自己的心态,尽量别一直关注走势,除非自己有用钱的打算,否则不要轻易卖出。

选股

上面提到,选股其实是靠个人经验去参与社会共同体的决策,很多时间其实并不困难,考验的就只是常识。

本文读者可能大都为互联网相关人士,我举个互联网的例子,请把你的思绪回归到 2015 年,仔细回想下五年前你对下列公司有什么感受:

  • 腾讯
  • 阿里巴巴
  • 百度
  • 携程
  • 聚美优品
  • 58 同城
  • 京东
  • 微博

建议找个记事本写下结果,不用太仔细,分好、中、差就行,记得是回忆 5 年前的想法,不是去以现在的视角去回顾,然后找个行情 App 或者网站看一下最近五年他们的走势。

如果结果和你预估的基本一致,那么恭喜你,你具备互联网从业者的常识,你可以凭借自己的认知去选择互联网股票。

如果偏差严重,说明你对商业信息可能不是很敏感,没关系,你可以直接购买指数基金,这是一个更加省心的选择。

结语

虽然以上经验在过去的百年中都基本适用,但是 2020 年我们似乎站在了一个历史的十字路口,过去的经验是否还能适用,这个问题可能确实难以琢磨。

最后附上百年来的道琼斯指数走势

2020 生活手册系列:家用网络配置与选购指南

最近有好多朋友找我咨询该买什么路由,每次都需要花很长的时间去解释原理和了解需求,于是便写了这篇文章。本文将从基本原理层面带你去理解,该怎样去选购和部署家用网络设备。

基础元器件

首先我们需要了解,在 2020 年,搭起一个可以上网的家庭无线网络最少需要哪些「元器件」。

  1. 光电转换信号调制器:即猫 Modem,现在都是光纤入户所以都是光猫,如果还是网线入户则不需要。
  2. 拨号器:即 PPPoE 或 DHCP 客户端,通常网络运营商需要使用用户名和密码进行 PPPoE 虚拟拨号,其核心作用是用户鉴权。
  3. NAT 网关:运营商只会给每个用户提供一个外网 IP,而我们现在早已不止一个设备需要联网,所以需要通过 NAT 的方式建立一个新的子网,让子网中的所有设备共享这个外网 IP。
  4. DHCP 服务器:让子网中的设备能够自动获取到 IP、子网掩码、路由地址、DNS 地址等信息,免去手动配置的麻烦。
  5. 交换机:让多个有线设备可以接入到子网中。
  6. Access Point (AP):无线热点,让 Wi-Fi 设备能够接入到该子网中。

以上就是所需要的最少的 6 个基础元件,然而事实上,每个元件不一定都是一个独立的硬件。通常大众所说的「无线路由」,是包含了上述 2-6 五个组件的结合体,而现在运营商配置的光猫,为了简化用户配置,则是包含了全部六个组件的巨无霸。(后文中所提到的路由均指一般大众所说的无线路由,非真正意义上的路由)

注:路由通常提供四个 LAN 口,其实就是一个集成的五口交换机,其中一口直连了内部芯片。

对于企业级设备,一方面是为了稳定性,另一方面为了灵活扩展和配置,当然也可能是为了坑更多钱,这些元件大都是由不同硬件分开承载的。以 Ubiquiti 家的 UniFi 产品线为例:

  1. UniFi Security Gateway 提供元器件 2、3、4。
  2. 各种型号的 Switch 提供元器件 5。(废话)
  3. 各项型号的 AP 提供元器件 6。(又是废话)

另外对于企业级设备,设备通常不提供家用设备上常见的网页管理界面,需要用单独的控制器进行配置。对于 UniFi,可以购买 UniFi Cloud Key 硬件作为独立的控制器,也可以使用一般电脑运行 UniFi Controller 软件作为控制器。

最后还需要知道的一个基础点是,网络性能由木桶原理决定,整个网络中的短板决定了最终的网络性能。

了解了这些基本概念,我们可以来看看有哪些组网方式。

组网方式

方式 1:仅光猫

  • 光猫提供:1-7 所有功能

运营商所提供的光猫,其性能应该能够满足你的最大带宽,如果确认不能满足,可以联系运营商上门测试并更换光猫。

通常我们对光猫不满意的点有两个:无线信号太差、可调整的设置太少。这时一般人的解决方法是:重金购买一个「好的」无线路由插上去。

方式 2:光猫(路由模式)+ 无线路由(路由模式)

  • 光猫提供元器件:1、2、3、4、5
  • 无线路由提供元器件:2、3、4、5、6

我认识的绝大多数非专业朋友都采用了这种方式组网,但这种模式非常的不科学。光猫已经作为路由建立了一个子网,而插上的无线路由又再次建立了一个新的子网,至少会导致以下问题:

  1. 性能损耗,白白多进行了一次 NAT 地址转换,但是由于这部分性能损耗不是叠加的,所以一般实际使用中倒也无感知。

  2. 两个子网间的设备广播包无法互通,导致 AirPlay 等功能无法使用。

  3. 二层子网下的设备无法使用 UPnP 或其他类似机制在公网 IP 上暴露端口,会影响 BT 下载和游戏设备联机。

方式 3:光猫(路由模式)+ 无线路由(AP 模式)

  • 光猫提供元器件:1、2、3、4、5
  • 无线路由提供元器件:5、6

部分无线路由提供 AP 模式选项,AP 模式其实就是关闭元器件 2、3、4 的功能,只提供 5 和 6 的功能,同时将 WAN 口和 LAN 口在软件层面进行桥接。

对于没有 AP 模式的无线路由,在管理页面中关闭 DHCP 服务,然后只使用 LAN 口,效果等同于 AP 模式。

这种组网方式下,由于没有产生新的子网,不存在上面提到的问题。但是这种使用方法浪费了重金购买的路由器的大部分功能,有点浪费。

方式 4:光猫(桥接模式)+ 无线路由(路由模式)

  • 光猫提供元器件:1
  • 无线路由提供元器件:2、3、4、5、6

正统的组网方式,只有这样才能发挥重金购买的路由的全部功能。问题在于,修改光猫的工作模式并非一件简单的事情。你可以:

  1. 联系运营商的工作人员帮你修改,师傅可能不愿意配合,需要费一番口舌。
  2. 搜索自己光猫型号的超级管理员密码,自行进入超管页面修改。由于光猫型号繁多有可能搜不到。

方式 5:光猫(桥接模式)+ 企业级路由 + 交换机 + AP

  • 光猫提供元器件:1
  • 路由提供元器件:2、3、4
  • 交换机提供元器件:5
  • AP 提供元器件:6

企业级组网方式,核心在于将原无线路由所承载的多项功能,拆解为不同硬件去实现,以提高稳定性和可扩展性,主要适用于单个 AP 无法完全覆盖的场景。不过对于最求极致稳定的单 AP 用户也适用。

其实企业级组网也可以配置成方式 2 的双网关,但这种做法也太业余了,就不单独列为一种方式了。

其他变体

Mesh

现在流行的 Mesh 无线路由,本质上是一个传统无线路由加上多个 AP,且路由和 AP 间靠特殊频道的无线连接。组网方式和上述的方式 2/3/4 本质上是一样的。

设备选购经验

说完了一些客观上的基本知识,以下是我个人对家庭网络设备选购的一些观点:

  1. 我对于网络设备的核心诉求是:稳定且性能足够。我非常不喜欢那种塞入了无数功能的家庭路由产品,一方面来说,功能的繁多必定导致稳定性的下降,其系统架构根本无法承载这么多复杂的功能,任何一个功能出现问题都有可能把整个系统拖死。
    另一方面,也没必要在这么一个单一硬件上去折腾这么多功能性应用,几乎所有附加功能都可以放在一个树莓派上单独实现,树莓派不仅便宜而且具备完整的 Linux 环境,折腾起来既方便又稳定,缺点是没有集成化的管理界面。
    预算更充足的话可选择群辉或者其他 NAS,提供更完备的功能和管理界面。特别想折腾的用户可直接买家庭服务器做虚拟化。(多说一句,家庭服务器的选购核心考察点应为:静音,现在合适的选项大概只有 HPE ProLiant MicroServer Gen10 Plus)

  2. 尽量选择拥有企业级产品线的专业厂商,企业级用户对问题更敏感,一旦发现问题会很快和厂商反馈并得到改进,同时厂商对于稳定性问题也会更加谨慎,即使你不打算购买企业级设备,这些经验也会被厂商用在家庭设备线的研发中。

  3. 先了解自己的需求和整个系统中的短板后再做选择,比如如果你是百兆宽带,那么整个网络的短板几乎只可能是无线信号覆盖问题。如果日常需求只是看看在线视频,那么随便任何一种组网方式都可以满足。

网络问题排查方法

一般家庭网络会遇到三种问题:

  1. 稳定性差,表现为莫名其妙的断网,通常是某个设备崩溃重启导致的,可以查看各个设备的管理后台日志寻找线索。
  2. 延迟高,通常为 Wi-Fi 信号弱导致的,可通过在不同位置进行 ping 确认,解决方式是换 AP 或者加 AP。
  3. 跑不满带宽,需要分环节逐个测试:
    • 内网测试,在有线网络中找一个设备运行 iperf3,与另一个有线网络设备间进行测试,速度应达到 900Mbps 以上。如果只有 100Mbps 左右,说明有线网络协商在了百兆模式,可能的原因有:
      1. 设备只支持百兆,请查看设备的参数说明确认,2020 年了百兆设备可以丢了。
      2. 有线面板问题,由于百兆下只需要双绞线 8 根中的 4 根线即可工作,装修师傅可能偷懒只接了 4 根,或者由于没有独立电话线,用了网线中的两根去替代。需要拆开面板或用测通器确认。
      3. 网线质量问题,通常只有长距离且质量非常差才会导致千兆协商失败。
    • 如果已确认内网设备可到千兆,下一步应该先在有线设备上测试外网网速,国内最准确的测试方式大概是用迅雷下载热门资源(比如 Windows 的 ISO)。如果有线网上都达不到套餐带宽,那么问题可能是自购路由的性能不足或光猫问题,直连光猫有线网口再次测试即可确认。
    • 最后测试无线网络带宽,由于 2.4G 频段干扰过于严重,现在对于手机和电脑等高性能设备应该仅使用 5G 频段网络,测试方式为在有线网络设备上运行 iperf3,和无线网络设备间进行测试,测试结果在 400Mbps 以上即为正常水平。

TL;NR 你就说该怎么买

  1. 如果户型面积不大,运营商光猫 Wi-Fi 已足以覆盖,且没有 BT 或其他高级网络特性需求,直接用运营商光猫。
  2. 如果户型面积略大,觉得光猫 Wi-Fi 不够劲,可购买企业级 AP 或者家用路由改为 AP 模式后接入光猫子网,并关闭光猫自带 Wi-Fi 以避免干扰。
    • 若选择家用路由作为 AP 建议选择大牌的弱功能性产品(如 TP-Link)。
    • 企业级 AP 由于要考虑多 AP 干扰问题通常信号不会做的很强,如果准备用一个 AP 全覆盖,需要购买为长距离设计的型号,如 UAP-AC-LR。
  3. 如果户型面积很大,且尚未装修或者预埋了充足的网线,建议以方式 5 进行企业级部署,安装多个 AP 全覆盖。
  4. 如果户型面积很大,但没有预留有线线路,可以考虑使用 Mesh AP 扩展信号覆盖。
  5. 如果是发烧友且预算充足,想把一切都理顺,建议以方式 5 进行企业级部署,面积不大配合单个长距离 AP 即可。

关于 App Store 的分成

看到 timeline 上经常存在对 App Store 30% 抽成的误解,站在开发者的角度给大家科普一下:

  1. App Store 几乎是黑箱,除非使用自己的 API 统计,开发者不知道谁进行了购买,只知道总共有多少人买了什么。
  2. 结算时长最长是 2 个月,比如 7 月的销售,8 月中旬会出报告告知7月总额,8 月末或 9 月初打款。
  3. Apple 负责所有结算的细节,用户支付的货币会在结算日按照当时的汇率结算为开发者选定的货币。
  4. 如果发生退款,当然是扣除开发者的获得部分,不可能出现倒贴钱。但如果已结算可能会因汇率变化产生一点偏差。
  5. 退款必须由用户自己向 Apple 申请,开发者无法干涉甚至查询,这一点我很不理解。
  6. 信用卡 chargeback 对虚拟商品销售一直是一个非常头疼的问题,如果用户向银行申请退款说该交易是盗刷,若商户无法提供充足证据证明该交易是持卡人本人行为,那么银行除了撤回交易外还要额外收取至少$20的费用。对于软件销售,几乎无法提供证据,只能认栽,所以要做好付款时的信用卡风控。App Store 比较良心的一点是,如果出现黑卡 chargeback fee,额外的罚金由 Apple 承担。
  7. 对于和实体相关的付费(如购物、打车等),允许使用第三方支付渠道,对于非实体相关的服务、功能等,必须使用 IAP 渠道,接受 Apple 的分成。由于 iOS 设备没有其他的分发渠道,所以所有服务商都只能被迫接受。
  8. 安卓上目前主流市场的分成比例和 App Store 基本一致,甚有些情况下更高,但是安卓系统由于可以自由安装软件,如果服务商不愿意接受市场的分成条件可以选择自己分发。
  9. 有时会拿一些游戏分发商的 5:5 分成来对比说 Apple 还算良心,这个对比其实不妥,很多游戏极度依赖应用市场的推广,所以这部分费用其实算是营销费用。而开发者可能根本不需要 App Store 作为主要曝光渠道。

综上,开发者使用 App Store 渠道,获利为 (销售额-退款额) x 70%,额外优势是对开发者简单,用户付费方便成功率高。
如果可以自己自建商店,大致获利为 销售额 x 95% - chargeback fee - 商店维护成本。

个人意见认为,如果分成比例为8:2,那么开发者应该不会如此怨声载道。Epic 的抗争比较聪明的是,让用户意识到了羊毛出在羊身上,Apple 高额的分成不仅应该是开发者和 Apple 的博弈,Apple 产品的用户也应该知道真相且表达不满。

另外,非实体交易必须走 IAP 并接受 3:7 分成,另一个角度看这个机制限制了很多商业模式的可能。最出名的案例就是微信打赏,逼迫 Apple 专门加了条例外,但是有多少开发者能有微信这样的影响力可以让 Apple 妥协。还有很多商业模式也完全不能承受这 30% 的损耗。