专访蒋彪:JavaEE是企业级开发首选

专访蒋彪:JavaEE是企业级开发首选

摘要:企业级开发首选技术是什么?JavaEE和.Net哪个技术更好?在JavaEE开发中主要用哪些框架?另外在移动大热的趋势下如何开发出一个成功的Android产品?带着这些问题,社区之星记者第12期采访了海隆技术经理——蒋彪。他在开发一线所积累的经验,相信会给大家带来不一样的收获。

 

 

导读:这是一名工作于开发一线的技术经理,正因为此他对技术人生、JavaEE企业级开发和Android产品开发等有得天独厚的认识和见解,为此CSDN记者对这位技术经理进行了专访并发表成文,希望大家看完后能对自己的开发生涯有重新的认识,同时也能对企业级开发有个基本了解。

专访蒋彪:JavaEE是企业级开发首选

 

蒋彪认为做技术的要学会螺蛳里做道场

蒋彪,海隆软件技术经理,曾就职过对日外包、国内电商等。一开始主要做企业级javaEE开发,用工作流和RIA,整天纠缠于企业建模等。后来开始接触到Android、HTML5、电商、大数据并发和系统调优,开始学会从深层次的切入点思考技术问题。获得的荣誉有高级程序员、PMP、CSDN博客专家和51CTO技术专家等。

 

 

程序员之路从自学开始

CSDN:请和大家介绍下你及所从事的工作

蒋彪:南京人,06年毕业于南京信息工程大学计算数学。曾经做过对日外包和国内电商,现在海隆软件担任技术经理。主要的工作是技术管理,推进产品的技术演化,在公司内做一些力所能及的技术积累,有时候也会参与到新产品的设计和提案中。

CSDN:你是学数学出身,后来为什么会走上软件开发之路?自学之路有没有遇到什么困难,都是如何克服?你的数学修养对学习有没有带来什么帮助?

蒋彪:做IT基本上靠自学,大学时候自己看看书,大三的时候考了个高级程序员认证,当时这个认证还是有含金量的,所以毕业之后就顺理成章做程序员。

软件开发行业,高端的工作还是需要扎实的数学知识,比如大数据计算、搜索引擎算法和工作流引擎的状态机研究等。不过对于一般人而言,绝大多数的开发工作还是在围绕着业务逻辑在编织代码。就以自己举例,工作7年,只用到一次数学,当时做一个通信框架,当通信的一端发出的request没有得到响应的的时候,需要每隔一段时间重复发送,但是这个间隔时间曲线又需要线形增长,平滑逼近于零,所以我们最终采用了指数延迟算法来解决这个问题。

CSDN:你博客中用了“Bug抓捕员”和“专业江湖救急”等标签,为什么想到用这些词来形容自己?

蒋彪:有好几年我主要的工作状态就是游走在各个项目之间,解决各种稀奇古怪的技术问题,比如生产环境服务器的CPU负荷突高、JVM Down、TCP通信失败和数据库con pool耗尽等等。这个工作让人感觉很有成就感。

CSDN:你曾在日本工作,你觉得日本的软件开发和国内有什么不同?对此最大的收获是什么?另外在日期间有没有特别的经历和大家分享下?

蒋彪:日本的电子设计,嵌入式行业比较发达,企业MIS和系统集成这块和国内基本上相差不大,而互联网行业,因为日本人比较保守,而且监管也严格,所以大型的互联网公司没有中国多。像阿里系这种积累了深厚技术底蕴的互联网公司,不光日本很少,全亚洲估计也没有几个。日本人做事情比我们认真一点,但从开发技术、人员素质和开发流程上来看,中日差距没有多大。

技术人的技术人生要会妥协

CSDN:博客为什么起名“南湖边上的小木屋”?同时下面的说明“如果平凡,则廉价不可避免”有什么寓意,想传达什么?另外你常会吟词作赋,这样的心态对你程序员生涯有什么影响?

