知道了基础知识, 但你却仍然不能编写代码

2020-11-10大约43分钟

图片

学习编程,现在可以说是越来越容易,不仅新的编程语言本身变得更容易理解和使用,也有越来越多的人开始教别人编程,传播越来越丰富的学习资料。不过万事开头难,初学编程者看一本编程书、学一个在线的编程课容易,但最常见的困难却是超越那些最简单的东西。人们可能会用几种不同的方式表达这个问题,例如:

  • “我通过在线课程学习了 Python,但我不知道如何使用它来写程序。”
  • “我知道这个理论, 但我不能把它应用到代码中。”
  • “我知道while循环,但我不知道如何或何时使用它们。”
  • “我知道循环、数组和变量,但我不知道如何把它们组合在一起。”

通常,学生参加某种,学的时候感觉学到了东西、示例程序都能看懂了,也开始变得自信满满,但一旦课程结束,就开始迷失在不知所措中。所以,现在流行的说法是看这个教程《XX语言从入门到放弃》

原因:人工编程环境

在线课程为学生提供的人工环境,是造成这个问题的一个原因。学生通常会在包含说明和提示的网页中键入代码,但这并不是真正的编程。因此,当课程结束,开始使用真正的编程环境时没有他们习惯的环境,学生就会感到失落。

在线课程提供这种人工环境是有充分理由的,毕竟设置真正的编程环境对于初学者来说通常很复杂和令人沮丧。起码,可以让初学者可以快速地开始编程语法的内容,增强其自信心,从而将学习更容易地进行下去。

这里,我并不是想说人工编程环境不好!它们让初学者获得编程经验更加容易,而无需在搭建自己的环境和使用各种编辑器的菜单中挣扎。只不过,不幸的是,这种痛苦并没有被避免,只是被推迟到课程结束。

原因:指导过度

当你在参加一个在线课程,或学习一本书,甚至被其他人指导的时候,你通常会得到大量的线索和提示,从而让你可以不断地进步。你甚至可能从一开始就得到答案,或者确切地被告知要输入什么。然而,当你尝试自己写一个程序时,你却发现你只是在看一个空白的文本文件——没有说明,没有提示,没有人告诉你要键入什么。

当你突然从一个环境跳到另一个环境时,感到失落是很自然的。

过度指导的一个后果是学生是在学习语法而不学习编程概念。语法只是你为特定编程语言(如ifwhile)键入的文本,对于每种语言来说,语法可能都不太相同。你真正需要学的呢,则应该是一些编程概念,如分支(branching)和迭代(iteration)。概念会让你明白一段代码实际将做什么,并且你也可以用许多不同的语言编写来写这段代码。当有人说他们知道循环,但不知道何时使用它们时,这其实是在告诉我,他们已经学会了语法,但他们并不真正了解迭代的概念。

再次重申,我不是说指导不好!当你刚刚开始学习时,你肯定需要有人来指导你,甚至在你的编程生涯的每个阶段,你都将需要这样的指导。然而,作为初学者,接受太多的指导会给你一个错误的印象,即编程很容易!因此导致当你发现不能自己编写程序时,你会感到失望。

进入正题

如果你觉得你知道一些编程的基础知识,但是在缺乏指引的情况下仍旧无法自己编写程序,那么恐怕对这些基础知识仍旧不了解。

如果一开始,你就认为学习编程并不容易,那么你发现自己不知道如何编程的时候,就不会倍受打击。反之,如果你上了一门编程课,并且这门课让你觉得编程很容易,实际却无从下手的时候,那就很难受了。

这种感觉很糟,但你并不孤单,每个想成为程序员的人,都必须经历这个阶段。哪怕是计算机专业的学生,有不少在本科毕业前,还不知道自己能写什么程序,更别说非计算机专业的学生了。

听起来很让人沮丧吧?没关系,办法总是有的:

提示:创建一个真正的编程环境

