查看: 38039| 回复: 125
跳转到指定楼层
上一主题 下一主题
收起左侧

C++值得花时间学吗

   
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
各位大佬好,小弟虽在业界工作也有一段时间,但有些c++的困惑,求大佬帮忙背景:
  • 上学时候完全没有学过c++.
  • 之前一直主要偏向应用,所以相对对java和c#比较熟悉。
  • 现在到了一个infra组待了一年,c++还是十分的摸不着头脑,有时候会因为一个很小的问题折腾好几个小时,比如segfault很难debug. code review的时候也会因为各种例如pass by reference/pass by value, 使用unique pointer 还是reference被提。改了之后也不是完全理解为什么,下次还是会再犯同样的问题。
  • 来现在这个infra组的原因之一就是因为想把c++认认真真学一下,觉得以后可能能用到。lz也比较作,特意找自己不懂的组。
问题

  • 工作效率很低,生活受到影响,自己不开心
  • 升职, 职业发展受到影响。经常眼高手低,要是之前换做java的项目很快就能做完,现在经常over promise and under deliver.
想听听意见:

  • 我们都知道c++的一大优势是运行速度快,不知道这个优势在除了要求极低latency的情况之外还有什么应用?
  • 为什么c++这么多年还一直popular, 未来20年还会是这个样子吗?


感谢


补充内容 (2020-7-27 14:05):
主要想请教大家c++对于码农职业的长期发展,在哪些方面有帮助,以及在那些具体的细分领域有帮助。科技行业迭代块,范围广,我们无法什么都精通,lz也不是哪个领域的大神,以后期待走管理路线。

补充内容 (2020-7-27 15:11):
谢谢大家回复,精彩回复会主动加米!

评分

参与人数 9大米 +14 收起 理由
buaaluqiang + 2 给你点个赞!
贴地飞行 + 2 给你点个赞!
PhoenixKoh + 2 给你点个赞!
不要拧巴 + 2 给你点个赞!
小兔嘎嘎叫 + 1 很有用的信息!

查看全部评分


上一篇:学习编程半年能够参加Hackathon吗?
下一篇:国内程序员说的“语义”到底是什么意思

本帖被以下淘专辑推荐:

  • · 学习|主题: 68, 订阅: 4
推荐
HW312 2020-7-27 13:03:00 | 只看该作者
全局:
segfault 难debug,gdb/valgrind/asan 永远是你的好朋友

pass by value/reference其实挺值得说的,取决于你是传一个lvalue还是rvalue, 有没有const, 有没有move constructor. 如果你还在因为pass by value拷贝了一个大的object被说那就不值得学了,前面还有很多等着你

反对另一个评论说的时间不够看effective c++/effective modern c++.你看不懂的

你可以按以下顺序看
a tour of c++ -> c++primer/the c++ programming language -> effective c++ -> effective modern c++.

直接跳到最难你肯定就直接放弃了。

当然直接放弃也不是一件坏事

评分

参与人数 7大米 +12 收起 理由
huangbingyu + 2 给你点个赞!
jingwei19 + 2 给你点个赞!
ShikiH + 3 给你点个赞!
itditdi + 1 thanks
zhouxf53 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
本帖最后由 023张教授 于 2020-7-27 15:27 编辑

先谈一谈自己对C++粗浅的理解。
C++大概可以分为这三大编程范式:【面向对象编程】,【泛型编程】和【模板元编程】。
通常在业务逻辑代码中主要是涉及大量的【面向对象编程】和少量的【泛型编程】,当然,同时也会涉及到大量和C语言以及底层的内容。比如令大家感到头疼的指针,函数指针等。
除开业务逻辑代码,我们可能还会涉及到一些库开发(当然做这个人可能比较少),在这其中,除开上述两种,还可能涉及相对较多的【模板元编程】。
在神作《Modern C++ Design》及相对应的Loki库出来之前,通常我们认为C++是一个完全的【命令式】编程语言,在这个层面上,完全和【Java,Python】等一众主流语言是一致的,与命令式编程语言所对应的是【函数式】编程语言,代表【Lisp,Haskell】。在2001年之后,得益于‎Andrei的推广,模板元编程在C++社区中开始占有一席之地,而元编程这一概念却很好地符合了函数式编程的理念(具体就不展开了),因此元编程对应的开发更像是在进行函数式编程。
——————————————————————————————————————————————————————————————————————————————————————
看楼主在infra组,并且是写C++的infra组工作,其实这是一个非常好的练习C++的契机,如果你可以潜下心来,在上述3种C++的编程范式都会得到非常多的锻炼,并且有机会学习到最新的标准(据我所知,一般C++ infra会要求至少C++14)。

