龙空技术网

千万不要在简历里写精通C++,没人能真正精通C++

linux技术栈 3512

前言:

当前同学们对“c语言难学吗”可能比较关怀,同学们都需要知道一些“c语言难学吗”的相关知识。那么小编同时在网络上搜集了一些关于“c语言难学吗””的相关内容,希望我们能喜欢,同学们快快来学习一下吧!

任何说自己很懂C++的人可能都是在夸大其词。

我想你可能已经注意到了,是的,今天的大多数程序员都在使用Python、Rust、Go或是其他新的编程语言。大部分人已经不再需要掌握C、C++等古老的编程语言了,甚至很多程序员已经从手动编码开始向AI编码转型。

但即便如此,还是有很多人认为自己足够了解并熟练掌握C++这门古老的编程语言,但他们之中绝大部分人其实都在夸大其词。这个说法来自 Louis Brandy此前发布的一篇博客——《永远不要相信自称懂C++的程序员》。

1、C++的“双峰”特性

在博客中,Brandy提到,自己在长期面试C++程序员的过程中开始意识到C++非常重要的一个特性,C++是一种“双峰”语言。也就是说刚刚接触C++的开发者会觉得它很简单,但随着了解深入,他们的自信会被这种语言庞大的复杂性慢慢摧毁,直到他们犯下了足够的错误,就像下面这张图所展示的一样。

程序员,尤其是那些曾经学习过C语言的程序员,通常能够非常快速地掌握C++并感觉对这门语言非常熟练。这些程序员会高速你他们精通C++,然而其实这并不是真实的。

随着他们继续学习C++,他们会经历这个沮丧的低谷,在这里他们会完全了解到这门语言的全部复杂性。但好消息是,程序员很容易意识到自己处于谷前和谷后的区别。只要你和他们提起C++的复杂性,处于谷后位置的人会为你描述上百种他们写C++的挫败经历。而处于谷前的人则会说,C++不过是有类的C而已。

2、没人能真正精通C++

当然,很多程序员把这种说法当做一个玩笑,但也有很多人在争论这种理论的正确性。在Reddit上,程序员们分享了对该说法的观点,一位技术管理者提到,面试时他会让程序员以1—10分为标准描述自己的C++水平,如果答案高于6,那就需要详细谈谈关于这门语言的细节了。

此外,这位面试官还提到,建议程序员在面试时,尽量不要直接说自己对哪门语言的掌握程度很好,而是要与面试官交流你具体擅长处理哪类业务或哪类问题,否则当你遇到一位技术狂热者时,你将很容易在面试过程中暴露自己的无知。

在当前以AI为主导的世界中,C++这门古老的语言好像更多变成了帮助人们建立知识体系和卖书的工具,而不是实际被用于生产的语言。一些Reddit用户分享了他们将精通C++写在简历上,但当被问到智能指针和右值引用等问题时却回答不出来的窘迫经历。

事实上,很多开发者在使用C++进行工作时,其实并不了解它的细节,使用C++几十年的人大多也不敢说非常熟悉这种语言。甚至连C++之父Bjarne Stroustrup也曾表示自己并非100%精通C++,他提到:“C++存在一些错综复杂的陷阱,大多数人甚至没法写出一个简单的没有漏洞或错误的类。”

3、世界仍然需要C++

当前编程世界中的真相是,你可以选择任何适合你得编程语言。如果有人反驳这个观点,那便会被贴上“语言霸凌”的标签,编程语言只是一个程序员需要学习和使用的工具。如果Python能够帮助你很好的完成工作,为什么还要使用C++呢?

目前很多开发者已经认为C++是一种濒临死亡的语言,但事实上并不是这样。如果开发人员需要从头开始构建一些东西,例如操作系统、游戏或其他基础软件,C++目前仍被认为是实现这些目标的首选语言,当然在面对很多现代应用开发时使用复杂性过高的C++会变得很痛苦。

C++为了不限制程序员的想法,包含了太多的范式,包括面向对象(灵活应用virtual继承+shared_ptr)、模块化(type rich programming和meta programming)、函数式编程(lambda,配合文件),以及面向过程编程。然而当前世界上的大多数需求,只需要用到面向对象或函数式编程。

显然,无论是对于C++还是其他语言,几乎没有人能够做到对它们百分百了解,尤其是当语言复杂性和特性随着版本更新而不断变化的情况下。C++只是在这种情况下会变得更甚,并且由于这种经典语言的名气效应,人们会给C++程序员设定更高的标准。

大多数C++程序员都存在着这样一种心态——“如果我能遵守这些规则,避免炫技、避免犯错,我就可以避免把枪口对准自己的脚。”一个很明显的道理是,当你被问及是否了解C++时,最好的答案是:我对C++的了解足够多,所以我认为我并不足够了解这种语言。

4、最后,分享一个完整的c/c++后端知识体系

这个知识体系总结基于零声教育的c/c++Linux服务器开发架构教程,经过数万名学员学习的反馈,不断迭代技术知识图谱,贴合市场实际岗位就业需求,以项目为核心,通过30+的大小项目学习理解c/c++后端开发技术。目前已更新至第13版,需要的朋友,可以加群812855908领取

部分往期视频

高并发场景3种锁方案:自旋锁、互斥锁、原子操作的优缺点

后端开发必学4种层式结构:B+/B-树、时间轮、跳表、LSM-Tree

5种内存泄漏检测方式,让你重新理解C++内存管理

手把手实现线程池(120行),实现异步操作,解决项目性能问题

需要获取更多c/c++后端服务器开发相关视频技术加群812855908领取

1.精进基石

①数据结构与算法

红黑树(应用场景、进程调度cfs、内存管理、左旋与右旋等)B树和B+树(定义证明、插入、删除、遍历、查找、指针等)Hash与BloomFilter,bitmap(函数实现、应用场景、布隆过滤器等)

②设计模式

创建型设计模式(单例、策略、观察者、原型等设计模式)结构型设计模式(适配器、代理、责任链、状态桥接、组合模式)

③c++新特性

stl容器,智能指针,正则表达式新特性的线程、进程、原子操作、lamda表达式

④Linux工程管理

Makefile/cmake/configure(工作ipcs原理、文件编译、cmake的写法等)分布式版本控制git(工作流程、分支管理、服务器搭建等)Linux系统运行时参数命令(ipcs、uptime、iostat、sar、mpstat等)2.高性能网络设计

①异步网络库zvnet

网络io与io多路复用epoll,kqueue(项目)事件驱动reactor的原理与实现(项目)http服务器的实现(项目)

②网络原理

服务器百万并发实现(实操)redis,memcached,nginx网络组件(理论)posix API与网络协议栈(理论)UDP的可靠传输协议QUIC(项目)

③协程框架NtyCo的实现

协程设计原理与汇编实现(项目)协程调度器实现与性能测试(项目)

④基于dpdk的用户态协议栈的实现

用户态协议栈设计实现(项目)应用层posix api的具体实现(项目)手把手设计实现epoll(项目)

⑤高性能异步io机制 io_uring

与epoll媲美的io_uring(项目)io_uring的使用场景(理论)3.基础组件设计

①池式组件

手写线程池与性能分析(项目)内存池的实现与场景分析(项目)MySQL连接池的实现(项目)

②高性能组件

原子操作CAS与锁实现(项目)无锁消息队列实现RingBuffer(项目)定时器方案红黑树,时间轮,最小堆(项目)手写死锁检测组件(项目)手写内存泄漏检测组件(项目)手把手实现分布式锁(项目)

③开源组件

异步日志方案log4cpp(项目)应用层协议设计ProtoBuf/Thrift(项目)4.中间件开发

①redis

redis相关命令详解及其原理redis协议与异步方式存储原理与数据模型主从同步与对象模型

②MySQL

SQL语句,索引,视图,存储过程,触发器MySQL索引原理以及SQL优化MySQL事务原理分析MySQL缓存策略

③Kafka

Kafka使用场景与设计原理Kafka存储机制

④微服务之间通信基石gRPC

gRPC的内部组件关联基础http2的gRPC通信协议

⑤nginx

nginx反向代理与系统参数配置conf原理(实操)nginx过滤器模块实现(项目)nginx handler模块实现(项目)5.开源框架

①游戏服务器开发skynet

sky net设计原理sky net网络层封装以及lua/c接口编程sky net重要组件以及手撕游戏项目

②分布式API网关

高性能web网关 OpenrestyKong动态负载均衡与服务发现

③高性能存储spdk的文件系统实现(项目)

spdk的工作原理与文件系统架构分析文件系统的posix api实现文件系统的性能测试

④高性能计算CUDA

gpu并行计算cuda的开发流程音视频编解码中的并行计算

⑤并行计算与异步网络引擎workflow

workflow的应用场景workflow的组件实现

⑥物联网通信协议mqtt的实现框架mosquitto

mqtt的高效使用场景mqtt的broker6.云原生

①docker

docker风光下的内核功能docker容器管理与镜像操作docker网络管理(项目)docker云与容器编排(项目)

②kubernetes

k8s环境搭建pod与service的用法k8s集群管理(项目)k8s二次开发与k8s API(项目)7.性能分析

①性能与测试工具

测试框架gtest以及内存泄漏检测性能工具与性能分析火焰图的生成原理与构建方式

②观测技术bpf与ebpf

内核bpf的实现原理bpf对内核功能的观测

③内核源码机制

进程调度机制内核内存管理运行机制文件系统组件8.分布式架构

①分布式数据库

kv存储rocksDB的使用场景TIDB存储引擎的原理TIDB集群方案与replication原理

②分布式文件系统

内核级支持的分布式存储Ceph分布式ceph存储集群部署

③分布式协同

注册服务中心Etcd协同时间 用户态文件系统 fuse(项目)快播核心技术揭秘 P2P框架的实现四、项目实操1.dkvstore实现KV存储的架构设计网络同步与事务序列化KV存储的性能测试2.图床共享云存储fastdfs架构分析和配置文件传输和接口设计产品上云公网发布/测试用例3.微服务即时通讯IM即时通讯项目框架分析和部署IM消息服务器/文件传输服务器消息服务器/路由服务器数据库代理服务器设计文件服务器和docker部署产品上云公网发布/公网测试上线

项目这一个板块是由零声的讲师所总结的,自己在学习的课程中可以结合上述的详细技术细节点与自己过往工作的项目经验相结合学习提升。

标签: #c语言难学吗