当前位置: 华文星空 > 知识

学会了 C 语言真的可以开发出很多东西吗?

2014-06-01知识

理论上C语言能开发出几乎所有软件。

但是,计算机发展了几十年,留下的大量的轮子和解决方案。C后产生的各种新语言和第三方库如此丰富,这已经是巨大的财富。我们没有必要回到石器时代去创建新的文明,而且就算重来,也未必能创建出更加优秀的文明。已经能站在巨人肩上,理性地选择拿来主义,择优出解决方案才是王道。

我接触C语言完全是因为课程的安排。C基本语法掌握后,接下来就是数据结构。开始了想题主一样,做「数学题」。用C实现链表、平衡树、排序和一些算法等后,我也只是在后台黑框框输出我的成果,确实枯燥。

但是这个过程对我的影响几乎是最大的。数据结构课程结束,我对编程的认识大致就是函数的logical control+存储的data。软件的运行其实也就是一大坨从现实需求中抽象出来的数据通过代码的控制逻辑一直在变化。后来看到Nicklaus Wirth曾用「算法+数据结构=程序」来概括,看来我没有认识跑偏。在我看来,C语言抽象了2进制,它让我们大脑中的「数据」概念映射到了电脑中。即便同是数值,我们也有了更好被我们大脑理解的char。还有struct这种custom的数据集合,完全就是为了照顾我们愚蠢的大脑。我们关注了C衍生出的抽象概念,而不再去死磕零零碎碎内存。我们还有便于逻辑展开的胶合物function。只要我们把现实世界的东西,通过我们大脑抽象出「数据和逻辑」,就能映射到电脑上,变成软件。即便C语言本身看起来很整洁,但是这种松散的数据表达和粗犷的回收机制,让我在大二美好的时光中,度过了大姨妈和Bugs同时问候我的心酸时光。后来投向C++,有了还算不错的语法糖和特性,接触OOP,生活有了点改善。而且也学会偷懒,有轮子就那来用,而且实际项目开发过程,其实也没发现比啃数据结构课程难。C语言开发的经历,让我在看OOP那些设计模式的时候,自恋地傲娇,「这些不用你教我也玩过好吧!」

再后来接触Java和Python,特别是Python,太改善生活质量了。所以毕设毫不犹豫选择Python做开发语言。这之后,我开始关心开发的复杂度。其实实际开发过程中,业务逻辑本身带来的复杂度是无法消除的,而且开发过程使用的语言和选择的框架也会带入复杂度。我之前搞C语言,特别是多线程的时候,内存回收太容易出Bug了,很头疼。即使使用了消息传递机制来缓解,开发还是很耗时啊。现在很多语言都支持垃圾回收机制,一般情况我们不用关心回收。这其实就是控制开发复杂度的强有力的手段。

我个人的观点,就是用最接近人脑理解的方式来抽象,即使增加开发成本也可是付出的。让数据有更好的组织形式,优先考虑良好的数据结构表达而不是沉迷于OOP的设计模式,减少抽象过程带入的胶合层,能吞掉的就不要暴露给使用者。毕竟胶合层本身就是增加复杂度的大隐患。减少开发的复杂度真的可以改善生活!请相信我。

我推荐还在大学学习的,时间多的是,不要根基不稳就追逐看似高大上的新玩意,很多真的当你用的时候在去看也不晚,多看看C和数据结构以及算法。折腾明白了,学其他的会比较快,而且不会迷失在各种框架里面。