刚开展的项目选择java还是nodejs?

这个属于技术选型如何决策的问题,不少serverless同行问过我类似问题,在这里给大家集中解答。

任何技术方案都不是也不可能是绝对完美的,完美都是相对的,完美都是针对特定时代特定场景特定人群等诸多约束下综合最优解 。(这是一个哲学论点大家就当成数学公理 记住就好了不展开论述解释了)。所以,要回答这个问题的核心是要全面考虑各种解决问题的关注点要素,这些思考清楚了结论也就出来了。

刚开展的新项目会遇到选择java还是nodejs的问题,一般有两种业务场景:一种是写桌面端应用,一种是写服务端后台应用。不确定提问者的项目是属于哪种业务场景?我的回答就顺带将这两种业务场景都简单分析一下,重点我会详细讨论服务端后台应用的新项目选择java还是nodejs?

如果业务场景是写桌面端应用,技术选型比较简单道理也是显而易见的就不赘述了,这里只说结论:如果要想快速低成本开发首选nodejs开发方案让团队中的前端开发者去承担这部分工作,如果团队中前端开发是瓶颈并且需要复用后端java开发资源优选java开发方案,如果桌面端windows功能强依赖并且nodejs或java方案都不合适优选C#开发方案,如果对性能和安全等有苛刻要求那就请直接用C/C++原生开发吧。一般情况下nodejs + electron + C/C++原生扩展 混合应用开发。