蒋彪:“如果平凡,则廉价不可避免”是我老板Jack常说的一句话。我觉得很有道理。现在中国的大势是旧有的发展模式已经到瓶颈,无论愿意还是不愿意,大家都面临着创新和转型。只有提高自己的附加值,做更高等级的工作,才能达到自己的人生价值。

CSDN:可以说你的经历非常丰富,能和大家谈谈你在技术人生上的一些认识吗?比如你对程序员熟手、高手和大师这三个境界怎么看?若想达到这些境界有没有捷径可走?

蒋彪:我本人最多只能算熟手,远远没有到大师的水平。到大师的人要深入浅出,深入理解计算机体系结构、操作系统底层机制、内存管理、编译器和通信协议,浅的要能写代码,做技术传道,推进产品进化。

做技术要靠天赋+运气+努力,三者缺一不可。IT行业入门容易,但是精通高深很难,因为有很多需要深入技术的地方,天赋和想象力还是很重要的。当然运气好的话,如果能够遇到一个好师傅领进门,一个热于研究的好团队,就能事半功倍。另外做技术要能做冷板凳,能耐的下寂寞,一遍一遍实验,这就是努力。但是,我们绝大多数人都是普通人,三者中都会缺失某一项,因此就需要我们摆正姿态。

我们要认识到,除了个把技术大牛和技术型团队之外,在中国,技术往往是服务于业务的。无论你是做ERP、CRM、WorkFlow,还是金融、电力、通信、甚至电商。做技术的人首先要认识到,如果你的技术不能带来赢利,那就狗屁不如。因此很多时候,我们做技术的人,要学会妥协。尤其在你不是大牛的情况下,面对成本压力、项目进度和文化环境,我们要认识到技术的从属性。因此我常常觉得,做技术的,要学会螺蛳里做道场。

可以快速开发的JavaEE是企业级开发首选

CSDN:当初为什么会在众多技术中选择Java?你认为Java学习如何开始和深入?

蒋彪:Java是高级语言,语法严谨、面向对象优良,JVM又能让你摆脱底层实现,专心考虑业务逻辑,所以Java很适合做业务开发。作为一门开发技术,Java还是很简单的。如果想深入理解和认识Java,有时间要多看看JVM的内部实现机制和内存模型,这是个不错的选择。另外周志明编写的《深入理解Java虚拟机》是本好书,推荐给大家。

CSDN:企业级开发首选的技术是JavaEE和.Net,你认为这两个技术哪个更好,为什么?

蒋彪:国内的IT行业长久以来,最大的客户就是企业。除了腾讯,阿里巴巴等,大家都是在做企业MIS。无论是OA、电信BOSS、银行流程再造,还是电力信息管理平台等等,大家都是在做企业级开发,首选的开发工具必然是JavaEE或者.Net。

选择JavaEE,除了可移植性外,最重要的原因如下:

 

  • 简单可行,快速上手。因为Java作为高级语言的优点,易学习,远离底层,有丰富的API。
  • 因为JavaEE适合快速开发,有丰富的开发框架和原形。

 

另外顺便提一下,很多做javaEE的人开发了很多年都没有接触过thread、GC和Native Method等等都是很正常。而Java本身的更多技巧性存在于业务建模,如果你不能接触到,其实Java对你而言就是一堆框架和API的组合而已,所以外界有人觉得做Java的人水分比较大,这是有道理的。

CSDN:在当前应用开发中,主要使用哪些Java EE技术?您认为哪些Java EE技术是最基础最重要的?

蒋彪:理解JVM机制、Java语法、Serlvet规范和HTTP协议就够了。简单说起来,好好参加Java认证考试就能把基本功掌握好,其它乱七八糟的框架,都是围绕着基础推进的。

CSDN:如何提高Java EE系统安全性,能简单谈下吗?

蒋彪:安全是个系统工程,比如前段时间冒出来的struts远程命令攻击的安全隐患,是属于开源框架的安全bug。比如京东前段时间被人恶意充话费事件,是属于代码级别的安全问题。以前我还见到做运维的新人,误删生产环境关键文件夹,导致全系统当机的安全问题。整个JavaEE里面,个人估计只有JVM本身的安全问题最少,所以大公司都会有专业的安全部门。

