2020年各位后端开发者更看好谁,Java,go,node.js还是php ...

论坛 期权论坛 期权     
期权匿名问答   2021-11-18 15:51   21050   20
现在的后端开发比以前更宽广,以前的后端开发可能一个spring就打遍天下了,但现在我们需要看更多的领域。
    互联网web服务,尤其是微服务开发 ,这个领域我更看好java和go,尤其是go,配合容器化部署,在吞吐量没大到夸张的时候,是我目前的首选。其实我也动过念头用rust来取代scala,但觉得还是太小众了。swoole也可能会被有php团队的公司欢迎, 还有phper期待已久的php 8 jit。至于.net core, 肯定也会有老粉喜欢, .net粉一直相信.net跨越了平台,也开源了,就离战胜java不远了。我个人对php和.net的观点已经表达很多次了,就不再重复了。至于nodejs,ruby,python,也还是可以继续玩后端服务的,根据团队和实际需要酌情选用,我就不细说了。

    大数据存储以及计算引擎,比如说hadoop,spark,presto等等,这目前来看还得是Java和scala,我希望rust可以在这个领域赶上来, 比如说不少人想用rust重写一个spark(下面这个项目). 我觉得rust的内存管理和运行效率非常适合做大吞吐量的cpu密集数据计算。当年scala的case class,就把大家美的不要不要的,那我觉得现在rust的类型系统没准可以做的更好。

    流处理 比如说flink和kafka,这也是java和scala比较受欢迎。企业应用,私有云服务等等,我觉得这里面java在安全、数据处理、报表方面的积累的东西比较多,很多成熟的产品线还是会继续选择java,但是c#和php由于更简单便宜,所以也会有一席之地。原回答里漏了金融方面的后端应用,这个战场主要是java和c/c++的天下,java胜在对大型项目的管理以及安全性上,c/c++胜在对低延时的控制力,有些搞高频交易的,恨不得把代码往linux内核里写。还有,国外有一些投行比较喜欢scala, 现在scala 3要出来,最着急的也是他们。
这时候,是不是综上所述,java就是后端最好的语言了呢?也不尽然,用的广不代表就是最好。这个用得广其实有以下原因:
一是因为java“祖上积德”,前后几代java为程序员为java这个大社区做出了非常多的贡献。有些时候,就算是新项目,感觉用个新语言也合适,但一想到很多库也就java弄的还比较成熟,你最后可能就放弃了用新语言的念头了。
二是因为java从第一天起,就是把自己定义为一个通用的编程语言。不会有什么东西让你觉得特别爽,但也不会有什么让你觉得完全没法用。java就是个说话啰嗦的老好人。我会在很多领域尝试使用新的语言,但也会很乐于在一些地方继续使用java。
三是java的发展方向由jcp成员投票决定,如果你关注一些具体提案的讨论,都有点国会的意思了,一些成员会在一些议题上的意见发生反复,十分有趣。这个可以保证java就算发展的慢一点,但大的方向不会走歪,而且也能基本符合社区多数人的利益。
分享到 :
0 人收藏

20 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2021-11-18 15:51:50 发帖IP地址来自 中国
现在的后端开发比以前更宽广,以前的后端开发可能一个spring就打遍天下了,但现在我们需要看更多的领域。
    互联网web服务,尤其是微服务开发 ,这个领域我更看好java和go,尤其是go,配合容器化部署,在吞吐量没大到夸张的时候,是我目前的首选。其实我也动过念头用rust来取代scala,但觉得还是太小众了。swoole也可能会被有php团队的公司欢迎, 还有phper期待已久的php 8 jit。至于.net core, 肯定也会有老粉喜欢, .net粉一直相信.net跨越了平台,也开源了,就离战胜java不远了。我个人对php和.net的观点已经表达很多次了,就不再重复了。至于nodejs,ruby,python,也还是可以继续玩后端服务的,根据团队和实际需要酌情选用,我就不细说了。

    大数据存储以及计算引擎,比如说hadoop,spark,presto等等,这目前来看还得是Java和scala,我希望rust可以在这个领域赶上来, 比如说不少人想用rust重写一个spark(下面这个项目). 我觉得rust的内存管理和运行效率非常适合做大吞吐量的cpu密集数据计算。当年scala的case class,就把大家美的不要不要的,那我觉得现在rust的类型系统没准可以做的更好。
<a data-draft-node="block" data-draft-type="link-card" href="http://link.zhihu.com/?target=https%3A//github.com/rajasekarv/vega" data-image="http://pic4.zhimg.com/v2-bfa6911a135eedb1bff5e5bc22d8ea57_ipico.jpg" data-image-width="400" data-image-height="400" class=" wrap external" target="_blank" rel="nofollow noreferrer">rajasekarv/vega
    流处理 比如说flink和kafka,这也是java和scala比较受欢迎。企业应用,私有云服务等等,我觉得这里面java在安全、数据处理、报表方面的积累的东西比较多,很多成熟的产品线还是会继续选择java,但是c#和php由于更简单便宜,所以也会有一席之地。原回答里漏了金融方面的后端应用,这个战场主要是java和c/c++的天下,java胜在对大型项目的管理以及安全性上,c/c++胜在对低延时的控制力,有些搞高频交易的,恨不得把代码往linux内核里写。还有,国外有一些投行比较喜欢scala, 现在scala 3要出来,最着急的也是他们。
这时候,是不是综上所述,java就是后端最好的语言了呢?也不尽然,用的广不代表就是最好。这个用得广其实有以下原因:
一是因为java“祖上积德”,前后几代java为程序员为java这个大社区做出了非常多的贡献。有些时候,就算是新项目,感觉用个新语言也合适,但一想到很多库也就java弄的还比较成熟,你最后可能就放弃了用新语言的念头了。
二是因为java从第一天起,就是把自己定义为一个通用的编程语言。不会有什么东西让你觉得特别爽,但也不会有什么让你觉得完全没法用。java就是个说话啰嗦的老好人。我会在很多领域尝试使用新的语言,但也会很乐于在一些地方继续使用java。
三是java的发展方向由jcp成员投票决定,如果你关注一些具体提案的讨论,都有点国会的意思了,一些成员会在一些议题上的意见发生反复,十分有趣。这个可以保证java就算发展的慢一点,但大的方向不会走歪,而且也能基本符合社区多数人的利益。
3#
期权匿名回答  16级独孤 | 2021-11-18 15:52:15 发帖IP地址来自 北京
坐标广州,6年PHP开发经验,2年Golang开发经验。
刚刚从一家PHP公司离职,以为在目前这种大环境下很难找到工作,结果误打误撞之下在离职的第二天就拿到了两个Golang的offer,当然我也不确定是巧合还是事实。但是在Boss上也有不少Go的岗位了,其实也很能说明问题。
于是我打开Google趋势,搜索了一下:


