开源软件那么多,我们该如何选择?|洞见

当我们说起开源软件的时候,想必大家都有丰富的使用经历,小到Node.js的一个组件库,大到一套办公软件如LibreOffice,再如Linux操作系统,可以说无奇不有,浩如烟海。就拿我们常用的Github来说,官方的数据显示已经有超过三千八百万个项目托管在上面。

在我们日常的项目中,开源软件或者框架也被广泛的应用,从前端到后台,从WEB服务器到数据库,每一种类型都有很多可以使用的开源软件。

假设现在需要开始一个项目或者准备引入一样新的技术,面临这么多的选择,就算是老司机,可能会觉得难以取舍。

1

流行的就是最好的吗?

还是该尝试一下最新的技术?技术的最新趋势是什么?

举一个实际的列子,有一个遗留的在线电商系统,前端使用了jQuery和JSP以及一些老旧的模板技术,每当改动一个小的功能,往往需要非常的小心和充分的测试。前端代码已经非常难以维护和扩展,没有模块化管理,没有层次结构。同时,伴随着业务的快速发展,业务方也希望对页面进行不定期改版和试点,使之能够适应快速的市场变化,要求统一界面风格,开发成本低。

IT团队领导考虑引入一项新的技术,希望实现模块化代码管理,前后端分离,提升开发效率,未来更好的向微服务转换。你作为团队TechLeader,来负责实施,该如何评估和选择呢?

首先要考虑的是实际需求和应用场景,弄清楚要解决的问题是什么,再来看每种软件的优缺点是什么,是否能够帮助解决实际的问题。我的一个原则就是KISS(保持简单),能够用一个包库解决的不要用一个框架,能够用一个框架解决的不要用一个应用,谁能满足需求而且更加简单,就用谁。

业务的快速变化,转化成技术的语言可能就是快速迭代,如果有模块化管理,实现业务的耦合,显然有助于提升交付速度;试点和改版可能就是更多的偏向前端,显然实现前后端分离,可以更好的满足这一点。再来看看现在比较流行的技术,现代的前端框架几乎都能够满足这两点需求,比如AngularJs、ReactJs、VueJs等。

2

究竟该如何选择?

没有比较就没有差异。你最先想到的可能是软件的特性。这个文档中一般会有描述,也会找到文章的总结,比如VueJs的《对比其他框架》。结合实际的情况,我认为可以从以下几个方面来入手。这时我们不妨做一个表格,从多个维度来进行考察,并给每一项进行评分。


首先是看软件特性是否满足需求,下面这些维度都是可以参考的。

  • 版权协议:这个主要是看能否修改源代码,能否闭源使用。

  • 兼容性:和现有技术栈的兼容性,比如JDK的版本要求,Node的版本,以及是否可以重用已有的代码和功能。

  • 扩展性:是否有设计扩展点,容易进行二次开发;随着规模的增加,是否会提高复杂度,导致代码难以驾驭。

  • 替代性:是否有同类型其他功能相似的软件,可能会同时进行试点进行比较。

对于统一界面风格,提升开发效率,我们则可以选择定制化一套StyleGuide,来进行重复利用。可以参考一位同事的这篇文章——《风格指南驱动开发》

其次,我们要看目前团队的技术能力,例如:

  • 学习成本:学习曲线是否陡峭,能否在短时间内掌握并运用,影响的是项目的进度。

  • 现有资源:开发团队是否愿意学习新技术,或者有团队成员已经掌握了该项技术;公司范围内能否协调到专家资源支持。

  • 网络资源:博客、专业网站、公众号等上的分享和总结也比较具有参考价值。

举个例子,假设现在有5个开发,如果大家对三个框架都不熟悉,可以选择VueJs。如果有两个人对AngularJs有一些使用经验,可以优先考虑AngularJs。按照上面的维度记录之后,可能的结果是这样的:

