做中学learning by doing——个人感想
概要
- 阅读五篇博客后的感触
- 我的个人技能
- 个人经验的类比与总结
- c语言学习情况
- java学习目标及规划
- 公文写作能力
我的感触
仔细阅读了老师公众号回复的五篇文章后,我感触颇深。
老师在每天一万步,一周减十斤 中提到:
防止“破窗户很重要”,防止破窗可以有一个有共同目标的团队帮你
破窗理论即环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉。确实,每个人的自控力不同,“破罐子破摔”我们都听说过,坚持的过程是漫长的,若我们长久搁置自己的目标,就很有可能由“暂停”演变成“终止”,最后彻底放弃。
团队的激励机制是帮助我们“咸鱼翻身”的重要途径,团队成员相互监督,彼此鼓励的良好氛围能为我们出现极点时提供巨大帮助。
初中有一段时间,我每天早上和爸爸一起晨练。只跑了十多分钟,我就感觉极端痛苦,嚷嚷着要停下来休息。爸爸跟我讲:
当你跑到某个距离时,就会出现最难熬的一段路,但只要咬牙坚持挺过去,就会进入下一个阶段,身体会开始进行机械运动,不会感受到痛苦。
当你觉得坚持不下去时其实别人也一样,但如果你选择放弃,就会被别人超越。
这是我第一次接触到极点的概念,它科学的解释是由于内脏器官的惰性使氧气供应暂时落后于肌肉活动的需要,再加上肌肉活动产生大量代谢产物不能及时运走,跑一段时间后,就会不同程度地出现呼吸困难、胸部发闷、四肢无力、跑速下降,产生难于继续跑下去的感觉。
当极点产生时,一定要以顽强的毅力坚持跑下去。要加强呼吸的深度,适当调整跑速,这样“极点”现象就会缓和,“第二次呼吸”也就出现了。其实在学习中、生活中有许许多多的极点,尤其是在接触一个新的领域的知识时,比如下学期的java,总会出现比较艰辛的过程,但如果不咬牙坚持,就永远停留在浅层,永远无法感受到熬过苦涩后的甘甜。在极点处万万不可自我放弃,要跟紧RocEDU.IS2015微信群这个小团队,避免出现“破窗” ,否则很可能会影响对整个学科甚至一个领域的学习
水中畅游的鲸
老师在乒乓球刻意训练一年总结中讲述了提升乒乓球水平的经历,唤醒了我加强游泳技能的那段岁月。
去游泳的根本目的是塑性。我尝试过跑步、瑜伽、 节食等方式,但因为我本身对跑步这种需要挑战身体忍受极限有抵触,节食又让我产生“精神上的饥饿”,经常吃的更多,所以都没有坚持很久就放弃了。但游泳不一样,无论游了多少米,永远不会感受到精疲力尽,过程中不会痛苦,结束后也不会食量大增。
经过
大二下学期的游泳课有一定游泳基础的我选择了基础班,目的在于细化动作,让自己变得更加标准。要做到容易,但做好却很难。就像老师说的,自己一直在走野路子,水平没法提高,所以要想做到精,少不了刻意训练
一旦某个人的表现达到了“可接受”的水平,并且可以做到自动化,那么再多“练习”几年,也不会有什么进步,而且还会缓慢退化。有目的的练习则更加有效。
- 有目的的练习是为了进一步提升自身能力和水平,那么首先要有不满足于当前的“雄心”,以及想要做到最好的“壮志” 。
- 我的个人激励法
- 物质激励法
- 环境激励法
- 捆绑激励法
暑假去了一个私人游泳馆,现在想想还觉得恶心。水面低于外壁,水色发黄,还时不时有苍蝇从眼前漂过,对比之下我有了回学校坚持游泳的想法。客观物质条件确实可以起到激发我们投入某件事的热情,例如买了一根新的笔就总是想用它记些什么,这一定程度上可以提高学习积极性。但物质条件并不依赖于金钱,态度可以改变物质因素的作用,不可偏激的花费大量金钱去买用品,舍本逐末。
最初我只在浅水区里游泳,可随着我游泳水平的提高,我发现自己的速度已经可以超越浅水区里的所有人,绕过挡在前面的人浪费了很多时间,于是我考取了深水证,开始去深水区进一步练习。考深水证时要5分钟以内游完200米,我的成绩是5分多几秒,这让我认识到了自己的不足,也让我发现浅水区对我的蒙蔽作用。只有到更高处,才能看的更远。 现在我可以基本上超越深水区里最左侧泳道里的所有人,但绝对谈不上比90%的人都要好。而且我知道这并不能证明什么,因为自己还没有去更快的泳道尝试。环境的作用是不容小觑的,更强大的对手成就更强大的自己。
学校没有在中楼一层开通新门之前,女生洗澡要从外面绕道另一个院子,很不方便。两天一次的游泳正好为我提供了洗澡的机会,所以我将洗澡和游泳两件事捆绑在一起,这在很大程度上起到了督促我坚持游泳的作用。捆绑法还可以应用到Java学习上,把学习任务和其它激励机制捆绑,可以有效的提高积极性,帮助我们保持持久动力。
c语言学习情况
- 学习c语言的方法和经验
- 我利用了大量课余时间自主做题,步骤是先复习课堂知识,再分模块分专题的刷题。最后所有知识点学习完毕,我会选择随机题库,通过问题再回头强化书中知识点。实验方面,我会尽量在课前编好程序,课上进行调试或有针对性地解决问题。我个人经验是将笔记写在教材上,一本书解决所有问题,对于易忘点、难点做好标记。最重要的是听课后课下练习的过程,因为语言类课程是要会应用而不是仅仅理解。做中学是最高效的学习方法。
- 学习c语言和游泳不同的是知识点更多,练习不可间断,相同点是后续知识往往以基础知识为根基,所以打好基础,学好“蛙泳腿”才是后续工作进行的前提。
- 代码数量和理解情况
- 估计自己大概编了几千行代码,刷题的时候往往新建一个文件,编写新的就直接把旧的删除了,最后额外保存了一些需要问老师的题目。
- 上学期对c语言理解掌握情况较好,但经过一个暑假加一个学期,有些知识点已经模糊不清了,可见当时学习的还是不够扎实。计划利用这个寒假认真复习c语言,为下学期的java和二级考试做好准备。
- 指针概念区分
- 数组指针:本质是指针,指向了数组,有行指针也有列指针。
- 指针数组:本质是数组,由多个类型相同的指针构成。
- 函数指针:本质是指针,指向了函数。
- 指针函数:本质是函数, 形参为指针变量。
- 文件和流的区别和联系,如何区分文本文件和二进制文件,如何编程操作这两种文件
- 学习c语言后我对这些知识的掌握还很欠缺,知识体系中存在漏洞。通过查找资料我了解到:
- 文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。流是一种分段操作,不会永久存在,文件是实体,被固定存储。
- 文本文件中的每一位数字都单独占用一个字节的存储空间,而二进制文件则是把整个数字作为一个二进制数来储存的。详细区分如下:
能存储的数据类型不同、每条数据的长度不同、读取的软件不同、操作系统对换行符('\n')的处理不同
-- 引用自《 文本文件和二进制文件比较》
- 编程操作:
- 文本文件:
...
FILE *fp;
if((fp=fopen("demo.txt","w"))=NULL)
{
printf("Failure to open demo.txt!\n");
exit(0);
}
else
...
fclose(fp);
...
- 二进制文件:
...
FILE *fp;
if((fp=fopen("demo.bin","w"))=NULL)
{
printf("Failure to open demo.txt!\n");
exit(0);
}
else
...
fclose(fp);
...
- 面向过程程序设计
- 面向过程即将任务分成几个过程来实现,即划分不同模块,最后在主函数中将几个模块组装在一起,即“穿线”,实现目标。具体可以通过调用函数等方式,从部分到整体,从细节到全局。
- 方法:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用。参考什么是面向过程的程序设计
- 模块
- 在程序设计中,为完成某一功能所需的一段程序或子程序;或指能由编译程序、装配程序等处理的独立程序单位;或指大型软件系统的一部分。个人理解,模块就类似于上面所提的步骤,穿线时的“珍珠”,程序设计中主要指子函数。
- 我还没有编写过多个源文件的程序。
- 高内聚,低耦合
- 高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则;低耦合是指让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。
- 在高质量的程序设计中模块内部加强个元素之间紧密性,模块之间尽量减少联系。方法之间的嵌套尽量要少,如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分,这样有利于修改和组合。
- 编程实现数组系列问题
- 把数组A的内容复制到数组B中
#include<stdio.h>
#define N 5
main()
{
int a[N],b[N];
int i;
printf("输入数组a:\n");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
printf("b数组:\n");
for(i=0;i<N;i++)
{
b[i]=a[i];
printf("%d\n",b[i]);
}
}
- 查找整数数组A中有没有数字5
#include<stdio.h>
#include<stdlib.h>
#define N 10
main()
{
int a[N];
int i;
printf("输入数组a:\n");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<N;i++)
{
if(a[i]==5)
printf("a[%d]:5!",a[i]);
exit(0);
}
}
- 如何对整数数组A进行排序(以从大到小为例)
#include<stdio.h>
#define N 10
void Paixu(int score[],int n)
{
int i,j,temp;
for (i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(score[j]>score[i])
{
temp=score[j];
score[j]=score[i];
score[i]=temp;
}
}
}
}
main()
{
int score[N],i;
for(i=0;i<N;i++)
{
scanf("%d",&score[i]);
}
Paixu(score,N);
printf("从大到小排序后:\n");
for(i=0;i<N;i++)
{
printf("%d\n",score[i]);
}
}
- 统计自己C语言共写了多少行代码
#include<stdio.h>
#include<stdlib.h>
void main(char *argv[])
{
FILE *fp;
char ch;
int n=0;
fp=fopen(argv[1],"r");
if(fp==NULL)
{
printf("\nFile is not found.");
exit(0);
}
while((ch=getc(fp))!=EOF)
{
if(ch=='\n') n++;
}
printf("\nThe number is: %d",n);
fclose(fp);
}
- 断点
- 断点是人为设置的,意思就是让程序执行到此“停住”,不再往下执行。
- 自己调试程序的例子:在我上学期使用指针函数时,我利用老师教的“单步调试”的方式对函数传参过程进行分析。 以我的理解,单步调试时,最初将光标锁定在某一行,就相当于一个断点。
java学习目标及规划
希望自己能够通过java这门课熟练掌握这门语言,不只局限于“合格的初学者”,而是要达到“专业”的目标。次外,我希望能够了解更多相关领域的知识,积累学习经验,养成良好的学习习惯。
刻意训练:我会就自己薄弱的方面进行专攻,课下多做、多问,课上认真听,做好标记。编程能力的提高主要靠做难题,和多练习,难题培养思维,练习提高熟练程度,就像老师在五笔学习中的要求:“手比脑快”,这就要通过大量的练习来实现。做中学的教学理念中提出了一万小时理论,我要在练习中多总结,与老师积极互动,形成及时反馈,在实践中不断实现自我提升。
公文写作能力
我的公文写作能力离“提笔能写,开口能说,问策能对,遇事能办”的目标还有很大差距。首先下决心要从寒假开始每天看半月谈积累语言和素材,丰富知识储备;其次,我准备把每天写手账的习惯坚持下去,并且要通过刻意训练,组织更好的语言,而不是像现在一样写小学生作文;最后,我会养成常看报纸杂志的好习惯,通过阅读提升写作能力。