年前和最近,我发现在博客园和其它地方,有不少争论java和.net哪个好的文章,其实这是种好现象。虽然到了架构层面,技术是通用的,但兼听则明,而且技多不压身,多种挣钱的方式总不会错。

    本人最近主攻Java,最近在这方面也出了两本书,Java Web轻量级开发面试教程Java核心技术及面试指南,但之前也讲过.net课,而且之前和别人创业时,用的也是.net,体会下来,语言只是挣钱的手段,关键是要看怎么用它们挣钱,也就是学习进阶和挣钱的方式。

    本文将结合自身和听到看到的经历,不仅将从语言使用的角度来说明这两种语言的异同点,更将从提升能力接活挣外快的方面说明这两种语言的作用,相信大家在看完后会感叹:其实争论没必要,关键要选择适合自己的方式。

1 入门时,语法有差别,所以不能拘泥细节

     对于初学者而言,.net和java语法就像天书一样,一方面很难懂,另一方面调试起来也很困难,如果要自己写段能通过编译的代码,非常困难。如果同时学Java和.NET,估计更会一头雾水。

     其实磨刀不误砍柴工,对于初学者而言,不论学哪种语言,都应该深入考虑这个问题:高级开发或架构在用这个语言时,一般会用到哪些特性?换句话说,这种语言能怎么帮到我?我是学Java的,就从Java角度来回答这个问题,我相信.NET的回答应该会是同样精彩。

    1 Java主要用在架构方面,通过Spring MVC等架构能优化开发时间。   

    2 通过引入各种组件,比如nginx等,能实现高并发分布式的功能。

    3 目前Java主要用在互联网高并发等场景,而且在处理大数据方面有一定的优势。

    对于初学者来说,了解到上述知识点并不费劲,但一旦了解后,就可以在入门阶段不走弯路,比如别过多拘泥于加减乘除循环之类的语法,跟不会去学Swing之类的用不到的技术。

    虽然在入门阶段,Java和.net语法差别点不少,但如果不拘泥于细节,会发现开发的模式就像搭积木:用不同的API去组装实现各种功能,我们需要关注的是各种函数以及参数有什么作用,该如何使用。 

    但如果硬要列出两者谁好谁话,这本身就有问题,因为这样一来,会让自己过度深入语法,就好比学英语时过多关注单词,语法本身其实是相通的。

    在我之前和现在的公司里,我见过不少从.net转到java的,问他们当时转型用了多久?一般最多不会超过3个月,前提是.net技能都已经精通。

2 做项目时,其实已经模块化,差别的只是API

    当初学者开始做第一个商业项目的时候,会发现所接触到的知识点非常有限,比如数据库相关,MVC架构相关(如何在三者之间传数据),外带些数据结构(比如Java集合) 。

    而且,项目经理和架构师已经把项目的外型框架搭建好了,连数据库以及前后台交互的方式也无需管了,开发者做的更多的是模仿,仿照别人做的模块中的流程,开发自己的模块。

    在这个层面上,Java和.NET虽然开发用的IDE不同,打包部署上线的方式也不同,但在开发过程中,由于框架已经是现成的,所以相差的还是API。

    相信大多数的项目经理会说,管理Java和.net项目的方式其实差不多,而两者的差别,大多已经通过框架和模块掩盖掉了。

    之前我在外企,项目经理都是一个项目做好就换另外一个项目,我也见了不少项目经理同时管理java和.net的多个项目,也没发现他们因此而混淆。而且,做项目时,编码占的比例也不大,其它还有分析需求,设计架构和流程,和测试等人员联调,估计编码的工作量也就占个3成,要讨论只占这么点比例的开发语言哪个好?没意义且占时间。