可以看到一线城市的Go是压制性的,但因为PHP我做了很多年,知道广州还是有不少大大小小的公司还在用PHP,所以这份图片我也不敢确定,只是提供个参考。
当然并不想引发语言大战,phper学go是真的简单容易,之前花了一周的时间学习了Go,就写出了一个基于Gin+Gorm的小网站https://www.xiaojipu.vip/,里面还用到了goroutine协程,协程这一块跟swoole几乎是一样的,学会了Go的协程,就等于学会了swoole的协程。
Go的微服务生态相比PHP生态好太多了,看了一下go-micro的教程,支持各种微服务组件,是相当满足了。只不过PHP的面向对象这一块是真的太舒服了,写Go的结构体经常感到不习惯想抽自己一巴掌哈哈哈哈。
不过话还是说回来,在工作中能同时用两种语言编程感觉很幸福,后台用laravel-admin来做,接口用gin写,效率很高。
同时也希望看到这两门语言能大放光彩,完~
4#
期权匿名回答  16级独孤 | 2021-11-18 15:53:11 发帖IP地址来自 中国
Java 都不用看,一直是这样的。
Go 仍是 Python 和 PHP 的主力挖墙脚者。
PHP 仍是老少咸宜的大众选项,很多团队的选择。同时也是创业团队的重要选项,契合业务快速发展的优良选项。高效快速的开发,方便的部署和扩展,简单有效的容错能力。有人说站 PHP 是顽固和负隅顽抗的表现,市场上看起来顽固的人和公司还不少,这是为何?市场不是知乎。值得思考……
5#
期权匿名回答  16级独孤 | 2021-11-18 15:53:48 发帖IP地址来自 中国
现在后端就业非常明显的一个变化:单独只会一种后端语言是很难胜任工作的
以我经历的这些公司为例,后端还是分主要技术栈的,职场上通常分为两大派系:
由于我的个人经历(互联网中小型公司)大厂除外

    Java + : 以 java 为主的公司,通常使用 php 做后台,加上一些 python 爬虫或简单脚本等,这类公司,大部分开发都是 java 开发完成,java 比重非常高。PHP + : 以 php 开发的业务为主 (phpfpm),通常会在某些高性能模块使用部分 swoole,某些 rpc 使用 swoole,某些核心计算业务使用 golang,加上一些 python 爬虫或简单脚本等,通常 php 比重相比 Java 为主的公司更低一些,也就是 php 的公司更加喜欢引入更多的语言。
还有其他这些派系,在深圳我很少遇到:
    Golang +: 以 Golang 为主栈的互联网公司很多是开发云服务、支付领域的,如果是 Web 开发这一领域用 Golang 为主的企业,至少中小型企业这个范围基本上也是很少的。通常我遇到的都是想用 Golang 编写 rpc 来重构 php 项目的数据层,也就是 php 前端 + golang 后端这种模式,实际上 php 前端 + swoole 后端也可以胜任。Python +: 以 python 为主栈的互联网公司,我在深圳很少遇到,大部分都是作为辅助,这里面 Golang + Python 的组合比较常见,但基本都是大公司使用较为普遍,比如:头条
通常后端开发者会根据自己的擅长在 java, php 两个主栈选择其一,但入职接手工作后:
    Java +:不可避免在后端有很大几率会让你调 php 的代码。PHP +:几乎都会遇到一些 swoole,golang 代码需要你去修改。
所以其实现在单独只会一种后端语言是很难胜任后端工作的,未来会更加明显,但是又确实分了两个派系,其中 php 派系大部分使用了更多种语言。
从该问题的答案中你就能感觉到回答者属于哪个派系,也有少数人两者都精通、和一些不参与编码的技术管理者,很显然我是 php 50% + golang 50% 派系。
推荐阅读
[1] MixPHP V3 开发流程体验 Swoole, Workerman, FPM, CLI-Server 多种运行模式介绍
[2] MixPHP V3 发布前的感想, 有哪些变化和特点
[3] MixGo V1.1发布, Go 快速开发脚手架工具
6#
期权匿名回答  16级独孤 | 2021-11-18 15:54:06 发帖IP地址来自 北京
谢邀。因为题主没具体说是哪个方向的后端开发,游戏后台和web后台就不一样。我就以目前互联网中最流行的web服务器后台开发为例。
先说看法:短期看好Java ,长期看好 Golang

作为一线互联网公司后台开发人员,我的主力开发语言是C++和Go,C++用了 5 年,Go用了 1 年。
互联网公司中主力开发用 C++ 我想你也猜到了是鹅厂,一方面是历史原因内部C++生态非常丰富很多公共组件直接是C++开发的,另一方面可能是游戏开发类的岗位C++需求旺盛,据我自己以及和朋友的聊天,了解到虎牙、搜狗的一些业务也主力用C++语言开发,其他就比较少,所以web服务器后台开发短期我不太看好C++。
短期看好Java的原因

相反,与C++形成鲜明对比,互联网公司中用 Java 作为web后台服务开发语言的的公司可以说占据了互联网公司的半壁江山,主要得益于Dobbo和Spring全家桶这些Java系微服务框架,阿里开源的Dobbo框架生态丰富,没有太多坑,不管大小公司直接拿过来就可以搭建起自己的服务,这是目前比较成熟的方案,短期来看也不大可能切换其他语言。
从另一个角度的来看,各种培训班推出的Java课程培训明显相较其他语言多一些,有岗位需求才会有人才培训需求。
长期看好Golang原因

最近几年Go最大的曝光应该是上次某站的Gocomm源码泄露事件,据说其中有用Go写的通用基础库,虽然是一次事故,但也不知道是不是无心插柳,助推了Go的行业地位呢。
TIOBE编程语言排行中,Go相比去年三月份,名次上升了8名,这在前20名的编程排行中是进步最为突出的,前两个月的榜单中,Go就已经上升到第14位,3月份一举挤进前十。


