应届生春招拿到了某大厂 offer 。当时选的 Java 语言面试的。
面试通过后,HR 说虽然面的 Java ,也可以考虑别的语言开发。
我了解了一下有 C 、C++、Java 、Python 等,然后对方说我基础不错,推荐去做 C 语言从事偏底层的开发。
现在我比较疑惑的是,大学期间没有接触过这一方面( C 语言教的十分简略,其他知识也都是在 Java 基础上学的),心里很没有把握。不过公司说,没接触过底层没关系,会有导师带。
然后底层开发还要熟悉汇编,现在也几乎是 0 基础(《编译原理》课写的汇编都是伪代码)
认识的同学和毕业生,从事底层的好像也比较少,还没了解到具体是要做些什么工作,前景如何。
HR 说,最终意愿看我,如果坚持 Java 开发也 OK 的。
所以我想问一下,现在 C 语言底层开发如何?
第一份工作选会的,还是选不会的?
101
hello2090 2022-03-19 06:38:16 +08:00 via iPhone
@xsen 你应该是回复错了,做 C 的都是高精尖,极致追求性能,追求卓越是这个帖子里某些人打造的人设,你仔细看看,我当然不同意这种说法。
还有人说 10%的程序员才能做 C, 能做 C 的去做 Java 是浪费真是笑死我了😄 |
102
hello2090 2022-03-19 06:41:42 +08:00 via iPhone
@xsen 是的,我同意
1. 很多做 C 做很久的不会 C++ 2. 我就是例子,C++ Linux 手机 App, 到音视频,到 web 开发。 那些嚷嚷着 C 好不卷,工资高的我估计 8 成是连 C 们口中最简单的 Java 都搞不好的 |
103
documentzhangx66 2022-03-19 06:43:41 +08:00
@Mirage09
1.请问你能代表整个湾区 /西雅图嘛?但有消息说,日本与你说的这个情况类似,程序员与其他工种没有因门槛差异而拉开收入差距。另外你说大厂里,C 组很少,这事我在 67 楼,给楼主的回复里,也提到类似问题。 2.你觉得不需要熟练各种语言,但我看法相反,因为我提出了一个前提:不缺钱,又对技术有追求。我觉得如果你不是这个情况,无法感同身受的话,应该思考一下为何会存在这个情况。 3.我在 97 楼的第三点,是回应你在 95 楼的最后一段。这并不是鸡同鸭讲。你想通过亚马逊的大部分业务都用 Java ,来证明 Java 在工程上够用,我觉得你可能只是软件工程,不熟悉网络设备,自然也看不到网络设备的重要性,更别提网络设备里用哪种编程语言开发的。 |
104
xsen 2022-03-19 06:43:45 +08:00
@hello2090 #101
1. 用来做基础设施、中间件的 这可能是如你说的追求性能,实际上性能只是一个方面;更主要是对编译器版本、系统版本要求低;因为比如做数据库的,你是要支持几乎所有的系统(老旧系统)、不同的 CPU 架构 2. 大多数(如嵌入式、单片机) 这个主要是没有选择;当然,目前又个趋势是越来越多嵌入式的会用 C++、Go 或 Rust 来开发 |
105
Mirage09 2022-03-19 06:49:58 +08:00
|
106
documentzhangx66 2022-03-19 06:57:18 +08:00
@Mirage09
鸡同鸭讲....你是鸡还是我是鸡? 在除开外貌、情商、家庭背景等因素外,程序员的门槛,本来就比其他行业要高,收入高也是理所因当,不信你让前台或行政去写 C 试试? 我说这事并不是贬低或看不起其他行业,你如果不是程序员,也不需要对号入座。 门槛高,对应收入高,这是很正常的事情。就像你在前面提到供需关系一样,至少国内与欧美大部分地区,也是公认这个情况。 但日本就有点奇怪,可能不在这个大部分之内,具体原因我不清楚。 |
107
Mirage09 2022-03-19 07:05:07 +08:00
@documentzhangx66
“在除开外貌、情商、家庭背景等因素外,程序员的门槛,本来就比其他行业要高,收入高也是理所因当,不信你让前台或行政去写 C 试试?” 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈笑死我了 |
108
yzbythesea 2022-03-19 07:43:25 +08:00
|
109
jackchenly 2022-03-19 08:49:44 +08:00 via iPad
c 那点东西太简单了,而且不好找工作,工资低。
一个过来人的感受。 |
110
teenagerold 2022-03-19 09:27:02 +08:00
无脑 Java 。互联网,银行,小企业办公系统,那家不用 Java? 市场需求量大,后面跳槽要容易的多。相比较来看,C 的坑位少很多,而且上面的老哥也说了,C 和所做的方向是强绑定的,导致做嵌入的积累在音视频方向根本用不上,选择面更少了。
|
111
liufish 2022-03-19 09:35:29 +08:00
这个大厂是 HW 吧
|
112
northernlights0 2022-03-19 10:16:46 +08:00
感觉身边比较厉害的人,能去造轮子尽量去造轮子。成长周期长,跳槽难倒也是真的。
|
113
gowk 2022-03-19 10:49:36 +08:00
赞同 64 楼
|
114
secondwtq 2022-03-19 11:03:53 +08:00
@Kasumi20 不要小看汇编器 ... 汇编“翻译”成机器码不是那么“直接”的过程 ... 更别说楼主还没说他写的是啥汇编
|
115
seakingii 2022-03-19 11:37:04 +08:00
选 C,打好基础后转学 RUST
|
116
hu8245 2022-03-19 11:39:06 +08:00
C/C++ 没有那么卷,面试的时候不用背太多被太多八股文,也不用说 HashMAP 的原理。
|
117
abutter 2022-03-19 11:46:43 +08:00
C 语言本身没有那么复杂,是因为应用的场合比较复杂。
底层软件开发要想做的那么回事,少不了对操作系统和编译链接的知识,如果做驱动还要了解硬件接口、网络协议等地等,debug 的话还需要了解许多的工具和知识,做优化就需要知道 CPU 、cache 和一些算法。 这是门槛高、积累周期长的原因。 无论什么语言,甚至什么职业都是有市场规律的。如果需要的人数一定,那么候选人越少,价值就越高。 |
118
nevin47 2022-03-19 11:47:03 +08:00 1
过来人的经验之谈:
做 C 的话,务必确认是写业务软件还是写系统软件 如果是业务软件的话,除非写高性能中间件,要不然基础的嵌入式开发没啥意思的 如果是做系统软件的话,尽量避开写驱动这种调参工程师的工作,能深入芯片、操作系统甚至新的体系结构是最好的 C 语言作为主力语言,做操作系统和体系结构研究,职业寿命和职业回报真的巨长无比,我最近两年和我司内部的一些系统专家打交道,有的人真的是几十年沉浸在这个领域深耕,完全没有任何职业寿命的危机感,基本上只有自己主动跳去新的领域,没有说被企业给优化掉的说法…… |
119
hello2090 2022-03-19 12:11:19 +08:00 via iPhone
@hu8245 一样的吧,我 10 年前面试 autodesk 问的就是 effective C++ 里的那些问题。只不过 Java 还需要知道框架,数据库,各种中间件。
|
120
yousabuk 2022-03-19 12:15:25 +08:00 via iPhone
选 C ,其乐无穷
|
121
hello2090 2022-03-19 12:16:03 +08:00 via iPhone
@hu8245 而且 hashmap 是基本的数据结构吧,既然 C/C++的目标是深耕底层的专家,算法导论肯定会看过,hashmap 书里就有哇😁
|
122
xylophone21 2022-03-19 12:22:42 +08:00
C 的门槛确实高,奈何做的方向几乎不怎么赚钱,而且需求少,所有收入也一般
|
123
James369 2022-03-19 12:30:52 +08:00
如果说语言是一座雄伟的宫殿,那么 C/C++就是宫殿的根基。
如果说语言是一顶皇冠,那么 C/C++就是皇冠上的明珠。 如果说语言是满天繁心,那么 C/C++是那一颗闪亮的恒星。 如果说语言只是工具,那么 C/C++就是制造工具的工具。 |
124
tousfun 2022-03-19 18:35:21 +08:00 via iPhone
楼主是去的字节吗?
|
125
tousfun 2022-03-19 18:40:49 +08:00 via iPhone
能不能➕vx 交流下,我目前只会 go 也想做数据库开发的工作
|
129
mmdsun 2022-03-19 22:57:55 +08:00 via iPhone
如果不想卷的话,选 C 。现在 Java 是卷王语言
|
130
nevin47 2022-03-19 23:25:34 +08:00 1
@mrzhu #128 举几个例子
CXL 、CCIX 、Intel 的 Optane 系列,这些都是操作系统和体系研究领域的成果 然后类似 PSI 、OOMD ,都是 Facebook (现在叫 Meta )开源出来的内部项目,还有现在容器的鼻祖 cgroup 和基座 cgroup v2 ,都是 Google 开源的成果。这块基本是系统的软件部分 这些都是 C 语言垒出来的教堂 |
131
ch2 2022-03-19 23:53:33 +08:00
@Kasumi20 #52 一个例子:机器码不支持 32 位立即数的,汇编就能支持。汇编也有语法糖的,只是一行汇编翻译成了另外几个指令的组合,编译原理编译到汇编就够了,没必要直接到机器码
|
132
ch2 2022-03-20 00:12:35 +08:00
@nevin47 #130 真正使得 Control Group 有实际应用场景,还是得 Go 写的 Docker 跟 K8s 出马。C 语音写的沧海遗珠多了去了,要是没有能用得上的伯乐,就只是个普通的砖头。教堂再宏伟,跟你能成为哪块砖哪块瓦是两回事。
|
133
fatigue 2022-03-20 00:20:08 +08:00 via iPhone
赚不赚钱是和业务相关的,和语言无关啊,铁汁们,看你们争论看的我脑瓜子疼
|
136
levelworm 2022-03-20 08:40:04 +08:00
|
137
m0yBPjyX3475syS4 2022-03-20 09:49:46 +08:00
我全都要.jpg
|
138
lechain 2022-03-20 10:43:17 +08:00
C 是最简单也是最复杂的高级语言:)
作为一个 8+年的 C 语言选手,我个人建议是看 OP 你自己的想法走, 选 C 的工作,可以学到很多底层基础的东西,例如操作系统原理,计算机组成结构等,这个方向可以让你在编程方面更好的掌握细节和原理。 反之如果选 java 的话,可以学的东西就是软件工程方向了,如果构建稳定的大型应用程序系统,如何保证高可用高并发等等,这个方向可以让你更好的掌握上层设计以及大型软件的设计架构,和 C 不是同一个方向的。 至于楼上的各种 C 门槛高,C 难之类的论调,可能是因为很多人没法真正沉下心去学习吧,讲道理 Java 在某种方面来说门槛也很高,就单拿一个 JVM 来说,有多少人能说自己精通的。 只能说两个语言各有优劣,但没有本质的高低之分,不能简单的捧一踩一,那样也太反智了。 就目前这个世界上的编程来看,Java 仍然处理上层大型应用软件系统的统治地位,而 C 也是一样的情况,同样处于底层基础开发的统治地位 |
139
juzipeek 2022-03-20 11:04:53 +08:00
别选 C, 岗位太少
|
141
frank1256 2022-03-20 13:01:43 +08:00
java 是很卷,但是你已经有大厂的资格了,你不会卷了。感觉到卷的是我这种普通公司的 javaer
|
142
FrankHB 2022-03-20 17:06:09 +08:00
做内核和驱动可以考虑。
其它大部分都基本不用考虑(数据库之类,不是 C++就是 Rust ),基本不是过气选型说明 leader 技术栈和视野有问题,或者就是擦屁股。 |
143
w2exzz 2022-03-20 17:33:40 +08:00
写两年 C 以后,你的 Java 水平会更好……
写 C 语言会让你更懂计算机 |
144
mosfet 2022-03-21 09:37:58 +08:00
除非是“核心科技”组
不然还是 JAVA 吧 如果海康也算大厂的话,会拉你去写嵌入式,就亏大了 |
145
GalaDOS 2022-03-21 11:51:39 +08:00
最好问清楚具体用 C 做什么,写 C 可以很高大上也可以很螺丝钉。我身边写 C/C++的(包括我自己),大多是读书时就在做相关领域研究的,虽然工作挺安稳,但是也如 64 楼所说,选择变少了,挺难回头的
|
147
enchilada2020 2023-02-16 01:19:44 +08:00
挖个坟问一下,楼主最终选了什么,回过头来看有啥心得体会?
|
148
mikewang OP 公司 C 组主要是负责开发 OS 相关库的,楼主最终没选 C ,进了 C++的组。不过 C 和 C++本来也是相通的。
现在在从事自研数据库的开发,感受和 v 友们的差不多吧。 C/C++程序员往往为特定的某个领域开发,虽然都是 C++,不同领域之间的差异比语言本身要大得多。因此进了这行,相当于绑定了,时间越久回头越难。就业面肯定是比不过 Java 的。 C/C++偏向底层还有一点就是各个公司都造自己的轮子,有自己写的库(像日志打印,加密套件,进程间交互,甚至是字符串类型)。使用上遇到什么问题问同事比问百度或 Google 靠谱。 另外就是调试比 Java 困难。如果写出了问题,出现了非法读写,内存泄漏,在一个庞大的系统中定位会比较头疼。 暂且想到了这么多 @enchilada2020 |
149
mikewang OP 当然优势也是有的,C++ 平均薪资要比 Java 稍高一些,也能促进对计算机深入理解,将来成为真正的大佬。我想 C 语言也是一样的。
|