20155315庄艺霖--对做中学的理解及对c语言和Java的看法

关于做中学的理解及技能训练的思考

在写这篇博客之前,我首先阅读了娄老师的博客,对做中学的概念很感兴趣。我们常说知识要学以致用,做中学强调的是在用的过程中有新的收获和体会来进一步巩固学习。细数我学过的课程,不在少数,学跳舞、学英语、弹钢琴、打乒乓球等都已经是小学时的事,在阅读了娄老师对重拾乒乓球运动的回忆和体会,我想就学英语这件事说说我学英语的经验和要改进的地方。

背景

小学的时候,为了更好地学习英语,我就开始上英语的课外兴趣班。学习的第一课是学习音标。与学校严肃的氛围不同,兴趣班的老师会拿着小卡片,做着夸张的动作来激发我们学习英语的兴趣。我们也会学着老师做的动作练习发音。老师还会通过做游戏的形式让我们记住单词和对话,这一切都让我觉得学英语是一件特别有趣的事情。兴趣是最好的老师,在小学期间,英语是我引以为傲的学科。
但是,上初中之后,我就不再主动背单词了,或者不再是因为兴趣学习英语。表面上看,成绩也都还过得去,但是因为缺少练习,英语的应用能力越来越差。直到后来再去拜访小时候的英语老师,提到我现在的学习,她说:“学习语言,就是在体验其他人的生活,你生活中的一切他们都有。学习的关键,在于你能用语言和文字描述你看到的东西。”也就是做中学。就像娄老师在博客中提到的,

有人让李笑来老师(知笔墨,微博,知乎,[微信公众号:xiaolai-xuexi])在微博中用140字总结如何学好英语,他说可以用一个字总结「用」。读研究生时由于不堪忍受读把「class library」译成「班级图书馆」式的技术图书(很高兴现在看不到邱仲潘老师的书了),自己花了三个月读完了上千页的 《Windows程序设计(Programming Windows)》,第一次感到「用」英语和「学」英语的不同,这个经历让我突破了一个很多人都有的心理障碍:对用英语的恐惧。

先在生活中用了,才能知道自己的不足并加以改进。这之后,我会在无聊的时候把我眼前看到的用英语表达出来,或是在听英语歌、看英语视频的时候有意识地记住一些发音有趣和常用的词汇。慢慢的,词汇量也开始提高,我也更自信了。

我认为可以这样学英语

  • 音标很重要

在大学以前,大多数人的童年阴影就是英语听写了。很多人觉得单词背了就过了,但我认为,和拼音一样,音标也同样重要。熟悉音标能更好地掌握单词的发音,也能更好地理解单词。

  • 记熟前后缀

英语中常用的表示否定的、同义的前后缀很多,记熟这些能更好地理解单词的意思

  • 看英文字幕

路上的指示牌通常都有英语的标识,刚开始的时候可以先看英语的解释,找到自己不会的部分再看中文,慢慢的就会熟悉。同样的,在看英语视频的时候,也可以先看英文字幕来理解整体的含义。

我的不足

  • 练习不够,碎片时间没有充分利用。
  • 词汇量还很匮乏。

我眼中的c语言

在上一篇博客中,老师让我们回忆自己学习C语言的体会,我写道

考完试后,这些知识就被淡忘了,并没有让我感觉到有什么与实际相关的东西。

但在阅读了老师的几篇博客之后,我意识到并不是与实际不相关,而是我们没有学会如何去运用。做为一种编程语言,c语言主要是帮助我们用计算机语言来解决生活中的问题。但是,我们现在更多是用笔来计算题目,能用到c语言的地方不多,所以渐渐地就淡忘了c语言的知识。

我这样学习C语言(作业,实验,教材,其他),与我前面提到的技能相比,C语言的学习有这些经验和教训。

c语言是我学习的第一种编程语言。课程一开始,我觉得是一件特别有趣的事,能编出简单的程序,上课学习也更有动力。就好像我小时候开始学英语一样。学习c语言的过程中有一项作业是要刷题。刚开始的时候充满干劲,觉得一天15题完全没问题。但渐渐地,上课开始听不懂,题也开始做不出来,就像我上面提到的学习英语的懈怠期,慢慢地也就不再尝试新的题型。

经验

  • 通过刷题,不断地练同一种编程方法,巩固了我对一些常用语句的用法,比如switch,循环语句等等。
  • 在学习的过程中,我会设计简单的游戏来使学习更有趣。

不足

  • 学习热度只有三分钟,没有认真坚持。
  • 只会设计简单的程序,没有举一反三。

估算我写了这么多行代码

上学期的刷题过程中,我一编了大概150道题总的来说大概一共写了5000行代码。写过的代码我会一行行调试,弄懂每一行代码的作用。

我对数组指针、指针数组、函数指针、指针函数的理解

