Spiga

做Java开发这一年

2011-06-28 11:57 by 横刀天笑, 17244 visits, 收藏, 编辑

从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。通过这一年时间也有些感触,想从几个面比较一下这两个平台。希望能做到客观公正。

语言

我原来是使用C#语言的,和现在的Java语言相比,现在的Java语言语法就停留在C# 2.0这个年代。语法结构都非常传统,中规中矩。很突出的一点是,因为缺少对闭包的支持,有些用C#很容易做到的,用Java需要写很多废话代码。

前几天InfoQ上发表了一篇英国卫报逐步采用Scala替换Java的文章里一句话用的很好:看Java的代码很容易让你只见树木,不见森林。因为为了实现某个功能,你需要太多的支撑代码,而实现功能的关键代码却迷失了。

举个例子:我需要一个排好序的用户列表,排序的依据是用户名字。很简单的需求对不。自然的代码肯定是这样的:

IList<User> users = …

users.OrderBy(user => user.Name);

而如果用Java实现同样的功能你可能要这样写:

List<User> users = …

Collections.sort(users,new Comparator<User>() {
    public int compare(User left, User right) {
        return left.getName().compareTo(right.getName());
    }
});

第一:没有扩展方法的支持,只有借助静态的辅助类

第二:没有闭包的支持,非要写个难看的匿名类

其实我们只需要一个OrderBy,一看就明白,但现在多了这么多“无用”的代码,反而核心的价值(order by)却显得不那么重要了。这还是一个很简单的例子,在实际的项目中你会为此付出更多的代价,你要写出一堆味同嚼蜡的代码才能实现你想要的那个功能,而那个功能其实是很显而易见。

所以在语言层面,Java没有任何亮点,只觉得罗里罗嗦。

关于语言层面的比较,老赵写过很多,而且非常精彩,建议去欣赏一下。

不过Java也有那么很少几个有点意思的小东西:比如静态导入(脑袋提醒,这东西很早就在VB里出现了)、以及Java对Annotation的特殊支持让我们可以做一个更有意思的事情。

概念满天飞

做Java以来,让我感触最深的是在Java世界里概念满天飞。ORM,IOC,AOP,这几个在.NET的世界里也有,但没见过这么浓的,但是如果你做Java应用,你不熟悉这几个你都不好意思出去跟人打招呼,所以除了学习Java本身外还有一大堆开源框架等着你研究。

还有什么View Model,Presentation Model,Validator,BRO(Business Rule Object),BPO(Business Process Object),BDD。关键是不仅是概念上存在这样的名词,它还大量的出现在代码里。代码里将概念描述得淋漓尽致,还规规矩矩。或许我土老帽了,我开发.NET三年有余,从来没整这些玩意儿。但是我一点也不怀疑我的代码难以阅读,难以维护。

配置文件,你能再多一点么

我超级厌恶Spring的配置文件(虽然你说这只是个框架,但貌似Java社区有这个趋向)。虽然Spring现在也增加了注解(Annotation)的支持,但是还有那么一些知道的和不知道的原因,项目中存在大量的配置文件。而且为了“模块性”,一个小小的配置文件又包含有几个配置文件。有配置controller的,有配置DAO的,有配置service的。额,还有那该死的Hibernate的hbm文件。我想,系统的复杂性就是这么一点一点的堆积而来的。

ASP.NET的配置文件一度也有变得更臃肿的趋势,但最后还是大大瘦身(.NET 4.0里默认的web.config很小了)。而且Attribute在.NET的第一个版本就出现了,很多可配置的东西都提供了Attribute的API和XML的API,所以没有历史遗留包袱。

开源,这个我喜欢

Java里的开源软件远远超过.NET的(这可能跟微软有一定的关系吧)。如果你想完成一项工作,总会有一个开源软件适合你。比如我们要做一个定时调度的任务,马上就有Quartz跑到了你的视野,你只需实现几个接口,然后在配置文件里配置一下(又是该死的配置文件),又比如你苦于在Java里没法像C#里那样用Lambda,马上有个跟你一样想法的人开发了一个lambda4j(Java人有个说法是:语言不足类库来补,不过Java这个语言太不足了,所以有的时候类库补也补不好)。你可以在琳琅满目的开源框架和开源类库里寻找一个最合适的,然后打开这个潘多拉魔盒。最主要的是她还是开放的,你不仅可以学习其代码思想,如果你发现有问题你甚至可以提交代码,那种成就感我倒是在开发.NET时没有感觉到。比如你要开发高性能服务器,在.NET里还没见过这类的开源项目,可Java里你可以学习Netty,可以学习Mina,你甚至可以根据自己具体的业务场景,对这些开源软件进行适当的修改。当然,你可以说思想是一样的,这倒是不错。但因为IO模型在Java里和.NET里并不一样,所以还是有很多不同的(当然我觉得.NET的异步IO更容易使用,Java的NIO那是什么狗屎一样的API啊)。

IDE

