从入门到放弃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语言的强度大太多。
从入门到放弃C语言-入门篇(2)相关推荐
- 计算机c语言入门.ppt,计算机c语言入门经典
计算机c语言入门经典 C语言对编写需要进行硬件操作的场合,优于其它高级语言.小编为大家分享一些计算机c语言入门经典,欢迎参考! 一.开始之前 FAQ 那是什么 为何有这篇FAQ 编程为何物 如果这就是 ...
- C#forUnity快速入门(连载2)-C#语言入门
C# for Unity 编程语言快速入门教程(连载2)---C#语言入门 接上篇内容,我们把更多的C#语言入门级编程习题发布如下,希望能够对C#编程小白提高技能有帮助. 三: 学习循环语句(续) ...
- c语言入门教程文库,C语言入门教程(全集)课件
C语言入门教程(全集)课件 01123364105 Y N p AB X=0? YN P1 A A P2 a a b b Y Y N N y n A B P A A B X=0? 3 a97 3 U ...
- c语言入门经典案例,c语言入门经典案例及飞源代码.doc
c语言入门经典案例及飞源代码 循环控制输出图案 [程序1]题目:输出9*9口诀.1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列.2.程序源代码:#include "stdio.h ...
- c语言入门经典doc,C语言入门经典C语言编程.ppt
C语言入门经典C语言编程.ppt 第01章 C语言编程,C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序即一组指令,并让计算机依指令行事 ...
- 肺炎在家自学C#--从入门到放弃然后又入门又放弃又入门
入门到第一次中断 去年的工作太忙,工作知识涉及面又广,大量学习的是管理经验,以及半导体检测设备现场故障处 理.下了班每天学一个小时软件,几个月过后,学习了有一百个小时.就没有然后了. 正如一切自学那样 ...
- MySQL非分片字段查询_Mycat从入门到放弃-Go语言中文社区
当初写这篇文章的初衷只是想提醒自己在用一个开源产品前不仅要了解其提供的功能,更要了解其功能和场景边界. 1.非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的.例如下图中的一个My ...
- 《Java从入门到放弃》JavaSE入门篇:文件操作
Java中的文件操作还有点小复杂··· 不过没关系,我会把它讲得很简单,嘿嘿嘿!!! 在讲Java中的文件操作前,先了解一个概念--"流",比如我们把一个杯子的水倒到另一个同样大小 ...
- 《大话脑科学》之:熟练掌握十门外语之从入门到放弃之语言相关ERP
上回说到丞相与小许漫步花园中,丞相介绍过几位erp猛将,如p3(吕布),n2(张辽),详情请见大话 大话脑成像之十七:三国风云之ERP的基础(直接点击),小许对丞相的敬仰之情如滔滔江水,连绵不绝,纳头 ...
最新文章
- SVN 图标和工具、wc.db学习
- JVM调优:打印所有-XX非标参数命令
- linux C++怎么转java?从云计算切入容易么?
- c++11:智能指针
- CodeBlocks配色方案设置(简单易懂)
- 低解密指数攻击_CTF中RSA的一些攻击思路
- java之split用法注意
- 计算机信息管理学书心得,学习erp的心得体会共计5篇
- Sql Server 增加字段、修改字段、修改类型、修改默认值
- P、NP、NPC和NP-Hard相关概念的图形和解释
- cppc文件无法正常输出汉字,将文件修改为UTF-8格式
- Linux问题_02:tar: 它似乎不像是一个 tar 归档文件
- PDF怎么转换成Word?来看这两个方法
- 阿里云网盘内测申请_最新阿里云网盘官方申请地址,哪里可以获得阿里网盘内测码?9月23日截至...
- GStreamer基础教程之GStreamer工具
- 出现顺丰丢件很好办,做好这几点就可无忧
- 海港中学2021高考成绩查询,热烈祝贺海港高中2020年高考再创佳绩
- teamviewer for linux安装
- 姚振华,一个想要胜天半子的男人
- 专享策略04 | 商品通用套利模型(二)
热门文章
- office右键没有新建word,Visio等解决办法
- 西安信息资源网(计算机电子书)
- Win10连接WiFi显示无internet,安全 却可以正常上网(转)
- chapter.初识1.1(正则表达式一)
- 商务数据分析与应用类毕业论文文献有哪些?
- Android设置背景色
- Java实现输出水仙花(易懂)
- ndk编译 错误:dlopen failed:cannot locate symbol 一个符号 referenced by 你的库.so/.a lang.UnsatisfiedLinkErr
- Altium 布线技巧
- JAVA中extends与implements详解