热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

9步:为你的web应用选择一个技术栈

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

 

创始人、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

 


推荐阅读
  • 本文介绍了自学Vue的第01天的内容,包括学习目标、学习资料的收集和学习方法的选择。作者解释了为什么要学习Vue以及选择Vue的原因,包括完善的中文文档、较低的学习曲线、使用人数众多等。作者还列举了自己选择的学习资料,包括全新vue2.5核心技术全方位讲解+实战精讲教程、全新vue2.5项目实战全家桶单页面仿京东电商等。最后,作者提出了学习方法,包括简单的入门课程和实战课程。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 一:跨域问题1、同源策略(浏览器的安全策略)    只允许当前页面朝当前域下发请求,如果向其他域发请求,请求可以正常发送,数据也可以拿回,但是被浏览器拦截了  2、c ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 腾讯T3大牛亲自教你!2021大厂Android面试经验,经典好文
    本篇将由环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来等七个方面,对当前的ReactNative和Flutter进行全面的分析对比, ... [详细]
  • 这篇文章给大家介绍怎么从源码启动和编译IoTSharp ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IoTSharp项目是 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
author-avatar
mimiku2z_818
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有