接下来回答一下你的这几个问题【比如segfault很难debug. code review的时候也会因为各种例如pass by reference/pass by value, 使用unique pointer 还是reference被提。改了之后也不是完全理解为什么,下次还是会再犯同样的问题。】

1. segfault直接无脑address sanitizer,非常方便,只用在cmake的命令后面加上【address=sanitizer】,常见的core dump的调用栈就会在运行程序的terminal打印出来。
    当然,掌握gdb也是需要的,通常而言,gdb+适当的print可以非常高效地debug问题。
    比较麻烦的core dump可能和多线程有关,这个可能就更需要经验了。

2. pass by reference/pass by value 这个是一个非常深入的话题,关于它,甚至有很多常见的【粗浅认识导致的误区】。想在这里一下子说清楚比较困难,但是推荐楼主去查阅一些词条,我一下子能想到的有【move sematic】,【rvalue reference】,【forwarding/universal reference】,【rvo/nrvo/copy elision】,【copy-and-swap idiom】等等,甚至【noexcept】这个关键字和和性能也有莫大的关系。另外,推荐直接去youtube搜索【C++ performance】,有一些CppCon的视频很值得一看。

3. 关于unique_ptr,shared_ptr,raw pointer,reference的问题,他们更多的需要看你实际使用的语义,是要独占呢,还是要共享呢。当然,也可以一定程度地参考【google coding style】。在极端情况下,shared_ptr有着更高的开销(通常情况可以忽略)。shared_ptr造成的循环引用,链式引用也是一个可能遇到的问题。推荐看这个视频 关于smart pointer的

4. 关于看书的,我推荐你如果有空的话可以参考一下我在知乎的回答 C++书籍推荐
    时间紧迫的话,重点看【effective modern c++】,如果有机会,可以反复看【7E】。

5. 关于你说的过时的问题,建议看看这本书【C++语言的设计和演化】,祖师爷写的。看完之后就会明白,这么牛逼的语言,以后肯定还会继续有剩余价值可以榨取的。

当然,最重要的还是楼主的心态了,如果你决定在C++这条路上一直走下去,那就应该一路披荆斩棘。讲道理,会C++,在语言层面,你有什么还会怕呢。
我就是最开始学深入了C++,现在我自己大概能有6-7种语言可以几乎无压力写业务逻辑。

评分

参与人数 26大米 +41 收起 理由
Snowsir + 1 赞一个
小丸几 + 2 欢迎分享你知道的情况,会给更多积分奖励!
a_small_potato + 3 谢谢分享!
WKelvinson + 2 很有用的信息!
WillWang98 + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
Hero007 2020-7-28 11:08:42 | 只看该作者
全局:
本帖最后由 Hero007 于 2020-7-28 11:16 编辑

工作5年多,目前是gg的C++ readability reviewer,回答下感想:

Infra应该是最技术最工程的方向之一。而大部分核心的infra出于性能考虑,基本都是C++写的。我之前在搜索后端,所在infra组负责网页搜索实时处理query并返回结果的过程 (THE backend)。

pros: 会让你觉得学了那么多cs没白学,algorithms, operating systems, threading, concurrency, distributed systems, 还有LC hard的题目在真实场景中的实现。天花板很高,谷歌的IC可以做到11。我就亲眼看到一个ic纯技术升到了9
cons: 起步阶段升职可能会慢,pace也比产品组慢。还有就是做多了容易上瘾,觉得自己组的东西很厉害看不上产品组,然后做产品的同学已经嗖嗖嗖升上去了。还有就是当infra的manager对技术要求高很多

至于目前流行的rust,可能在小公司会很流行,但是大公司已经背了一身的C++的债了根本不可能迁移到rust。所以个人愚见学C++一点都不会亏的,



