学了 C 语言到底能做什么, 能从事什么工作?
前言
经常有小伙伴问我,你是做C/C++的,那学C语言可以做什么呢?尤其是还在学校的同学,感觉自己学了很久,什么也做不了,一度怀疑自己是不是不适合程序员这个方向。

开始我都是直接说可以开发嵌入式啊,做操作系统啊,开发数据库啊等等,说到这,其实大家就应该明白了,C语言是接近底层的,他的很多应用都是处在摸不着看不见的后台,这对于初学编程的同学确实太不友好了,大家都喜欢所见即所得的效果,要不python怎么这么火呢!
但是,作为编程排行榜经典不衰的语言,我还是想好好说下,到底学C语言可以做什么?
有数据为证

还是采用我喜欢的类比学编程的方法,这个也是学编程很好的方法之一,触类旁通的道理。
在计算机高速发展的最近几十年中,出现了上百种编程语言,有的编程语言是针对某个领域专门设计的,例如:
PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

Objective-C 只能用于苹果产品的开发,包括 iPhone、iPad、Mac、MacBook 等,Swift 改进了Objective-C,是一种新的编程语言,用于编写 iOS 和 OS X 应用。

Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。是一种可用于微软自家产品开发的语言。

而大部分的编程语言不是针对某个特定领域设计的,它们能做很多事情,比较通用化。但是在长期的实践过程中,这些编程语言也找到了适合自己的位置,例如:
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java 可以用于网站后台开发、Android 开发、PC软件开发,在大数据领域也有应用;

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。主要用于系统运维、网站后台开发、数据分析、人工智能、云计算等领域;

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近。Go语言除了用于服务器、通讯等较底层的开发,还能用于网站后台开发。

C语言也是一门通用性的语言,历史很悠久,就目前而言,C语言主要用于较底层的开发。

除了Windows、Linux、Mac、Unix等大型操作系统,还有freertos,ucos等嵌入式系统等操作系统的内核都使用C语言开发;
开发硬件驱动,这部分也是C语言的强项,当然也有很多C语言的就业机会;
单片机和嵌入式属于软硬件的结合,有很多使用C语言的地方;
开发系统组件或服务,用于支撑上层应用;
开发lua脚本,可以做到无缝衔接。
很多高级语言使用的库,底层也是C语言编写的,主要是考虑运行效率的部分。
当然,C语言也能用于PC软件开发,做出类似 QQ、迅雷、Chrome 等带界面的程序,但是由于C语言开发效率低,第三方库较少,实际项目中已经没有程序员这么做了,大家已经转向了 C++。
初学者的疑问
既然C语言能做这么多事情,为什么很多初学者学完C语言以后仍然非常迷茫,只能编写没有界面的控制台程序呢?

这是因为,C语言仅仅是一个工具,它的标准库也很简单,只提供了最基本的功能,如果希望开发出实用的程序,往往还需要学习其他方面的知识。例如:
开发硬件驱动要学习数字电路,了解 Windows 或 Linux 内核,阅读硬件厂商的接口说明书;
从事嵌入式开发要学习数字电路、模拟电路、ARM、Linux、Qt等;
开发PC软件要学习Windows编程,了解 GTK。
可以这么说,如果只会C语言,基本上是找不到工作的,读者要选定一个方向,继续学习其他知识。后面你会发现,C语言不过是冰山一角,是一项基本技能而已,程序员要学习的东西还很多。
另外,学习C语言并不一定要从事与C语言有关的开发工作。C语言是一门简单、底层、较早的编程语言,后来的很多语言在语法上都和C语言类似,称为“类C语言”,例如 Java、C++、C#、PHP、JavaScript 等,学完C语言再学这些语言都很容易上手。
并且,C语言能够让你更加深刻的认识内存和编译原理,了解程序的每一个细节,夯实基本功,站得“低”才能望的远,所以优秀的程序员都会学习C语言。