在我看来,

  • 数组指针是某一数组的地址;
  • 指针数组是一组指向地址的数组;
  • 函数指针指向某一函数的地址;
  • 指针函数变量是指针的函数。

文件和流的区别和联系,区分文本文件和二进制文件

文件(File)和流(Stream)是既有区别又有联系的两个概念。

文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。

是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。

文本文件是基于字符编码的文件。

二进制文件是基于值编码的文件,可以根据具体应用,指定某个值是什么意思。

面向过程程序设计

百度的解释是

“面向过程”是一种以过程为中心的编程思想。 也就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

在我看来,就是走一步设计一步,具体代码视要实现的功能而定。

对模块、“高内聚、低耦合”的理解

模块

老师曾说过,每个函数都是模块,那么模块的定义是什么?我查阅了相关资料,了解到

按照功能将一个软件切分成许多部分单独开发,然后再组装起来,每一个部分即为模块
模块是在内核空间运行的程序,实际上是一种目标对象文件

通俗的说,也就是组成每个程序的大部分,那么在一个程序中,一个个的函数就是我们所理解的模块。

高内聚、低耦合

高内聚   
内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。   所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

低耦合   
耦合是一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。

也就是说在一个模块中元素联系越密切,模块与模块之间越独立,这样的程序就会更高效,也是设计程序时追求的目标。

设计程序

  • 把数组A的内容复制到数组B中

#include <stdio.h>
#include <stdlib.h>
#define N 50

int main()
{
    char a[N],b[N],i,j;
    printf("请输入第一个数组:\n");
    gets(a);
    printf("请输入第二个数组:\n");
    gets(b);
    printf("最终数组为:\n");
    for(i=0,j=0;a[i]!=0;i++)
    {
       a[i]=b[j];
       j++;
    }
    puts(a);
}

  • 查找整数数组A中有没有数字5

#include <stdio.h>
#include <stdlib.h>
#define N 50

int main()
{
    char a[N],i,c=0;;
    printf("请输入一个数组:\n");
    gets(a);
    for(i=0;a[i]!=0;i++)
    {
       if(a[i]=='5')
       {
        c=1;
       break;
       }
    }
    if(c==1) printf("存在数字5");
    if(c==0) printf("不存在数字5");
}
  • 将数组A进行排序(从小到大)

#include <stdio.h>
#include <stdlib.h>
#define N 50

int main()
{
    char a[N],i,j,temp;
    printf("请输入一个数组:\n");
    gets(a);
    for(i=0;a[i]!=0;i++)
    {
        for(j=i+1;a[j]!=0;j++)
        {
        if(a[i]>a[j])
         {
          temp=a[j];
          a[j]=a[i];
          a[i]=temp;
         }
        }
    }
    printf("将数组从小到大进行排列:\n");
    puts(a);
}

  • 将数组A进行排序(从大到小)

#include <stdio.h>
#include <stdlib.h>
#define N 50

int main()
{
    char a[N],i,j,temp;
    printf("请输入一个数组:\n");
    gets(a);
    for(i=0;a[i]!=0;i++)
    {
        for(j=i+1;a[j]!=0;j++)
        {
        if(a[i]<a[j])
         {
          temp=a[j];
          a[j]=a[i];
          a[i]=temp;
         }
        }
    }
    printf("将数组从大到小进行排列:\n");
    puts(a);
}

  • 统计自己C语言共写了多少行代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int m,n;
   printf("请输入程序的总个数:\n");
   scanf("%d",&m);
   printf("请输入平均每个程序的代码行数:\n");
   scanf("%d",&n);
   printf("总行数为:\n%d",m*n);
}

暂时只会用这样的方式编程,等到把文件的那一章再巩固一下在用文件实现编程。

  • 断点

如图所示,图中的红点就是断点。

对《Java程序设计》的学习的具体目标,通过刻意训练提高程序设计能力和培养计算思维,通过“做中学”实现我的目标。

学习目标

对给出的题目能编出程序来解决问题,可以用Java像用c语言那设计一些简单的游戏,能够用Java编出实验的程序,能熟练运用Java中的语言点。

刻意训练

希望能够坚持一天一道来培养编程思维提高编程能力。

与做中学的联系

可以用Java试着编能用c语言设计的程序,通过这样的尝试发现自己的不足并加以改正。

我的写作能力的现状和提高

毕业后大多数人从事的工作的要求是“提笔能写,开口能说,问策能对,遇事能办”,非常重要的技能是公文写作能力。我的写作能力只算一般,文采不见得好,有时候组织语言要很久。

提高

看了电影《你的名字》之后,我开始每天坚持写日记。刚开始的时候是记流水账,后来开始慢慢注意词组的搭配和表达流畅性。在之后的日子里,我也会继续坚持,更注重语境的转化来提高自己的写作水平。

posted @ 2016-12-18 23:34  20155315庄艺霖  阅读(605)  评论(4编辑  收藏  举报