众所周知,Java一直是编程开发的主流语言,学习起来不难,门槛要求也不高,但是高端的和底层的开发还是主要C与C++的天下。比如开发驱动程序,系统服务,高效的网络通信程序(比如大型网游),甚至开发象SQL SERVER这样的软件。C++的执行效率也是最高的。可惜的是,C++并不是每个人都适合开发,它的复杂度和难度是远远超过Java,C++对比其他语言到底难在哪里?有人对C++异常推崇,除了性能优势,还有什么优点,怎么学好C++?

第一:能力上限要求高

C++的能力上限非常高,可以说在软件领域没有C++做不好和做不到的事情,只是开发者水平和成本问题,而C++之后出现的语言都有些无论如何都做不好或根本做不到的事情。

C++虽然能力上限高,但是达到这个上限对开发者的要求也很高,不是普通程序员可以做到的。

其它语言虽然上限低,但是只要不去碰那些极端要求的领域,在各自的优势领域里还是能超越C++的,对工程师要求也没那么高,但是在全领域超越C++的目前还没有。

C++的难点在于给开发者的自由度太高了,什么都可以做,限制很少,导致水平不够的人也可以胡搞瞎搞,把代码写的乱七八糟,然后怪C++太难太复杂。

学好C++,最重要的是你要有学C++的需求,就是个人目标是要成为顶级程序员,成为开发基础设施,设计构建软件平台的人,没有宏大的理想不会有足够的动力去学C++的,过程中太多困难会导致放弃的。

长期来看,C++还是会被取代的,只是这个长期非常长,可以入选有生之年系列。

可以看到在最近几年新出现的软件项目里,C++的使用率已经在下降了,但是很多历史悠久的基础设施类的项目基本都是C++,这些项目生命周期都很长,不会轻易被淘汰。

第二:项目架构难度大

项目构建看上去似乎是个拦路虎,不过结合现代cmake之后,很复杂的工程也其实可以构建得很简单。

难在范式多。范式多其实并不难,真正难在各范式的最佳实践相当不明确。过程式和传统c with class的最佳实践还是比较明确的,多看看GTK和QT就差不离。但是现代C++偏重于静态决定和半函数式,而且本身还在剧烈演进中,这两个方向上,最佳实践比较匮乏,尤其是大规模工程化的最佳实践。我看过微软、facebook的几个现代C++开发框架,还是感觉过于玩具化,跟我自己的开发方式也区别很大,当然我自己是简单至上的,不算完全的通用化方案。

那么真正的难度就在于取舍。如何做业务抽象,以何种形式来做抽象,如何平衡复杂与简洁度,如何确认各技术和模块的边界,如何综合运用多范式就很考验经验和性格。

说点性能以外的优势吧。C++ 11之后,一向是我认为最佳的工程语言,控制力极强。重点在于静态决定和操作简化。

C++尽量少搞动态OOP,理论上不成问题,但是实际语法相当麻烦,而且弄多了就很容易出现像python一样的问题,重构困难。所以基于极强的类型化体系和模板体系,在开发体系的抽象和重构性上,可以达到一个相当舒服的地步。尽可能的静态决定可以避免很多手工错误。

C++写库那是各种手段都可以用上的,但是写完了,可以做到使用极其简单。我个人就觉得和typescript比较像,用起来有时候还要简单一些。

再结合C++20的concept这种前置类型条件,constract这种前置边界后置边界,写代码就更舒服了。

第三:C++概念多

C++对比其他语言到底难在哪里?概念多;

未定义行为多,编译通过不表明你可以那么写;

存在大量语言之外的东西。语言本身只定义到编译单元,但后面还有静态库、动态库、工程化的一堆事情。

最重要的,你不得不学会绝大部分概念。所谓“只使用语言的一部分特性”在稍微大点的工程里是做不到的,因为第三方库会强制你使用那些你原本不打算用的概念。

除了性能优势,还有什么优点?

性能优势不是特点,因为有太多的语言是注重性能的:不论是更老的C、Objective C,还是比较新的C#、Rust。