安装和配置实际的编程环境可能很痛苦,不过我们总得经历它。不同的编程语言可能需要不同的编程环境。

首先,您需要文本编辑器或 IDE(集成开发环境)。了解你所学语言最受欢迎的编辑器,并安装,通常你应该能找到一些好用、免费的IDE。

其次,您需要了解如何运行、调试包含代码的文件。

如果您使用 IDE 作为文本编辑器(如 Visual Studio、Xcode 或 Eclipse),那么IDE 中通常已经包含了运行、调试代码的功能。你需要做的是,是了解如何创建新项目,以及点击运行代码的按钮。

如果您没有使用 IDE,则可能需要了解如何从命令行运行代码。命令行需要一段时间才能适应,这需要你多看看相关的文档,并记住一些常用的命令。

一旦你可以编写代码,将其保存到文件,并运行该文件,然后你就可以正式开始了。专业程序员每天也是这么做的。

提示:从头开始制作程序

你必须在没有提示的情况下开始编写自己的代码。从空文件开始,然后自己敲入每行代码。

一开始这会很困难,你将花费大量时间进行调试,并尝试了解各种看起来稀奇古怪错误消息,做起来有点难。但这其实就是重点,每次你在研究和修复错误的时候,你都会获得真正的编程经验。这就是你如何学习和成长的方式。

你也可以查看其他人的代码,但请不要直接复制和粘贴。如果你复制粘贴了别人的代码,很好使,但这样你不会学到任何东西;如果粘贴的代码不好使,你又很难修复这样的代码。过程很重要,正确的方式是:分析其他人的代码,了解一下它们是如何工作的,然后自己写!

提示: 从简单的程序开始

尝试做出超出你目前技能水平的东西是相当常见的,这不一定是件坏事。如果你发现写这样的程序很有趣,也能自我激励很有动力,那么这个过程会迫使你学到很多东西,哪怕你打算做的是个MMORPG项目,需要很多年才能完成。你是否能完成不重要,重要的是你可以一直不停地学习。

另一方面,如果你被没有动力,感觉困惑,没有进展,那么你需要从一个更简单的项目开始。简单的程序,可以是只需要很少的代码,也可以是用到的语法、语句很简单。开始的时候,你可以编写一些处理文本的程序,因为这样的程序比其他所有程序都容易。比如:写一些程序来在屏幕上显示一些字符串,或者获取用户输入的一些字符串内容。

但是这样的程序一点都不酷,不是吗?
某种程度上是的。

我知道, 我知道, 处理文本的程序不像 3D 图形那么酷。你知道每个人都说你不需要知道数学来编程吗?嗯, 3D 图形编程可不是这样,你将需要对几何学、线性代数和微积分的十分地理解才行。

取决于你正在学习的编程语言,即使是一个带有按钮和文本框的正常 GUI 通常也很难。虽然图形化的UI编程并不真正需要任何数学运算,但它可能需要对面向对象的编程和复杂异步操作有扎实的了解。

我给初学者的建议是做一段时间基于字符串的游戏。做一些游戏,如"猜测数字",多选测验,等等。或者,做一些在现实生活中有用的东西。比如一个时间跟踪器,或你在工作或学校中需要用到的一些自动化计算的东西。

程序本质上都是在处理各种各样的数据,从文件、数据库、网络读到的数据,或者用户输入的数据。数据在不同的语言里,基本上都有布尔(Bool)、数值和字符串。布尔和数值的操作相对简单,唯独字符串的操作场景则千变万化,简单的有读取用户的输入,复杂的有自然语言处理等等,因此,千万不能小瞧了字符串的练习。

通过这些程序练习,来学习你所选择的编程语言的主要的功能。

提示:编写大量代码

编程不是纯粹的理论练习。你不能看书,看视频,做测验,获得高分和证书,然后就期望能够创建复杂的程序。要学习如何编写代码,您必须先编写大量代码。

