《做中学》读后有感

《做中学》读后有感

最近读了娄老师的“做中学”系列文章,有很大感触,今天想着重谈一谈我在学习方面收到的启发。

如何成功get一项技能

如果问到“如何开始get一项技能”,我想我们应该是最有发言权的一代。从小就被爸爸妈妈引导着参加各种课外班,钢琴画画舞蹈书法,或情愿或不情愿地,“被掌握”了一身技能。但是仔细想想,又有哪项技能真正能凌驾于众人之上,可以自豪地被称为“特长”呢?

以我自己为例,小时候连续几年利用寒暑假及周末课余时间学习拉二胡,可是等我终于摸到门路,学会换把,能演奏《赛马》之类的乐曲时,却因为升学压力变大渐渐减少练习,直至高中不得不放弃。所以,我从不敢说自己的二胡水平能凌驾于大多数人,毕竟比我专业的人太多太多。

不过,学习拉二胡的过程却给了我很多启示。

由于开始学习二胡的时候我年龄很小,使劲伸直胳膊才能把琴弓拉开,所以光是持琴持弓的姿势就练了很久。后来慢慢开始学着识谱,拉出不成调的曲子,不断听了练,练了听,模仿老师,修正自我,最终竟也能拉得像模像样了。在这期间,常常每天一练就是三四个小时,胳膊酸麻,左手食指也被琴弦磨出了茧子,但就是不肯停下来歇一歇。我拉二胡的水平就是在这个时期突飞猛进的。

现在想来,一项技能从入门到精通,往往需要以下条件:

  • 强大的意志力。就像我学拉二胡的那段日子,小朋友叫我出去玩我也不应,最后找到我家,也只能坐在旁边看着满脸坚毅的我扣着乐谱,端着琴弓。所以说,不管是兴趣所致,还是现实所迫,总之必须找到一个让你坚持下去的理由,横下心来达到即定的目标。

  • 必要的练习。学习二胡需要大量练习,这是毋庸置疑的。在练习中逐渐摸索,逐渐熟悉,逐渐提高。不管是高考前期老师要求的每天三套题,还是如今Java学习需要编写五千行代码,都是通过必要的练习为技能的提高打下基础。这一点我在看完娄老师的博客后深有感触。娄老师在「做中学(Learning By Doing)」之乒乓球刻意训练一年总结一文中记录了他学习乒乓球的过程:

“这一年训练,平均每天挥拍7000多次,一年200多万次;这一年训练,打烂了100多个乒乓球;这一年训练,穿烂了两双乒乓鞋......”

  • 指点迷津的老师。俗话说:“严师出高徒。”现在回想起我的二胡老师,我仍怕他三分。他从来都是毫不客气地批评我的错误,在他的严格要求下我也从不敢偷懒懈怠。不过正是有了他的指点,我的技术才能在短时间内有很大的进步和提高。庆幸我又遇到了一位严格要求我们的老师,不管是定期写博客还是每天背单词,娄老师带给我们的绝不仅仅是知识本身,更是一种积极健康的生活态度以及知难而上的精神品格。

学习拉二胡的过程对我来说是一笔不小的财富,在接下来的学习中,我会拿出不服输的劲头,加强练习,同时主动向老师请教,尽我最大努力学好Java这门课程。

有关C语言学习的调查

你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?

  • 我学习c语言的过程大致分为:课前预习、精读教材、课上听讲、课后练习、归纳改进这几个部分。重中之重还是课后的练习。非常感谢徐小青老师的严格要求,让我们养成了每天编程15道题的好习惯。其实无论哪一个部分,都与一行一行的代码练习是分不开的。就像韦钰老师的 做中学”/ “Learning by Doing” 理念一样,“做了才会”,只有亲手编程,才能从一次又一次修改bug的过程中得到提升。

目前为止估算自己写过多少行C代码?理解的情况如何?

  • 上个学期的学习过程中,差不多两个月的时间有每日编程任务。按照每天独立完成7道无重复的题目来计算,前20天编写的代码是较为简单的,每道大概在15行左右,后40天难度有所加深,每道平均需要30-50行。所以说,经过上学期c语言编程的严格训练,我认为完成下学期Java课程要求的5000行代码并非难事。由于C语言期末考试并未涉及到结构体和文件操作,所以平时也没有着重训练,相对而言比较薄弱。

学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?

  • 数组指针是一个指针变量,用来指向二维数组;而指针数组是指一个数组,里面存放了多个指针变量。两者的本质是不同的。同样道理,指针函数是带指针的函数,本质上是一个函数,返回值是指针;函数指针是指指向函数的指针变量,函数指针指向函数的入口地址。

学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?

  • 通过课下的自学,我大致明白了文件和流的关系。流在C中就是一种文件形式,它实际上就表示一个文件或设备。这种和流等同的文件也可以称为流式文件。当流到磁盘而成为文件时,要启动磁盘写入操作,这样流入一个字符或者流入一个字节均要启动磁盘操作,将大大降低传输效率,并且影响磁盘的使用寿命。文本文件中的每一位数字都单独占用一个字节的存储空间,而二进制文件则是把整个数字作为一个二进制数来储存的。例如:单词“August”用文本文件或二进制文件储存都占据6字节,而1234.56在文本文件占据7字节,在二进制文件占据4字节。因此从储存使用情况来看,二进制文件更紧凑一些,占据更少的磁盘空间。