第三,从社区支持来看。例如:

  • 活跃度:是否有丰富的相关技术问题的讨论和分享,碰到坑时可以寻求帮助,比如邮件列表、论坛、stackoverflow。

  • 更新:版本更新是否频繁,是否有严重的安全问题或缺陷。

  • 应用广泛性:有哪些公司在使用该技术,是否有案例分享。

  • 生态圈:选择一个软件或者技术的时候,往往有它自己的生态圈,相关的工具也是需要考虑的。比如Hadoop,相关的软件或工具就非常多。

第四,文档和培训

  • 官方文档:除了使用文档,源代码也是比较重要的,源代码是否组织的比较好,易于理解,在后续解决技术问题的时候会有比较明显的作用。

  • 商业支持:如培训、付费支持,如果开发团队技术能力还不错,则显得不是那么重要。

  • 成熟的案例:别的公司或者团队是怎么应用的,有哪些坑。

3

Talk is cheap, show me the code.

结合应用再写个小Demo,功能不用那么完善,给团队秀一秀代码,让大家有个客观的认识,对工作量的估算也会比较有帮助。

对于上面的案例,如果现在来选择,Vue会是首选,相对简单。

React makes it painless to create interactive UIs.

如果碰到评估完之后,两种可选方案区别不太明显,不相上下,那就丢硬币了(不如让团队投票吧)。最后就是进行技术评审了,给专家团队或者领导演示你的方案,展示Demo,让他们更加有信心,并获得支持。

最后推荐给大家的,是ThoughtWorks会定期发布的技术雷达,要想了解最新的技术趋势,那就不要错过新一期的技术雷达。

本篇参考资料:

《狗日的开源软件许可证》

《Various Licenses and Comments about Them》

《你听说过“风格指南驱动开发”吗》




- 相关阅读 -

以敏捷的方式运作一所大学|洞见

登陆工程:传统Web App应用中的身份验证技术|洞见


点击[阅读原文]到洞见网站查看文章全部内容&绿字部分

本文版权属ThoughtWorks公司所有,如需转载请在后台留言联系。

内容转载自公众号

ThoughtWorks
ThoughtWorks
了解更多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 集合框架分析:线程安全的集合

转载自 Java 集合框架分析:线程安全的集合 相关文章: Java 集合框架分析:Set http://blog.csdn.net/youyou1543724847/article/details/52733723 Java 集合框架分析:LinkedList http://blog.csdn.net/youyou1543724847/article/details/52734935 Java 集合框架分…

如何使用计算机远程关闭手机软件,如何使用手机远程遥控电脑关机?手机遥控电脑关机方法图文介绍...

电脑定时关机很正常,但是你试过手机遥控电脑关机吗?或许你有时候很懒,相关电脑如何通过手机遥控关机。现在已经可以实现,简单就可以遥控电脑关机。一个屌丝般的软件,高富帅般的技术,下边详细介绍一下如何使…

MyBatisPlus(笔记)

简介 学习MyBatis-Plus之前要先学MyBatis–>Spring—>SpringMVC 为什么要学它?MyBatisPlus可以节省我们大量的时间,所有CRUD代码都可以自动完成 JPA, tk-mapper ,MyBatisPlus 偷懒用的! 是什么? 官网:https://baomidou.com/ 特性 无侵入:只做增强不做…

WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能

最近的工作我在做一个有关于消息发送和接受封装工作。大概流程是这样的,消息中间件是采用rabbitmq,为了保证消息的绝对无丢失,我们需要在发送和接受前对消息进行DB落地。在发送前我会先进行DB的插入,单表插入,所以在性…

java实现遍历树形菜单方法——Dao层

Dao层接口:/** * Title: IVoteTreeDao.java * Package org.dao * Description: TODO该方法的主要作用: * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午10:38:47 * version V1.0 */ package org.dao;import java.util.List;import org.e…

文件损坏 无法删除 怎么使用chkdsk磁盘修复工具

有时候我们会遇到文件无法删除的问题,该如何解决。对于专业人士可能比较简单。对于小白,就够折腾人的了。下面分享下我是怎么做的。 很简单很实用。 现象:此时哪里有损坏,一般会在删除文件时,莫名的提示有文件无法删除…