3 两者的差别其实体现在项目背景上

    之前主要说的是,从技术上来看,两种语言差别不大,而且从架构角度上来看,一些基于分布式高并发的技术,通过两种语言都能实现。  

    凡是存在的,必是合理的,那么目前沸沸扬扬的Java与.NET之争原因何在呢?

    个人观点,体现在项目背景上,面向不同需求和开发成本的项目,或许java/.net确实有些优势。

    比如,某项目是套基于桌面的管理系统(成本管理机器管理均不论),是应用在一个公司里,那么.NET是个比较好的选项。

    又如,某项目是个并发量比较小的网站,比如社区门户外带简单的动态数据,那么JSP即可。

    再如,如果是个高并发的项目,而且本公司的其它项目都是基于Java,那么可能会用到Java里的一些框架。   

    或者,某人之前做了不少.net项目,有现有的技术积累,再做个私活,用java和.net都可,那么可能就选.net了。

    也就是说,两种语言没有优劣之分,只有更适用,再具体来讲,用哪个语言成本更低,开发周期更短。

4 到了架构级别,更多得考虑底层实现,很少顾及语法点

    本人勉强到了架构师级别(但自认为如果用高级开发的标准,本人应该属于优秀),在我眼里,两种语言真没差别,我相信大多数的架构师或高级开发应该有相同的观点。

    因为在这个级别,需要考虑的不仅仅是如何用语法实现功能点,而且如何性能调优和解决高并发问题。我列些最近我们组架构师解决的问题。

    1 直接访问数据库太慢了,需要用MyCAT进行分库。

    2 网络通讯,用http协议,有三次握手,且http报文头有些长,需要用tcp协议。

    3 业务上,两套表需要相互同步数据,这就得用到mq集群。

    以上为例,在这个程度,基本已经很少考虑两种语言的差别,或者可以这样说,我之说以在框架层面选用java,是因为该项目主要是基于Java的,而不是某些功能只有java实现,反之亦然。 

5 最近我见到值钱的技能,语法只占了很少比例,所以两者都能挣钱

    最近比较流行收费课程,我最近在学玩 转Spring全家桶(https://time.geekbang.org/course/intro/156) 这门课程,也了解了不少基于.NET的课程,最近也打算自己搞个收费课程。

    在这个过程中,我发现如果在课程中,只讲差异性的语法,估计不会有市场,因为这些课程都是基于项目管理或者是框架的。我浏览了一些基于Java和.net的框架教程,发现分布式框架的要点都基本相似。

    从这个角度来看,在选型java和.net的时候,千万不能事先有成见,比如认为哪种语言不好,或者哪种语言绝对不适合某种场景,因为这样就相当于给自己画地为牢,约束了自己的发展前景。

6 不拘一格去挣钱

    学编程语言是为了挣钱,这里给出些一般的挣钱方式。

    1 首先当然还是做好本职工作,具体来说,就是认真地把编程语言结合业务背景,然后再深挖性能优化和架构级别的技能,让自己尽快达到高级开发或架构师的水准。

    2 如果感觉还有余力,就去找些外快,比如做项目写书做讲课老师或者开视频教程,不知道渠道怎么办?网站搜外带群发邮件,如果身边有人已经做得很好了,就赶紧请教。

       我在博客园里就见到不少讲挣钱的文章,而且博客园里的图书编辑和负责出视频教材的人也不少,所以博客园内部的资源就不少。

    就拿外包项目来说吧,基于java和.net的都有,而且各层次各成本的都有,所以说,与其争论,还不如多找找挣钱渠道,或者干脆多看点资料让自己快进步。

7 总结和求推荐

    本来这篇文章应该是年后第一周(也就是上周)发表的,但事情太多,推迟了一周,但自感觉没因此降低写文章的标准。

    在上文里,更多地是从技术和架构来表述两种语言的差别,而最近我看了不少身边的人自己创业,他们挣钱的方式,也是和语言无关的。

    比如到各种兼职外包网站接活,比如出视频教程,又如出去培训讲课,或者接项目自己来做,这些挣钱的方式里,更多考虑的是成本和周期,各种项目的甲方,也不会因为开发语言是java而多给钱。

    所以,争论语言的差别,乃至争论语言的好坏,真的没必要,有时间争论,还不如出去挣点外快,如果不知道渠道,就到网上找,如果感觉缺少挣外快的能力,就赶紧学。

    最后,祝各位用java的.net的python的(还有各种其它语言的)伙伴们技术日益进步,多多发财。

    如果大家感觉本文不差,请点击下方的按钮推荐本文,大家的推荐是对本人最大的激励。

posted on 2019-02-25 09:02  hsm_computer  阅读(1719)  评论(10编辑  收藏  举报