1.C++抽象层次灵活多样且复杂
- 自身支持多种编程范式;新手兴奋,长者敬畏,设计模式的应用较为抽象
- 过程(ADT+PP),面向对象(OO),泛型编程(GP),函数式编程(FP),模板元编程(TMP),Etc
- 再在操作符重载,继承和多态派生等加持下,看似相同的代码在不同的位置可能完全天壤之别
2.C++语法规则细节琐碎且复杂
- 编程风格低约束:自由,可读性差
- 语法迭代版本差异:Old C++(C with Class)、Etc
- C++新特性学习带来的成本时间:C++11/C++14/C++17/C++20/C++23新特性,影响贯穿始终
- e.g:
- 指针数组/常量引用绑定非对象/常量指针/指针常量/指向常量的常指针:const、constexpr、volatile 拷贝/复制构造函数/移动构造函数/析构函数/虚函数/友元函数/:何时用,继承,长度计算
- 数据类型/指针/智能指针:更精准的控制和溢出跳转,RAII,资源内存从此精确而沙雕,心好累
- 线程池/协程/右值引用/移动语义/完美转发/引用折叠/并发API:别有洞天,意料之外还有刺激
- 异常/容器/模板/继承/多态/操作符重载:我是谁我在哪我在干?谁在报错?!这我写的?!
- 易混特性/潜规则/冲突:extern “c”、#ifndef、Namespace、Static局部/全局、隐式转换explicit Etc
- 大量精力难以填满的各领域协议、依赖和扩展:TCP/IP/APUE/UNP/Linux XX/Tool xx/Etc一本满足
3.C++开发环境多样自由且复杂
- 开发&目标跨平台:Windows/Linux/MacOS/Etc
- 多种编译/调试器:llvm+Clang/GCC/MSVC/GDB/LLDB/Etc,且对OS和编译原理有要求
- 此处尤其值得一提的就是,超大型工程编译漫长,调试报错令人窒息,当然近年来有显著改善
- 多种IDE:VS/Clion/Xcode/Etc,较为容易但缺乏对底层真实过程的了解
- 多种文本编辑器:VsCode/Emacs/Vim/Notepad++/SublimeText/及其各自骚插件/Etc
- 各种库/"轮子"/OS底层API:MFC(Old)/STL/Boost/?Gaclib?/OSAPI/Etc
- 架构:乐高大赛?抱歉,打扰了。。怎一个「丰富」了得,我笑了
- 可能依赖的环境配置:ITem2/zsh/Git/SVN/Makefile/Cmake/MySQL/MDK/Etc
4.C++要解决面对的开发任务普遍较难
- 各类游戏、多媒体,安全,引擎,系统框架或者极端性能艰深场景
- 依赖较高的数学/金融/图形/算法处理等其它交叉专业领域的内容
- 多种语言对接杂糅、各种高大上、不可抗力必须使用的地方
- 这一点毋庸置疑,可多关注下国内外公司C++应用最多最难取代之处
5.C++国内高等教材存在较大滞后错漏
- 造成C++是C的简单继承扩展等的错误理解,过于轻敌
- 可曾听闻THQ大佬的i+=(++i)+(i++)及其各种曲解错漏
- 更多囿于历史的局限性和集体性选择的结果,也不必太过抱怨
- 但毫无疑问的是,C++对各类底层软硬件等依赖的CS基础相较其它语言明显更高
- 这就是为何少儿编程永远不会首选C++进行入门动作
6.C++知识容量大随时间卷积累加混淆
- 以上那些内容属实只是来自C++世界里很少的一部分节选表现
- 还没有包含进各种细枝末节、历史背景和过渡性产物各种效率必备辅助插件
- 饱受诟病的互联网前端野生动物世界现在都有Serverless和Flutter解救
- 现在你还确定C++那么多东西真的不够煮一大锅陈年腊八粥?
7.C++构建大工程高风险难组织易失败
- 有些答主也提及,如此「高深的技术」,哪怕针对特定明确场景进行具体开发任务
- 仍然高度依赖依赖开发者的个人水准,瓶颈效应明显,新人接手不友善
- 在更多普适常规场景下,较之JAVA、Python、Go等主流语言,容错率更低,可能无必要性
- 系统和组织角度的正确性、开发效率,可靠性都难以确保且成本十分昂贵且缓慢
总结
- 入门曲线极为陡峭,造轮之路如履薄冰,
- 左手核弹右手***,精通之日遥遥无期,
- 呕心沥血大功将成,需求减少去向渺茫。