这个有点像学做折纸。你可以读教折纸的书来读,但单靠阅读不会教会你真正折纸的技能。如果你真的想学习如何折纸,你需要有一些纸,然后动手开始折。你会发现,你折的第一个千纸鹤会很难看。第二个呢,可能还不是很好,但肯定会比第一次好。如果你持续不断地做,你就会折出完美的千纸鹤了。

编程是相同的,因为你必须通过写程序才能获得技能。你写的第一个程序不会太长,它可能看起来很乱,甚至命名也很奇怪,但这并不重要。读一些书,获得一些建议,并写一个新的程序。你写的每个程序都应该比上次更长更好、更有技巧性。重复这些步骤足够长的时间,你将成为一个编程方面的专家。

不必要追求掌握编程语言的每个语法,因为即使学会了你也会忘。重要的是把最常用的语法经常练习,通过练习形成编程实战的思维。

提示:寻求帮助

学习编程的过程中,你肯定也会遇到一些自己感觉无法解决的错误。不要担心,这是正常学习编程的过程的一部分。如果你已经尝试一个多小时,却仍旧无法解决你的问题,那么可能你该寻求帮助了。

一些学生在遇到问题时,习惯立即寻求帮助,而不是试图先自己尝试解决问题。这对自己没有好处,也是在浪费其他人的时间。遇到问题,应该先百度、必应甚至谷歌搜索一下相关的内容,试试看能不能解决。

一些学生会习惯性拒绝寻求帮助,想自己钻研精神可佳,但这却也会减缓了他们的学习速度。如果你解决不了你当前的问题,不要不好意思,积极地寻求帮助吧。

不过,不要复制并粘贴某人对你问题的回答,而是分析答案并了解错误背后的原因。这样,当你再次遇到相同的错误时,你已经知道如何修复它。

如果你经常遇到无法解决的问题,那可能意味着你的项目过于雄心勃勃了。先简化一下自己的项目,让自己能够避开这些过难的错误,直到你的技能提高以后再说。

提示:以正确的方式寻求帮助

因为在提问的时候,总会碰到一些不太耐心或不太友好的回答者,因此初学者通常不太想问问题。不过,如果你以正确的方式提出你的问题,你会有更好的体验。

  1. 把准确的错误信息贴到你的问题中。 这是最重要的信息,人们通常不会尝试回答没有确切错误信息的问题。
  2. 如果没有错误信息,请解释您预期会发生什么,以及实际发生的情况 。有些类似的东西,如"我期望它输出5,但它实际上输出7"。通常,问题不在于你的代码,也就在你的期望中。如果不说明你的期望,你会得到答案,如“代码看起来不错”和“问题是什么”?
  3. 粘贴损坏的代码 。在看不到代码的情况下调试问题是非常困难的。如果代码不是太多,请全部粘贴,因为人们会运行您的代码来调查问题。如果有太多的代码,上传代码作为附件或放到其他容易访问的地方,然后把代码链接到你的问题。
  4. 正确格式化代码 。不要像普通文本一样粘贴代码。学着如何很好地格式化代码,以便于阅读。它应该看起来像这样:
def foobar():
  print(1 + 2 / 3)

这可以告诉别人,你是认真、努力地请教别人问题的。 5. 尝试使用正确的术语 。有时候这并不太可行,毕竟你可能仍在学所有的术语,但尽力而为。努力学习常用术语,并正确使用它们。

不可否认,程序员圈子里有一部分人对初学者并不友好。这是真的。专业程序员一方面因为经常很忙,没有太多的时间来回答别人的问题,另外也容易忘记在学习他们的第一门编语言的时候是多么困难。但毕竟我们不是都是那样的!如果你按照上面的准则提你的问题,这将有助于吸引一些优秀的程序员来回答问题,并让大家都心情愉悦。

结论

编程很难,真的很难!如果你刚刚浏览了一门在线课程,这可能会让你感到不爽。不管怎么样,按照本文上面的一些建议坚持下去,你会成功的!

最重要的是,编程开心,继续进步!

试试看!