V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikewang
V2EX  ›  程序员

C 语言底层开发怎么样?

  •  1
     
  •   mikewang ·
    MikeWang000000 · 2022-03-18 13:18:23 +08:00 · 11827 次点击
    这是一个创建于 984 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    149 条回复    2023-02-16 02:06:22 +08:00
    1  2  
    hello2090
        101
    hello2090  
       2022-03-19 06:38:16 +08:00 via iPhone
    @xsen 你应该是回复错了,做 C 的都是高精尖,极致追求性能,追求卓越是这个帖子里某些人打造的人设,你仔细看看,我当然不同意这种说法。

    还有人说 10%的程序员才能做 C, 能做 C 的去做 Java 是浪费真是笑死我了😄
    hello2090
        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 都搞不好的
    documentzhangx66
        103
    documentzhangx66  
       2022-03-19 06:43:41 +08:00
    @Mirage09

    1.请问你能代表整个湾区 /西雅图嘛?但有消息说,日本与你说的这个情况类似,程序员与其他工种没有因门槛差异而拉开收入差距。另外你说大厂里,C 组很少,这事我在 67 楼,给楼主的回复里,也提到类似问题。

    2.你觉得不需要熟练各种语言,但我看法相反,因为我提出了一个前提:不缺钱,又对技术有追求。我觉得如果你不是这个情况,无法感同身受的话,应该思考一下为何会存在这个情况。

    3.我在 97 楼的第三点,是回应你在 95 楼的最后一段。这并不是鸡同鸭讲。你想通过亚马逊的大部分业务都用 Java ,来证明 Java 在工程上够用,我觉得你可能只是软件工程,不熟悉网络设备,自然也看不到网络设备的重要性,更别提网络设备里用哪种编程语言开发的。
    xsen
        104
    xsen  
       2022-03-19 06:43:45 +08:00
    @hello2090 #101
    1. 用来做基础设施、中间件的
    这可能是如你说的追求性能,实际上性能只是一个方面;更主要是对编译器版本、系统版本要求低;因为比如做数据库的,你是要支持几乎所有的系统(老旧系统)、不同的 CPU 架构

    2. 大多数(如嵌入式、单片机)
    这个主要是没有选择;当然,目前又个趋势是越来越多嵌入式的会用 C++、Go 或 Rust 来开发
    Mirage09
        105
    Mirage09  
       2022-03-19 06:49:58 +08:00
    @documentzhangx66
    算了算了,我跟你真的是鸡同鸭讲...
    不过当我看到“程序员与其他工种没有因门槛差异而拉开收入差距。”这句话还是笑出声了,真以为自己学个 C 就是门槛了?
    documentzhangx66
        106
    documentzhangx66  
       2022-03-19 06:57:18 +08:00
    @Mirage09

    鸡同鸭讲....你是鸡还是我是鸡?

    在除开外貌、情商、家庭背景等因素外,程序员的门槛,本来就比其他行业要高,收入高也是理所因当,不信你让前台或行政去写 C 试试?

    我说这事并不是贬低或看不起其他行业,你如果不是程序员,也不需要对号入座。

    门槛高,对应收入高,这是很正常的事情。就像你在前面提到供需关系一样,至少国内与欧美大部分地区,也是公认这个情况。

    但日本就有点奇怪,可能不在这个大部分之内,具体原因我不清楚。
    Mirage09
        107
    Mirage09  
       2022-03-19 07:05:07 +08:00
    @documentzhangx66
    “在除开外貌、情商、家庭背景等因素外,程序员的门槛,本来就比其他行业要高,收入高也是理所因当,不信你让前台或行政去写 C 试试?”

    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈笑死我了
    yzbythesea
        108
    yzbythesea  
       2022-03-19 07:43:25 +08:00
    @Mirage09

    赞同,语言只是一门工具,重点还是看你做的方向。天天用 C 给 Linux 打补丁,也成长不起来啊。
    jackchenly
        109
    jackchenly  
       2022-03-19 08:49:44 +08:00 via iPad
    c 那点东西太简单了,而且不好找工作,工资低。
    一个过来人的感受。
    teenagerold
        110
    teenagerold  
       2022-03-19 09:27:02 +08:00
    无脑 Java 。互联网,银行,小企业办公系统,那家不用 Java? 市场需求量大,后面跳槽要容易的多。相比较来看,C 的坑位少很多,而且上面的老哥也说了,C 和所做的方向是强绑定的,导致做嵌入的积累在音视频方向根本用不上,选择面更少了。
    liufish
        111
    liufish  
       2022-03-19 09:35:29 +08:00
    这个大厂是 HW 吧
    northernlights0
        112
    northernlights0  
       2022-03-19 10:16:46 +08:00
    感觉身边比较厉害的人,能去造轮子尽量去造轮子。成长周期长,跳槽难倒也是真的。
    gowk
        113
    gowk  
       2022-03-19 10:49:36 +08:00
    赞同 64 楼
    secondwtq
        114
    secondwtq  
       2022-03-19 11:03:53 +08:00
    @Kasumi20 不要小看汇编器 ... 汇编“翻译”成机器码不是那么“直接”的过程 ... 更别说楼主还没说他写的是啥汇编
    seakingii
        115
    seakingii  
       2022-03-19 11:37:04 +08:00
    选 C,打好基础后转学 RUST
    hu8245
        116
    hu8245  
       2022-03-19 11:39:06 +08:00
    C/C++ 没有那么卷,面试的时候不用背太多被太多八股文,也不用说 HashMAP 的原理。
    abutter
        117
    abutter  
       2022-03-19 11:46:43 +08:00
    C 语言本身没有那么复杂,是因为应用的场合比较复杂。

    底层软件开发要想做的那么回事,少不了对操作系统和编译链接的知识,如果做驱动还要了解硬件接口、网络协议等地等,debug 的话还需要了解许多的工具和知识,做优化就需要知道 CPU 、cache 和一些算法。

    这是门槛高、积累周期长的原因。

    无论什么语言,甚至什么职业都是有市场规律的。如果需要的人数一定,那么候选人越少,价值就越高。
    nevin47
        118
    nevin47  
       2022-03-19 11:47:03 +08:00   ❤️ 1
    过来人的经验之谈:

    做 C 的话,务必确认是写业务软件还是写系统软件

    如果是业务软件的话,除非写高性能中间件,要不然基础的嵌入式开发没啥意思的

    如果是做系统软件的话,尽量避开写驱动这种调参工程师的工作,能深入芯片、操作系统甚至新的体系结构是最好的

    C 语言作为主力语言,做操作系统和体系结构研究,职业寿命和职业回报真的巨长无比,我最近两年和我司内部的一些系统专家打交道,有的人真的是几十年沉浸在这个领域深耕,完全没有任何职业寿命的危机感,基本上只有自己主动跳去新的领域,没有说被企业给优化掉的说法……
    hello2090
        119
    hello2090  
       2022-03-19 12:11:19 +08:00 via iPhone
    @hu8245 一样的吧,我 10 年前面试 autodesk 问的就是 effective C++ 里的那些问题。只不过 Java 还需要知道框架,数据库,各种中间件。
    yousabuk
        120
    yousabuk  
       2022-03-19 12:15:25 +08:00 via iPhone
    选 C ,其乐无穷
    hello2090
        121
    hello2090  
       2022-03-19 12:16:03 +08:00 via iPhone
    @hu8245 而且 hashmap 是基本的数据结构吧,既然 C/C++的目标是深耕底层的专家,算法导论肯定会看过,hashmap 书里就有哇😁
    xylophone21
        122
    xylophone21  
       2022-03-19 12:22:42 +08:00
    C 的门槛确实高,奈何做的方向几乎不怎么赚钱,而且需求少,所有收入也一般
    James369
        123
    James369  
       2022-03-19 12:30:52 +08:00
    如果说语言是一座雄伟的宫殿,那么 C/C++就是宫殿的根基。
    如果说语言是一顶皇冠,那么 C/C++就是皇冠上的明珠。
    如果说语言是满天繁心,那么 C/C++是那一颗闪亮的恒星。
    如果说语言只是工具,那么 C/C++就是制造工具的工具。
    tousfun
        124
    tousfun  
       2022-03-19 18:35:21 +08:00 via iPhone
    楼主是去的字节吗?
    tousfun
        125
    tousfun  
       2022-03-19 18:40:49 +08:00 via iPhone
    能不能➕vx 交流下,我目前只会 go 也想做数据库开发的工作
    bugfan
        126
    bugfan  
       2022-03-19 20:52:57 +08:00
    @hello2090 😄老哥 666 ,每次说的都是精髓呀
    bugfan
        127
    bugfan  
       2022-03-19 20:57:38 +08:00
    @hello2090 😄 突然想起来,上大学时候,编程老师说,建议你们在纸上写程序,,,
    mrzhu
        128
    mrzhu  
       2022-03-19 21:24:45 +08:00
    @nevin47 请问一下“操作系统和体系结构研究”具体是什么工作和方向?
    mmdsun
        129
    mmdsun  
       2022-03-19 22:57:55 +08:00 via iPhone
    如果不想卷的话,选 C 。现在 Java 是卷王语言
    nevin47
        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 语言垒出来的教堂
    ch2
        131
    ch2  
       2022-03-19 23:53:33 +08:00
    @Kasumi20 #52 一个例子:机器码不支持 32 位立即数的,汇编就能支持。汇编也有语法糖的,只是一行汇编翻译成了另外几个指令的组合,编译原理编译到汇编就够了,没必要直接到机器码
    ch2
        132
    ch2  
       2022-03-20 00:12:35 +08:00
    @nevin47 #130 真正使得 Control Group 有实际应用场景,还是得 Go 写的 Docker 跟 K8s 出马。C 语音写的沧海遗珠多了去了,要是没有能用得上的伯乐,就只是个普通的砖头。教堂再宏伟,跟你能成为哪块砖哪块瓦是两回事。
    fatigue
        133
    fatigue  
       2022-03-20 00:20:08 +08:00 via iPhone
    赚不赚钱是和业务相关的,和语言无关啊,铁汁们,看你们争论看的我脑瓜子疼
    mikewang
        134
    mikewang  
    OP
       2022-03-20 00:28:47 +08:00
    @919615766 我不在字节,倒是有几个认识的同学在字节实习。交流的话可以 base64 留下您的 vx:)
    tousfun
        135
    tousfun  
       2022-03-20 04:24:35 +08:00 via iPhone
    @mikewang UGh1b2h1YQ== 非常感谢
    levelworm
        136
    levelworm  
       2022-03-20 08:40:04 +08:00
    @nevin47 (118 楼)

    多谢分享。这种“能深入芯片、操作系统甚至新的体系结构”,我估计指的是类似给新的体系结构移植基础软件这种?
    m0yBPjyX3475syS4
        137
    m0yBPjyX3475syS4  
       2022-03-20 09:49:46 +08:00
    我全都要.jpg
    lechain
        138
    lechain  
       2022-03-20 10:43:17 +08:00
    C 是最简单也是最复杂的高级语言:)
    作为一个 8+年的 C 语言选手,我个人建议是看 OP 你自己的想法走,
    选 C 的工作,可以学到很多底层基础的东西,例如操作系统原理,计算机组成结构等,这个方向可以让你在编程方面更好的掌握细节和原理。
    反之如果选 java 的话,可以学的东西就是软件工程方向了,如果构建稳定的大型应用程序系统,如何保证高可用高并发等等,这个方向可以让你更好的掌握上层设计以及大型软件的设计架构,和 C 不是同一个方向的。

    至于楼上的各种 C 门槛高,C 难之类的论调,可能是因为很多人没法真正沉下心去学习吧,讲道理 Java 在某种方面来说门槛也很高,就单拿一个 JVM 来说,有多少人能说自己精通的。

    只能说两个语言各有优劣,但没有本质的高低之分,不能简单的捧一踩一,那样也太反智了。
    就目前这个世界上的编程来看,Java 仍然处理上层大型应用软件系统的统治地位,而 C 也是一样的情况,同样处于底层基础开发的统治地位
    juzipeek
        139
    juzipeek  
       2022-03-20 11:04:53 +08:00
    别选 C, 岗位太少
    railgun
        140
    railgun  
       2022-03-20 11:25:37 +08:00
    @fkue587 我就是这个意思→_→
    frank1256
        141
    frank1256  
       2022-03-20 13:01:43 +08:00
    java 是很卷,但是你已经有大厂的资格了,你不会卷了。感觉到卷的是我这种普通公司的 javaer
    FrankHB
        142
    FrankHB  
       2022-03-20 17:06:09 +08:00
    做内核和驱动可以考虑。
    其它大部分都基本不用考虑(数据库之类,不是 C++就是 Rust ),基本不是过气选型说明 leader 技术栈和视野有问题,或者就是擦屁股。
    w2exzz
        143
    w2exzz  
       2022-03-20 17:33:40 +08:00
    写两年 C 以后,你的 Java 水平会更好……
    写 C 语言会让你更懂计算机
    mosfet
        144
    mosfet  
       2022-03-21 09:37:58 +08:00
    除非是“核心科技”组
    不然还是 JAVA 吧
    如果海康也算大厂的话,会拉你去写嵌入式,就亏大了
    GalaDOS
        145
    GalaDOS  
       2022-03-21 11:51:39 +08:00
    最好问清楚具体用 C 做什么,写 C 可以很高大上也可以很螺丝钉。我身边写 C/C++的(包括我自己),大多是读书时就在做相关领域研究的,虽然工作挺安稳,但是也如 64 楼所说,选择变少了,挺难回头的
    poly000
        146
    poly000  
       2022-07-25 05:13:02 +08:00
    @duke807 抽象支持好怎么就能等同于好学易上手了…… 设计架构也是重要的能力
    enchilada2020
        147
    enchilada2020  
       2023-02-16 01:19:44 +08:00
    挖个坟问一下,楼主最终选了什么,回过头来看有啥心得体会?
    mikewang
        148
    mikewang  
    OP
       2023-02-16 01:59:11 +08:00
    公司 C 组主要是负责开发 OS 相关库的,楼主最终没选 C ,进了 C++的组。不过 C 和 C++本来也是相通的。
    现在在从事自研数据库的开发,感受和 v 友们的差不多吧。

    C/C++程序员往往为特定的某个领域开发,虽然都是 C++,不同领域之间的差异比语言本身要大得多。因此进了这行,相当于绑定了,时间越久回头越难。就业面肯定是比不过 Java 的。
    C/C++偏向底层还有一点就是各个公司都造自己的轮子,有自己写的库(像日志打印,加密套件,进程间交互,甚至是字符串类型)。使用上遇到什么问题问同事比问百度或 Google 靠谱。
    另外就是调试比 Java 困难。如果写出了问题,出现了非法读写,内存泄漏,在一个庞大的系统中定位会比较头疼。
    暂且想到了这么多 @enchilada2020
    mikewang
        149
    mikewang  
    OP
       2023-02-16 02:06:22 +08:00
    当然优势也是有的,C++ 平均薪资要比 Java 稍高一些,也能促进对计算机深入理解,将来成为真正的大佬。我想 C 语言也是一样的。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1139 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:49 · PVG 06:49 · LAX 14:49 · JFK 17:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.