最新动态

编程不死板

2016年6月13日 / xiaochun, liu / 分享活动

学习编程分为两个步骤:1 学习计算机语言的语法 2 学会用语法去表达编程思想
大多数朋友们认为编程时枯燥的乏味的,其实他们只看到了第一层次也就是卡在了第一个步骤上。我们不得不承认学习计算机语法的过程是很耗时的,也是很枯燥的。需要不断地去上机打代码去磨练。语法的学习靠大家慢慢啃,付出时间越长在第二个阶段受到的阻力越小。
当有天你接触到技术的时候,你会发现无论你是做编程比赛,还是利用单片机通过编程实现功能,甚至做一些更高级的东西,他们都是通过编程来表达想法的。所以你的编程内功直接决定了想法表达或者计算机执行的效果。为了在将来有着更好的发展方向,重新带着一股全新的状态拾起你的C语言书籍,把它先当成一种语言,去细心学习它的语法语意。通过上机实践尝试去和计算机沟通,把它当成一个具有生命的你的伙伴。慢慢的你会发现语法已经逐步掌握了,并且你所关心更多的计算机如何更好的去执行,或者我怎么才能更简单更简洁的去传达我的想法,于是乎算法的概念油然而生。
我们希望通过以一种一系列文章的形式,帮助大家找到编程的感觉,给大家对编程的一个重新的定位。这也是我们整个相关C语言分享的名字“编程不死板”。整个原创C语言分享的文章分为上下两部。上部分中我们会先给大家解释用计算机语言去描述一件事情需要哪些基本的原材料,“量”这一篇文章就是说明这一个问题的。然后引导大家的思路去和电脑进行交互,“交互”这一篇文章用特有的角度说明了C语言stdio.h库中基本的输入输出语句,同时也引入了一些新鲜的交互的技术设备。最后呢在“描述”这这一篇文章中我们解释了计算机几大主要语句在描述事件中的主要作用。这样大家在学习C语言的过程中能带着一个全新的自上而下的态度去理解它。我们也会在接下来的一两个月中推出我们分享的下半部,下半部的分享更加精彩请耐心等待哦!
最后我们专门为“程序不死板”建立了专属的QQ群,群号是:181601326 ,大家可以交流编程的心得,提出自己在学习编程的时候的困惑。我们也衷心希望阅读我们文章的读者能对我们提出批评和指正的建议和意见,我们会根据你们的建议不断完善自己,不断提高分享文章的质量。
希望每一位读者能够通过阅读找到属于自己的方向,谢谢大家!

此系列有四篇文章,PDF版本请联系我们

 

建立“量”的概念

不论你的C语言基础有多少,放心大胆的去想一想这样一个问题:假如让你去用C语言去描述一个问题,你会需要那些原材料?(尽管你不会任何编程的东西,但是放心大胆的去向)。假如试着这么去设想:你想用电脑去统计你的室友的身高,然后计算出一个平均值。问题就来了,身高这个量和室友这个量明显属于不同的类型嘛。既然是不同的类型,在C语言中就有不同的数据类型。数据的类型是学习C语言的最基础的部分,就好比与学习英语的基本be动词一样,无论成许多大都是由几个基本的单词组成的。
基本的数据类型分为:整型、浮点型、字符型。其中每一个数据的类型又可以分为两个小类型:常量和变量。即整型常量(变量),浮点型常量(变量)…
计算机为什么要区分这几个数据类型呢?其实原因如下,首先计算机存储不同数据的方式是不同的。这样就保证了最优化存储空间,也保证了数据运行的稳定性。不同的存储空间对应了不同变量的最大值。
如何才能在计算机中编出一个整型或者浮点型的数据呢?请看我们是如何操作的。

更多的语法的东西希望大家上书中去查阅相关资料,自行补充知识点。所以在看任何一本有关C语言的教科书的时候要去学会理解书中能表达的是什么。如果书中写的更多的是基础的语法,那么你就要学会扩充自己对于知识的理解。如果书中欠缺强调语法的东西的话,你就要加强自己对于语法的规范咯。

