[编程开发] 一个人如何才算是精通C语言?

[复制链接]
kawaka 发表于 2023-10-30 11:30:36|来自:中国 | 显示全部楼层 |阅读模式
我经常会看到应届生在简历里写上“精通xx语言”这种话,然后面试被问爆这一类事情发生。
C语言是我学的第一个编程语言,也是我掌握最深的编程语言,但还是感觉我只触及了这门语言的一小部分。再结合这类新闻,我感到非常好奇,有无技术大牛解答一下,一个人究竟要懂得多少/掌握到何种程度才能算是“精通C语言"?
全部回复5 显示全部楼层
allyescc 发表于 2023-10-30 11:31:26|来自:中国 | 显示全部楼层
拥有自已从内核源码开始,用C打造的独立工作平台。平台级软件象输入法,编辑器,调试器,编绎器,浏览器,画图的等等凡是工作中用到的此类软件全是自己编或改别人的全算。直接拿来用的不算,有一项,扣十分,扣满40分为止,象编绎器这十分估计大部分要扣,正常情况也就这项会扣分,60分以下的都是扯蛋,我这条件已很宽松了,老外的C程序员,那个不是能随手写虚拟机,引擎,解释器的啊,改改gcc因该难度也不高。
补充一个检验标准,难道这世上存在一种某位C程序员不能快速搞定的其它语言吗。存在,那这位也不是了,虽懂底层,学习动手能力太差劲。所以一切说自己只懂C,不会用其它语言快速熟练写程序的都不是。编绎器,调试器,虚拟机不全用C写的吗,按理你因该比其它编程员优势更大,别人只能在应用层,你可以在源码层分析跟踪程序,可你居然说你不懂,不能操控其它的语言,怎么可能是真正的C程序员。C程序员当然是要能统吃一切的啊,怎么可能光会C啊。那话怎么说来着,C程序员不肯定处于食物链的最顶端吗。随便你怎么数你知道的技术牛人,那个不是搞C的啊,NASI不全用C语言写一切吗。
小林他爸 发表于 2023-10-30 11:32:00|来自:中国 | 显示全部楼层
很简单确很硬的标准:
别人用C/C++做东西,遇到了崩溃/泄漏他搞不定,来找你帮忙,就说明你精通了。
永远不要说你精通了什么。
怎么算精通?
学无止境,有太多的知识了。
我想你可能指的是熟悉C语言,而不是精通。
因为C语言的特性,决定了如果对计算机系统没有深入理解,是不可能精通C语言。所以除了C语言语法,数据结构,算法这些语言通用的知识,重要的是操作系统,计算机组成原理,编译原理和计算机网络。
阿里大佬强烈推荐的C语言学习路线熟悉C语言,这些知识储备你有嘛:

