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

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

  •  
  •   beryl · 13 小时 59 分钟前 · 3335 次点击
    写工作生成代码

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

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

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



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


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

    挺好的, 学习速度明显快了.
    FreshOldMan
        6
    FreshOldMan  
       13 小时 45 分钟前
    chagpt o1 写的还不错
    mightybruce
        7
    mightybruce  
       13 小时 44 分钟前   ❤️ 2
    最近这种低质量的贴怎么越来越多, 来活跃社区的吗
    xuefeng0578
        8
    xuefeng0578  
       13 小时 43 分钟前
    面对现实吧,早点谋下其它出路
    liujl
        9
    liujl  
       13 小时 38 分钟前 via Android
    昨天用 claude 这可一个油猴脚本, 纯自然语言,代码规范度,质量非常不错, 程序员的出路回到家编程的本质“理解业务,设计程序业务逻辑,交互逻辑,呈现结果”
    wangtian2020
        10
    wangtian2020  
       13 小时 35 分钟前
    写代码的事你少管
    junas7
        11
    junas7  
       13 小时 2 分钟前 via Android
    你也是出租车司机吗,来抗议 ai 智能驾驶
    GeekGao
        12
    GeekGao  
       12 小时 59 分钟前
    使用 AI 也有技巧的,能力不行,用 AI 也很难与同行竞争 LOL
    zjh7890
        13
    zjh7890  
       12 小时 52 分钟前 via iPhone
    路过…推荐下 JetBrains IDE 可用的类 cursor 插件,gpt-tools…
    zjh7890
        14
    zjh7890  
       12 小时 51 分钟前 via iPhone
    我时常觉得,ai 写得比我好…结构清晰…
    zhouxelf
        15
    zhouxelf  
       12 小时 49 分钟前
    污染代码?? please show your code
    bmpidev2019
        16
    bmpidev2019  
       12 小时 46 分钟前
    大概率你写的代码质量不如 Claude 的高,除非是一些专业领域,它没有训练过的,但是最佳实践,编程范式,设计模式,它都能吊打你的水平。
    lyxxxh2
        17
    lyxxxh2  
       11 小时 26 分钟前   ❤️ 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  
       11 小时 25 分钟前
    @bmpidev2019 感觉程序员这行危险了,既然 ai 代码水平超过大部分程序员,那大家以后怎么和 ai 竞争呢?
    justfindu
        19
    justfindu  
       11 小时 24 分钟前
    你都是生成直接上? 不会在给它提点要求优化一下代码和逻辑?
    FreshOldMan
        20
    FreshOldMan  
       11 小时 19 分钟前
    @delacey #18 就是没法竞争,不仅包括程序员
    UIHIHUHIU
        21
    UIHIHUHIU  
       11 小时 11 分钟前
    我倒觉得 ai 让很多没有什么代码基础或者说基础不好的人能写点代码了,毕竟不是每个人都是程序员,大部分人还只是有一点代码需求,但是去深入学的话太费时间了,ai 就是解决这个问题的
    littlewing
        22
    littlewing  
       11 小时 9 分钟前
    公司给买了 Copilot ,我用他作为增强型的代码补全
    bk201
        23
    bk201  
       11 小时 9 分钟前
    ai 的东西不调,根本没法用,倒是很多体力活可以用它
    baysonfox
        24
    baysonfox  
       11 小时 7 分钟前
    我现在一般是写个基本逻辑 -> AI 细化-> 自己分析调整 -> AI 提建议 进一步优化性能/可读性
    vsitebon
        25
    vsitebon  
       10 小时 54 分钟前
    @mightybruce #5 金币比之前值钱了
    bmpidev2019
        26
    bmpidev2019  
       10 小时 54 分钟前
    @delacey 先学会怎么用 AI 写代码,而不是自己写,汽车出来了,你还研究如何拉黄包车拉的更稳更快?难道不是学会开汽车吗
    prosgtsr
        27
    prosgtsr  
       10 小时 35 分钟前
    只用过方法内的补全。感觉从代码规范上来说还不错。。不过 bug 确实也不少,还是要肉眼 debug
    更复杂的直接生成方法、类,就没用过了
    Jerry23333
        28
    Jerry23333  
       10 小时 20 分钟前
    在 ba 都待过,都在大力推 ai 生成代码,甚至会考核团队的使用率。
    Mogugugugu
        29
    Mogugugugu  
       10 小时 11 分钟前   ❤️ 6
    uzumaki
        30
    uzumaki  
       10 小时 8 分钟前
    咋了 你现在 txt 写代码了?
    murmur
        31
    murmur  
       10 小时 7 分钟前
    ai 太爽了

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

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


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

    前几天才有个小白用 ai 写合约代码结果被盗 2k 多刀,因为 ai 代码被污染了,这就是水平差又过于依赖 ai 的后果,一个正常水平的开发者,review 代码就能发现问题了
    rekulas
        45
    rekulas  
       6 小时 59 分钟前
    @franswish 看我的回复,也有可能是负反馈。。。
    smdbh
        46
    smdbh  
       6 小时 15 分钟前
    高级搜索引擎, 如果别人写的好,为什么不用
    COW
        47
    COW  
       6 小时 3 分钟前 via Android
    当然可以写,但你要自己执行 review 和 test 呀,前几天好像有个老哥被 AI 删数据了
    LeslieLeung
        48
    LeslieLeung  
       5 小时 48 分钟前
    AI 决定下限(真的不比一些人写得差),个人能力决定上限
    z1829909
        49
    z1829909  
       5 小时 40 分钟前 via Android
    @terrysnake 这个 80 %怎么有股营销号的味道
    zjh7890
        50
    zjh7890  
       4 小时 19 分钟前 via iPhone
    @z1829909 按行数来算我觉得不算夸大,我目前组织业务逻和样板代码都用 ai ,大刀阔斧。做好设计就行
    raycool
        51
    raycool  
       2 小时 43 分钟前
    我正在主导银行采购某家代码提示助手,你和我说没用?
    rpish
        52
    rpish  
       2 小时 37 分钟前
    @terrysnake 好奇这个数据来源,可以分享一下吗?
    terrysnake
        53
    terrysnake  
       1 小时 33 分钟前
    @rpish 老板从硅谷回来以后说的🤣
    quake0day
        54
    quake0day  
       1 小时 3 分钟前
    楼主可能以为自己写代码是一个艺术创作,代码是艺术表达的媒介。实际代码写作只是和流水线的工人一样,代码能够易读易懂能够顺利完成任务就行——AI 写的代码完全能够符合要求。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1436 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:24 · PVG 01:24 · LAX 09:24 · JFK 12:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.