我对C语言的拙劣看法

扯买房实在不擅长,咱门还是来聊程序吧。

A,B,C,D,E,F,G大鹏说,我《都选C》,我是不知道大鹏是不是也写过代码,他居然清楚C的重要性。对我来说,C语言应该可以算得上是世界上最伟大的编程语言。全中国口气最大的程序员,业界称之为“垠神”,曾经发过文章吐槽过业界各种主流的编程语言(对Java,的Python稍微宽容一些),他说Go语言设计有错误,Ruby是垃圾,JavaScript是垃圾中的垃圾。但我看他对C语言却没发表过什么负面言论。

C语言

之前参加Go大会,演讲的人许多都在说受不了C语言了,它动不动就爆内存,为了提高系统稳定性与可维护性他们把原有的逻辑用Go语言重写了一遍,这应该是一个正确的策略,并不是C语言不适合大项目,而是要掌控好这门编程语言实在太困难,一个公司很难保证招聘的所有员工都牛逼到考虑到如此之多的内存管理情况,难免引入一些有内存泄露隐患的代码,与其在这里面死磕还不如换一种更好掌控的语言,这或许更符合公司的发展需要。

C语言没有垃圾回收,需要自己去管理内存释放内存,而这点对于现代程序员来说确实有点难以接受。除此之外语法过度严谨,定义方法之前都需要预先声明,指针操作难以理解这种种麻烦事也导致了C语言的市场份额(应该这样说)渐渐被其他语言所占去。不过我觉得以上种种麻烦事也是C语言的魅力之处吧。它能让我们可以更加直观地与计算机系统打交道,让我们可以更加清晰地了解到一个程序运行的时候发生了什么事情,我们哪些方面需要系统的接口支持,我们能够清楚自己需要分配多少内存空间等等等等。

1. 我们往往忽略了它的存在

对于许多计算机系的同学来说C语言可能就是噩梦,以至于他们遇到Java的时候就如同找到一根救命的稻草。经济快速发展的今天C语言似乎渐渐失去了昔日的荣光,在语言排行榜上的第一名的位置已经让给了Java,游戏领域C++已经占有了一席之地,Web领域,Ruby,Go,Python,JavaScript这些语言各自占着不同比例的“市场份额”。那问题来了,C语言是否还有市场?。

让我们透过现象来看看更本质一点的东西,目前承载着我们生活的大部分技术其实都跟C语言脱不了关系。比如,Python,Ruby这些流行编程语言的解析器,目前使用最广泛的服务端操作系统--Linux的内核,以及我们目前用得最多的版本管理系统Git,他们都是大神们用C语言编写而成,只是我们平时看不到C的存在罢了。或许它已经被编译成二进制代码,可以直接在命令行直接运行,或许有些人给你提供了友好的用户界面,让你们看不到在背后默默支撑他们的人。或许有人用它实现了其他更加高级的编程语言(如Ruby,Python,Lua),让你沉迷于这些语言的语法糖的时候忘记了它的解析器是由谁来实现。

如此看来就有点像是前端开发跟后端开发的关系那样,个人觉得后端工程师往往需要承担比前端更加大的工作压力,他们编写的代码支撑着我们系统最关键的部分,但是人们往往只能关注到他们能够直接触碰的东西(可供用户使用的UI界面),却忘记了为了支撑他们所见的这个页面背后默默运行着的服务端代码。C语言实现了许多主流语言的解析器,而我们基于这些编程语言实现了很多了不起的网站,App,而它自己(C语言)却渐渐淡出了人们的视线在背后默默运行着。

2. 你可以学会它

C语言难,是真的难,他是很多大学教计算机课程的“守门”语言,为何说是守门语言?大学老师美其名曰:“用它来吓跑那些对在计算机领域混水摸鱼的人(说得好像他自己不是在摸鱼似的)。”这确实有点用,说实在这也吓走了一些人,我自己也被它吓跑过。

C语言是难,但个人觉得并没有老师说得那么玄乎,如果真如老师所说理解不了指针的人就不适合干这行的话,那我早就该转行了,事实是每个人的智力水平不一样,有些人只是接收得慢而已,凭什么要因为这些老师的几句话就打退堂鼓?