Go最近几年的关注热度持续上升,就说我们这种用C++历史包袱这么重的公司都开始用上Go开发的RPC框架,从C++转过来用Go写代码真的非常爽,没有奇怪的编译错误和依赖,想用啥直接import 库就行,谁用谁知道。
看过一个测试,Go的性能比C++差一点,但是比Java好一些,在易用性和性能上Go做到了折中,我是长期看好Golang,期待有一天 gopher 一统web后台开发江湖~
我是 @程序员柠檬 关注我,学习更多编程知识!
更多干货回答和文章,关注我的专栏,面向工资编程
学编程,涨工资
7#
期权匿名回答  16级独孤 | 2021-11-18 15:54:52 发帖IP地址来自 北京
go 随便用了一下
感觉和java相比差距还略大
后端主要是生态问题,语言其实无所谓,或者说如果仅限于web服务器,瓶颈很少在语言上,基本都是其他服务器,消息队列,数据库,缓存的性能有问题。生态方面可能go接触的不多,反正做东西发现生态少得可怜,好多东西都是github上找个人维护的项目,根据历史经验,只要没有spring这类官方,那么会像node.js一样持续混乱几年吧,后端本来就是人少,没准儿会乱更久。。。
但是go应用范围感觉比java宽好多,自带runtime如果可以进一步缩减内存使用(比如几百K?),那么很多java不能运行的地方go都可以去。目前是几M 对java而言很优秀,但是嵌入式设备的(边缘计算?)等,这个runtime目前启动没仔细看大概2M不到,但是gc不控制可以飙到很高,sync.pool似乎也是直接碰撞没有限制,还需要进一步优化或者自己小心写,或者自己手动gc。
但是一个问题是java最近其实应该算是加速发展了吧,如果AOT编译+jvm做必要精简(比如编译就指定GC形式等)+官方出协程(和官方出lamba一样),那么岂不就是go了。。。 当然这里面工作量不了解,为了缩小二进制文件体积,要模块化后解耦很多老代码,虚拟机内的字面引用的方式修改等应该有很大工作量(java9看到AOT编译,现在是否成熟未知)。但是仅凭spring boot因为docker文件分层问题出的2.2版本来看,java生态至少还是原因对新技术有响应的,还在发展。
php node.js在开发速度方面还是比编译的语言方便太多,开发效率会快,部署也方便太多,rsync即可(node.js需要重启或者pm2这类工具自动检测文件变化重启?,好久没用node.js写过东西了)。go 和 java都需要编译区别不大
swoole稍微看过因为最近接手了一个swoole,既然高性能线程/进程模型现在都是固定的,网络异步IO+任务队列+不超过CPU核数的loop线程,IO耗时操作放入线程池或者再单独loop,那么直接用java解决不就好了吗?我看到这个swoole因为性能问题还自己写了缓存相关的通用代码,可见因为性能问题的确下了功夫,但是spring boot其实直接 用cache非常方便,一个配置文件几行注解,基本需求都满足了,看Php自己写的缓存工具很费劲(可能孤陋寡闻,php也许有很方便的缓存框架我没见过),从这个角度讲,如果纯后端,真的没必要php,后台另说,php的确方便。 个人感觉swoole的存在是因为开发团队本身技术栈是php,直接使用swoole成本相对更低,比起转java或者go甚至node.js
8#
期权匿名回答  16级独孤 | 2021-11-18 15:54:59 发帖IP地址来自 北京
先说结论,更看好 PHP(Swoole)。
2020年,PHP8JIT即将到来,JIT+Swoole Coroutine一定可以重新定义PHP语言。
以下观点,全是个人观点,本人主语言PHP,Java Golang 都是辅助语言,所以比较上可能会有偏差。
现阶段,Swoole协程已经把PHP的性能提升到了一个新的高度。就我司和某司相比,我司使用Hyperf构建的整套微服务,而某司是Spring Cloud构建的微服务。在性能表现上,Swoole协程可以用更少的硬件资源(10台2c4g机器, 2台Mysql)与Spring Cloud(40+ 4c8g机器,10+台Mysql)性能表现差不多,而开发人员,更是接近1:20,甚至我们会有完备的单元测试,而Java组基本没有一行测试。这种情况下,开发效率还是碾压Java组。
但实际业务,并不是只看开发效率和并发能力的。在Java生态面前,Go和PHP全部都是弟弟。尤其是微服务生态,Java绝对的龙头地位,Go也紧跟步伐,PHP完全被甩在了后面,虽说我不怎么使用 Node,但感觉 Node 在这方面的生态可能都要比PHP好些。不过最近随着 Swoole 的完善,生态也在逐步完善。还是希望广大的PHP开发者们,可以共同来做这件事。
不过好在 Docker 技术的成熟,PHP 也可以在微服务上有一席之地,而Java动辄几G内存的占用量,却有些背道而驰了。这方面最好的肯定是 Golang,直接打包成二进制文件,跑在 scratch 镜像中,绝对是最小的镜像文件,而且内存占用也十分友好。
hyperf/hyperf
9#
期权匿名回答  16级独孤 | 2021-11-18 15:55:52 发帖IP地址来自 中国
作为一个主打.net ,java为辅的开发人员,有点心酸,.net 都不配拥有姓名,这个问题应该加上限定条件:国内。 国外好点,百花齐放
好了,我要开始表演了,一家之言,带有主观意味,味儿比较冲,各位选择性观看。
毕竟能关注这个问题的,多多少少咱们都是同行,讨论完该改bug还是得改,毕竟都是 打工人。



工作岗位数量:
java :在座各位都是垃圾,我的人最多,还有阿里爸爸撑腰,我的子孙在全国各地开枝散叶。
go :我爸爸是google,我是大厂备胎
node.js:我也不差,凡是能用js实现的,最后都会用js,狗头.jpg
php:妈卖批,欺负我
.net :妈卖批,我有微软爸爸撑腰,国内有制造业托底,问题不大
社区轮子:
java:我又赢了,这个不做赘述,其他回答比我更详细
go:我爸爸是google,我们技术沉淀丰厚
node:我轮子最多,可以开家轮胎店了。凡是能用js实现的,最后都会用js,狗头.jpg
php:妈卖批
.net :妈卖批
语言特性:
java:都说我垃圾,抄袭你们,太啰嗦了,我不服,我人多,我社区庞大,战士众多,各种武器数不胜数
go:在座各位都是垃圾
node:我也不错,啥都能干,有了ts加持,再也别想小看我
php:别问,问就是一把梭哈
.net:在座各位都是垃圾,包括二楼
python这个小年轻躲在角落,默默看你们吵架,自言自语道:”我在人工只能方面无人能敌“
总结
其实后端整体来说,都还算是不错,只是网上带节奏的太多了。其实后端做到最后,多多少少都会点其他语言,毕竟后端干的活都是一样的,操作数据而已,一堆数据搞来搞去。
限制你的是学历,是经历,是想法。
很多程序员偏内向,思维方法太理工科了,殊不知各种软实力也很重要。大家没事儿的时候,多观察一下市场人员的沟通方式和风格,取众家之长嘛,
咱们这个行业最注重自身学习了,多学习,多深造总是错不了的,考研啊!多参加课程的录制,多发博客,扩大影响力。再不济,像我这样多看看知乎,也是不错的

