用雷达图帮你做技术选型

版权声明:所有博客文章除特殊声明外均为原创,允许转载,但要求注明出处。

软件开发行业一个经久不衰的主题是:如何从一堆不同的技术(语言、类库、框架、应用、数据库 etc...)中做出选择。这也难怪,因为可以选择的轮子实在太多了。

当这种问题出现的时候,通常看到的局面是——一群不关己事的人七嘴八舌的评论这个好,那个不好,有时候还会有人强行安利和问题本身不大的内容。结果往往并不好。因为提问者会问出这个问题,说明他自己缺少足够的背景知识,再听上这么多东拉西扯的意见,不昏头转向才对。

事实上,做技术选择也可以是有方法、有套路的。我在这里介绍一种有用的思考方法:雷达图。

数据分析领域有很多图表类型,然而雷达图使用的频率可能并不算高。一般人们之所以知道它,更多的可能来自于乒乓球界著名的“六边形战士”的梗。

Lines of code

好吧,我们这里介绍的方法实际上和分析球员战术特点的思路很相似。这就是:利用雷达图特性,将各类技术在主要指标上的特点形象的表达出来,再结合自己对各项指标的要求,来决定哪像技术最适合自己。比如说,C++长处在最接近底层的性能,短处在开发和学习效率;多数动态语言则相反。那么你只要想清楚性能和快速开发这两项对你来说孰轻孰重,就不难做出选择。这种思考方法并不神秘,甚至可以说很容易理解,但以图形的方式表达出来,比空泛的讨论,显然更加清楚和准确。

更详细的说,使用雷达图的具体步骤如下:

  1. 列出各种可能的技术选择(最多不要超过9个);
  2. 列出你关心的主要技术指标(最好在4~6个);
  3. 每个技术指标满分5分(最佳),以此为标准为各技术的各个指标评分;
  4. (注意,接下来很关键)以“我心目中理想的技术”为目标,同样为各个指标评分,但你只有固定的点数(建议为满分的60%,比如说指标有6个,满分5分,那么总分=65=30,你可以分配的点数就是3060%=18分)。是不是有点像某些RPG游戏开头为你的英雄分配技能点?一般来说,你可以首先给每个指标分配3分。再看哪个指标对你来说更重要,就从相对不那么重要的指标上“拿”一些点数加上去。
  5. 最后,比较“理想技术”雷达图和现有技术的雷达图。理想图形和哪个现有图形状最为相似,那个就是你的最佳选择。

下面我用一个现实的例子——选择流行的编程语言——来具体说明。首先声明,这里每个指标的评分可能有一定主观性,但先不要纠结这个,重要的是理解方法。

  1. 选择编程语言:考虑主流开发开发语言。我这里选择 C++、Java、C#、Python、NodeJs、Golang。
  2. 选择技术指标:我选择下列指标,因为这些对大多数项目都比较重要:开发效率、运行效率、可维护性、上手速度、平台/库支持、流行性。
  3. 为各项技术指标打分:因为指标很多,我就不一一解释了。你可以对它有自己的看法,这里重要的不是具体分数,而是方法。结果如下:

Lines of code

  1. 为”理想的语言“打分。对于中小型商业项目,我比较看重开发效率、库支持和可维护性,而相对性能和是否流行没那么重要。

Lines of code

最后看相似度,这个需要你培养一点对图形的敏感度。有经验的朋友可能看出来了,最符合的是——C#。好吧,抛开政治问题不谈,C#在开发效率和维护方面还是比较做的平衡的。

如果你觉得从图上还不容易看出来,那么我告诉你一个数学方法:将“理想技术”和“现实技术”在各个指标上的计算均方差,最终值越小则越理想。

最后,我要说明该方法几个需要注意的地方:

  • 很多人容易犯的毛病是贪心。总希望找出最“完美”的技术(如同六边形战士),而不是找到最“适合”自己的技术。为了避免此倾向,必须限制“理想技术”只能有固定的点数可用,不允许所有指标一概打5分。就好像创建英雄时也不能一上来就把所有技能树都加到满点——这样游戏就没有意义了。
  • 对于技术团队已经成型的公司,还有一个很重要的指标需要考虑:团队对各项技术的熟悉程度。选择熟悉的技术来做,而不是盲目寻找“最优”的技术,这是成熟团队的标志。但我无法把它画进来,因为这个情况只有你自己(或你们)才知道。如果你们的团队已经比较稳定,那么请认真考虑把这个指标加进去。
  • 做技术选型的个人可能对各项技术了解程度有限,觉得自己画不出那么多雷达图。但是我建议,在你了解的范围内画一些大致的图形,也比空泛的文字描述要有力得多。当然,有靠谱的数据分析公司来做这件事更好(虽然据我所知很少有公司提供这样的图表)。但“理想技术”的图一定要自己做!自己的需求必须自己分析,不能假手于人。

本文中的雷达图主要用 Highcharts 绘制。