“量”与“量”的那些事
有了基本的量,我们就可以让计算机进行基本的运算。(其实这也是为什么人们发明计算机)。进行计算我们需要什么?答案是符号!翻开你的C语言书查阅“算术运算符和算数表达式”这一节。其实一些基本的运算符号大家是都可以理解的,其他的一些运算符今后的学习中会不断遇到的。
大家较为陌生的应该是逻辑关系。什么是逻辑运算呢?逻辑运算分为:与、或、非,三种关系。假如a与b事件进行逻辑“与”操作,那么a和b事件同为真的时候整个逻辑操作最后的结果才能表明真。逻辑“或”操作逻辑上的关系就是一真即真,逻辑“非”就是把结果颠倒一下,真变假,假变真。
其实量和量之间的运算的关系、逻辑关系,都要遵循着一定优先级。就像数值混合运算 1+3*2 它的运算是要按照一定的优先级进行的。 具体编程的时候写出来运算的表达式和你理想中的吻不吻合就要比照运算符优先级的表格啦。

数据类型、运算符、表达式
这三个老家伙其实没有那么可怕,只不过大家陌生的是把之前草纸上一些公式通过编程表达出来。看书自学的过程其实就是学习语言的过程,当你能够熟悉C语言的语法,并且培养自己的编程思想之后。你就可以很顺利的和计算机沟通,并告诉她你的想法。剩下的就交给计算机来做吧! 我先喝口咖啡。

什么叫与电脑进行交互?

就像大家现在电脑用的软件一样,你的每一个动作都正在被计算机记录、分析,然后执行处理。所以我们编写的程序肯定也分为这两部分,一个部分是通过一定的语句获取使用者的信息,另一部分是把从外部获取的和自己内部之前定义的信息。其实第一部分就是我们着重要强调的“交互”的概念。
大家能接触到的简单的交互就是“输入”和“输出”。简单来说就是要求用户输入一个特定的值传递给程序设定好的一个变量,或者输出一个计算后的变量的值。printf和scanf以及putchar和getchar的语法在书上会有详细的说明,在这里不对语法进行讲解。要注意printf输出变量和scanf输入变量一定要做好“一一对应”。为什么这么说呢?首先就像之前讲的数据类型对应不同的存储空间一样,如果本来一个数据在电脑中占据着4个位置,在输出的时候只给出了三个位置,数据就没有被很好地表达出来。
其实还有一种另一个意义上的交互方式,比如你想用C语言去和电脑上的一个文件建立起联系。绝大部分中普通的C语言管这一块的知识叫做“文件操作”,大家学习编程的时候可以提前学习这一块的知识,不过里面涉及到一些指针的概念,初学者请慎入。不过这一块搞懂了思路会很好的打开,比如你可以编出一个默默执行在规定目录下的表白书什么的,这没准是一个程序屌丝追女孩子的一个含蓄的表白方法哦!

你想做“高级”的交互吗?
大家接触到的体感也是交互的一种方式。程序通过图像把用户的信息进行采集,然后程序中存在着一系列的变量来把对应信息进行处理。所以搞电的同志们,你们将有更多的机会寻找更有创意的交互方式。具体外部传感器的使用和单片机与电脑的通讯,我们将放在单片机系列的文章中和大家一起讨论。
现在你对手机的操作也在进行一项最为伟大的“交互”的发明,其中的“手势识别”就是获取基本信息的一项重要的技术,程序把不同的手势进行检测、分类、识别,最后转化为变量交给程序。
所以嘛,程序无所不在,交互无所不在。当你拥有更多的技能的时候(比如单片机、PCB设计、上位机设计),你就会设计出一个自己理想的系统,然后通过一些外部设备获得你所需要的交互信息,然后通过算法实现功能。
眼光放长远之后,还要看好脚下的路。通过C语言基础的学习,你会逐步掌握printf和scanf(最常用的)作为基本的与电脑进行交互的使用方法。通过这两个语句你能够去检验算法的执行情况,或者人工干预一些算法…… 上位机软件制作其实就是设计一项拥有成熟的交互方式,并且拥有成熟的算法的一个程序。什么叫成熟的交互方式呢?比如说程序窗口按键、菜单、自定义图标。这些都是可以通过程序通过编程调用出来的,其实有些底层的模块已经在微软系统的C盘某一个文件夹下的.c和.h文件给出来了。如果以后大家能够接触到MFC或者Labview的话,你就能更快速的进行上位机软件的开发了。