学了 C 语言到底能做什么, 能从事什么工作?的更多相关文章
- 7.学完linux系统运维到底可以做什么?
linux运维到底可以做什么?(略有改动原文.排版) 运维,很容易从字面理解为运营.维护. 很多朋友认为,在互联网公司中linux系统运维的工作就是安装系统,部署服务.处理紧急故障,为公司里的开发人员 ...
- 不懂指针就不要说自己学过C语言!
不懂指针就不要说自己学过C语言! 1.掌握了指针,就掌握了C语言的精髓!计算机中绝大部分数据都放到内存中的,不同的数据放到不同的内存区域中. 内存角度没有数据类型,只有二进制:数据以字节(8位二进制) ...
- 学了C语言,如何利用cURL写一个程序验证某个网址的有效性?
在<C程序设计伴侣>以及这几篇关于cURL的文章中,我们介绍了如何利用cURL写一个下载程序,从网络下载文件.可是当我们在用这个程序下载文件时,又遇到了新问题:如果这个网址是无效的,那么我 ...
- 学了C语言,如何写个程序计算出每个月的第一个星期一对应的日期
在前面,我们分别利用泰勒公式和C标准库中的mktime()函数推算了某个特定日期所对应的星期几,刚做完这些,就又遇到了一个与日期相关的新任务: 老板把每个月例会的时间定在了每个月的第一个星期一,他让我 ...
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...
- 学了 Python 能用来做这些!
来源商业新知网,原标题:学了 Python 能用来做什么? 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们 ...
- java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?)
java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?) 很多人做Java开发2.3年之后,都会觉得自己遇到了瓶颈.什么都会又什么都不会,如何改变困境,为什么很多人写了7. ...
- 教孩子学编程 python语言版PDF高清完整版免费下载|百度云盘|Python入门
百度云盘:教孩子学编程 python语言版PDF高清完整版免费下载 提取码:mnma 内容简介 本书属于no starch的经典系列之一,英文版在美国受到读者欢迎.本书全彩印刷,寓教于乐,易于学习:读 ...
- C语言到底怎么了?
自2015年11月开始,所有C语言系列都呈现出衰落之势.在超过15年的时间里,C语言在编程语言排行榜中的占比一直有15%-20%,但今年却突然急转直下,目前占比已不足10%,且目前看来回天乏力. 那么 ...
随机推荐
- GitLab - GitLab的备份与还原
1 - GitLab配置文件 GitLab默认的配置文件路径:/etc/gitlab/ /etc/gitlab/gitlab.rb:主配置文件,包含外部URL.仓库目录.备份目录等 /etc/gitl ...
- python:单元测试框架pytest的一个简单例子
之前一般做自动化测试用的是unitest框架,发现pytest同样不错,写一个例子感受一下 test_sample.py import cx_Oracle import config from sen ...
- TCP/IP学习笔记14--IP地址 之 全局地址,私有地址
只要明天还在,我就不会悲哀,冬雪终会悄悄融化,春雷定将滚滚而来.----<只要明天还在>,汪国真 全局地址,私有地址 , 一种为解决IP地址不足而产生的技术. 起初 ,互联网中的任何一台主 ...
- GridView树状结构显示
下面的树形结构代码需要GridVIew中的数据要求是按照上下级关系已经排列好的顺序,比如: GridView ID ParentID Name 1 0 父1 2 1 父1子1 3 1 父1子2 4 3 ...
- 查看LINUX进程内存占用情况及启动时间
可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1) top top命令是Linux下常用的性能分 ...
- 13 IO流(十)——BufferedReader/BufferedWriter 装饰流
Buffered字符包装流 与Buffered字节装饰流一样,只不过是对字符流进行包装. 需要注意的地方 Buffered字符流在Reader与Writer上有两个新的方法:String readLi ...
- 10 IO流(七)——copy方法封装、关闭流方法封装的两种方式以及try...with...resource
前言 本文将上一节做的代码,对copy方法与关闭流方法进行封装,并使用try...with...resource关闭流. copy方法封装 我们将copy方法封装,使得只需传入两个流,就能将输入流的源 ...
- mysql网文收录
1.分布式事务 1) 聊聊分布式事务,再说说解决方案 https://www.cnblogs.com/savorboard/p/distributed-system-transaction-cons ...
- U盘改造计划之PE、kali、U盘三合一
最强U盘攻略之一 前一段时间朋友买电脑问了我一些问题,我突然发现U盘怎么这么便宜,128G金士顿,140?!!!我16年买的可是240啊.买贵一百块,我好方啊.但是我的U盘,我是不会屈服做一个普通的U ...
- R学习笔记2 因子
特殊值: 缺失值 NA(Not Avaiable),是不可用的缩写: NaN为“不是一个数”,意味着计算没有数学意义: NULL值,空值,表示一个空的变量,不会占用任何空间,通过is.null(x)来 ...