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

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

  •  
  •   beryl · 9 小时 31 分钟前 · 2816 次点击
    写工作生成代码

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

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

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



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


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

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

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

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


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

    前几天才有个小白用 ai 写合约代码结果被盗 2k 多刀,因为 ai 代码被污染了,这就是水平差又过于依赖 ai 的后果,一个正常水平的开发者,review 代码就能发现问题了
    rekulas
        45
    rekulas  
       2 小时 31 分钟前
    @franswish 看我的回复,也有可能是负反馈。。。
    smdbh
        46
    smdbh  
       1 小时 46 分钟前
    高级搜索引擎, 如果别人写的好,为什么不用
    COW
        47
    COW  
       1 小时 34 分钟前 via Android
    当然可以写,但你要自己执行 review 和 test 呀,前几天好像有个老哥被 AI 删数据了
    LeslieLeung
        48
    LeslieLeung  
       1 小时 19 分钟前
    AI 决定下限(真的不比一些人写得差),个人能力决定上限
    z1829909
        49
    z1829909  
       1 小时 12 分钟前 via Android
    @terrysnake 这个 80 %怎么有股营销号的味道
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2843 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:55 · PVG 20:55 · LAX 04:55 · JFK 07:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.