有没有敢说精通 C 的?

2018-07-30 15:55:40 +08:00
 shijingshijing

现在虽然每次看到 TIOBE 的排名中 C 的排名都是很靠前的,但事实上现在发现写 C 的工程师不多。

首先,可能是应用场景有限,最多的就是 Linux 底层应用编程,写驱动,嵌入式编程,网络相关的编程;

其次,可能就投入和产出效率来说,Java,Python, C#这类语言的产出效率要比 C 高,而 C 追求的是高性能对商业公司来说有时候可以用堆硬件上集群的方式来解决。

最后,坚持写 C 且能把 C 写好的工程师不多,以前也说过公司如果真的不得不要用 C 和 C++来解决问题,那么一般都是花大价钱请个厉害的然后当几个人用,绝对不会请几个菜鸡 C 码农,效率低容易出错浪费时间浪费钱。

我还有个问题,像 C++和 Java 都有 Think in 系列,有 Effective 系列,更不谈各种设计模式的。但是 C 的书好像就 C Traps and Pit 那本书,Pointers on c 那本书,想问问还有其他进阶的读物么?特别是关于系统设计和编程技巧这方面的,设计模式什么的好像基本没有看到用 C 写的。还有就是想了解一下除了嵌入式这个行业的发展路线以外,其他写 C 的行业发展路线图和技能树都是什么?

长期写 C 的都出来冒个泡。

13665 次点击
所在节点    程序员
115 条回复
shijingshijing
2018-07-30 21:55:21 +08:00
@hyyou2010
@kwest
@GeruzoniAnsasu

都去撸高级语言去,这个也是大趋势,花相同时间和精力,肯定是要收益最大化的。

