购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 为什么编程这么难学?

你是否曾经尝试学习编程,却在一堆复杂的语法和逻辑中迷失了方向?别担心,这是很多人的共同经历。下面一起来探讨为什么传统编程对很多人来说如此具有挑战性,以及AI如何改变这一切。

“编程”在剑桥词典中的定义是The instructions that tell a computer what to do(告诉计算机做什么的指令)。在计算机无法理解绝大部分自然语言指令之前,人们只能通过“编程语言”,也就是用写代码的方式将自己的意图和指令转换成计算机看得懂的程序,这个可以定义为传统编程。编程本质上是人类与计算机之间沟通的方式,通过特定的语法规则和逻辑结构,让计算机能够按照人类的意图执行各种任务。

在探讨传统编程学习的复杂性之前,大家需要先理解人类思维与编程逻辑之间存在的天然冲突。这些冲突源自人类大脑的工作方式与传统编程要求之间的根本差异。

1.1.1 认知模式的冲突

人类大脑具有出色的认知灵活性,能够根据情境需要处理不同类型的信息。在日常交际中,我们擅长理解和运用“可能”“大概”“差不多”这样模糊的概念,这种能力让我们能够有效地应对充满不确定性的社会情境。

想象一下,当你和朋友约定“下午三点左右见面”,这个“左右”可能意味着2:50到3:10的任何时间,而这完全可以接受。但在编程世界里,计算机不理解“左右”这个概念——它需要精确的时间点。

当转向传统编程时,我们需要调动大脑的另一种认知模式——精确的逻辑推理能力。传统编程要求我们清晰地定义每个变量和条件,这种严格的形式化思维虽然存在于我们的认知能力范围内,但对很多初学者来说,需要刻意练习才能熟练运用。

看看下面这个简单的例子。

在这个程序中,计算机不会理解“左右”或“差不多”的概念,它只会严格比较两个数值的大小。这种精确性是编程思维的核心特征之一。

1.1.2 直觉与系统思维的矛盾

人类的思维方式深深植根于直觉和经验。当面对问题时,人类倾向于基于过往的经验快速做出判断,而不是系统地分析每个细节。但传统编程需要我们改变这种思维方式,强制我们将问题分解为清晰的步骤和严格的逻辑关系。

比如,当你想做一道菜时,可能会根据经验随意添加调料,根据口感调整火候。但如果要编写一个烹饪程序,则需要精确定义每一步。

这种系统化思维与我们日常依赖直觉的方式形成了鲜明对比。

1.1.3 整体认知与细节要求的对立

人类大脑的另一个特点是倾向于整体认知,我们擅长快速把握大局,但容易忽略细节。这在传统编程中成为一个严重的问题,因为传统编程对细节的要求近乎苛刻——一个分号的缺失、一个空格的错位都可能导致程序完全崩溃。

看看下面这个例子。

在上面这个例子中,仅仅因为一个额外的空格,整个程序的行为就完全改变了。这种对微观细节的极度关注与人类的自然认知倾向背道而驰。

1.1.4 认知负荷的挑战

在认知负荷方面,传统编程对大脑提出了极高的要求。我们需要同时在多个抽象层次间切换——从具体的代码实现到整体的问题域,从细节的解决方案到宏观的架构设计。

研究表明,人类的工作记忆一般只能同时处理5±2个信息单元,但传统编程过程需要同时关注的细节远超这个限制,语法规则、逻辑结构和错误处理等多维度信息的叠加,给大脑带来了巨大的认知负担。

想象你正在编写一个简单的登录功能,代码如下。

在编写这样的代码时,你需要同时考虑多个条件和可能的错误情况,这对工作记忆提出了很高的要求。

1.1. 5 错误处理的复杂性

错误处理更是一个特殊的挑战。传统编程中的错误往往是多层面的,可能同时涉及语法错误、逻辑缺陷和架构问题。定位和解决这些错误需要强大的分析能力和丰富的经验,这对初学者来说特别困难。

看看下面这个包含错误的代码。

在第一个函数中,如果传入一个空列表,程序会崩溃。识别和修复这类错误需要预见可能的边界情况,这对初学者来说并不直观。

1.1.6 学习曲线与反馈周期

学习过程本身就充满挑战。在能够创造出有意义的程序之前,人们需要积累大量的基础知识。这个漫长的准备期常常会打击学习的积极性。更困难的是,传统编程学习的反馈周期特别长——从学习某个概念到能够在实际项目中应用它,中间往往存在很长的时间差。这种延迟的反馈机制容易让人产生挫败感。

1.1.7 抽象概念的理解难度

许多传统编程概念的抽象性也是一个大问题。像递归、指针这样的概念对没有相关背景的人来说异常抽象,因为它们在现实生活中没有直观的对应物。

以递归为例,下面是一个函数调用自身的概念。

理解这段代码需要在脑海中模拟函数的多层调用过程,这对初学者来说是一个相当抽象的思维挑战。

1.1.8 思维方式的根本转变

最根本的挑战在于思维方式的转变。人类天生倾向于发散性思维,喜欢探索多种可能性。但传统编程要求我们采用收敛性思维,将所有可能的情况都进行明确定义和处理。

我们需要从依赖经验和直觉的思维方式,转向纯粹的逻辑推理。从容许小错误的人类交流模式,转向要求绝对精确的程序执行模式。这种思维方式的根本转变,可能是传统编程学习中最具挑战性的部分。

1.1.9 专业背景带来的额外挑战

对于不同专业背景的学习者来说,这些普遍性的挑战可能表现得更为突出。特别是那些习惯于视觉思维和感性认知的人,他们在日常工作中依赖直观和感性判断,习惯于处理具象的元素,通过直觉来做出判断。

在他们的专业领域中,模糊性和不确定性不仅被允许,还往往是创意的源泉。一个轻微的偏差可能带来意想不到的灵感,这种创造性和不确定性是某些专业领域的重要特征。

然而,传统编程则要求完全不同的思维方式。它需要严格的逻辑思维,每一个步骤都必须经过精确定义,不能有丝毫的模糊。这种对精确性的绝对要求与某些专业人士习惯的思维模式形成了鲜明对比。

1.1.10 心理障碍

心理层面的障碍也不容忽视。许多人对传统编程存在先天的恐惧,认为这是一个高度技术化的领域,需要强大的数学和逻辑思维能力。这种“数学不好”的心理阴影会严重影响学习的信心。

同时,他们也担心过多地投入传统编程学习会影响自己的专业性,产生身份认同的困惑。这种担忧往往导致他们在遇到技术困难时更容易放弃。

1.1.11 知识迁移的鸿沟

知识迁移的困难进一步加剧了编程难学的问题。不同领域积累的经验难以直接应用到传统编程领域。传统编程中的许多概念在现实世界中缺乏直观的对应物,这使得这些概念特别难以让人理解和掌握。

即使掌握了基础语法知识,要将其转化为解决实际问题的能力也存在巨大的鸿沟。研究表明,语法知识的掌握与实际问题解决能力之间存在显著差距,这说明仅仅学会语法远远不够。

对许多学习者来说,这种从其熟悉的思维方式到抽象逻辑的转换尤其具有挑战性,因为他们习惯于通过直观的元素来理解和解决问题,而传统编程则要求他们在看不见的逻辑层面上进行思考和构建。 qtu2xY/SqQkOuAt4WTAfUHs2aKv5KJ8qDUUeErW37tjs4kfi9CaKSKMPaHgdHhiR

点击中间区域
呼出菜单
上一章
目录
下一章
×