它没有垃圾回收还有异常处理,我们需要自己去分配内存,它甚至连对象都没有。以至于很多人都黑那些学C语言的人找不到对象(好吧,这点我承认,所以我现在更多在写Ruby)。C语言看起来更像是手动挡的汽车,虽然比起自动挡的汽车有点难以把控,但熟练之后的那种操作感还有成就感是无与伦比的。这也导致了我在大三别人都在苦学Java的时候选择了C跟Linux,只是就业机会堪忧只能暂时放下了,最后为了不随Java的大流投入了动态语言的怀抱。如今看来甚好,学习了动态语言之后更加明白了C的重要性,以及Java的非绝对必要性,哪怕现在我用C语言就只能写出"Hello World"也没关系,只要用心,愿意花时间研究,C语言并没有想象中那么难,你一定可以掌控它。

3. 这东西有什么用?

学C语言可以找到什么样的工作?又是一个尴尬的问题,我要是知道答案当初我可能就不会跑去学Python了。我大学时候碰过壁,我以为如果我学会了C语言在外面一定可以找到好工作。后来我发现我错了,好不容易去了一家声称招C语言的公司实习,去了之后他们让我学C#,工作两个星期后跟他们老总接触之后发现,原来他们是分不清C跟C#的区别。

Kidding

以前据说嵌入式领域会用到C语言,不过好像这个领域也被Python,C++这些语言占领得差不多了。C语言会不会演变成像Lisp那样只适合用来做教学语言了

之前听过有些大神说过

写Lisp你很难找到相关的工作,但是它能让你成为一个更好的程序员。

现在看来这句话用在C语言上也挺合适的

写C你很难找到相关的工作,但是它能让你成为一个更好的程序员。

据我观察,函数式编程是越来越流行了,如今Java据说都支持一些Lambda相关的东西了,Clojure,Elixir这些编程语言也渐渐火起来了,Ruby,Python,JavaScript这些语言几乎统治了Web开发的半壁江山。后起之秀Go声称要击败C语言,把C语言能做的事情都做一遍。确实如今的C语言已经没有当年的那么无敌了,出现了许许多多的替代品,或者衍生品。但我觉得作为一个存活了几十年的语言,它自有它过人之处,作为一个系统级编程语言,它简单却难以掌控。

当然也可能并没有如上所说的那么玄乎,更多的是觉得学这个东西有什么卵用,只能用来撸撸算法题。哈哈,如果持有这种想法的同学,您还是继续写Java比较好一些。毕竟Java即可以用来撸算法题也可以用来找工作。不过个人更倾向于C语言,或许我自己也是追求“手动挡”操作感的那类人吧,想想你可以在黑窗口上,打开一个轻量级的文本编辑器,编写相关的代码,可以自己精确分配内存空间,直接往某个内存里面塞你想要的东西,当你塞的东西放不下的时候,程序会告诉你内存爆了,这个时候你得去思考自己塞了什么不应该塞的东西进去。个人觉得这或许也是动态语言所不能给予的编程体验吧。

学C语言确实很难找到相关的工作,除非你是资深专家,但它让我们更直接地与操作系统打交道,让我们对内存分配,线程调度这些概念有更清晰的理解。了解这些东西或者说磨练这方面的意识对于日常的工作可能没有什么直接的帮助,但我始终相信掌握C并借此了解更多底层的东西,可以让你在这条路上走得更远,也更开心。

4. 尾声

Hacker

以上是本人对C语言的一些看法,或许有些片面(还望指正)。越来越多的语言妄想取代它的地位。但个人觉得无论这些语言再先进他们也无法完全取代C语言在许多程序员心目中的地位,特别是优秀的程序员。而C语言最终会走上Cobol那样消亡的道路呢,还是会走上不朽之路呢?我们拭目以待,但我个人觉得会是后者。

Happy Coding and Writing!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,302评论 2 35
  • 一、异同对比选择1、Python和ruby的相同点: * 都强调语法简单,都具有更一般的表达方式。python是缩...
    沃伦盖茨阅读 4,139评论 2 24
  • 书名:《代码的未来》作者:松本行弘(Yukihiro Matsumoto)译者:**周自恒 **本试读章节摘自:『...
    Shyujikou阅读 1,392评论 0 10
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,088评论 6 244
  • 其实,我在游泳尤其是自游泳方面,积累的有效锻炼总时长要远远多于我在英语,码字和早起等事情上各自的践行总时长。也就是...
    大崔同学的简书阅读 1,112评论 0 0