C语言这门课,作为基础课,一般在大一上学期就开始了.然而,课本上讲的,一般都只是各种语言的基本语法,并没有讲那些真正的C语言的内容.
而我们在C语言做实验时,完成的实验,基本上也就是基本的计算,并没有涉及到更多内容.这就给我们造成一种错觉,就是C语言只能做这些.只能弹出一个黑漆漆的窗口,然后我们输入几个数字,它帮我们计算结果.仅此而已.
然而,在每年的编程语言Top榜上,我们总是会发现,C家族占据的位置,总是很靠前.
上面这张图,是2016年8月份的时候的编程语言流行程度的排行榜.
我们可以看到,C家族(C,C++,C#)的成员,都是在前四.如果C语言仅能做上面咱们所说的那些事,它也就不会这么流行了.
而当你想要深入的学习C语言时,会发现没有什么途径.即使在Google上,用中文搜索出来的跟C语言相关的书籍,看一下其目录,也是不堪入目.比较深入的内容基本上没有.我在当当网上搜索了一下,相关条目如下:
我看了一下那本”被誉为近10年来最好的一部C语言著作”的书的目录,感觉还行,但是常用的东西还是很少,比如线程相关的内容,就没有.
而我们中的绝大多数人,都是习惯看中文的内容.这就导致并没有办法深入的学习C语言,并实际使用C语言来做一些实用的东西.
如果各位想要深入的学习一下C语言,我给各位推荐一本书,Beginning Linux Programming, 4th edition.这本书中涉及到了Linux Shell编程,以及C语言中的常用的东西,比如线程,线程之间的通信,GUI等.不知道这本书有没有中文版,但是推荐看英文原版.如果对编程语言的基本语法都不懂,就不推荐看这本书了.这本书的基础就是你已经熟悉编程语言的语法.
那你到底为什么要深入的学习C语言?
你是否用过别人写的库,来做一些东西?如果用过,Congratulation,你一定碰到过很多棘手的问题,然后,你去Google,结果发现,马蛋,这个解释到底在说什么.一般来说,这都是因为你碰到了比较底层的问题,而你不懂这些,所以自然也就看不懂答案.
比方说,Linux中的kill命令,相比大家都知道,是我们最常用的一个命令.我们常用的方式,也就是kill -9 pid.这样默认会给pid代表的进程发送一个TERM信号,使其终止.实际上,它还可以发送其他的信号.
当初我看kill命令的手册时,就感觉懵懵哒,不懂到底说的啥意思.也不懂这些信号量到底是干嘛用的.但是,看完上面那本书,就理解了.
因为C语言本身就是比较贴近底层的,所以我们在使用C语言的过程中,自然也能了解一些底层的东西.我之前写过一篇文章,C语言中指针类型之间的转换,这篇文章,其中的原理,就是底层的东西.
用C语言,你会更加理解操作系统,但你也也需要了解操作系统,了解计算机组成原理.这里我们举一个例子,还是C语言中指针类型之间的转换这篇文章.在这篇文章中,涉及到内存的地址时,我说的都是逻辑地址.细心的读者会看到,其中的逻辑地址是6个字节,也就是48位,而我们使用的是64位机器,理论上说,内存地址应该是64位,而实际上只有48位.这是为什么呢?这就涉及到了虚拟内存的一些理论了.感兴趣的读者可以自行查找相关的资料.
说实话,我在之前上计算机组成原理,操作系统这些课时,虽然也是认真的听得,但是基本上就是听个热闹,也不理解讲的那些有啥用.而在看Beginning Linux Programming这本书的过程中,就经常会遇到这种跟操作系统底层实现的问题,也就经常需要Google了.幸好我当时学的也是还不错的,查找相关的资料,理解起来也不是很困难.
看完Beginning Linux Programming这本书,你一定会有很多困惑.这时候,就推荐你看深入理解计算机操作系统.看完这本书,对操作系统的理解,就会提升很多.
总而言之,就是要真正理解操作系统,就得真正学习C语言!!!