分类 想法 下的文章

其实在上一篇文章里说的开关,有一个更正式的名字:Orthogonality,翻译为中文是正交

这个的细节以后再补充。

首先,编程本身是工程,不是科学。这就意味着条条大路通罗马,没有一个放之四海而皆准的东西。所以说,其实很多人争论的代码风格,哪个语言最好,哪个框架好,这都其实都是哲学问题,因为没有统一标准答案。

代码风格,纯粹是个人喜好,只要能通过编译,这些所谓的风格在编译后都会丢失。简单来说,编译器不在乎。当然,如果你非要抬杠说某种写法性能更好,那就是针对性能做优化。但如果无所谓性能,但着重考虑可读性和可维护性的时候,又是另一种看法了。

语言和框架更是,都是为了解决某个特定类型的问题而开发出来。你写个小博客,用不着C++,用又笨又重又慢的WordPress就挺好,杀鸡用不着牛刀。

尽管如此,在一般情况下,或者某些特定情况下,还是有最佳实践的。比如说,最近发现一个写代码的思路,就感觉很高明,非常高明,据说微软在用,而且也有v站网友提出来,感觉真的非常高明。

这个思维就是开关

也就是说,你新增任何一个feature,都要同时提供一个switch,就是开关,而且必须做好充分的测试,确保你的软件在这个开关的两个状态下都能工作正常。而切换状态就用配置文档,最后的结果就是一套代码 + N 套配置文件的方式,让不同的人按需获得自己的feature

这个高明的思维,首先是看知乎上有个问题,问的是为什么Office软件体积那么大,有人说Office要有开关的,而且做好了充分的测试,所以软件的体积大。当时我就觉得这个思路很牛逼,但是也仅限于感慨而已,因为这个是Office的开发模式,那我这小菜鸟能比吗?后来看到v站上有一个人提问,给一百多个医院写一套软件,但这么多医院,每个医院用不同的模块,而且对每个模块的具体功能的需求也不完全一样,怎么办?最傻的方式当然是复制N份代码,当然这后果肯定是灾难性的,无论是成本角度还是维护角度。然后就有不止一人提出用代码+配置的方式,也就是说,每个feature都是可关闭的。这样就完美解决这个难题。

其实这个思维方式,也应该用在很多其他软件上,比如有一个按理说应该很好的电商程序fecshop。这个fecshop或许真的很不错,但推广受阻,我自己也是勇敢的尝试了一次就再也没用过了。

不是这个电商程序不好,而且这个程序的定位出了问题。在第一次安装的时候,这个程序要装3个数据库,mysqlredismongodb。可怜我当年还不会用wsl,在Windows系统上装这三个数据库简直是不能更痛苦了。勉强跑起来了之后,感觉太强大了,不敢改代码。当然,也可以用docker来装,但到今天我还不会用docker。

所以问题出在哪里呢?定位。
第一,这是一个开源电商程序,必然会有各个层次的程序员来使用。考虑到95%的程序员都是CRUD Boy(我也是),这个电商程序的学习曲线未免太陡了。
第二, 还是定位。假如我就三个商品,比如Github这么大网站,也才3个商品,因为会员就三种,免费的,个人收费版,企业版。用得着这个吗?大量卖服务的小公司,就是5种以下的。
好,假如你是卖小商品的,比如,卖衣服的,就一个有点个性的小店,可能你的商品数量也就是一两百种,撑死三五百种,这样的一个小店,用得着三个数据库吗?
再次,就算用得着这么复杂的一套数据库,一开始用得着考虑性能问题吗?一开始MySQL一把梭,就可以解决问题,包括队列服务,都可以用MySQL。至于其他高级功能,就慢慢上呗,这个时候真的就需要开关这个思维方式了,每加一个新feature,就新增一个配置即可。如果一开始就是奔着大网站去的,注定是门槛太高,曲高和寡。
最后的最后,如果真的是大网站,为什么不用JavaMySQL够用吗?这些问题的答案是显然的。

好,说完了这个开关的思维,再复习一下UNIX哲学,其中一条是Do one thing and do one thing well。这个思维方式是第一个震撼到我的思维方式。

继上篇讨论开源软件的程序员怎么赚钱之后,我又总结了一下,开源软件无非以下几种盈利模式,当然,这和这个具体的开源软件本身是什么、面向的客户群体也有关系,而且一般不是仅仅一个盈利点,而是多种多样的盈利模式混合在一起的。

1、Linux Kernel等基础设施类open source project:

由于类似Linux Kernel这样的基础设施软件如此之重要,所以肯定没法成为某一个人、某一个公司私有,必须有成为公器的觉悟,所以肯定是成立基金会的形式了,比如著名的Linux Foundation。

想一下,如果这个Linux Kernel是阿里巴巴或者腾讯或者百度私有,他们来维护和运营,你敢用吗?

这种情况下,没所谓盈利不盈利了,基金会嘛,不以盈利为目的,但对于参与的个人,待遇肯定不错了。比如Linus Torvalds,Linux Foundation在2016年支付给他1.6M美元(160万美元),而且很多公司都赠送给他股票的,比如Redhat。据说现在他的身家已经达到1.5亿美元了。虽然比不上盖茨乔布斯什么的,但已经非常可以了。他自己也对此非常满意。

