前言

经常有小伙伴问我,你是做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语言。


最新文章

  1. 11. KVC And KVO
  2. Myeclipse打断点太多,不知道怎么一次性全删除
  3. Python之路Day15--CSS补充以及JavaScript(一)
  4. Redis配置文件参数说明
  5. java常用算法
  6. virtualbox -centos ping不通外网
  7. android 下修改 hosts文件 及 out of memory的解决
  8. Git tricks: Unstaging files
  9. Swift结构体与类
  10. asp.net mvc NPOI 生成Excel文件
  11. http://www.cnblogs.com/eye-like/p/4121219.html
  12. PHP面向对象编程
  13. Oracle 添加 scott 示例用户
  14. OBIEE接受外部参数
  15. 201521123088《java程序设计》第十周学习总结
  16. KMP算法具体解释
  17. vue keep-alive内置缓存组件
  18. 从零开始学习PYTHON3讲义(五)while循环和棋盘麦粒问题
  19. Mysql双主互备+keeplived高可用架构(部分)
  20. LDAP - 轻量目录访问协议

热门文章

  1. Springboot 禁用数据库自动配置
  2. [LeetCode] 96. Unique Binary Search Trees 唯一二叉搜索树
  3. kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
  4. csu 1987: 绚丽的手链
  5. 文件上传速度查询方法(watch工具)
  6. 【LeetCode】两数之和【优化查询过程即可】
  7. 重新安装Eclipse的一些配置
  8. session知识点小结
  9. flask 表单填充数据报错!AttributeError: 'dict' object has no attribute 'getlist'
  10. [高清] 深入浅出Spring Boot 2.x.pdf + 代码