CSDN:使用开源框架的利和弊,开源框架对Java EE技术发展有哪些影响,平时在开发中主要使用哪些Java EE框架,为什么?

蒋彪:没有开源软件的话,JavaEE就什么也不是。国内对开源软件的使用一般分为三个级别:

 

  • 第一梯队是阿里系为代表的技术巨头,他们能定制开源软件,甚至自己研发开源软件。
  • 第二梯队是一些大中型的MIS和系统集成商,他们能在spring之类的开源框架上封装自己快速业务开发原型。
  • 第三梯队是大量的中小型公司,只会用用SSH。

 

对一般公司而言,定制开源框架没必要也没实力,搭建自己的快速业务开发原型倒是很有意义,在此我推荐可以考虑尝试OfBiz这个业务框架,国内在此基础上封装自己的业务逻辑的公司也不少。单纯的技术框架的争辩,对于我们的意义不大。

CSDN:在Java EE项目开发中系统架构是否很重要,在实际工作中,对于Java EE项目的架构设计有哪些经验可以分享?

蒋彪:大型项目肯定需要系统架构。不过对系统架构看的更重的还是在互联网企业。因为不断的产品演化和推进,没有架构师强有力的规划是不可能梳理清楚的。

CSDN:JavaEE虽然是企业级开发的首选,但也有人指出JavaEE比较臃肿庞大、开发和维护成本较高,同时开发效率也不高,对此你是怎么看的?另外JavaEE还有哪些局限?

蒋彪:JavaEE和.NET相比,开发成本和维护成本确实比较高,这是不争的事实。JavaEE开发中很容易出现类爆炸,一个看起来简单三句话的代码,会被拆散到多个接口对象中去。但是这不是JavaEE本身的问题,这是设计过度。

很多项目没有学会用正确的技术做正确的事情。我08年的时候,做了一个小项目,一个非常简单的学校教学管理系统。项目团队一共5个人,我当时负责做数据库建模,项目经理技术选型的时候,一定要选用SSH,我当时极力反对,因为Hibernate是相当重量级的ORMapping ,如果你是做电信Boss我强烈支持你用,但是做几十个画面的小系统用这个,属于没事找事。

项目经理强力推行他的计划,结果一个很简单的项目结果失败了。因此做技术的要学会切合业务模型推进和妥协,因为项目是要盈利的,不是你个人的实验品。所以不是JavaEE臃肿,是我们很多人不会用,用错了。

CSDN:“什么是合适的,那么什么就是成功的”特别赞同你在博客说的这话,那么在企业级开发中面对不同环境和要求,如何灵活运用JavaEE和.Net?能简单举例说明吗?

蒋彪:Keep it Simple, stupid!如果你只是想做一个日PV几千几万的小网站,你会想到买小型机吗?技术要切合场景!比如你公司80%的程序员都熟悉.Net,你非要强制推行JavaEE。比如分明是个强事务的业务场景,你为了所谓的吞吐量非要上node.js。这都是可笑的行为。

一般来说,单纯从技术出发,如果你的业务系统不需要分布式和集群,日PV没有那么高,公司的技术底蕴和架构师都不是很强,那推荐你用.NET开发。如果你要考虑系统的伸缩性,未来准备把这个系统玩大做强,需要考虑持续投入和进化,那我推荐你用JavaEE。

如何开发出一个成功的Android产品

CSDN:可以说Android算是一个Java类库,你觉得Android开发与传统的JavaEE开发有什么不同?

蒋彪:准确的说,Android只是实现了Java语言规范的一个开发平台而已。Dalvik虚拟机基于寄存器,JVM基于堆栈,两者的不同其实很大。Android本身执行在移动设备上,虽然Dalvik会有GC机制,但是开发者还是应该避免大量生成没必要的执行序列和Object。

之前看到一个做JavaEE的架构师转做Android后,一上手就把代码拆分成Activity、Logic、Façade、Service、DAO和DTO等等。这其实很可笑,Android中的对象建模要以轻便为主,以我的经验Activity和Service上封装一个抽象类,DBUtil之类的工具类做成static Util即可,别过分设计。