35c3 krautflare

参考这篇文章可以彻底了解本题的漏洞所在 https://xz.aliyun.com/t/6527 由于Math.expm1经过patch以后的返回值不可能是-0,但是patch的地方是在typer优化中,所以实际上如果没有优化的话是可以返回-0的,这就意味着如果我们先不停地Math.expm1…

Java集合框架综述

转载自 Java集合框架综述 集合框架(collections framework) 首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。Java中的集合框架定义了一套规范,用来表示、…

vue项目没有启动成功的原因之一

删除mould。。。本地从新安装

RabbitMQ 高可用集群搭建及电商平台使用经验总结

面向EDA(事件驱动架构)的方式来设计你的消息AMQP routing key的设计RabbitMQ cluster搭建Mirror queue policy设置两个不错的RabbitMQ plugin 大型应用插件(Sharding、Rederation)Queue镜像失败手动同步各集群配置同步方式(RabbitMQ export\i…

谷歌浏览器如何阻止弹窗广告?右下角弹窗一个接一个的弹出 每隔几分钟又来一波 怎么屏蔽?

谷歌浏览器如何阻止弹窗广告?右下角弹窗一个接一个的弹出 每隔几分钟又来一波 怎么屏蔽? 作者:知乎用户 链接:https://www.zhihu.com/question/319190736/answer/645314963 来源:知乎 著作权归作者所有。商业转载请联…

如何线程安全的使用HashMap

转载自 如何线程安全的使用HashMap 在周二面试时,一面的面试官有问到 HashMap 是否是线程安全的,如何在线程安全的前提下使用 HashMap,其实也就是 HashMap,Hashtable,ConcurrentHashMap 和 synchronized Map 的原理和区别。当时有…

用.net core 写后端—— c++外的另一种选择?

一、.net core简介 (1).net是什么 .net实际是遵守同一个标准(ECMA)的多种不同实现,如.net Framework、Mono、和较新的.netcore。C#是.net支持的其中一种语言,理论上任何遵循公共语言规范(CLS&am…

《微软开源跨平台移动开发实践》团购通知

【新书推荐】《微软开源跨平台移动开发实践》带你走近微软开源开源跨平台技术 大家的响应非常积极,接近400位同学想团购。 这两天通过作者李争的努力,为大家争取到了非常实惠的价格,投票结果看不到具体是谁参与了投票,请参与投票的…

Invalid character found in the request target. The valid characters are defi

解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题 ApiOperation(value "根据排污口类型获取所有企业排污口信息和经度和纬度", notes "获取所有企业排污口信息和经度和纬度") PostMappin…

大咖微课 | 直面Angular2系列课第二期开讲

1.背景介绍:Angular1.x与Angular2 近年来,Web 开发技术的发展日新月异,各种框架层出不穷。在这样的大背景之下,2010年10月,Google 首次发布了自己的 Web 开发框架,名为 AngularJS,也叫 Angular&…

HashMap在java并发中如何发生死循环

转载自 HashMap在java并发中如何发生死循环 在多线程环境中,使用HashMap进行put操作时会引起死循环,导致CPU使用接近100%,下面通过代码分析一下为什么会发生死循环。 首先先分析一下HashMap的数据结构:HashMap底层数据结构是有一…

计算机和影视结合专业,计算机专业专业建设总结与典型案例2.5微电影拍摄与后期制作(影视拍摄与后期制作技术)课....

计算机专业专业建设总结与典型案例2.5微电影拍摄与后期制作(影视拍摄与后期制作技术)课. (11页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分微电影拍摄与后期制作(影视拍摄与后期制作技术)…

SpringBoot +Vue前后端分离(笔记)

前后端分离简介 前后端分离 前后端分离就是将⼀个应⽤的前端代码和后端代码分开写,为什么要这样做? 如果不使⽤前后端分离的⽅式,会有哪些问题? 传统的 Java Web 开发中,前端使⽤ JSP 开发,JSP 不是由后…