C++的关键特点,是有性能优势的同时提供了足够多的抽象能力,使得它有能力构建比较复杂的系统(vs C);同时又出现得足够早,有足够的历史包袱:大量已存在的SDK使用C++,于是你不得不用C++(vs C#、Rust)。

怎么学好C++?

总结出了你需要掌握几点要素:

裸奔概念(比如class无非就是有行为的结构体,method无非就是函数,template无非就是某种代码生成规则)。

业务系统的分割、组织,这对于所有的编程都是需要的。

从项目中学习。没有项目就自己做点小游戏之类的。

想要C++线学习资源的同学,可以评论区留言啦!

都说C++难,那么它到底难在了哪里?相关推荐

  1. 生活之难:生活到底难在哪里

    生活之难:生活到底难在哪里 一.总结 一句话总结:难在天性,难在竞争,难在积累,难在追求,难在自己 难在天性 人的天性就是好吃懒做好玩不动脑的,但是生存的压力(食物,房子,配偶)又会迫使你必须工作 难 ...

  2. [思考] 难的问题到底难在哪儿

    Table of Contents 前言 什么是问题规模? 什么是抽象程度? 解决困难问题的共通方法 前言 为什么会有动机写这样一篇文章,是因为在我们每个人每一天的开发工作,学习当中,总是会层出不穷, ...

  3. 二级建造师都考哪三门,考试到底难不难

    二建考试三个科目分别为:<建设工程法规及相关知识>.<建设工程施工管理>和<专业工程管理与实务>.考试难度也是因人而异. 1.二建考试的科目 二级建造师执业资格考试 ...

  4. 什么都不懂的学java难不难_零基础转行学java到底难不难

    不少零基础的新手想要转行学习java可是不知道难度,南京学码思下面就给大家详细的说一说转行java的难度,希望能帮助到各位想要了解java的同学. 零基础转行学java到底难不难 新手转行学java到 ...

  5. 神回答:编程到底难在哪里?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.zhihu.com/a ...

  6. 网站想要快速收录到底难不难?4个问题快检查

    网站的收录量越大,网站关键词排名提升几率也会越大,所以优化人员也都非常重视网站的收录量问题,但对于一些收录不高的网站想要提升收录速度到底难不难呢?其实并不难,接下来就带大家一起了解一下6个快速提升网站 ...

  7. 新手前端练手网站_编程到底难不难学?新手入门选择哪种语言好?

    以下内容适合的读者:想要学习编程的小白 一.编程到底难不难学? 对于这个问题我的回答是不知道,学会了编程的人会说好学,中途就放弃的人会说很难,任何知识想要掌握好都不是一件容易的事情.所以我决定用自己的 ...

  8. 专升本c语言名词解释题_专升本到底难不难?

    专科院校可以专升本的专业有很多,但是我作为一名法学生我要跟大家分享的肯定就是法学了. "法学"它是一个专业属于政法系 没错在专科的时候也是政法系,在这个社会发展一步步加快的时代下法 ...

  9. 计算机html二级难度,计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里?...

    原标题:计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里? 相信参加过3月考试的小伙伴都有这样的感觉,选择题新考点虽然没有增加很多,但是操作题就一言难尽,不仅新增了4套新题,而且原题也进行了更 ...

最新文章

  1. 小D学blend-----如何创建自定义的Tooltip控件
  2. PPF(Point Pair Features)原理及实战技巧
  3. android 自定义textview 垂直滚动,Android中TextView如何实现水平和垂直滚动
  4. python【蓝桥杯vip练习题库】ALGO-106 6-3判定字符位置
  5. Shell基础-环境变量配置文件
  6. Quartz-任务调度概述及Quartz(2.2.X)快速入门
  7. 研磨数据结构与算法-06递归的应用
  8. java 三大框架面试题
  9. 艾宾浩斯记忆表格excel_考研干货 | 如何使用艾宾浩斯曲线帮助记忆知识
  10. utuntu 12.04 安装 配置 JAVA JDK
  11. 为何高端FPGA都非常重视软件
  12. 流水线中数据相关的理解(RAW、WAR和WAW)
  13. AB post 请求压测
  14. 最新尚硅谷2018SpringBoot教学视频(内含Docker)
  15. MBR、EBR、DBR
  16. WNMP(Windows + Nginx + PHP + MySQL) 安装
  17. Java SE 005 运算符续
  18. 数据字典的作用/用途:是数据流程图的补充!4个主要条目:数据项,数据处理(逻辑功能及其算法),数据存储,数据流条目
  19. 【优化覆盖】基于matlab粒子群算法优化无人机编队布局求解车载网络通信覆盖优化问题【含Matlab源码 2021期】
  20. ROS学习笔记(八)—— moveit!概述

热门文章

  1. 大数据学习路线图,大数据需要学什么
  2. Win系统如何修改远程桌面端口3389
  3. [算法设计题] 双栈结构
  4. Linux 下 find(文件查找)命令的用法总结
  5. 使用OrientationEventListener实时监听手机旋转的角度
  6. 编译c或c++代码出现error “***” was not declared in this scope 的解决方法
  7. 20191005 (16)金融学课笔记(得到北大经融学课)——复利加速思维
  8. free -m 详解
  9. 服务器内存条能点亮显示器吗,上两根内存条显示器就不亮了
  10. 中国首富“叒”换人了