初识C之感受

C和C++大神请略过此文

作为一名生物学的科研民工,其实完全没有必要学习C语言;即使在数据科学里面,用C的似乎也不多,人们似乎更愿意选择Python或者R之类的高级编程语言。但是C是无处不在的,“汇编生C,C生万物”,你所用的操作系统或者编程软件也很有可能是用C语言编写的,只不过平时没有觉察到。对于一名科研民工,最直接对C的感觉就是有一些数据分析脚本主要是用C语言写的,比如samtoolsbcftools,基因组组装工具bwa等等。

C语言是一门很古老的语言,尽管世事变迁,各种语言轮流坐庄,但是C语言的热度始终在各种编程语言排行中名列前茅。在2018年TIOBE排行中,仅次于Java,排在第二位。

(图片来源:https://www.tiobe.com/tiobe-index/)

于是,在这两天的时间内,通过B站的把C语言的一些基础知识了解了一下。

https://www.bilibili.com/video/av15267247/?p=1(上大学不如上B站)

准确的说,这也不是第一次接触C,在大学的时候自学过一些,准备靠计算机二级,但是考了两次都没过,就算了。不过现在在来学习C,感觉非常不一样了。因为现在有了编程的一些基础知识,有了Unix命令的使用经历,使用过Python和R等高级编程语言,所以入门C并不难。

当然,C语言和Python或者R还有很多不同的,C是强类型的语言,每一个变量的使用都要声明变量类型,而且每个语句完成之后要加分号,这些小错误对Python和R的使用者来说非常常见。

更大的不同是,C中有指针(pointer)的概念!这应该是学习C的第一道门槛。编程界的信条之一就是“没有指针的编程语言是没有灵魂的”!指针在C语言中确实不太好理解,但是一旦理解了,就会觉得非常有用。有了指针,才明白内存是怎么存储的,才明白为什么计算机会有32位和64位之分,才明白了为什么一个32位的系统最多只能使用4GB的电脑内存。

在32位系统中,存放一个指针要4个字节,每个字节8个二进制位,所以一共32位。32位二进制能够描述的最大地址是2^32 = 4GB(实际比4GB要小)。所以32位系统的地址只能分配给4GB大小的内存使用,即使你安装一个8GB的内存条,剩下的4GB因为没有分配地址,也无法使用。打个比方就是,一个小区建立200间房子,但是门牌号是只有两位,所以只有其中的100间房子(0-99)有门牌号,剩下的100间房子没有门牌号,不允许入住。

C语言还有位运算,比如按位运算、移位运算等等,这些似乎更接近硬件了,作为理科生,似乎没太有必要了解这些。不过,关于C的大程序文件还是很有用的,在Github上很多C语言写的程序,会看到.c和.h为后缀的文件,通过学习C语言,就能够明白这些文件的意义。

想比如Python之类的语言,C的缺点是显而易见的:太复杂,需要考虑太多底层的东西,变量的定义,内存的获取、分配和释放,一不小心还可能溢出,写每一行代码都要万分小心。但是作为初学者,这也是一个优点,因为它让人了解到计算机底层的一些东西是怎样工作的,计算机的工作原理是什么。C语言的另一个优点是其代码可移植性比较好,而且执行速度特别快,这也是为什么很多处理基因组大数据的软件都是用C语言编写的。“写C两小时,运行5分钟”,而如果是Python,或许成了“写Py五分钟,运行两小时“。

所以,C语言是面向计算机的语言,Python之类的语言是面向用户的语言。使用Python,几乎可以忽略所有的底层细节,想怎么写就怎么写,不用担心内存问题,不用担心各种意外的错误。从C进入Python,仿佛就是举步维艰的荆棘密林,一下子跨入宽广的高速路。瞬间明白了“人生苦短,我用Python”。

====== THE END =====

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190128G0TJZI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券