前言
在写这篇随笔之前,掌握了一下markdown的基本语法,以及探索了一下GitHub的用法,所以拖了一点时间,这也算是写这篇随笔的一大收获吧,在这个过程中提高了自己的自学能力。
有关技能和经验的调查
你有什么技能比大多人(超过70%以上)更好?针对这个技能的获取你有什么成功的经验?
沉思了许久,如果在四个月前也许我会说,数学。在当时我还是能够自信地说我的数学成绩能比70%的人更好,但这70%的范围只是基于我当时所处的环境。也许是因为高中的知识比较容易掌握,加上老师授课速度慢,有足够的时间让我消化,所以对于高中数学我还是游刃有余。每逢数学竞赛必去参加,虽然仅仅拿过少数微不足道的奖。图就不发了,在这大神如云的地方实在不好意思。而最令我自豪的大概是数学老师只要有出差,就让我替他上课,虽然我并不是课代表,于是到了最后就演变成了这种局面:
我:“明天数学老师要出差,然后有谁想要来上数学课的吗?”
全班:“你啊!”
印象中,从高一到高三,大概共代过四堂课,而大大小小的周考更是不知道帮老师改了多少次(我不是课代表)。这其实就是成功的经验吧。在备课的过程中需要自己对整个知识点有充分的理解,于是为了不祸害同学们就会逼自己不放过每个重难点,从而对数学的认识也默默提升了。而改考卷改作业的时候总能发现各种各样的错误,潜意识里能给自己提个醒。同理,给其他同学讲解题目也是一个提升的好办法,有时别人来问的题目恰好是我放空过去没做的题,为了不辜负对方的信任,自己就会翻书翻各种材料慢慢摸索,最后竟然也能够解出来,无形之中提高了自己的能力和信心。一道题反反复复给不同的人讲解,再难的知识点还不能掌握那就说不过去了。
还有一个个人认为很重要的经验就是,反复研究解题办法。在刷完一张卷子或做完习题后,对于那些没有思路的题目,参照答案的时候最好能够领悟解题的方法,而不是仅仅将目光放在眼前这道题,应该看到整个类型的题,真正理解原理,掌握它的思想,融会贯通。
另外最后一点是学会积累,积累各种各样的题型,做得多了,到最后看到大部分的题也基本能一下想到思路。这一点其实同时也适用于很多方面,譬如对于做海报,在这之前我会多搜图,多看看别人怎么做的,多积累素材,储存在脑子里,然后等自己做的时候就能比较有灵感了。在此举个例子(来自我的收藏):
上了大学之后发现自己就是个蒟蒻,人外有人天外有天,在这被虐成了渣,上了高数线代的我瞬间就懂了高中时有些人说数学课完全听不懂是种什么体验,感谢高中对数学良好的兴趣让我不至于放弃治疗,还在努力抢救中。
目前我的数学是渣得一塌糊涂,不过上述重点主要在介绍经验,如果让我说现在有什么技能比较突出的话……手速快算吗?
当然我不玩LOL也不玩dota。
我也没具体测试过自己的速度是多少,只是从小学到高中都被同学或老师委托打各种各样的材料,一旦有什么需要从纸质版转化为电子版,二话不说就来找我了。
成功的经验就是打得多和熟记按键位置吧,慢慢就熟练了,家里键盘拆下来洗的时候一般我的任务就是键帽复位。很惭愧我打字都是乱打,在小学信息技术培训班的时候才从老师口中第一次听到打字的正确指法,而那时我已经改不过来了,于是也就一直将错就错下去,倒也没有什么影响。曾经想尝试过双拼不过记不住。
所以结合两者成功的经验,大致可以归结为以下几点:
- 学会积累
- 勤奋刻苦,多做,多练,自然就熟了
- 学会学习,模仿,总结经验和方法
- 学会自己解决遇到的问题,在解决问题的过程中加深印象
有关C语言学习的调查
你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
我最开始接触代码也是在小学的信息技术培训班,当时参加的竞赛由两部分组成,一是Flash制作,二是网页制作,而flash按钮的制作需要自己添加代码,我便是从那时知道了编程。这一次竞赛算是打开了我对计算机世界兴趣的大门吧。
最早关于C语言的记忆已经搜索不到了,想不起来是在哪里接触到的,只记得我初中的时候在B站上面搜过C语言入门教程,那时候MOOC应该还没出来。看了大概一两个视频,忘了讲到哪了,估计也就是顺序结构,之后就没坚持下去了……
在高考过后那个暑假,曾励志重新自学C语言(或者说应该叫预习了?),于是下载了c primer plus的PDF,然后看了几页,看到“自己编写第一个程序”,然后打开DC,写了helloworld,然后,暑假就结束了。
现在能有这个成绩,最应该感谢的是高中NOIP竞赛经历,高一暑假开始自学pascal(是的虽然有培训班但老师让我们自己看书),十一月份的时候到福州参加复赛,是这短短几个月的学习打下了我学代码的良好基础,虽然当时由于时间紧迫没有认真学习算法,很多都还没涉及,只是掌握了循环选择之类的结构,所以这个寒假给自己的目标就是学好算法。
总归也是一种学习,所以和上述经验一样,对于C语言还是要多积累,学会阅读代码,学会参考其他实现功能的思路,另外养成良好的代码风格也是很重要的一点。说来惭愧,我对C语言的学习也只是停留在按时做完老师布置的作业上吧,还有课外打酱油了几个比赛,教材也没有很认真研读。
倒是在班级需要的时候写过一个生成随机数的小程序,虽然功能实现很简单,但这毕竟是用自己掌握的知识解决实际生活中问题的第一次尝试,并且还为班级做出了贡献,还是很开心的。
目前为止估算自己写过多少行C代码?理解的情况如何?
粗略估计了一下,大概写过2000+行代码,90%以上理解。由于还没有上算法的课程,个别题暂时还没有深刻理解。
学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
- 数组指针:如
int (*p)[n];
指向数组的指针 - 指针数组:如
int *p[n];
有n个指针类型的数组 - 函数指针:如
int (*p)(int a)
指向函数的指针 - 指针函数:如
int *p(int a)
返回值是指针的函数
学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
惭愧,并不知道。目前仅略微接触文件的读写操作。于是我翻开了书本找到了概念。编程操作文本文件与二进制文件在书上也有介绍,这里就不具体引用。
所有文件的内容都以二进制储存。但是,如果文件最初使用二进制编码的字符表示文本,该文件就是文本文件,其中包含文本内容。如果文件中的二进制值代表机器语言代码或数值数据或图片或音乐编码,该文件就是二进制文件,其中包含二进制内容。——《c primer plus》
文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。——来自网络搜索
学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
面向过程解决问题的方法:
- 分析问题解决的步骤
- 用函数实现每个步骤
- 调用函数
在C语言里面,什么是模块?你写过多个源文件的程序吗?
在我理解中,模块就是不同功能,一个功能一个模块,而模块中可能有一个函数或多个函数。惭愧,没写过。
学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
惭愧,不知道。于是到网络上搜索了一下,看完后粗略理解了一下,大概是模块内的代码相关性很强,但模块与模块之间相互独立。
内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。——百度百科
学过了C语言,你如何把数组A的内容复制到数组B中?写出相应的程序。
以下仅列出核心代码
/*int型*/
for (i=0;i<N;i++)
b[i]=a[i];
/*char型*/
strcpy(b,a);
如何查找整数数组A中有没有数字5?
for (i=0;i<N;i++)
{
if (a[i]==5)
{
printf("Yes");
break;
}
}
if (i==N)
printf("No");
如何对整数数组A进行排序(从小到大,从大到小)?
/*由于排序方法多种多样此处仅列举最常见的排序之二——冒泡和快排*/
void bubblesort() //冒泡排序
{
int i,j,temp;
for (i=1;i<N;i++)
{
for (j=0;j<N-i;j++)
{
if (b[j]>b[j+1])
{
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
}
}
void quicksort(int left,int right) //快排
{
int i,j,t,temp;
if (left>right)
return;
temp=a[left];
i=left;
j=right;
while(i!=j)
{
while(a[j]>=temp&&i<j)
j--;
while(a[j]<=temp&&i<j)
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1);
quicksort(i+1,right);
}
写一个程序,统计自己C语言共写了多少行代码。
/*由于我先前就有把自己所有代码保存在一个txt的习惯,加之水平有限,所以此处仅用较简略的办法*/
#include <stdio.h>
int main()
{
freopen("code.txt","r",stdout);
freopen("line.txt","w",stdout);
FILE *fp=NULL;
char c;
int line=0;
fp=fopen("code.txt", "r");
while((c=fgetc(fp))!=EOF)
{
if(c=='
')
line++;
}
fclose(fp);
printf("共有%d行
", line+1); //末行
return 0;
}
另附Github
你知道什么是断点吗?给出自己调试程序的例子。
断点是编程调试时基本手段之一,即调试程序时让程序中断以便检查。(例子就简单放两张图吧)
对比C语言的学习,你对《面向对象程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?
具体目标如下:
- 熟练掌握C/C++语言,能解决一些问题
- 按时按量完成作业
- 掌握文献检索、运用现代信息技术查找所需资料的基本方法
- 具有一定的外语能力,能够熟练运用外文网站
提高能力最快且最有效的方法,刷题,刷题的过程中也要加上自己的思考。
Learning by doing,一直是我个人坚持的原则。遇到的问题,自己先通过各种各样的方法尝试解决,实在没办法再求助别人。当然,如果是需要一起讨论的问题也很乐意开口,毕竟团队协作也是很重要的一个技能,我也很享受一起讨论出结果的感受。
毕业后大多数人从事的工作的要求是“提笔能写,开口能说,问策能对,遇事能办”,非常重要的技能是公文写作能力,你觉得自己写作能力如何?要怎么提高?
自认为写作能力还算可以,多亏高中班主任时不时就布置一篇总结。但是我的表达能力不行,日常交流中经常卡壳不知道该如何表达自己所想。还有一个缺陷是,我自己写的文章容易语句不通顺,或者出现语法错误。究其原因大概是网络小说看多了?提高的话,今后多阅读文献吧,以及多参考其他人的博文,另外,要学会经常自我总结与反思,有空的时候可以多写博文,既可以提高自己的写作水平,同时也是为未来的自己积累经验,算是留给未来的一笔宝贵财富吧。