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

有了 AI 加持,学习新技术效率提升很明显

  •  
  •   albin504 · 2 天前 · 3926 次点击

    几点体会:

    1 、有了大模型后,大家花在编程语言学习上的时间肯定是少了很多。 我在闲鱼上挂了 java 编程思想(最新版)上下册,两本 30 块钱很新,没人问。 我想这个也说明了问题。

    2 、今天在结合 AI 的能力,帮助我学习 cuda C 编程。

    ( 1 )利用豆包的 AI 阅读功能,阅读 GPU 高性能编程 CUDA 实战.pdf 书籍。遇到不懂的,直接复制段落( OCR 技术,pdf 是影印版的豆包也能复制),然后问 AI

    ( 2 )边阅读边和 AI 交流,扩展知识,举一反三

    ( 3 ) github 下载了这本书的源码,然后利用 cursor 帮我一键编译源码、自动下载缺失的依赖。以及帮我解读源码,实现我好奇的一些代码(如写一个代码比较 cpu 、GPU 执行向量点积运算的效率)

    总之之前学习新技术过程中经常遇到的困难,现在基本都能解决了。而这些困难往往导致学习半途而废。

    现在是晚上 11 点半了,学的很开心,现在下班了。

    两个维度为 33,554,432 (3200 万) 的向量相乘,结果如下:

    Vector size: 33554432 elements (128.00 MB per vector)
    CPU Result: 67108864.00
    CPU Time: 45.00 ms
    GPU Result: 67108864.00
    GPU Time (Total including Init on GPU): 2.48 ms
    

    GPU 快 19 倍,牛吧。

    第 1 条附言  ·  1 天前
    前几年尝试过啃计算机系统原理、算法导论等硬骨头,后来都放弃了。 现在准备拾起来了。
    这一年越发体会到程序员基础理论知识的重要性,尤其是有了 AI 之后更加重要
    48 条回复    2025-11-27 17:21:37 +08:00
    ttdx
        1
    ttdx  
       2 天前
    是这样的,我目前在通过官方文档学 cmake,不会的就直接问 ai,很方便。而且它还能鼓励我,给我正向反馈,这样就更有动力学下去了。
    dearmymy
        2
    dearmymy  
       2 天前
    有 ai 后,是利好全栈的。现在就是缺一个能更方便 ai 生成 ui 切图的工具。
    sojourner
        3
    sojourner  
       1 天前
    以前学习一个新的东西,初步掌握大概需要一周左右,其中 2-3 天查资料,1-3 天上手验证。现在 1 天问 AI ,然后就可以上手做了。
    macha
        4
    macha  
       1 天前
    深有同感
    Hilong
        5
    Hilong  
       1 天前
    最近在做一个物联网的项目,之前完全没接触过 HJ212 协议,完全让 AI 帮我处理了这个逻辑,一点问题没有
    fyq
        6
    fyq  
       1 天前
    是的,感觉再也不需要自己 Google 了,什么不会问什么,一家问完换一家继续问,尤其是很多命令行的参数,以前还要记笔记,现在懒得翻了直接说诉求,然后复制粘贴就完事了。
    liuzimin
        7
    liuzimin  
       1 天前
    我感觉 AI 在服务器配置方面是真菜。。。按 AI 给的配置,我基本没有配置成功的,只会不断把我往沟里带。
    albin504
        8
    albin504  
    OP
       1 天前
    @liuzimin 是的。举例,前几天我在手动编译 ffmpeg ,打 dockfile 。
    中间遇到问题问 AI ,折腾了一天还没搞好。

    后来发现 github 上有现成的 dockerfile ,拿来直接用了。

    还有一次,利用 Mongodb_restore 命令在不同库之间导数据,遇到报错问 AI ,尝试各种参数都不解决。后来执行 Mongodb_restore --help , 一看就知道该用哪个参数了。

    我想根因在于,大模型核心里面还是概率预测 token ,那么它预测出来的答案,和我遇到的问题的背景信息很难匹配(比如我的 Mongodb_restore 是特定的版本,有特定的参数)。

    AI 很容易张冠李戴
    fitme
        9
    fitme  
       1 天前
    @liuzimin 那可能 AI 读取的 CSDN 的
    albin504
        10
    albin504  
    OP
       1 天前   ❤️ 1
    @liuzimin 这其实也给我们程序员提了个醒:在遇到问题的时候,先初步判断下这个问题是否适合用 AI 来找答案。如果一股脑地找 AI ,问题解决不了不说,还会丧失咱们本有的技能
    crocoBaby
        11
    crocoBaby  
       1 天前
    原来学习之前需要先提供权威文件给 ai 啊?!怪不得我的 ai 一直在胡说八道,虚构一些不存在的知识误导我学习
    YanSeven
        12
    YanSeven  
       1 天前
    是的,至少 LLM 在 Coding 领域的落地已经是非常可观的了。相当于有个耐心的老师傅时时刻刻陪着你学,帮你扫清小障碍。

    真的感恩技术带来的便利。

    但是,估计也会带来内卷和竞争。就看谁在 llm 帮助下学的快,学的多。
    liuzimin
        13
    liuzimin  
       1 天前
    @albin504 是的。感觉只能靠 AI 提供个思路,不能完全依赖它。真正分析问题还是要靠自己。
    albin504
        14
    albin504  
    OP
       1 天前   ❤️ 1
    @YanSeven 我理解,至少现在来看,即使有了大模型,程序员也得学习新技术,只是侧重点不同。现在需要学的是原理性的、框架性的、需要具备技术选型、优劣判断的能力。

    举例,我最近在学习 nvidia GPU 编程的技术。 我如果不系统学习的话,遇到一个特定的问题,AI 是不会提供 GPU 解决思路的,即使提供的,我也可能因为拿捏不准不敢用到生产环境。 我需要具备评判 AI 给出的方案的优劣、是否适配业务的能力。
    albin504
        15
    albin504  
    OP
       1 天前
    @YanSeven Coding 是很牛。 这里有个前提,方案还是得靠程序员设计。设计好了合适的方案,AI 来执行实施( coding )。
    xctcc
        16
    xctcc  
       1 天前
    @crocoBaby #11 之前我让 ai 直接启动一个项目,他写的代码全是上个版本的很多不兼容也处理不了,后来每次启动新项目都先把最新版本的 repo 直接 clone 到本地,然后出现问题让他直接阅读源代码,比 context7 好用一点,就是 token 可能有点爆炸
    crocoBaby
        17
    crocoBaby  
       1 天前
    @xctcc 你相当于把源码写进 prompt 了,肯定 token 爆炸,这种情况我建议你本地部署 LLM 做,无限 token
    albin504
        18
    albin504  
    OP
       1 天前
    @crocoBaby 给 AI 喂权威资料,现在已经成为 AI 训练的一个难题了。 以公司内部的知识库资料训练为例,假如我们要高很多一个公司内部的行政小助理,训练会遇到以下问题:
    ( 1 )公司内部的知识库上有多篇文章提到公司的考勤制度,其中一些文章写的制度已经过时了,这时候 AI 就需要去判断该采信哪个信息源。
    ( 2 )有些政策和特定的毕竟信息强相关(类似于不同的软件版本不同的参数),在提问时如果没给出很具体的背景信息,AI 只是根据概率给出了概率较大的答案,这时候很可能是错误的答案
    ( 3 )有些知识库的内容本身就是错误的(就是你提到的不权威)
    crocoBaby
        19
    crocoBaby  
       1 天前
    @albin504 我昨晚 youtube 刚好刷到一个 RAG 的教程,应该可以解决你现在遇到这个问题,把你公司的知识库转向量存 db,然后每次推理的时候在 prompt 带上 db 的向量
    wwhontheway
        20
    wwhontheway  
       1 天前
    同样的感受,ai 加速了学习和吸收知识的速度
    YanSeven
        21
    YanSeven  
       1 天前
    @albin504 其实就是要求每个入行者都得变成以前的资深程序员。市场以后在招聘的时候也会提高招聘门槛。
    zsc8917zsc
        22
    zsc8917zsc  
       1 天前
    @dearmymy #2 你是不是在找 figma 的 mcp ~
    albin504
        23
    albin504  
    OP
       1 天前
    @crocoBaby 嗯嗯,谢谢,抽空我也看看。这方面我是门外汉,我只是拼感觉提的几个问题。
    crocoBaby
        24
    crocoBaby  
       1 天前
    @albin504 我也是门外汉,最近才开始学这方面的知识,有好的技巧欢迎分享
    qieqie
        25
    qieqie  
       1 天前
    你这个数据不太对,dot product 纯 memory bound 的,跑不出来 19 倍差距,明显是刻意避免了优化 cpu 代码(avx 或 O3 开 auto vectorization )
    albin504
        26
    albin504  
    OP
       1 天前
    @qieqie 遇到行家了。我贴一下代码:

    ```
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <cuda_runtime.h>
    #include "common/book.h"

    #define N (32 * 1024 * 1024) // 32M elements
    #define THREADS_PER_BLOCK 256

    // Kernel to initialize data directly on GPU
    __global__ void init_data_kernel(float *a, float *b, int n) {
    int tid = threadIdx.x + blockIdx.x * blockDim.x;
    int stride = blockDim.x * gridDim.x;

    for (int i = tid; i < n; i += stride) {
    a[i] = 1.0f;
    b[i] = 2.0f;
    }
    }

    // Dot product computation kernel (Same as before)
    __global__ void dot_product_kernel(float *a, float *b, float *c, int n) {
    int tid = threadIdx.x + blockIdx.x * blockDim.x;
    int stride = blockDim.x * gridDim.x;

    float sum = 0;
    for (int i = tid; i < n; i += stride) {
    sum += a[i] * b[i];
    }

    // Shared memory reduction per block
    __shared__ float cache[THREADS_PER_BLOCK];
    int cacheIndex = threadIdx.x;
    cache[cacheIndex] = sum;
    __syncthreads();

    int i = blockDim.x / 2;
    while (i != 0) {
    if (cacheIndex < i)
    cache[cacheIndex] += cache[cacheIndex + i];
    __syncthreads();
    i /= 2;
    }

    if (cacheIndex == 0)
    atomicAdd(c, cache[0]);
    }

    void dot_product_cpu(float *a, float *b, float *c, int n) {
    double sum = 0;
    for (int i = 0; i < n; i++) {
    sum += a[i] * b[i];
    }
    *c = (float)sum;
    }

    int main() {
    // Host pointers (only for verification)
    float *a_host, *b_host, *c_cpu, *c_gpu;
    // Device pointers
    float *dev_a, *dev_b, *dev_c;

    // Allocate host memory (just for CPU verification)
    a_host = (float*)malloc(N * sizeof(float));
    b_host = (float*)malloc(N * sizeof(float));
    c_cpu = (float*)malloc(sizeof(float));
    c_gpu = (float*)malloc(sizeof(float));

    // Initialize host arrays for CPU calculation
    for(int i=0; i<N; i++) {
    a_host[i] = 1.0f;
    b_host[i] = 2.0f;
    }

    printf("Vector size: %d elements (%.2f MB per vector)\n", N, (float)N * sizeof(float) / 1024 / 1024);

    // --- CPU Computation ---
    clock_t start = clock();
    dot_product_cpu(a_host, b_host, c_cpu, N);
    clock_t end = clock();
    double cpu_time = ((double)(end - start)) / CLOCKS_PER_SEC * 1000.0;
    printf("CPU Result: %.2f\n", *c_cpu);
    printf("CPU Time: %.2f ms\n", cpu_time);

    // --- GPU Computation (Zero-Copy Init) ---

    // 1. Allocate Device Memory
    HANDLE_ERROR(cudaMalloc((void**)&dev_a, N * sizeof(float)));
    HANDLE_ERROR(cudaMalloc((void**)&dev_b, N * sizeof(float)));
    HANDLE_ERROR(cudaMalloc((void**)&dev_c, sizeof(float)));

    start = clock();

    // 2. Initialize Data on GPU (No Memcpy from Host!)
    int blocksPerGrid = (N + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK;
    if (blocksPerGrid > 65535) blocksPerGrid = 65535;

    init_data_kernel<<<blocksPerGrid, THREADS_PER_BLOCK>>>(dev_a, dev_b, N);
    HANDLE_ERROR(cudaGetLastError());

    // Reset result
    float zero = 0.0f;
    HANDLE_ERROR(cudaMemcpy(dev_c, &zero, sizeof(float), cudaMemcpyHostToDevice)); // Tiny copy (4 bytes)

    // 3. Compute
    dot_product_kernel<<<blocksPerGrid, THREADS_PER_BLOCK>>>(dev_a, dev_b, dev_c, N);
    HANDLE_ERROR(cudaGetLastError());
    cudaDeviceSynchronize();

    // 4. Copy Result Back
    HANDLE_ERROR(cudaMemcpy(c_gpu, dev_c, sizeof(float), cudaMemcpyDeviceToHost)); // Tiny copy (4 bytes)

    end = clock();
    double gpu_time = ((double)(end - start)) / CLOCKS_PER_SEC * 1000.0;

    printf("GPU Result: %.2f\n", *c_gpu);
    printf("GPU Time (Total including Init on GPU): %.2f ms\n", gpu_time);

    // Compare
    printf("Speedup (GPU vs CPU): %.2fx\n", cpu_time / gpu_time);

    // Cleanup
    free(a_host); free(b_host); free(c_cpu); free(c_gpu);
    cudaFree(dev_a); cudaFree(dev_b); cudaFree(dev_c);

    return 0;
    }


    ```

    这个版本是在 GPU 上初始化向量。



    AI 给出的第一版是在 CPU 上初始化向量然后 copy 到 GPU ,这个 copy 过程成为了瓶颈( 200 多 M 数据 copy 花费 64ms )
    houOne
        27
    houOne  
       1 天前
    @dearmymy 有没有 Adobe AI 软件的 mcp ,能够替代 印刷文件制作的。
    xqk111
        28
    xqk111  
       1 天前
    降低学习门槛,不像以前问都没有渠道,知识太分散,找都不好找。
    qieqie
        29
    qieqie  
       1 天前
    哪怕不用 avx intrinsics, -Ofast 这个量级不太差的 cpu 应该 <10ms 。如果数据初始在 host 内存上,加上 h2d d2h 单次运行会比 cpu 直接跑还慢的。
    如果你想体验 gpu 的暴力,demo 应该用 GEMM ,还得加 batch
    Donahue
        30
    Donahue  
       1 天前
    同感,效率神器。以前很多不懂的东西,也不知道有什么关键词搜索,现在 ai 直接点出找问题的方案了。
    Baymaxbowen
        31
    Baymaxbowen  
       1 天前   ❤️ 2
    https://deepwiki.com/

    推荐各位一个网站,能够帮你分析源码,还能看 CodeMap
    ltyj2003
        32
    ltyj2003  
       1 天前 via Android
    非常赞同,入门新领域快很多。先前遇到没接触过的领域,都不知道怎么入手,查资料都不知道那些专业术语。有 ai 之后描述个大概,ai 就能回答了。
    cocong
        33
    cocong  
       1 天前
    学习速度是提高了,以前还钻研一些细枝末节的东西,现在我都懒得研究了,遇到了再问 ai
    TArysiyehua
        34
    TArysiyehua  
       1 天前   ❤️ 1
    有 AI 入门确实快很多,但是基础不牢的话很容易调入 AI 陷阱。典型的例子就是遇到复杂问题的,AI 改一百遍也改不对,此时要你手动分析问题的时候,基础就很重要。
    另外就是,看书或者是文档,如果没有详细的查看,光看总结,会错过很多细节,导致自己学的知识点不全面,不牢固。

    当然 AI 总体来说对入门或者辅助都是很有用的
    dxcqcv
        35
    dxcqcv  
       1 天前
    cuda 编程相关工作多吗?
    zpxshl
        36
    zpxshl  
       1 天前 via Android
    @TArysiyehua 34 以前是这样的,复杂问题 ai 改一百遍都不对。 现在几个强的 ai 互相 cr 指出,解决复杂问题的能力大幅度提高了
    zhangeric
        37
    zhangeric  
       1 天前
    @TArysiyehua 针对这个情况,纯编程 ai 真是不行,说的就是你 claude,昨天调试遇到一个问题,用 sonnet4.5 死活查不来原因,我都告诉他不对了,还是在那嘴硬.换成 gemini 这种通用大模型,很快就查找出问题了.
    albin504
        38
    albin504  
    OP
       1 天前
    @qieqie 大佬说的词我都还没听过,刚开始学了两天
    albin504
        39
    albin504  
    OP
       1 天前
    @dxcqcv 不知道。最近业务中用到了 GPU ffmpeg 视频转码。 出于好奇,在了解一些 cuda 编程的知识
    BazingaOrg
        40
    BazingaOrg  
       1 天前
    AI 确实是加速器,但是细节、品味方面还得自己来。
    albin504
        41
    albin504  
    OP
       1 天前
    @Baymaxbowen 谢谢。神器
    CziL
        42
    CziL  
       1 天前
    OP 的领悟很正确,三年前我啃 CSAPP ,1 小时只能啃个 2 页左右,现在有了 llm ,我直接读英文原版,1 小时读 10 页都没太大问题,而且能领悟得更深了,超级爽。ai 时代,底层原理只会越来越重要,代码已经不值钱了,llm 写的代码比任何人类都快且标准,但是它需要资深工程师来引导,一个好的 llm + 资深工程师,比以前的 1 个资深 + 5 个低端工程师效率来得要高得多
    albin504
        43
    albin504  
    OP
       1 天前
    @CziL 谢谢分享
    nuII
        44
    nuII  
       1 天前
    是的,以前搜索是为了获得经验和结论,但是这些东西要么散乱、要么隐藏的很深、要么各执一词,人类需要自行收集、整理和总结。现在有 AI 来做这些耗时但成果性较低的工作,几秒就能完成,对效率来说是个质变,还能直接给出可参考的总结结论,人只需要在多个结论中筛选就行,就算有幻觉,提示中让 AI 带上参考链接和来源,再回溯幻觉部分,总的思考成本也比之前大大降低。

    但是这都有个前提,就是人类得有分辨 AI 输出结果的能力,如果是纯小白,并且自己没有基础概念、没有辩证的观念和思维逻辑,那么 AI 只会带来更多误导和偏向。普及之后,分化可能更严重,厉害的更厉害,菜的更菜。
    gravitybox
        45
    gravitybox  
       1 天前
    大部分问题可以很好解答,但是有些比较复杂的问题,还是可能会出错,需要仔细甄别
    alexhx
        46
    alexhx  
       1 天前
    看了很多 AI 的帖子,大部分都同意一个观点,就是 AI 替代了初级程序员的角色,在高级程序员的指导下可以更高效的工作。
    就一直在想一个问题,AI 替代高级程序员的时间还有多久?工程化能力、框架能力、优劣分辨能力等等,我自己认为并不属于无法数据化、不能喂给 AI 的能力。这条护城河还能维护高级职位多久呢,新人是否还要投入大量时间精力去学习这些东西呢?
    albin504
        47
    albin504  
    OP
       21 小时 39 分钟前
    @alexhx 科技大佬都说了,未来 10 年大部分职业都会被人工智能取代。
    如果要走技术深度路线,新人不学这,那学啥啊?

    另外一条路是,培养指挥 AI 办事儿的能力。比如你一个人开一家公司,你懂产品、技术、商业,自己利用 AI 能跑通一个商业模式。

    再者就是,向 AI agent 开发方向靠拢
    bingNew
        48
    bingNew  
       13 小时 48 分钟前
    @CziL 请问,你是怎么用 llm 读英文原版的书籍的?整个 pdf 给 llm ,然后要它总结吗?还是自己一页一页的读,然后不懂的问 llm 呢?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 23:10 · PVG 07:10 · LAX 15:10 · JFK 18:10
    ♥ Do have faith in what you're doing.