做中学读后感
学习是要思考的,仅仅实践是不够的:
不光会动手,还要理解背后的原理
不光会用工具,还要理解支撑的理论
技能是分层次的:
一项技能的掌握程度分为:新手/高级初学者/合格者/精通/专家
对技能要有个期许,不能有了高级初学者的水平就满足了,要有当专家的梦想
实践要具备一定的量才能引起质变:
学乒乓球,没有10万次的练习掌握不了一个动作
学好编程?没有10000行代码的训练量是不够的
技能的提升要「刻意训练」
低水平重复是不行的,训练时间再长都没用
要摆脱「舒适区」,进入「学习区」学习
要循序渐进,不能进入「恐慌区」
学习提升要有反馈
当老师最好的方法是做教练
调过程序的都知道,如果知道哪错了,改起来是很容易的,定位错误在很难,这就是老师(教练)的价值
-- 引用自《做中学》
我认为学习不是一个简单的听取知识的过程, 真正掌握理解知识需要自身的不断练习,只有不断的“做”,才能消化并吸收所听取的知识,就像C语言的学习,当我们知道各种代码的意义时,我们仅仅处于初级阶段,想要更加熟练地运用,就需要我们不断去练习,并掌握一定的套路。
正如做中学中所说的:套路(Kata)指针对某一种特定技术或技能进行重复性的练习,从而将其熟练掌握。这个概念借鉴于武术,指的是可以独自或多人共同练习的一系列动作、招式。
只有掌握了一定的套路,学习才算是达到了一定的境界,在此之前我们需要不断练习,通过量的积累来达到质的改变。
技能
我小时候学过很多东西,但稍微突出一些的只有小提琴和游泳,不敢说有多厉害,也不敢说比90%以上的人好,只是作为一个兴趣在培养。对于学习技能这件事情上,我认为成功的唯一方法就是多加练习,练的越多,收获也越多;相反,如果三天打鱼两天晒网,不管天资多么聪慧,也不会有多大的成就。
做中学中提到,体育运动的初学者练习时候都需要重复动作,比如「学习打乒乓球时」要练习挥拍,挥拍成千上万遍之后动作就会定型,也就是教练常说的「肌肉有了记忆能力」,以后实战中可以不假思索地做出来。
我认为JAVA学习也是这个道理,作为一门语言,它只有靠勤学多练,才能有所掌握,这样在我们碰到较难的问题时,也能通过牢靠的基础而一步步推出结果。不漏下每一个知识点,使问题不要积累,这样才能学好一门技术,一门语言。
c语言学习的调查
- 学习c语言,我一般就是直接看题,遇到不会的再翻书查概念,然后再做下一题,实在不会的就看答案。在c语言方面,我对自己没有严格要求,以致于到了最后还是有很多不会的地方,c语言基础不是很牢靠。
- 自己大约写过2000行代码,基础的代码基本都可以理解,但是后面较难的就不太会了。我认为和质都很重要,我们不能忽视量,也不能忽视质。如果只重视量,程序稍微复杂一些就不会了,很显然就不能达到一定的高度;如果只重视质,只做一些难题,没有量的积累,那么薄弱的基础必然导致换一个题型就不会做。所以,我们要在量的基础上适当拔高,从而达到平衡量变和质量的目的。
- 这个基本分得清,数组指针和函数指针是指针,分别指向某个地址和某个函数的地址。指针数组是指一组地址,指针函数是指可以返回某个地址的函数。
- 这个我不能分清,经过查阅资料,我大致了解了一点。文件是计算机管理数据的基本单位,流是字节序列的抽象概念。文本文件本质上也是一种二进制文件,但二进制文件全都是0和1组成的,而文本文件是由字母、数字、符号等组成,可以通过这一点来进行区分。通过c语言或是Java等编辑得到文本文件,然后再经过编辑、翻译软件处理得到二进制文件。
- 这个我不明白,经过查阅资料,面向过程程序设计大致就是以过程为中心的编程思想。但不明白解决问题的方法。
- 我认为模块是一个完整的程序中,具有独立功能的一部分程序。我没有写过多个源文件的程序。
- 这个我也不了解。经过查阅资料,内聚是指模块内部的联系,耦合是指模块之间的关系。高质量的程序设计中,模块内部联系紧密,关联性强;模块之间相互独立,各自分别完成自己的功能。
- 把数组A的内容复制到数组B中:
#include <stdio.h>
int main()
{
int a[10],b[10],n;
int i = 0,j=0;
printf("输入个数:\n");
scanf("%d",&n);
printf("输入值:\n");
for(i = 0;i<n;i++){
printf("%d\n",&a[i]);
}
for(j=0;j<n;j++){
b[j]=a[j];
}
return 0;
}
- 整数数组A中有没有数字5?
- #include <stdio.h>
#define N 100
int main()
{
char A[N];
int i,n=1;
gets(A);
for(i=0;A[i]!='\0';i++)
{
if(A[i]=='5')
{
printf("有数字5");
n=0;
break;
}
}
if(n)
printf("没有数字5");
}
-
- 对整数数组A进行排序
- 从小到大
#include<stdio.h>
main()
{
int a[10];
int i,j,t;
printf("Input 10 numbers:\n");
for(j=0; j<10; j++)
scanf("%d",&a[j]);
printf("\n");
for(i=0; i<9; i++)
for(j=0; j<9-i; j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(j=0; j<10; j++)
printf("%d\n",a[j]);
printf("\n");
}
- 从大到小
- #include <stdio.h>
#define N 10
main()
{
int a[N];
int i,j,k,t;
for(i=0;i<9;i++)
{ k=i;
for(j=i+1;j<10;j++)
if(a[j]>a[k]) k=j;
if(k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i<9;i++)
printf("%d ",a[i]);
- 写一个程序,统计自己C语言共写了多少行代码。
这个程序毫无思路,不会写,在今后的学习中会留意此类代码
- 你知道什么是断点吗?给出自己调试程序的例子。
不知道,查阅资料后大致明白: 断点是人为设置的,意思就是让程序执行到此“停住”,不再往下执行,然后主动权就交给调试者了,此时你可以做调试软件支持的任何事情(那要看调试软件的能够提供的功能了,例如查看、修改、单步跟踪、继续执行、设置下一个断点以及断点次数和条件断点设置等等)。
- 提出问题
- path是windows程序文件目录,classpath是类文件目录,用系统属性目的是把classpath放到了path中吗?
- java里有没有按位 与 或 异或?
- java数组里有传值吗?还是都是传地址?
- java语言中的位移运算问题
- java如何保存文件
- 子类继承用于什么情况?面向抽象编程程序上有什么特别之处?
- Java 远程调用如何操作实现?
- 如何使用java操作 ppt转图片
- JDBC数据库操作是否是建立服务器的基础?
- StringBuffer类是如何使用的?
- 线程的创立应该注意什么?
- 后台(java)如何将聊天信息保存至数据库
- Java如何利用foreach对数组的遍历
- java调用接口时怎么添加证书认证
- java中怎么执行sql语句
- Java学习目标
掌握基本的概念和知识点,能够完成基本的作业,课后多练习,多思考,认真完成每一次实验。