应用层C程序员有话说
C语言作为一门较低层的语言,有着她独有的特点
简约而不简单的C语言
C的历史很悠久了,就语言本身而言虽然简单,但在低层应用中有着重要的地位。
从当前来看她是不会没落的,因为操作系统需要她,而一切的一切的应用都是建立在操作系统之上的。还有就是编译器也需要她,绝大部分驱动程序也需要她。原因就一个——快,比起其它编译型语言,她速度快了太多。特别是算术与位操作,只需要进过一次汇编解释,就可以直接操作寄存器和各个总线之类的。
说她简约,是因为C语言的关键字是很少的,语法也很简单,内置的数据结构就更少了,除了能模拟数组,其它的比如链表,栈等数据结构是需要自己实现的。所以入门她是快的,稍稍了解语法、一个gcc、一个文本编辑器就算知识准备好了,环境也搭建好了,可以开始玩了。
C语言是强数据类型的(编译型的)面向过程的语言,肯定不适合做Web前后端的开发啦,这样会开发成本高和开发周期长的重大弊端。虽然她很快,但是就界面交互和普通业务逻辑,她快过头了,没必要。而且这些开发基本都是面向对象的,用C做面向对象不是不可以,是成本太高,你得请一帮牛逼的人,而不是像我这种仅搞过一两年技术的小菜鸟,或者刚毕业的大菜鸟。
尴尬而又苦逼的C语言
在你没有成为一个牛逼的人之前,用C作为自己的主打开发语言是很苦逼与尴尬的。
在当下Java、PHP、JS等语言在移动端和服务器端开发占领了太多份额,以及以这些语言为主的程序员更是多如牛毛的情况下,应用层的开发还真没有C语言什么事。从我从数据库转开发历时2年半以来,工作也换了3份,每次换工作投简历都很痛苦,很少能找到自己的位置。因为我只会SQL和C,还有就是一点shell脚本语言,所以好工作不好找,高工资的工作更不好找〜〜〜
当然C语言还是有行业用得较多的,那就是金融行业。但是有个弊端,那就是因为这个行业没票子肯定搞不起来,所以提供这样岗位的都是清一色的外包公司,你懂滴〜〜〜。除非你很强力,或者一点经验都没有想混点经验值,否则天天都是和业务打交道,写的代码都是很简单的流水式的(就是if...else...
外加switch(x){case...}
),基本接触不到其它的。因为你所用的库都是牛逼的人被封装好了的,你就写业务逻辑好了。所有真不太适合想要提高个人能力的人干太久。
怎么学习C语言
仅仅掌握语言本身的知识,肯定是玩不转的。那样真真正正的只算业余爱好,是不能拿来工作的。不仅是C语言,就算是Java这样的高级语言,都是需要了解部分操作系统的,更何况像C这么低层的语言了。所以在简简单单掌握了C语法知识后,就需要了解操作系统层面的知识,最基础的肯定就是系统调用,也就是学会怎么和内核交互,写出实用高效的小程序。为何说是小程序呢?因为C语言本身的特点,要写出像Nginx这样庞大的程序,一个人是很难操作的,而且开发周期也很长,维护起来也很难。其实在我看来这有违背高效简单的原则。什么样的程序最适合C?打开你的Linux终端,然后敲入ls -l /usr/bin
后回车,所列出来的程序就是最最适合C的。功能简单明确,后期也不需要怎么改变,速度要求高,最重要的一点要可以很好的与其它独立程序交互,比如ls -l /usr/bin|grep bash
,这样的程序就是C最擅长的,也是所谓的——KISS原则——Keep It Simple, Stupid。虽然把功能都分散开,就像以前的人们现代化生活,手表、音乐播放器、非智能手机、照相机,出门带一堆,现在只需要功能都有的智能手机就好了。C程序为何不像智能手机这样做呢?要用看上去很蠢开发模式呢?因为这种“蠢”做法可以很高效的拼凑出想要的功能,比如ls -l|wc -l
就可以立马知道当前目录下有多少文件,不必专门的开发一个程序来干这件事,只需要像吗积木一样组合一下程序就可以得到新的功能了。
后续我会写些什么文章?
后续我会在假设你已了解C语言语法的基础上写一些主方法论的随笔,一起探讨该如何用C语言模式思考,渐进试的改进一个简单实用的程序,让她变得实用而非像C等级考试一样教条。
以上仅仅是个人观点,不喜勿喷啊,谢谢。