10#
期权匿名回答  16级独孤 | 2021-11-18 15:56:12 发帖IP地址来自 北京
java还是扛把子,这个没得选,生态完整,培训班多。虽然臃肿,但是在积累和传承方面,还是大哥。玩后端的有几个有闲心去抠细节优化性能,java家的套餐多,只要舍得内存,别的都不是问题。java就是中单大法师,攻击范围广、有伤害有控制、输出爆表、适合大部分阵容、皮肤美如画、无非有点耗蓝、笨重是笨重了点。
golang后起之秀,在后端这个领域里,虽然也14、5岁了,但是还有很大的成长空间。玩好了能玩出花来;玩不好没关系,反正成本也不高。golang苦孩子出身,家长有点教条,基础装备太差:错误自己处理、session自己实现、数据类型都要自己凑。但是人家能吃苦,随便给点资源,哪怕是残废虚拟机、二手路由器,也能跑得欢。golang就是法刺,吃土也能能秒人、身法灵活、不依赖装备、操作要求高,皮肤?要那玩意干啥?本身追求的就是灵动,穿裤子都嫌影响敏捷度。
php是世界上最好的语言。可惜不管换谁当教练,总想踩这哥们两脚,不踩不足以显本事。
0202年,个人继续看好jvm系列,包括但不限于java。没法不看好,用的人太多,胜在好沟通。继续拎着golang出去搬砖。家里穷,整备环境是台9手的小米5,跑mysql、redis、caddy全家桶,扔个golang的服务能把功测跑通,压测及格就好。生产环境一律打折ECS,入门级1c512m标配,给上2c1g就算豪华了,实在是不配爱jvm。
产品经理常年帕金森,5分钟变8次需求,tomcat重启都跟不上ta老人家变卦的速度,还是golang省事,endless挂着,随便ta怎么改,省下钱买几升汽油送ta温暖可好?
11#
期权匿名回答  16级独孤 | 2021-11-18 15:56:26 发帖IP地址来自 北京
WEB 领域从小米加步枪的时代(2000~2010)到坦克大炮飞机航母时代(2010~2020)得到的发展结果是非常好的,从单机到集群再到分布式,从自己买 FTP 空间、搭服务器、租用服务器 到 OpenStack 云再到 Docker 的 k8s 等,让后端更多语言能够脱颖而出。
语言从最早流行的 asp、php、jsp 占有几乎所有市场份额到现在什么语言都能写服务端了……
高性能以前一直是 C++ 为代表,灵活性和性能都是 Java 比不了的,当然有一些语言最开始也是冲着 C++ 这块蛋糕来的 ,比如 Rust、DLang、Golang,但后来只有 Rust 坚持这个领域了。
Golang 转站服务端领域了 ,但经过这 10 年的发展,golang 已经定型在运维领域,很多公司强行的将 golang 用于服务端领域,有点什么感觉呢……恩,有点用 C 干 C++ 活的感觉,语法简单是 golang 的优势,标准库能有的功能很多也是优势(这点和 Python 很像),但这不正是运维领域需要的语言?而服务端的抽象能力、表达能力 、易于维护的 UML 设计方案等是缺失的,所以在大项目中 golang 无法和 java、php、DLang 等语言去比。甚至一个抽象好点的企业级 ORM 都没有,类似于 Hibernate 和 entity  framework 这样的。
说到 Java 无非就是 springboot 相关,如果是玩 java 其他框架就不推荐使用了,除非你写网络中间件还 可以玩玩 netty。说到 java 大家都知道拥有很强的  spring 全家桶……但是性能这东西并不是 Java 在意的吧。。而且写个灵活的小项目来说上这么一大堆东西也是没啥兴趣了,所以 Java 就是 Java,大多数用 Java 的人离开  spring 也活不了(可能是年纪大了),不用 spring 的我觉得如果不是非常必要用 spring 的项目就不要入坑 spring  了。
Rust 更专注的去替代 C++ 的同时也就导致了 Rust 没办法去适应 web 服务端领域,毕竟这个领域需要很好 的开发效率,而 Rust 的安全也注定了一些死板,如果是写个数据库、弄个底层库的确可以和 C++ 有的一拼。如果是服务端中间件可以尝试,但是服务端应用领域还是别用了。
对  PHP  来说 ,自从分布式、容器化来临之后这个语言就越来越多的人不去选择,甚至很多服务端使用 node.js 去替代了 php 部分,还好韩天峰推出的 swoole 排上了用场,拯救了 php 的一些份额,我们在 2005 年自研的  web 服务端框架就是基于 swoole 实现,而且 发展至今 swoole 已经非常完整和稳定。而且今天的 PHP 7.x 对标 Golang 来说还是有很多优势,当然  PHP 适合的领域不是运维,而是 真正的  web 服务端,优雅和易于理解的 语法是 golang 缺失的,合理的框架抽象是  golang 缺失的,像 symforny 和 laravel 这样漂亮的框架 golang 是不可能有的,所以开发效率和易于维护方面 php 优势明显。大家在服务端领域也就没必要把 PHP 这么好的语言切换到  golang 。毕竟 php 在企业级 ORM 还有 doctrine2 之类的。
话说 AspCore 还是不错的一个语言,也有着非常完善的生态体系,并且在跨平台来说也非常好,http://asp.net mvc 配合 entity framework  也很强,不仅仅是 Windows 体系的东东了,而且 IDE 方面C# 有 Visual Studio 这么强大的宇宙第一 IDE 你怕啥?玩儿就是了。
最后说一下 DLang 这个语言,D 语言虽然比较早的推出(大概是 1999 年)的概念,在 2004 年被 Solaris 操作系统的性能分析工具所使用,推出了工具叫 DTrace,现在 DTrace 被苹果公司所用,用于 macOS、iOS 等系统性能跟踪优化。而 D语言的推出一直是对标 C++ 的,然而聪明的 golang 早就转移了方向对标了 Python 和 web 应用领域。所以以前的 D语言一直没有吃到 C++ 的蛋糕。。现在 D 语言终于有了自己的服务端领域生态,包含完善的服务端所需的框架体系,springboot 和 laravel 这样的框架也有(hunt framework),类似 hibernate 这样的企业级 ORM 也有(hunt entity),也有 gRPC 之类的服务间通信框架,而且语言层面来说性能接近 C++,语法类似 PHP 和 java,抽象能力和表达力很强。比 PHP 来说 D 是一个系统级语言,性能有保障(类似 C++ 和 Golang),比 Java 来说语法限制没那么多部署也 不需要 VM 环境(这个优势也像 Golang),但相比 Golang 来说 DLang 可以拥有 Java 这样工业设计优良的框架,也能像  PHP 这样高效的开发服务端领域的项目。玩儿过 C++、PHP 和 Java 的开发者可以直接上手用 DLang 绝对不亏。
12#
期权匿名回答  16级独孤 | 2021-11-18 15:56:37 发帖IP地址来自 北京
个人主要开发语言是Java,辅助语言PHP和Python。
Java有整个阿里生态体系撑场,至少在未来四五年内,国内Java开发占比还是会很高的。
Go是腾讯最近一两年在大力推广的语言,也是目前许多初创企业会考虑选择的语言,发展潜力还是不错的,有取代PHP和Python在后端开发领域地位的趋势。
PHP最近几年,个人接触到的圈子里,在用PHP的已经越来越少了,也有不少PHP开发转了Go。个人感觉这门语言已逐渐转冷。 不过因为PHP语言上手容易,服务部署也省事(共享目录),基于PHP的CMS系统也是枝繁叶茂,在过去十几年的积累下,目前世界上在运行的,基于PHP开发的网站,占比依然非常非常高。短时间内,PHP应该还是会很坚挺。
13#
期权匿名回答  16级独孤 | 2021-11-18 15:56:46 发帖IP地址来自 福建
四個都在用,四個都看好啊。
14#
期权匿名回答  16级独孤 | 2021-11-18 15:57:32 发帖IP地址来自 中国
原文:Server-side I/O Performance: Node vs. PHP vs. Java vs. Go
作者:BRAD PEABODY
翻译:雁惊寒
摘要:本文首先简单介绍了I/O相关的基础概念,然后横向比较了Node、PHP、Java、Go的I/O性能,并给出了选型建议。以下是译文。
了解应用程序的输入/输出(I/O)模型能够更好的理解它在处理负载时理想情况与实际情况下的差异。也许你的应用程序很小,也无需支撑太高的负载,所以这方面需要考虑的东西还比较少。但是,随着应用程序流量负载的增加,使用错误的I/O模型可能会导致非常严重的后果。




