有没有敢说精通 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 条回复
zjsxwc
2018-07-30 19:14:02 +08:00
只要心够大有什么不敢的
Gothack
2018-07-30 19:14:16 +08:00
语言只是个工具,难得是你用这工具能干出什么活
bfdh
2018-07-30 19:27:29 +08:00
长期 && 只会用 C 的 表示不知道该说点什么
fuyufjh
2018-07-30 19:51:06 +08:00
C 只比汇编高级那么一点点,精通 C 比精通 Python、Java 容易的多。然而,对于能用得到 C 的地方,编程语言可能是最简单的部分。
prolic
2018-07-30 19:52:54 +08:00
c 的语法,关键字也不多,不复杂,说精通也没什么问题吧?上面说的东西都不是语言层面的知识点
crab
2018-07-30 19:54:33 +08:00
丹尼斯·里奇:我
肯·汤普逊:还有我
hyyou2010
2018-07-30 20:06:34 +08:00
要说 c 语言的编程技巧,我看得最头晕目眩的是 linux 内核里面各种链表 /结构 /锁
但是,除非工作需要,否则不推荐去钻研,因为高级语言可以轻松搞定

计算机硬件+CPU+汇编+C,这是一坨,关注的是物理硬件是怎样运行的,C 只是汇编的外衣,通过学 C 和汇编我们知道物理硬件是怎样运行起来的,这就够了

C++,Java 或其他任何高级语言,这是一坨,关注的是编程技巧与数据处理,关注业务的完成,这才是普通程序员要多花时间的地方
NSAtools
2018-07-30 20:12:40 +08:00
刚毕业的时候敢说
tan90
2018-07-30 20:13:39 +08:00
自学 C 语言,也是编程的入门语言,自娱自乐写点小程序,面向百度编程,简历上应该怎么形容这种状态?
djyde
2018-07-30 20:17:18 +08:00
到底「精通」的标准是什么?我了解这门语言的所有特性、完整阅读过这门语言的 specification, 在实际环境中遇到过很多的坑,而对方恰好问了我一个关于这么语言一个我忘掉了的点,那我算不算「精通」?是否只要人的记忆力有限,就永远也无法「精通」一门语言?
djyde
2018-07-30 20:18:37 +08:00
那么我认为只有机器能「精通」某一门语言了
sunnogo
2018-07-30 20:19:59 +08:00
据说代码不能写太牛逼,不然其他人看不懂不好维护。特别是 C 语言。
GeruzoniAnsasu
2018-07-30 20:46:55 +08:00
我觉得就 C
语言
来说
达到精通不难而且是可量化的
二级指针随便用绕不晕
函数指针类型随手写不用想
嵌套宏伪 meta 想用能用
熟知 duff's device,typedef struct type* type 无类型指针,list_head 嵌入式“泛型”链表 等 C 特有的惯用法和 trick
然后再用过些 c99 c11 标准的特性比如变长数组语法糖,_Generic
就很精通了
xupefei
2018-07-30 20:50:08 +08:00
@t6attack #14
@shijingshijing #36
Oracle 的引擎是 C++写的,顶层是 Java 写的。
> Java,Python, C#,PHP,这些编程语言本身,也是 C/C++写的。
除开某些性能相关的组件,Java 是 Java 写的,C#是 C#写的。这个叫“自举”。
GeruzoniAnsasu
2018-07-30 20:50:50 +08:00
另外拿 c++来和 c 对比……

c++实在是复杂到太难以想象了,这个世界上最鬼畜的程序员就是 c++程序员,鬼知道是什么驱动他们去实现一个写错一个逗号报错 1000 个模板嵌套的代码……

用模板模式匹配去创造一个语法描述?然后把它静态分析编译成一个语法 parser ? 这 tm 是人干的事?

然而这是有些 c++程序员干的事……
Rasphino
2018-07-30 21:16:27 +08:00
@dtgio 个人感觉 c++11 以后的 c++和 c 已经是天壤之别了
PythonAnswer
2018-07-30 21:20:38 +08:00
精通 html css 很厉害了
zhchyu999
2018-07-30 21:26:50 +08:00
有人敢说精通某一项技术么
loading
2018-07-30 21:27:41 +08:00
我,精通,毕竟都 15 天过去了。
kwest
2018-07-30 21:34:38 +08:00
大学时曾用 VC6 写过贪吃蛇,做过课程设计。毕业后入了嵌入式的坑,用 C 写过 CGI (很多人怕不知道这玩意儿是啥,嗯,反正吧比 PHP 还古老)。写过嵌入式 Web Server,你没看错,由于硬件 Flash 和 RAM 限制,得自己实现基本的 HTTP1.0 协议,为什么不实现 HTTP1.1 协议呢,因为 1.1 太复杂了,那个时候水平不够:( 同样由于硬件限制,为了动态网页交互,还得自己实现一个类似于 PHP 的动态网页解析器。感谢摩尔定律,硬件越来越快,价格也越来越便宜,硬件上可以跑嵌入式 Linux 了,开源软件一抓一大把,应用层相对变得容易,只需要交叉编译,需要改的代码没以前那么多了。用户态解决了,可内核态呢?早期芯片商提供的驱动不完善,得自己修改,甚至有些还得自己写。公司业务又涉及到内核部分的修改,于是改吧改吧从 2.4 改到 2.6,从 2.6 又改到 3.0。Linux 内核变得越来越完善,芯片商的 turnkey 解决方案也考虑得越来越周到,对嵌入式开发人员的要求也没那么高了,行业门槛越来越低,竞争对手越来越多,产品市场逐渐从蓝海变成了一片红海,我知道是时候离开了。几年后,听闻各种智能硬件又火了,开源硬件发展得如火如荼,树莓派,各种派如雨后春笋般纷纷冒了出来,我笑了笑,这不是咱玩过的东西吗,只是换了个“智能”的壳,人生苦短,还是继续码我的 Python 吧!

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

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

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

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

© 2021 V2EX