> 现在到了一个infra组待了一年,c++还是十分的摸不着头脑,有时候会因为一个很小的问题折腾好几个小时,比如segfault很难debug. code review的时候也会因为各种例如pass by reference/pass by value, 使用unique pointer 还是reference被提。改了之后也不是完全理解为什么,下次还是会再犯同样的问题。
有很多print seg fault 的stacktrace的library,看到stacktrace应该会好很多?
C++确实水很深,不是一门容易上手的语言,建议仔细研读google style guide,每一条code review的preference应该都有style guide的依据,如果没有,可以询问reviewer为什么另一种方法不好。

> 我们都知道c++的一大优势是运行速度快,不知道这个优势在除了要求极低latency的情况之外还有什么应用?
主要就是高性能高并发的infra。对于海量计算,每1毫秒的提高乘以非常高的multiplier,最后省下来的computing power是非常可观的。跳出infra的圈子,任何时候你有高性能的需求,比如高频套利的engine,c++都是最佳选择。

> 为什么c++这么多年还一直popular, 未来20年还会是这个样子吗?
Rust可能可以替代C++,但是C++在大公司已经形成了完整的生态。20年后,忽略技术爆炸,应该C++还是主流。

> 上周被分配了一个很大的refactor的任务,不知所措无从下手。很难受
楼上说的refactoring的头痛,在下感同身受。一般这种事情属于一定得有人做,但是吃力不讨好。我的建议是咬牙做下去,earn some trust, 然后开始探索自己的世界。refactor code的愉悦感如果是1的话,那么自己从0到1写C++的核心模块的愉悦感大概是100。不过想要获得这样的机会,尤其在比较core的组,需要不少的历练

评分

参与人数 10大米 +15 收起 理由
WKelvinson + 2 很有用的信息!
jyg118 + 1 给你点个赞!
victormaggie + 1 很有用的信息!
barkonstone + 2 欢迎分享你知道的情况,会给更多积分奖励!
Coeusw + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
CHELSEA234 2020-7-27 12:22:31 | 只看该作者
全局:
插眼~~之后看
回复

使用道具 举报

🔗
106 2020-7-27 12:26:01 来自APP | 只看该作者
全局:
同样的困惑
回复

使用道具 举报

🔗
liu317600 2020-7-27 12:28:06 | 只看该作者
全局:
我也想问这个问题!
回复

使用道具 举报

🔗
greenmoon55 2020-7-27 12:45:17 | 只看该作者
全局:
你都已经在c++的组了当然得好好学。。
回复

使用道具 举报

全局:
会不会未来计算机的硬件性能过剩,然后c++的优势就体现不出了?
回复

使用道具 举报

🔗
Goto 2020-7-27 12:54:50 来自APP | 只看该作者
全局:
个人认为你把c++ primer,effective c++,effective modern c++看一遍这些都不是问题。如果时间不够可以只看后两本,最后一本必看

评分

参与人数 1大米 +1 收起 理由
zea7ot + 1 赞一个

查看全部评分

回复

使用道具 举报

全局:
我的感觉是技多不压身,尤其是cs行业从业者,这种接触频率很高的东西,掌握后工作效率提高不是一点半点。而且我看lz已经明显感到cpp是工作的bottleneck,这明显就是一个需要提升的sign。而且cpp一门应用广泛功能强大的语言,其中的一些思想(value/reference,内存管理,编译,etc),也可以迁移到别的语言上去,让你学习别的语言的时候更容易上手。

顺便分享我的dp。我是当初找工作的时候,为了准备一个cpp岗位的面试,强行填鸭式学习2周,把基本概念都过了一遍。虽然离掌握cpp还有十万八千里,但现在工作中,遇到cpp的困难,就至少知道个大概,该去哪里找到答案之类的。
回复

使用道具 举报

🔗
hjy 2020-7-27 13:08:56 | 只看该作者
全局:
waynezhang226 发表于 2020-7-27 12:46
会不会未来计算机的硬件性能过剩,然后c++的优势就体现不出了?

硬件性能怎么会过剩呢。。。这就跟钱永远不嫌多一样,性能肯定是越高越好,没有尽头的。。

评分

参与人数 1大米 +1 收起 理由
gvgbhj + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表