这一类也显然也包括Apache Software Foundation, OpenSSL, OpenBSD等,都属于核心基础设施。除了接受各种捐款,或者邀请企业成为会员(会员费),也没什么好办法了。

2、 Vuejs,Vuetify等热门开源软件:

这也可以归结于基础设施类,毕竟很多公司的产品都是基于这些东西来开发的。因此,他们需要这样的好东西能持续改进、持续运营下去。所以会捐款。
所以Evan You能够成为独立开发者,拿到各种捐款,比如公开的数据是,2018年时,Evan的Patreon账号每月获得16K美元的赞助。
而且Evan出席很多会议,在会议上演讲,我相信是有演讲费的。
当然了,给他们赞助了,也会在网站上显示出自己的logo,也是很划算的。

这些优秀的独立开发者们,显然也会提供商业支持的,只要你给钱,都OK的。比如Vuetify在README里就搞了一个badge,要雇佣他们,150美元一小时。

当然,对于财大气粗的Reactjs和Angular,是不需要搞外块赚钱的。然而,正是因为Reactjs和Angular后面有Facebook、Google等大公司,那么其他大公司在使用这俩库的时候,也不是没有顾虑的。上次Reactjs闹出来的license事件,可以说明这个问题。

3、Freemium模式:适用于很多不是那么热门,但也足够实用的开源软件

这一类已经不算基础设施了,可以理解为重要的实用功能,

  • 例如wildfire Chat这个开源IM软件,
  • 或者某些开源的电子商务软件,
  • 某些开源Blog程序等

这一类,基本上就是利用开源吸引人气,卖商业支持服务,面向business卖license,或者卖生态周边,比如theme,plugin等。不是大热门,但能够让开发者生活得很好了。

开源版本,提供基本的功能;Pro版本,提供高级功能。 Nginx、OpenResty也是这样的,你可以用开源免费版本,他们也有商业公司,提供收费的商业支持服务。然而这里有个矛盾,就是你的开源版本,到底做到什么程度。比如Nginx由于开源版本做的如此之好,以至于只有很少人购买他们的商业服务。虽然最终卖身成功,但显然Nginx Inc不是一个成功的商业公司。

显然,如果你开源版本提供了太少的功能,也就没人愿意去尝试了。

Jekyll Pay目前属于这一类,暂时考虑定位于这个层次,也面临类似的问题。

4、本身自己不开发开源软件,但基于热门开源软件的周边生态来开发

  • 最著名的显然是Redhat了,Linux Kernel是免费的啊,可以随便用,但你不会维护啊,所以我来帮你啊,这就是卖subscription,卖的是服务。
  • 再比如说,Wordpress那么流行,你就可以开发一套主题,一个插件,而且是freemium的模式,就是说这主题或者插件免费给你用,但也提供pro版本,要收费的。
  • Vuetify其实就是Vuejs的周边生态
  • 其实VueMastery也是Vuejs的周边,似乎和Evan You关系不错,应该大概率是有参股的
  • WordPress的host服务,其实这个属于云服务范畴了,但现在似乎开源软件和云服务供应商之间的矛盾越来额越多了

5、混的比较惨的开源项目也不少。

  • OpenSSL,在HeartBleed漏洞爆出来之前,其实混得挺惨的,当初几个核心维护者甚至日常还是给别人做IT咨询赚钱,都快经营不下去了。后来这个漏洞让他们终于在业界引发了一些讨论,再加上来自罗永浩的捐款,还是让他们好过了很多。
  • 所以技术和钱之间没有必然关系。而且如果不能通过技术赚钱,这个技术其实就很难继续投入资源去改进。

首先因为要去洛杉矶中国大使馆取新换的护照,所以就决定开车去LA。然后一切OK,然后就继续开车出发,前往拉斯维加斯。

事实证明,这是一个极其错误的决定。

从LA出发的时候,Google Maps显示只要4个半小时即可,但显然时间越拉越长。先就不说路上要停下来休息一下,加个油,喝个水,上个厕所什么的。就说堵车吧,显然我们在15号上堵了很久。终于花了6个小时才开到拉斯维加斯。

办理入住,休息一会,然后去餐馆吃饭,纪念10周年。然后继续出门逛街。真的累坏了。

第二天早上多睡了一会,去吃了一个brunch,吃到1点,然后继续逛,把附近的几个酒店都逛了。然后回去休息。然后晚上出来吃饭,吃了一个Luke's lobster,吃完了继续逛。

回家睡觉。

起床后出发。又花了6个半小时。

累坏了。

首先,关于发行版的问题,完全合理合法。
其次,核心还是围绕电商,比如说,以推荐为核心的电子商务,可以类似写个文章,然后推荐一通,然后给一个购买按钮。这样就不是那种经典的电商了,纯粹奔着购物去的。所以可以考虑以wordpress和typecho为基础,做一个发行版,专注于这个小型的领域。

其实做CMS,是我的一个梦想吧,但是这个梦想,如果钱途不明,还是不要去做好了。