摘要: 技术没有高下之分,做好产品才是王道。
很多开发者非常热衷于比较不同技术,比如:Angular是否比Vue.js更好?Node.js能否取代Java?究竟应该选择MySQL还是MongoDB呢?
认真对比不同技术之间的优劣是非常有价值的事,可以加深我们对技术的理解,根据业务场景选择更合适的技术。
但是,对技术选择过于较真,争得面红耳赤,对于产品或者个人来讲,都是没有必要的。因为,技术选择真的没有那么重要。
技术只是产品的实现手段
对于一个产品,技术仅仅只是实现手段。或者说,条条大路通罗马,这个产品可以用Angular + Java + MySQL实现,那它用Vue.js + Node.js + MongoDB来实现也完全没问题。不同技术在细节上确实有不少区别,但是它们在本质上它们是一样的,Angular和Vue.js是前端框架,Java和Node.js是编程语言,MySQL和MongoDB是数据库。
产品面向的是用户,而不是开发者自己,在开发者开来,选择某个技术栈也许很重要,但是对于用户来说,很抱歉,他们完全不关心!用户关心的是:是否有我想要的功能?UI设计是否合理?BUG有没有及时修复?生活中,我们都是用户,我们每天聊微信、刷抖音、逛京东、打王者荣耀,你会关心它们的后台是用Java还是用Node.js吗?
如果产品的技术栈还没有确定,选择一个目前使用者足够多并且保持更新的技术就好了,用的人多的技术不会太差,还在更新则不用担心BUG没人修复。如果产品的技术栈已经确定了,那就更简单了,直接撸代码啊;即使技术选择有一些问题,抱怨是没有用的,也没人愿意为了你的个人偏好去换技术栈,除非是产品需要。
作为开发者,应该利用自己已经掌握和需要学习的技术去实现一个好用的产品,满足用户的需求。如果产品没有成功,有可能是产品的需求有问题,没有市场;有可能市场很大,但是推广得不够成功;有可能推广得不错,但是商业模式有问题,赚不到钱…当然,也有可能是技术问题,是技术不够好,而不太可能是技术选择错了。
Fundebug的技术栈
当我们决定做Fundebug的时候,现在所使用的技术并不熟悉,而对于它们的同类型技术,我们更是一无所知。所以,这里也不存在所谓的选择的问题,我们使用了自己会用的技术:Angular + Node.js + MongoDB。它们使用者足够多并且保持更新,符合我所说的标准。对于这样的似乎有些轻率技术选择,基本上没有对我们产品开发造成什么困恼,用户需要的功能我们能够尽量满足。或者说,正真困恼我们的从来都不是技术选择所造成的问题,而是产品设计、市场推广、用户沟通等问题。
我会负责一些后端开发,对于我们的技术栈,我热爱Node.js,因为它语法简洁,文档清晰、有着简单的异步编程模式和丰富的NPM生态系统;我也很喜欢MongoDB, 因为它的数据模型足够灵活,然后文档非常详细,运维起来轻松很多。这里没有丝毫冒犯Java和MySQL的意思,因为我几乎完全没有接触过它们,所以无法进行比较。我也相信,Java和MySQL也非常优秀,如果我们当初选择它们应该也没有什么问题。
对于Fundebug的技术栈,我经常喜欢和人炫(chui)耀(niu)的一点是我们的所有应用包括MongoDB都是运行在Docker容器里面,这极大的简化了我们的运维工作。把应用打包到Docker镜像里面之后,我们只需要在集群上安装Docker,而不需要安装任何应用,就可以在任意节点运行任意应用。我们可以根据需要(重新分配CPU和内存资源或者进行多副本扩容)随时在任意节点之间移动应用。在集群需要增加新的节点时,也只需要安装Docker,这个新节点可以用来运行任何应用。我一直在思考Docker的价值,发现它确实很有用。所谓**“如果你手里有一把锤子,所有东西看上去都像钉子”**,我用了将近4年Docker,非常熟悉也非常喜欢,那我当然觉得Docker是个好东西。如果我们不使用Docker会怎样?运维当然会比较痛苦,但是我们应该也没有什么大问题。大量公司还没有Docker化,它们都活着好好的。
我对技术的迷思
和很多开发者,我也曾经迷信过一些技术,谁没年轻过呢?
大三暑假学了一门叫做《大规模数据处理/云计算》的课,听着很炫酷,其实主要是学习Hadoop,用Hadoop去实现PageRank等算法。PageRank是Google创始人提出的网页排序算法,是Google搜索引擎的基础。Hadoop如此厉害,居然可以造Google,当时年少无知,觉得学会了Hadoop就够了。事实上,知乎上也有类似的问题:Hadoop 就业前景如何?但是,现在呢?Hadoop的光环早已褪去,它只不过是对大规模数据进行批处理的常规工具,并没有太大门槛。而Hadoop生态系统还有很多其他工具比如Spark, HBase等,仅仅使用Hadoop完全不足以应对各种复杂业务场景。
读研的时候第一次接触Docker,被深深吸引,因为Docker可以完美解决软件安装和配置的问题。大学毕业设计我曾花了至少1个星期时间配置一个4个实体机器组成的Hadoop集群(当时不熟悉Linux),而使用Docker的话,无需安装,可以直接运行。我的开源项目hadoop-cluster-docker就是将Hadoop集群运行到多个Docker容器中,这个项目已经累积了近千个Star,可见大家对于使用Docker简化Hadoop安装还是非常认可的。我接触Docker的时间算是很早了,Docker最热门的时候还收到过大公司的相关工作邀请,因此觉得熟悉Docker非常好,这次算是站在风口了。而现在呢?Docker已经逐渐普及化!因为Docker并没有什么高深之处,上手非常快。国内很多大公司,例如腾讯, 京东等早已Docker化。
无论是Hadoop和Docker,多少都算是改变世界的技术,也曾经大红大紫,现在依然在发光发热,但是早已不再自带光环效应。这也是技术发展的客观规律,新的技术不断出现,它们解决了某些问题,受到热捧,然后逐渐普及,被更新的技术所超越甚至取代。
事实上,我从来也没有依靠Hadoop或者Docker去工作,它们也是靠不住的。技术发展如此之快,怎么可能一招鲜吃遍天,现在热门的技术迟早会冷却,甚至会被淘汰。再说,技术是为工作服务的,而不是围绕技术栈去圈定自己的工作内容;工作的时候,需要什么技术就学习什么技术,永远呆在舒适区是一件很危险的事情。
参考
版权声明
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2018/07/19/technology-selection-is-not-critical/