在本文中,我们将把Node、Java、Go和PHP与Apache配套进行比较,讨论不同语言如何对I/O进行建模、每个模型的优缺点,以及一些基本的性能评测。如果你比较关心自己下一个Web应用程序的I/O性能,本文将为你提供帮助。
I/O基础:快速回顾一下

要了解与I/O相关的因素,我们必须首先在操作系统层面上了解这些概念。虽然不太可能一上来就直接接触到太多的概念,但在应用的运行过程中,不管是直接还是间接,总会遇到它们。细节很重要。

系统调用

首先,我们来认识下系统调用,具体描述如下:
    应用程序请求操作系统内核为其执行I/O操作。“系统调用”是指程序请求内核执行某些操作。其实现细节因操作系统而异,但基本概念是相同的。在执行“系统调用”时,将会有一些控制程序的特定指令转移到内核中去。一般来说,系统调用是阻塞的,这意味着程序会一直等待直到内核返回结果。内核在物理设备(磁盘、网卡等)上执行底层I/O操作并回复系统调用。在现实世界中,内核可能需要做很多事情来满足你的请求,包括等待设备准备就绪、更新其内部状态等等,但作为一名应用程序开发人员,你无需关心这些,这是内核的事情。




阻塞调用与非阻塞调用

我在上面说过,系统调用一般来说是阻塞的。但是,有些调用却属于“非阻塞”的,这意味着内核会将请求放入队列或缓冲区中,然后立即返回而不等待实际I/O的发生。所以,它只会“阻塞”很短的时间,但排队需要一定的时间。
为了说明这一点,下面给出几个例子(Linux系统调用):
    read()是一个阻塞调用。我们需要传递一个文件句柄和用于保存数据的缓冲区给它,当数据保存到缓冲区之后返回。它的优点是优雅而又简单。epoll_create()、epoll_ctl()和epoll_wait()可用于创建一组句柄进行监听,添加/删除这个组中的句柄、阻塞程序直到句柄有任何的活动。这些系统调用能让你只用单个线程就能高效地控制大量的I/O操作。这些功能虽然非常有用,但使用起来相当复杂。
了解这里的时间差的数量级非常重要。如果一个没有优化过的CPU内核以3GHz的频率运行,那么它可以每秒执行30亿个周期(即每纳秒3个周期)。一个非阻塞的系统调用可能需要大约10多个周期,或者说几个纳秒。对从网络接收信息的调用进行阻塞可能需要更长的时间,比如说200毫秒(1/5秒)。比方说,非阻塞调用花了20纳秒,阻塞调用花了200,000,000纳秒。这样,进程为了阻塞调用可能就要等待1000万个周期。




内核提供了阻塞I/O(“从网络读取数据”)和非阻塞I/O(“告诉我网络连接上什么时候有新数据”)这两种方法,并且两种机制阻塞调用进程的时间长短完全不同。
调度

第三个非常关键的事情是当有很多线程或进程开始出现阻塞时会发生什么问题。
对我们而言,线程和进程之间并没有太大的区别。而在现实中,与性能相关的最显著的区别是,由于线程共享相同的内存,并且每个进程都有自己的内存空间,所以单个进程往往会占用更多的内存。但是,在我们谈论调度的时候,实际上讲的是完成一系列的事情,并且每个事情都需要在可用的CPU内核上获得一定的执行时间。如果你有8个内核来运行300个线程,那么你必须把时间分片,这样,每个线程才能获得属于它的时间片,每一个内核运行很短的时间,然后切换到下一个线程。这是通过“上下文切换”完成的,可以让CPU从一个线程/进程切换到下一个线程/进程。
这种上下文切换有一定的成本,即需要一定的时间。快的时候可能会小于100纳秒,但如果实现细节、处理器速度/架构、CPU缓存等软硬件的不同,花个1000纳秒或更长的时间也很正常。
线程(或进程)数量越多,则上下文切换的次数也越多。如果存在成千上万的线程,每个线程都要耗费几百纳秒的切换时间的时候,系统就会变得非常慢。
然而,非阻塞调用实质上告诉内核“只有在这些连接上有新的数据或事件到来时才调用我”。这些非阻塞调用可有效地处理大I/O负载并减少上下文切换。
值得注意的是,虽然本文举得例子很小,但数据库访问、外部缓存系统(memcache之类的)以及任何需要I/O的东西最终都会执行某种类型的I/O调用,这跟示例的原理是一样的。
影响项目中编程语言选择的因素有很多,即使你只考虑性能方面,也存在很多的因素。但是,如果你担心自己的程序主要受I/O的限制,并且性能是决定项目成功或者失败的重要因素,那么,下文提到的几点建议就是你需要重点考虑的。
“保持简单”:PHP

