• ruby 适合小而美的团队,不适合大团队协作,也不是不能协作,而是耗费的成本太高

    这句话同样用在 PHP Python

    最近公司用 Py 写的项目,我真的不想吐槽…… class 没写几个,全都是 dict 一个个拼的,随意 import,全都是 function(data) 式的编程你干嘛不回去用 C,然后 dict 你都不知道上下文是啥,因为它不是 class 没有固定的 attribute。

    Py 的对象还很另类,不 protected 然后 getattr setattr 作为属性寻找链很……

    Ruby 比起 getattr setattr 更倾向于 method_missing、send,而且区分开方法和属性

    Python 对于新学编程的人,是很简单,但是你用来写项目的时候,ORM、写几层封装你就知道什么叫蛋疼,注入麻烦而且死板,词法格式生硬。

    很多人说词法生硬的代码才好维护,屁!谁说的!

    本来可以通过 type_cast 顺势去递推逻辑的,显得很反射很 IoC 或是很 Design Pattern 的事情,Python 让你手足无措,只能老老实实写百行的 if else,层层嵌套多了拆成单个 function,function 写多了找得变态般的蛋疼。

    如果只让我写 if else 和 function,我宁可用 C 语言,因为至少同样的语法 C 性能比 Python 好,另外还有 Go lang,所以能写 py 不如写这俩货,我根本不知道现在 py 流行在哪儿,估计不过是 tensorflow 选择了它作为 wrapper language 吧。还有它确实不 OO 的话比其它语言要更容易入门。但真正要写 project 要维护要更可读更便捷还是要用点技巧的。

    Python 一句我撒手不管了我就让你什么都写不了只能写 if else 那就是好维护?

    Sorry I don't think so~

    阅读者看了一堆 py if else 之后可能还没进入主题

    function(self) 这个梗……

    lambda 只能一行写个短的

    很多语句因为太长,pep8 linter 一开逼着你换行之后,你会发现丑得很难看

    公司换用 go、python 或者说他俩流行我觉得最大原因是这俩货之前在上个十年没流行过,国内的技术选择是以资金为导向的,然后我觉得就是男的换个老婆,女的换个老公一样的事情。别人家的老婆 or 老公都是香的。

    而且以国人的口味,也就是看别家孩子有什么自己就像有什么吧,所以跟风,而且还很容易冷落一些不被关注的东西

    归根结底还是 因为你穿着不主流的东西在国内都是被歧视的。

  • Ruby 3 将有类型系统了 at 2019年04月29日

    我也是这么想的

    Swift 就有一套方法针对这个

  • 用 Go、Rust 都是爱好,当然 Go 解决了 C++ 的存在的问题,但是 Go 对于 micro controllers 不利呀,把 unsafe 列为禁忌的语言,你看哪个 bootloader 不是 ld 占据固定某片区的。

    如果谈爱好当然 including Ruby,其实很多项目如果有了 rb 根本就不需要 C 写得太多 code 了,而且更美观、简短和灵活,灵活我觉得是最重要的,这是能不能加速的重要条件,把 performance 交给 C,把 logic 交给 ruby。

    写代码,ruby 和 C 更配哦

  • 顺便路过

  • 看标题太吸引人了,所以进来冒个泡,撒西不理

  • Why Sometimes I Write WET Code at 2018年09月14日

    认可这个看法,我着手了一年多静态语言之后,虽然 eval / mm / reflect 很灵活,现在反过来就不再爱这些 EMR 了。

    如果是在小公司呆着,而且自己写项目,后者小团队,大家互相不干扰干活,是挺好的。

    如果碰到是华为、外包、要求严格的企业,他们就不让这么干了,因为他们崇尚 接口设计,而且也不允许使用灵活的语言。

    接口定义得良好,实现烂一点影响范围也有限,并且容易重构过来。

    不过对于 Python,我建议 @hooopo尤其是 Ruby、Python这样动态语言, 在没那么熟悉业务的情况下 删掉 Python,因为 Python 其实是一门很不灵活的语言。

    Python 的 private 根本不是大众口味的面向对象继承的,更像是 C++ 的 private 继承,到了后面的类没法好好取出来,只能通过 Parent_method,因此我觉得 Python 是怪味的,一开始就不旨意你去 call parent private。

    C++ 有 public 也有 protected 也有 private 继承模式,组合起来应对各种变态的场景,但是我觉得 Python 学到了它的坏处,同时在动态语言中多重继承。

    Python 这么做是为了让 object plain (扁平)得成个 dict,所有 object 都是 meta-table,而且还要是 C-flavor 的 map。

    怎么评价呢,反正个人的观点是认为 Python 就是模仿着强类型静态的模式和论调去进行动态编程,然而最终编码和行为一定是诡异的。

    所以 Python 的 object 让人用起来很刻板,写起来也感觉很死板。

    不像 Ruby,Ruby 从语法上光扬了 EMR,更偏向于 Java 真正将 object 当成有血有肉的 object 的 flavor。

    但是 Python 的刻板和死板好处就是对于数据结构初学者有好处,刚学计算机、编程的也很好接受基本类型,是字典就是字典,类就是个字典,对象也是个字典,数据结构就是 struct 套 struct,加上 Python 很少的语法糖,可以让新手很好入门。不用想太多。

    Ruby Java 适合进阶玩家,已经有了一套体系,在明白了基础之后,再去带有感性、抽象思维去使用才会好用。

    EMR 就是充斥了大量的 感性,就像人编码往往带有个性,这时候不是所有 team member 都理解自己的 imagination,这时候就会带来维护的困难,甚至自己也不记得当初 how to imagine this design 而维护困难。

    所以很多公司选择 Python 而不是 Ruby,也有这方面的原因。

    如果说:

    可读性 > 可扩展 > 优雅

    那么,Ruby EMR 之后产生了 DSL,是很优雅,很抽象,但是很可能别人是看不懂的,跟读唐诗文言文一样,得背负着可能无法读懂的框架的问题。DSL 赞扬了个性与隐晦,对于扩展与可读性也是不好下手的事情。

    作为企业,企业要尽可能考虑快速生产、迭代、编辑维护(Edit),在经济极端时刻必须极力消灭隐晦,宁可让你去写着从头到尾过程编程,连类(class)都不写,从一个又一个 file module import a import b 变量,跟 C 一样这里那里 extern,甚至干脆全局变量的无脑的 Python,也不会让你去 OOP,让你去 EMR,因为 EMR 是他们的大敌。

    所以 Ruby 是一门很可怜的语言,企业不敢用,尤其在现在霜月时刻(涉及敏感 ZZ 问题,不讨论)。

    同时,看到最近 Python 在拼命招人,感觉对编码越来越没兴趣了,感觉社会趋向变成了网站编辑、没智商的调包侠的世界了。

  • 小农思想害死人 at 2018年06月22日

    你想说我吗

  • 进程死锁 at 2018年06月10日

    哈哈哈哈哈哈哈哈

    你的浏览器提交死循环了

    还是说你重复点了很多次?

    表示 jruby 我只敢用 1.7 的…… 估计是兼容性问题

    jdk?openjdk?6? 7? 8? 9?

  • 这一定是程序猿画的

  • 哈哈哈,“面向对象本身就快不起来”,嗯,怎么说吧,跟“面向对象”可能关系吧,个人觉得有点不太大(个人而已),Py Rb 的对象都是一块块有点体积的内存,相对于纯 C / C++ / Go writing 来说哈,我在 C / Cpp programming 的时候,ref 或 指针引用是高效的,其中 ref 是最高效的。 就拿字符串拷贝讨论,你从文件 read 一波数据,你的变量的内存得 copy 来 copy 去,C++ 的 vector 可以:

    auto data = new std::vector<char>();
    std::FILE* f = std::fopen("test.txt", "r");
    char * data_piece = new data_piece[4096];
    
    while (fin.eof()) {
        length = std::fread(& data_piece[0], sizeof(char), 1024, f);
        data.insert(data_piece, data_piece + length); // 重点在这一句
    }
    
    ...
    

    请不要吐槽这段代码,纯粹是随即编写的,就当作伪代码好了。

    C / C++ / Go 可以很好地重复利用一块内存其中的一部分,而且很好地自由地去利用它。因为反复内存分配(系统调用)是在 C++ 开发界普遍认为是很低效的。

    但是脚本语言让人遗忘了这些,反正 GC 会管理,写得痛快。

    所以之前就有人说,你要是用 JS 去处理 pack unpack 二进制,还得转 Array,总之就是不方便。

    另外,这也是当初我比较喜欢 ObjC 的原因,因为 ObjC 是面向对象的可半手动管理内存的语言,虽然 ObjC 有 ARC,但是很多场景你是可以高效利用内存的。

    要想在 AI 高效反复利用这些变量去进行快速而且高效的操作,那肯定还是这样的语言(C / C++)比较擅长。但是这还并不算最高效的,C / C++ 编译之后出来的机器码具体运算算法并不是最优的,有些大神喜欢用自己手工优化的汇编来将无法优化或编译器优化得不够极致但是需要效率的地方。