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

12 天前
 jianglibo

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

8325 次点击
所在节点    C++
75 条回复
byby
12 天前
写 Fortran 的年龄更大
NewYear
12 天前
写 vb6.0 的年龄也偏大。

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

if YouLoveMe then papapa

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

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

自从学了 C#后,感觉一个语言是否牛逼真的不重要,但语法一定要优雅,要不然写起来不爽。
penisulaS
12 天前
用 C++的很多都是深耕某个具体行业的,竞争比较小(很可能招不到合适的人),比较容易活下来
ttdx
12 天前
还有没有一种可能是,目前很多大学不教 cpp 了,大都是先教 c ,面向对象教 java ,选修课也是 python 。导致学 cpp 年轻人变少了,致使看上去都是老年人。
echoechoin
12 天前
那我更喜欢 c 语言哈哈 void* 走天下
levelworm
12 天前
我这种脑容量也只能写 C 了。。。
hjw45611
12 天前
市场筛选的结果
xmdbb
12 天前
@NewYear 不,我還小
bruce0
12 天前
可能是现在的年轻人,写后端的首选 Java 或者 go,研究底层的首选 rust,C++很多时候已经不是首选了
jianglibo
12 天前
@NewYear C++的语法也特丰富,不同的人几乎写出不同语言的味道。我这是属于 monadic c++. https://github.com/coderealm-atlas/cert-ctrl ,主要是受 spring webflux 和早期 Haskell 的影响。
mightybruce
12 天前
c++ 标准太多了, 不同的标准 c++ 之间差别都很大, 还有到现在 c++ 标准库还没有提供统一的网络编程接口,对于很多人来说,写个应用层的程序有困难, 底层引擎不存在差别, 甚至 c++ 老练经验丰富的程序员多, 比很多其他语言开发还有优势,rust 是不可能在底层各种引擎比如(图像渲染、AI 计算、HPC 计算、游戏引擎)代替 c++的。
jonty
12 天前
现在还停留在 c++14 甚至 c++11 的阶段,刚刚去看了看 std::variant ,太 modern 了
zsxzy
12 天前
智能指针 auto 这些特性已经大大降低了使用 c++的心智负担.
加上 poco library 这样易用的库, c++ 写起来也挺爽的
midsolo
12 天前
因为 Java 3 个月精通,C++ 要 5 年才入门
AV1
12 天前
看了下 std::variant ,就相当于 TS 的 union 类型吧,i 了 i 了🐶
jianglibo
12 天前
@mightybruce 没有统一网络编程接口不见得是坏事,不同的场景选择不同的库反而更加有利。其实以我的年龄和精力写 C++不合适( AI 以前),但有了 AI 就不一样了,人主要负责思考,工具使用,测试什么的都由 AI 代劳了。比如这个,https://github.com/coderealm-atlas/http_client ,在使用其它语言时不会想到去实现一个,但因为是 C++,有什么是 C++实现不了的呢?:), 当然这个也不是实现,只是在 boost beast 外面包裹了一层,让它符合我的编程风格而已,相当于一个小 helper.
kekeabab
12 天前
@bruce0 #9 rust 搞底层如同赤屎一样难受
ihciah
12 天前
shared_from_this 就是硬拿补丁当 feature 的例子。良好的结构设计就不应该出现对象自己抓自己的情况,应当显式外部传递 shared ptr 。你看隔壁 rust 直接不让你这么玩。
L4Linux
12 天前
多写点 python 就适应 modern c++了。
gpt5
12 天前
刚进公司的时候,就我和另一个年纪比较大的跳槽过来的同事写 cpp/汇编。后来我不写了,就剩他了。工作量贼小,都是底层库,基本上优化到极限了,八百年不用改一行代码。有的同事有追求,读源代码,看里面还有我 n 年前写的注释,就找我来问,可是我已经全忘了了啊。cpp 还有人敢看,汇编部分的代码真是没人敢碰。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1176844

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX