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 语言底层开发如何?
第一份工作选会的,还是选不会的?

11939 次点击
所在节点    程序员
149 条回复
documentzhangx66
2022-03-18 23:35:11 +08:00
@hello2090

1.我在前面讲的东西,是一种共识性的、概率性的,你完全可以去看看各厂对这方面的职位要求,也可以和 HR 们聊聊,看看是不是这回事。

如果你只是为了反对我,在这种共识里,找小概率的反例,不用你找,我也能找一堆出来。


2.你的 C 与 Java ,我认为学的并不精通。面向对象,是一种思想,Java 只是对它实现了语法糖。C 语言,甚至汇编,你也可以模拟出一些面向对象的简单特性。当你在吐槽“C 可是连类都没有的,所有的变量定义都得放在函数开头的啊”时,已经暴露了这个问题。

你说你以 C++,面过 FB, Amazon ,这一点都不重要,重要的是,你过了没,以及这两家公司,对你的评价。我觉得前者你不会说,后者你也不知道。


3.也许你想踩 C/C++,来抬 Java ,但我觉得这种操作并不合适。任何语言,都有自己的优缺点,都有自己的适合场景。当你针对工资、层次这些角度,甚至带着玻璃心去看问题时,只会造成偏见。

还是那句话,缺钱,就选工资高的;不缺钱,就选自己喜欢的。拉踩很没意思。

我甚至早期有段时间天天用 PHP ,现在经常写 Python ,这种性能上不入流的语言,你是不是会讥讽我,甚至同情我?
fkue587
2022-03-18 23:35:15 +08:00
@railgun 你这个让他怎么选 闭眼选 java 做领导 哈哈哈哈
zhgg0
2022-03-18 23:35:42 +08:00
有兴趣偏好就选感兴趣的。没有兴趣偏好的话,不要瞎选;语言不重要,打听清楚具体干啥的,选将来大概率好找高薪工作的方向。
rillhu
2022-03-19 00:00:18 +08:00
C 的就业面窄啊。同时还是要看下其他的语言的
jackmod
2022-03-19 00:00:37 +08:00
搞了两年驱动,一言难尽。现在在玩 java ,真香。
mikewang
2022-03-19 00:33:47 +08:00
@hello2090 #28
感谢观点,Java 卷因为热门需求高,这个是毫无疑问的。选 Java 至少不会差。

不过,说 C 不够现代化可能不敢苟同,大概 C99 的时候变量就能在函数中间部分定义了吧。至少在 GCC 上是没问题的。

C 可能不够 OOP ,不过结构体这种东西就挺有意思的,而且 #define 一些宏确实能做出 OOP 那种味儿。我感觉更像是一种设计思想的问题。

可能我对 C 存在一些特殊的感情吧,因为有时过于 OOP ,在 Java 写了一堆 getters & setters 有点厌倦了,觉得自己就是个垃圾代码生产者(大概是我技术有限,如果伤害到了 Javaer 非常抱歉)


有点歪楼了,其实我不太想搞语言大战,只是想确定下前景,毕竟也不能全靠个人偏好来吃饭..
doug
2022-03-19 03:11:10 +08:00
看方向吧 看兴趣 兴趣第一 不然后面会很痛苦 个人感觉 关乎收入问题 看市场行情看行业 与语言无关 不是因为语言牛逼之类 工资就高 而是因为市场紧缺人才 工资才高吧 试想芯片设计人才像现在 Java 这样满天飞的社会的话 芯片设计的待遇也会低 当然 不否定芯片设计门槛确实高 毕竟流片成本极高
希望不要有人喷我哈
2NUT
2022-03-19 03:32:03 +08:00
别被忽悠了
hello2090
2022-03-19 03:52:35 +08:00
疯掉了,为了捧 C 连面向对象只是概念,C 也可以实现都来了。。。我编程不用 IDE ,都是在纸上写好先的。
hello2090
2022-03-19 04:00:29 +08:00
@documentzhangx66
我说我以 C++面过就是因为我想告诉楼主大厂不挑语言啊,怎么变成我要踩 C++,抬 Java 呢?我做了 10 多年 C++,那我是要踩我自己喽?

看看这楼里谁在踩? C 是底层语言,高级,10%的高智商才会,Java 谁都学得会。合着我做 Java 的就是拉踩,你们 C 的就是理中客?

你用 PHP 有什么稀奇的?我还用 COBOL 呢,对对对,我没遇到一个程序员,都是先问一下是什么编程语言什么框架的,牛逼的我就跪下,挫逼的我就抽一顿满意了吧
duke807
2022-03-19 04:05:50 +08:00
@hello2090 #89
C 面向對象編程很普遍啊,譬如 linux 內核,譬如 python 解析器自身,mcu 裸跑都是面向對象,譬如 hal 層
hello2090
2022-03-19 04:11:19 +08:00
@documentzhangx66 “你的 C 与 Java ,我认为学的并不精通。面向对象,是一种思想,Java 只是对它实现了语法糖。C 语言,甚至汇编,你也可以模拟出一些面向对象的简单特性。当你在吐槽“C 可是连类都没有的,所有的变量定义都得放在函数开头的啊”时,已经暴露了这个问题。”

你这个我真的理解不了你想表达什么意思,你用 C 来做面向对象,是因为你学了面向对象语言,了解了面向对象概念,才会去做这件事的啊,难道你是 C 用着用着,自然的想把他用成面向对象的样子吗? C 要模拟才能简单的面向对象,C 开发者学了面向对象语言之后模拟面向对象的用法,不正是说明了 C 不是面向对象吗?

不过我确实没你精通,你能 a++ 都能想着怎么进行性能优化,普通人是达不到这程度的
hello2090
2022-03-19 04:16:37 +08:00
@duke807 既然 A4 纸也算 Java IDE ,我看没有理由 C 不是面向对象编程语言!-- 来自排名 10%后的 Java 码农
documentzhangx66
2022-03-19 05:04:29 +08:00
@hello2090

既然你说,你不懂我想表达什么,那我掰碎了讲讲:

你对 C 、C++、Java 、就业、岗位与薪资,与其他人的理解有较大差距。

你甚至有点玻璃心,想来抬杠。比如 89 楼 与 93 楼。

这种情况下,楼主可能会被你误导。
Mirage09
2022-03-19 05:37:22 +08:00
选组首先要看组里环境,有毒 /太卷的组做什么都没用
其次是兴趣和项目,做一个自己有兴趣的东西还是挺好的,如果不知道兴趣点在哪的话去做相对热门(比如说,类似岗位多)的组
最后是钱,钱差的不多好说,差太多就不是画饼能覆盖的了

另外非常同意一个观点,HR 推荐的(尤其还是推荐给不懂行的校招生)组往往是个坑组。

@documentzhangx66
我作为一个 ex-amazonian 有评价的权力了吧

C 跟 Java 两个应用场景完全不一致的语言其实根本没什么好比较的,语言只是工具,重要的还是看做什么,一个组不会先选语言再开始做东西,而是先根据 project scope 来确定需要用什么语言 /工具来完成目标。另外就我个人观察,无论是我周围的组还是我面试时经历过的组,没有一个是 C 相关的。

我也不懂你说的“追求钱的时候,选 C 就没错。但如果你不在乎钱,仅仅只是喜欢轻松编程,那么选 Java ”的道理在哪,钱多钱少更取决于供求关系,以及你自己的职级,跟语言有什么关系?

“当你不缺钱,对技术又有追求时,我建议,所有主流语言,你都要熟练,然后你就没有到底选哪种语言的问题了。并且,对于高手来说,编程语言、OS 、CPU type 等等,都不是问题。”

这话说的更离谱,你知道你说的“所有主流语言,你都要熟练”是一个多大的 overhead 么?一个合理的预期是招一个人进来,他能快速的上手组里使用的语言和工具,这种学习能力才重要。除非你需要一个几乎不需要上手时间就能干活的人,问题是“熟练”在这种情况下也远远不够。

Amazon 的大部分服务都是基于 Java (包括 AWS ),这证明了至少 Java 在工程上是一门完全够用(且表现优秀)的语言。
goobai
2022-03-19 05:48:02 +08:00
建议 c,现在 java 这么卷加班找工作竞争都不小,而且 c 做驱动 or 通信一点得工资绝对比 java 工资开的高,加班也少,坐标成都根据周边同学及前同事总结!
documentzhangx66
2022-03-19 05:54:07 +08:00
@Mirage09

1.钱与语言的关系是,做 C 的人能很容易换到 Java 并且达到高级,反之则不能。原因在于两种语言的门槛不一样。所以从供求关系来说,当 C 因为供求关系收入更高时,C 语言程序员会留在 C 岗位,此时 Java 程序员很难进来。反之,C 跳 Java 也容易到 Java 高级。

2.无论“所有主流语言,你都要熟练”,这并不是 overhead ,因为我说了一个前提:不缺钱,又对技术有追求。这种情况是很容易出大佬的。对于大佬而言,语言真不是问题。

3.Java 在大部分业务上,完全够用,注意我说的是业务。但从工程角度来讲,亚马逊的交换机、路由器、防火墙等网络设备,甚至服务器网卡,算不算工程?你和他们说这些设备用 Java 试试?搞软件的千万别忘了这些东西,他们也是计算机系统的一个重要组成部分。
Mirage09
2022-03-19 06:27:23 +08:00
@documentzhangx66
1. lol 至少在湾区 /西雅图你想象的 1 完全不成立,钱多钱少只看组的 budget 和你的 level ,写 C 不是劣势更不是优势,而且大厂里需要 C 的组相对来说真的少
2. 语言不是问题不代表需要熟练各种语言...我都说了,需要的是当你有一个新的需求的时候,能快速上手新语言和新工具
3. 鸡同鸭讲...请你仔细阅读我前面说的:“一个组不会先选语言再开始做东西,而是先根据 project scope 来确定需要用什么语言 /工具来完成目标。”——谁跟你说你在嵌入式上用 java 了?或者你来用 C 在 Lambda 上写个 message consumer ?
xsen
2022-03-19 06:28:13 +08:00
楼上很多人对 C 底层有诸多误解,
1. C 是 C ,C++是 C++
只会做 C 的,大概率是做不了 C++,主要是思想、思维的转变。C 底层,面极窄、极专,除非打算一直做这个方向(如数据库引擎),不然哪天想提桶了发现连选择都没几个
现在做 C 底层的不外乎几种,嵌入式(单片机或驱动),维护某些历史遗留产品,某些特定的产品(如数据库引擎——选择 C 是因为要考虑性能、老旧平台支持、Arm/X86/Mips 支持),是没办法的事情

2. C/C++为什么人少
是因为一直以来 C/C++机会少,工资低;原先做 C/C++的大部分都转型了,比如做手机 app 、做后端( java/go/python )诸如此类;而且大部分做 C/C++的都很苦逼(跟行业有关),少部分(如大厂内做基础设施的)好些

3. 方向选择主流的方向肯定是没错
别听某些人忽悠,选择某些细分的、几乎没需求的方向
xsen
2022-03-19 06:31:58 +08:00
@hello2090 #92 你在假定,做 C 的学 C 的都是 linus 那样的大神级别的;你以为是个做 C 的,都可以写出 linux 内核那样的来

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

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

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

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

© 2021 V2EX