jianglibo
V2EX  ›  C++

为什么写 C++的人年龄偏大?

  •  
  •   jianglibo ·
    PRO
    · Dec 4, 2025 · 13352 views
    This topic created in 346 days ago, the information mentioned may be changed or developed.

    C++什么会得到像我这样老年人的喜爱?

    首先 C++这个语言表达力及其丰富,以至于初学者不知所措,经常会看到不认识的语法,这是在其它语言不太会经历到的。 但是它所有的复杂性都服务于一个目标,抽象(abstraction)。抽象是一个高级的思考过程,它试图从杂乱无章中找到模式。

    不知各位有没有用过 boost json ,json 仅有几种有限的数据类型,大部分语言有类(class),用它来抽象这些数据类型也挺不错,c++也是 OOP 。 但是 C++还有 std::variant,就是说如果一个东西只可能有固定的几个类型,那么用std::variant来抽象更恰当(也可能更快,更不容易错,或者无法错)。

    其它比如shared_from_this等都是为解决问题而生,如果你没有碰到问题,那么你就不会深入理解shared_from_this。它是为了在异步环境中让对象自己保持活着,不然异步回调时如果对象已经销毁,就会 UAF 。

    namespace certctrl {
    
    class UpdateHandler : public IHandler, 
                          public std::enable_shared_from_this<UpdateHandler> {
    private:
      certctrl::ICertctrlConfigProvider &config_provider_;
      customio::ConsoleOutput &output_;
      client_async::HttpClientManager &http_client_;
      certctrl::CliCtx &cli_ctx_;
      std::shared_ptr<AgentUpdateChecker> update_checker_;
    
      // Platform detection
      std::string detect_platform();
      std::string detect_architecture();
      
      // Update workflow steps
      monad::IO<bool> check_for_updates(const std::string &current_version);
      monad::IO<bool> confirm_update();
      monad::IO<void> perform_update();
      monad::IO<std::string> download_update(const std::string &download_url);
      monad::IO<void> install_update(const std::string &downloaded_file);
      monad::IO<void> backup_current_binary();
      monad::IO<void> replace_binary(const std::string &new_binary_path);
      
      // Helper methods
      std::string get_current_binary_path();
      std::string generate_backup_path();
      bool verify_downloaded_file(const std::string &file_path, const std::string &checksum_url);
    
    public:
      UpdateHandler(certctrl::ICertctrlConfigProvider &config_provider,
                    customio::ConsoleOutput &output,
                    client_async::HttpClientManager &http_client,
                    certctrl::CliCtx &cli_ctx,
                    std::shared_ptr<AgentUpdateChecker> update_checker);
    
      std::string command() const override;
      monad::IO<void> start() override;
    };
    
    }
    

    当然这里仅仅举几个例子,每一个特性都是为解决问题而设计的。

    说到为什么年长者更喜欢 c++,我估计可能和大脑的抽象能力相关,我不是脑科学专家,我还问了 chatgpt ,它的答复:

    情况	结果
    纯逻辑、非经验性的抽象任务(数学推理、形状类比、无语言图形测试)	年轻人通常更强
    基于经验的抽象总结、模式识别	年长者可能更强
    需要同时抽象 + 处理大量新信息的任务	年轻人更快
    需要抽象 + 基于经验的判断	年长者表现可能更佳
    

    所以更准确的结论应该是,经验丰富的编程者可能会选择 C++。 如果你是初学者,不要为 C++的复杂度困扰,这需要一个过程,一个进步的过程。

    76 replies  •  2026-01-18 22:13:41 +08:00
    byby
    byby
    Dec 4, 2025
    1
    写 Fortran 的年龄更大
    NewYear
    NewYear
    Dec 4, 2025
    2
    写 vb6.0 的年龄也偏大。

    主要是一般场景够用,语言简单,语法就像写文章一样,不用分号分隔,不用卡尺量缩进。

    if YouLoveMe then papapa

    你能信这是一个合法的语法么……

    缺点嘛,唉,不像 js 这种链式调用爽(自动补全啥的确实方便很多)

    自从学了 C#后,感觉一个语言是否牛逼真的不重要,但语法一定要优雅,要不然写起来不爽。
    penisulaS
    penisulaS
    Dec 4, 2025❤️1
    3
    用 C++的很多都是深耕某个具体行业的,竞争比较小(很可能招不到合适的人),比较容易活下来
    ttdx
    ttdx
    Dec 4, 2025
    4
    还有没有一种可能是,目前很多大学不教 cpp 了,大都是先教 c ,面向对象教 java ,选修课也是 python 。导致学 cpp 年轻人变少了,致使看上去都是老年人。
    echoechoin
    echoechoin
    Dec 4, 2025
    5
    那我更喜欢 c 语言哈哈 void* 走天下
    levelworm
    levelworm
    Dec 4, 2025
    6
    我这种脑容量也只能写 C 了。。。
    hjw45611
    hjw45611
    Dec 4, 2025
    7
    市场筛选的结果
    xmdbb
    xmdbb
    Dec 4, 2025
    8
    @NewYear 不,我還小
    bruce0
    bruce0
    Dec 4, 2025
    9
    可能是现在的年轻人,写后端的首选 Java 或者 go,研究底层的首选 rust,C++很多时候已经不是首选了
    jianglibo
    jianglibo
    OP
    PRO
    Dec 4, 2025
    10
    @NewYear C++的语法也特丰富,不同的人几乎写出不同语言的味道。我这是属于 monadic c++. https://github.com/coderealm-atlas/cert-ctrl ,主要是受 spring webflux 和早期 Haskell 的影响。
    mightybruce
    mightybruce
    Dec 4, 2025
    11
    c++ 标准太多了, 不同的标准 c++ 之间差别都很大, 还有到现在 c++ 标准库还没有提供统一的网络编程接口,对于很多人来说,写个应用层的程序有困难, 底层引擎不存在差别, 甚至 c++ 老练经验丰富的程序员多, 比很多其他语言开发还有优势,rust 是不可能在底层各种引擎比如(图像渲染、AI 计算、HPC 计算、游戏引擎)代替 c++的。
    jonty
    jonty
    Dec 4, 2025
    12
    现在还停留在 c++14 甚至 c++11 的阶段,刚刚去看了看 std::variant ,太 modern 了
    zsxzy
    zsxzy
    Dec 4, 2025
    13
    智能指针 auto 这些特性已经大大降低了使用 c++的心智负担.
    加上 poco library 这样易用的库, c++ 写起来也挺爽的
    midsolo
    midsolo
    Dec 4, 2025
    14
    因为 Java 3 个月精通,C++ 要 5 年才入门
    AV1
    AV1
    Dec 4, 2025
    15
    看了下 std::variant ,就相当于 TS 的 union 类型吧,i 了 i 了🐶
    jianglibo
    jianglibo
    OP
    PRO
    Dec 4, 2025
    16
    @mightybruce 没有统一网络编程接口不见得是坏事,不同的场景选择不同的库反而更加有利。其实以我的年龄和精力写 C++不合适( AI 以前),但有了 AI 就不一样了,人主要负责思考,工具使用,测试什么的都由 AI 代劳了。比如这个,https://github.com/coderealm-atlas/http_client ,在使用其它语言时不会想到去实现一个,但因为是 C++,有什么是 C++实现不了的呢?:), 当然这个也不是实现,只是在 boost beast 外面包裹了一层,让它符合我的编程风格而已,相当于一个小 helper.
    kekeabab
    kekeabab
    Dec 4, 2025
    17
    @bruce0 #9 rust 搞底层如同赤屎一样难受
    ihciah
    ihciah
    Dec 4, 2025 via iPad
    18
    shared_from_this 就是硬拿补丁当 feature 的例子。良好的结构设计就不应该出现对象自己抓自己的情况,应当显式外部传递 shared ptr 。你看隔壁 rust 直接不让你这么玩。
    L4Linux
    L4Linux
    Dec 4, 2025 via Android
    19
    多写点 python 就适应 modern c++了。
    gpt5
    gpt5
    Dec 4, 2025
    20
    刚进公司的时候,就我和另一个年纪比较大的跳槽过来的同事写 cpp/汇编。后来我不写了,就剩他了。工作量贼小,都是底层库,基本上优化到极限了,八百年不用改一行代码。有的同事有追求,读源代码,看里面还有我 n 年前写的注释,就找我来问,可是我已经全忘了了啊。cpp 还有人敢看,汇编部分的代码真是没人敢碰。
    mightybruce
    mightybruce
    Dec 4, 2025
    21
    @jianglibo 不要太相信 AI, 写 c++都要有自己的判断, 就不提 AI,比如一些写其他语言比如 python 的人 过来写 c++, 滥用 C++ 特性,libpytorch 全是滥用 shared_ptr
    zh3256
    zh3256
    Dec 4, 2025 via Android❤️4
    22
    是写 c 艹的变老了,不是老人喜欢 c 艹
    coderzhangsan
    coderzhangsan
    Dec 4, 2025
    23
    如果 C/C++是汽车三大件的话,那 php 就是那台车,对不起我只会开车,不懂也不会修这个车。🤣🤣
    naythefirst01
    naythefirst01
    Dec 4, 2025
    24
    门槛高呗
    ChainLock
    ChainLock
    Dec 4, 2025
    25
    c++学习太难了
    zuosiruan
    zuosiruan
    Dec 4, 2025
    26
    @ttdx 很多大学比如苏大 计算机专业的也是 python 起手了
    laminux29
    laminux29
    Dec 4, 2025
    27
    C++是艺术,但艺术不适合拿来赚钱。
    BingoXuan
    BingoXuan
    Dec 4, 2025
    28
    没有统一的构建工具,没有包管理器,更加没有统一包结构,也没有固定的 ABI
    noahliaszn
    noahliaszn
    Dec 4, 2025
    29
    我想起了之前吐槽 c++的视频
    c++真的是沉重的历史包袱
    ashong
    ashong
    Dec 4, 2025
    30
    @AV1 基于 RTTI 运行时判断的
    none
    none
    Dec 4, 2025
    31
    他们当年也年轻过。。。
    fredweili
    fredweili
    Dec 4, 2025
    32
    你就是想说自己聪明,那搞一个 mcp 出来看看
    somebody1
    somebody1
    Dec 4, 2025
    33
    我觉得完全没有说到点子上,那个年代就没得选啊,语言就不像现在这么多,而且内存小,CPU 慢,必须得充分利用机器的性能才行,动态语言根本没有发展空间。

    经济基础决定上层建筑,内存变大变便宜了,CPU 快了,这样才能让语言自己来申请释放, 浪费几百兆内存根本不会对机器产生什么影响。更快的开发速度,更好的安全特性,还有支持大型项目良好的代码结构就变得更为重要了。
    cmsyh29
    cmsyh29
    Dec 4, 2025
    34
    因为当年老登学 c++也是跟后来的 java go 属于新事物
    holydancer
    holydancer
    Dec 4, 2025
    35
    很简单,现在让我再学五笔,我也不会学了
    unused
    unused
    Dec 4, 2025❤️1
    36
    C++ 特性太多了,一个东西有无数种看起来正确的写法,每种写法在一些边界条件下又有细微的区别,就像研究茴字怎么写一样。等你费劲搞明白到底哪个是最佳实践之后,没多久又有新标准出来了。
    brsyrockss
    brsyrockss
    Dec 4, 2025
    37
    因为当年老登只能学 c 和++ ,java 想学你也学不到
    GeminiPro
    GeminiPro
    Dec 4, 2025
    38
    cpp 的心智负担很大,现在 cpp 能用的领域越来越少了。
    spritecn
    spritecn
    Dec 4, 2025
    39
    10 年后写 java 的人年龄也偏大啊
    bfdh
    bfdh
    Dec 4, 2025
    40
    @echoechoin #5 哈哈哈,写的时候写得爽,看的时候想骂娘。
    blackccc
    blackccc
    Dec 4, 2025
    41
    头像很可
    securityCoding
    securityCoding
    Dec 4, 2025 via Android
    42
    你自己体会一下贴的这段代码可读性跟 go 相比如何
    lvlongxiang199
    lvlongxiang199
    Dec 4, 2025
    43
    lisp 的表现力不比 cpp 丰富 ?
    realpg
    realpg
    Dec 4, 2025
    44
    @NewYear #2
    vb6 的最优势区不是简单语法
    而是他的 windows UI 设计器 一切时间驱动
    lvlongxiang199
    lvlongxiang199
    Dec 4, 2025
    45
    `std::variant` 只不过是类似于 rust 中的 `enum`

    lisp 的表现力不比 cpp 丰富 ?

    lisp 里头可以自定义 `start...end` 甚至可以实现 rust 中的 `?`

    ```
    ;; 1. 定义读取函数
    (defun |#[-reader| (stream char arg)
    (declare (ignore char arg))
    ;; 读取 [] 内部的内容作为符号
    (let* ((content (read-delimited-list #\] stream t))
    (sym (car content))) ;; 获取符号,例如 2..10
    (if (symbolp sym)
    (let* ((str (symbol-name sym))
    (pos (search ".." str)))
    (if pos
    (let ((start (parse-integer (subseq str 0 pos)))
    (end (parse-integer (subseq str (+ pos 2)))))
    ;; 返回生成列表的代码
    `(loop for i from ,start to ,end collect i))
    (error "Syntax should be like #[2..10]")))
    (error "Content inside #[] must be a symbol"))))

    ;; 2. 将 #[ 注册到读取表
    (set-dispatch-macro-character #\# #\[ #'|#[-reader|)
    (set-macro-character #\] (get-macro-character #\))) ;; 让 ] 像 ) 一样作为结束符

    (print #[2..10])
    ;; 输出: (2 3 4 5 6 7 8 9 10)

    ```
    julyclyde
    julyclyde
    Dec 4, 2025
    46
    stl 普及之前 c++就是一坨屎吧,中间断了几年都没什么人喜欢学
    Rehtt
    Rehtt
    Dec 4, 2025 via Android
    47
    10 年后:为什么写 JAVA 的人年龄偏大
    20 年后:为什么写 GO 的人年龄偏大
    AV1
    AV1
    Dec 4, 2025❤️1
    48
    @Rehtt
    不会了,若干年后全民 AI 编程,所有程序员都是年龄偏大,不区分编程语言🐶
    chenliangngng
    chenliangngng
    Dec 4, 2025
    49
    进传统硬件大厂巨厂的应届硕士不都安排写 cpp 吗
    card123
    card123
    PRO
    Dec 4, 2025
    50
    岁月催人老
    xuanbg
    xuanbg
    Dec 4, 2025
    51
    因为年轻的连 Java 都嫌烦,只愿意学点简单的 JS 、Python 什么的,最多赶新潮学个 go 。所以会 C 艹的年龄能不大么
    lumia1020
    lumia1020
    Dec 4, 2025
    52
    二十多年前可不是这样,那时写 C++的还很多小处男。
    IamUNICODE
    IamUNICODE
    Dec 4, 2025
    53
    不,我这种老登只想学 rust ,c++以前是噩梦,现在还是噩梦
    DJI360
    DJI360
    Dec 4, 2025
    54
    @zuosiruan #26 怎么感觉这个回复似曾相识
    y1y1
    y1y1
    Dec 5, 2025 via iPhone
    55
    cpp 语言学习门槛高,cpp 开发的东西门槛也高
    coolmenu
    coolmenu
    Dec 5, 2025
    56
    从小处男写到老处男
    DreamLu
    DreamLu
    Dec 5, 2025
    57
    20 年后,AI (满脸问号):为什么还有人古法编程!!!
    FengMubai
    FengMubai
    Dec 5, 2025
    58
    1. 可以不用 C++的地方大多已经不用 C++了, 改用新兴语言 (虽然往往也没多新
    2. 不能不用 C++的地方, 其实相互之间差异很大, 很难跨领域流动, 更依赖"老师傅"的的工作经验
    dog82
    dog82
    Dec 5, 2025❤️1
    59
    java/go 的标准库里到处是泛型,让人很难读,脑子拧成麻花了。不敢想象 cpp 的 template 加上指针能搞成万花筒
    whyso
    whyso
    Dec 5, 2025
    60
    写 c++的就这逻辑这表达吗?确实有点抽象
    wupher
    wupher
    Dec 5, 2025
    61
    现在谁写这个啊,内存管理碰上坑的时候,有查过 1 周多,那酸爽。

    一般是入行时学的。我那时 BCB / MFC 大行其道……难怪聪明的程序员都用 delphi……

    那个泛型模板库 ATL…… 没潘爱民老师,真搞不定。

    正常原型,用 Python, Ruby, 哪怕 js , ts 都快捷方便。

    后续考虑性能,扩展,中间件,转成 golang, rust, java/kotlin 也不难。

    我是很佩服那些弄 llm cpp 的,真牛。
    ccfly
    ccfly
    Dec 5, 2025
    62
    说白了就是不好用没新人了 看语言流行趋势就可以知道现在啥用起来最方便
    rongwenqi
    rongwenqi
    Dec 5, 2025
    63
    @byby 也不一定,我 90 后。
    devtk
    devtk
    Dec 5, 2025
    64
    @rongwenqi 现在 90 后已经被人喊老毕登了
    sheepyoungg
    sheepyoungg
    Dec 5, 2025
    65
    C++ 特性太多了,很难对齐粒度,一些人直接开摆往里面写 C ,一些人喜欢 C with class ,一些人喜欢用 c++11 的特性,一些甚至喜欢把最新的 modern feature 加进去,导致项目看上去像是群魔乱舞
    rongwenqi
    rongwenqi
    Dec 6, 2025 via Android
    66
    @devtk 你知道用 fortran 的大多是什么年龄吗?你多大?
    songco
    songco
    Dec 6, 2025 via Android
    67
    COBOL IBM 来学校宣讲的时候,说从业人员平均年龄 55 岁以上,超级稳定,方便移民……

    不过国内 mainframe 用的少,那个 zos 文档 bug 多到你报告它都不给修
    julyclyde
    julyclyde
    Dec 6, 2025
    68
    @chenliangngng 硬件厂一般不加加吧
    xsen
    xsen
    Dec 6, 2025
    69
    明明就是面窄、不愿意接受新鲜事物、技术,不愿意学习新的东西
    别动不动就代表别人
    8o8
    8o8
    Dec 6, 2025
    70
    反对#69 楼,语言只是解决问题的途径,用老旧的语言也能解决前沿的问题,何来不愿学习新东西之说。还有人用 delphi 写神经网络呢。
    faywanghq
    faywanghq
    Dec 7, 2025
    71
    因为现在还在写 c++ 的人普遍年纪都较大(学校主力教 c++ 的时代本身就更早)了,且高阶 c++ 程序员现在仍然稀缺,现代 c++ 语法和特性/规范较多,AI 自动编写 c++ 相对没有那么成熟,c++ 能写客户端 app ,能写嵌入式底层,能写 linux 内核,兼容面较广,导致生命周期更长。
    Rorysky
    Rorysky
    Dec 8, 2025
    72
    @ihciah 同意,一个设计良好的语言不应该为某些问题去添加语言特例
    milesbai6022
    milesbai6022
    Dec 8, 2025❤️1
    73
    怎么说,c++是个上限很高很高的语言,很早以前就听说过,经典的软件,最终都会用 c/c++实现一遍。

    但是问题在于 c++门槛高,生态封闭。如果开发者不成为行业大神或者拿到行业大神的实现,做出来的东西,可能开发效率、运行效率两头都不占据优势。
    nigga
    nigga
    Dec 8, 2025
    74
    @milesbai6022 c 大神写出来一样的东西,性能能和你别的实现方式快 10 倍甚至 9 倍,用户最直观的体验就是安装包怎么只要几百 K 就能实现比如 python100MB 的功能
    keenkiller
    keenkiller
    Dec 8, 2025
    75
    不喜欢太复杂的语言,C++如果当 C with class 其实也挺好,但是缺乏官方的包管理也是个大问题。
    deetincelle
    76
    先问是不是,再问为什么.
    *点进来一看是钓鱼的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   971 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 162ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    ♥ Do have faith in what you're doing.