V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
noli
V2EX  ›  程序员

我为什么后来远离了 Java

  •  
  •   noli · 2015-05-10 01:55:36 +08:00 · 34140 次点击
    这是一个创建于 3286 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的编程生涯:

    1. 小学是Logo
    2. 初中是Pascal
    3. 高中是自学JSP和Javascript,为了写论坛
    4. 大学软件工程,教的还是Java,但老子自学C++去了(这简直是我人生中最成功的决定之一)

    在大学那会儿基本上是主动放弃Java了,原因之一当然是已经对语言很熟了,但是觉得没有必要再去碰延伸开去的东西,例如SSH啊EJB啊什么的。虽然当时Java还是非常红的,Sun还很强,Eclipse 也是当时最强的IDE之一。

    当时是看见这几件事情,决定放弃Java的:

    1. 大公司例如银行、保险、金融等等都招Java,为啥,因为他们的IT团队都很大随时有人走,随时要新人接着上。这说明了Java 很适合大团队管理,因为写法超死板,框架太强力,不需要个人发挥。

    2. 我大学时的同学就算以前没有编程,只要肯学,学Java 还是可以很容易追上我当时的水平(你要对我高中时肯自学JSP的那种劲头有信心),甚至后来都可以跟我一样帮大学老师做项目了。这说明了什么:用Java的核心竞争力不是经验,你写得越多,你的经验优势就越小。

    3. 当我开始想学习Unix,想学习编译器的时候,虽然我甚至因为Java的原因学习了一下 ANTLR,但我发现用Java写这些东西的代码时,实在距离我想表达的,我所知道的东西太远了:尤其是对比 C++ Template 的表现力的时候。

    所以现在我看见有人觉得Java好,或者反驳某些语言炮的时候,我都跟着叫好。

    我不应该写这个帖子的。

    226 条回复    2015-06-28 17:05:29 +08:00
    1  2  3  
    monsabre1
        201
    monsabre1  
       2015-05-13 19:15:32 +08:00
    还见过做ios应用的小公司
    用了swift号称比旧oc多好多好的

    这东西更加适合游戏而不是精品应用
    swift这东西好写不好读 更加适合业余个人不适合团队开发
    swift只有开unsafe开关才能接近c的速度 不开慢1000倍
    就算你全[-Ofast]增加崩溃的机会 按钮能提高多少速度?
    你还得用oc写的框架
    tmd cocoa框架写了10年 你当明天就变swift的啊
    oc多少资源拿来就用sample code都不用改 你维护接口改程序都是一堆成本
    oc的数学逻辑算法迁移到javascript c++java几乎无需改动 方便未来的迁移

    最后swift oc混编 维护两种语言 白增加了成本

    无它 老板不懂或者脑残

    以前看新闻携程搞内部云 不安全被黑被盗窃信用卡资料
    你这应用公司和云有什么关系?用就是了 和搭建IAAS毛关系没有
    一看这新闻就知道背后有个所谓技术大牛在乱搞 拿工资还乱来

    京东云也是 现在呢?关了
    想搞业务直接买收购就是了

    yahoo中国那300人真有价值估计30人不错了
    写推荐算法?app? 其实这个本科生学学也能搞 哪用得了300人?
    老外也不傻 你看你写出hadoop人家不八抬大轿抬你到美国
    monsabre1
        202
    monsabre1  
       2015-05-13 19:21:02 +08:00   ❤️ 3
    “面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而其还有整个丛林。” — Joe Armstrong(Erlang语言发明人)
    monsabre1
        203
    monsabre1  
       2015-05-13 19:58:23 +08:00
    oo这东西其实适合有ui的场景
    你无法想像

    命令行print 出一个按钮 还能按

    嘿嘿
    monsabre1
        204
    monsabre1  
       2015-05-13 20:38:54 +08:00
    很久以前turboc也能写ui
    但是超级麻烦
    后来发明了oo

    所以有UI oo更优 oo和ui密切相关
    后台无UI 多范式都行 估计这是java被人喷的原因之一

    java的单继承 接口其实是和objectivec学的 这方面说objectivec是鼻祖

    有UI oo更优 有oo必有继承和覆盖 可视化目前没有比oo更好的方案了

    一涉及ui 多范式最终还是离不开oo

    (你发明了更好的方法请告诉我)
    monsabre1
        205
    monsabre1  
       2015-05-13 20:59:34 +08:00
    多自己思考就好


    我个人认为swift这个表说多是swift的编程效率 而不是速度 apple也玩坑 哈哈
    http://programmers.stackexchange.com/questions/242816/how-can-swift-be-so-much-faster-than-objective-c-in-these-comparisons
    FrankHB
        206
    FrankHB  
       2015-05-13 23:39:57 +08:00   ❤️ 2
    @noli

    这里的“工具”,如果指的是抽象的“手段”,那么几乎就是废话——差不多什么东西都能当工具。
    如果是具体的“器具”,那也不合适,这个之前已经提过。
    于是“语言就是工具”论,我就当是民科理论。从建设性来说鼓吹这种论调的还不如李煌老湿,后者好歹能有些娱乐价值。

    破事有很多,再提些影响较大的。

    首当其冲,想当然和惯性。
    绝大多数人学习语言的目的往往是“会用”。这没问题。问题在于,不知不觉有些人就不考虑前提以为处处“存在就是合理”了,而不是联系实际需求,想想到底其中能有多少是有意为之的,哪些又是对现实的妥协。
    比如说,越接近自然语言的设计就一定更“易用”吗?
    比如说,越接近底层的,抽象特性越贫乏的语言,实现起来性能就一定能更好吗?
    比如说,写出来的代码看起来干净,把类型都写清楚,没那么多乱七八糟的符号,就一定是更“清晰”吗?
    只是不求甚解也罢了,然而这些问题实在太容易自以为是了。
    这种思路这带来了严重的副作用,例如,阻碍现有语言的一些改进。
    举个Java的例子。
    http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4459053
    十多年前就有人提议过,结果呢……呵呵呵。
    有些时候,语言的设计者自己就不够清楚,导致犯下的低级错误影响更坏——特别地,被无知者捧臭脚。
    不过好在大多数语言设计者还是相对理性一些……于是结果就是蠢主意扎堆在少数的语言上了,这种语言的用户就是冤大头(虽然也有部分是活该)。
    仍然是Java的例子。前无古人后无来者的checked exception,别的语言有好意思抄的么。
    (嘛,据说James Gosling还想取消extends呢。林林总总加起来,说是偏执狂也不算冤枉吧。)

    然后,如果一句“那么多的共同思想”就能轻描淡写把某些人打发走,那也太便宜了。
    这方面仍然缺乏一些系统化的理论。有很多东西就是因为各种原因鸡同鸭讲,因此有时被逼不得不讨论清楚以免误会。
    比如,“强类型”和“弱类型”这种普遍没有清晰边界的东西,不围绕具体例子是几乎没法保证知道别人说的是啥的。
    再如,都说面向对象,那么是不是都怀疑过为什么“对象”里非要窜出个“类”呢?
    其实照OO之父的观点,根本就不是那么回事——重点是对象和消息传递,方法乃至类都是实现方式,顶多这种只能算一种风格(class-based OO)。具体点说,应该是Simula→C with Classes→中古C++→Java等等这样传承下来的。
    现实却是似乎有不少见识拙计的,就拿这个偷换概念了,却不知道所谓的prototyping也能毫不含糊地实现OO,反过来鼓吹卖弄什么pure OO,甚至还有什么“继承”“封装”“多态”都好意思拿来当OO的定义了……笑死人。(……敢区分OOP和OOAD么?)
    这种可笑的误会如果非要说客观因素的话,恐怕就是缺乏交流导致的——严格意义上的“面向对象”这个概念因为这般鸡同鸭讲,和被废了差不多。
    扯到这里倒是正好发现还能发散一些东西(虽然可能在c2.com之类的地方都已经吐槽腻的常识)来黑:无论是继承封装多态,还是SOLID这些所谓OO五原则,其实就没一个是OO的专利。
    只挑其中和PLT最相关的两个来讲。
    一是继承,在这些实现方式里面都是作为类型之间的关系,说白了就是一种subtyping,是一种类型之间的严格偏序关系的特例。摊上五原则里表面上最依赖“OO思想”的LSP,在System F里早就玩的溜了: http://typeof.net/2014/m/formation-of-modern-magic--why-functions-are-contravariant-in-the-input-type.html
    二是多态。OO所谓的多态也就是inclusion polymorphism或者subtyping polymorphism,只是真正的多态中出现较晚的一种而已。出现早的呢?比如重载就是一种ad-hoc polymorpism。泛型则是parametric polymorphism。
    大概那些OO语言的设计者对历史也不甚了然,不知道那么些别人早就玩滥的道道,所以就偷懒没明确(这里得承认C++当初也做得不好)。
    于是只会照搬语言教科书以及盲目崇拜的无能者/纯OO厨就只能念歪经了。没法指望他们会创造更方便的能解决问题的设计,反而还得负担科普成本,这凭什么要我干呢?

    嗯,要搞这坨又没特定目标用户(脑残粉也算),做好我不入地狱谁入地狱的思想准备。
    FrankHB
        207
    FrankHB  
       2015-05-14 00:10:00 +08:00
    @monsabre1
    Swift大概还是包括了一些好的设计的,一棍子打死太早了点(即便vendor-specific我不看好市场,又不像Haskell之类的特别能让人开眼值得多说几句)。
    不过虽然Chris Lattner写编译器是高材生,一些人为设计和策略上的taste我也不赞赏。比如刻意曲意逢迎现有类C语言用户把特性命名搞乱,显得殊为不智: http://www.reddit.com/r/programming/comments/35kq2p/the_power_of_swift_enums/
    ——这反倒使新用户更加难以全面了解特性了。
    monsabre1
        208
    monsabre1  
       2015-05-14 00:30:23 +08:00
    @FrankHB

    个人无所谓 马上尝试就好
    中小公司入技术栈 我觉得观察几年再说
    swift 1天就会了
    迁移也不是问题
    monsabre1
        209
    monsabre1  
       2015-05-14 11:41:47 +08:00
    monsabre1
        210
    monsabre1  
       2015-05-14 12:23:22 +08:00
    @FrankHB

    你这段我只能看懂30%

    确实很多还不知道
    lovedebug
        211
    lovedebug  
       2015-05-14 13:21:11 +08:00
    有什么好吵的。 看看stackoverflow和github上哪个语言的使用量就差不多了。
    一个语言即使再好曲高和寡注定孤芳自赏。只有变成生产力才是王道。
    Java也在进步,连微软都开源了。 我发现自己嫌的蛋疼,给这种无聊帖子留言。
    只有机器语言可以改变世界 哈哈哈
    daiwofei
        212
    daiwofei  
       2015-05-14 14:07:07 +08:00
    V2EX 已经变成了长篇现代都市狗血商战言情小说的连载站点了么?
    monsabre1
        213
    monsabre1  
       2015-05-14 14:16:27 +08:00
    @lovedebug 这是思辨 思辨出真知

    上面这些很多大学老师也不懂 所以教的学生糊涂蛋也多
    lovedebug
        214
    lovedebug  
       2015-05-15 13:35:40 +08:00   ❤️ 1
    @monsabre1 其实讨论到最后 变成了攻击了, 离开了原来的论题. :)
    heian0224
        215
    heian0224  
       2015-05-15 13:39:26 +08:00
    @monsabre1
    看了你的回复我才感觉到了程序语言的生动性。而我在这扯皮的银行软件公司待着会失去对于技术的追求和思辨的能力的......我一直都觉得学习历史是学习一门知识的入门,不知道你有没有关于编程语言历史的书籍推荐?
    jugg
        216
    jugg  
       2015-05-15 15:52:09 +08:00
    @monsabre1这话说得太好了,让我想起了context
    jugg
        217
    jugg  
       2015-05-15 17:20:51 +08:00
    PHP是最好的语言
    来打我
    monsabre1
        218
    monsabre1  
       2015-05-15 22:02:08 +08:00
    @heian0224
    抱歉
    这些都是我自己琢磨的 也不一定都对
    但是我知道简单就是美

    从来没教过别人
    但是实在忍无可忍 写了python java的dosomething project
    http://www.zhihu.com/question/27969262/answer/47307870?group_id=582522509233156096

    50行的东西为何要写10章?一大坨
    monsabre1
        219
    monsabre1  
       2015-05-15 22:10:47 +08:00
    @heian0224 有种多范型语言能不是oo风格写ui操纵ui

    谁啊 有人爱有人恨的大javascript

    javascript 是最好的语言 哈哈
    monsabre1
        220
    monsabre1  
       2015-05-15 22:14:12 +08:00
    android app 用oo的java开发
    ios app 用oo的objectivec开发
    win app用多范型的js/winjs开发(性能和。net/c#的一样)
    heian0224
        221
    heian0224  
       2015-05-17 15:59:37 +08:00
    @monsabre1 哈哈JavaScript确实让人又爱又恨。
    miki6180
        222
    miki6180  
       2015-06-28 14:37:57 +08:00 via iPhone
    本来我是比较喜欢C++的。但也不知道楼主在瞎BB什么。到底是做过了几个厉害的轮子,依我看,现实生活中越是失败的人,越习惯通过这种方式找存在感。
    noli
        223
    noli  
    OP
       2015-06-28 14:41:30 +08:00
    @anonysecurity 连GCD 里面的线程怎么启动出来的都不知道,CFRunloop 也不知道……就别出来BB了……
    miki6180
        224
    miki6180  
       2015-06-28 14:48:08 +08:00 via iPhone
    @noli 我没说我厉害,但觉得你煞笔,搞得所有人都是错的,就你屌炸天试的。觉得煞笔怎么说都会跟你争论,逃~你继续哈,乖。
    miki6180
        225
    miki6180  
       2015-06-28 15:02:09 +08:00 via iPhone
    @noli 哈哈,我没说自己牛逼丫。这个月刚学iOS,没怎么搞过C++,你要真牛逼丫,去跟我师兄vczh切磋,切磋,不知道是谁,自己博客园搜索vczh。我只是觉得你是个生活中的煞笔,你继续,乖。
    noli
        226
    noli  
    OP
       2015-06-28 17:05:29 +08:00
    @vczh 这人 @anonysecurity 说是你师弟?
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   6375 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 02:13 · PVG 10:13 · LAX 19:13 · JFK 22:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.