与自己的思想进行“交互”
如果你发现自己越来越对程序啊,软件啊这样的东西越来越敏感的话,这就说明你的兴趣现在被激发出来了,编程的思想啊,灵感啊也会随之迸发出来。编程其实不是大家普通意义上的好像只有以后工作的程序员才会接触的东西(我高考报考的时候其实就是这么想的,认为只有学计算机才会接触到程序),以一个过来人的角度我想帮助你们更好地理解编程。如果你愿意理解编程,那么就继续阅读此系列文章吧!

 

 

“我”怎么听不懂你“说话”

 

如果电脑能够说话的话,我想刚开始做为一个初学者编程的话,每一次程序都亮红灯电脑肯定想和你说:我怎么听不懂你在说什么。  所以学习编程注意语法很重要,也是最基本和最基础的。语法搞不懂,高级的编程思想就更不要急于求成了。语法任何人都帮不了你,只有慢慢看书然后上机巩固了。

电脑其实更想通过编程简洁明了的知道你要表达的思想。假如:我想让计算机打出三次“I Love C Language”

首先我可以这么写:

更简单的方法也可以这么去写:

循环就是这样诞生的,C语言的发明者发现,简简单单建立一些语句难以满足一些复杂需求的时候,循环、选择、判断语句就这样诞生了。其实这和描述人的思想是一样的,人去思考一件事情,通过选择能够进行取舍,通过循环能够进行思考的深入。所以像if/else,for,while,switch就是作为这样的一个角色存在着。理解好你要表达事情的逻辑之后,剩下的就是把这个逻辑按照一步一步进行排序并且进行封装。比如:一个大循环之中可以包含着一个判断,判断中可以包含着选择…… 这一切的一切就在于编程者把自己的思路理清后借助语言去表达出来。我认为到这阶段的学习不一定是语法不明白,更多是逻辑思路没有很好的思考清楚。

 

 

“逻辑”真的这么重要吗?

编程能够解决很多实际问题,首先要做的就是把问题进行建模分析,推导出来基本的数学模型或者求解此问题的一系列的数学公式。在我学习图像的过程中发现一些线性代数求解问题或者最优化求解等问题是如何一步一步通过编程实现的,我也很赞叹编程者的创造力和想象力,以及很高水平的逻辑严密性。所以科学的魅力就在于其严谨的逻辑性,也就是说编程能力强的人逻辑性不会差的。

在今后的学习中,不妨给大家提出几点锻炼自己逻辑性的能力。生活中看到的一个问题,你试着去把它当成程序去思考,先去思考程序的开始和结束。比如:一件事情是怎么开始的,最后是怎么结束的,是不是可以把它们比作成变量,最后通过变量值的改变来体现事件发展。

刚开始的阶段就像整个程序建模的开始。然后去用几个逻辑关系去叙述整个事件,也许途中你会引入新的变量,或者进行数字的运算。这一个阶段的过程更像是整个建模的最核心的部分,我们也把它称之为“算法”。程序的后期处理每个人就大体不同了,我比较倾向最后对结果进行简单的分析操作,然后进行检验,最后通过交互的方式把它表达出来。 逻辑的严密性是需要通过不断的锻炼才会磨练出来的,从生活的事情开始从课本的题目中开始,把它当成一项挑战来做,编程的思维慢慢的就培养出来了。

 

 

未来的路还很长

编程无处不在。无论以后从事电相关,从事控制相关,从事软件相关的行业都需要大量的人把思想转化为机器可执行的代码。现在社会最缺的是什么人呢?答案是兼具着科学的头脑和编程的能力的人才,社会需要这样的人能够创造理论,并且把它做出来。这样理论和实践就建立起了桥梁,才能推进整个社会的进步。所以各位,你们现在可是学习着一项伟大的学科,这个学科甚至以后直接能够决定发展的平台。

乔布斯曾说过:人生就是经历由果及因的过程,终究会有一个点很切实的来到你的身边,并把你之前你所经历的东西如同穿绳一样全部穿起来。所以Stay hungry stay foolish . 我想跟大家说,未来的路还很长,借鉴优秀的思想并规划出适合自己的路是最要紧的。

关于编程分享的上半部要接近尾声啦,我们会在接下来的日子里随着大家学习C语言的深入再去把编程分享的下部呈献给大家。希望大家能够和我们联系帮助我们改正错误,我们非常愿意和小读者们交流心得。

最后连接一下我们的联系方式:

1 本系列分享专属群“程序不死板”QQ群号:181601326

2 羽良工作室科学技术官方QQ群号:74653515

发表评论

电子邮件地址不会被公开。

*