C
C 学到什么程度才能叫精通?
学到什么程度才能叫精通?
很有意思的问题,作为一个主要使用C 做开发超过十年的老码农,来聊聊我个人的一点看法。
这么说吧,C 是一门极度复杂的语言,而且随着新标准的提出,这种复杂性还在不断的增加中,所以说什么程度算是精通C 语言,其实是一个无法给出明确答案的问题。比如就我来说,使用了十多年的C ,可以轻松的使用C 设计一个方案并实现,比如用它实现过图像处理SDK,也用它做过IDE开发,即使如此,我也不敢说自己已经精通C 。原因很简单,你对这门语言的理解越深,也就越能发现诸多的不足,既包括自己的不足,也包括语言本身的缺陷与不足。举个简单的例子,我最开始学习的标准是C 98,可是后来又出现了C 03、C 11、C 14,甚至还有C 17,对于这些新标准出提出的内容,说实话,有些听过,有些甚至都没有听说过,更别说在实际应用中使用了,以此来说很难算是精通C 了。
不过话又说回来,有很多使用了多年C 的程序员,有着和我类似的情况,他们可以轻松的使用C 开发一个应用程序,但是C 中依然有他们未曾触碰的领域。所以我认为C 语言变得越来越复杂,想要完全掌握除了编译器和C 语言专家,其他人是可望而不可及了,要不然就连Linux之父——Linus Torvalds也会炮轰C ,说它是一门糟糕(horrible)的语言。
综上,我认为想要给出一个明确的精通C 语言的标准,是一件费力不讨好的事情,学习任何语言都是为了解决实际问题,所以只要你能够使用C 语言开发出好的应用,你就是一个合格的C 程序员。下面是几条熟练使用C 的需要掌握的技能:
1、最基本的要求自然是熟练掌握C 的基本语言,包括常用的和不常用的;
2、因为C 是一种面向对象的语言,所以要掌握面向对象程序(OOP)设计思想;
3、能够使用C 描述常用的数据结构,并实现在这些数据结构上的各种操作;
4、理解C 对象模型,比如对象指针、虚函数表等内容,以及类的构造过程,以及在此过程中编译器会在背后做那些事情等等;
5、能够使用C 做程序设计,这里除了基本的OOP思想外,最重要的是熟练应用设计模式;
最后,再对C 发一点牢骚,虽然我还在使用C 做开发(部分任务已经使用其它语言),但是我认为C 是一门尴尬的语言。谈效率吧,它不如C语言简单直接;谈面向对象设计吧,它又不如C#、Java等纯粹;谈开发效率吧,它又不如Python高效……太多的功能如模板、智能指针、多重继承等让这门语言变的越来越复杂,所以我是越来越不喜欢C ,并且建议程序员不要将C 作为首选开发语言。
为什么学了一个学期的c语言,感觉一直都是在用代码去做一些简单的数学题,没有什么实际用途?
”学习C语言用一个学期,而且感觉是用代码做一些简单的数学题,没什么用途”,这说明你的感觉是对的,老师的教学方法错了,必须彻底改变学习方法,以提高学习效率。象这种底层的高级C语言,一般学会并熟练使用,时间不超过两周。
学习编程语言,绝不能象高数一样,一节一节地学扎实,推理有据。编程语言类有它的学习方法。
我九十年代初,在工作中学C语言,两周时间,不仅学会了,而且做了一个集编辑、图形描画、零件程序解释的APP,之前一点基础都没有,就一本介绍库函数及C基础的英文书。
学习第一步:下载并安装IDE,通过做界面程序,验证所学的结构、变量、指针、逻辑关系、文件读写、内存分配、图形界面编写等,不仅学明白了,而且用于实际开发中。很多初学者,老是喜欢钻牛角尖。如变量,unsigned char,char,signed char,BYTE,WORD,int,unsigned int,long int,LONG,LP,void *,int *,pi,p(struct tr*)p等等变量,表达式搞的晕晕乎乎,以致于觉得云遮雾罩,高深莫测。
很多人惊呼:老师水平咋这么高!
初学者建议使用VS编绎器,它对C,C 有极好的兼容性,在VS上做好RC,用子程序实现C的编程学习。
这时我们就陷入了一个学习误区。
学习第二步,把以上的指针、变量写成程序,编绎系统自然会告诉你那错了。有助于快速理解C语言的各种概念。如下图,关于指针、结构:
上图所示代码,指针错了,系统提示error2102错误。指针改正后,如下图:
第三步,把编程语言与数学算法分开。C是语言,高数、线代、微分数值解等是算法。语言学明白了,实际应用时,把算法写成函数库,供以后使用很多人认为,既然AI要用到算法,那么,学语言时,就要先学算法。
大错而特错!算法属于应用,属于数学建模,它是固定的,工作中随时可找到函数库,直接调用。如下,做库函数:
总结:把语言与数学要分开学。学习语言,要边做程序边学习。单纯C语言,学习时间应不超过两周时间。