一亩三分地

 找回密码 注册账号

扫描二维码登录本站

BBS
Offer多多
Salarytics
交友
Learn
Who's Hiring?
疫情动态
指尖新闻
Instant
客户端
微信公众号
扫码关注公众号
留学申请公众号
扫码关注留学申请公众号
Youtube频道
留学博客
关于我们
查看: 6984|回复: 107
打印 上一主题 下一主题
收起左侧

C++值得花时间学吗

    [复制链接] |只看干货 |技术交流
我的人缘0

升级   40.5%


分享帖子到朋友圈
跳转到指定楼层
1
本楼: 👍   100% (20)
 
 
0% (0)   👎
全局: 👍   100% (74)
 
 
0% (0)    👎

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

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

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):
谢谢大家回复,精彩回复会主动加米!

评分

参与人数 8大米 +12 收起 理由
贴地飞行 + 2 给你点个赞!
PhoenixKoh + 2 给你点个赞!
不要拧巴 + 2 给你点个赞!
小兔嘎嘎叫 + 1 很有用的信息!
韩乾Chad + 2 欢迎分享你知道的情况,会给更多积分奖励!
victorz90 + 1 给你点个赞!
mcyzzq1989 + 1 赞一个
106 + 1 赞一个

查看全部评分


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

升级   38.5%

推荐 9
HW312 2020-7-27 13:03:00 | 只看该作者
本楼: 👍   100% (54)
 
 
0% (0)   👎
全局: 👍   100% (73)
 
 
0% (0)    👎
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++.

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

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

评分

参与人数 5大米 +8 收起 理由
ShikiH + 3 给你点个赞!
itditdi + 1 thanks
zhouxf53 + 1 给你点个赞!
Adubce + 1 很有用的信息!
lyq123 + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   85%

本楼: 👍   100% (26)
 
 
0% (0)   👎
全局: 👍   98% (355)
 
 
1% (4)    👎
本帖最后由 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种语言可以几乎无压力写业务逻辑。

评分

参与人数 21大米 +31 收起 理由
Rencai2019 + 1 赞一个
ohshout + 2 给你点个赞!
Wizardmarine + 1 赞一个
小熊蛋 + 2 很有用的信息!
lyvlsi + 1 说的太对了!
kiawe + 2 很有用的信息!
MooreG + 1 很有用的信息!
Lunluen + 2 谢谢分享!
delphih + 1 很有用的信息!
zkstay + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   64.5%

推荐 74
Hero007 2020-7-28 11:08:42 | 只看该作者
本楼: 👍   100% (8)
 
 
0% (0)   👎
全局: 👍   98% (97)
 
 
1% (1)    👎
本帖最后由 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的组,需要不少的历练

评分

参与人数 6大米 +9 收起 理由
Coeusw + 1 很有用的信息!
Dafei + 1 赞一个
gongchen + 2 欢迎来一亩三分地论坛!
iyao.Fu + 2 太有才了!
checai1217 + 1 很有用的信息!
sxtyzjk + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   42.43%

2
CHELSEA234 2020-7-27 12:22:31 | 只看该作者
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (59)
 
 
4% (3)    👎
插眼~~之后看
回复

使用道具 举报

我的人缘0

升级   4.86%

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   94% (204)
 
 
5% (11)    👎
同样的困惑
回复

使用道具 举报

我的人缘0

升级   65%

4
liu317600 2020-7-27 12:28:06 | 只看该作者
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (79)
 
 
0% (0)    👎
我也想问这个问题!
回复

使用道具 举报

我的人缘0

升级   12.9%

5
greenmoon55 2020-7-27 12:45:17 | 只看该作者
本楼: 👍   100% (2)
 
 
0% (0)   👎
全局: 👍   95% (265)
 
 
4% (13)    👎
你都已经在c++的组了当然得好好学。。
回复

使用道具 举报

我的人缘0

升级   10%

本楼: 👍   0% (0)
 
 
100% (1)   👎
全局: 👍   95% (20)
 
 
4% (1)    👎
会不会未来计算机的硬件性能过剩,然后c++的优势就体现不出了?
回复

使用道具 举报

我的人缘0

升级   71%

本楼: 👍   100% (2)
 
 
0% (0)   👎
全局: 👍   98% (249)
 
 
1% (3)    👎
个人认为你把c++ primer,effective c++,effective modern c++看一遍这些都不是问题。如果时间不够可以只看后两本,最后一本必看

评分

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

查看全部评分

回复

使用道具 举报

我的人缘0

升级   24%

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

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

使用道具 举报

我的人缘0

升级   98.5%

10
hjy 2020-7-27 13:08:56 | 只看该作者
本楼: 👍   100% (6)
 
 
0% (0)   👎
全局: 👍   92% (92)
 
 
7% (7)    👎
waynezhang226 发表于 2020-7-27 12:46
会不会未来计算机的硬件性能过剩,然后c++的优势就体现不出了?

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

评分

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

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

Some icons made by Freepik from flaticon.com

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