程序员怎么看待C语言?最伟大?最落后?

一,前言

对我来说,C语言应该可以算得上是世界上最伟大的编程语言。全中国口气最大的程序员,业界称之为“垠神”,曾经发过文章吐槽过业界各种主流的编程语言(对Java,的Python稍微宽容一些),他说Go语言设计有错误,Ruby是垃圾,JavaScript是垃圾中的垃圾。但我看他对C语言却没发表过什么负面言论。

C语言

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

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

二、我们往往忽略了它的存在

对于许多计算机系的同学来说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语言)却渐渐淡出了人们的视线在背后默默运行着。

三、你可以学会它

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

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

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

小编推荐一个学C语言/C++的学习裙【 815393895】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

四、这东西有什么用?

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

以前据说嵌入式领域会用到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并借此了解更多底层的东西,可以让你在这条路上走得更远,也更开心。

五、尾声

小编推荐一个学C语言/C++的学习裙【 815393895】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

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

如果您觉得不错,请别忘了转发、分享、点赞让更多的人去学习, 您的举手之劳,就是对小编最好的支持,非常感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何学习C语言?就是这么简单粗暴!

C语言是面向过程的,而C++是面向对象的。 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理…

C/C++对编程的重要性!其他编程语言都是弟弟!

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

C语言其实不难,只是你没有找对方法!

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

想学好C语言?先把基础打好再说吧!

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

C语言新手最常见的问题!你在这里跌倒过吗?

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

用C语言做出你自己的七夕表白程序!

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

C语言/C++编程的起源与能力学习

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

Windows下设置自动关机的命令指示符

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 Windows定时操作命令:superR,输入:??:??shutdown -s ”??“代表时间…

Ubuntu16.04amp;amp;Windows 10双系统安装教程(UEFI模式)

相信来这里的各位,都是想在Windows 10的PC上安装Linux Ubuntu16.04,来达到双系统并用的目的。 那么接下来,我就在默认已安装Windows 10的基础上介绍如何以UEFI的方式安装Ubuntu16.04!我的PC是联想小新潮7000—13。在装双系统之前…

Linux Ubuntu16.04界面美化

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 很多人在安装系统之后可能对其外观、主题或是桌面壁纸不满意,本文给大家介绍几种美化方法和插件! 1.可以将左侧的“热区”…

Linux16.04和Windows 10双系统下,解决时间不一致问题

装完双系统,你可能会发现某一个系统的时间与现在时间不一致(中国相差八个小 时),那么如何解决这个问题呢? 1.将某一个系统的设置时间更新方式设置为“手动”,而不是“从互联网自动获取”。 2.进入PC的BIO…

基于Vitual Box建立虚拟机,虚拟机系统为Linux Ubuntu16.04

相比于为PC机安装双系统,安装虚拟机在达到相同目的的时候显得更为方便。 那本文就详细的为大家介绍如何在Windows 10的系统下,安装Vitual Box,进而安装虚拟机。 一、下载Vitual Box虚拟机制作软件及镜像文件 Vitual Box网址为:…

ROS安装过程和配置过程(可能出现的问题及解决方法)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 准备学习ROS,所以在Linux Ubuntu16.04 的系统下安装ROS (建议初学者,先在虚拟机里进行学习和实践&#xff0c…

C语言(CED)排序算法总结。比较完整和详细

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存 内部排序算法有:直接插入排序,折半插入排…

C语言:表白(多彩小心心)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 #include <stdio.h> #include <math.h> #include <stdlib.h> #define I 20 #define R 340 #include <string.h> int ma…

Windows 10重装系统时,提示Windows只能安装到GPT磁盘的解决方法(更新于2021.4.28)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 重要提示&#xff1a;一般情况下&#xff0c;笔记本电脑和台式机所含硬盘数量不同&#xff0c;不同用户对硬盘分区的数量也不同。为防止数据损失&…

Android Studio-------添加按钮

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 我们要想添加按钮&#xff0c;首先得有一个活动Activity&#xff0c;所以先手动创建一个活动。 点击第一项-> 点击Finish。 创建成功之后&…

Android Studio------------重要提醒

最近帮着很多同学进行Android Studio的安装&#xff0c;发现了很多问题&#xff0c;这些问题确实让人头疼&#xff0c;所以专门写了此文&#xff01; 1、首先是Android Studio的下载和安装&#xff1a; 可能大家都会买一本这样的书去学习&#xff0c;确实是明智之选&#xff…

Ubuntu系统下载网易云音乐

&#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 1、访问网易云官网&#xff1a;https://music.163.com/#/download 点击对应的Linux版本下载&#xff1a; 2、下载结束后&#xff0c;打开终端&#xff0c;输入命令&a…

Grub2主题修改和美化--------LinuxWindows

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 相信大家为了学习或工作&#xff0c;都会在同一台电脑上安装两个甚至更多的操作系统&#xff0c;最初始的系统引导界面不是很好看&#xff0c;那如…