搞开发的肯定离不开IDE。.NET里的IDE当之无愧的是Visual Studio了。不过我却觉得Visual Studio这几年已经离开发人员越来越远了,好像他要搞什么全生命周期的软件开发工具。所以不但臃肿,而且对开发人员并不是很友好(当然,她的可视化设计器是无与伦比的,但我不觉得可视化设计器是什么开发人员的“利器”)。举两个例子:VS里大量使用组合快捷键。这样不仅使得快捷键过长,难以记忆,而且还好难使用啊,你必须按两次,而且时间不能间隔太长。还有VS的重构功能,太弱了。

在Java里有各种各样的IDE,有免费的,有收费的。我很喜欢的一个就是Intellij Idea。Idea给我的印象就是,她真的是在关注开发人员(写代码的)这个角色。所有的快捷键都很简单,好用好记。比如,大部分东西在Idea里可以使用Alt+Enter这个万能快捷键解决(这个快捷键是上下文感知的,在不同上下文中它知道要干什么)。

再就是Idea对重构的支持,如果你熟练之后,做一项大的重构你都无需手动的去修改什么代码,直接依靠IDE的支持就可以完成,这在安全的重构里是很重要的一点,手动的去修改代码重构如果在测试不完备的情况下风险是非常高的。

当然VS也有很多非常好用的插件,可以提高开发效率。比如大名鼎鼎的Resharper就来自于Intellij Idea同一个公司,由这个插件你可以看到Idea是如何关注写代码的人的效率。

JVM vs CLR

一般的,Java跑在JVM上,C#跑在CLR上。从技术实现上他们两平分秋色,各有各的优点,我们不能评价他们的好坏。只能说可能JVM在XXX上胜过CLR,CLR在XXX上胜过JVM。而且JVM和CLR有居多相似之处,大多数东西都可以在对方找到相应的东西。

那么她们就无法比较了么?不是,经过一年的学习我表示我更喜欢JVM一点。

JVM(在这里只假设是Oracle/Sun Hotspot JVM)暴露了众多的配置参数给开发人员。你可以通过这些参数间接地控制JVM的运行。就比如GC吧,JVM里有各种参数来控制各个代的大小,还可以通过参数让JVM采用什么样的垃圾收集策略。因为不同类型的应用:比如桌面的、服务器端得、内存小的等等不同类型的应用适合不同的垃圾收集策略。而CLR在垃圾收集上只给开发人员提供了Workstation(是否是concurrent GC,.net 4.0是background GC)/Server等很少的控制(不过也几乎很少用到)。当然,如果你想最大化控制CLR你就只有自己Host CLR,然后调用Host API进行控制,但是那样难度高很多。

我很愿意承认CLR是自适应的,她能自动的智能的识别出你的需求,然后自动的进行调整。不过我在这里主要想到的是,微软在这里扮演着保姆的角色。在你很小的时候,保姆能够在一定程度上保护你,免你受到伤害。但是你不能永远生活在保姆的怀抱里,如果你想变得更强大你需要自己独自一人出去看看。

注:这一节不是比较JVM和CLR,因为我没有那个能力。只是想从JVM和CLR所表现出来的差异来看看一些“看不见的东西”。

开发人员

上面主要谈了技术层面的东西。现在说说软件开发中的人。

我现在所在的公司面试有个特点:会让面试者做一份家庭作业,然后让公司同事Code Review。在这一年里我看了很多Java的代码,也看了很多C#代码。但是我伤心的发现:

1、虽然Java的也有烂代码,但是Java代码大多更注意代码的美感。大家都非常注意选择方法名,变量名,类名等。也非常愿意写一些小的,容易理解的方法,小的目的明确的类。可我亲爱的.NET同行们,大多在这方面很随意。一个方法200行不算长,甚至一个功能就放到一个方法里实现了。我看呀看呀,都看不到尽头。更别说类职责单一了。

2、测试 Java同学的代码大多有测试,虽然有的测试不怎么好,但最起码有那么几个测测核心功能。但是.NET代码呢?很难见到几个有测试的(难道这是因为VS很晚才加入对Unit Test的支持有关?)。我不是说一定要有测试,我只是描述一下这么个现象。

3、你也太随意了。我见到有那么几份.NET代码,我知道你创建了一个WinForm的项目,然后你却不把VS自动生成的那几个Form1.cs,Form1.resx给删掉。

4、构建 从构建这个层面就更显出问题了,Java同学提交的代码大多有构建的脚本,无论是Ant还是Maven,所以你只需要敲一个命令行,马上可以看见人家的结果。而.NET同学的基本上都是sln文件。这一点不是说谁好谁坏的,因为我之前做.NET也从来没有自动构建脚本,我只想说两个社区有些不同。

后记

我在这里并不是贬低某个社区的开发人员,也不想扯进任何平台的纷争。因为这只是我看到的现象,还有很多是我没看到的,而且这也严重的受到我周围同事的影响,所以难免以偏概全。

如果有不足地方请不吝指教。

标签: java vs C#
Add your comment

