小议技术信仰与平台产品开发
技术根本不会决定产品的成败,或者再严谨一点,由技术来决定成败的产品少之又少,甚至很多成功产品早期的技术都是一塌糊涂。准确来讲是深度决定了产品的成败,包括技术深度、对行业理解的深度、对客户理解的深度等等。技术更像是一艘船,我们要做的事想办法用它来到达“彼岸”[1]。
背景
最近一段时间组内在做一个代号 Pangolin 的项目,定位是一个通用的 ebpf 管理调度平台,已然经过了半年时间设计开发。随着开发的深入也对 bpf 生态和竞品进行了相对深入的调研,在这个过程中对这个通用平台定位产生了一些自我怀疑,我发现自己讲不清楚这个定位的价值和吸引力在哪里,在与团队的交流过程中我意识到了一个问题——看到一个技术(或者看到技术火热的前景)之后就思考设计一个通用平台产品来试图解决跟这个技术相关的问题,因为笃信这个技术的前景和未来,认为平台产品的成败与否更多的跟怎么做有关。
从这个具体的问题跳出来进行提炼的时候我发现了两个关键词:技术信仰和平台产品,所以这篇文章想讨论这两者之间的关系以及关于平台产品建设的一些思考。
技术信仰
关于技术信仰有一篇不得不看的“神作”:How Religion Destroys Programmers,我相信作为程序员都有属于自己的那一份技术信仰,对我个人而言也会更倾向选择和使用自己擅长和喜欢的技术,随着使用这项技术解决的问题越来越多我开始将其他不了解的新技术斥为“垃圾”或“毫无价值”或“为什么不用xxx”。
什么是技术信仰
most programmers got into the field of software development because they were passionate about it. Anything you are passionate about is likely to cause you to develop some highly charged opinions.
This defense of our own choices and ideas is core to human nature. It is easy for us to adopt a new idea but we religiously defend the ones we have without needing much evidence to back it up.[2]
程序员进入到某些开发领域之后,因为完成了某些被人高度称赞的事情或者觉得这个领域令人充满激情和兴趣,这类正向反馈会促使自己对这个领域(技术)愈发自信和擅长,当有新的技术也可以解决同样的问题时,会本能的拒绝并列举出一系列的反驳理由,以上的这一系列的行为就称为技术信仰。
技术信仰的力量
第一是要对所做的事情有信仰。市场有起有落,所在的领域也会有起有落,唯有相信自己做的事情,才能一路走过去。
第二是要开源节流,初创公司最好在短期内做到有收入,并尽可能做到盈亏平衡,尽量减少对现金流的消耗;
第三是一定要有好产品。
——池健强
有的人喜欢吃萝卜,有的人却偏爱吃青菜;有的人喜欢喝橙汁,有的人只喝白开水。不要尝试去改变这些人,因为你没办法改变,信仰是他们坚持这么做的动力。程序员也是人,编程也像生活一样,所以程序员拥有技术信仰很正常。信仰会使程序员在坚持一件事上拥有不断的动力,可以抵御写代码的枯燥和流程的繁琐,另外很重要的是信仰会让你拥有对完美的偏执,而程序员需要有“完美”的追求。
一叶障目不见泰山[3]
先说说对技术的“封闭态度”这件事情,有意识的“封闭态度”相对容易识别出来(e.g. say no to something),无意识的“封闭态度”是潜移默化的比较难以发现(e.g. solve this problem with something you familiar with)。对技术持“封闭态度”最后只会伤害自己在做的事情并限制你作为一个开发者的个人成长,甚至可以说限制了你这一辈子的能力,一叶障目不见泰山大概形容的就是这种情形。
所以,最好的建议是不要把热情变成信仰,这会是你被蒙蔽的开始。面对技术信仰时,不要尝试去磨灭它,而是去利用它!利用它带给自己的动力与激情!
对我个人而言,了解一个技术对我当前以及未来可能实现的业务、产品有什么帮助,是驱动我去学习的动力。因为作为一个程序员,你要对你自己的技术选型、业务实现负责。那么你理应选择当前你能实现的“最高性价比”解而不是最优解,因为编程是工程学,不是科学。
用爱发电的平台产品?
在讨论平台产品之前我打算看看什么是业务?因为平台的概念太宽泛了,目前我自己很难对它很好的下定义,所以不妨从它的对立面来理解。每个公司都有自己赖以生存的业务。是电商,还是团购?是短视频,还是直播?这些都是不同的业务类型。每种业务都有各自不同的业务逻辑。按照维基百科上的定义,它也叫领域逻辑(domain logic),指的是根据真实世界的业务规则编制成的那部分程序。总之,业务逻辑是针对特定领域的,这些代码不可能在不同的业务之间共用,因为他们各不相同。平台区别于业务,它就是要提供通用的功能,总之它不处理具体的业务逻辑。
一个公司能赚钱,肯定是因为业务做得好,提供不了有价值的业务,公司早晚死掉。而产品是业务的载体,所以我认为产品事关“生死存亡”,好的业务和产品才是一个公司发展的原动力。技术信仰可以偏执,可以任由开发人员如脱缰野马一样狂奔,对技术来说重点是追求极致,寻找最优解。但是产品不可以偏执,产品是有意义和价值的东西,事关“生死存亡”,在产品的世界里技术是手段不是目的,带来价值和意义才是目的,对产品来讲一切技术皆可为我所用,重点是“性价比”。
关于平台产品[4]
平台出现的根本原因在于降低成本。公司在发展过程中,业务一般是越来越多、越来越复杂,另外同一个公司也会尽量聚焦业务,所以各个业务之间也是会密切联系的。这样公司业务中必然会存在一些相似的逻辑。按照软件工程的思想,将这些相同的或相似的概念和逻辑进行复用,减少重复劳动是降低成本的有效方式。要进行复用首先要进行抽象,这个过程是要花成本的。最开始不同的业务维护各自为阵,时间长了经过不断地抽象、复用,有一部分功能沉淀下来成为平台,最终以产品形态呈现出来。
从平台产品的诞生过程就可以发现平台产品由业务衍生而来,来自业务并且服务业务,换一个角度就意味着平台产品与业务是绑定,只不过一个是解决抽象的业务逻辑、一个是解决具体的业务逻辑。所以一个技术成就不了平台,“用爱发电”(技术信仰)就更不行了,平台是来自于业务的迭代几乎是不可设计的,业务就想路面的指引线一样告诉平台前进的方向。
从上面的推演来看,公司的根本在于业务,但大多数开发者或者技术团队还是热衷于构建平台。这主要是因为平台建立起来之后可以支撑很多业务进而发挥的价值价值更大。虽然平台是为了服务业务,但却不是直接支撑业务,所以它不需要理解各个业务的概念和逻辑,这是平台产品的吸引技术人员的地方,但同样也是平台产品的阿克琉斯之踵:
Public discussion