关于Java、PHP、NodeJS、Python相对理智的简析
又一个有意义的项目告一段落,看到自己写的项目能够帮助企业解决很多棘手的问题,提高他们的效率,很是欣慰~
闲来无事逛知乎,发现仍有很多人在黑各种编程语言、不计后果的误人子弟,还是站在十年前的角度去分析各种语言的优略势,或者人云亦云。 忽悠忽悠自己也就行了,还要忽悠新人,真不知道安的什么心!
06年开始做网站当时用的是ASP,后来用JSP(那个时候还是JDK1.5)和.NET (C#),2010年的时候因项目(私活外包)要求用PHP,就PHP做了一些小项目,后来由于是在闲得慌就写了一版Go语言教程(也是刚出来的时候,GO还没有正式版),再后来的项目要求用NodeJS,连续搞了1年的NodeJS(非WEB服务端方向),去年没项目的时候用了一周时间把Python撸了撸。 以上是我学语言的过程和经验。
给准备入坑码农和想扩展自己语言堆栈朋友一些善意的分析,不喜勿喷
Java:
非常优秀的语言,算是我C和VB及ASP之后的主力开发语言,值得学习(如果你没有什么编程基础,建议第一门语言学习C,如果你是其他语言转过来的(尤其是Python和PHP开发者转Java),建议调整心态,认认真的、踏踏实实的学习Java的语法和特性,体会语言本身机制的强大之处,对你未来会很有帮助)。 就业前景非常广,需求量很大 但Java开发者真正能把Java精髓领悟到的没几个,都是利用一大堆框架来重复做CURD (数据的增删查改操作)而已,没任何技术含量,一点点技术含量都没有,不接受任何反驳!!!!! 这一点和其他语言并无差别,别给我提设计模式,微服务xxx架构等,搞的天下所有语言唯有Java有设计模式能实现微服务对了还有OO? 整个大环境都是用了一门很优秀的语言,集合很优秀的框架做在做很low很low的开发~
另一个很有意思的现象,很多PHPER在黑Java说Java怎么繁琐,Java怎么麻烦,Java怎么写一大堆没必要的东西,真的是这样么? 如果真是这样Google疯了选择JAVA来作为Android的主要开发语言? 你们别忘了,不是Java麻烦,而是人家Java设计模式在开发的时候考虑的事情比PHP要多、要周全而已,考虑的扩展性要强,所以为了这些扩展不得不写一些在没有学过Java人看来很无聊浪费时间的东西。 这么说把 Java 用模式和语法来约束开发人员的思想和规范,高效编程不是Java第一考虑的,或许语言在开发者层面更多的是提供扩展、维护、让思维及设计模式更清晰等因素会多一些。 PHP 规范和模式靠自律,语言本身提倡的是自由简单高效编程,所以PHPER转Java你会难受,而JavaER转PHP你会想些一套自己的PHP框架(我就有一套自己的框架,现在还在用,不断迭代非开源)。
不过在我看来PHPER说的也没错,因为站在整个大环境都在机械式的傻兮兮的一遍又一遍的做CURD的角度,JAVA确实劳民伤财了,懂得自然懂……
但为了就业、为了编程思想的学习与提升你Java建议学习,学了C、Java你再学别的语言,你会觉得很简单,每种语言也就一周时间就可以了,剩下的就是看项目源码,拿着手册做项目……
PHP: 虽然我一直在做Java但PHP我始终觉得是个潜力股(虽说现在被黑的很惨),所以创业后果断首选PHP,某些言论整天瞎说的PHP性能不行、什么只适合做网页,我只想说您是原始社会的人么?现在的PHP7、PHP8已经不是当年的PHP了,有兴趣可以了解一下,有点类似于和以前百度团队的一起玩的HHVM(是Facebook出的,类似于Java的JVM或者说C#的CLR),所以说PHP效率不如Java的一些用都没用过、场景中测都没测过的人云亦云君真的可以少说点,自己试试再说,真的是误导死人不偿命的主。 如今的项目都是B/S的,而B/S的项目稍微懂点的人都知道瓶颈不在语言本身,而在数据层,这个懂得自然懂不懂得我就只能呵呵了~
不过PHP就业前景没有Java好,这个原因我分析: 1. 人云亦云Java好、什么PHP只适合做网站、PHP性能差等等谬论,导致很多不懂技术的老板死脑筋的选择Java,我自己的公司直接就放弃Java了(虽说用呢那么多年java有点不甘心换PHP,但在同等项目质量的前提下,谁会和时间还有金钱较劲?) 2. PHP开发的项目代码很乱,很难维护,而且错误跟踪很难控制等等,此类声音说的一点没错,因为PHP学习简单的原因,有很多本身自己学习能力、自律性不足的小伙伴就选择了PHP,那么选择没有错,但他会把这种不爱学习、不喜欢钻研,不自律的习惯带到PHP项目中, 不自律不进去遇到自由开放的语言结果就有了惨不忍睹的项目,你看,这个语言为什么会被黑的这么惨,归根结底PHPER不自爱,你们的不自律正在毁掉你们的饭碗~ 3. 现在很多公司的CTO能决定技术方案的人大多数都是85年左右的所谓的大牛,那个时候不都是学Java、C#嚒?所以自然选择自己擅长的语言了,我如果在回到职场,为了保险起见,我也选择Java,为什么 人好招嚒~至于活慢,成本高,又不是我发薪资,我若建议用PHP,老板会不会说“PHP不是说太慢嚒~~”
如果有老板要进军IT行业,或者有一些同行有创业后者接私单的想法,想要活好不粘人、成本低、效率高,我强烈建议选择PHP作为你们的后端语言。 多说一句,有人说用PHP+GO可以提升性能,我做个测试,确实能提升一点点,但本人不推荐这么做,原因是学个GO语言就为了配合PHP,而且提升就那么一点点?在IaaS层如此发展的今天,我随便几百块钱就可以弥补PHP比PHP+GO差的哪一点点可悲的性能差距了,淡定点伙计。有这功夫还是考虑如何把PHP的弱类型缺点通过编程规范的方式规范起来吧(PHP7、8已经明确支持了类型声明)
NodeJS: NodeJS由于前几年项目原因,原本准备用Java,但项目依赖库有好多Java没有现成的,得去造轮子,索性就用NodeJS了。项目周期一年时间把,活生生让我培养(压榨)出了几个Java 2 NodeJS的人才哈哈~ NodeJS不是一门语言,在我看来是一种机制、一种基于GOOGLE的V8引擎运行JavaScript的环境,这个技术之所以能火得益于V8,基于事件驱动的非租塞试的模型来运行JS,支持TS(TypeScript很像Java),所以他肯定是比Python要快,以上特性赋予了NodeJS的无线可能。那些说Python比NodeJS快的人,好好说话,把砖头放下~,快慢不重要,重要的是你们有丰富的科学计算库和铺天盖地的广告,这个NodeJS还差点。
在过去的一年NodeJS开发过程中的感受就是,刚开始很难受,从不习惯到后来越来越爽,尤其是我们开发的业务模式(非WEB),基于事件驱动的非租塞特性体现的是淋淋尽致,现在想起来还是一个字“爽”。
如果你要找一门后端开发语言,NodeJS是否适合我我不敢乱讲也没做过,但有相关框架,可以了解。 但NodeJS在非服务端API开发的场景我是深有体会,很棒~~。
但归根结底,学习NodeJS其实是学习JavaScript或者TypeScript,至于要学哪个?我个人建议先学习JavaScript,然后再学习TypeScript,也可以就学个JavaScript就行了,TS可以以后根据实际情况再学习。
工作方面NodeJS职位没有Java和PHP多,但如果你想学一门语言就可以解决所有问题(C/S、B/S、服务端、甚至是linux运维代替Pyton和Shell的,你可以考虑NodeJS,真的很爽,如果考虑就业我还是推荐Java、PHP)
Python: 这个语言现在被炒得神乎其神,但实际上Python的主战场在科学计算,之所以火了是近些年的大数据概念推了一把,其次Python真的还是有很多贼好用的库,比如大名鼎鼎的NumPy、Pandas还有什么Matplotlib等科学计算的库,比如我们在做NodeJS项目的时候,有些特殊类型文件内容提取和转换,Python的库就比NodeJS的好用太多,索性混合开发呗。
但如果你要想进军大数据、AI、机器学习等领域,这个语言是必须要学的,但Py并不是大数据领域唯一的语言,等你进去你就会发现,大数据这个领域必须用Python的地方并不多,哈哈。
其次也不会有人天天让你写算法,充其量你是用数据集群计算工具如Hadoop之类的结合和一些Python现成的算法库计算出结果而已,更悲惨的你未必回去做这些,搞不好你是去采集数据又或者做数据清洗(人肉清洗哈哈)、数据标注(人肉标注)而已。
所以如果是找工作,Python我不太建议作为主要的饭碗,可以作为帮你解决一些日常问题的瑞士军刀。你要问我Python能不能做web后端,我的回答是肯定可以,和NodeJS一样,web后端不是他们两个的主战场,但有些web后端场景未必会输给Java和PHP,主要还是看项目特性。
如果你不想学Java也不想学PHP,但还想做WEB后端,我强烈建议你选NodeJS
如果你是一个码农新人或者学生,千万不要把Python作为你的第一门语言,因为他语法太简单、太直白、太明了了~,学完之后你就基本上废了, 当你学完Python你再去学一个Java试试,你绝对想吐血…
举个形象的例子,Python就像是一个普通的邻家小妹,她青春、可爱、活泼聪慧,你和她处对象感觉真好,但几年后换了个女朋友Java,结果Java是一个高贵的富家小姐,你一时半会儿真的适应不了,各种礼数,各种讲究…… 吓死你(#^.^#)!
反过来,邻家小妹是你后接触的,你会突然觉得整个世界都轻松了,原来女孩儿可以这样子单纯和简单,生活可以如此轻松和愉快哈哈~
简单总结一下:
找工作、饭碗、随大流、短期不淘汰: Java>PHP>Python>NodeJS 创业、人生苦短、好用才是王道、自由: PHP>NodeJS>Java>Python 死磕大数据: Python>Java>NodeJS(这里没PHP什么事儿) 非IT人士学个语言玩玩: Python>NodeJS(生活实用型) NodeJS>Python(炫酷装逼型)
最后的最后我想说 其实语言无好坏,只是一个工具而已,有底层的、有高级的、有效率的、有严谨的、有强大的、有轻巧的,其本质都不太一样,但大部分主流WEB后端编程语言最终实现的效果都差不多,但凡有人告诉:“你什么语言绝对不能干什么事情,什么语言很垃圾”,请相信我,说这话的人本身就是个……,你懂得!
会使用工具不代表会建造出房子,更别说好房子了。 记住任何语言的语法知识都是你最基础最基础的入门功课,只是学会了这个工具的使用仅此而已,但如果能借助语言本身的特性配合更亲近其特性的设计模式,开发出真正能让用户简单易用又能解决其根本痛点应用或者系统,那才是正道。
有杠精肯定会说,什么用户体验,什么解决痛点那是产品的事儿,我想说的是不懂开发的产品不是好产品,不懂产品的开发更不是好开发。