109 条回复

    评论共2页: 上一页 1 2 
  1. #10楼 拾玄      2011-06-28 13:26
    在很多地方,只要出现.net和java比较最后都。。。
    很喜欢楼主这种讨论的立场,方式。
     回复 引用 查看   
  2. #11楼 Parallet      2011-06-28 13:33
    不错.~
    微软的东西是双刃剑. 它能节省开发者的时间, 也能让开发者满足于现状而不求进步.
     回复 引用 查看   
  3. #12楼 静至      2011-06-28 13:34
    在学C#之前我就学过Java,语言都差不多少,外在环境好坏之是一小方面,主要开发者,是否有一种清晰的构思。
    .net配置文件臃肿这的确是有,在3.0和3.5臃肿的也人头痛,但2.0和4.0这两个版很清晰,个人主开发方向网站用2.0、软件用4.0。
    VS2010不知道楼主用过么,针对开发方面改的挺大的
     回复 引用 查看   
  4. #13楼[楼主] 横刀天笑      2011-06-28 13:44
    @静至
    VS2010用过,但还是觉得Intellij Idea更好用
     回复 引用 查看   
  5. #14楼 Repository      2011-06-28 14:01
    .net类库真的越来越臃肿,真的,这对程序员并不见得是好事!
     回复 引用 查看   
  6. #15楼 无拘无束      2011-06-28 14:01
    我也搞了5年.net了。也准备转android,主要有C和C++基础,以后想写写安卓。。呵呵
     回复 引用 查看   
  7. #16楼 懒人站长[未注册用户]2011-06-28 14:02
    支持,支持!
     回复 引用   
  8. #17楼 Rio·Yang      2011-06-28 14:07
    我也是从.net开发者,转成JAVA开发。。学习了很多开源的项目,觉得思路拓宽很多,如果回过头再去开发.net,会有很多新的思考亮点,我不会去担心有新的语法,新的技术诞生,就好比交通法规一直在变,汽车还是照样在跑,只是适应和不适应的阶段,度过了就豁然开朗了。。。万变不离其宗
     回复 引用 查看   
  9. #18楼 张蒙蒙      2011-06-28 14:33
    同样是从.net转向java.
    我表示楼主说的都是真的。
    不过楼主关于java概念多一说,也源于java的千姿百态。
    配置文件带来的复杂性,是备受指着的,虽然我自己的开源项目也用配置文件,囧。
    这确实是2个社区。

    博主,你当年获得mvp,我就关注过你,看过你的设计模式系列,貌似我记得还有你qq呵呵。

    如果你再搞1年java,我是说非ssh,期待再出心得。
     回复 引用 查看   
  10. #19楼 张蒙蒙      2011-06-28 14:36
    如17楼说的,java有很多亮点思想,我坚持做一个无信仰code.
    多学各家优点,可以带来开阔思路。
     回复 引用 查看   
  11. #20楼 张蒙蒙      2011-06-28 14:38
    我十分同意
    博主对软件开发中的人4点比较。
    实时就是这样。这和环境有关。
     回复 引用 查看   
  12. #21楼 永不言弃9      2011-06-28 15:05
    呵呵,留下一个沙发
     回复 引用 查看   
  13. #22楼 Leepy      2011-06-28 15:07
    我觉得不单单是语言以及相关开发架构等等软件层面上的比较,还要根据需求来决定使用C#还是Java来开发项目。
    比如金融系统项目,用户有可能就分为高端用户以及低端用户。低端用户只要会操作Windows平台就够了;而高端用户(假如也是一些技术人员做维护),可能就需要在LINUX平台下进行操作。而金融平台方面安全性以及平台移植性要求比较高,所以更多还是会考虑使用JAVA语言。
    所以,不能说那个更有优势,只能说两者之间不可替代。两方面的开发人员都是有市场需求的。
     回复 引用 查看   
  14. #23楼[楼主] 横刀天笑      2011-06-28 15:20
    @Leepy
    不想谈哪个平台好,哪个平台坏,这是个非常有争议的话题。
    只想说说这一年我开发Java的感受
     回复 引用 查看   
  15. #24楼 无拘无束      2011-06-28 15:41
    @Leepy
    我觉得LZ说的不错,你很肤浅。再多修炼一下把。
     回复 引用 查看   
  16. #25楼 Leepy      2011-06-28 16:34
    @横刀天笑
    恩,文章的本意我懂,分析还是挺不错的!
     回复 引用 查看   
  17. #26楼 Leepy      2011-06-28 16:35
    @无拘无束
    谢谢你关心……
     回复 引用 查看   
  18. #27楼 Jerry Qian      2011-06-28 16:43
    楼主推荐你们公司个工作呗。哈哈
     回复 引用 查看   
  19. #28楼 徐培华      2011-06-28 16:51
    难怪很久没看到你更新了。
     回复 引用 查看   
  20. #29楼 阿武      2011-06-28 16:52
    同样是从C#转向JAVA,不同的是从.NET 2.0就转了,那时候C#跟JAVA从语法上来讲差别并不大,现在C#已经发生很大变化了,
    我觉得JAVA太注重于面向对象,以至于很多语法糖很难被JAVA开发人员接受,不管怎样,我还是更喜欢JAVA的开放
     回复 引用 查看   
  21. #30楼 双击      2011-06-28 17:07
    目前被spring,struct2配置文件折磨的死去活来的.net程序员泪奔飘过
     回复 引用 查看   
  22. #31楼 beilaozai      2011-06-28 18:13
    楼主写的不错 其实每一个语言都有自己的优点和缺点 我觉得老是拿两门语言来比较的话很无聊 存在即是合理的 。希望楼主以后有时间 可以写出好的技术文章 呵呵。
     回复 引用 查看   
  23. #32楼 kim      2011-06-28 18:16
    支持。
    -------------------------------------
    博客园征途系列:赠书啦!!凡是参与围观的均有机会获得我著作的<.NET WEB高级开发>书籍一本,并且亲笔签名哟~
    http://www.cnblogs.com/jigee/archive/2011/06/27/2091306.html
     回复 引用 查看   
  24. #33楼[楼主] 横刀天笑      2011-06-28 18:24
    引用beilaozai:楼主写的不错 其实每一个语言都有自己的优点和缺点 我觉得老是拿两门语言来比较的话很无聊 存在即是合理的 。希望楼主以后有时间 可以写出好的技术文章 呵呵。

    我觉得拿出两门语言比较没有什么问题,我只是不喜欢无意义的争论,光在说哪门语言好,哪门语言差,或者说实例说:我们的语言好,因为用的人多这样的无意义辩词。
    如果纯粹从技术层面上来比较语言的差异还是挺有意思,挺有收获的。
     回复 引用 查看   
  25. #34楼 captmjc      2011-06-28 19:05
    ms和java的本质区别,就是.net举重若轻,java举轻若重。或者说,简单快速,无需tuning,不会变更,不会迁移的程序,.net最适合了,甚至几个wizard就搞定了,而java需要把好多事情都考虑进去(最终体现在若干个配置文件里面),累死人。但是,翻过来,一旦需要tuning,或者进行迁移的时候,.net甚至可能会找不到改配置的地方。两个都有蛋疼的地方。

    引用地狱门神:
    .Net的自动构建脚本很简单,只要在sln的文件夹下放个这种批处理文件就行了。

    PATH %SystemRoot%\Microsoft.NET\Framework\v4.0.30319;%PATH%
    MSBuild /t:Rebuild /p:Configuration=Release
    pause

    Ant的自动构建还要单独下载Ant的软件包,感觉要是能自带到JDK什么的里面就好了。不过也是Java的生态环境太松散,参差不齐。

    maven更爽一点,dependency管理更轻松,类库自动下载甚至可以自动版本升级。这点上vs还差很多
     回复 引用 查看   
  26. #35楼 楼主的转变挺大[未注册用户]2011-06-28 19:28
    引用横刀天笑:
    @Leepy
    不想谈哪个平台好,哪个平台坏,这是个非常有争议的话题。
    只想说说这一年我开发Java的感受

     回复 引用   
  27. #36楼 JasenKin      2011-06-28 19:35
    横刀天笑,原来你在ThoughtWorks中国啊。。。
     回复 引用 查看   
  28. #37楼 空明流转      2011-06-28 19:39
    如果你用C++,就会发现这些“困难”都是bullshit。。。
     回复 引用 查看   
  29. #38楼 双鱼座      2011-06-28 19:55
    引用无拘无束:
    @Leepy
    我觉得LZ说的不错,你很肤浅。再多修炼一下把。

    楼主说的非常好,不过Leepy说的也很有深度。反而“肤浅”这个词我觉得更适合你。
     回复 引用 查看   
  30. #39楼 jason-lee      2011-06-28 23:04
    看了android的代码,一个activity 几千行 全是匿名内部类.
     回复 引用 查看   
  31. #40楼 刘江北      2011-06-29 08:01
    语言诚恳,分析比较到位,让人看着心境很平和就已经很不错了
     回复 引用 查看   
  32. #41楼 jifsu      2011-06-29 08:25
    相比老赵的偏执,楼主还是比较中肯的.
    看来最近博客园转性了,很少出现谩骂诋毁其他平台的帖子.好现象啊
     回复 引用 查看   
  33. #42楼 牦牛      2011-06-29 08:33
    引用jifsu:
    相比老赵的偏执,楼主还是比较中肯的.
    看来最近博客园转性了,很少出现谩骂诋毁其他平台的帖子.好现象啊

    老赵表示: 躺着也能中枪啊。。。
     回复 引用 查看   
  34. #43楼 jifsu      2011-06-29 09:00
    @牦牛
    呵呵,不是枪,其实看老赵文章很有收获. 只是我的感觉他比较偏执!~~
     回复 引用 查看   
  35. #44楼 小嬡      2011-06-29 09:01
    引用空明流转:如果你用C++,就会发现这些“困难”都是bullshit。。。


    3年C#开发经验看C++的项目表示非常的吃力
     回复 引用 查看   
  36. #45楼 dodohua      2011-06-29 09:05
    我也是刚转java一年,虽然写法上像楼主说的停留在c#2.0,不过java的开源项目确实很给力,虽然大多都是国外地,但也因为这样,英文阅读水平几乎是直线上升。
    总体感觉,java比c#入门难一点
    1.没有msdn那样齐全的中文技术文档
    2.众多开源框架多到泛滥的程度,甚至连IDE也多如牛毛,api文档各异,没有固定的标准,着实难入手了点
     回复 引用 查看   
  37. #46楼 Mr.King      2011-06-29 09:09
    我不同意你说的.net的同学代码不规范。
    规范是不分语言的,写垃圾代码的是个人,而且和所在公司或者团队的环境有关。
     回复 引用 查看   
  38. #47楼 Terry Sun      2011-06-29 09:18
    "可我亲爱的.NET同行们,大多在这方面很随意。一个方法200行不算长,甚至一个功能就放到一个方法里实现了。我看呀看呀,都看不到尽头。更别说类职责单一了"

    不得不说培训机构使相当一部份人的代码成了积木
     回复 引用 查看   
  39. #48楼 无拘无束      2011-06-29 09:38
    @双鱼座
    不说了 不说了。公司不让上QQ 了 很烦躁。
     回复 引用 查看   
  40. #49楼 Mr.CT[未注册用户]2011-06-29 09:58
    对JAVA认识不够,别胡说。
     回复 引用   
  41. #50楼 狮子座的小白羊[未注册用户]2011-06-29 10:12
    .NET与JAVA就像开汽车,一个自动档,一个手动档。
     回复 引用   
  42. #51楼[楼主] 横刀天笑      2011-06-29 10:33
    @Mr.King
    对,很赞同你这个观点,所以我说这是我从面试中看到的现象~~不能以偏概全
     回复 引用 查看   
  43. #52楼[楼主] 横刀天笑      2011-06-29 10:35
    @Mr.CT
    嗯,我只做过一年Java,所以肯定认识不够,或许以后会写出更深的感受。
     回复 引用 查看   
  44. #53楼[楼主] 横刀天笑      2011-06-29 10:35
    @无拘无束
    不建议评论中带有对人不对事的指责
     回复 引用 查看   
  45. #54楼 万雅虎      2011-06-29 10:50
    好在 工作后 就摆脱 了 .服务器控件的拖拽
     回复 引用 查看   
  46. #55楼 softwarelanguagebs[未注册用户]2011-06-29 11:02
    引用狮子座的小白羊:.NET与JAVA就像开汽车,一个自动档,一个手动档。

    说的太对了
    继续.net ,同时学习android的 飘过……
    我觉得现在智能手机开发才是未来的趋势, 原本打算也搞搞javaweb,现在开来没那么多精力,只会简单的javaweb就可以了
     回复 引用   
  47. #56楼 softwarelanguagebs[未注册用户]2011-06-29 11:03
    重点是asp.net +wp +android 没太多的精力啦
     回复 引用   
  48. #57楼 无拘无束      2011-06-29 11:05
    @横刀天笑
    恩,因为最近在转安卓底层和objetive-c 想搞搞IOS。
    所以不愿意看到有人拿平台说事,JAVA能做的.net也能做,.net能做的java 一样能做。两者没可比性。
    顺便收回我上面说的把。不好意思。天热
     回复 引用 查看   
  49. #58楼 无拘无束      2011-06-29 11:15
    @Leepy
    不好意思,不该那么回答你。
    呵呵。。其实这个比较有争议。
     回复 引用 查看   
  50. #59楼 Evil-Steve      2011-06-29 11:17
    @Rio&#183;Yang
    有道理 更想学下 C++ 然后回头再学下 别的!感觉效果能更好!
     回复 引用 查看   
  51. #60楼 秋色      2011-06-29 11:39
    引用空明流转:如果你用C++,就会发现这些“困难”都是bullshit。。。

    如果你熟悉了c++你会另有感觉。c++里除了指针没别的了。
     回复 引用 查看   
  52. #61楼 麻将我会      2011-06-29 11:51
    我在学wp7的飘过
     回复 引用 查看   
  53. #62楼 梅川☆内酷      2011-06-29 12:35
    这么多人从。net转去java
    纠结。。。。。。。。。
     回复 引用 查看   
  54. #63楼 空明流转      2011-06-29 12:51
    引用小嬡:
    引用空明流转:如果你用C++,就会发现这些“困难”都是bullshit。。。


    3年C#开发经验看C++的项目表示非常的吃力

    我就是这个意思,相比于C++的困难,别的语言的“困难”统统都是bullshit。
     回复 引用 查看   
  55. #64楼 空明流转      2011-06-29 12:53
    @秋色
    显然我对C++还是比较熟悉的。。。
     回复 引用 查看   
  56. #65楼 Kevin Wei      2011-06-29 13:12
    "微软在这里扮演着保姆的角色。在你很小的时候,保姆能够在一定程度上保护你,免你受到伤害。但是你不能永远生活在保姆的怀抱里,如果你想变得更强大你需要自己独自一人出去看看",

    楼主,您这个比喻老霸道了!
     回复 引用 查看   
  57. #66楼 草根辉煌      2011-06-29 13:20
    喜爱JAVA,喜爱开源。
     回复 引用 查看   
  58. #67楼 晓鹏      2011-06-29 13:29
    挺好奇是什么样项目才要求JAVA
     回复 引用 查看   
  59. #68楼 Master zhu      2011-06-29 13:45
    跟楼主一样,我也是从.net到java不到一年的时间。做了java,代码更严谨点了。还有就是看到java的异常立刻知道错误在哪里,而.net有时候就不是这个样子了。你可以封装的再严实点吗?
     回复 引用 查看   
  60. #69楼 pcenshao[未注册用户]2011-06-29 15:13
    引用狮子座的小白羊:.NET与JAVA就像开汽车,一个自动档,一个手动档。

    哈哈,准确极了
     回复 引用   
  61. #70楼 ing....[未注册用户]2011-06-29 15:50
    漂过
     回复 引用   
  62. #71楼 Jeffrey Zhao      2011-06-29 18:45
    引用Master zhu:跟楼主一样,我也是从.net到java不到一年的时间。做了java,代码更严谨点了。还有就是看到java的异常立刻知道错误在哪里,而.net有时候就不是这个样子了。你可以封装的再严实点吗?

    表示没法理解。说封装,Java绝不比.NET少。
     回复 引用 查看   
  63. #72楼 Jeffrey Zhao      2011-06-29 18:47
    引用beilaozai:楼主写的不错 其实每一个语言都有自己的优点和缺点 我觉得老是拿两门语言来比较的话很无聊 存在即是合理的 。希望楼主以后有时间 可以写出好的技术文章 呵呵。

    先把“存在即是合理”这句话的含义搞清楚再用吧……
     回复 引用 查看   
  64. #73楼 niming[未注册用户]2011-06-29 21:20
    同样是从.net转到java的,相信楼主再研究一下java(不仅限于语言),会有另一番收获。一起加油!
     回复 引用   
  65. #74楼 东东      2011-06-29 21:56
    其实语言和平台仅仅是一种工具而已,最近基于Silverlight做了一个二次快速应用开发平台,对于企业应用,至少提高1/3至1/2的开发效率,而且可以快速迭代实现用户的需求。
     回复 引用 查看   
  66. #75楼 _马儿      2011-06-30 11:08
    两者都只是工具而已!
     回复 引用 查看   
  67. #76楼 飞机123      2011-06-30 11:12
    .net开源吗?没开源的话。两个如果差距不大的话,我会选容易明白的。
     回复 引用 查看   
  68. #77楼 Master zhu      2011-06-30 23:25
    @Jeffrey Zhao
    .net比java好 好 好!
     回复 引用 查看   
  69. #78楼 卒子      2011-07-02 13:37
    不同意Java的配置是个问题
     回复 引用 查看   
  70. #79楼 青春煞人      2011-07-03 16:31
    我们C#和java是一起学习的,但我在学习上更偏重于C#。因为和老师的能力有关外,还有一个重要的原因是,java的编译器相比C#太难用了。java刚开始的环境配置不说,我们用记事本写程序写了一个多月,太痛苦了。本来在C#中一分钟可以达到的,但在java记事本编写中要10分钟,如果程序大小写有误,或代码手误,时间还会更长。
     回复 引用 查看   
  71. #80楼 DreamZero      2011-07-04 11:05
    .net正在自学Java,想转java中...
     回复 引用 查看   
  72. #81楼 蓝之风      2011-07-05 09:09
    语言层面都差不多,关键还是编程思想,思想太重要了,语言只是个工具而已,还有就是编程人员的素质,主要是看谁编写代码
     回复 引用 查看   
  73. #82楼 wangluxi      2011-07-05 11:22
    楼主的感悟客观公正,值得学习和了解
     回复 引用 查看   
  74. #83楼 ice6      2011-07-06 09:37
    谢谢,看了这篇文章觉得应该把Java作为我的第3语言,写点儿东西了。
     回复 引用 查看   
  75. #84楼 ice6      2011-07-06 09:39
    @地狱门神
    引用地狱门神:
    .Net的自动构建脚本很简单,只要在sln的文件夹下放个这种批处理文件就行了。

    PATH %SystemRoot%\Microsoft.NET\Framework\v4.0.30319;%PATH%
    MSBuild /t:Rebuild /p:Configuration=Release
    pause

    Ant的自动构建还要单独下载Ant的软件包,感觉要是能自带到JDK什么的里面就好了。不过也是Java的生态环境太松散,参差不齐。

    谢谢你这段脚本
     回复 引用 查看   
  76. #85楼 seasalt[未注册用户]2011-07-06 22:04
    我不认为这是一篇确实公平的评论,我也很怀疑作者在Java方面的水平,一年,老实说,你应该谦虚点
     回复 引用   
  77. #86楼[楼主] 横刀天笑      2011-07-06 22:15
    引用seasalt:我不认为这是一篇确实公平的评论,我也很怀疑作者在Java方面的水平,一年,老实说,你应该谦虚点

    老是说我没有带任何感情色彩的评论,根本没有说java的好与坏,只是说说我所看到的东西~~
     回复 引用 查看   
  78. #87楼[楼主] 横刀天笑      2011-07-06 22:19
    引用seasalt:我不认为这是一篇确实公平的评论,我也很怀疑作者在Java方面的水平,一年,老实说,你应该谦虚点

    还有,如果你怀疑水平,大可以就文中所有观点进行逐条辩驳。我很不喜欢这种用年限然后来怀疑别人水平的说法(当然,我并不认为我的水平怎么样,我是个菜鸟~~)
     回复 引用 查看   
  79. #88楼 蛙蛙王子      2011-07-07 10:19
    配置文件,你能再多一点么
    应该改成
    配置文件,你敢再多一点么
     回复 引用 查看   
  80. #89楼 sunjing      2011-07-07 17:33
    举个例子:我需要一个排好序的用户列表,排序的依据是用户名字。很简单的需求对不。自然的代码肯定是这样的:

    IList<User> users = …

    users.OrderBy(user => user.Name);

    而如果用Java实现同样的功能你可能要这样写:

    List<User> users = …

    Collections.sort(users,new Comparator<User>() {
    public int compare(User left, User right) {
    return left.getName().compareTo(right.getName());
    }
    });

    楼主这个例子都举得很可笑 就算你调用users.OrderBy(user => user.Name); 业务代码也要写吧,难道不就是Collections.sort()嘛。。对于这个排序,就是设计到面向对象的编程和设计模式,楼主一年的工作经验 体会确实是片面的 对于语言都有各自的优势和坏处,个人觉得一年体会,应该是很肤浅的,不排除有高手
     回复 引用 查看   
  81. #90楼 sunjing      2011-07-07 17:34
    @横刀天笑
    哈哈 所有楼主太片面啦
     回复 引用 查看   
  82. #91楼[楼主] 横刀天笑      2011-07-07 20:14
    引用sunjing:
    举个例子:我需要一个排好序的用户列表,排序的依据是用户名字。很简单的需求对不。自然的代码肯定是这样的:

    IList<User> users = …

    users.OrderBy(user => user.Name);

    而如果用Java实现同样的功能你可能要这样写:

    List<User> users = …

    Collections.sort(users,new Comparator<User>() {
    public int compare(User left, User right) {
    return left.getName().compa...

    首先,我不明白你说什么,这里的OrderBy就是业务代码,还要写什么?
    第二,请认真看清楚我的文章内容,我是做java一年。
    我倒是觉得你评论我的文章太片面了
     回复 引用 查看   
  83. #92楼[楼主] 横刀天笑      2011-07-07 20:31
    @sunjing
    还有,我也不明白一个Collections.sort涉及啥面向对象设计模式。。。而且,即使涉及设计模式又如何?代码易读性差就是易读性差,你用完所有设计模式,如果可读性差它还是差。
    另外,业界也已普遍认为,设计模式是那些表达力不强的语言的一种妥协。
     回复 引用 查看   
  84. #93楼 为乐而来      2011-07-18 15:19
    .net越来傻瓜化了..所以要求不是很高..一些人越来就不注重了..
     回复 引用 查看   
  85. #94楼 yongfa365      2011-07-23 15:21
    引用不过我却觉得Visual Studio这几年已经离开发人员越来越远了,好像他要搞什么全生命周期的软件开发工具。所以不但臃肿,而且对开发人员并不是很友好


    VS2010
    对于持续集成、自动生成、自动测试、自动发布、需求管理及跟踪,任务分配,bug管理,以及相关的报表展示、与Office的密切无缝集成等,做出了多大的贡献,你说的臃肿,是因为打开慢?运行慢?不方便使用?如果是这些,只需要简单的提升硬件性能便可搞定,但他带给开发人员及管理人员的便利,以及思想上的变化却是不可小觑的。

    从Dreamweaver转向VS2008时很不习惯【写HTML】,但使用一段VS2010后,你再使用Dreamweaver,你会发现Dreamweaver太初级了,VS2010智能提示,代码片段让你的编码速度飞速提高。

    关于快捷键,一般使用的也就那几个,就算是要敲三下,时间长了也记住了。

    VS2010里的插件功能,从网上找一个扩展插件变的很容易,编写插件也很便捷,就连我这样的水平都曾编写过一个插件:http://visualstudiogallery.msdn.microsoft.com/a7f75c34-82b4-4357-9c66-c18e32b9393e

    综上所述VS比你写出来的还要好
     回复 引用 查看   
  86. #95楼[楼主] 横刀天笑      2011-07-23 19:20
    @yongfa365
    持续集成,你说的是那个TFS么? 真的不好用,这不是一个人这样说。
    需求管理和跟踪,任务分配,bug管理,这个跟写代码的我有什么关系,我需要的是能够酣畅淋漓的写代码。

    或者你去体验一下Intellij Idea?
     回复 引用 查看   
  87. #96楼 yongfa365      2011-07-23 21:46
    引用横刀天笑:
    @yongfa365
    持续集成,你说的是那个TFS么? 真的不好用,这不是一个人这样说。
    需求管理和跟踪,任务分配,bug管理,这个跟写代码的我有什么关系,我需要的是能够酣畅淋漓的写代码。

    或者你去体验一下Intellij Idea?


    是TFS 2010时有一些bug,到sp1时,已经改善,不同版本表现不一样,也许TFS2010以前的版本确实有问题。TFS2010上面还带可以设置自动发布的,我们常用的是:6个团队项目相互关联,发布时有dev,test,uat,release,这些只要设置好相关生成加上发布脚本,最终可以实现:
    提交代码时只有服务器生成成功后才能签入,这样保证了一个人的编译不通过的代码不会影响到其他人。想发布哪个版本,只要简单的右击,添加到队列,TFS便会自动将其发布到对应网站。

    需求管理和跟踪,任务分配,bug管理,如果非要说跟编码没关,我也承认,但我更希望我编码时打开VS,查看我的任务时打开VS,任务分配有误时我可以立即将他授权给别人解决,并且接收人也可以立即接收到相关邮件,如果应用的好,提交代码时关联各类工作项,有更强的追踪作用,并且这些也不算是臃肿,最多是你没用到而已,这此可比单独搭建bug平台,需求平台,或离线的一堆相关应用好太多了。

    最后,我也承认TFS初期使用时却实感觉很麻烦,或问题很多,但研究的越深你会越发现他很实用。

    至于Intellij Idea,没用过,不好评论。
     回复 引用 查看   
  88. #97楼 小华2011      2011-07-26 14:17
    学习了,还是菜鸟……
     回复 引用 查看   
  89. #98楼 zym2002cn      2011-07-29 08:44
    写的不错,我也是做.net的,最近也是因为需求准备接触java,谢谢你的文章。
     回复 引用 查看   
  90. #99楼 土豆烤肉      2011-08-02 11:45
    楼主用用TFS2010 + VS2010试试咯,装个RESHARPER
    生产力强很多喔
     回复 引用 查看   
  91. #100楼 刘荣华![未注册用户]2011-08-03 22:38
    哈哈哈哈!
    刀刀被拍砖咯。
    @sunjing这哥们拍的太狠了“年轻人。一年工作经验,路还很长啊”哈哈哈哈。太可乐了~!~!

    湖南湖北人喜欢吃小炒,而且还是炒的又香又辣的那种。
    西北人喜欢吃面食。拉面,拉条子,刀削面,泡馍。。。。。
    东北人喜欢一大锅一大锅炖了,如果再蘸点儿酱那就相当满足了。
     回复 引用   
  92. #101楼 冥祭      2011-09-19 15:58
    哈哈,感觉楼主说得还是挺公正的!顶一下!
     回复 引用 查看   
  93. #102楼 第十一本书[未注册用户]2011-10-03 09:19
    十分赞成博主的这篇文章,因为我也是先用C#,现在才初学JAVA的。

    妙:看Java的代码很容易让你只见树木,不见森林。因为为了实现某个功能,你需要太多的支撑代码,而实现功能的关键代码却迷失了。
     回复 引用   
  94. #103楼 阿雄少      2011-10-09 17:05
    博主有没有用过TFS2008的单元测试,自动构建,自动部署
     回复 引用 查看   
  95. #104楼[楼主] 横刀天笑      2011-10-09 21:42
    引用阿雄少:博主有没有用过TFS2008的单元测试,自动构建,自动部署

    用过,不过说实话太难用了,后来放弃了。。
     回复 引用 查看   
  96. #105楼 碎心狐狸      2011-10-21 12:05
    个人表示十分痛恨spring的配置所以一年后转.net了.
    而且记得当初spring有N多民间版本,大家都很喜欢把配置文件写的很复杂,貌似只有自己使用的版本配置够复杂才是王道,而且那时候面试的时候java面试官最喜欢的就是XXXXX报出一串的框架,然后问你会几个,对此表示很纠结,更纠结的是进了公司貌似好多框架都不用只是为了显示下面试官自己懂的很多.
     回复 引用 查看   
  97. #106楼 Java_cx      2011-10-25 01:13
    @青春煞人
    这个eclipse帮你实现,不是问题
     回复 引用 查看   
  98. #107楼 ischeck[未注册用户]2012-01-04 15:58
    哥,你的blog在chrome浏览器里面跑位
     回复 引用   
  99. #108楼[楼主] 横刀天笑      2012-01-05 12:26
    @ischeck
    额。。。我的也是chrome,没跑啊。。
     回复 引用 查看   
  100. #109楼 菜地里飞过滴鸟[未注册用户]2012-02-08 18:06
    这样的文章很有意义,大虾们滴评论也很让人受益!
     回复 引用   
  101. 评论共2页: 上一页 1 2 
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2091803 YSVGrSCmdK0=