年前和最近,我发现在博客园和其它地方,有不少争论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的(还有各种其它语言的)伙伴们技术日益进步,多多发财。

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

与其争论java和.net的差别,还不如多想点用编程技术挣钱的方式的更多相关文章

  1. Java Web编程技术学习要点及方向

    学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...

  2. Java 核心编程技术干货,2019 最新整理版!

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 以下是Java技术栈微信公众号发布的所有关于 Java 的技术干货,会从以下几个方面汇总,本文会长期更新. Java 基础篇 ...

  3. Java 异步编程的几种方式

    前言 异步编程是让程序并发运行的一种手段.它允许多个事情同时发生,当程序调用需要长时间运行的方法时,它不会阻塞当前的执行流程,程序可以继续运行,当方法执行完成时通知给主线程根据需要获取其执行结果或者失 ...

  4. 10个实用的但偏执的Java编程技术

    在沉浸于编码一段时间以后,你会渐渐对这些东西习以为常.因为,你知道的-- 任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用"防御性编程",即一些偏执习惯的原因.下面是我 ...

  5. 转载:10个实用的但偏执的Java编程技术

    在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用“防御性编程”,即 ...

  6. Java高级特性 第14节 解析XML文档(2) - SAX 技术

    一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...

  7. 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...

  8. 20165237 2017-2018-2 《Java程序设计》第四周考试补做及2-3章编程题

    20165237 2017-2018-2 <Java程序设计>第四周考试补做及2-3章编程题 测试JDB: 用JDB调试上一个程序,输入1.2.3: 2-3章编程题代码托管 (程序的运行结 ...

  9. 在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

    在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

随机推荐

  1. 译MassTransit 创建消息消费者

    创建消息消费者一个消息消费者是一个 可以消费一个或多个消息类型的类,指定IConsumer<T>接口,T为消息类型 public class UpdateCustomerConsumer ...

  2. SQL Server 日志和代理的错误日志

    本文介绍的日志不是事务日志,而是SQL Server 日志和代理的错误日志,按照主体把错误日志分为SQL Server.SQL Server Agent.Database Mail,以及 Window ...

  3. 高德地图 地铁图adcode 城市代码

    北京 1100天津 1200石家庄 1301沈阳 2101大连 2102长春 2201哈尔滨 2301上海 3100南京 3201无锡 3202苏州 3205杭州 3301宁波 3302合肥 3401 ...

  4. 在Windows Server 2008 R2下搭建jsp环境(四)-在测试的过程中可能出现的问题

    环境基本部署好了之后,便开始测试,一定要让他经得起"考验",他才会值得你的信赖.Tomcat服务器部署成功的的验证方法(默认端口的情况下): 1.loacalhost:8080 2 ...

  5. BZOJ_2238_Mst_树剖+线段树

    BZOJ_2238_Mst_树剖+线段树 Description 给出一个N个点M条边的无向带权图,以及Q个询问,每次询问在图中删掉一条边后图的最小生成树.(各询问间独立,每次询问不对之后的询问产生影 ...

  6. BZOJ_1058_[ZJOI2007]报表统计_STL

    BZOJ_1058_[ZJOI2007]报表统计_STL Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼 ...

  7. 使用 NLog 给 Asp.Net Core 做请求监控

    为了减少由于单个请求挂掉而拖垮整站的情况发生,给所有请求做统计是一个不错的解决方法,通过观察哪些请求的耗时比较长,我们就可以找到对应的接口.代码.数据表,做有针对性的优化可以提高效率.在 asp.ne ...

  8. java  JDK配置环境变量

    1)将下载的jdk放置到一定文件夹中,注意文件夹名不能有中文! 2)设置环境变量 a.可以在系统变量中找到path这个变量,然后将jdk下的bin的根目录添加进去 注意:一定要放在path变量值的最前 ...

  9. js获取数组中最大值和最小值

    var max = Math.max.apply(null, 数组); 获取最大值 var min = Math.min.apply(null, 数组);获取最小值 一句话获取数组中最大的数,最小数

  10. 发现了一个非常棒的pyqt5的例子集

    发现了一个非常棒的pyqt5的例子集 https://github.com/892768447/PyQt 各种各样的PyQt测试和例子 [Python3.4.4 or Python3.5][PyQt5 ...