C 语言底层开发怎么样?

2022-03-18 13:18:23 +08:00
 mikewang

应届生春招拿到了某大厂 offer 。当时选的 Java 语言面试的。
面试通过后,HR 说虽然面的 Java ,也可以考虑别的语言开发。
我了解了一下有 C 、C++、Java 、Python 等,然后对方说我基础不错,推荐去做 C 语言从事偏底层的开发。

现在我比较疑惑的是,大学期间没有接触过这一方面( C 语言教的十分简略,其他知识也都是在 Java 基础上学的),心里很没有把握。不过公司说,没接触过底层没关系,会有导师带。
然后底层开发还要熟悉汇编,现在也几乎是 0 基础(《编译原理》课写的汇编都是伪代码)

认识的同学和毕业生,从事底层的好像也比较少,还没了解到具体是要做些什么工作,前景如何。

HR 说,最终意愿看我,如果坚持 Java 开发也 OK 的。
所以我想问一下,现在 C 语言底层开发如何?
第一份工作选会的,还是选不会的?

11256 次点击
所在节点    程序员
149 条回复
BrettD
2022-03-18 20:11:31 +08:00
@hello2090 内存分配,包括但不限于 malloc ,往深了钻也有好多点,怎么样减小内存分配,或者干脆静态分配,怎么样减少内存分配和释放的延迟,怎么样缓解堆内存碎片之类的
levelworm
2022-03-18 20:17:31 +08:00
@BrettD 作为四十岁拼命爬到开发岗的老年开发,还是很羡慕现在的年轻人的
hallDrawnel
2022-03-18 20:19:09 +08:00
如果 HR 努力推荐你一个岗位,说明那个岗位招不到人,而校招岗位招不到人的原因一般都是因为坑,而不是稀缺。急缺的就直接社招了。
hello2090
2022-03-18 20:19:47 +08:00
@BrettD 这和语言无关,和工作内容有关啊。又不是所有 C 程序员都要解决这些问题。Java 程序员也有自己的性能问题要解决。又不是要解决底层的问题就金贵,拿钱就要多是不是。
duke807
2022-03-18 20:22:14 +08:00
@hello2090

隨便據兩個例子,PREEMPT-RT 實時 Linux 系統用戶空間,使用 C 寫出高實時性代碼、不同程序之間如何免 copy 分享數據

更底層,譬如如何在 STM32 MCU 上自己實現一個簡單的調度器

再進一步深入底層就不是 C 了,而是 Verilog
BrettD
2022-03-18 20:23:29 +08:00
@hello2090 是,和行业有关,不过我身边认识的做 C/C++的朋友多数都对这些底层的很熟,工资也都挺高的,认识的做 Java 的朋友大多数是在做微服务、后端这些业务,,对底层不太熟,工资比较标准
duke807
2022-03-18 20:31:19 +08:00
C 除了用在底層,用在頂層的也很多,譬如 Linux 海量的開源程序使用 Emscripten 編譯成 WASM 在瀏覽器前端運行。
hello2090
2022-03-18 20:31:46 +08:00
@duke807 所以按照越底层理解越深越牛逼的理论,你为什么不建议楼主去做 Verilog 呢?你在 STM32 MCU 上实现一个调度器 比 Java 程序员实现 JVM 进程线程调度高级一些吗?
hello2090
2022-03-18 20:36:03 +08:00
@BrettD 这很容易解释啊,既然这本身不是语言带来的差别,C 在底层开发上用的用的更多,自然 C/C++程序员熟的很。你不能要求做后端微服务的程序员也要和 C/C++一样熟啊,Java 程序员做的上层,业务,有他们自己的问题要解决。你总不能以熟不熟悉“增加程序 IPC ,减小分支预测失误率,减小等待 CPU 缓存时间” 来作为 Java 程序员评判标准吧。
BrettD
2022-03-18 20:37:42 +08:00
BrettD
2022-03-18 20:37:59 +08:00
@hello2090 只是在回复 35 楼而已
Kasumi20
2022-03-18 20:41:50 +08:00
《编译原理》课写汇编干什么? 汇编还需要编译? 直接翻译成机器码了
hello2090
2022-03-18 20:49:51 +08:00
@BrettD 或者换个角度,你底层做的好的 C/C++朋友,去做 Java ,工资也不会低。你做 Java 工资一般的朋友,去做 C/C++大概率也是一般。这还是看人哇。有能力,当然在各个地方都能解决问题,都不会混的差。我不是说你,我反对的是,一提到 C/C++就是底层,做底层的能力强,牛逼。

至于楼主找工作,当然 1 是兴趣,2 当然要看前景,或者说择业范围,我觉得 2 其实更重要。当然是工作机会越多的越好啦。说卷不卷的没啥意义啊,Java 卷不过别人做 C/C++你就能出头了?
yulon
2022-03-18 20:56:29 +08:00
汇编伪代码没毛病其实,因为每个平台都不同,不可能给你每个平台都学吧,最终还是要看平台手册。
BrettD
2022-03-18 20:58:16 +08:00
@hello2090 我是从我们公司招人角度说的,Java 、Go 、C#组的工资是比 C++组少的,有同事从 C#组转到 C++组,工资涨了不少,但是反过来转估计就要降薪了,或者要拿到 C++组的 IC 的工资可能要在那边转到管理线。只是想到啥就说啥,我这只是一个样本而已,没有任何代表性。
runninghipp
2022-03-18 21:05:38 +08:00
java 吧,C 的受众太少了
tianshilei1992
2022-03-18 21:07:58 +08:00
C/C++ 之所以看起来需求大实际上是因为搞的人少…之所以搞的人少是因为门槛高…之所以门槛高是因为相关的东西太多。想搞一个 library 又不能简单的 npm/pip install 或者直接搞个 jar 包就用起来,不同的 GCC 版本这玩意儿就能搞死大部分人。我觉得大部分计算机从业者更多的只是把它作为一个目前工资高的职业,而不是真正的感兴趣,所以自然是能够快速入手找到一份相对不错的工作更重要了。
duke807
2022-03-18 21:13:10 +08:00
@hello2090
100% 的程序員只要願意,學 java 不會有什麼問題,但是能掌握 c 的程序員估計不到 10%,這跟一個人的智商和悟性有關係。(掌握 c 是指能找到各種莫明其妙的 bug 的根本原因,譬如嵌入式系統加一行 printf 原本問題就消失了。)

大多數行業對智商不敏感,靠努力就行。編程行業對智商有一定要求,其中,越是高階語言,要求越低。
BrettD
2022-03-18 21:13:28 +08:00
个人想法总结一下就是底层开发的岗位数量少,大多数项目开发用不到,一般在特种领域里面运用(嵌入式、机器人、无人驾驶、金融、数据库、操作系统等等),门槛高,如果能在里面混下去的话,混得不会差;搞 Java 开发的话是一条风险比较低的路线,市场上就业岗位众多。
hello2090
2022-03-18 21:19:50 +08:00
@duke807 我都已经看不清楚你想表达什么了,即使你只有 10%的 Java 程序员能掌握 C 的论断是正确的,那你想表达什么呢?为了证明自己的智商楼主应该去做 C ?那楼主有这智商去 Java 圈混不是能打败 90%的人拿到 10%级别的工资?

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

https://www.v2ex.com/t/841252

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

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

© 2021 V2EX