早在上世纪90年代,有很多人穿着Converse鞋子使用Perl编写CGI脚本。然后,PHP来了,很多人都喜欢它,它使得动态网页的制作更加容易。
PHP使用的模型非常简单。虽然不可能完全相同,但一般的PHP服务器原理是这样的:
用户浏览器发出一个HTTP请求,请求进入到Apache web服务器中。 Apache为每个请求创建一个单独的进程,并通过一些优化手段对这些进程进行重用,从而最大限度地减少原本需要执行的操作(创建进程相对而言是比较慢的)。
Apache调用PHP并告诉它运行磁盘上的某个.php文件。
PHP代码开始执行,并阻塞I/O调用。你在PHP中调用的file_get_contents(),在底层实际上是调用了read()系统调用并等待返回的结果。
<?php// blocking file I/O$file_data = file_get_contents(‘/path/to/file.dat’);

// blocking network I/O$curl = curl_init('http://example.com/example-microservice');
$result = curl_exec($curl);

// some more blocking network I/O$result = $db->query('SELECT id, data FROM examples ORDER BY id DESC limit 100');

?>与系统的集成示意图是这样的:




很简单:每个请求一个进程。 I/O调用是阻塞的。那么优点呢?简单而又有效。缺点呢?如果有20000个客户端并发,服务器将会瘫痪。这种方法扩展起来比较难,因为内核提供的用于处理大量I/O(epoll等)的工具并没有充分利用起来。更糟糕的是,为每个请求运行一个单独的进程往往会占用大量的系统资源,尤其是内存,这通常是第一个耗尽的。
*注意:在这一点上,Ruby的情况与PHP非常相似。
多线程:Java

所以,Java就出现了。而且Java在语言中内置了多线程,特别是在创建线程时非常得棒。
大多数的Java Web服务器都会为每个请求启动一个新的执行线程,然后在这个线程中调用开发人员编写的函数。
在Java Servlet中执行I/O往往是这样的:
publicvoiddoGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException
{

    // blocking file I/O
    InputStream fileIs = new FileInputStream("/path/to/file");

    // blocking network I/O
    URLConnection urlConnection = (new URL("http://example.com/example-microservice")).openConnection();
    InputStream netIs = urlConnection.getInputStream();

    // some more blocking network I/O
out.println("...");
}由于上面的doGet方法对应于一个请求,并且在自己的线程中运行,而不是在需要有独立内存的单独进程中运行,所以我们将创建一个单独的线程。每个请求都会得到一个新的线程,并在该线程内部阻塞各种I/O操作,直到请求处理完成。应用会创建一个线程池以最小化创建和销毁线程的成本,但是,成千上万的连接意味着有成千上万的线程,这对于调度器来说并不件好事情。
值得注意的是,1.4版本的Java(1.7版本中又重新做了升级)增加了非阻塞I/O调用的能力。虽然大多数的应用程序都没有使用这个特性,但它至少是可用的。一些Java Web服务器正在尝试使用这个特性,但绝大部分已经部署的Java应用程序仍然按照上面所述的原理进行工作。




Java提供了很多在I/O方面开箱即用的功能,但如果遇到创建大量阻塞线程执行大量I/O操作的情况时,Java也没有太好的解决方案。
这里推荐一个学习java项目实战的课程,0元白嫖,很值得去学习:
把非阻塞I/O作为头等大事:Node

在I/O方面表现比较好的、比较受用户欢迎的是Node.js。任何一个对Node有简单了解的人都知道,它是“非阻塞”的,并且能够高效地处理I/O。这在一般意义上是正确的。但是细节和实现的方式至关重要。
在需要做一些涉及I/O的操作的时候,你需要发出请求,并给出一个回调函数,Node会在处理完请求之后调用这个函数。
在请求中执行I/O操作的典型代码如下所示:
http.createServer(function(request, response) {
    fs.readFile('/path/to/file', 'utf8', function(err, data) {
        response.end(data);
    });
});如上所示,这里有两个回调函数。当请求开始时,第一个函数会被调用,而第二个函数是在文件数据可用时被调用。
这样,Node就能更有效地处理这些回调函数的I/O。有一个更能说明问题的例子:在Node中调用数据库操作。首先,你的程序开始调用数据库操作,并给Node一个回调函数,Node会使用非阻塞调用来单独执行I/O操作,然后在请求的数据可用时调用你的回调函数。这种对I/O调用进行排队并让Node处理I/O调用然后得到一个回调的机制称为“事件循环”。这个机制非常不错。




然而,这个模型有一个问题。在底层,这个问题出现的原因跟V8 JavaScript引擎(Node使用的是Chrome的JS引擎)的实现有关,即:你写的JS代码都运行在一个线程中。请思考一下。这意味着,尽管使用高效的非阻塞技术来执行I/O,但是JS代码在单个线程操作中运行基于CPU的操作,每个代码块都会阻塞下一个代码块的运行。有一个常见的例子:在数据库记录上循环,以某种方式处理记录,然后将它们输出到客户端。下面这段代码展示了这个例子的原理:
var handler = function(request, response) {

    connection.query('SELECT ...', function(err, rows) {if (err) { throw err };

        for (var i = 0; i < rows.length; i++) {
            // do processing on each row
        }

        response.end(...); // write out the results

    })

};虽然Node处理I/O的效率很高,但是上面例子中的for循环在一个主线程中使用了CPU周期。这意味着如果你有10000个连接,那么这个循环就可能会占用整个应用程序的时间。每个请求都必须要在主线程中占用一小段时间。
这整个概念的前提是I/O操作是最慢的部分,因此,即使串行处理是不得已的,但对它们进行有效处理也是非常重要的。这在某些情况下是成立的,但并非一成不变。
另一点观点是,写一堆嵌套的回调很麻烦,有些人认为这样的代码很丑陋。在Node代码中嵌入四个、五个甚至更多层的回调并不罕见。
又到了权衡利弊的时候了。如果你的主要性能问题是I/O的话,那么这个Node模型能帮到你。但是,它的缺点在于,如果你在一个处理HTTP请求的函数中放入了CPU处理密集型代码的话,一不小心就会让每个连接都出现拥堵。
原生无阻塞:Go

在介绍Go之前,我透露一下,我是一个Go的粉丝。我已经在许多项目中使用了Go。
让我们看看它是如何处理I/O的吧。 Go语言的一个关键特性是它包含了自己的调度器。它并不会为每个执行线程对应一个操作系统线程,而是使用了“goroutines”这个概念。Go运行时会为一个goroutine分配一个操作系统线程,并控制它执行或暂停。Go HTTP服务器的每个请求都在一个单独的Goroutine中进行处理。
调度程序的工作原理如下所示:



实际上,除了回调机制被内置到I/O调用的实现中并自动与调度器交互之外,Go运行时正在做的事情与Node不同。它也不会受到必须让所有的处理代码在同一个线程中运行的限制,Go会根据其调度程序中的逻辑自动将你的Goroutine映射到它认为合适的操作系统线程中。因此,它的代码是这样的:
func ServeHTTP(w http.ResponseWriter, r *http.Request) {

    // the underlying network call here is non-blocking
    rows, err := db.Query("SELECT ...")

    for _, row := range rows {
        // do something with the rows,// each request in its own goroutine
    }

    w.Write(...) // write the response, also non-blocking

}如上所示,这样的基本代码结构更为简单,而且还实现了非阻塞I/O。
在大多数情况下,这真正做到了“两全其美”。非阻塞I/O可用于所有重要的事情,但是代码却看起来像是阻塞的,因此这样往往更容易理解和维护。 剩下的就是Go调度程序和OS调度程序之间的交互处理了。这并不是魔法,如果你正在建立一个大型系统,那么还是值得花时间去了解它的工作原理的。同时,“开箱即用”的特点使它能够更好地工作和扩展。
Go可能也有不少缺点,但总的来说,它处理I/O的方式并没有明显的缺点。
性能评测

对于这些不同模型的上下文切换,很难进行准确的计时。当然,我也可以说这对你并没有多大的用处。这里,我将对这些服务器环境下的HTTP服务进行基本的性能评测比较。请记住,端到端的HTTP请求/响应性能涉及到的因素有很多。
我针对每一个环境都写了一段代码来读取64k文件中的随机字节,然后对其运行N次SHA-256散列(在URL的查询字符串中指定N,例如.../test.php?n=100)并以十六进制打印结果。我之所以选择这个,是因为它可以很容易运行一些持续的I/O操作,并且可以通过受控的方式来增加CPU使用率。
首先,我们来看一些低并发性的例子。使用300个并发请求运行2000次迭代,每个请求哈希一次(N=1),结果如下:




Times是完成所有并发请求的平均毫秒数。越低越好。
从单单这一张图中很难得到结论,但我个人认为,在这种存在大量连接和计算的情况下,我们看到的结果更多的是与语言本身的执行有关。请注意,“脚本语言”的执行速度最慢。
但是如果我们将N增加到1000,但仍然是300个并发请求,即在相同的负载的情况下将散列的迭代次数增加了1000倍(CPU负载明显更高),会发生什么情况呢:




Times是完成所有并发请求的平均毫秒数。越低越好。
突然之间,由于每个请求中的CPU密集型操作相互阻塞,Node的性能显著下降。有趣的是,在这个测试中,PHP的性能变得更好了(相对于其他),甚至优于Java。 (值得注意的是,在PHP中,SHA-256的实现是用C语言编写的,但执行路径在这个循环中花费了更多的时间,因为我们这次做了1000次哈希迭代)。
现在,让我们试试5000个并发连接(N=1) 。不幸的是,对于大多数的环境来说,失败率并不明显。我们来看看这个图表中每秒处理的请求数,越高越好




每秒处理的请求数,越高越好。
这个图看起来跟上面的不太一样。我猜测,在较高的连接数量下,PHP + Apache中产生新进程和内存的申请似乎成为了影响PHP性能的主要因素。 很显然,Go是这次的赢家,其次是Java,Node,最后是PHP。
虽然涉及到整体吞吐量的因素很多,而且应用程序和应用程序之间也存在着很大的差异,但是,越是了解底层的原理和所涉及的权衡问题,应用程序的表现就会越好。
总结

综上所述,随着语言的发展,处理大量I/O大型应用程序的解决方案也随之发展。
公平地说,PHP和Java在<a href="http://link.zhihu.com/?target=https%3A//netty.io/" class=" wrap external" target="_blank" rel="nofollow noreferrer">web应用方面都有可用的非阻塞I/O的实现。但是这些实现并不像上面描述的方法那么使用广泛,并且还需要考虑维护上的开销。更不用说应用程序的代码必须以适合这种环境的方式来构建。
我们来比较一下几个影响性能和易用性的重要因素:
语言线程与进程非阻塞I/O易于使用
因为线程会共享相同的内存空间,而进程不会,所以线程通常要比进程的内存效率高得多。在上面的列表中,从上往下看,与I/O相关的因素一个比一个好。所以,如果我不得不在上面的比较中选择一个赢家,那肯定选Go。
即便如此,在实践中,选择构建应用程序的环境与你团队对环境的熟悉程度以及团队可以实现的整体生产力密切相关。所以,对于团队来说,使用Node或Go来开发Web应用程序和服务可能并不是最好的选择。
希望以上这些内容能够帮助你更清楚地了解底层发生的事情,并为你提供一些关于如何处理应用程序伸缩性的建议
参考:https://blog.csdn.net/dev_csdn/article/details/78864095
15#
期权匿名回答  16级独孤 | 2021-11-18 15:57:38 发帖IP地址来自 北京
真实事件。
一家公司技术栈用php,在开发过程中遇到了性能问题,技术主管开始带领大家一起转go,然而新来的技术总监要求放弃go,全部转java。
其实如果技术主管转go成功了,就没后来会java技术总监什么事了。或许会自己成为新的总监。
马云说"未来每年将会向社会输出 1000 名在阿里工作 10 年以上的人才"

这反映一个现象:就业市场里,java大神实在太多了。你3年甚至5年的javaer也是个小鱼虾,何况php刚转的java?
即使swoole和go比java好不了太多,为了自己的竞争力。
如果你是php公司,目前遇到了性能问题,升级swoole或者转go,竞争更低,这样你才有升技术总监的机会。
如果你是java小公司,为了以后升技术总监,减少跟java大神竞争,也应该尽快转go。
所以你看到就业市场中,越来越多java+go或者php+go的需求,因为这是技术壁垒。
16#
期权匿名回答  16级独孤 | 2021-11-18 15:58:14 发帖IP地址来自 北京海淀
如果题主你是一个刚刚步入社会想要找工作的人,我建议你学golang。
我的理由也很简单,golang是一门刚刚兴起的语言,2009年才被google正式推出,相比较老大哥java,它可谓是算是新兴之秀。
目前在国内,有不少大公司的架构都是使用golang作为主力开发,这里不乏像腾讯、字节跳动、罗辑思维等知名公司。所以它的工资待遇也不低。
和java等老牌语言相比,golang年轻是我们面试的一大优势。
现在几乎是个计算机专业的都会学习java,这就导致会Java的太多了,那样就业的竞争压力同样也就会很大。
在这里,我推荐几个很有用的开源课程供你学习参考。
用golang搭建web应用还有我录制的一些教学视频:
祝你早日找到满意的工作。
<a data-draft-node="block" data-draft-type="mcn-link-card" data-mcn-id="1305103920495652864">
17#
期权匿名回答  16级独孤 | 2021-11-18 15:58:33 发帖IP地址来自 北京
后端开发的话,从目前这个情形来看 java。


