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

如何维护同事的在'防御性编程'下写的代码

  •  
  •   qiangguodiceng · 98 天前 · 3191 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    • 我是一名前端程序员,两年前加入现在的公司
    • 公司规模较小,前端团队仅有 3 人
    • 入职时,有一位应届生同事已在职

    初期情况

    • 入职后,我与该同事分别负责独立项目
    • 未曾深入了解该同事的代码质量

    问题发现

    • 去年年底,老板要求我参与该同事的项目
    • 尝试修改一个小功能模块时发现严重问题:
      • 预计用时 1 小时的任务花费了大半天
      • 代码存在大量问题,难以维护
    • 之后,我选择不再参与该项目

    当前困境

    • 本周,老板单独与我谈话
    • 老板对我不愿接手该项目表示不满
    • 质疑我的工作能力和态度

    公司情况

    • 老板有技术背景,会编程
    • 公司整体不重视技术发展

    寻求建议

    • 如何改善同事的编程习惯?
    • 如何向老板解释情况?
    • 如何在不影响团队关系的前提下改善代码质量?

    37 条回复    2024-07-31 21:08:37 +08:00
    billbur
        1
    billbur  
       98 天前   ❤️ 1
    停止污名化“防御性编程”,垃圾代码就直接说垃圾代码
    murmur
        2
    murmur  
       98 天前
    我日这个 aaaa 和 dddd 真忍不了了
    yanyao233
        3
    yanyao233  
       98 天前 via Android
    我草看了那么多说搞防御性编程的帖子我都以为是开玩笑,没想到真有傻逼搞啊
    tool2dx
        4
    tool2dx  
       98 天前
    几何算法你不可能指望写法有多优雅的,本来就是一大堆算法,外部都是调用 API 。

    我由于项目需要,引进了一个 google/s2geometry 算法库,这个改起来才叫一个吐血。
    Lyndi
        5
    Lyndi  
       98 天前
    菜就多练
    retrocode
        6
    retrocode  
       98 天前
    菜就是菜, 不用给自己找补, 大伙都是开开玩笑得了, 你真这么写代码啊.
    yinmin
        7
    yinmin  
       98 天前 via iPhone
    这个代码还算可以。看不懂的部分可以扔给 ai 解释,你可以试试 claude 3.5 sonnet (这个很强,真根据需求能写代码)、deepseek coder (这个便宜、国产用起来方便)
    GeruzoniAnsasu
        8
    GeruzoniAnsasu  
       98 天前   ❤️ 1
    菜就多练+1

    没感觉这代码有多逆天,只是写算法来渲染的玩意都比较难看懂很正常,但 AI 擅长这个。 丢给 copilot 让它教你读
    XiLingHost
        9
    XiLingHost  
       98 天前
    防御性编程防的是用户不是同事啊......这个词一般是说代码有极高的容错,完全不相信用户输入,能校验就校验
    iyiluo
        10
    iyiluo  
       98 天前
    防御性编程是指入参不可靠,需要做好防御。你这是参与同事烂代码开发,现在有了 ai ,我看见烂代码没那么怂了,以前是真头疼
    estk
        11
    estk  
       98 天前 via iPhone
    说不定开发者自己本人都不愿意维护
    xiangyuecn
        12
    xiangyuecn  
       98 天前
    复杂逻辑的代码本身就难看懂,几何运算各种 x y 值
    whp1473
        13
    whp1473  
       98 天前
    实际情况是,一个需求老大预估 1 天,但因为代码写的难维护,3 天了还在各种改 if else 、线程并发、队列跳来跳去。这种实际情况就告知老大就可以,可以改但需要时间,然后代码能不大改就不要大改,因为你永远不知道这个看起来没用的 if 是不是搞了骚操作。
    smdbh
        14
    smdbh  
       98 天前
    这个显然不是“防御性”编程, 也不是防御性编程,
    Vitumoc
        15
    Vitumoc  
       98 天前   ❤️ 1
    没看出同事的代码有特别大的问题,最多就是变量名随意或者注释偏少

    感觉代码的复杂度是来自于图形业务本身,我不认为你同事故意增加了复杂度,最多只能说他没有刻意的降低复杂度

    这种图形业务想把代码写优雅很难,你的应届生同事不一定做得到,实际上你也不一定做得到

    另外,再简单的任务也不能只给自己留一个小时,更何况这是别人的代码
    StrangerA
        16
    StrangerA  
       98 天前   ❤️ 2
    几何算法真的就是这样的了,人家好歹给你留了注释。

    你不愿意去仔细看那是态度问题,看了看不懂确实是能力问题。

    老板没骂错。

    虽然上面的代码格式有点问题( eslint + prettier 可破)以及变量用得有些狂野(上 typescript 限定类型能好点),但也别指望几何算法能靠这些功夫好上多少。
    mosfet
        17
    mosfet  
       98 天前
    他是应届生啊,标准的“教科书”写法啊
    只能说你们公司既没规范文档,也没相关培训
    你网上找份规范文档,要求大家都按上面的来
    Laysan
        18
    Laysan  
       98 天前
    别啥都叫 防御性编程
    Laysan
        19
    Laysan  
       98 天前   ❤️ 1
    本来一个褒义词硬生生干成了贬义词,就像卧龙凤雏
    LiuN1an
        20
    LiuN1an  
       98 天前
    上来就告诉老板你花一个小时就能改完别人的代码,然后自己打脸。还是入世太浅
    zdw189803631
        21
    zdw189803631  
       98 天前
    这代码我觉得还行,实话
    kokutou
        22
    kokutou  
       98 天前 via Android
    你写一个试试,你看看是不是也这样
    magic3584
        23
    magic3584  
       98 天前
    如何改善同事的编程习惯?
    -- 管好你自己就行

    如何向老板解释情况?
    -- 当然是说实话了

    如何在不影响团队关系的前提下改善代码质量?
    -- 当领导,制定代码规范
    iloveayu
        24
    iloveayu  
       98 天前
    别碰,绕过去然后拉一坨新的屎。
    sagaxu
        25
    sagaxu  
       98 天前
    防御性编程 ❌

    腹黑性编程 ✅
    zgl263885
        26
    zgl263885  
       98 天前 via iPhone
    我也分不清有些人到底是防御性编程还是单纯的菜,手头接手代码删除了一半了(工具统计),功能还差不多是这些,而且感觉还能删除 3 成。不是非删了才显得自己厉害,是真看不下去,一个方法复制 20 遍,卧槽 tmd,越想越来气!
    leokun
        27
    leokun  
       98 天前
    这个还好,逻辑比较集中,上下文不是很长,js 最恶心的是滥用闭包
    Laysan
        28
    Laysan  
       98 天前
    防御性编程( Defensive Programming )是一种软件开发方法和策略,其主要目的是通过在代码中实施一系列预防措施,来增强软件系统的稳定性、可靠性和安全性。防御性编程的核心理念是在设计和实现软件时,不仅仅考虑正常情况下的预期行为,还要特别关注异常情况和不正确输入可能带来的潜在问题。以下是防御性编程的关键特征和实践:

    1. **输入验证和过滤**:在接收和处理用户输入、外部数据或其他系统交互时,进行严格的输入验证。这包括数据类型、格式、长度等方面的检查,以防止不良数据导致的错误或安全漏洞。

    2. **异常处理**:设计和实现代码时,考虑可能发生的异常情况,并编写相应的异常处理机制。良好的异常处理可以确保系统在出现问题时能够优雅地恢复或提供适当的反馈,而不会导致系统崩溃或产生未预期的行为。

    3. **边界检查**:在使用数组、指针或其他数据结构时,进行边界检查和越界防护。这可以防止因为访问超出数据结构边界而导致的内存错误或数据损坏。

    4. **资源管理**:合理管理系统资源,包括内存、文件句柄、数据库连接等。防御性编程要求在使用完资源后及时释放,避免资源泄露和系统性能问题。

    5. **日志和错误处理**:适当地记录错误信息和系统状态,以便于问题排查和分析。良好的日志记录是防御性编程的重要组成部分,有助于及时发现和解决潜在问题。

    通过采用这些实践,防御性编程可以显著提高软件系统的健壮性和可维护性,减少由于意外情况导致的系统故障和安全漏洞,从而增强整体的用户体验和系统可靠性。
    abelmakihara
        29
    abelmakihara  
       97 天前
    @zgl263885 培训班刚出来的那种吧 脑子里没那个意识
    Georgedoe
        30
    Georgedoe  
       97 天前
    工作能力确实有问题 , 还喜欢归咎外因
    maymay5
        31
    maymay5  
       97 天前
    防御型编程是怎么做到的,我干过的公司,基本代码仓库都专门有个审核分支,写的代码都只能提交到审核分支,负责人看完后合并到主分支,没通过的直接邮件和工单,注释量和变量名甚至什么时候用 for 什么时候用 foreach 都要管🙄
    twofox
        32
    twofox  
       97 天前
    写几何算法的,能够优雅到哪里。其实我看着你这个还好,也给你留注释了。

    不过楼上那几个跳脚的,真没必要

    别说什么污名化防御性编程

    语言本来就是用来沟通的,大部分人知道这个意思是什么即可。防御性编程在不同语境可以有不同的含义,这并没有什么问题

    非要去找定义,并要求大家都按照这个定义来说话

    那要不你们先把奇葩这个词的含义改回来
    nullxx
        33
    nullxx  
       97 天前
    防御性编程不是默认参数都不对多加校验吗 怎么变成防优化了
    duan602728596
        34
    duan602728596  
       97 天前
    这个算是标准的非前端程序员的代码了。
    Betsy
        35
    Betsy  
       97 天前 via iPhone
    你要写具体的文档来证明这代码真的就是一坨屎,维护成本高,并且拉会跟老板一条一条的过来说服老板。如果你不能证明,那老板觉得你能力不行或者态度不端理所应当。

    PS:嘴上跟老板说这代码太烂了,顺口举几个不痛不痒的例子,或者截几张图,这种做法个人觉得毫无意义,大概率只会加剧老板对你的不满。
    iClass
        36
    iClass  
       97 天前 via Android
    不懂就问
    PainAndLove
        37
    PainAndLove  
       97 天前
    怎么跟我理解的防御性编程不是一个东西呢。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:04 · PVG 22:04 · LAX 06:04 · JFK 09:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.