PS:最近跟一个老外交流,他们用 C 单独实现模块,然后用 Lua 当胶水连接起来,Lua 本身够精简加上 C 的性能,是个很不错的选择呢。
shijingshijing
2018-07-30 21:57:54 +08:00
@kwest 唉,我当初也是从点亮 LED 跑流水灯什么的开始做起的,各种位操作寄存器操作,各种移位操作,绕死个人。现在一般硬件模块都带 SDK 和 Application Note,把里面代码复制粘贴过来随便改改跑起来没 Bug 就 ok 了。优化?不存在的。
xwander
2018-07-30 21:59:53 +08:00
@Andiry NOVA 大佬,刚拜读完您的。。。
nikola
2018-07-30 22:27:32 +08:00
如果说每种语言都有自己的特色,不见得。但是,如果说 C 语言比较有特色,区别于其他语言,那我是承认的。C 语言本身没什么难的,但是有扎实的 C 语言功底,对于理解操作系统源码实现,对于理解计算机体系结构是很有帮助的。所以计算机专业第一门编程语言往往是 C 语言。这是程序员学习经历中基础的基础,理解 C 语言和数据结构,往后看其他语言都是万变不离其宗。
mringg
2018-07-30 22:50:37 +08:00
语法就那些,用不了三天就能精通。但是,你非得加上算法模型,内存模型,网络模型,,,,,慢慢学去吧。。。。。
qq258076067
2018-07-30 23:07:42 +08:00
借楼 有精通 C 和 swift 或者 oc 的吗。。。
luozic
2018-07-30 23:16:04 +08:00
编码,大小端,做标准应用还是专有应用。
adadada
2018-07-30 23:30:59 +08:00
KVM/Xen/QEMU 开发者路过。基本搞明白了指针的用法和链接器的工作原理,再去把 C standard 里的 undefined behavior 和 implementation-dependent behavior 过一遍,把项目用的编译器的常用扩展搞懂了,剩下的感觉就是多写和多看别人写了。感觉学什么语言都是类似的套路吧,只是 C 比许多语言都要小得多,应该能够更快的精通,吧
darkcode
2018-07-30 23:48:35 +08:00
@dtgio 有,精通 C 还是能训练出来的,精通 C++就是无底洞
lzhCoooder
2018-07-30 23:49:14 +08:00
我也算 C 爱好者,然而迫于生存压力现在在写 C++(#捂脸)

C 语法特性少很容易学,但是真的很难用,没轮子先不说,各种 UB 满天飞,到处是你想不到的坑,不懂汇编寸步难行,和操作系统之间强结合必须懂操作系统吧,没其他高级语言自带的数据结构,经常面临手撸的困境,C 想搞点事情真的很难啊....

关于未来前景,应该说非常悲观了,我应该说非常喜欢 C 的简单与直接,但是还是只能靠 C++为生,除了嵌入式 C 没什么应用场景,不合格程序员太多,根本写不了 C,让不合格的程序员写 C 真的会是一场灾难吧...
stevenbipt
2018-07-31 00:17:06 +08:00
当初只有山寨机的年代,联发科处理器不支持 C++,只支持 c 语言,然后大佬们都需要把用 java 写的游戏改写成 c 语言的,OOP 什么的都是小意思,现在支持 C++了估计也没人愿意去这样做了
frqk
2018-07-31 00:46:59 +08:00
langjiyuan
2018-07-31 01:00:14 +08:00
写 c 的路过,项目上目前还是纯 c 语言,还不到 c99,一直有很大的历史包袱。新的产品线开发时,直接定了换到 java 或 python,争取上 docker,旧平台因为内存和 cpu 限制只能保持纯 c 的维护,恩我就是那个被分配到主业维护的。。。。
产出上 c 与 java 和 python 差的不是一点,相同的业务需求,维护 c 的那套需要花 1 个星期+2 个人力,用 python 写 3 天 1 个人。。。
个人感觉 c 在应用层的使用会越来越少,内核和驱动级别另说,用 c 就是硬件跟不上,现在随便都 64 位 arm,跑个 java 跟玩似的。




其次,可能就投入和产出效率来说,Java,Python, C#这类语言的产出效率要比 C 高,而 C 追求的是高性能对商业公司来说有时候可以用堆硬件上集群的方式来解决。

最后,坚持写 C 且能把 C 写好的工程师不多,以前也说过公司如果真的不得不要用 C 和 C++来解决问题,那么一般都是花大价钱请个厉害的然后当几个人用,绝对不会请几个菜鸡 C 码农,效率低容易出错浪费时间浪费钱。
ryd994
2018-07-31 01:01:26 +08:00
敢啊,反正吹牛又不用上税,不就是说而已嘛,不要给别人听到就好
@frqk 生命可贵…………
esw
2018-07-31 01:07:07 +08:00
懂得计算机工作原理才能写好 c 把
ericgui
2018-07-31 01:09:47 +08:00
这也是我学了 C 语言 2 次,然后都放弃了。日常工作用不到。。。。。。。。

刷 LeetCode 也是用 JavaScript
langjiyuan
2018-07-31 01:20:17 +08:00
上一条。失误。。没写完。。。继续。。。
c 的开源库和单元测试是真的无解,各种轮子大部分情况下需要自己调很久,或者干脆自己写。。单元测试废了好大劲也没能在组内推广,最后在编码阶段只能停留在用 python 脚本的功能测试上,私以为快速的单元测试是 c 最麻烦的地方。一个指针的移位,最后表达的结果完全不同。

至于 c 语言的进阶,,因为指针疯狂自由的(我用的是疯狂),即使参照同一详设,组内编写的程序,详细到同一函数的实现,中间的逻辑细节完全不同。未排除未知 bug,最后逼的组内 c 语言规范补全各类细节,至今还在补充当中。也是因为指针,各类的设计模式等等,都可以在 c 上实现,不过成本是很高,相对其他语言。

c 的职业发展路径,嵌入式中驱动 /linux 内核至少暂时不会出现很多变得,纯单片机,现在 linux 满天飞,个人了解用的是越来越少了。linux 应用层,目前公司内 c 的使用也在减少。逐步被 java 替换了,测试用 python。目前个人已经在切换到 java 和 python 上来了,因为前(钱)景。
zaneenaz
2018-07-31 01:23:44 +08:00
每次写到指针时候都会 segment fault。精通是不存在的。
coldear
2018-07-31 04:22:15 +08:00
C 语言本身算是简单的语言,但就是因为太简单,用起来不方便,难度来自于你要造的那些轮子
ihackevin
2018-07-31 08:36:03 +08:00
真看不起你们这些程序员,一个字母讨论 80 楼,我精通 a-z

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

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

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

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

© 2021 V2EX