1. 掌握标准的语法。the c programming language。(楼主处于这个阶段,包括调试的手段都要掌握的,比如用断点调试,用printf调试,跟踪程序执行)
2. 学标准库和第三方库,系统api,并使用库来开发一款应用。代码规模在万行以上。(不熟练使用怎谈得上精通)
3. 写代码过程中,不断重构,让设计上逐渐完美。了解设计模式。(参看些设计模式的书)
4. 了解语言设计上的优势和劣质,了解语言上的缺陷和陷阱(C陷阱与缺陷)。写代码时,充分利用语言的特性,扬长避短。
5. 大量阅读优秀开源作品,汲取别人的精华设计,巧妙使用的方法。
6. 掌握语言底层运行机理,当然C已经足够底层,你可以看看汇编,从汇编角度上理解一下C。
7. 掌握多种其他语言,通过语言的对比,深入的了解C语言的优势和劣势。实际工作中,扬长避短,结合各个语言的优势来解决问题。
8. 熟悉不同平台编译器的一些常用特性(其实不写跨平台,用不着学这个)
以上过程搞定,那么C语言已经算精通了。我个人认为。
不过,光精通C是不够的。还得:
1. 原理类的书籍(数据结构,算法,操作系统,编译原理,网络,数据库)要掌握。
2. 开发方向上所有的常用工具,常用库都要熟练掌握。
3. 开发方向上的常用技术,常用算法要掌握,看最新的技术论文,等等。
来源:作者:crackhopper 链接:https://www.zhihu.com/question/19910787/answer/23786930
这就是为什么C语言能长盛不衰的原因!
从底层往上看,在冯诺依曼架构的机器上,用以内存地址和寄存器为操作单位的单条指令组成程序是非常自然的事情。
而如果你学过汇编,你就会发现,C语言是这个样子是非常自然的一件事情。它只是对汇编做了一些包装;就像汇编是对机器语言做了简单的包装一样(好吧还是有点不一样的,实现起来复杂得多,但的确很自然)。
所以呢,你觉得不自然的地方,是因为你是从数学,从顶层往下看。那么看到的就会是像haskell,lisp这样直观的语言。
如果从底层往上看,C语言也一样的直观。
C语言最佳学习路线:阿里大佬强烈推荐的C语言学习路线
最重要的是:
C 树立了正确的设计原则。第一是减法原则:Perfection is attained, not when there is nothing left to add, but when there is nothing left to take away. 第二是符合实际需求,C 的各种假定立刻被其设计者在实现 Unix 的实际工作中检验,而不是建立在盲目的假设上。有了这两条,其它语言都不再试图替代它。任何试图取得成功的语言都必须和 C 保持距离。
最近很多同学问我大厂面试的核心知识点,东哥熬夜整理出来了9大核心知识点,需要的自取:
校招进大厂,9大核心课程知识,熬夜整理成思维导图送给大家BAT大佬整理的进大厂必看秘籍!另外,我当初在准备各大公司技术笔试的时候刷了大量的算法题,其中就是参考了一本谷歌大神的LeetCode刷题笔记,帮我整理了解题思路,归纳了出刷题方法,非常不出错,转给需要的同学:
BAT大佬写的Leetcode刷题笔记,看完秒杀90%的算法题!​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247485348&idx=1&sn=02ede6b715b20a6b981af1d021d77d5d&chksm=fdb3f97acac4706cc193bec80b984255bb33db2b35366682bd566280326b7029f1dae632abb2#rd最后给大家介绍一份计算机经典书籍,送大家一份硬核书籍资源:读大学跟工作期间,我买了很多书,大部分是一些技术书籍,也收集了这些书籍的电子版,都在这里,现在免费share给大家,包括了计算机类常用电子书,包括C,C++,Java,Python,Java,Linux,Go等,希望大家能认真阅读。点击下方链接直达获取:
计算机经典必读书单(含下载方式)​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247487238&idx=1&sn=c63594d794bed494ff91bebd4c8de37c&chksm=fdb3f1d8cac478ce0bb20b69a930567c8790e1c3fe4629aacb805a5c2ac9f39035772855738e#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247487238&idx=1&sn=c63594d794bed494ff91bebd4c8de37c&chksm=fdb3f1d8cac478ce0bb20b69a930567c8790e1c3fe4629aacb805a5c2ac9f39035772855738e#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247487238&idx=1&sn=c63594d794bed494ff91bebd4c8de37c&chksm=fdb3f1d8cac478ce0bb20b69a930567c8790e1c3fe4629aacb805a5c2ac9f39035772855738e#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247487238&idx=1&sn=c63594d794bed494ff91bebd4c8de37c&chksm=fdb3f1d8cac478ce0bb20b69a930567c8790e1c3fe4629aacb805a5c2ac9f39035772855738e#rd​mp.weixin.qq.com/s?__biz=MzU4MjgwNjQ0OQ==&mid=2247487238&idx=1&sn=c63594d794bed494ff91bebd4c8de37c&chksm=fdb3f1d8cac478ce0bb20b69a930567c8790e1c3fe4629aacb805a5c2ac9f39035772855738e#rd码字不易,硬核码字更难,希望大家不要吝啬自己的鼓励,给我 :
@码农出击
一个点赞,鼓励下我!
tyzyf 发表于 2023-10-30 11:32:19|来自:中国 | 显示全部楼层
精通C语言难度真的不大,因为这语言本身就没多少东西。
如果你精通一个对平台依赖少的语言,比如Python,JavaScript,等等,你就能做很多事情。
但精通C语言,不说屁用没有吧,基本也就跟你学英文精通字母表差不多。
需要用C语言的场合,基本上你必须同时也得把计算机组成原理、操作系统、数据结构、算法导论等等专业课学得很好,而且不仅理论学好了,还得具备相当的实践经验,对这些课程在实际计算机系统的实现和应用相当了解。这样你才能真的写出实用的C语言程序。
muziyi0208 发表于 2023-10-30 11:32:50|来自:中国 | 显示全部楼层
先用C语言赚到钱,再谈精通与否的问题。
精通的标志就是能挣钱。
tjz001 发表于 2023-10-30 11:33:41|来自:中国 | 显示全部楼层
C语言本身算是很简单的一个编程语言了,C语言的标准如果打印出来的话,页数估计只有C++的十分之一。C语言的标准库功能也不多,有个大概了解,用到的时候查文档即可。把这些都学会就可以算精通的了,最多再加上一些宏的奇技淫巧。
问题是,很多人谈论的精通C语言(或者C++),并不是指语言本身,而是用C语言写的程序和相关的技术。比如精通C语言意味着精通嵌入式系统、操作系统、驱动开发。精通C++意味着精通高性能大规模分布式系统等等。
所以,除非做某种编程语言的编译器或者开发工具链,否则谈论精通某种编程语言毫无意义。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则