目录

创始人、CEO(首席执行官)、CTO(首席技术官)以及其他的利益相关者都需要知道如何构建一个软件产品,你是他们中的一位吗?

是否烦恼过 Web 应用到底选择哪一个技术栈比较合适?用 JAVA 还是用 Python 呢?使用 node.js 或者 Flask/Django 作为 web 框架真的选对了吗?前端到底是选 Angular ,React 还是 VueJs?数据库到底是选 MySQL,Postres 还是 MongoDB?你应该在DigitalOcean上与Apache或Nginx进行自我托管,还是只使用亚马逊AWS?也许你觉得和Heroku这样的PaaS合作更好一点?

如果你有无数的问题不知道从何下手,那这篇文章可以说是雪中送碳,它会帮助你做出决定。

1.简单、敏捷

通常来说呢,要是你的产品失败了,那么你在技术上的纠结就没有意义。许多创业公司一开始就想要使用厉害的技术,然后花费很多时间和经历来保证产品的健壮性,结果发现产品没啥市场。

无论在什么时候,要是你想从头开始构建一个产品,那最好的选择就是使用最简单的解决方法来解决问题。一个带有 Wordpress 或者 Unbounce 的界面可能就够了,甚至一个静态页面就足以解决问题了。在你经历构建产品的麻烦之前,你需要仔细衡量你对产品的兴趣。要是你设想的概念和你最终使用的技术不大一样,那也没什么大不了的。

确定了想法和概念可行后,你就可以开始准备构建产品了。在这期间一点要保持敏捷。决不能花费数月来为开发者编写一个程序规范,特别是这个产品只有6到12个月的实现时间的时候,这可能导致时间上来不及。

想一想:最重要的事是什么,先做最重要的事。先让基础的界面跑起来,然后加上第一个要求,然后加上第二个。这么做的好处在是一方面你可以实时评估进展,另一方面也方便你根据需求调整项目方向。这样做能够使风险降到最低,因为你的系统已经能够运行了,可能这个系统功能还不够完善,但至少,它能跑起来!

2.想一想你的个人需求

多想想实际要解决问题。你应该基于实际的问题去选择技术,面对不同的问题的时候,也许这种语言会比另一种语言好的多。比如,Python 语言在计算和统计方面就很有优势。

技术所面向的用户

产品是为用户而构建。你想构建一个什么样的产品?如何使用户体验达到最佳?想一想谁会使用你的系统。他们是用电脑工作呢还是用平板工作呢?他们是不是通过手机来访问东西(60%的用户是这么干的)?需要一个电脑桌面风格的应用吗?用户最常使用的浏览器是哪一个?

速度和性能

你对于速度和性能有标准吗? 软件会在你的内联网运行吗?如果是这样的话,软件加载时间可能比最佳状态还要少。

当然,如果可以的话要尽可能的思考产品的敏捷性。如果软件性能不大好,需要现在就改善吗?如果你想做一个大型的软件,你可以先改善一下平台服务(例如 Heroku),然后在改善产品结构,来达到改善性能的目的。当这个产品的规模较小时,你不需要考虑性能的问题。当你产品达到了一定的规模,就可以开始考虑性能问题了。

迁移&系统遗留问题

你有需要迁移的数据或者数据库吗?你有需要迁移到新系统的模块吗?这一系列类似的问题都需要检查和评估。

安全

安全问题不能被忽视。考虑到你工作面对的数据有所不同,可能安全会是这个系统最重要的因素之一。

3.考虑开源技术

当你构建一个新的软件的时候,你应该寻找开源的解决方案。这避免了你从零开始进行软件构建。这样做可以节省大量的时间,而且可能更加的安全(毕竟大众的智慧强于个人的智慧),而且还能让你讲精力集中在业务方面,使产品更加出众。要记得给开源社区一些回馈。

当你发现一个新技术的时候,别激动,先列一个思考清单。它有什么许可证?这个语言有没有什么特性你们开发团队正好需要?这个语言有多少核心开发人员?你可以去 Github 上面去查看代码贡献者或者是星星,以及这个语言版本的演化历史。如果你想要更加深入的了解这个语言,它底层的算法好理解吗?该语言的文档是否全面,该语言的技术是否经过测试?有没有什么模板样例能够让你对这个语言迅速上手?

4.检查系统

每一种技术都会有一个人和工具组成的生态系统。

这个语言或者框架背后的系统有多大?有多少栈溢出类的问题、回忆或者在线教程?谷歌当前引导的趋势是什么?软件还在持续改进吗?它拥有多少个包,你能不能拿到使用许可证?

你知道吗?有一些很棒的清单,它们能够帮助你深入挖掘一些语言或者框架背后的系统。你可以查看和该技术有关的教程,文档以及一些重要的包。它列出了 Django,node.js,React,Angular以及其他的。

还有一点也很重要,这个新技术的社区欢迎新人吗?社区是否活跃?给用户和开发人员提供了多少支持?有没有用于联系相关人员的邮件地址列表、聊天频道、一个 Slack 聊天房间,或者一个预约系统?有没有博客内容是和该技术有关?

5.前景和支持

市场生命周期

每种技术都会有生命周期。之所以选择成熟的技术,是因为相对而言成熟的技术更加可靠。你应该去 The Latest Technology Radar(最新技术雷达) 来了解未来的技术可能是什么样的,这样做能够帮助你决定是使用某种技术还是将他们留作备用。The Latest Technology Radar 是免费的,它将技术分为 技术,平台,工具,语言和框架。但是你需要谨慎的使用这些信息,因为这些信息不是一成不变的。

