你们会向新人推荐 C++么?

2016 年 8 月 18 日
 xiqingongzi
/t/300012 提问 C++ 的路线图,很多人都在劝我放弃
但我是起意学 C++ 一方面是个人需要,另一方面是我的一个堂叔推荐我学 C++的。

什么样的情况下你会推荐别人学 C++ 。什么情况下不推荐 C++?

我觉得我堂叔不至于坑我吧....
13266 次点击
所在节点    C
174 条回复
cchange
2016 年 8 月 19 日
这么多回复了 有时候为了操作硬件资源需要 c 或 c++

但好时候硬件操作独立后 可以考虑转为 c#

个人意见~
introom
2016 年 8 月 19 日
@FrankHB 没仔细看,但扫了一眼,发现你长篇大论很多,看上去很懂的样子。请教一下,你都是怎么学 C/C++的,你工作中是不是经常使用 C/C++? 没什么,就是学习一下,感觉你对 C/C++理解比我深刻很多,所以想取个经,我目前也就只是停留在有问题读 spec 的水准上。当然我平常也极少写 C/C++。
FrankHB
2016 年 8 月 19 日
@introom 读 spec 能读到满腹槽点只能长篇大论就差不多了……
oscarzhao
2016 年 8 月 19 日
没太看懂上面争论的焦点是什么,这段时间看侯捷老师 c++11 的视频,完全使用新标准去写的话,之前兼容 c 的语法,操作裸指针等都很少使用了,不过最好懂一些。刚开始可以不用,后面随着能力长进,慢慢会主动去研究,也不错。 仅仅从使用的角度,理解指针的概念,学习类 c 的语言,比如 go 语言
oscarzhao
2016 年 8 月 19 日
很多概念理解起来容易太多。关于系统相关的东西,学习的时候都需要 c 去实践,才能更深刻地理解
lxy
2016 年 8 月 19 日
我仿佛又听到耻球发出噗噗噗的声音 wwwwwwww
yhyangjiabin
2016 年 8 月 20 日
推荐 C 或者 Python 吧,一开始学习一些简单的,容易理解。有信心学下去,在慢慢深耕
techmoe
2016 年 8 月 20 日
借用一下某位前辈的话
**你愿意一开始就整天面对一个黑漆漆的 console 玩吗?**
xieyudi1990
2016 年 8 月 20 日
还有说实话每次看到这样鼓吹 C 的言论,感觉很 low 。老是说底层底层,不知道是不是自己脑补还是怎么啦。动不动来句 “底层”,要真说底层,估计一句话也答不上来。这种感觉让我想起了亲身经历的事。隔壁寝室有一同学( CS 毕业了找不到工作送中通),然而他大三时,我亲耳听到他向大一学弟吹嘘 C/C++ 如何如何好,如何接近底层(虽然我不反对他的说法,但我一脸鄙视)。

而且我还想吐嘈,每次有人问如何学习计算机,就有人列一大堆课本。我怀疑发这贴的人,有多少人是认真看过的。

题外话,你仍然想学习底层,那学习底层最好的方法,当然是直接学习底层。指令集架构,微架构,数电,模电,一层层看呗,有兴趣的话。一步步歪下去的话搞不好会转专业哦(和我一样, CS 转 EE 的奇葩)。这种情况下, C 搭着学一学,可以,比较大部分这方面的代码都用 C 。但如果只学 C 那点东西,指望能怎么 “底层”,那是不可能的。而且如果是考虑程序员这个职业,那自然更没必要。

(虽然我平时要说也基本只用 C 。混着汇编和机器码吧。还有 bash 做胶水。描述语言不算。我是搞硬件的, CPU )。

@bramblex
地址,你就拿邮编做比方。只不过计算机是二进制,门牌是十进制;计算机以字节为单位,邮编以社区为单位。
要精确到内存上... long story...

