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

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

  •  
  •   jianglibo · 2 天前 · 6812 次点击

    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++的复杂度困扰,这需要一个过程,一个进步的过程。

    70 条回复    2025-12-06 23:12:46 +08:00
    byby
        1
    byby  
       2 天前
    写 Fortran 的年龄更大
    NewYear
        2
    NewYear  
       2 天前
    写 vb6.0 的年龄也偏大。

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

    if YouLoveMe then papapa

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

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

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

    经济基础决定上层建筑,内存变大变便宜了,CPU 快了,这样才能让语言自己来申请释放, 浪费几百兆内存根本不会对机器产生什么影响。更快的开发速度,更好的安全特性,还有支持大型项目良好的代码结构就变得更为重要了。
    cmsyh29
        34
    cmsyh29  
       2 天前
    因为当年老登学 c++也是跟后来的 java go 属于新事物
    holydancer
        35
    holydancer  
       2 天前
    很简单,现在让我再学五笔,我也不会学了
    unused
        36
    unused  
       2 天前   ❤️ 1
    C++ 特性太多了,一个东西有无数种看起来正确的写法,每种写法在一些边界条件下又有细微的区别,就像研究茴字怎么写一样。等你费劲搞明白到底哪个是最佳实践之后,没多久又有新标准出来了。
    brsyrockss
        37
    brsyrockss  
       2 天前
    因为当年老登只能学 c 和++ ,java 想学你也学不到
    geminikingfall
        38
    geminikingfall  
       2 天前
    cpp 的心智负担很大,现在 cpp 能用的领域越来越少了。
    spritecn
        39
    spritecn  
       2 天前
    10 年后写 java 的人年龄也偏大啊
    bfdh
        40
    bfdh  
       2 天前
    @echoechoin #5 哈哈哈,写的时候写得爽,看的时候想骂娘。
    blackccc
        41
    blackccc  
       2 天前
    头像很可
    securityCoding
        42
    securityCoding  
       2 天前 via Android
    你自己体会一下贴的这段代码可读性跟 go 相比如何
    lvlongxiang199
        43
    lvlongxiang199  
       2 天前
    lisp 的表现力不比 cpp 丰富 ?
    realpg
        44
    realpg  
    PRO
       2 天前
    @NewYear #2
    vb6 的最优势区不是简单语法
    而是他的 windows UI 设计器 一切时间驱动
    lvlongxiang199
        45
    lvlongxiang199  
       2 天前
    `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
        46
    julyclyde  
       2 天前
    stl 普及之前 c++就是一坨屎吧,中间断了几年都没什么人喜欢学
    Rehtt
        47
    Rehtt  
       2 天前 via Android
    10 年后:为什么写 JAVA 的人年龄偏大
    20 年后:为什么写 GO 的人年龄偏大
    AV1
        48
    AV1  
       2 天前   ❤️ 1
    @Rehtt
    不会了,若干年后全民 AI 编程,所有程序员都是年龄偏大,不区分编程语言🐶
    chenliangngng
        49
    chenliangngng  
       2 天前
    进传统硬件大厂巨厂的应届硕士不都安排写 cpp 吗
    card123
        50
    card123  
       2 天前
    岁月催人老
    xuanbg
        51
    xuanbg  
       2 天前
    因为年轻的连 Java 都嫌烦,只愿意学点简单的 JS 、Python 什么的,最多赶新潮学个 go 。所以会 C 艹的年龄能不大么
    lumia1020
        52
    lumia1020  
       2 天前
    二十多年前可不是这样,那时写 C++的还很多小处男。
    IamUNICODE
        53
    IamUNICODE  
       2 天前
    不,我这种老登只想学 rust ,c++以前是噩梦,现在还是噩梦
    DJI360
        54
    DJI360  
       2 天前
    @zuosiruan #26 怎么感觉这个回复似曾相识
    y1y1
        55
    y1y1  
       2 天前 via iPhone
    cpp 语言学习门槛高,cpp 开发的东西门槛也高
    coolmenu
        56
    coolmenu  
       1 天前
    从小处男写到老处男
    DreamLu
        57
    DreamLu  
       1 天前
    20 年后,AI (满脸问号):为什么还有人古法编程!!!
    FengMubai
        58
    FengMubai  
       1 天前
    1. 可以不用 C++的地方大多已经不用 C++了, 改用新兴语言 (虽然往往也没多新
    2. 不能不用 C++的地方, 其实相互之间差异很大, 很难跨领域流动, 更依赖"老师傅"的的工作经验
    dog82
        59
    dog82  
       1 天前   ❤️ 1
    java/go 的标准库里到处是泛型,让人很难读,脑子拧成麻花了。不敢想象 cpp 的 template 加上指针能搞成万花筒
    whyso
        60
    whyso  
       1 天前
    写 c++的就这逻辑这表达吗?确实有点抽象
    wupher
        61
    wupher  
       1 天前
    现在谁写这个啊,内存管理碰上坑的时候,有查过 1 周多,那酸爽。

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

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

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

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

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

    不过国内 mainframe 用的少,那个 zos 文档 bug 多到你报告它都不给修
    julyclyde
        68
    julyclyde  
       12 小时 22 分钟前
    @chenliangngng 硬件厂一般不加加吧
    xsen
        69
    xsen  
       10 小时 33 分钟前
    明明就是面窄、不愿意接受新鲜事物、技术,不愿意学习新的东西
    别动不动就代表别人
    8o8
        70
    8o8  
       2 小时 41 分钟前
    反对#69 楼,语言只是解决问题的途径,用老旧的语言也能解决前沿的问题,何来不愿学习新东西之说。还有人用 delphi 写神经网络呢。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1115 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:54 · PVG 01:54 · LAX 09:54 · JFK 12:54
    ♥ Do have faith in what you're doing.