另一个方法是去找一找大型工厂/企业使用的都是什么技术栈。找找 Airbnb 在使用什么,而 AngularJs 的使用人权又是谁。如果你不懂技术,你可以使用以上方法来决定选择什么技术。有一份 Angular JS 的技术选择清单在 alternativeto.net 上。

长期供应商支持

供应商对这个技术支持有一段时间了吧?有没有大公司赞助这项技术的发展呢?要知道 Angular 背后的大佬是谷歌,React 背后的大佬是 Facebook。在意味着,在这些大佬的支持下,这些技术会持续的更新、发展,直到大佬们决定放弃这项技术为止(这是有可能发生的)。但这些技术使用的范围越大,它们存活的时间可能会更长。

有些应用在很长一段时间内会持续的更新版本。过一段时间,他们就会提供一个新的版本,修复了上一个版本存在的问题。你应该要看一下技术网页:更新都解决了什么问题?更新/迁移的过程容易吗?有没有不兼容的版本(像是 Angular 1 和 Angular 2)?

6.人力资源和招聘

你身边开发人员水平如何?如果你必须决定到底使用什么前端技术,恰好身边又有三个厉害的 Angular 开发人员,那你可以优先考虑 Angular 作为前端技术。开发的速度很重要。与其让技术人员去学习一个新的技术,不如就让他们呆在自己的舒适区使用现有的技术。当然,了解现有系统的生态系统(包括开发人员和使用工具)也是一个加分点。

至于招聘,则一定要想一想以下几点:你能为你想使用的技术找到足够的、高质量的开发人员吗?给他们多少报酬合适?大公司是否使用了同样的技术,是否使用开发人员都是优质开发人员?你招到的开发人员是真正优质的开发人员,还是说他们和“脚本小子”(以黑客自居并沾沾自喜的初学者)区别不大?找一个优秀的软件工程师或者一个优秀的 PHP 开发人员的难度可能大于需按照一个优秀的 Java 开发工程师,你可以看看目前的工作趋势。

这种技术好学吗?选择一种简单的开发语言能够帮助你找到一些初级培训人员,这个系统也会更加容易吸引到更多人。

最后一点:HR 可以从 Stackoverflow Developer survey(链接见原文) 里面去寻找合适的人员。它提供了和开发人员类型、技术以及工资方面的相关信息。值得一看!

7.软件的设计足够灵活吗?

服务粒度

比起20年前,现在的一切都迭代的更加迅速。在很长一段时间里,人们主要都用 windows 系统的台式电脑。未来的十年里,可能就完全不是这幅光景了。你选择的技术开发出来的产品可能会使用5-10年:这是一个很长的时间。你无法确认一切将会如何发展。因此,当需求出现的时候,你要准备好改变使用的技术。

小型的程序包也要思考粒度以及粒度分割点。你最好把 服务器、前端、后台都分离成更小的应用和微服务。如果现有的技术不管用的话,你应该要能够找到替换的技术。你可以看看 面向对象服务(SOA) 和 领域驱动设计(DDD)相关方面的设计。(链接见原文)。

你能担保以下情况不会出现吗?出现的规模怎么样?

你能够随意访问数据吗?如果想要改变改变技术,那么原先产品种的数据能够导出吗?这个技术是否能够提供接口,让应用能够适应其他终端呢?也许你想在客户或者消费者面前打开应用,或者你想用你选择的技术构建一个手机 app 或者 电脑 app。

8.给人感觉如何?

让你的开发人员去了解这项技术,或者自己去了解。你对这个技术的第一映像是什么?做一些导频设置,尝试使用现有的模板,或者(如果可能的话)尝试一个小项目。如果您使用细粒度的服务,你可以使用新的技术构建一个小型服务,然后观察这门语言是如何运作的。

目前我们可以使用一些现有的应用来理解语言之间的差异。TodoMVC (链接见原文) 就是个不错的项目——比如说一个简单的 Todo 应用就是使用不同的 JavaScript 框架来实现的,你可以检查源码结构。应用中有各种各样的例子,你可以将 Angular 和 React 对照,将 Vue 和 Ember 对照。

牛逼的 RealWorld project 项目更加全面:它是一个中等的全堆应用程序,使用 Django 或者 node.js 作为后端,使用 Angular 或者 React 作为前端。你可以阅读 Eric Simons 写的相关介绍的文章。

9.开始吧!

如果你是一家小型创业公司的负责人,进入市场比挑选完美的技术更加重要。专注于你的业务和营销,而不是优化技术,毕竟你现在的用户没有 Facebook 那么多。早期的时候,可能你的知识量达不到需求。但是随着时间的流逝,你必须成长起来,开始要懂得优化、改善现有技术,并技术栈进行调整(并且进行支出预算)。

不同的企业,面对的情况可能不同。无论如何,最终的决定可能都是带有一定的政治性的——公司的每个人都需要在你的决定中来找到平衡。管理层(希望内部/潜在的开发人员)可能是最重要的利益相关者。

你要时刻记住,质量至上。选择什么技术不是最重要的,一个好的产品还需要好的设计、清晰的需求、严格的测试流程等等。最终要的一点是不要低估了自己的能力,保持项目语言的的一致性,不要在未来转向其他的技术。

作者:周一的周小七

原文链接:https://medium.com/unicorn-supplies/9-steps-how-to-choose-a-technology-stack-for-your-web-application-a6e302398e55


本文收藏来自互联网,用于学习研究,著作权归原作者所有,如有侵权请联系删除

markdown @tsingchan

部分引用格式为收藏注解,比如本句就是注解,非作者原文。