第一、java发展前景

单从Java语言的应用方面来看,Java一直是处于前三的位置,Java做为世界性的编程语言,在像政府、事业单位和大型企业,如医疗、学校、OA、邮箱、投票、金融、考试、物流、矿山等信息方面的系统。这些应用在我们生活中其实随处可见,比如医院的挂号系统、公司的打卡系统、物流系统等,而且随着Java的不断普及未来Java的应用会更加的广泛和普遍化,需要的Java开发人才也会越来越多。


随着其他语言对Java的需求逐渐增加,Java开发领域取得了长足发展。因此,Java开发人员的工作机会增加了。Java开发人员的职位空缺已在美国,英国,印度和全球各地开放。这样做的主要原因是Java语言生态系统本身具有很大的自我维持能力,具有适应性,效率,兼容性,可扩展性和易用性。


从一开始,Java就已经在计算机编程语言中如雨后春笋般飞速发展。但是,它一次又一次地回到全球IT市场,每次都具有更好和改进的功能,从而证明了其强大的实力。Java的可行性和使其成为世界上最受欢迎的编程语言的其他功能,为全球Java开发人员提供了充足的工作机会。


第二、java的薪资水平

“不赚钱的技术都是耍流氓”,各位可以从各大招聘网站发布的相关数据报告来看,Java工程师的需求量占IT岗位全部需求量的60%~70%,1-3年开发工作经验者的年薪在10-15W,3~5年开发经验的Java工程师年薪15~30W,具体薪资根据各城市发展水平有较大出入。


第三、java开发者的发展之路

java也是有上升空间的,不是说就一直是普通java从业人员。
大部分Java从业人员起初都是从初级工程师开始入门,随着工作年限、工作经验的不断增加,从初级工程师进阶到中级工程师。



随着自身开发能力的不断提高,开发项目的不断积累从一个从中级工程师到高级甚至是开发组长的一个跳跃,在此基础上再往更高的项目经理、项目总监职位晋升的话就不只是需要娴熟的开发能力,沟通协调能力也是不可或缺的。



最后如果想要成为Java架构师或者是企业CTO,需要不断加强自身技能的基础上具备良好的驾驭管理开发团队能力,有良好的人格修养,提升个人能力才能将企业向更好的方向带领。


第四、java主要学什么?

java学习的知识挺多的,具体可以根据学习规划图来看一下。




如果您还有其他问题,可以到 @尚硅谷教育 主页查看答案,也可以直接问我的。
by the way 一旦进入IT行业,“持续学习”是你一定要做到的。做不到的话,是不建议你进入IT行业的。

18#
期权匿名回答  16级独孤 | 2021-11-18 15:59:17 发帖IP地址来自 北京
只算Web相关的话,新应用Java和Go一半对一半吧,node和Python边缘化但仍有一定份额,还有一些顽固的PHP程序员在负隅顽抗。.NET/Rust等等多多少少也还能有点。
19#
期权匿名回答  16级独孤 | 2021-11-18 15:59:49 发帖IP地址来自 北京
小孩子才做选择题,我都要
20#
期权匿名回答  16级独孤 | 2021-11-18 16:00:19 发帖IP地址来自 北京
我看好 C、C+Lua、Swift、C#,好吧,看来我就是跟你对着干的。
21#
期权匿名回答  16级独孤 | 2021-11-18 16:00:44 发帖IP地址来自 中国
作为全栈工程师的我来讲,我其实都挺看好的。毕竟一个公司那么多项目组,各个语种的项目进行搭配,才能够赢得先机。 当年我单纯地教条的以为c++是万能的。结果错过了java的崛起,js的崛起,go的崛起,rust的崛起。。。先如今,我并不认为搞全栈为时已晚。反而由于有20年的c++功力加持,反而使得我学习这些晚辈来,如鱼得水。为什么,学的多了,就明白8种编程语言就是一种完全版的c++。c++是普通话,其他的都是方言而已。内核都是一样的,控制数据流转。存储,注销。现在要求的是借力打力,人群走到哪里了,哪里就有力量,我们就得借助这批人的力量。
作为一个科班出身的新手,去做游戏。必须是node.js+pomelo(简单易用)了啊。因为 node里集成了v8 ,v8是c++写的。用的js和lua,。前端则使用 cocos+lua,当然也可以用ue4了。。 一条龙。都是c和c++语系的,从头到尾都有源码,无论哪里出错了。哪里层级出了问题都可以扩展。
c++过渡 js,简直是3小时就能翻完一本js和ts书。

至于go语言和php,那肯定是搞视频平台了。以此为代表的就是 b站啊,想学技术的,一定要去那里做打工仔,学完了就走,别停留太久。go的厉害之处,不是让你重复解决平行化的业务,而是在一定广度下,进行树形纵深。 比如 eth以太坊。呵呵,c++转go,还行吧。
java。。呵呵,算了,企业就喜欢这玩意。不想多说。后台公司实力渐衰。

rust,就是为了区块链而生,all in one 型语言,这个我最喜欢,c++过渡rust简直易如反掌。。虽然有点别扭。。就等新书和项目了。
  对于程序员来讲 去中心化的区块链,可以直接变现的,经济基础决定上层建筑。所以说,想要改变命运,必须靠区块链帮我们突破层层封锁,lian通世界。
对于科班出身的人,学习路线可以是 python--》c--》c++》go或则rust。
新手如何系统性地学习编程?你都用 Python 来做什么?
#程序新人怎么才能提高编程语法能力?作为一名程序员,您有想象过当自己 70 岁的时候还乐此不疲,津津有味地编写代码吗?
C++ 如何入门?
如何正确通过 C++ Primer 学习 C++?认真学完 C++ Primer 后,C++ 语言到了什么水平?是否应该放弃C++转投Java或Python?c++程序员真的是工作的时间(年)越长越好吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP