电子产业一站式赋能平台

PCB联盟网

搜索
查看: 240|回复: 0
收起左侧

很遗憾,没有人能真正精通C++。

[复制链接]

1076

主题

1076

帖子

1万

积分

论坛法老

Rank: 6Rank: 6

积分
11451
发表于 2023-11-7 08:30:00 | 显示全部楼层 |阅读模式
点击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号+ ?  X+ `! }) i# O& ^* {' w& D
干货福利,第一时间送达!: _1 o) }+ G% }$ H& x" W$ c

dz5s4hw1ips6404003829.png

dz5s4hw1ips6404003829.png
" Q4 {: C4 {& e. B* a
最近有小伙伴说没有收到当天的文章推送,这是因为微信改了推送机制,有一部分小伙伴刷不到当天的文章,一些比较实用的知识和信息,错过了就是错过了,建议大家加个星标??,就能第一时间收到推送。, O: m3 Z3 v1 x' ~' y3 K! T

nog5rdz5bc36404003929.png

nog5rdz5bc36404003929.png

. z6 f- |4 X1 _$ i" }8 u7 a* b1 q8 N$ _, Y4 H
任何说自己很懂C++的人可能都是在夸大其词。         " U+ f2 U9 a. o) j
我想你可能已经注意到了,是的,今天的大多数程序员都在使用Python、Rust、Go或是其他新的编程语言。大部分人已经不再需要掌握C、C++等古老的编程语言了,甚至很多程序员已经从手动编码开始向AI编码转型。         
- I( V% C- a8 y# j: a但即便如此,还是有很多人认为自己足够了解并熟练掌握C++这门古老的编程语言,但他们之中绝大部分人其实都在夸大其词。这个说法来自 Louis Brandy此前发布的一篇博客——《永远不要相信自称懂C++的程序员》。         
/ L8 \9 z1 N( x7 }* C6 n& b/ T

bkkwrzpszt56404004029.png

bkkwrzpszt56404004029.png

4 f; S$ u$ f& [  v* _C++的“双峰”特性         + K# i5 Q4 h1 Q) B) R: k4 U6 M6 g) ^
在博客中,Brandy提到,自己在长期面试C++程序员的过程中开始意识到C++非常重要的一个特性,C++是一种“双峰”语言。也就是说刚刚接触C++的开发者会觉得它很简单,但随着了解深入,他们的自信会被这种语言庞大的复杂性慢慢摧毁,直到他们犯下了足够的错误,就像下面这张图所展示的一样。         
# s8 E# O$ G# x" J

aoux1v3zvgn6404004129.png

aoux1v3zvgn6404004129.png

) w; I  {% Q( L5 f6 |# c; l         
) X. g! x: q9 \- k程序员,尤其是那些曾经学习过C语言的程序员,通常能够非常快速地掌握C++并感觉对这门语言非常熟练。这些程序员会高速你他们精通C++,然而其实这并不是真实的。         
7 A% S: `0 i6 b: z, [  P+ Q8 `6 j随着他们继续学习C++,他们会经历这个沮丧的低谷,在这里他们会完全了解到这门语言的全部复杂性。但好消息是,程序员很容易意识到自己处于谷前和谷后的区别。只要你和他们提起C++的复杂性,处于谷后位置的人会为你描述上百种他们写C++的挫败经历。而处于谷前的人则会说,C++不过是有类的C而已。         ; _9 ]" `/ b, T8 s

nj23guk04iz6404004229.png

nj23guk04iz6404004229.png

4 x/ R( j/ n8 j# ]4 P# l没人能真正精通C++         
2 ]0 E* w7 r1 D( w' v" Z1 S4 \当然,很多程序员把这种说法当做一个玩笑,但也有很多人在争论这种理论的正确性。在Reddit上,程序员们分享了对该说法的观点,一位技术管理者提到,面试时他会让程序员以1—10分为标准描述自己的C++水平,如果答案高于6,那就需要详细谈谈关于这门语言的细节了。         
+ [6 |- S3 B- c3 h" f% A' U0 ~此外,这位面试官还提到,建议程序员在面试时,尽量不要直接说自己对哪门语言的掌握程度很好,而是要与面试官交流你具体擅长处理哪类业务或哪类问题,否则当你遇到一位技术狂热者时,你将很容易在面试过程中暴露自己的无知。         
9 u. A& H& h& m2 a在当前以AI为主导的世界中,C++这门古老的语言好像更多变成了帮助人们建立知识体系和卖书的工具,而不是实际被用于生产的语言。一些Reddit用户分享了他们将精通C++写在简历上,但当被问到智能指针和右值引用等问题时却回答不出来的窘迫经历。         # A: t% j6 {4 {& z
事实上,很多开发者在使用C++进行工作时,其实并不了解它的细节,使用C++几十年的人大多也不敢说非常熟悉这种语言。甚至连C++之父Bjarne Stroustrup也曾表示自己并非100%精通C++,他提到:“C++存在一些错综复杂的陷阱,大多数人甚至没法写出一个简单的没有漏洞或错误的类。”         
& o4 Y" r+ T* f; l

db0kmzdz3la6404004329.png

db0kmzdz3la6404004329.png

( ^6 m5 d$ v! M( B$ O% q世界仍然需要C++         
9 C' q1 m& `7 @3 v当前编程世界中的真相是,你可以选择任何适合你得编程语言。如果有人反驳这个观点,那便会被贴上“语言霸凌”的标签,编程语言只是一个程序员需要学习和使用的工具。如果Python能够帮助你很好的完成工作,为什么还要使用C++呢?         * a# U) s( v  }9 c9 s  O
目前很多开发者已经认为C++是一种濒临死亡的语言,但事实上并不是这样。如果开发人员需要从头开始构建一些东西,例如操作系统、游戏或其他基础软件,C++目前仍被认为是实现这些目标的首选语言,当然在面对很多现代应用开发时使用复杂性过高的C++会变得很痛苦。
. V, z- r6 x4 q( m! |4 {: C3 |

nefb0l4jpc26404004430.png

nefb0l4jpc26404004430.png

3 F, @8 ~$ |' d7 ]         , c( U' _7 H7 J2 }" S
C++为了不限制程序员的想法,包含了太多的范式,包括面向对象(灵活应用virtual继承+shared_ptr)、模块化(type rich programming和meta programming)、函数式编程(lambda,配合文件),以及面向过程编程。然而当前世界上的大多数需求,只需要用到面向对象或函数式编程。         1 Z5 i( a6 B; C3 E  x
显然,无论是对于C++还是其他语言,几乎没有人能够做到对它们百分百了解,尤其是当语言复杂性和特性随着版本更新而不断变化的情况下。C++只是在这种情况下会变得更甚,并且由于这种经典语言的名气效应,人们会给C++程序员设定更高的标准。         1 V8 q: a4 Y2 y0 C
大多数C++程序员都存在着这样一种心态——“如果我能遵守这些规则,避免炫技、避免犯错,我就可以避免把枪口对准自己的脚。”一个很明显的道理是,当你被问及是否了解C++时,最好的答案是:我对C++的了解足够多,所以我认为我并不足够了解这种语言。         / b/ c1 t  |& s  X. P" `  x( B0 N
参考链接:https://analyticsindiamag.com/dont-trust-a-programmer-who-knows-c/http://lbrandy.com/blog/2010/03/never-trust-a-programmer-who-says-he-knows-c/ 来自公众号:51CTO技术栈作者 | Mohit Pandey编译 | 徐杰承   ——EOF——一个我十分佩服的朋友阿秀开发了一个互联网大厂面试真题记录网站,支持按照行业公司岗位科目考察时间等查看面试真题,有意者欢迎扫码下方二维码适用~
  D2 l: P+ f1 e/ T: o+ [- I, Y

wnolbvlbg1s6404004530.png

wnolbvlbg1s6404004530.png
5 x/ q1 i9 [, Y

8 g$ V! \- k! d6 s+ H& T+ D0 L你好,我是飞宇,本硕均于某中流985 CS就读,先后于百度搜索以及字节跳动电商等部门担任Linux C/C++后端研发工程师。$ Z9 c8 H+ H# `, C/ L( M& W
同时,我也是知乎博主@韩飞宇,日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。& p. m( `) |7 g  |5 t
我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。6 T+ ^7 c7 _) _3 g. ?. t

5m1wbm3onln6404004630.png

5m1wbm3onln6404004630.png

9 d- a! s3 U4 C% y4 J欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会。' \8 C/ m* n2 [) y7 S
8 R7 d, X- j2 [' V/ a6 }

y3dq2wysnqf6404004730.png

y3dq2wysnqf6404004730.png

% x. o& Y9 A' v" r" b加个微信,打开另一扇窗# N5 r, S" l9 y7 f

cr1wifnwite6404004830.gif

cr1wifnwite6404004830.gif
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表