CSDN:Android产品开发中都会遇到哪些常见问题?那么该如何避免这些问题出现?

蒋彪:Android产品要想好盈利。我看到不少投了很多钱的产品,当初根本就没想好如何盈利就急忙上马,最后的下场都很惨。一个没有完整盈利规划的产品,公司一般可以直接Pass,不要立项,这就是我的经验。

CSDN:要想开发出一个成功的Android产品,在实际开发中该怎么做?

蒋彪:

 

  • 要学会整合现有的IT资源。比如想做一个OA的App,如果你们公司有现成的B/S架构的OA产品,那就应该考虑把这个产品的界面按照Smartphone风格重新设计一番,然后在外面套上一个NativeApp的壳子,而不是重新造轮子。
  • 多看看别人怎么做。如果你想做音乐盒子之类的App,应该先把国内所有主流的同类型APP拿过来,研究他们的功能和他们的UI设计,把别人的优点和缺点都研究透彻。
  • 一个成功的产品,App只是冰山一角,还需要后台的运维系统、推广、持续的进化、产品路线图和规划。如果你以为做个有点子的App就成功了,那还是趁早住手比较好。
  • App要根据业务分类进行技术选型。比如你要做游戏,我推荐你去用成熟的游戏引擎,这比你用native技术开发绝对现实。如果你做工具助手之类画面简单强调易用性的App,我推荐用native技术。如果你做网上购物之类的重业务App,我推荐你用native+WebView来实现。
  • 最后一个建议,不要轻易尝试新技术,做踩地雷的勇士,比如HTML5。

 

CSDN:目前已进入移动互联网时代,移动开发大热,你能谈谈移动产品未来如何盈利和发展?

蒋彪:移动产品盈利是个大难题。尤其在中国,因为中国人思想里就有软件不付费的习惯。现在国内移动产品就游戏道具和广告收入两个现金流。但是从未来角度来看的话,个人觉得移动产品硬件化可能是另外一条道路。比如小米盒子给我们的启示,Android除了做手机,是不是还能做机顶盒,以后还能做温度计,血压计等等。

对于开发App的人而言,如果自己开发的App能够和硬件配件整合起来是不是就能得到更多的用户黏度,同时也能更容易获得现金流呢。

记录是个好习惯

CSDN:你是什么时候接触到CSDN,它对你工作和学习带来哪些影响?另外对CSDN有什么建议,对其未来有什么期待?

蒋彪:我09年的时候在做一个研究性项目,当时看到不少美国同行喜欢写博客,因此就在CSDN上建了博客,一发不可收拾,直到现在。经常写博客,让自己对过去的几年工作有个梳理,人都是健忘的,常常记录是个好习惯。

我对CSDN的建议只有一个,希望CSDN出个Android客户端。

 

写在最后:

从蒋彪的CSDN博客、从和他断断续续的交流中,记者发现他对技术对人生理解的非常透彻,他认为技术大牛要从物理层、协议层、架构层和编码层,能够层层透彻,为了进一步说明,他还用一个寓言向记者阐述:鹦鹉负责吹嘘架构,鸡负责管理,猪负责开发,他指出真正的大牛应该是能讲架构,能定规范,能写底层代码。

此外他还和记者表示,技术只是一种实现方法,特意强调某种技术,乃至于为了某种技术辩护的人其实是虚伪的,最后他还和记者分享开发项目无论是技术、流程和方法都不要拘泥于套路和模板,判断一个项目是否敏捷,不是看是否有了敏捷的title,而在于是否掌握了敏捷的精髓……聊完相关话题后,记者心目中对程序员那种呆板、沉默寡言的形象一扫而净,是的程序员就应该这样,就应该到达这样的境界,只有这样才能让自己的技术人生更美好,才更能潜心于技术从而实现自己的价值。(文/张勇

 

 

若想获悉蒋彪更多动态,请关注:

你可能感兴趣的:(javaee)