有不少学生向我咨询说,他们在刷题的时候,明明知道题目应该使用什么算法,并且也能分解出具体的步骤,但就是代码编写不出来,有一种心里有货,就是倒不出来的感觉,很是不爽,严重影响了编码的乐趣和积极性。
那么为什么会导致这样的问题呢?一般来说,如果学生最开始学习编程的时候,代码编写的太少,对编码比较陌生,不知道如何使用代码表达思维,那么编码能力就会很弱。
并且由于在最开始简单代码编写的时候,就缺少训练和表达,导致渐渐的碰到比较难的题目和逻辑之后,更是不知道如何写了,这样就会产生一种畏难的情绪,从而使得代码编写的过程各种不顺利。
综合归纳起来,导致这种问题的核心还是在于代码编写太少了。这就像很多中国人学了10多年的英语,但是真正面对老外进行口语表达的时候,往往连最简单的语句也张口结舌说不出来,就是因为大部分人学习英语的时候,练习的是单词和语法,训练的英语阅读能力。
口语的练习机会则比较少,这就导致虽然口语和阅读背后的单词和语法都是一样的,但由于缺乏有效的训练,口语表达的时候还是会非常不熟练,非常别扭。
针对这样的问题,想要提升的话,最重要的就是不断的进行练习,“Practice make perfect”这句话不仅针对英文学习有效,针对编程学习也是一样的。
那么如何进行有效的练习呢?毕竟对于很多代码编写不出来的学生,你再让他从简单的编程语法训练起来,大家也提不起来兴趣呀。在这里给大家介绍一种亲测有效的方法:
- 找一些符合学生当前水平的真题做起来,不同USACO级别的学生可以直接刷对应的真题。
- 当题目不会的时候,要区分是题目不知道如何分析,还是代码不知道如何编写?这两者是有本质区别的,如果是前者,则应该重点加强算法分析能力,如果是后者,则应该重点加强代码编写能力,针对每道不会的题目,都应该区分以上两种情况。
- 如果逻辑清晰,但就是编写不出来代码,可以尝试把逻辑完整的使用中文(或者英文)表达出来,要做到步骤逻辑清晰,并且步骤的颗粒度足够细,细到此逻辑足以映射成代码。
- 尝试按照步骤列表,把每一个步骤编写成对应的代码,记住,不要考虑代码复用,不同逻辑之间,即使代码有可能重复,但宁愿多写两遍,多几行代码对于计算机来说是不会有任何时间复杂性上的影响的,但有时候少了两行代码,在逻辑映射成代码的时候就会非常不清晰了,编写代码的目的虽然是给机器执行的,但也需要让人易于理解,这样才比较好维护,每个逻辑单独对应一段代码,这样会确保代码逻辑足够清晰。
- 如果拆分成步骤列表之后,还是写不出来代码,那就先好好找答案代码参考下吧,其实计算机表达逻辑很简单,只有三种语句,要不就是一个运算表达式,要不就是if 语句,要不就是循环语句,针对于写不出来的逻辑,可以参考下答案,然后反思一下之前为何写不出来。
- 针对无法写出来的代码,可以记录下来,过一周左右时间,然后自己再独立写一遍。一般来说,对于一道题目,过了一周时间,你只可能记得步骤,但不可能完全记得之前的代码(不管这个代码是你自己编写的,还是看的标准答案),这个时候再写一遍,其实就是训练从逻辑到代码的转换能力,而这个能力,往往就是代码编写不出来的学生所缺少的核心能力,这相当于是一个针对性训练了。
相信上述的步骤应该已经给的足够详细了,对于编码能力比较差的学生来说,可以按照上述方法操作起来,经过2-3个月后,你会明显感觉到编码能力的提升,一旦代码能力提升上去后,就很容易进入一个正向的激励,此时就能真正感受到编程的魅力所在了!