作者tinlans ( )
看板C_and_CPP
标题Re: [问题] 关於C++学习过程请教
时间Thu Apr 14 06:04:41 2022
※ 引述《Suxing133 (怪盗巴哥)》之铭言:
: 各位前辈们早上好,
: 小弟目前大二,再一年就准备做专题考研。
: 目前正在自学C++,
: 原本是跟学校的课程学习JAVA,
: 虽然是资管但对C/C++的指标有莫名的憧憬,
: 所以才在这个时间点改学习另一个语言,
: 缺点是班上没有同学一起学习C++,
: 因此想上来板上请教各位前辈们一些问题。
对指标的憧憬导致在资管大二阶段跳过来学 C++ 这个动机有点怪,
如果这板不是 C_AND_CPP,有很大机率我会建议你别学下去。
我倒是比较好奇这个憧憬对你後来学习 C++ 和使用 C++ 造成什麽样的影响。
写程式很忌讳的一点是炫技,C 要炫技大部分是靠指标,C++ 还有很多语言机制可炫技。
你的生涯规划我也同样好奇,未来会想从事用 C++ 开发程式的工作吗?
资管需要学习的东西很广,但 C++ 这东西某方面来说需要学精,
你如果未来不想从事会用到 C++ 的相关工作,你还有好多好多东西得去学。
浪费时间在 C++ 这语言的学习上,你可能会丧失职场竞争力,这很严重。
不过既然你还打算读研究所,也许硕班论文和教授给你做的计画还能给你指引方向,
所以这边先不强迫你去思考未来想去什麽公司、做什麽样的工作内容。
只是我眼光比较短浅,好像想不太到哪个资管所教授接的计画会需要学生使用 C++。
因此 C++ 可能只会变成你花了最精华的大学时期的一个短暂兴趣,
而与你同世代的资管人可能利用这四年时间累积了更庞大的有用知识在职场上发光发热。
你在研究所开始之後的人生不会再有时间让你这麽悠闲的读 C++ Primer,
也许将来的某一天你会後悔为何不花一样的时间去学 10 几种近代资讯技术。
另外就是毕业专题我记得都是要团队合作。
班上都没人跟你一起学 C++ 了,到时专题你打算一个人一组用 C++ 写吗?
不过话又说回来,很多其它语言的 plugin 或 extension 其实都是用 C/C++ 在写。
或许未来有一天你现在的经验能成为你的助力,让你能做到别人不能做到的效能改善。
如果几年後你最终选择了其它用不到 C++ 的语言当谋生工具,要记得你还有这个优势。
: 学习过程:
: 目前是读C++ Primer 5/e 读到一半左右,
: 预计再半个月能接近读完,
: 之後打算继续读Effective 系列&STL函式库,
: 中间还有刷一些Leetcode Easy的题目,
: 未来打算写一些小专题累积开发能力。
: 问题:
: 不知道这样学习方式有没有需要改进的地方?
: 不知道有没有荣幸获得各位前辈的经验,
: 目前刷Leetcode算是心态满崩的,
: 因为网路上大多都在使用STL,
: 还有code都是写class,
: 这样好像没有练习到main呼叫的过程,
: 甚至在考虑要不要改刷CPE的题库。
: 感谢抽空看我废话,打扰到不好意思!
: (第一次在ptt发文,排版不好还请见谅!
: (有违反版规的话非常抱歉!
刷题这件事对你来说太早,板友已经都讲过了我就不讲了。
比起 The C++ Programming Language,
C++ Primer 的内容编排更接近 C++ 语言辞典这类工具书。
如果你打算把写 C++ 当作你未来正职使用的语言,
读过它一遍你将不会被编译错误或一些非预期的编译结果感到意外,
至少遇到的当下你脑中会闪过书上的某些片段然後回来查。
如果现在是 2011 年,而且你的目的是想更透彻了解这个语言,
我会建议你在读完 C++ Primer 之後去读 The C++ Programming Language。
之後再建议你去读 Effective 和 Exception 系列的书做补强。
但是从 2012 年开始,Effective 和 Exception 系列已经过时,
虽然里面的精神可以花点时间去了解,但里面许多过时的内容我也担心新手误会。
Effective C++ 3/e 算是 2012 後这系列里唯一值得去读的书,但也没更多了。
类似的进阶学习资源都变成在网路上,纸本或电子书已经不太有人出版。
另外关於并行程式设计的主题,是被独立在一本叫 C++ Concurrency in Action 的书上。
这本书需要特别另外去读,因为里面涵盖的主题既有的书籍里不太会介绍。
欧莱礼还有一本「优化 C++」在你遇到效能瓶颈时可以去读,但现在不用急着去看。
你读的 C++ Primer 5/e 在 2022 年的现在也是一本过时的书,
但我无法给你更好的建议,因为我不是从这个年代才开始学 C++ 的。
如果你想找一本跟得上时代的 C++ 书籍,无论简体还是繁体中文我还真不知道有没有。
因为我已经是体力衰退的中年人,没力气帮你找,只能说关键字是 C++17 和 C++20。
我自己这几年是在 manning.com、leanpub.com、packtpub.com 上面买电子书来读,
再来就是去一些板友也常提到的网站逛逛,不断追着最新标准走。
如果你的英文能力不足以读这些原文电子书,我会建议你设法把英文补好。
走软体开发除非你是走少数特殊行业,不然靠吃台湾内需肯定得不到什麽好的发展。
特别是你的英听跟口说如果不行的话,强烈建议先去补习加强或利用学校资源。
这些基础语言技能没有的话,我还是建议你先别学什麽 C++,
不然以国内匮乏的中文资源,再过个 10 年,你跟完全不会 C++ 的人很高机率是一样的。
除了念书,Boost C++ Libraries 也该练习去使用,
我学生时代给自己设定一周要学会里面一个函式库的目标,
学会使用它可以帮上你不少忙,但终究它也是轮子和积木等级的函式库。
Qt 之类的 GUI framework 你至少要学会一套,这样你的软体开发工具才会完整。
至於你说的「未来打算写一些小专题累积开发能力」,这又是完全不同的议题。
你在我上述的电子书商网站搜寻 C++ 可以找到一狗票 C++17 和 C++20 的书,
所以我也不去罗列我看过买过什麽只讲 C++ 的书,毕竟意义有限。
所谓的开发能力,是跨越程式语言的一项知识,也是你需要花大量时间钻研的东西。
以欧莱礼的「深入浅出物件导向分析与设计」和「深入浅出设计模式」为出发点,
你会开始见识到超脱语言之外的软体分析与设计知识,这比起使用什麽语言还要重要。
在这领域也有个名作家 Martin Fowler 出的书也值得一读,特别是重构相关的书籍。
这里我可以列一下我读过的书,因为关键字比较难下,
你可以去书商网站从他们的目录里了解这些书在讲什麽东西:
1. Hands-On Design Patterns with C++
2. Software Architecture with C++
3. Clean C++20 - Sustainable Software Development Patterns and Best Practices
4. Architectural Patterns (书名太短给你 ISBN 978-1-78728-749-5 防止你找错)
5. Software Architect's Handbook
6. Good Code, Bad Code
7. Five Lines of Code
8. Software Mistakes and Tradeoffs
9. Street Coder
有些书还没出完,上面那些电子书的网站都可以在作者出完书之前买到书,
买了之後先读到可以把作者目前已经写好的章节,甚至可以给作者意见或和作者讨论。
要注意这些书里用的范例程式码未必是 C++,但你要吸收的主要是它的精神。
这对你未来转换跑道去用其它语言一样有用,也是你到达学生时代终点前所该学习的。
manning.com 出的书品质比较高,我在这还是会建议你去翻翻这网站上的书籍标题。
我会希望你至少先从标题确认,看看你有没有能力知道这些书分别是在讲什麽的。
虽不求 100% 知道那些是什麽东西,但起码要知道个七、八成。
我指的是就算只是懂得标题上的名词是啥也好,就这程度上你至少得略懂七、八成标题。
坦白说以资管人而言,你大概知道它们是什麽,然後都摸过一点,会比你学 C++ 有用。
我也不喜欢在 C_AND_CPP 板上一直劝人学 C++ 以外的东西,
但既然你表明了你是资管人,我这个看过很多资管人人生的资工人还是得劝说一下。
另外 manning.com 这网站近年开始搞起了 live project,
你如果找到感兴趣的主题也可以去试试。
不过如果你没有足够的英文能力,这些机会也就与你无缘。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.18.57 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1649887500.A.A1C.html
1F:推 tylpk: 推mannimg,没有DRM,方便放不同的阅读器。 04/14 10:56
2F:推 tylpk: b天珑买的纸本也可下载电子书,但不确定是不是每本都可以 04/14 10:59
3F:→ tylpk: 。 04/14 10:59
4F:推 Suxing133: tinlans大大您好!这篇文章我看了一个早上,真的打破 04/14 12:35
5F:→ Suxing133: 我的价值观以及我对学习方式的见解,有些地方想要请教 04/14 12:35
6F:→ Suxing133: 您~就不另外发文回覆了!我怕内容会离题违反版规,请 04/14 12:35
7F:→ Suxing133: 问有空吗?我应该直接在下推文问还是站内信呢?没有空 04/14 12:35
8F:→ Suxing133: 也没关系!真的已经帮我很大的忙了!!再次感谢您抽空 04/14 12:35
9F:→ Suxing133: 回答小弟。 04/14 12:35
如果想问比较多的东西用站内信,问题比较少的话就推文。
比较多人看到的话,能给的意见也比较多,
所以站内信聊完之後你可以再去适当的板发文问多一点人看看他们意见。
不过所谓适当的板上的人有些可能比较凶一点,不一定像这边这麽友善,要习惯一下。
10F:推 steak5566: Primer要读完就很硬了 我觉得当工具书看 04/14 21:42
11F:推 Etern: 用心推 04/15 08:48
12F:推 NTAP: 好用心,推 04/15 09:28
13F:推 F04E: 推 04/15 12:03
14F:推 sa074463: 推 感谢大神 04/15 13:03
15F:推 ShenJing: 推用心回覆 04/16 10:12
16F:→ final01: Effective Modern C++没列?我觉得这本的确没effective的 04/17 14:38
17F:→ final01: 威力~可是我觉得还是新手必读之一?XD 04/17 14:40
这本确实该读,现在才发现原来我没写到。
年纪大了,大概讲完 Effective C++ 3/e 就以为自己已经讲过。
Scott Meyers 也颇狠的,出完这本隔年就说林北不出书了,
以後大家自己去上 stackoverflow 还有看 C++ Core Guidelines 吧 XD
我本来还期待他出完这本能回头更新 Effective 系列的书。
Herb Sutter 虽然没更新 Exceptional 系列的书,但他有默默把 GotW 的内容翻新过。
虽然更新的部分只有在他 blog 上,而且看起来做一做就没什麽力继续了。
刚好今天下午我也在自己网站上正在写类似的东西,
和回应这讨论串原 po 的内容有点不太一样:
https://bit.ly/3uRPMrm
※ 编辑: tinlans (220.135.18.57 台湾), 04/18/2022 03:45:53
18F:推 Lalef: 借问,如果要刷leetcode刷题还是得靠C++对吧? 04/19 12:03
19F:推 KanzakiHAria: 刷演算法当然是python阿 04/19 15:03
20F:→ KanzakiHAria: 不限语言的程式比赛前100名九成是py 04/19 15:04
21F:推 unmolk: 用心推 04/20 06:24
22F:推 oToToT: 上面要不要看看codejam之类的比赛前几名都用什麽语言 04/20 14:15
23F:推 b0920075: 第一次听到程式竞赛九成用 python ...,这个数据哪来的 04/21 15:46
25F:→ KanzakiHAria: C++还没有刻完data structure人家py答案都出来了 04/21 17:32
26F:→ KanzakiHAria: 你讲codajam是有统计从题目出现到pass的时间? 04/21 17:33
27F:→ KanzakiHAria: 不过就只有执行时间而已 编译语言本来就跑比较快 04/21 17:33
28F:推 KanzakiHAria: 我是不意外啦 C++版的人都写C++比py快 (跟自己比 04/21 17:36
29F:→ KanzakiHAria: 然後以为外面世界也是写C++比py快www 04/21 17:36
30F:→ KanzakiHAria: 一堆题目C++要写上百行 py只要几十行的 04/21 17:37
31F:→ KanzakiHAria: 不要以为我是用py才反对c++ 我平常工作是写c++17 04/21 17:41
32F:→ KanzakiHAria: 写poc的时候还是用py最快 要榨效能再上c++ 04/21 17:42
33F:→ KanzakiHAria: 不懂的人可以先去看甚麽是手稿语言就会知道差别 04/21 17:44
34F:→ EricTCartman: 一堆题目要写上百行?哪些 04/22 18:30
35F:推 EricTCartman: 还是你自己百行内能写完的程式写到上百行 幻想全世 04/22 18:35
36F:→ EricTCartman: 界写C++的都跟你一样ww 04/22 18:35
37F:推 b0920075: 竞赛选手爱用训练网站的 cf div1 前五十名都用 c++ , 04/22 19:05
38F:→ b0920075: 目前是没听过哪个选手会拿 advent of code 当作备赛训 04/22 19:05
39F:→ b0920075: 练,这看起来像社群办的小圈圈活动,如果是拿 atcoder/ 04/22 19:05
40F:→ b0920075: cf/codechef还是各大知名 oj 或是 ioi/acm icpc/topcod 04/22 19:05
41F:→ b0920075: er/google code jam 之类的大赛各有说服力,这些选手应 04/22 19:05
42F:→ b0920075: 该都比你我更了解用什麽语言对自己的竞赛成绩更有利 04/22 19:05
43F:→ EricTCartman: 快贴一段你用py写几十行 结果C++写到上百行的来看看 04/22 19:24
44F:→ EricTCartman: 让我开一下眼界 04/22 19:24
45F:推 KanzakiHAria: 所以时间拿出来阿 从题目出现到答案输出的时间 04/22 20:03
46F:→ KanzakiHAria: 编译语言本来就比手稿语言快谁不知道 04/22 20:04
47F:→ KanzakiHAria: 加上写code时间谁比较快时间是另一回事 04/22 20:04
48F:推 KanzakiHAria: @EricTCartman 所以阁下意思是手稿语言行数比较多 04/22 20:08
49F:→ KanzakiHAria: 每个人要有自己判断力 如果手稿语言行数比C++多 04/22 20:09
50F:→ KanzakiHAria: 那整个手稿语言世界可扔去垃圾桶了 速度慢还行数多 04/22 20:09
51F:推 b0920075: 时间在 codeforces 比赛结果那边就有了啊,执行时间也 04/22 20:17
52F:→ b0920075: 是比赛的一环,你执行时间慢连通过的资格都没有XD 04/22 20:17
53F:→ b0920075: 再说前五十名哪个不是写的快执行时间又短的 04/22 20:18
54F:→ EricTCartman: 哇 你这稻草人立得真是让我拍案叫绝 04/22 20:18
55F:→ EricTCartman: 我从头到尾哪句写手稿语言行数比C++多 麻烦您框一下 04/22 20:19
57F:→ EricTCartman: 我只是好奇Python写几十行 C++可以到上百行的题目 04/22 20:20
58F:→ EricTCartman: 长怎样 04/22 20:20
59F:推 b0920075: 比赛应该是直接上模板,该弄得都弄好,一键输出,剩下 04/22 20:23
60F:→ b0920075: 时间用来思考和实作演算法吧 04/22 20:23
61F:→ EricTCartman: 啊对了 我平常工作也会写Py跟C++ 我从来没打算证明 04/22 20:24
62F:→ EricTCartman: C++比Py更好用更简洁 我只是纳闷 你用"上百行"跟"一 04/22 20:24
63F:推 KanzakiHAria: 00:02 你要说这个时间是从看到题目打好code到上传? 04/22 20:24
64F:→ EricTCartman: 堆题目" 远远超越我的认知 04/22 20:25
65F:→ KanzakiHAria: 所你的意思是这题从看到+打code+compile+run 两秒? 04/22 20:25
66F:推 b0920075: ...你可以点进去看各个选手每一题的比赛开始到提交的时 04/22 20:25
67F:→ b0920075: 间 04/22 20:25
68F:推 KanzakiHAria: 你说要点进去 所以我刚刚就是说 有没有rank是总时间 04/22 20:28
69F:→ KanzakiHAria: 而非这种是以执行时间做为排序的 04/22 20:28
70F:→ KanzakiHAria: 这个外面的rank是用执行时间当然编译语言时间短阿 04/22 20:29
71F:→ KanzakiHAria: 而且这个比赛本身就是执行时间作为标准 当然积分上C 04/22 20:30
72F:→ KanzakiHAria: ++有利 04/22 20:30
73F:推 KanzakiHAria: 如果说原PO就是要参加这种以执行时间为积分的 04/22 20:33
74F:→ KanzakiHAria: 当然C++没话说 没有语言可以做到比C++更细致的调校 04/22 20:33
75F:→ KanzakiHAria: 但我不认为原PO目的极致执行时间竞赛 而且前面都已 04/22 20:34
76F:推 b0920075: 你去看 codeforces 比赛规则,他是以题目出来之後到提 04/22 20:34
77F:→ b0920075: 交的时间和错误次数和题目本身的分数算成绩,执行时间 04/22 20:34
78F:→ b0920075: 通过是最低要求,但是你跑得快跟你最後分数无关== 04/22 20:34
79F:→ KanzakiHAria: 经说了刷leetcode很崩溃 谁不知道C++初学上手难度? 04/22 20:34
80F:推 KanzakiHAria: 我承认我错了 打比赛最适合的语言是C++ 原PO请学C++ 04/22 20:36
81F:→ KanzakiHAria: 打比赛 加油 04/22 20:36
82F:嘘 EricTCartman: 阿Py几十行上百行的C++题目咧 贴来看看阿 04/22 20:56
83F:嘘 oToToT: 自己没打过大家普遍认同的比赛就不要出来误人子弟好吗 04/22 21:43
84F:推 oToToT: 顺便帮你补充一下00:02是两分钟的意思,代表看到题目写出 04/22 21:50
85F:→ oToToT: 答案再到上传花两分钟 04/22 21:50
86F:→ oToToT: 再补充一下像是前面提到AoC的部分,排行榜靠前的选手在像 04/22 22:18
87F:→ oToToT: 是codeforces的比赛中也几乎都是用C++写的,所以还是要看 04/22 22:19
88F:→ oToToT: 你所说的比赛到底是哪种类型的,如果是完完全全只拚手速 04/22 22:20
89F:→ oToToT: 的话的确python有机会写起来比较快,但如果是competitive 04/22 22:22
90F:→ oToToT: programming的话大多还是以C++为主 04/22 22:23
91F:推 Ommm5566: AOC++还有用raku的 04/23 00:32
92F:推 Ommm5566: 全都学就没问题 04/23 00:33
93F:推 Hurricaneger: 看本爸爸的,再一本函式库,再一本更新快的外国pap 04/23 14:00
94F:→ Hurricaneger: er 04/23 14:00
95F:推 yoco: 真的,没事不要学 C++ 04/24 01:30
96F:→ firejox: python 的 sort 跟 priority queue 比 c++ 难用 04/24 02:36
97F:→ firejox: 不适合比赛吧 04/24 02:38
98F:推 wulouise: 说真的你要学 先从python开始,如果有缘C++会找到你 04/29 23:31
99F:→ wulouise: 顺便推一下yoco 04/29 23:31
100F:推 cphe: 在推文吵架真的是侮辱了这篇优文 04/30 13:07
101F:推 DerLuna: 如果是写金融即时交易的 C++还是主流 05/06 20:58
102F:→ DerLuna: 那种收入也是最顶的.... 05/06 20:58
103F:→ DerLuna: 简单的说C++如果学通 是真的很神 也真的可以很赚 05/06 20:59
104F:→ DerLuna: 而且基本上C你也会懂 韧体等等也没问题 05/06 20:59
105F:→ DerLuna: 但如果要泛用的话 C#算是最折衷吧 05/06 21:00
106F:推 VF84: 连这个都能吵,真闲欸 05/06 23:05
107F:→ VF84: 讲点不相干的,在念书时期不太需要让自己被语言局限住,学你 05/06 23:06
108F:→ VF84: 你喜欢的就好。 05/06 23:06
109F:→ VF84: 我高中是用 C++ 写 C,备考研究所的时候是用 Rust,在没有 05/06 23:07
110F:→ VF84: 太多 C++ 的经验下,找到一份 C++ 的工作 05/06 23:08
111F:→ VF84: 现在正在恶补 Modern C++ 中...Orz 05/06 23:09
112F:→ VF84: 我面试的时候连 move semantics 的本质到底是什麽都不太清楚 05/06 23:10
113F:→ VF84: 现在应该也只是一知半解啦...Orz 05/06 23:10
114F:推 smes95303: 这篇看下来.....学好英文再去想自己要干嘛比较实际 05/07 11:50
115F:推 ppc: 你人也太好@@ 05/10 16:03
116F:推 TheOneisNEO: leetcode weekly排名一百内的应该用c++远多於py 05/15 16:20
117F:→ TheOneisNEO: 虽然说这应该不算很厉害的比赛 但前面的人应该不差 05/15 16:20
118F:推 bboman: leetcode周赛100名内大部分都是竞赛出身的,一定是C++多 06/10 12:11
119F:→ bboman: 竞赛用Python的问题是执行太慢了,有可能演算法写对但TLE 06/10 12:14
120F:→ bboman: Python只有在简单题拼手速的时候可能有优势而已 06/10 12:18
121F:推 bboman: 最後推一下,在这篇吵竞赛用什麽真的是污辱这篇优文... 06/10 12:26