就说 pc 的 dimm ,比如我前阵子在调的这个(普通笔记本用)内存条。双面各 8 个芯片(共 16 个, 64Mx8-bit );上面的 8 片的 cs 连在一起,和下面的 8 片的 cs 连在一起,组成两个 rank ; 8 片 8-bit dq (双向数据线)按位扩展到 64-bit ,一起和地址 /控制线接到内存控制器上。 dram 芯片上,有 4 个 bank ,每个 bank 有 16k row ,每个 row 1k column ,每次读写可选 4/8 长度的 burst 。要访问,需要先 active , read/write , precharge 三个阶段。可利用的地方比如,不同的 bank 可同时处于 open 状态(即不被 precharge ),而且如果处于 open 状态只要处在同一个 row 里可以快速访问(否则必须 precharge 关掉再 active )。另外至多每隔 64 ms 必须 refresh , refresh 后需要重新 active 。(说得有些不清楚,感兴趣的可以看 JEDEC 文档或内存芯片的文档)这样给内存控制器很多设计空间了。举例,比如是保持 open ( open-row policy )这样可减小同 row 的访问延迟,但是其他 row 的延迟会增大,而且 open 会更耗电,也有一些其他的限制;还有一种是 close-row policy ,延迟可能会大,但功耗小;当然有动态调节的,看情况。还有不同通道独享总线互不影响。(程序员应该都知道 locality )以上各种原因决定了物理地址到 channel/rank/bank/column/row 的映射。

到 CPU 里面(现在应该都是集成了内存控制器)。内存控制器挂在 coherent interconnect 下面,上面是 cpu 最后一级缓存。哎感觉说了半天也没说清楚,不说了。反正 the rest is history , cache controller, line fill buffer,
eviction buffer, snoop filter, tlb/itlb/dtlb, page walker (虚实地址转换就是前面几个货在弄), load/store queue, etc. etc.

如果你知道你程序里变量的虚拟地址( C 里的 & 操作),页在内存里,能 dump 出页表,知道能 flush cache all the way to DDR ,知道内存控制器的设计和设置,知道你内存条的配置,理论上来说,你应该能精确到在哪颗 DDR 颗粒里(如果有内存条的 RTL 和 GDSII ,也许你能够知道具体在哪里)
xieyudi1990
2016 年 8 月 20 日
@xieyudi1990 s/(如果有内存条 /(如果有内存颗粒 /g
FrankHB
2016 年 8 月 21 日
@xieyudi1990 做 uncore 的?
wizardforcel
2016 年 8 月 21 日
@lizon

[我往坑里带了吗?没有说学 C 就一定要用上 C 。 ]

我承认,对于内核和嵌入式, C 具有良好的生态和工具链。(嵌入式不是主流、待遇差,但是与这个话题无关。)

但是,你的观点就是,为什么学 C ,因为嵌入式要用到 C 。那我问为什么搞嵌入式,你又说学 C 不是为了搞嵌入式。那我就奇怪了,你的推荐原因是啥。

[就计算机知识体系来说, C 是最佳的线索。]

你知道啥叫“计算机知识体系”?只有 system ?图形、 ML 和 thoery 都被你吃了?

[我对初学者的假设是“想了解计算机体系结构,但是没有人带领”的人。 ]

这个假设就不对。

还不会编程的人,应该学学一些编程的思想,比如说一些代码的抽象和组合方式。

直接看汇编、流水线、缓存??呵呵。

---

你给我的感觉就是,要么搞嵌入式搞傻了,要么基于个人原因推荐 C 。

个人原因也没什么,实话实说就好了,搞什么“底层鼓吹论”只会让人觉得牵强附会。

system 只是计算机的一个分支,也不是万能的,千万不要鼓吹或者是神秘化。

就酱。
x8
2016 年 8 月 21 日
@wizardforcel 你完整的看过我们之前的讨论内容吗?
我哪句话是在“鼓吹”底层?我基于自己的经历,建议让初学者首先接触接触 C ,对硬件实现形成基本的概念,有问题?我说过让初学者跳坑了吗?老是先上来批判一番。说实话,其他人先学什么关我屁事,有兴趣的人,自己都会去弄懂这些问题。本来就是建议向的东西,你觉得不对,你说你的方案就是了,一句一句反驳搞得我很恶心。
laviris
2016 年 8 月 26 日
看你自己的定位,如果你只是想干份工作,拿份高薪,实在没必要开始就学 c/c++,在市场供需很明显的情况下,你学供应短缺的就行了。但是如果你稍微风险意识,希望自己足够全面,c/c++开始是没问题的。由奢入俭和由俭入奢,怎么选自己看着办。虽然我不做嵌入式,但是对于楼上说什么嵌入式非主流,待遇差这种,只能呵呵了。估计是互联网干多了加班加傻了。你去跟人嵌入式的比比时薪和压力看看,会比你差么。嵌入式不过是通用型太强,集成度太高,需求变少而已。最后,你我不过是社会生产资料中的一环,如果用价格高低来衡量,不过就是资本家在运作的时候发现生产资料短缺,暂时性的提高价码而已,感谢时代吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/300102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX