V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
beryl
V2EX  ›  程序员

如何看待工作中大规模使用 AI 写代码

  •  
  •   beryl · 12 天前 · 5767 次点击
    写工作生成代码

    先说我的观点:不赞成写生产环境的工作代码,质量真的是污染代码

    但是写点脚本,小 demo 可以,或者多行补全也可以接受
    第 1 条附言  ·  12 天前
    抛开问题不谈,AI 绝对取代不了,这种讨论问题的多样性(拖拉拽。。。

    回到问题:
    1. 这里说的是工作的代码,实际项目在线上有几十万几百万人在用到的产品
    2. 不是反对 AI, 我自己就是 AI 深度用户和体验者,也是从业者



    我想表达的是:
    对于复杂项目,如果思考不够,就盲目使用 AI 生成代码,这难道不是灾难性的么


    回到我自己:
    1. 在写某个片段的具体实现
    2. 调研性质 demo 项目
    3. 脚本类型语言
    4. 知识辅助
    这些都是我高频使用的,而且我也非常相信 AI 取代或者提效了一大堆程序员
    69 条回复    2024-12-04 13:30:52 +08:00
    ty29022
        1
    ty29022  
       12 天前   ❤️ 7
    不如你贴出手写的一些代码片段和 chatgpt 生成的片段来做个对比
    solituders
        2
    solituders  
       12 天前
    不如你贴出手写的一些代码片段和 chatgpt 生成的片段来做个对比
    13482034233
        3
    13482034233  
       12 天前
    要想要好的 output, 就先得有好的 input, 所以同样一个模型, 同样一个产品业务逻辑, 有的人就能用大模型写出好的代码, 有的则不行
    charlie21
        4
    charlie21  
       12 天前   ❤️ 9
    人审核代码合理性的审核的能力 > AI 写代码的写的能力 > 人写代码的写的能力
    l4ever
        5
    l4ever  
       12 天前
    生成->使用->了解为什么这么写, 和自己设想有何出入->取舍->利用.

    挺好的, 学习速度明显快了.
    FreshOldMan
        6
    FreshOldMan  
       12 天前
    chagpt o1 写的还不错
    mightybruce
        7
    mightybruce  
       12 天前   ❤️ 2
    最近这种低质量的贴怎么越来越多, 来活跃社区的吗
    xuefeng0578
        8
    xuefeng0578  
       12 天前
    面对现实吧,早点谋下其它出路
    liujl
        9
    liujl  
       12 天前 via Android   ❤️ 1
    昨天用 claude 这可一个油猴脚本, 纯自然语言,代码规范度,质量非常不错, 程序员的出路回到家编程的本质“理解业务,设计程序业务逻辑,交互逻辑,呈现结果”
    wangtian2020
        10
    wangtian2020  
       12 天前
    写代码的事你少管
    junas7
        11
    junas7  
       12 天前 via Android
    你也是出租车司机吗,来抗议 ai 智能驾驶
    GeekGao
        12
    GeekGao  
       12 天前
    使用 AI 也有技巧的,能力不行,用 AI 也很难与同行竞争 LOL
    zjh7890
        13
    zjh7890  
       12 天前 via iPhone
    路过…推荐下 JetBrains IDE 可用的类 cursor 插件,gpt-tools…
    zjh7890
        14
    zjh7890  
       12 天前 via iPhone
    我时常觉得,ai 写得比我好…结构清晰…
    zhouxelf
        15
    zhouxelf  
       12 天前
    污染代码?? please show your code
    bmpidev2019
        16
    bmpidev2019  
       12 天前
    大概率你写的代码质量不如 Claude 的高,除非是一些专业领域,它没有训练过的,但是最佳实践,编程范式,设计模式,它都能吊打你的水平。
    lyxxxh2
        17
    lyxxxh2  
       12 天前   ❤️ 1
    ```
    # 以下由 gpt 生成
    def init_input_and_output_door(self):
    frame_results = copy.deepcopy(
    self.frame_results
    ) # self.frame_results 会被以下代码改变 找太麻烦了 直接拷贝到新对象
    door_line = [[828, 438], [1208, 868]]
    door_area_line = [[623, 523], [1144, 982]]
    door_line = [[336, 0], [1698, 1222]]
    door_line =[[186, 0], [1428, 1222]]
    door_line = [[336, 0], [1698, 1222]]
    def is_above_line(point, line):
    (x1, y1), (x2, y2) = line
    return (y2 - y1) * (point[0] - x1) > (x2 - x1) * (point[1] - y1)
    def filter_boxes_above_line(frame_results, door_area_line):
    filtered_results = []
    for frame in frame_results:
    filtered_boxes = []
    for box in frame["boxes"]:
    x_min, y_min, x_max, y_max = box
    box_center = [(x_min + x_max) / 2, (y_min + y_max) / 2]
    if is_above_line(box_center, door_area_line):
    filtered_boxes.append(box)
    if filtered_boxes:
    filtered_frame = {
    "id": frame["id"],
    "boxes": filtered_boxes,
    "reid_dets": frame["reid_dets"], # 保留每个帧的 reid_dets
    }
    filtered_results.append(filtered_frame)
    return filtered_results

    filtered_frame_results = filter_boxes_above_line(frame_results, door_area_line)
    filtered_frame_results = [
    item for item in filtered_frame_results if len(item["boxes"]) != 0
    ]

    # 使用 IOUTracker 类
    tracker = IOUTracker(iou_threshold=0.3)
    all_tracks = tracker.track_objects(filtered_frame_results)

    # 用于记录人的信息、reid_dets 和 frame_ids
    person_groups = defaultdict(list)
    person_reid_dets = defaultdict(list)
    person_frame_ids = defaultdict(list)
    for frame, track_ids in zip(filtered_frame_results, all_tracks):
    for box in frame["boxes"]:
    matching_id = [
    id for id, tracked_box in track_ids.items() if tracked_box == box
    ]
    if matching_id:
    box.append("person_id: {}".format(matching_id[0]))
    person_groups[matching_id[0]].append(box[:-1]) # 不包括 person_id
    person_reid_dets[matching_id[0]].append(
    frame["reid_dets"]
    ) # 记录 reid_dets
    person_frame_ids[matching_id[0]].append(
    frame["id"]
    ) # 记录 frame id

    crossing_events = {}
    final_crossing_frames = {}

    # 门线参数
    m = (door_line[1][1] - door_line[0][1]) / (
    door_line[1][0] - door_line[0][0]
    ) # 斜率
    c = door_line[0][1] - m * door_line[0][0] # 截距

    def check_position(x, y):
    line_y = m * x + c
    return y - line_y # > 0 在线上方,< 0 在线下方

    for person_id, boxes in person_groups.items():
    last_pos = None
    entry_index = None
    exit_index = None
    # if person_id != 2:
    # continue
    for idx, box in enumerate(boxes):
    x_center = (box[0] + box[2]) / 2
    y_center = (box[1] + box[3]) / 2
    current_pos = check_position(x_center, y_center)

    if last_pos is not None:
    if last_pos > 0 and current_pos < 0:
    exit_index = idx
    elif last_pos < 0 and current_pos > 0:
    entry_index = idx
    last_pos = current_pos

    crossing_events[person_id] = {
    "input_index": exit_index,
    "output_index": entry_index,
    }

    for person_id, events in crossing_events.items():
    person_data = []
    boxes = person_groups[person_id]
    reid_dets = person_reid_dets[person_id]
    frame_ids = person_frame_ids[person_id] # 获取 frame id 列表

    if events["input_index"] is not None:
    input_index = events["input_index"]
    input_frames = boxes[input_index : input_index + 3]
    input_reid_dets = reid_dets[input_index : input_index + 3]
    input_frame_ids = frame_ids[
    input_index : input_index + 3
    ] # 取相应的 frame ids
    person_data.append(
    {
    "type": "output",
    "all_box": input_frames,
    "reid_dets": input_reid_dets,
    "frame_ids": input_frame_ids,
    "ids": list(
    range(input_index, input_index + len(input_frames))
    ),
    }
    )

    if events["output_index"] is not None:
    output_index = events["output_index"]
    output_frames_start = max(0, output_index - 2)
    output_frames = boxes[output_frames_start : output_index + 1]
    output_reid_dets = reid_dets[output_frames_start : output_index + 1]
    output_frame_ids = frame_ids[
    output_frames_start : output_index + 1
    ] # 取相应的 frame ids
    person_data.append(
    {
    "type": "input",
    "all_box": output_frames,
    "reid_dets": output_reid_dets,
    "frame_ids": output_frame_ids,
    "ids": list(range(output_frames_start, output_index + 1)),
    }
    )

    final_crossing_frames[person_id] = person_data
    ```

    之前让 gpt 写的。
    也不是不能用,就是没一点"设计"的感觉。
    让他再优化下,直接处 bug 。
    逻辑越复杂,我就不敢用 ai 。
    因为描述太麻烦了,得写篇作文给他。
    再者很难阅读和修改。


    后面我直接重写了
    ```
    # 定义数据
    for box, person_id in zip(data["head_boxes"], person_ids):
    if person_id is None:
    continue
    if person_id not in self.door: # 初始化 key
    self.door[person_id] = []
    self.user_door_status[person_id] = None # 用户和门状态
    for device in self.devices: # 用户和设备状态
    if person_id not in device["persons"]:
    device["persons"][person_id] = []

    self.door[person_id].append(
    {"box": box, "up_or_line": self.box_line_up_or_down(box)}
    ) # 添加到门记录器
    if len(self.door[person_id]) > 100: # 用户超过一百
    self.door[person_id] = self.door[person_id][-50:]
    for device in self.devices: # 添加到设备记录器
    if person_id not in device:
    device["persons"][person_id].append(
    self.calculate_containment_ratio(device["box"], box)
    )
    if len(device["persons"][person_id]) > 100:
    device["persons"][person_id] = device["persons"][person_id][-50:]

    # 根据
    for person_id in self.door:
    ...
    ....
    ```
    delacey
        18
    delacey  
       12 天前
    @bmpidev2019 感觉程序员这行危险了,既然 ai 代码水平超过大部分程序员,那大家以后怎么和 ai 竞争呢?
    justfindu
        19
    justfindu  
       12 天前
    你都是生成直接上? 不会在给它提点要求优化一下代码和逻辑?
    FreshOldMan
        20
    FreshOldMan  
       12 天前
    @delacey #18 就是没法竞争,不仅包括程序员
    UIHIHUHIU
        21
    UIHIHUHIU  
       12 天前
    我倒觉得 ai 让很多没有什么代码基础或者说基础不好的人能写点代码了,毕竟不是每个人都是程序员,大部分人还只是有一点代码需求,但是去深入学的话太费时间了,ai 就是解决这个问题的
    littlewing
        22
    littlewing  
       12 天前
    公司给买了 Copilot ,我用他作为增强型的代码补全
    bk201
        23
    bk201  
       12 天前
    ai 的东西不调,根本没法用,倒是很多体力活可以用它
    baysonfox
        24
    baysonfox  
       12 天前
    我现在一般是写个基本逻辑 -> AI 细化-> 自己分析调整 -> AI 提建议 进一步优化性能/可读性
    vsitebon
        25
    vsitebon  
       12 天前
    @mightybruce #5 金币比之前值钱了
    bmpidev2019
        26
    bmpidev2019  
       12 天前
    @delacey 先学会怎么用 AI 写代码,而不是自己写,汽车出来了,你还研究如何拉黄包车拉的更稳更快?难道不是学会开汽车吗
    prosgtsr
        27
    prosgtsr  
       12 天前
    只用过方法内的补全。感觉从代码规范上来说还不错。。不过 bug 确实也不少,还是要肉眼 debug
    更复杂的直接生成方法、类,就没用过了
    Jerry23333
        28
    Jerry23333  
       12 天前
    在 ba 都待过,都在大力推 ai 生成代码,甚至会考核团队的使用率。
    Mogugugugu
        29
    Mogugugugu  
       12 天前   ❤️ 12
    uzumaki
        30
    uzumaki  
       12 天前
    咋了 你现在 txt 写代码了?
    murmur
        31
    murmur  
       12 天前
    ai 太爽了

    我之前做数据对接,写的 keyvalue 格式,结果错了,要求[{key: xxx, value: xxx}]格式,我用 AI 一下就给我翻译过来了,又快有准
    EdisonEdz
        32
    EdisonEdz  
       12 天前
    我们公司还要求 AI 生成的占比了,属于是本末倒置了
    Promtheus
        33
    Promtheus  
       12 天前
    ai 只是给个建议啊 难道你一行不看直接能跑就用的吗🤣 只是更强大的智能补全而已 主要还是靠人
    Greendays
        34
    Greendays  
       12 天前
    繁琐的部分用 AI 很合适,尤其是各种格式转换,还有正则表达式。简单的部分还是自己来吧。
    beryl
        35
    beryl  
    OP
       12 天前
    @solituders
    @ty29022
    但是这个前提都是代码片段,对于设计层面的扩展性,复用性,如何做到呢。
    工作中更多的代码需要考虑的是可维护性、复用性
    beryl
        36
    beryl  
    OP
       12 天前
    @mightybruce 为什么这就是低质量了,那高质量的讨论应该是什么

    @vsitebon 从来没有关注过金币体系,而且这里只要正常表达,金币从来不是作为一个什么观念
    rlds
        37
    rlds  
       12 天前
    除非 ai 写的代码你不看,直接就用了,不然 ai 作为辅助提示和某些代码片段补全还是不错的。
    james2013
        38
    james2013  
       12 天前 via Android
    大规模写不了
    作为中小公司的程序员,面向业务开发,只要有 3 年以上经验,写业务代码只是脑力劳动,只有少数情况才用下
    simpleman
        39
    simpleman  
       12 天前
    我反正尽量使用 gpt, 有时需要用没见过的算法, gpt 一下就搞定了.
    InkStone
        40
    InkStone  
       12 天前   ❤️ 2
    - 开发者自己知道要写什么,写成什么样,用 AI 来快速完成编码这个纯劳力过程 质量 √ 速度 √
    - 开发者大概知道要些什么,向 AI 提需求,能简单验证一下代码,但没什么明确预期 质量 × 速度 √
    - 开发者什么都不懂,把 AI 当许愿机用,生成什么算什么 质量 × 速度 ×


    AI 能给出什么样质量的代码,其实取决于开发自己的水平。
    terrysnake
        41
    terrysnake  
       12 天前
    硅谷程序员 80% 的代码都是 AI 写的了,别在这高贵了。关键是要学会怎么和 AI 配合,提高效率。
    franswish
        42
    franswish  
       12 天前
    @InkStone
    前两条不评价,关于第三条:“- 开发者什么都不懂,把 AI 当许愿机用,生成什么算什么 质量 × 速度 ×”
    你这么想,把这个开发者当许愿机,产出=0 ,因为他什么都不懂,把 AI 当许愿机,至少能给一些反馈吧,即使是不能用,大概率也是相关的
    guoliim
        43
    guoliim  
       12 天前
    好用 快用
    rekulas
        44
    rekulas  
       12 天前
    @InkStone 赞同这个观点,ai 代码水平有优有劣,要确保自己能 review 每一行代码才能 hold 住,觉得 ai 代码垃圾的,大概率自己水平估计也。。。

    前几天才有个小白用 ai 写合约代码结果被盗 2k 多刀,因为 ai 代码被污染了,这就是水平差又过于依赖 ai 的后果,一个正常水平的开发者,review 代码就能发现问题了
    rekulas
        45
    rekulas  
       12 天前
    @franswish 看我的回复,也有可能是负反馈。。。
    smdbh
        46
    smdbh  
       12 天前
    高级搜索引擎, 如果别人写的好,为什么不用
    COW
        47
    COW  
       12 天前 via Android
    当然可以写,但你要自己执行 review 和 test 呀,前几天好像有个老哥被 AI 删数据了
    LeslieLeung
        48
    LeslieLeung  
       12 天前
    AI 决定下限(真的不比一些人写得差),个人能力决定上限
    z1829909
        49
    z1829909  
       12 天前 via Android
    @terrysnake 这个 80 %怎么有股营销号的味道
    zjh7890
        50
    zjh7890  
       12 天前 via iPhone
    @z1829909 按行数来算我觉得不算夸大,我目前组织业务逻和样板代码都用 ai ,大刀阔斧。做好设计就行
    raycool
        51
    raycool  
       12 天前
    我正在主导银行采购某家代码提示助手,你和我说没用?
    rpish
        52
    rpish  
       12 天前
    @terrysnake 好奇这个数据来源,可以分享一下吗?
    terrysnake
        53
    terrysnake  
       12 天前   ❤️ 1
    @rpish 老板从硅谷回来以后说的🤣
    quake0day
        54
    quake0day  
       12 天前
    楼主可能以为自己写代码是一个艺术创作,代码是艺术表达的媒介。实际代码写作只是和流水线的工人一样,代码能够易读易懂能够顺利完成任务就行——AI 写的代码完全能够符合要求。
    soul11201
        55
    soul11201  
       12 天前
    反正使用人要对最终结果负责,只要使用的人不怕被炸死,为什么不可以用呢?
    cheesepoutine
        56
    cheesepoutine  
       12 天前 via iPhone
    我们公司买了 chatgpt 、github copilot 、microsoft copilot 各种 ai 工具鼓励大家使用 ai 提高效率,把重复性的工作想办法交给 ai 。代码方面主要还是以补全和写框架为主吧。而且 code review 还是要人来做。
    RipperJack666
        57
    RipperJack666  
       12 天前
    ai 辅助工具只会让强的人更强
    wu67
        58
    wu67  
       11 天前
    我用 Gemini 来小规模辅助还挺爽的呀,
    碰到某些忘记的写法, 就找它
    写我不会玩的 shell script, 也找它
    无聊了也会拿一段详细描述丢进去让他实现, 跟我自己写的对比一下

    ai 这东西现阶段还是看你怎么用, 当辅助工具是真不错, 但是想让它完全替你干活, 它可能就会瞎编代码了, api 都对不上的那种
    xsen
        59
    xsen  
       11 天前
    这本身说明你在使用 ai 过程中定位存在偏差
    要做复杂项目,对自身定位应该是 架构+review+测试
    cctv180
        60
    cctv180  
       11 天前
    @littlewing 公司真好啊,我只能用免费的通义灵码已经爽翻天了。😁
    chesha1
        61
    chesha1  
       11 天前
    sonnet 的代码质量比我高咋办,我写的质量才是真正污染代码了
    qiyustart
        62
    qiyustart  
       11 天前
    可以试试用 claude sonnet v2 版本 或者 gpt 这个版本的试试
    ai 暂时还取代不了人,但是用来做辅助还是不错的,善用工具用好工具也是一个能力。
    另外最近 cursor 配合 claude sonnet v2 是真的强,推荐你试试,用了快两年 gpt 了,最近已经迷上 claude 了,前提是你能用
    zhengfan2016
        63
    zhengfan2016  
       11 天前
    很好奇你们用 ai 辅助生成的东西会经常一大堆注释吗,和我合作的人写的代码经常自带一堆注释,很多没用的中文注释,几乎每两三行就有一个注释,问题是这些注释特别基础,除了增加行数没有任何作用,看着很烦。
    wwhontheway
        64
    wwhontheway  
       11 天前
    ai 写的代码也要自己 review 的呀,相辅相成。
    proxyai
        65
    proxyai  
       11 天前
    检验楼主点蜡烛,敲算盘
    AoEiuV020JP
        66
    AoEiuV020JP  
       11 天前
    cursor composer + claude-3.5-sonnet 写的代码是真的好,基本只要审核一下是否符合需求就可以了,
    其他 ai 代码只能看看,参考一下然后自己写,cursor composer 能找出要改的代码, 要加的文件,自己给你整个搞定,有理解不到位甚至一些编码质量问题都可以再沟通调整,
    最大问题是次数限制不够用,
    archxm
        67
    archxm  
       11 天前 via Android
    无中生有啊。我身边似乎没人用啊
    x2ve
        68
    x2ve  
       10 天前
    我还是觉得 1 设计 2 出活 3 优化,不要过于执着于初期的代码质量,时间上不允许,通过好的设计来规避部分代码质量的问题。到了后期有盈利的项目才考虑精益求精/屎上雕花
    terrysnake
        69
    terrysnake  
       7 天前
    @zhengfan2016 可以要求他如何写注释的啊,需求讲给他听就行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5465 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:51 · PVG 09:51 · LAX 17:51 · JFK 20:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.