首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeChP
V2EX  ›  职场话题

当你有那种把 Java 当 c 语言写的同事时,你很难不心态爆炸!

  •  
  •   LeeChP · 56 天前 · 4852 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目终于进入了第一版本的测试。开始对接了。原本的模块能单独运行,但是对接不上。因为他们就没考虑到状态控制。简单的观察者模式加简单多线程就行。花了一周帮他们填上了。
    对接,测试,心态爆炸,就测了两个状态,我就侵入了他们很多子模块。没有接口,没有抽象。我不得不各种 cv。服了。40 多个状态量,我不想玩了。明天开会就提重构的事。
    38 回复  |  直到 2019-12-02 22:16:14 +08:00
    cominghome
        1
    cominghome   56 天前
    我倒是想知道他是怎么把面向对象写成面向过程的,居然还提测了
    LeeChP
        2
    LeeChP   56 天前 via Android
    @cominghome
    全是方法类,没有一个抽象,没有一个接口。
    LeeChP
        3
    LeeChP   56 天前 via Android
    @cominghome 他们说,他们独立测试测过了。但是他们根本不考虑联合测试!
    petelin
        4
    petelin   56 天前 via iPhone
    @cominghome 只要没有思考 没有抽象 组织 结构的写法 都是面向过程的
    顺序的写代码。或者叫一次性代码
    petelin
        5
    petelin   56 天前 via iPhone
    @petelin 当然这里不是贬低面向过程 实际上 面向过程是代码片段的一个组成部分
    LeeChP
        6
    LeeChP   56 天前 via iPad
    @petelin 你说的没错,没有任何思考。没有任何思考。对接起来,有一些我需要调用到他们的方法,都没有办法复用,百分之八十以上需要重写。状态校验根本就是糊弄
    TypeError
        7
    TypeError   56 天前 via Android
    怎么招进来的
    sagaxu
        8
    sagaxu   56 天前 via Android   ♥ 2
    模块之间的 API 都没定好,你们就能开始写代码了吗?如果是这样,团队里一个靠谱的人都没有。

    模块之间符合 API 定义,你管人家内部怎么实现,即使一个接口和抽象类都没有又有什么关系?写一堆接口,然后大部分接口只有一种实现,我觉得那是过度封装。
    trait
        9
    trait   56 天前 via iPhone
    这种人适合 go,不用动脑子想什么内存管理组织结构,随便瞎写也有 gc 兜底
    LeeChP
        10
    LeeChP   56 天前 via Android
    @sagaxu api 其实早就讨论烂了,但是文档不看,代码不看,之前忙,我也没空看他们代码!我根据需求来,他们是想什么就做什么。就在前几天提醒他们添加状态切换标记,实例代码都给他们,剩下的就是体力活了,还他妈的不乐意,要手把手教,那还不如我自己去做。

    现在是由于他们自己的模块没有做完整,状态触发检验缺失,我相当于在扩展他们的模块功能,由于他们没有做封装,我两个状态量的检验就 cv 到了他们三个类中,第一版本有接近 40 个!大量重复性代码,改拆的不拆,抽象几个基类出来,或者做成接口,能省多少精力?明白这种做法缺失什么了嘛?没错,缺乏可拓展性,可维护性。典型的写一个版本就跑路的做法!
    这样说,就相当于,我要 A 实现跑的行为,我要去 A 写一个跑的方法,我要 B 实现走路的行为,要去 B 类中写一个走的方法在他们模块中,我要 C 实现竞走这个行为,要去 C 类中实现竞走的方法!这种级别的抽象,他们都做不来。没错,就是这种级别的抽象!

    由于每一个行为都是被观察的对象,但是他们不做抽象,所以我每一个类中都要去实现一个 subject 接口,然后覆写添加,移除,通知的方法,惊不惊喜,刺不刺激,意不意外?
    charlie21
        11
    charlie21   56 天前 via iPhone
    啥项目阿 网站么
    df4VW
        12
    df4VW   56 天前
    上 gRPC 吧。。专治各种天马行空
    sagaxu
        13
    sagaxu   56 天前 via Android
    @LeeChP 这事很复杂吗,模块职责和边界划分好,API 订好,集成不起来,追责也就明确了。API 没定好是设计的锅,实现不好是具体开发的锅。

    把经常出锅的人排除在项目之外,团队合作会越来越顺畅。一有问题就自己上去扑火,对自己对团队氛围都不好。
    kneep
        14
    kneep   56 天前 via iPhone
    搞 C 的人转 Java,不用看哈,肯定就是工具类加静态方法
    LeeChP
        15
    LeeChP   55 天前 via Android
    @sagaxu 当然不复杂,就是很不愉快。都是些啥开发呀我靠
    Junjunya
        16
    Junjunya   55 天前
    看了半天,感觉这事和 C 语言有啥关系,明明是开发水平的问题
    LeeChP
        17
    LeeChP   55 天前 via Android
    @Junjunya 因为他们的代码像极了我处于用 c 写 hello. word 那时候的水平。因为就算用 C.该解耦的依旧能解耦,只不过没有那些高大上名词罢了
    aldenchang
        18
    aldenchang   55 天前 via iPhone
    面向对象不会用…c 语言躺着中枪
    phx13ye
        19
    phx13ye   55 天前   ♥ 1
    我寻思 redis 和 linux-kernel 代码写的挺漂亮的啊
    ivvei
        20
    ivvei   55 天前
    没看懂你在说什么东西,能给点代码举个例么。
    Nazz
        21
    Nazz   55 天前
    和 java 出身的人一起写 golang, 我也很难受
    wellhome
        22
    wellhome   55 天前 via iPhone   ♥ 1
    没看懂,有些业务真心没觉得一定要 oo.
    oo 不是万能药,这个抽像那个抽像
    你怎么不把 printf 抽像了?
    xpol
        23
    xpol   55 天前 via iPhone
    你说的这些都是个人工程能力、不关 C 语言的事。
    axwz88
        24
    axwz88   55 天前 via Android
    @wellhome 歪个楼,我也很反感这种为了抽象而抽象,为了封装而封装,什么鸡毛都要做成接口,脱裤子放屁(不是针对楼主)
    strider
        25
    strider   55 天前
    这个跟 c 语言没关系。
    pipi32167
        26
    pipi32167   55 天前
    @wellhome std::cout,你值得拥有
    uyhyygyug1234
        27
    uyhyygyug1234   55 天前
    @df4VW 这个可以详细讲讲么
    LeeChP
        28
    LeeChP   55 天前 via Android
    @wellhome 大量相同的方法,行为不一样,为什么不做个接口或者父类出来呢?
    LeeChP
        29
    LeeChP   55 天前 via Android
    @axwz88 大量的相似类,你们真的不考虑把他们抽象个父类出来吗?
    wellhome
        30
    wellhome   55 天前 via iPhone
    @axwz88 我也不是针对楼主。我看到一共只有三四行的类,就脑仁疼,而且名字都是老长老长的,这得亏有 ide 自动补齐,否则光敲这些个名字就累死人
    inwar
        31
    inwar   54 天前 via Android
    写 c 的日常是全局变量函数返回 void,入参当作指针用。我接过这样的 java,比楼主难过
    IGJacklove
        32
    IGJacklove   54 天前
    @wellhome Java 这边就是这种风格的,方法或参数的名字尽量表达明确,长不是问题,就怕 来个 int n, m 这种的,我看个代码参数还要看上下文才能明白。
    yingo
        33
    yingo   54 天前
    和语言无关
    shawnsh
        34
    shawnsh   54 天前
    C 语言也有接口,抽象
    xsen
        35
    xsen   54 天前
    Java 这种为了抽象而抽象还算好的,毕竟灵活度没 C++高。恶心的就是,用 C++做的,然后为了设计而设计,为了抽象而抽象——简单点就是过度设计,用烂了,一堆坑,全是坑。

    ——————————————————————
    更恶心的是没注释,没文档;变量命名用的全是缩写——有拼音缩写的,有英文缩写的
    当然,代码量还大,将近上百 M 的代码量

    这也是为什么很多人现在,毕竟喜欢 go 那样的风格。简单,清晰——语言层面提供足够多的基础功能
    xsen
        36
    xsen   54 天前
    楼主说的这种呢,就是需要一个人,把整个框架搭建起来,定义清晰的接口,实现模块或子系统之间的接口层
    然后子模块子系统内部,你管他怎么做

    还有,建议没事不要用继承了,很容易滥用,不可控。组合配合清晰的设计,是最理想的
    firefox12
        37
    firefox12   54 天前
    我寻思着 这里就没一个靠谱的人, 缺一个架构师, 需要一个人在 2 个团队 在交互前,把你们交互的方式 方法 如何调用,公共定义,职责都定义清楚。然后 大家面向接口编程,至于别人的代码怎么写,写多烂你管得着吗? 只要给你的接口可以工作,就 ok. 这里最大的问题 是根本没人搞过这个, 还说别人烂? 这就是项目管理烂, 架构设计烂,代码烂不烂的已经不重要了。


    我买的是个门锁,只要能装上去,插上钥匙可以打开 就可以,你管我里面是怎么工作的。你根本没定义门锁和门的接口,还来说我门锁设计得不好?
    mikulch
        38
    mikulch   52 天前 via iPhone
    工程能力好的人可遇不可求,而且有时候这些人工资不一定高。因为做的都是一些细的,似乎不太明显的活。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1509 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 01:47 · PVG 09:47 · LAX 17:47 · JFK 20:47
    ♥ Do have faith in what you're doing.