学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?

  • 以我的理解,面向过程是把解决问题的步骤一一列出,用函数实现,需要时调用函数完成,是比较基础和原始的。

在C语言里面,什么是模块?你写过多个源文件的程序吗?

  • C语言的编程是基于模块的。以函数为例,在主函数调用各个不同功能的函数,而每一个函数独自完成不同的功能。如需修改,只改动每一个模块即可。由于我现阶段编写的程序都较为简单,还没有涉及大程序,所以也没有尝试编写过多个源文件的程序。

学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?

  • “高内聚”,即模块内部各个部分的紧密程度很高,能够很好完成某一特定功能;“低内聚”,即不同模块之间的联系很弱,各个模块相互独立。“高内聚,低耦合”可以使系统便于修改、维护和开发,从程序设计来看,这可以让代码变得可读性更强,后期维护更方便。具体来说,不同模块之间的嵌套要尽量少,而同一种功能的模块则要尽量整合在一起,这样一来,模块的功能性更强,如果要对程序进行修改,也可以避免“牵一发而动全身”的麻烦。

学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。

  • 把数组A的内容复制到数组B中:
#include<stdio.h>
#define MAX 10
void main()
{
	int a[MAX]={0,1,2,3,4,5,6,7,8,9},b[MAX],i;
	for(i=0;i<=MAX-1;i++)
	{
		b[i]=a[i];
		printf("%d",b[i]);
	}
}

  • 查找整数数组A中有没有数字5:
#include<stdio.h>
#define MAX 50
void main()
{
	int number[MAX]={0,1,2,3,4,5,6,7,8,9},i;
	for(i=0;i<=MAX-1;i++)
		if(number[i]==5)
		printf("The number 5 is found.");
}

  • 对整数数组A进行排序(以升序为例):
int a[10];
void sort(int l,int r,int n)
{
	int i,j,t,flag,p;
	int k;
	if(r>l)
	{
		i=l;j=r;
		p=a[i];
		flag=0;
		while(!flag)
		{
			do{
				++i;
			}while(a[i]<=p&&i<=r);
			while(a[j]>=p&&j>l)
			{
				--j;
			}
			if(i>=j)
			{
				t=a[l];
				a[l]=a[j];
				a[j]=t;
				flag=1;
			}
			else
			{
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
		sort(l,j-1,n);
		sort(i,r,n);
	}

}
void main()
{
	int i,l,r,n;
	printf("How many numbers? ");
	scanf("%d",&n);
	printf("Enter numbers: ");
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	l=0;
	r=n-1;
	sort(l,r,n);
	printf("Numbers after sorting: ");
	for(i=0;i<=n-1;i++)
		printf("%d ",a[i]);
}

写一个程序,统计自己C语言共写了多少行代码。

  • 由于上学期学习C语言时,只是将Codeblocks看作检验自己程序是否成功的工具,并没有保存所有代码,也没有统计所写代码行数的意识。程序如下:
#include<stdio.h>
void main(char *argv[])
{
	FILE *fp;
	char ch;
	int lines=0;
	fp=fopen(argv[1],"r");
	if(fp==NULL)
	{
		printf("\nFile is not found.");
		return;
	}
	while((ch=getc(fp))!=EOF)
	{
		if(ch=='\n') lines++;
	}
	printf("\nThe number of lines=%d",lines);
	fclose(fp);
}

你知道什么是断点吗?给出自己调试程序的例子。

  • 断点是指,在程序进行过程中,计算机中断该程序而去执行其他程序。在编程过程中可以设置断点进行调试,以确定程序当前的执行情况。在较难的程序中,如果编译出现问题,我会进行调试以查找错误。

《Java程序设计》学习目标

经过下学期Java课程的学习,我希望能够熟练掌握这门语言,编写出高质量的代码,学习Java语言的基础知识以及它的核心类库等等,在不断的练习中得到提高。在学习过程中,我会每天不间断练习并每周进行归纳总结,锤炼代码,改进程序,提高编程水平。“做中学”,即进行实践,动手操作,所以Java的学习绝不可拘泥于书本的阅读,而应该多上机实践。

公文写作能力

由于我的父亲在单位分管文稿撰写的工作,经常购买各种书籍。受到这种熏陶,所以我从小热爱写作,小学中学阶段也获得过校级市级甚至国家级的奖项,我的作品《放手》获得国家级银奖并被收录进作品集《飞舞的剪纸》。这对于当时的我来说是莫大的鼓励。中学时期写作思维受到中考和高考的限制,也没有丰富的课余时间写文章,写作水平也仅仅在议论文、记叙文等文体上有些许提高。

到了大学,我加入了院学生会办公室,有许多公文需要我们学生来写,这才明白公文写作的重要性。在学生工作中,我负责会议纪要的撰写,也尝试写过新闻稿、请示、策划书等等,但明显感觉到吃力,主要原因在于词汇的匮乏以及对党和国家方针政策理解的不透彻。

虽然在过去的一年半时间里,我积累了一些公文写作的经验,但我深知远远不足。所以在接下来时间里,我会着重训练自己对时事政治的分析能力,持续关注党和国家新的方针政策,同时虚心向长辈请教,为今后的公文写作打下良好的基础,努力做到“提笔能写,开口能说,问策能对,遇事能办”。


以上均为个人一些浅薄的认识和见解,尤其涉及编程等方面的内容一定存在疏漏之处,欢迎大家指正~

posted @ 2016-12-16 20:39  0x14b7狄  阅读(439)  评论(3编辑  收藏  举报