如果业务场景是写服务端后台应用,新项目的技术选型考虑要点如下:

  1. 首要考虑团队技术基因谁更合适。如果团队技术基因就是java为主,那就优选java。同理,nodejs/php/C#/python/ruby/go等其他后端开发方案选型也是类似的。这样可以快速复用团队过往的开发经验沉淀,避免新技术引入带来的潜在项目风险的不确定性。(这种团队技术基因是在团队创始的时候影响最大,其次是未来业务发展遇到瓶颈了需要更容易的找到成熟方案与人才的时候才会变化,除此之外除非新的主流技术开始普及流行并且带来显著价值否则团队技术基因非常稳定而且根深蒂固很难撼动,这是技术选型最大的限制条件。)
  2. 次要考虑客户的业务场景范围谁更合适。一般业界实践经验:如果业务场景是偏前台UI交互相关以及管理后台项目中的边缘非核心应用或者不复杂的中小功能全栈开发,适合nodejs服务端开发;如果业务场景是电商等复杂高并发大数据依赖大量复杂中间件的场景,适合java服务端开发;如果业务场景业需要复杂的分布式计算定制开发相关需求,适合go服务端开发;如果业务场景涉及到大数据处理分析以及人工智能或运维自动化等领域场景,适合python服务端开发;如果业务场景深度依赖微软的windows上的相关产品与服务,适合C#服务端开发。。。(理论上而言,只需要一种开发语言就可以完成其他所有语言能干的事情,但是大家很容易发现这个事实每种后端语言在特定场景下最优解都是唯一的,这是为什么?这主要是每种开发语言被创造出来后,语言创造者所要解决的问题域背景以及该语言使用群体长期开发沉淀出的丰富开发资产,直接影响了每种开发语言的适用范围。)
  3. 还要考虑当下时代新技术方案谁更合适。服务端 开发领域中当下热点技术Serverless,极有可能成为我们一般业务应用,屏蔽掉Docker&DevOps传统后端开发复杂度推进业务应用演进到更高阶的Serverless&NoOps开发模式。Serverless是大家当下选择新项目后端开发必须要考虑的一个思考点。如果是nodejs项目,serverless nodejs开发非常适合,目前各个云厂商的底层运行时能力都是OK的。如果是其他后端语言项目,serverless要么不成熟有坑有缺陷导致试错成本很高,要么就是缺乏标准被厂商锁定如同进入windows浏览器ie6那种状况。(为什么Serverless NodeJS服务端开发非常有显著技术优势,大家可以参考这篇文章评论:Node.js 做 Web 后端优势为什么这么大?
  4. 再要从多维度的商业角度评价技术栈的适用性。脱离了技术栈和周边生态配套去纯粹的考虑哪种开发语言合适是一个伪命题,一个语言的技术栈和周边生态配套的商业视角分析,是技术选型的重要辅助参考非技术因素分析要点。一般考虑如下五点:
    a. 开发人群以及技术普及度是否好招聘(当下服务端开发java远强于nodejs),
    b. 是否有成熟的开发者社区生态以及是否有大厂背后强劲支撑(java和nodejs相当都有大型社区生态和大公司背后强劲支撑不分伯仲),
    c. 配套的应用框架成熟度以及健壮性(java的spring一枝独秀功能非常强大远强于nodejs而偏前端领域结合的场景nodejs的大量与前端集成的应用框架远比java轻巧灵活好用),
    d. 历史资产沉淀丰富程度是否可以快速复用满足业务发展需求。(这个需要case by case分析没有定论的)
    e. 开发成本以及开发周期是否可以在满足的范围内并且可以有持续性兼顾远期发展。(这个也需要case by case分析没有定论的)
  5. 最后要考虑个人职业成长发展角度。受制于中国互联网行业发展现状普遍的业务导向生存为主阶段,所有的技术决策都是优先考虑公司利益甚至牺牲个人利益很难看到能够像国外很多极客程序员一样公司利益与个人利益可以很好的平衡和谐共存的。个人的知乎头像是我的职场偶像mysql创始人Monty(大家有兴趣可以看一下这篇文章更多了解 一、MySQL前世今生),一辈子就写一款产品用一生时间进行持续的迭代更新,靠一款产品持续经营实现财富自由,已经都快60岁了还在社区上开发代码编程已经成为人生的职业兴趣爱好了。当我第一次了解到Monty职场发展轨迹的时候就被这种技术人生发展轨迹所深深吸引着,这不就是中国社会所倡导的类似水稻专家袁隆平一样的程序员届的工匠精神的杰出代表吗!!!Monty同志在国外不是个例,国外这类程序员活跃在开源社区中这类人还是很多的,但是在中国国内大家很少能发现有这种人才在IT行业可以涌出,这是什么原因?这是什么原因呢??这是什么原因啊???个人经验主要是因为我们这帮子码农做事很少去思考个人职业成长发展而中国又没有一个为程序员服务的工会组织去为程序员群体争取更好的职业发展外部环境导致的。
    a. 在中国95%以上的一线开发程序员都是在写各种业务或产品逻辑软件,但是我们的身份都是打工者,业务与产品的好坏对于我们个人的职业影响和财富收益是非常有效的,我们绝大多数人只是技术的搬运工靠出卖个人劳动时间产生略高于生活成本的劳动回报打工着,而绝大多数人都享受不到业务或产品的快速发展产生的价值升值红利(这部分红利都被非一线员工所瓜分掉),这导致了我们绝大多数一线开发不可能靠持续经营一个业务做大产生类似mysql作者一样的实现财富自由的可能性。在当下中国财富自由只是富人的专利,底层劳动人民的阶层上升通道是非常狭窄的。(能像华为一样全员持股共享企业发展红利的企业在中国没几家的)
    b. 中国公司95%以上的公司都是业务导向公司,中国已经进入后互联网寡头垄断时代,95%的中小互联网公司都是永远做不大的,公司为了生存被迫只能向一线生产力要更多的剩余劳动力去推动企业价值具有持续竞争力。末位强制淘汰和996甚至更长工作时间还没有加班工资已经是行业潜规则了,这进一步剥夺了众多程序员业余时间自我学习自我实践自我成长实现自我价值增值的可能性。开发是一个技术活需要持续的经验积累才能不断地技艺精湛精雕细琢产品做出工匠精品,不是中国人比国外程序员笨写不出优秀的开源软件,而是中国程序员普遍迫于生存根本就没时间去写开源软件再加上各种竞业限制更加很难将自己全职工作中的技能进行产品化持续经营用一生去迭代开发做出精品,自然也就不可能出现国外那样中国开源软件精英了。
    c. 中国劳动力成本的持续攀升,绝大多数的一线程序员工作3年、5年、10年在专业技能上似乎都相差不大对企业而言,但是对于劳动力成本而言显然做同样的事情年龄越大其劳动力成本越高,为了降低企业的用人成本间接增加利润。所以在中国越来越多的企业对于一线程序员开发年龄有严格要求限制,例如:某大厂A规定每年裁员1000名10年工作年限的员工、某大厂B规定一线开发不超过35岁根据入职年限40岁到45岁之间必须强制裁员、某大厂C对于非核心中低端开发岗位大量启用外包人才降低用工人力成本。程序员这个行业越来越是一个吃青春饭的行业,很多人能否安全顺利做到退休安享晚年而不被淘汰是一个大大的问号未知数。
    d. 鉴于上面三点中国IT环境客观现状分析,我们在考虑选型一个项目的技术方案的时候,除了要考虑满足业务需求之外,同样重要的是要考虑选型一种技术方案对于我们个人以及团队的未来职业成长是否有帮助。如果帮助不大,就要大家平时多想,更多的创新探索,寻找到你自己和团队的技术领地,开始精雕细琢工匠极客精神全部用上。如果帮助很大,但是短期之内技术方案不成熟,那就建议多业余时间去打磨技术方案,等验证成熟了再去用到业务上。最终实现业务和技术的双赢,业务赢是老板的,技术赢是可以伴随我们一生职业生涯的确保我们摆脱中国IT困境的核心关键所在。

最后,我想说的是,这是一个开放话题,没有绝对的选A还是选B的结论,个人只是根据自己的一些多年职场经验,给大家提供一种技术选型的方法论,启迪大家思考帮助大家做出正确的技术选型决策。Serverless NodeJS未来开发一定会是偏前台应用场景新一代服务端开发的主流技术方案,个人也期望未来可以像MySQL作者Monty一样,立足于一种有长远生命力的新兴技术用一生的时间精雕细琢将工作做成艺术品服务社会,欢迎大家关注我的知乎专栏,后续我会持续写Serverless相关文章分享给大家与各位同行一起职业成长做点有意义的事情。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值