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

C 语言底层开发怎么样?

  •  1
     
  •   mikewang ·
    MikeWang000000 · 2022-03-18 13:18:23 +08:00 · 11825 次点击
    这是一个创建于 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  
    liujavamail
        1
    liujavamail  
       2022-03-18 13:22:57 +08:00
    选 java
    villivateur
        2
    villivateur  
       2022-03-18 13:41:49 +08:00 via Android
    如果计算机基础扎实,而且去大厂的话,所有语言都是一样的,选工资高的就行。
    ke1e
        3
    ke1e  
       2022-03-18 13:44:18 +08:00   ❤️ 2
    选 C ,天花板高
    feather12315
        4
    feather12315  
       2022-03-18 13:46:36 +08:00 via Android
    看好芯片行业的话,c 是不错的选择。
    freeup
        5
    freeup  
       2022-03-18 13:57:12 +08:00   ❤️ 2
    果断 C 你这情况明显是知道你不会 还给你时间在工作中边学边用的,遇到不懂得还有大厂大佬可以解惑,带薪培训,多爽
    lakehylia
        6
    lakehylia  
       2022-03-18 13:57:22 +08:00
    选钱多的,语言不重要,语言就是工具。
    yehoshua
        7
    yehoshua  
       2022-03-18 13:59:45 +08:00 via Android
    C 比较底层,不过很多人看不上。就业上肯定没其他几个热门。不过如果底子好能学好上限可能会高一些。
    mikewang
        8
    mikewang  
    OP
       2022-03-18 14:56:06 +08:00
    @villivateur @lakehylia 目前校招签的开发岗工资一致的,不知道以后怎样哈哈

    @freeup 是的,我就是考虑的这个有点心动,现学现用,涨经验。就是想现学会不会压力有点大(没工作过不懂)

    @yehoshua 从校招信息看,C 确实没有 Java 热门,而且感觉 C 的下限要求也比 Java 高,得好好学
    tool2d
        9
    tool2d  
       2022-03-18 14:56:53 +08:00
    刚毕业在大公司学一年 java ,同事都是高手,技术可以有质的飞跃。

    而学一年 C ,还要求看汇编,就算有大佬,你会发现一年都是在打基础,陷入到无限造轮子的循环。

    C 的回报周期实在是太长了,除非真的热爱编程,否则多留点时间陪伴家人和女朋友吧。
    yzbythesea
        10
    yzbythesea  
       2022-03-18 15:02:02 +08:00
    还是看方向,比如云计算高性能组件很多都是 C/Cpp ,也吃香。
    tcdh
        11
    tcdh  
       2022-03-18 15:03:07 +08:00 via Android
    哪个方向的底层?另外汇编和 C 编译起来的那一套 build system 都是学习成本高并且用的地方不多,我觉得挺局限的。
    zzzkkk
        12
    zzzkkk  
       2022-03-18 15:03:55 +08:00
    C 找 bug fix bug 太累 更大几率颈椎病 而且也更严重
    freeup
        13
    freeup  
       2022-03-18 15:17:41 +08:00
    @mikewang 没问题的 既然都说你底子好 那就要相信自己 趁年轻多学点 顶多累点 多学点绝对没坏处
    libook
        14
    libook  
       2022-03-18 15:24:39 +08:00
    有人带的话,我也想选 C……

    C 相关的人才相对比较少,但相关人才需求一直都有,后面还可以考虑同时用 Rust 。
    Java 相关的人才比较多,竞争比较激烈一些。
    yehoshua
        15
    yehoshua  
       2022-03-18 15:28:12 +08:00 via Android
    @mikewang 年轻底子好是可以学 C 的,这方面人才学出来就很厉害,学不出来嘛就…而且学这个数学要好
    stephenyin
        16
    stephenyin  
       2022-03-18 15:31:01 +08:00
    Java 又啰嗦又卷; C 人狠话不多;
    aerzha
        17
    aerzha  
       2022-03-18 15:31:13 +08:00
    推荐 C ,没那么卷
    Goat121
        18
    Goat121  
       2022-03-18 15:57:52 +08:00   ❤️ 2
    语言其实不重要,随着工龄增长及跳槽,大概率会用过几门语言。
    关键看你这个偏底层是哪个底层,看具体的应用方向。

    比如上面老哥说的云计算组件,哪家大厂不做?
    需求市场有了,那他们是招一个写底层组件的容易,还是招一个 java 写业务 crud 的容易?哪个开的工资高呢。

    再比如嵌入式,不能说没市场,但都是各自为战。拿到甲方订单的大概率是当地关系户,国企下属,大学教授之类。
    开发上也缺乏统一标准,入坑了跳槽也难,大概率会把青春花在调试各种板子上。

    直接取决你的收入的是供需,是你的工作可被替代的难易度。
    记住这个再去分析,相信会让你更清晰一点
    Cloutain
        19
    Cloutain  
       2022-03-18 16:15:06 +08:00
    还行。。。没你想得那么好
    ruogu
        20
    ruogu  
       2022-03-18 16:18:09 +08:00
    明显选 c 啊,现在 java 都烂大街了,卷的不行。现在很多好的岗位要求都是 c 的
    tool2d
        21
    tool2d  
       2022-03-18 16:25:07 +08:00
    @ruogu C 就是造轮子,用 JAVA 才是项目实战。

    从头造轮子打基础,经验都是 5 年起步的。假设一年后楼主想换公司,都不一定有人愿意要。

    你愿意要一个什么项目都没经历过的轮子哥吗?
    BrettD
        22
    BrettD  
       2022-03-18 16:26:58 +08:00
    Java 我不了解,玩 C/C++的话以后可以走嵌入式开发、驱动开发、操作系统开发、无人驾驶汽车、高性能计算、金融高频交易、音视频编码解码、工业软件开发这些领域,不一定去搞互联网
    Seanfuck
        23
    Seanfuck  
       2022-03-18 16:30:48 +08:00
    选 C ,35 退休的概率要低些吧,感觉。。
    mikewang
        24
    mikewang  
    OP
       2022-03-18 16:53:26 +08:00
    @tcdh 是自研数据库相关的开发。

    @zzzkkk 从目前经历看来,对 C 的 debug 确实没有其他语言直观,也有可能是我经验不足

    @freeup 哈哈感谢鼓励

    @yehoshua 感谢鼓励

    @Goat121 受教了,感谢

    @BrettD C/C++实用性确实很强
    qaweqa
        25
    qaweqa  
       2022-03-18 17:02:14 +08:00
    C 和 C++不是一回事,不要觉得写 C 就可以写 C++,反过来也是一样。
    sampeng
        26
    sampeng  
       2022-03-18 18:16:20 +08:00
    数据库相关的开发?
    毫无疑问选这个。。。为什么?因为 java 你一辈子可能都用不上高级数据结构。在数据库层面就完全不一样了
    ch2
        27
    ch2  
       2022-03-18 18:58:33 +08:00
    纯 C 慎入,毕设用了一个 5W 行纯 C 的开源项目代码
    说是底层但是翻来覆去都是查 unistd 的 api
    其实这个项目不能用 Go 代替的部分已经很少了
    开发效率差的非常多
    hello2090
        28
    hello2090  
       2022-03-18 19:40:55 +08:00   ❤️ 1
    @mikewang 这,给你一个师傅带薪教你就值得你去了?那来三个师傅手把手教你扫地你去吗?编程语言从来不是哪个难哪个工资高,哪个需求大哪个工资高啊。那些选 C 的都是嫌 Java 卷吧,卷还不是因为赚的多么。。

    我当然不是语言论者,我自己做了 C++10 多年,现在做 Java ,我也百分百肯定大厂基本不挑语言,我做 C++ 的时候也面试过 FB, Amazon 。 但好歹学门现代化的语言吧。C 可是连类都没有的,所有的变量定义都得放在函数开头的啊,这有啥好学的。。
    hello2090
        29
    hello2090  
       2022-03-18 19:43:44 +08:00   ❤️ 1
    我的妈呀,还学 C 要数学好。。。C 要高考数学 140 ,C++要 135 ,Java 125 ,Python 100 是不是?
    hello2090
        30
    hello2090  
       2022-03-18 19:45:32 +08:00
    随着工龄的增长,大部分会用到多门语言这是对的。但我怕对做 C 的,最多也就再接触下汇编吧。。。
    janus77
        31
    janus77  
       2022-03-18 19:49:21 +08:00
    选 java ,钱多。
    什么 C/C++永不失业都是虚的,你前期赚的少,不失业又有啥用
    而且选 java 的同时也不是不可以兼修,后期再转也没事
    duke807
        32
    duke807  
       2022-03-18 19:54:35 +08:00
    不懂 C 也就不懂計算機底層,使用高級語言想寫出高效代碼也離不開 C 基礎。
    Samuelcc
        33
    Samuelcc  
       2022-03-18 19:57:35 +08:00 via Android
    我的话选 c ,能对计算机底层有更清晰的理解,以后转其他语言也很容易掌握,庖丁解牛。
    dcsuibian
        34
    dcsuibian  
       2022-03-18 19:58:39 +08:00
    我选的 Java ,不过没考虑未来,只是 Java 的写法和应用方向我更偏爱一些。

    在我看来 C 语言程序开发者应该是对程序性能、体积、速度有极高要求的人。如果你是这样的话,那选 C 吧。
    hello2090
        35
    hello2090  
       2022-03-18 20:01:30 +08:00
    @duke807 用 C 的比用 Java 的多哪些底层知识?除了 malloc/free, 而且这也算不上啥底层知识吧
    levelworm
        36
    levelworm  
       2022-03-18 20:02:31 +08:00 via Android
    我擦,这是梦想中的工作,这种工作虽然数量少但是会的人也少,多好。
    hello2090
        37
    hello2090  
       2022-03-18 20:06:33 +08:00
    @levelworm 也要看收入啊
    BrettD
        38
    BrettD  
       2022-03-18 20:08:05 +08:00 via iPhone
    @hello2090 想办法增加程序 IPC ,减小分支预测失误率,减小等待 CPU 缓存时间之类的,需要对计算机架构有了解
    levelworm
        39
    levelworm  
       2022-03-18 20:08:16 +08:00 via Android
    @hello2090 他搞数据库引擎开发的,收入不会少吧我觉得。其实我觉得还是看喜不喜欢,不喜欢也不行。java 其实也可以写一些底层的东西。
    BrettD
        40
    BrettD  
       2022-03-18 20:09:06 +08:00 via iPhone
    @hello2090 收入上限不会低
    BrettD
        41
    BrettD  
       2022-03-18 20:11:31 +08:00 via iPhone
    @hello2090 内存分配,包括但不限于 malloc ,往深了钻也有好多点,怎么样减小内存分配,或者干脆静态分配,怎么样减少内存分配和释放的延迟,怎么样缓解堆内存碎片之类的
    levelworm
        42
    levelworm  
       2022-03-18 20:17:31 +08:00 via Android
    @BrettD 作为四十岁拼命爬到开发岗的老年开发,还是很羡慕现在的年轻人的
    hallDrawnel
        43
    hallDrawnel  
       2022-03-18 20:19:09 +08:00   ❤️ 10
    如果 HR 努力推荐你一个岗位,说明那个岗位招不到人,而校招岗位招不到人的原因一般都是因为坑,而不是稀缺。急缺的就直接社招了。
    hello2090
        44
    hello2090  
       2022-03-18 20:19:47 +08:00
    @BrettD 这和语言无关,和工作内容有关啊。又不是所有 C 程序员都要解决这些问题。Java 程序员也有自己的性能问题要解决。又不是要解决底层的问题就金贵,拿钱就要多是不是。
    duke807
        45
    duke807  
       2022-03-18 20:22:14 +08:00
    @hello2090

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

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

    再進一步深入底層就不是 C 了,而是 Verilog
    BrettD
        46
    BrettD  
       2022-03-18 20:23:29 +08:00 via iPhone
    @hello2090 是,和行业有关,不过我身边认识的做 C/C++的朋友多数都对这些底层的很熟,工资也都挺高的,认识的做 Java 的朋友大多数是在做微服务、后端这些业务,,对底层不太熟,工资比较标准
    duke807
        47
    duke807  
       2022-03-18 20:31:19 +08:00
    C 除了用在底層,用在頂層的也很多,譬如 Linux 海量的開源程序使用 Emscripten 編譯成 WASM 在瀏覽器前端運行。
    hello2090
        48
    hello2090  
       2022-03-18 20:31:46 +08:00
    @duke807 所以按照越底层理解越深越牛逼的理论,你为什么不建议楼主去做 Verilog 呢?你在 STM32 MCU 上实现一个调度器 比 Java 程序员实现 JVM 进程线程调度高级一些吗?
    hello2090
        49
    hello2090  
       2022-03-18 20:36:03 +08:00
    @BrettD 这很容易解释啊,既然这本身不是语言带来的差别,C 在底层开发上用的用的更多,自然 C/C++程序员熟的很。你不能要求做后端微服务的程序员也要和 C/C++一样熟啊,Java 程序员做的上层,业务,有他们自己的问题要解决。你总不能以熟不熟悉“增加程序 IPC ,减小分支预测失误率,减小等待 CPU 缓存时间” 来作为 Java 程序员评判标准吧。
    BrettD
        50
    BrettD  
       2022-03-18 20:37:42 +08:00 via iPhone
    BrettD
        51
    BrettD  
       2022-03-18 20:37:59 +08:00 via iPhone
    @hello2090 只是在回复 35 楼而已
    Kasumi20
        52
    Kasumi20  
       2022-03-18 20:41:50 +08:00
    《编译原理》课写汇编干什么? 汇编还需要编译? 直接翻译成机器码了
    hello2090
        53
    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
        54
    yulon  
       2022-03-18 20:56:29 +08:00
    汇编伪代码没毛病其实,因为每个平台都不同,不可能给你每个平台都学吧,最终还是要看平台手册。
    BrettD
        55
    BrettD  
       2022-03-18 20:58:16 +08:00
    @hello2090 我是从我们公司招人角度说的,Java 、Go 、C#组的工资是比 C++组少的,有同事从 C#组转到 C++组,工资涨了不少,但是反过来转估计就要降薪了,或者要拿到 C++组的 IC 的工资可能要在那边转到管理线。只是想到啥就说啥,我这只是一个样本而已,没有任何代表性。
    runninghipp
        56
    runninghipp  
       2022-03-18 21:05:38 +08:00
    java 吧,C 的受众太少了
    tianshilei1992
        57
    tianshilei1992  
       2022-03-18 21:07:58 +08:00
    C/C++ 之所以看起来需求大实际上是因为搞的人少…之所以搞的人少是因为门槛高…之所以门槛高是因为相关的东西太多。想搞一个 library 又不能简单的 npm/pip install 或者直接搞个 jar 包就用起来,不同的 GCC 版本这玩意儿就能搞死大部分人。我觉得大部分计算机从业者更多的只是把它作为一个目前工资高的职业,而不是真正的感兴趣,所以自然是能够快速入手找到一份相对不错的工作更重要了。
    duke807
        58
    duke807  
       2022-03-18 21:13:10 +08:00
    @hello2090
    100% 的程序員只要願意,學 java 不會有什麼問題,但是能掌握 c 的程序員估計不到 10%,這跟一個人的智商和悟性有關係。(掌握 c 是指能找到各種莫明其妙的 bug 的根本原因,譬如嵌入式系統加一行 printf 原本問題就消失了。)

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

    op 如果屬於這 10%,那麼他去搞 java 就浪費了

    我不會 java ,也懶得學,高階語言我選擇 python ,可以做後端、視覺和學習算法、芯片研發( cocotb 仿真)等
    cocong
        62
    cocong  
       2022-03-18 21:26:39 +08:00
    选什么选,我两个都要。
    qiufengshe
        63
    qiufengshe  
       2022-03-18 21:28:09 +08:00
    学 C/C++是没问题的,能了解系统底层的东西,底层的东西变化慢,JVM/CLR 都是 C/C++写的,还有少部分汇编,不过国内因为互联网的兴起,做基础软件 /基础设施太少了,这也就造成国内 C/C++岗位比 Java 少太多了
    shijingshijing
        64
    shijingshijing  
       2022-03-18 21:34:26 +08:00   ❤️ 8
    C/C++最大的问题是非常的 Domain Specific ,那个 HR 不是告诉你了么,你面向的是数据库,这个 Domain 其实还好,因为不断的有新类型的数据库涌现,分布式,KV ,基于内存的等等百花齐放,也算是个不错的坑。

    有些 C/C++的坑,那真是一入此门深似海,从此高薪是路人。我知道的例子,有老哥深钻基于 MCU 的 RT-Linux ,就是想方设法让那种不带 MMU 的处理器支持类 Linux 的操作系统,各种魔改各种奇技淫巧,片内寄存器+片上内存玩出花来了。结果呢,ARM 普及+半导体工艺进步,让原来节省的那些成本几乎没啥意义了,反而由于软件高度复杂、门槛又高用的人越来越少了。

    还有一位同学毕业之后就去了通信领域某头牌外企,起手玩的就是高大上的 VxWorks 系统+PowerPC 组合,这种配置在 10-20 年前绝对是底层里面的高富帅,结果呢,现在通信行业全部改成 x86+Linux 了,以前学得那一套基本上没有人用了,成本太高,客户越来越少,收入也一直原地踏步,最后痛下决心重头再来,拿出考研时候的拼劲,结果也算不错,跑去 HW 做云计算基础设施了。

    所以,这种偏底层最大的问题是跟面向的领域捆绑太深了,一定要注意找准一个好点的方向,不然回头太难。
    noroot
        65
    noroot  
       2022-03-18 21:48:22 +08:00
    作为一个嵌入式工程师告诉你,Java 就业面更广,国内做基础设施的公司不多。
    documentzhangx66
        66
    documentzhangx66  
       2022-03-18 21:53:06 +08:00
    @hello2090

    并不是说 C 一定比 Java 高人一等,而是 C 学习门槛高、需要知道的知识更多、需要踩得坑更多、需要做的实验更多。

    Java 写很多东西可以直接无脑 List ,因为 Java 的公认主要目的是实现功能;

    而 C 的公认主要目的是追求性能与性价比,需要考虑硬件结构、各设备情况与性能,写的时候还要时刻注意数据结构与算法等等。

    换句话来说,当你追求钱的时候,选 C 就没错。但如果你不在乎钱,仅仅只是喜欢轻松编程,那么选 Java ,同时不需要在乎 C 的那些人怎么看待你。

    但是,当你不缺钱,对技术又有追求时,我建议,所有主流语言,你都要熟练,然后你就没有到底选哪种语言的问题了。并且,对于高手来说,编程语言、OS 、CPU type 等等,都不是问题。
    documentzhangx66
        67
    documentzhangx66  
       2022-03-18 21:54:15 +08:00
    选 C ,更能让你成长。

    但对于就业来说,虽然 C/C++因为门槛高而造成工资高,但岗位却比 Java 少得多,所以不一定比 Java 更好就业。
    Suddoo
        68
    Suddoo  
       2022-03-18 22:02:59 +08:00
    工资其实主要是由市场供需决定的,技术什么的,另一种形式的 crud 而已,市场上,Java 的需求量明显比 C 大多了
    hello2090
        69
    hello2090  
       2022-03-18 22:09:21 +08:00
    @documentzhangx66 C 的目的当然不是追求性能,C 最开始的目的当然是用来编程解决现实的问题啊,而不仅仅是需要高性能的问题,C 现在只能在追求高性能的领域存活是因为别的领域有更有效更高效更划算的编程语言比如 Java 啊

    写 C 也不一定就需要接触到算法,写 Java 也不一定就不用算法。ffmpeg 就是 C 写的,没见过有 Set, Map, 二叉树图的,连链表有没有用上我都不确信。为啥 C 需要的知识更多?做 web 的光数据库的选择就有几十种呢,这也是知识也要踩坑啊。

    语言是服务于工作的,C 要考虑硬件结构,Java 也要性能调优啊。C 也有不用考虑硬件结构,数据结构公司早就实现好的,Java 也有只要 CRUD ,能跑就行的。

    或者这么说,C 不是门槛高,门槛有啥高的,连个类都没有,几天不就看完了,是 C 要做好的门槛高(这也只是我的假设)。那就像我上面说的,这么高的门槛 10%才能做好,那去做 Java 不是赚的更多?
    hello2090
        70
    hello2090  
       2022-03-18 22:10:47 +08:00
    @Suddoo 是的,我一点不觉得工资由技术难度决定,我觉得由供需决定。
    hello2090
        71
    hello2090  
       2022-03-18 22:14:39 +08:00
    @documentzhangx66 而且也不能把 C C++放在一起吧,我认识做了 10 多年 C 的,一点也不会 C++。做 C 的工资很高吗?上限比 Java 高?还是高薪比例比 Java 高?
    feather12315
        72
    feather12315  
       2022-03-18 22:20:10 +08:00 via Android
    @hello2090 #35
    涉及 arch ,要读 CPU programming guide ,除了汇编外还要懂 CPU 的体系;还有 OS ,看具体的方向,做 BSP 、驱动的要懂 ACPI 、device tree 、PCIe 吧;还要懂编译系统,GCC 之类的几角旮旯里面的编译选项辅助 debug ,还有各类 hack 的 debug 技巧; POSIX 编程更要懂;做文件系统的话要懂 fs ,做 rtos 的话要懂调度之类的吧。这类职位叫 system engineer 。

    当然,如果只是做应用层的 c ,确实不多。
    matolv
        73
    matolv  
       2022-03-18 22:25:16 +08:00
    @hello2090 你的理解正确,工资由供需决定,现在 C 的需求侧很少了,除了驱动,操作系统,嵌入式,很少用到 C 了,自然工资也不会太高。另一方面,由于 c 在实际开发中需要长时间的经验累积,就业面又狭窄,导致选择 C 的从业人员减少,所以楼主面试公司的实际情况就是 C 岗位招不到人。即便你 C 学有所成,想跳个槽都很困难。

    国内做了好的项目和公司,基本上只有大疆是新兴 IT 公司需要用到 C 的,海康可能也有部分,他两都是做嵌入式的。大部分互联网公司的业务不需要 C 承载,至于华为肯定也有 C 的岗位,比如自动驾驶之类。

    而传统行业用 C 的主要还是工控和嵌入式,不如汽车和飞机的零部件,但工资不比互联网公司,即便大疆这样的用 C 做硬件的开发的还是不如互联网公司的工资
    hxndg
        74
    hxndg  
       2022-03-18 22:26:53 +08:00
    我就是用 C 的,原先的 tls 安全工程师,写协议 /服务器 /自动机,可以说是安全开发的。在开发的过程当中会接触到很多底层,会学到比方说 abi ,汇编,多线程的基础知识。用 C 的工作平时会接触到很多基础知识,这些知识一般都得自己去翻外国的资料,自己去看学习的过程很费劲,当然也很有趣。这些基础知识实际上正是我跳槽的时候面试官看中的。因为很多东西不管外面包装的多华丽,最后还是落到了基础上。当然如果你对底层没兴趣,那可能要多考虑下。

    然后跳槽目前做 CI/CD 发现基础知识很多都不会在日常工作用到,只会在出现问题才接触。换言之,这些基础帮我解决可能只占 5%的工作内容,但是这 5%的工作内容没有这些基础知识对其他人可能就是 20%的时间消耗。你可以看看这些需要基础知识的问题,我都记录了下来 https://hxndg.github.io/2021/01/07/%E8%AE%B0%E5%BD%95%E4%B8%80%E4%BA%9B%E9%81%87%E8%A7%81%E7%9A%84%E6%9C%89%E8%B6%A3BUG/


    我支持第一份工作接触 C 而不是 C++有一个好处就是很多 C++的问题最后都是可以用 C 的很多基础知识解决。C++为了提供一个简单的方式,把很多东西包装了。只有懂 C 才能很方便的解决问题。很多多线程的东西最后还是回到了 C 的函数上去
    tairan2006
        75
    tairan2006  
       2022-03-18 22:27:48 +08:00
    C 是偏硬件的,搞纯软不是很建议,除了内核、流媒体、游戏引擎等几个有限的方向。就算这几个方向,其实也再逐渐过渡到更高级的语言,比如 Rust 和 go 之类的。毕竟 C/C++写起来真的很累(
    magewu1223ll
        76
    magewu1223ll  
       2022-03-18 22:27:53 +08:00
    说个楼上都没说过的,音视频开发,这个也是用 c 的,也是非常偏底层的,并且没个大几年功夫根本做不出东西来,就是前期非常熬人,
    hxndg
        77
    hxndg  
       2022-03-18 22:29:36 +08:00
    @mikewang

    忘了说一点,最好不要只用 C ,最好是 C+CC+GO (如果你喜欢 java 就一块搞呗),只用 C 会导致很多现代化的东西缺失,最好是混合搞。而且
    zomco
        78
    zomco  
       2022-03-18 22:34:06 +08:00   ❤️ 1
    如果热爱编程,建议选 C/C++,否则选 Java
    railgun
        79
    railgun  
       2022-03-18 22:59:16 +08:00
    C 语言如果是做硬件的话,很容易和平台、行业绑定。导致以后的路比较窄。但是确实比较稳定,做硬件的我见过很多三十多岁的。
    Java 30 多岁的都在领导层了。
    mikewang
        80
    mikewang  
    OP
       2022-03-18 23:22:21 +08:00
    @hello2090 目前看来还行,确实大厂不挑语言,我打算两门语言一起上了。如果收入不行立马跑路哈哈

    @hallDrawnel 可能招到的人少一点吧。我问了同学,假如校招给 offer 让去写 C 去不去,他说 C 太麻烦了,不如老老实实干 Java...

    @Kasumi20 不不,当然不是说“编译”汇编,而是将高级语言翻译为汇编,然后转成机器码。我们写的是“人脑”词法语法语义分析后的汇编伪代码。可能我说的不是很清楚哈哈

    @shijingshijing 感谢提醒,感觉现在数据库方向应该还算好,应该不算互联网吧,但是和互联网关系还是很紧密的,应该不会这么快就没落。其他方面大概就要警惕了。

    @hxndg 是这样的,听说我那儿还有 C 、Java 都干的小组(混合编程?),我想申请加入试试。
    documentzhangx66
        81
    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
        82
    fkue587  
       2022-03-18 23:35:15 +08:00
    @railgun 你这个让他怎么选 闭眼选 java 做领导 哈哈哈哈
    zhgg0
        83
    zhgg0  
       2022-03-18 23:35:42 +08:00
    有兴趣偏好就选感兴趣的。没有兴趣偏好的话,不要瞎选;语言不重要,打听清楚具体干啥的,选将来大概率好找高薪工作的方向。
    rillhu
        84
    rillhu  
       2022-03-19 00:00:18 +08:00
    C 的就业面窄啊。同时还是要看下其他的语言的
    jackmod
        85
    jackmod  
       2022-03-19 00:00:37 +08:00
    搞了两年驱动,一言难尽。现在在玩 java ,真香。
    mikewang
        86
    mikewang  
    OP
       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
        87
    doug  
       2022-03-19 03:11:10 +08:00 via Android
    看方向吧 看兴趣 兴趣第一 不然后面会很痛苦 个人感觉 关乎收入问题 看市场行情看行业 与语言无关 不是因为语言牛逼之类 工资就高 而是因为市场紧缺人才 工资才高吧 试想芯片设计人才像现在 Java 这样满天飞的社会的话 芯片设计的待遇也会低 当然 不否定芯片设计门槛确实高 毕竟流片成本极高
    希望不要有人喷我哈
    2NUT
        88
    2NUT  
       2022-03-19 03:32:03 +08:00
    别被忽悠了
    hello2090
        89
    hello2090  
       2022-03-19 03:52:35 +08:00
    疯掉了,为了捧 C 连面向对象只是概念,C 也可以实现都来了。。。我编程不用 IDE ,都是在纸上写好先的。
    hello2090
        90
    hello2090  
       2022-03-19 04:00:29 +08:00
    @documentzhangx66
    我说我以 C++面过就是因为我想告诉楼主大厂不挑语言啊,怎么变成我要踩 C++,抬 Java 呢?我做了 10 多年 C++,那我是要踩我自己喽?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Amazon 的大部分服务都是基于 Java (包括 AWS ),这证明了至少 Java 在工程上是一门完全够用(且表现优秀)的语言。
    goobai
        96
    goobai  
       2022-03-19 05:48:02 +08:00 via Android
    建议 c,现在 java 这么卷加班找工作竞争都不小,而且 c 做驱动 or 通信一点得工资绝对比 java 工资开的高,加班也少,坐标成都根据周边同学及前同事总结!
    documentzhangx66
        97
    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
        98
    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
        99
    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
        100
    xsen  
       2022-03-19 06:31:58 +08:00
    @hello2090 #92 你在假定,做 C 的学 C 的都是 linus 那样的大神级别的;你以为是个做 C 的,都可以写出 linux 内核那样的来
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:11 · PVG 04:11 · LAX 12:11 · JFK 15:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.