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

我为什么后来远离了 Java

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

    我的编程生涯:

    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  
    hepin1989
        101
    hepin1989  
       2015-05-11 10:44:06 +08:00
    @noli 其实你是故意的,包括你的措辞。

    java我觉得做的比较好的一点是,演进挺平滑的,比如你说的并发和异步支持,都是慢慢的以library的形式出现的,也就是加了词汇,而非语法。

    NIO也是后来才有的,以及并发包。新的lambda在最好的情况下也是以前基于callback的5倍性能,并且还会提升。以及java9的模块化,以及java10的值类型,这些都能够看出,这个语言在演进上还是一步一个坎的。

    不管怎么说我觉得java还是不错的,当然其他的语言也要多学习学习,每个人的工作范畴不一样,用到的工具不一样嘛,什么顺手用什么最好,你可以看看rust,我又给rust免费做推广了。
    lvfujun
        102
    lvfujun  
       2015-05-11 11:19:28 +08:00
    @djyde 你觉得 Android 选择 java是对的?
    那你知不知道Android要放弃java 专用自已开发的语言?
    ybak
        103
    ybak  
       2015-05-11 11:38:50 +08:00
    关键是,你是谁?你没做出成就前,没人会关心你用Go,还是Lisp, 语言的争论毫无意义.
    noli
        104
    noli  
    OP
       2015-05-11 11:40:25 +08:00
    @hepin1989

    其实我还有另外一个看法,其实 NodeJs 也是很烂的工具,当然这很大部分是因为 Javascript 本来就是一个意外,发明 Javascript 的人根本就没有预料到当初写 HTML 页面效果的半吊子程序员要跟写服务器的人抢饭碗。

    为什么这么说呢,因为 Nodejs 出了名的回调式写法使得代码极度难以维护和理解。尽管县级 ES6 还有各种库加入了 promise future 这种把异步嵌套变为同步流的库,但是 promise 的传染性还是会让代码非常难看。

    所以我认为 Nodejs 只是解决了“完成”写高性能服务器的这一部分工作。
    在我看来 NIO 也是同样的东西,也只是一个完成了高性能服务器基础能力的东西。

    一个语言能够称为好的编程语言,是因为他能够很好地解决编程问题。
    什么是一个编程问题,就是编程思想与现实实现之间的妥协问题。
    像 nodejs 和 NIO,都是只解决了做不做到,没有解决能不能做好。

    做到不做到,汇编是全能的能够做到任何计算机应该做到的事情。
    但是汇编不能把事情做好,因为它没办法表达更高层次的概念,也就是高级编程思想的实现上,它是无能的。

    在目前主流 OS 提供的 API 上实现一个高性能服务器,实际上是一个状态机如何实现的问题。这个很长,要另文解释。

    我为什么在之前的回复里面特意提到 Coroutine 以及在很长一段时间里 Java 都不会有好用的 Coroutine 库。因为像 Coroutine 这种70年代就已经有的概念,并且也是解决状态机重复进入这类问题的利器,Java 居然原生无法支持。

    这就很打脸了,Java 不是高级编程语言吗?为什么这种抽象能力都无法提供?只能用很低级很啰嗦的方式来实现?连 C 语言在解决这个问题上都可以比 Java 优雅简洁许多。

    你说 Java 演进平滑。我就以 NIO 来简单说明为什么在这一点上它是不平滑的。

    假设我在Java 提供 NIO 以前实现了一个 RingBuffer,那么这个 RingBuffer 能不能用在 NIO 上呢?答案是不能的,因为 NIO 的高性能实现依赖于它自己的另一套 Buffer。 你说这是什么道理?纯粹就是 Java 的解决能力天生不足。当 Java 致力于为傻瓜程序员提供一个理想国,实际上也扼杀了程序员回到人间的能力。

    当然你可以说,你应该设计一个 interface 来抽象这个 RingBuffer 的实现,然后把 NIO 的 Buffer 注入到 这个 interface ,blah blah blah…… 毫无疑问,这又要增加解决问题需要依赖的工具。所以我说 Java 解决问题的方式啰嗦,把简单问题复杂化,天花龙凤很花巧但是能力平庸就是这个意思。
    zenliver
        105
    zenliver  
       2015-05-11 12:18:24 +08:00   ❤️ 2
    楼主小学就开始接触编程, 按照正常发展趋势, 大学应该是大牛行列了,,,现在竟然还在纠结语言好坏,,,伤仲永啊
    riaqn
        106
    riaqn  
       2015-05-11 12:21:47 +08:00
    @zenliver 为什么纠结语言好坏就不是大牛? Linus喷C++, 就不是大牛了?
    hepin1989
        107
    hepin1989  
       2015-05-11 12:28:28 +08:00
    你看下Bytebuffer就知道了,别人就不让你继承好不好,而且我觉得你想问题太主观了,为何你设计的Ringbuffer要进入到JDK呢,如果不进入JDK,那么肯定就是你自己玩啊。in house的实现和public的实现肯定不一样的。如果要用NIO,写wrapper必须的吧。你有想要更加灵活,又不想写代码,怎么可能呢?

    对coroutine,每个语言实现并发的模式不一样,在java上,原生的来说提供了N:N的线程,而上,你可以基于JDK提供的工具构建其他的并发模型,可能不是很优美,但是肯定好使。难道akka的性能不够好?forkjoin的性能不够好?clojure的async性能不够好?

    至于好语言,您认为是得“一个语言能够称为好的编程语言,是因为他能够很好地解决编程问题。
    ”。这个应该说是您的问题吧。每个人,每个阶段,或者说每份工作或者项目,面临的问题不一样,那么他或者她需要的工具也不一样,每个工具在特定的条件下,提供的杠杆作用是不一样的。

    发展一门语言,需要考虑的东西很多,如果要大而全,又要设计优美,那么必然会话很多的心思来设计,实现,这就得花很多的时间,你可以说一个手机很好,但是别人买不到,那不是耍猴么?这样的语言会被那些快速迭代,小而精的语言替代,比较人们在解决问题的时候,是看身边有什么,先搞出啦不是么?我们平时用的,汉语,英语,也是在不断的发展中,所以没有好语言,只有更好,和不断发展的语言。

    说到社区和历史包袱,如果说一个好东西好的不得了,我得加入,但是这个特性一加入,可能其他的东西就得跟着改了,比如你设计手机,都弄好了,然后呢,你说别人的手机可以检测心电,所以你得加入个心电检测,这问题来了,是不是电路那些都得改啊?我相信,java的设计者们,更多的是在考虑让那些东西不要加进来,而是加进来那些东西吧。有些东西,可以让社区来做的。再者,如果你加了一个东西,以前的东西都不好使了,是不是让所有的人都改代码呢?我相信只有某些人愿意吧,比较不是所有的人都爱尝鲜。

    java 你可以吐槽不好,但是,一门语言发展了20年还没有被淘汰,不是因为大家都是傻缺,不是么?特定的场景下,用特定的语言,特定的工具,事半功倍,同样的,非要用个铅笔刀去砍树,那么不是自己坑自己么?

    你要吐槽就继续吧,为了吐槽吐槽,真没意思,发展一门语言,远比你想的复杂。
    miao1007
        108
    miao1007  
       2015-05-11 12:31:32 +08:00
    求晒出你的作品,这里不是贴吧。
    riaqn
        109
    riaqn  
       2015-05-11 12:34:46 +08:00
    那些扯生态圈的真是醉了, 本帖是讨论单纯的语言设计的好坏.
    还有说语言只是工具的, 程序员的水平更重要? 汽车和自行车都是代步工具, 把你的汽车和我的自行车交换好嘛? 反正汽车开10分钟, 自行车骑个1小时也就到了. 甭管谁骑车.
    同意楼主的观点, java的设计就是为了普通公司的工程开发的. 为了交流方便, 另外考虑到代码人员水平层次不一, 设计的非常简单. 在这一点上java算是无可厚非.
    但是你要和我说 优雅 抽象 什么的, 那玩意儿和java无关. 和大多数语言都无关. 在我眼里只有haskell之上的语言才能叫优雅. 啥? lisp? 对不起风太大我听不见~
    Andiry
        110
    Andiry  
       2015-05-11 12:36:41 +08:00 via Android   ❤️ 1
    @riaqn Linus喷C++是别人先喷他他才反喷的,他可没有无聊到在lkml里专门发邮件喷C++
    hepin1989
        111
    hepin1989  
       2015-05-11 12:38:56 +08:00
    楼主这个语言炮 ,都到了虫族轨道炮的级别了。
    heian0224
        112
    heian0224  
       2015-05-11 12:39:35 +08:00
    我为什么会选择java作为工作语言就是因为我知道java对于企业级应用开发持久的生命力。无论其他语言看起来多么多么好,但我知道我还没到能够讨论哪个轮子好的程度,不如安心好好用这个轮子。
    how2code
        113
    how2code  
       2015-05-11 12:48:00 +08:00
    好好好,先有C++后有天;C++秒天秒地秒空气,行了吧。C++才是世界上最好的语言,可以了吧。
    看在我大船神的份上你就别来黑C++了。
    noli
        114
    noli  
    OP
       2015-05-11 12:59:49 +08:00
    @hepin1989 Coroutine 跟并发一毛线关系都没有,甚至跟线程的关系都不大……当然啦,考虑到你可能真的只是个 Java 程序员,才会把 Coroutine 和并发、异步什么的一起来考虑。看来你根本没弄懂我说什么,算我看错人了……
    hepin1989
        115
    hepin1989  
       2015-05-11 13:17:51 +08:00
    @noli 你说没关系就没关系吧,反正我已经输给你了,你看@how2code不说了么,你以及轨道炮了,秒天秒地秒空气了。

    我两个拿在一起说了,因为我用来组织程序而已,coroutine java不直接支持,但是我可以有其他的方式来做到同样的好。

    一个用户态的协作调度列程给你说的如天上没有地上也没有一样牛。还有如果你觉得java不行,你看看
    http://docs.paralleluniverse.co/quasar/

    这个是不是你说的coroutine

    完成一件事情很多方式,别瞎扯了,如上,贴你的C++工程,大家膜拜下。
    cangshu
        116
    cangshu  
       2015-05-11 13:19:06 +08:00
    @noli : ),听起来你很厉害的样子,抱歉我无法与语言炮交流,就像网易新闻评论区的地图炮一样,一群loser。
    66beta
        117
    66beta  
       2015-05-11 13:20:00 +08:00
    楼主居然喷我打前端是半吊子程序员!
    hepin1989
        118
    hepin1989  
       2015-05-11 13:24:14 +08:00
    @noli 还有,我用的是actor并发模型,和你coroutine不是一路的,抱歉,反正你是轨道炮,talk is cheap,show us your code.
    hepin1989
        119
    hepin1989  
       2015-05-11 13:26:39 +08:00
    @cangshu 你真会反着说。
    hepin1989
        120
    hepin1989  
       2015-05-11 13:30:29 +08:00
    @noli 《Reactive Design Patterns》 有空看看大点的东西,别天天语言炮了。
    j16ZgMV9cs6ZB23n
        121
    j16ZgMV9cs6ZB23n  
       2015-05-11 14:36:30 +08:00
    @hepin1989 C++里ACE的Reactor之少十年前就有了。
    @noli 其实你是想说C++里自由度更大吧。 我记得一个很印象深刻的例子,比如早先Java不支持Range(到Java SE 5才有),Java却无法用原有的构造来模拟新的语言特性。相比C++也是到C++11才有原生的Range支持,不过C++却可以有自己的方法来构造来模拟,比如Boost.range。

    不同的语言确实是有自己的优势和劣势之处,不过C++在很大程度上更加灵活,适应的场合也比单一的其他语言要多得多。不过相应的代价就是更加复杂,更考验程序员的自身能力和经验。

    @ 其他人
    其他呢,个人认为大多数优秀的C++程序员更喜欢去阅读更多的书籍和代码或者实现更多的功能,而不是在这里cheap talk。那么show code呢? 个人不认为优秀的C++代码是随便一个外行人(请原谅我称非C++程序员说外行人,我没有别的恶意。。。)花10分钟就能理解到其精髓的,对于普通的C++程序员其实也是如此。Let the programs tell, 按现在往后数年之后,到底谁的程序好自然会有分晓。
    hepin1989
        122
    hepin1989  
       2015-05-11 15:20:44 +08:00
    @chilledheart 说的在理,cpp和c更底层也就更灵活当然也更考验功力,推广下,rust也不错。哈哈,话说seafile怎么成了华为的了现在?
    monsabre1
        123
    monsabre1  
       2015-05-11 15:22:42 +08:00
    @incompatible

    把简单事情搞复杂不难很多人都在干这事

    原因

    1,自己不是真明白精髓
    2,混碗饭
    noli
        124
    noli  
    OP
       2015-05-11 15:24:18 +08:00
    @hepin1989

    我当然知道 Java 也可以实现 Coroutine 的效果,而且说实话 Coroutine 其实就是个闭包而已嘛。别说Java 会演进增强,这些库迟早或是现在会有的。你给大家普及了这个库,我也是第一次看到。

    但是,我从来就没有说过 Java 不能实现 Coroutine 的效果,我也一直不否认 Java 能写出 Coroutine 效果的库。

    我一直强调的事情是,Java 是一个很不好的语言,这门语言的设计以及其规范鼓励的写代码的方式,不是解决问题的正确方式或者是最好的方式。

    既然我们已经在 Coroutine 这个问题上短兵交接,那么我们也不妨就这个话题继续下去,看看:

    1. 原生支持 Coroutine 的语言是怎样解决某一类问题的
    2. C++可以写出怎样的库解决上述问题的
    3. Java 可以写出怎样库解决上述问题

    要解决的问题是:
    一个 DFA 模块或者类,初始化的时候输入一系列规则,运行的时候逐个输入字符,并且可以随时查询已经 parse 出来了哪些终结符,正在 parse 的符号串可能是什么类型的终结符。

    1. python

    class DFA: object
    def __init__(self, rules):
    pass

    def input(self, ch):
    # 在计算过程中用到的变量
    status = calc_status()
    yield type, status

    使用:
    DFA dfa_engine = DFA(rules)
    while(not EOF):
    type, status = dfa_engine.input(ch)

    2. C++ 没有原生的 yield,但是,最起码, C++ 可以混编 ASM 保存函数栈以及寄存器内容,来实现 yield 的效果,具体实现看 boost::context。 更不用说 boost::coroutine 这个库了。

    class DFA
    {
    public:
    static void *caller_context_;
    static void *input_context_;

    // ... other members

    public:
    std::tuple<Type, Status> input(const char ch) {
    // 需要 yield 的变量保存在一个 std::tuple<Type, status> 的指针中
    void *yield_cont = ...;
    jump_fcontext(&input_context, caller_context_...);
    }
    // other functions...
    }


    使用:

    DFA dfa_engine(rules);
    DFA::caller_context_ = make_fcontext(&parse ...)
    DFA::input_context_ = make_fcontext(std::bind(DFA::input) ...)


    void parse(..) {
    while (!EOF)
    {
    yield_cont = jump_fcontext(&caller_context, input_context_);
    }


    可以看到,形式上,大概是跟 Python 的是差不多的。


    3. Java 的,谁打算试试,请大家教我,我反正是好久没用 Java 了。


    看这个例子并不是说,Java 的能不能做到 Coroutine 的效果,而是看:

    实现的形式是不是足够 保持 问。题。的。原。型。
    noli
        125
    noli  
    OP
       2015-05-11 15:34:03 +08:00   ❤️ 1
    @chilledheart

    不不不,我不是来秀 C++的优越感的,我很喜欢 C++ 这类的语言,很对我胃口。
    但我还不是最满意,Rust 的话,最开始有跟过,后来变得太多,没时间跟下去了,但相信也不差。

    我发这个贴是来专门打 Java 脸,以及打某些认为编程语言没有优秀低劣之分的人的脸的。或者说,某些人嘴里的语言炮(他们没说错)。

    我觉得不承认语言之间确实有 优劣 之分的人,都没有找到正确的思维方式,我特喜欢打他们脸来为自己找找可怜的存在感……
    (我这么说的话,那些不断揣测我是个 loser ,要求我上代码的人,是不是也很有满足感?哈哈哈哈,losers)
    monsabre1
        126
    monsabre1  
       2015-05-11 15:40:59 +08:00
    @incompatible

    python操纵hadoop spark引擎
    运算速度和java的没区别 这个接近99.99%的性能
    hadoop引擎你能用java改 但是你能保证比它好吗?

    python让使用者更加关注业务逻辑 同时开发成本更低 性能还不差
    monsabre1
        127
    monsabre1  
       2015-05-11 15:48:54 +08:00
    @noli
    class DFA: object

    你确定这是python写法? 哈哈
    noli
        128
    noli  
    OP
       2015-05-11 15:51:53 +08:00
    @monsabre1

    我错了……一时手抖写了 C++语法…… 求轻砸

    class DFA(object):
    hepin1989
        129
    hepin1989  
       2015-05-11 16:08:14 +08:00
    core.async
    https://github.com/rssh/scala-gopher
    quasar 这个新出来的。。。

    DFA写起来好看就是scala或者clojure。java写起来是有点。。。
    val myDFA =
    dfa ('Z, 'S, 'q0, 'd, 'A) where
    'Z ==> Set('a, 'b) and
    'S ==> Set(0, 1) and
    'q0 ==> 0 and
    'A ==> Set(0) and
    'd ==> Delta(
    (0, 'a) -> 0,
    (0, 'b) -> 1,
    (1, 'a) -> 0,
    (1, 'b) -> 1
    )
    println(myDFA accepts "aaab")

    第一次接触这个,但是我觉得可以通过更好的写法,比如引入~>这样的符号来构建一个完整的graph,然后这个graph接受input,并且switch状态。

    反正java写出来是不好看的。
    hepin1989
        130
    hepin1989  
       2015-05-11 16:14:23 +08:00
    比如一个stream,在scala里面表述。

    http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0-RC2/_images/simple-graph-example1.png

    in ~> f1 ~> bcast ~> f2 ~> merge ~> f3 ~> out
    bcast ~> f4 ~> merge

    这样的写法是不是好很多?
    java的写法的确是有点冗长。
    yahoo21cn
        131
    yahoo21cn  
       2015-05-11 16:35:07 +08:00
    我感觉还是python灵活点
    laipogo
        132
    laipogo  
       2015-05-11 17:14:40 +08:00
    po 主我能贴一下你的 github 地址吗?
    noli
        133
    noli  
    OP
       2015-05-11 18:55:21 +08:00
    @laipogo 如果你已经找到了,那你就帖吧,它一直就是public 的。不需要我允许。
    zjengjie
        134
    zjengjie  
       2015-05-11 20:22:26 +08:00
    你说的那些c++东西可能百分之七八十的情况下都用不到吧,考虑到Java的应用场景,可能90%以上的情况都用不到,即使用到了,用稍丑点的方式实现有什么关系。但是要精通这些却要花掉非常多的时间和精力。语言不过是工具,好程序员应该知道在什么场景选用哪种最优的工具,在各个方面做权衡和取舍。如果哪天让你带领公司开发个淘宝你也让员工全用c++?
    noli
        135
    noli  
    OP
       2015-05-11 20:33:36 +08:00
    @zjengjie

    是是是,你说得对。
    写 Java 的人恐怕连查询数据集合都用不着,所以能够支持 Linq 之类的语言基础也是不用的。用 ORM 就够了,其他什么的永远都用不着。

    不承认 Java 很渣我还可以理解,毕竟可能很多人以前是用 ASM。但是不承认无知有害我就不能理解了。
    j16ZgMV9cs6ZB23n
        136
    j16ZgMV9cs6ZB23n  
       2015-05-11 21:00:22 +08:00
    @hepin1989 最后一个问题,这是什么情况?
    j16ZgMV9cs6ZB23n
        137
    j16ZgMV9cs6ZB23n  
       2015-05-11 21:11:52 +08:00
    @noli rust好不错,虽然我更看好最近新出的pony,全盘Actor设计。个人认为,编程一个一直在持续学习、应用、触坑、总结经验的过程,好多东西聪明的人指点一二或者触过几次坑就明白了,但是至于对于那些习惯于固执己见的人,现实会教会他们 他们是如何被坑的。。。
    FrankHB
        138
    FrankHB  
       2015-05-11 21:17:31 +08:00
    有前途,混WG21么。

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4453.pdf
    http://blogs.msdn.com/b/vcblog/archive/2014/11/12/resumable-functions-in-c.aspx

    说句公道话——asm降智商功效怎么能和Java比。谁敢让手下撸Java的通通去折腾asm呢。


    @miao1007
    1.平衡?Android?那个传说中坑害显卡驱动的MC算不?
    2.真以为越OO越能SRP是嘛……
    3.顶用的又有多少呢。

    @zhea55
    考虑“用的人”就行了?
    好吧,checked exception看起来也是前无古人后无来者。

    @riaqn
    优雅?Haskell?
    (虽然某种意义上倒的确比C艹还C艹。)
    syntax……呵呵呵……
    grammar……呵呵呵呵呵……

    @zjengjie
    花点时间折腾百分之七八十用不到的玩意儿和花百分之七八十时间折腾本来就没意义的玩意儿的成本,要哪个,自己掂量吧。
    miao1007
        139
    miao1007  
       2015-05-11 21:24:03 +08:00
    @FrankHB 那就晒一下你的项目吧,你的回复真廉价。
    hepin1989
        140
    hepin1989  
       2015-05-11 21:38:45 +08:00
    @chilledheart 看漏了,不好意思,haiwen,我看成了huawei.
    noli
        141
    noli  
    OP
       2015-05-11 22:06:26 +08:00
    @FrankHB

    我不喜欢这个提案……唉,其实是看他们越来越短视地加更多修饰符进入 C++,我是很心疼的。这个提案的目标本身还是积极的。
    laipogo
        142
    laipogo  
       2015-05-11 23:22:44 +08:00 via Android
    @noli 算了不贴了,也没多少东西。。。
    我太 low 了,感觉忽略主题看书去。
    shuiniushushu
        143
    shuiniushushu  
       2015-05-11 23:37:09 +08:00
    @riaqn linus大爷是恨铁不成钢,他自己用C++特别多
    wangfengmadking
        144
    wangfengmadking  
       2015-05-12 00:31:08 +08:00
    在这个看脸的时代,我只看代码写出来之后是否整洁。反正C++的项目,我就没发现有写的让人看起来舒服的,总是感觉乱糟糟的。这个无关乎性能啥的,反正都是云时代了,有钱任性。
    cys
        145
    cys  
       2015-05-12 07:51:21 +08:00
    @noli 既然这样,那么请给出,Java程序员们他们该怎么办。比如该重新选择什么语言?
    roricon
        146
    roricon  
       2015-05-12 09:16:24 +08:00   ❤️ 1
    讨厌Java,但有的时候为了业务,是屎也得吃进去。
    neilwong
        147
    neilwong  
       2015-05-12 09:33:01 +08:00 via iPhone
    在v2ex原来发引战贴这么容易啊,整个帖子没啥营养不说,感觉楼上吵架的都进了楼主圈套啊
    xxgirl2
        148
    xxgirl2  
       2015-05-12 09:38:04 +08:00
    我非常缺钱。所以哪个来钱快我就学哪个用哪个。
    语言之争还是交给有钱人或大牛考虑吧。所谓肉食者谋。
    xxgirl2
        149
    xxgirl2  
       2015-05-12 09:39:21 +08:00
    @xxgirl2 对我等穷人来说,只考虑性价比,不考虑玄学。
    ibiger
        150
    ibiger  
       2015-05-12 10:18:07 +08:00
    没必要这样,合适的工具用在合适的地方就是极好的。
    smithtel
        151
    smithtel  
       2015-05-12 10:19:34 +08:00
    看到这种帖子,我只能说一句呵呵,有种就去找oracle开炮。没种就在这种多元化社区说吧。
    jun4rui
        152
    jun4rui  
       2015-05-12 10:29:12 +08:00
    @cys 想多了,哪里有xxx程序员?程序员又不是要绑死在一棵树上,多学多看多理解各种思想才是正路。

    只会Java(或者其他某一门语言)的恐怕难免步入井底之蛙的后尘,多学多看多练习,掌握编程的精髓不是正道吗?
    TianTao
        153
    TianTao  
       2015-05-12 10:31:08 +08:00
    前面说的都不对,PHP才是最好的语言
    jun4rui
        154
    jun4rui  
       2015-05-12 10:32:45 +08:00
    @smithtel Oracle太重了,我写一个小的玩意,就1K条数据内用sqllite3就好了,一个小型的APP用Redis也很不错,用oracle干啥?

    工具都有适应范围,不要老想着有银弹,oracle也不是,C也不会是,汇编也不是
    smithtel
        155
    smithtel  
       2015-05-12 10:37:57 +08:00
    @jun4rui 我说的是甲骨文公司。
    jun4rui
        156
    jun4rui  
       2015-05-12 10:45:57 +08:00
    @smithtel 开源之敌oracle?喷的人太多了
    MrEggNoodle
        157
    MrEggNoodle  
       2015-05-12 10:53:32 +08:00
    去工作Java不失为一个好的选择,对于自己单干单飞的程序员,python其实更佳。我也是如此观点。
    cys
        158
    cys  
       2015-05-12 11:21:27 +08:00
    @jun4rui 哎哟我去,这样有意思吗?只是个称呼。
    ioth
        159
    ioth  
       2015-05-12 11:28:11 +08:00
    继续继续。
    终于看到比csdn有意思的贴了。
    jun4rui
        160
    jun4rui  
       2015-05-12 11:56:29 +08:00
    @cys 译言网| 我的2010年开源软件之敌获奖名单
    article.yeeyan.org/view/194678/164281
    2011年1月7日 - 乍得-佩林将甲骨文列为他心目中2010年的开源软件之敌,还带上了美国联邦 ... 我的2010年开源软件之敌获奖名单(Oracle wins the 2010 Open ..


    有理有据哦,或者你Google下其他年度的开源之敌?
    cys
        161
    cys  
       2015-05-12 12:11:51 +08:00
    @jun4rui 你@错人啦。
    FrankHB
        162
    FrankHB  
       2015-05-12 12:44:22 +08:00
    @miao1007
    我看了三次确认你没有回错人。
    (????)→廉价?看不懂你的逻辑。
    不就是这种造成实际损失之前被指出没有漏注意的低级错误的情况么……你所在的星球难道没有对此叩首答谢的礼仪么。
    “晒我的项目”貌似和这个主题没什么关系吧。
    非要附会,那就勉为其难贴个参加过的: https://github.com/cplusplus/draft

    @noli
    这个提案的一个动机就是减少新的关键字:如果直接加yield/async这样的,恐怕没法就这样收场。
    考虑到没法指望syntax-rules之类的东西,只加一个关键字能满足这些需求,也算是比较现实的、可以忍的妥协了。

    @shuiniushushu
    能介绍一下Linus自己用C++特别多的项目么。
    ikaros
        163
    ikaros  
       2015-05-12 12:56:09 +08:00
    @how2code 09表示不服,先有09后有天
    额 不是,我是想说和船胖啥事
    WispZhan
        164
    WispZhan  
       2015-05-12 13:51:27 +08:00
    又见这种无聊帖子,做什么是用什么语言。更古不变的真理
    zjengjie
        165
    zjengjie  
       2015-05-12 14:08:27 +08:00
    @noli 没明白我意思吗,我并没有不承认 Java 在某些方面比其他一些语言渣,只是说它有它的应用场景,它被设计成这样就是为了解决相应的需求的。我也没见过用 Java 写操作系统之类的东西啊。就如 SQL 设计出来就是用来查数据库的,你难道还要拿 SQL 和 C++ 比表现能力。

    @FrankHB 你见我那句话说了要花百分之七八十时间折腾本来就没意义的玩意儿了。
    monsabre1
        166
    monsabre1  
       2015-05-12 15:56:07 +08:00
    @noli

    hadoop性能当然不够
    google开源多c++ mr4c速度快1~4倍
    monsabre1
        167
    monsabre1  
       2015-05-12 16:00:32 +08:00
    其实python比java开发效率高和python是多范型语言有关 可以多种写法
    也是多范型语言的c++的范型式编程有时强于纯oo

    java是成本相对开发成本不低的性能接近native的跨平台工业级纯oo语言 中规中矩
    noli
        168
    noli  
    OP
       2015-05-12 17:15:40 +08:00
    @FrankHB

    我很确定自己暂时吃不透加入这个关键字会带来怎样的连锁反应。
    至少有一点,加入 resumable 是不是真的那么“干净”,带有 resumable 修饰的函数类型怎么算。

    最后就是,我也在弄一个fiber式网络库,我隐约觉得,令一个函数 yieldable 是有可能不用在 语言层面 hack 的
    monsabre1
        169
    monsabre1  
       2015-05-12 18:02:20 +08:00
    java c++是屠龙刀
    有人不是用来屠龙 有人是用来切菜
    WispZhan
        170
    WispZhan  
       2015-05-12 18:12:56 +08:00
    @lvfujun 这个观点你就错了。这个要从商业角度出发,选择java的优势在于java程序员多,而且对于android开发而言语法简单易学,能很快产生一个规模不小的生态圈。至于性能在这些优势下早已被淹没。
    再待生态圈日益成熟之际,切换开发语言改善性能。
    FrankHB
        171
    FrankHB  
       2015-05-12 19:18:00 +08:00
    @zjengjie 不特别针对谁,只是说一下现状。
    不管是什么语言,不管是语言自身的演进、实现语言还是使用语言,本来一些事情,是可以和真正要解决的问题联系得更好的,不必要担心浪费多少时间,学了用得上还是用不上。
    百分之七八十时间浪费在设计模式啊重构啊封装啊调优啊,不管实际上是不是真用得上或者是不是真得花这么多时间去做——这不是个别现象。
    其实包括C++自身的设计其实很多也就是拾人牙慧罢了。只不过,表面上两者的合理性看起来近似,都有一坨历史包袱;骨子里呢?一小部分情况是对客观现实必要的妥协,另一部分则是给之前的愚蠢选择买单而已。
    从Java的设计者到主流用户来看,后者的概率明显更大。而其它“复杂”语言的一些恶心之处反倒淘汰了一些不合适的用户,剩下的相对就不敢那么浮躁——如果不想一事无成的话。

    @noli 如果原生支持一些语言构造的直接变换,不引入新关键字当然是可能的。但是,C++天生欠缺对这种扩展语言的方式的支持,在这种问题上会付出太大的代价。搞成像LISP方言那样就得扔掉一大半现有的特性,引入一大坨现在不存在的特性,这可不是“可持续发展”——不说语言规范维护的困难和用户切换的成本,就是可实现性都成问题。现在的提议可能仍然不是最好的,但明显是更可操作的。
    ryan10107
        172
    ryan10107  
       2015-05-12 19:59:48 +08:00
    当还在讨论语言谁优谁劣的人就仍是一坨shit。。。
    FrankHB
        173
    FrankHB  
       2015-05-12 20:08:25 +08:00
    @ryan10107 不敢讨论的不如shit么。
    发明语言的十有八九倒是愉悦地中枪了。
    jo32
        174
    jo32  
       2015-05-12 21:06:26 +08:00 via iPhone
    这种讨论毫无意义,在无明确的 context 和目标下讨论语言优劣根本扯不完,受不了这种无意义的引战,要是可以给楼主评分,我愿意给负分滚粗
    lvfujun
        175
    lvfujun  
       2015-05-13 00:08:51 +08:00
    @WispZhan 你这么说确实有道理.不过等生态圈日益成熟起来再卸磨杀驴.不知可否想过.原来的java程序员转语言的学习成本.我估计到时候抵制的人绝对不少.想换语言也没那么容易.
    顺带说一下.PHP是最好的语言!
    ryan10107
        176
    ryan10107  
       2015-05-13 08:13:57 +08:00
    @FrankHB 你觉得这种讨论有意义吗,直接就这样讨论语言谁优谁劣,没有任何背景和使用场合。语言就像工具,拿着锄头去锤钉子,那有意思吗?无所谓好与坏,只有合不合适。语言发明者哪个会这样讨论,麻烦你指出。Java发明者有用Java来写操作系统吗,C++这么好,为什么还需要Lua?C++这么厉害,为啥不写前端,需要JS。
    keke99love
        177
    keke99love  
       2015-05-13 09:11:17 +08:00
    这种讨论感觉真的没意义,哎
    FrankHB
        178
    FrankHB  
       2015-05-13 09:11:53 +08:00
    @ryan10107 我觉得很有意义。

    语言作为“工具”,和API或者其它开发环境用到的依赖一样,并没有什么特殊的,有很大改善的空间。即便你自己没法发明语言,没法实现语言,仍然可以改进现有语言。这种改进的初步共识就是在这类讨论取得的——首先先要确认足够的动机——用户需求,具体点说就是多数用户对现状的不满。退一步讲,你没法改变一个语言,那么在一个语言不够合适的场合,换一个语言也很正常。这样,就有必要交流什么场合适用。

    反过来,我倒是奇怪,强行“没有意义”党的底气是基于什么理论什么事实得到的?是已经修改过语言发现徒劳无功了?还是仅仅不愿意承认自己没有行动力?或者干脆就是斯德哥尔摩综合症?

    恐怕其中的大部分,就是自己没有能力改进语言或者看不懂在说啥,干瞪眼不爽,于是就把对现状无力的反感迁怒到讨论这种形式上了吧。

    我不同意“无所谓好与坏,只有合不合适”这个观点。一种解决方案合不合适的理由显然不可能全因为用户的选择。有一种情况是设计者自身不够料到变化的需求(没设计“好”),却错误地使用户相信这种解决方案合适。或者说,直接的问题就是“锄头去锤钉子”还不自知的用户太多了,反而还要为这种行为的合理性辩护。

    语言这种大多数用户没有尝试去设计过的东西是这种误解的重灾区。正是因为这样才更有必要澄清。正面讨论语言的优劣是有效手段之一。

    Java写操作系统有什么好奇怪的,又不是没人试过。

    http://en.wikipedia.org/wiki/JavaOS

    http://en.wikipedia.org/wiki/JX_(operating_system)

    你硬说作为“操作系统”绝对不合适?还真的未必——至少系统级别的GC没进程隔离阻碍回收资源那么坑(就这种设计而言,如果不适合造操作系统,就更不能指望适合开发用户空间程序)。只是造出来短期也不可能和现有的东西合拍就是了。

    还有用Java造CPU的呢。

    “C++这么好,为什么还需要Lua?C++这么厉害,为啥不写前端,需要JS。”——这是谁说的?我没在这个主题里见过支持因为C++可能可以用,所以就不需要其它语言的论据。而且,这看起来不正是因为你没法说出具体语言“好”“坏”在哪(如果要说语言自身就不可能只是合不合适)才有的疑问么。

    题外话,语言可以作为工具,但绝不只是工具。大多数时候也不应该作为工具。从一个语言的话题就能影响这里那么多人的心智搞成宗教战争的架势来看,当作工具就已经上当了。

    @all
    “请尽量让自己的回复能够对别人有帮助”——回复框下面的这句话我不希望是摆设。

    要支持“无所谓好与坏”或者“这个问题讨论没有意义”请像楼上一样展开论述,一句“无聊”“负分滚粗”和一厢情愿的“毫无意义”只是浪费所有人的时间的损人不利己。
    ryan10107
        179
    ryan10107  
       2015-05-13 09:36:21 +08:00
    @FrankHB 那你用过Java写过的操作系统么,那语言不作为工具你把它当做爱人吗
    ryan10107
        180
    ryan10107  
       2015-05-13 09:39:11 +08:00
    我已经在v2见过越来越多这种无聊的帖子,如果还是见到如此纯喷的帖子,我已无力反驳了。
    @FrankHB 这种人也是我为什么后来远离了v2ex的原因。
    FrankHB
        181
    FrankHB  
       2015-05-13 09:43:21 +08:00
    @ryan10107 ……能抓重点么。
    我不用Java写操作系统,是因为:
    1.对我或者对写操作系统这个任务来说,Java不好用。即便非要用类似的设计,我也宁可用CLR+C#而不是JVM+Java。(当然,并不是说前者就够好用到让我付诸实践了。)
    2.更重要的是,写操作系统对我来说没意义——我现在没这个需求。所以要是你也不写,只能参照别人。

    为什么不作为工具就要作为其它什么的呢。你会拿汉语当爱人么?如果是,那么类似地,这里也请自便。我是没那种心情。
    非要说的话,某人(嗯,早于王垠,那个也是拾人牙慧)早就说过,比起工具,更像是“材料”——它或多或少地嵌入到产出之中,影响成品的质量。
    FrankHB
        182
    FrankHB  
       2015-05-13 09:46:15 +08:00
    @ryan10107 “远离了v2”……你现在是打算重新接近么。那么建议还是请继续远离好了。这样对谁都好一点。
    我当然也不曾指望过v2的多数用户在这类问题上有LtU之类的地方专业,然而某些版面就事论事的氛围都赶不上reddit之类的地方甚至一些有活人管的贴吧……只能说不曾接近v2也不亏。
    noli
        183
    noli  
    OP
       2015-05-13 13:13:57 +08:00   ❤️ 2
    @FrankHB

    没必要把精力用来回复那种人。
    当然,如果你对他的回复特别有感觉,不吐不快,这种情况除外。

    请让我向你的分析致敬。
    我来总结一下,目前为止在这篇帖子里面各种回复的人的逻辑吧(如果回复是有逻辑的话)。

    1. 资格逻辑
    我说:Java语言不好。Java 语言这里不好,那里不好
    他说:你是谁,你有资格吗?你做过什么牛逼的东西?

    这种人呢,有不懂言论自由精神的可能,也有可能是纯粹是来发泄的。他们的基本逻辑就是,你说的什么都不对,除非我服了你(by 作品 或者名声)。

    这种根本不是就是论事的,没有必要理会。


    2. 语言炮逻辑
    我说:Java语言不好。Java 语言这里不好,那里不好。
    他说:你是语言炮。不要跟语言炮交流。

    这种人其实也没什么不好。只不过他们的预设前提是:炮轰一门语言太哗众取宠,一门语言的设计肯定有可取的地方(政治正确但没有实际价值的废话)。

    如果他是作为一个政治家,这样很高明,先质疑动机,进而歪曲整个意图,然后我就不用听你说了。
    不过我作为一个写代码的,我也不想跟他们说话。


    3.实用主义逻辑

    我说:Java语言不好。Java 语言这里不好,那里不好。
    他说:语言没有好坏,看应用场景。更进一步,你举的场景都是Java 不强的地方。

    这种人其实也没什么不好。只不过他们预设的前提是:就算有不足的地方,你说出来也是没用的,因为你改不了,或者说因为你不是语言发明者,又或者是你又改不了这个生态。

    实用主义者相对于语言炮逻辑,又好了一点点。但是从根本上没办法避免实用主义的另一面,就是短视和功利。

    说句很抱歉的话,我确实在写编译器,想发明语言。就算我不写编译器不发明语言,我觉得这样的讨论至少可以帮助程序员设计好的库来解决问题。

    既然你们都是能用就好的想法。道不同不相为谋,诸君请吧。



    诸位,请对号入座吧,玩得开心点。哈哈啊哈哈
    zhoutianmao
        184
    zhoutianmao  
       2015-05-13 14:26:52 +08:00
    @wangfengmadking 我一个同学就是因为C++写的代码不好看放弃C++的。
    noli
        185
    noli  
    OP
       2015-05-13 14:33:48 +08:00   ❤️ 2
    再分享一下,我自己批判或者审视一门编程语言的一般思路,以感谢这么多位捧场。

    我觉得一门语言绝对不仅仅是工具。
    我认为,在编程的领域来说能称为工具的,应该说是思想,编程语言是思想的一个“现象”而已。我的意思是,编程思想是本质,编程语言是现象。

    为什么可以这么说呢,你看看,其实很多编程语言,例如自称是OO的语言,都是可以共享相同的原则的。譬如 依赖倒置原则啊,Liskov 替换原则啊什么的。又譬如自称函数式编程的语言,都喜欢不变性啊,尾递归优化啊,代数数据类型啊,lambda啊这种东西。

    如果编程语言之间可以拥有那么多的共同思想,显然把他们归类在"工具"这个范畴,是不够准确的。情形就好像:人和猿类,大家都有四肢五官,仅仅归类为哺乳类是很不准确的,猪也是哺乳类,但你指望猪能用手偷桃子你就要傻眼了。

    正名这件事情是很重要的,不然脑子里面有一个不正确的印象,就没法把事情说清楚了。回到编程语言的话题,编程语言为什么不仅仅是工具呢。

    在我们使用工具的时候,我们会预设一个用途,然后选定一个工具,挖土用铲,施加打击用锤。我们在解决编程问题的时候,也会预估编程问题的类型和范围,选定合适的技术(注意我的用词是“技术”),通常技术确定了,那么才会去敲定用一门或者多门语言解决问题。从这个角度来说,语言确实是很像工具。

    但很可惜,语言不像工具的地方在于,工具是被动受人主观控制的,而语言不是。
    语言有社区、有生态、有其他编程人员反过来会控制你或者对你施加影响。更加糟糕的情况是,当你使用一门糟糕的语言,反过来被糟糕的社区、生态、和糟糕的程序员等等,干扰的话。你就明白为什么编程语言不仅仅是工具。

    最重要的是,这些东西会干扰你的思想,导致你做出一些你本来不设想会做的事情。C++程序员应该会很有体会的就是,假如你的同事不是特别精通模板,于是你设计的很多基础设施你就不得不花更多的心思精心去包装使之看起来不是那么可怕,或者甚至就不使用偏特化之类的特性了。你写的C++代码带有C++11 feature,那么你就不能指望在几年没关过机的Linux 上编译通过了。
    工具不应该是这样的,工具不趁手,可能你想都不想就换其他了。

    C++至少还是有向下兼容的能力,新的不行我用旧的方法还是可以挺过去的。但如果是语言向上不能,那么你就要吐血了。譬如 GCC 用 C 来写编译器,他可能从来没想过有朝一日IDE是要深度介入编译器前端的。用 C 的于是傻眼了,实在很难把控这么复杂的交互,只好逐步转C++,我猜测这是 GCC 转 C++ 的原因。

    戏肉来了。我还是要批判 Java 的,别想再在 Java 语言封闭的世界里面继续图样图森破了。

    要批判一门语言,就是要看他的编程思想能否自圆其说,这是最基本的。如果自相矛盾,那么不用玩了。

    什么叫自圆其说,譬如说,Java 认为一切都是对象,没问题,在Java 里面确实所有的东西都是 Object,并且整个语言提供了这样的设施来实现这个思想。譬如你的方法返回的是一个 int,你想把int 放进容器里面是不行的,你要box 这个int。假如Java 不是这么做(其实我宁愿他不这么做),那么你在容器里面取出一个东西的时候,你就不能指望可以 toString(Object类的方法),也没办法GC了。

    大多数能够流行起来的编程语言都是能自圆其说的。所以要看第二个层次,编程语言的思想和设计能解决什么程度的现实中的问题。

    在这个层次上,Java 就不太妙了。Java 说一切都是对象,对象都是有生命周期的。他在JVM 的世界里做的很好,因为JVM 的GC确实很不错。但是去到JVM外的世界就有点麻烦了。简单的例子,文件是不是对象,连接是不是对象,所是不是对象?都是,但是这些东西的生命周期结束,指望用GC来自动关闭是会出事的。所以,Java 里面开始要有一些手动关闭的东西。所以,指望这些东西跟普通对象一样可以传来传去不用担心资源问题,有点变的不真实。

    当然,C# 也有这种问题,所有带有GC 的语言都会面临这样的问题。
    但是,C#的设计者一早就知道会有这样的问题,所以他们有 using。直到 Java 7 才有类似功能的语法糖。

    又因为 Java 认为一切都是对象,所以他们认为泛型也是可以用对象来解决的,所以Java 开发者们很开心的有了一堆类型擦除的泛型容器。

    还是因为 Java 认为一切都是对象,所以他们认为数据查询这种事情,应该是一种具体的对象提供的对外接口问题而不是语言要解决的问题。所以 Java 的开发者很开心地用各种 ORM 框架发起数据库查询,然后依然很开心地,用嵌套循环语句来查询自家树状数据结构中的对象。什么?你认为这不是一个问题而是两个问题?好吧,当我没说。

    最后,因为 Java 认为程序员们已经有这么多的对象了,所以加班加点也不怕找不到对象了。 XD
    当然 Java 还成功地使你们认为这不是同一个问题,是社会大环境问题,是公司管理问题,是自己能力的问题,总之不是Java 的问题。所以,不准别人诋毁心目中神圣无比,为你带来工作机会带来收入的Java!

    啊哈哈哈哈哈。你不加班谁加班啊,活该!
    jun4rui
        186
    jun4rui  
       2015-05-13 15:06:02 +08:00
    @noli 是啊,面向对象确实很有用,但是并非处处都是最好的,Java的面向对象其实做某些东西的时候倍觉无奈。
    MurphyL
        187
    MurphyL  
       2015-05-13 15:13:40 +08:00
    我不会和人宣称 JAVA 好,但我也不会和别人吐槽其它语言差……要做到了解一门语言的方方面面太难太难,以个人视角来评论一门语言会不会太过苍白?
    monsabre1
        188
    monsabre1  
       2015-05-13 15:19:14 +08:00
    @noli

    有些偏激

    java python一个是编译托管语言 一个是脚本里
    java速度更快 安全性更高 银行电商不二选择
    python呢 结合库引擎能实现比java不算太弱的功能

    都是适合团队开发的好工具
    scala不少人已经转回java了
    swift其实也是不大不小的坑 有人不明就里就跳进去了
    scala swift这些类脚本风格编译语言 没有人能超过python的
    团队合作 很多坑

    可读性强 python是王

    有时新东西也是坑

    话说我的win下的软件移植是delphi的
    移植在维护 还支持osx了呢
    哈哈
    monsabre1
        189
    monsabre1  
       2015-05-13 15:34:14 +08:00
    java出现是为了解决跨平台 性能是c++的一半左右
    有些繁琐 但是程序可读性强

    和python都是团队合作开发的好工具

    python是牺牲部分性能追求开发速度
    noli
        190
    noli  
    OP
       2015-05-13 15:42:38 +08:00
    @jun4rui 其实不是面向对象不行,而是写 Java 的时候很多东西没去细想,想尽可能简单,所以就挖了很多没法填得坑。发明 Java 的时候注意了很多数据管理,数据很OO,但是对“计算”的本质并没有做 OO 分析…… 所以就坑了。
    RisingV
        191
    RisingV  
       2015-05-13 15:47:35 +08:00
    计算机本身就是人类的造物,造物总没人本身重要。圈内真不缺乏会点技术而产生人格障碍甚至神经失常的。
    jsjscool
        192
    jsjscool  
       2015-05-13 16:02:04 +08:00
    一门语言,我还没开始学……光装环境就把人弄的半死。
    monsabre1
        193
    monsabre1  
       2015-05-13 16:03:57 +08:00
    monsabre1
        194
    monsabre1  
       2015-05-13 16:09:22 +08:00
    linkedin因为技术栈简化也退回java了

    我倒是希望白鼠们都用swift趟坑 这东西好写不好读 最后还得维护两种语言

    嘿嘿
    jun4rui
        195
    jun4rui  
       2015-05-13 16:35:25 +08:00
    @monsabre1 TIOBE是搜索次数榜,这还不如看github的项目用语言排行靠谱。
    asj
        196
    asj  
       2015-05-13 16:37:02 +08:00
    @monsabre1 我不信我不信我不信,>_<,为什么Go比D还低啊?为什么Pascal还能排那么高啊?为什么还有FoxPro这样的妖孽啊……
    hepin1989
        197
    hepin1989  
       2015-05-13 16:53:12 +08:00
    @monsabre1 主要还是大牛走了,一代天子一朝臣。
    monsabre1
        198
    monsabre1  
       2015-05-13 17:47:57 +08:00
    我们的大javascript以后早晚前三

    @jun4rui github上js是第一 (和node与前端有关)
    http://www.csdn.net/article/1970-01-01/2817922

    不过这个是综合各种排名
    http://www.idcps.com/news/20140722/76021.html
    http://www.idcps.com/uploadfile/2014/0722/20140722085126114.png

    @asj delphi啊 我也在用支持osx了 嘿嘿

    工程开发讨论语言优劣 忽略

    1.性能 (c c++ delphi java/nodejs/objectivec -scala/erlang-------python/ruby php 大概这个排位)

    2.技术栈复杂度引起的成本 (如果能有一种语言搞定所有事情成本还低最好 可惜没有 以后也不会有 大javascript搞前端客户端前台 可后台复杂逻辑也是渣)语言大多几天几周就会了 但是库框架那是大山要爬

    3.团队合作开发和维护的容易度 (好写和好读是两码事 个人开发和和团队合作开发是两码事 游戏和应用开发是两码事)

    4.技术人员资源的丰富度(java php是优势)

    5.开源资源的利用(技术栈允许的前提下降低成本)

    6.未来发展

    不合适

    只看部分优点不综合权衡乱用新技术 就容易入坑做白鼠 小是个人辛苦 大是公司完蛋
    有时公司里的个人出于各种想法会选择自己喜欢的方案(未必是最好的但是适合自己)
    公司就要慎重了 仔细权衡能看远点最好

    中小公司技术栈越简单越好(BAT可以吹求那最后都10%都性能提升) 简单不一定不伟大

    dropbox技术栈很久一直是python
    github一直是ruby
    都很伟大

    个人是技术越越复杂越好 有人愿意出钱学东西还拿工资最好
    monsabre1
        199
    monsabre1  
       2015-05-13 17:50:10 +08:00
    我见过小公司内部4,5种语言的
    就乐 cto天天忙着找人 当初会这几种的大拿背不住跳槽了 嘿嘿
    monsabre1
        200
    monsabre1  
       2015-05-13 17:55:23 +08:00
    java的经验程序员一样的工资找到的cocoa程序员估计多是小白

    技术栈复杂引起的成本上升释然

    公司用的语言 使用者烂大街其实最好
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2825 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:28 · PVG 17:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.