从入门到放弃C语言-入门篇(2)

请扫码加公众号,周三周六定时更新


上一篇C语言已经推荐了一些我觉得比较好的C语言书籍,这一篇说说两个问题:如何学习C语言以及学习C语言的意义(我不是老师,所以全是我自己认为的意义(微笑))。

 

感觉身边的好友学习主要途径有:书,视频,app。

在我看来,最好的途径:书。白纸黑字的书。

如果把书和另外两个比较,app马上会被排除,因为app内容少,不体系。

在互联网上的视频大部分都是介绍基础语法(可能是我搜索的姿势不对?)。要学好C语言,视频中的内容实在不够,毕竟知道一个指针概念是无法掌握内存管理的;用for循环打印一个数组和写一个漂亮的算法例程是差很远的;知道了递归和理解递归相差甚远,更别说写一个。

C语言并不是用来速成的(见后)。这和视频的目的相差太大,视频的作用往往是帮你迅速去学会使用一个语言。仅仅使用而已。

C语言是需要去了解的,需要用心体会的。这就像想找一个女朋友一样,是需要去了解她是怎么想的,怎么思考的。若不理解C语言,用好是极其难得,也就是说,基础语法完全是不能保障用好C语言的。

 

看书吧,真的。白纸黑字的书。

在我认为好的C语言书当中,往往基础语法只占到1/4左右,有的甚至根本没有基础语法讲解。

剩余都介绍了些什么东西呢?《C语言的科学与艺术》花了很多篇幅讲解库,接口概念,编程方法,一些常用的编程范式(programming idiom),甚至讲解用泰勒公式去实现math.h里面的正弦函数。

每本书的介绍的侧重点都不一样,而每本书对基础语法讲解的篇幅都有限(并不是说那部分讲解的不好,其实基础部分也讲的详细明白),那这些额外的部分真的是看视频能获得到的吗?不见得。

所以第一个理由推荐书是因为,书里面有另外两个媒介接触不到的东西。

 

讲真话,一个没有接触过编程的人,通过视频C语言,在学习的过程中往往只是记住了这个怎么用,代码是怎么运行的根本就没有进入脑袋。

比如,可能记住了条件运算符<statement1>?  <statement2>:<statement3>能用来代替一个if-else语句,但是三个statement的计算顺序并没有记住。

看似问题很小,但是C语言往往被作为入门语言,这样问题就大了。对语言背后的东西一点都不知道在学习以后的语言是会很累的,因为不知道这个语言会被如何运行,在一个语言下会不理解,在另一个中也会不理解。

所谓入门语言,入门语言对未来的语言学习起到至关重要的作用。第一个不懂,后面的就很难再顺利了。

推荐书的第二个理由在于,只有在书中,你才能知道语言是编程程序后是如何运作的。这影响到后续语言理解程度和融汇程度。

 

 

 

       事实上,在我看来C语言并不适合做入门语言,国外其实也有很多学校把入门语言设为java。

       但是,C语言对我来说算是真正意义上的第一语言,我只能从用C语言入门来讨论意义,否则就是乱说。

       我查了一下,C语言的应用主要方面有:理论研究(算法方面),操作系统,硬件编程(几乎所有嵌入式)。别的我基本都没搜索到。

       这其实对很多人失去了意义,因为学习C语言对于后来从事的完全没有关系。

       在我看来吧,C语言练得是内功。一是编程内功,一是语言的内功。如果用有没有用来衡量就没意思了。

 

       编程内功衡量的是用编程来解决问题的能力,C语言拥有的库真的不多,也就是说需要不断的自己去编写一些奇怪的代码,在这些编写的过程中,不断得提炼自己的想法,思维,久而久之,这种能力才会随之提高。这并不是说别的语言不行,只是我觉得这种接近底层的语言的训练强度会大很多,毕竟你写个数据结构出来往往都要接近100行了。

 

       语言的内功,这一点我也是前一阵子感觉到的,因为什么呢,直接拿例子出来吧,自己体会。

       程序目的是处理n个元素的数组,不处理第k个元素。

       我的代码:

              for(int i=0;I <k-1;i++)

                     statement;

              for(inti=k;i<n;i++)

                     statement

       bettercode:

              for(inti=0;i<n;i++)

                     if(i==k-1)

                            continue;

                     else

                            statement;

       后面那段好当然不是因为效率,效率不如第一个。

好在对语言的使用上,之前写过很多类似第一种的代码,但是从来没有考虑到continue过,而continue其实是比较少用(或说我比较少)的改变循环过程的语句,使用的这种写法在我看来真的算是语言内功非常深厚的。

 

前面说过C语言不是用来速成的原因就是这里。用速成的方式去学一门内功心法是容易出事的。

曾经老师对我们说C语言将是你们毕业都不敢说掌握了的语言。的确是。

C语言要的就是练就这两种内功,前者帮助你能脱离语言桎梏用脑子去编程,后者则是帮你驾驭计算机,是语言真正成为你的工具。别的语言一样都能练,但是吧,在我看来C语言的强度大太多。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值