首页 » Web前端 » cls_mysqlphp技巧_进修 27 门编程措辞的长处提升你的 Python 代码水平

cls_mysqlphp技巧_进修 27 门编程措辞的长处提升你的 Python 代码水平

访客 2024-11-01 0

扫一扫用手机浏览

文章目录 [+]

Python猫注:Python 措辞出身 30 年了,如今的发展势头可谓风起云涌,这很大程度上得益于其易学易用的精良设计,而不可否认的是,Python 从其它措辞中偷师了不少。
本文作者是一名资深的核心开拓者,他广博的视野和精准的认识,让我对 Python 的设计理解得更为全面,同时,他“利用自满感而非恐怖感”的说法,传达出来的是“专注于自我的进步,不妒忌他人的成功”的原则,对我也很有帮助。
原文写于 2015 年,躺在我的收藏夹里良久良久了,如今顺利翻译掉,这是一件能提升自满感的故意义的事。
末了祝大家开卷有益,读有所获。

作者:Nick Coghlan

cls_mysqlphp技巧_进修 27 门编程措辞的长处提升你的 Python 代码水平

译者:豌豆花下猫@Python猫

cls_mysqlphp技巧_进修 27 门编程措辞的长处提升你的 Python 代码水平
(图片来自网络侵删)

英文:https://www.curiousefficiency.org/posts/2015/10/languages-to-improve-your-python.html

声明:本翻译是出于互换学习的目的,基于 CC BY-NC-SA 4.0 授权协议。
为便于阅读,内容略有改动。

目录拓宽我们的视野过程式编程:C、Rust、Cython面向工具的数据模型:Java、C#、Eiffel面向工具的 C 派生:C++、D面向数组的数据处理:MATLAB/Octave、Julia统计数据剖析:R打算管道建模:Haskell、Scala、Clojure、F#事宜驱动编程:JavaScript、Go、Erlang、Elixir渐变类型:TypeScript动态元编程:Hy、Ruby务实问题办理:Lua、PHP、Perl编程思维:Scratch、Logo

作为天下上最盛行的编程措辞之一的共同设计者,我常常看到一个令人沮丧的行为(在 Python 社区和其它社区):有影响力者试图引发人们对“败给”其它开源社区的恐怖,从而调动人们对社区作贡献的积极性。
(我自己偶尔也会犯这种缺点,这让我更随意马虎创造其他人是否也落入了同样的陷阱)。

虽然学习其它编程措辞社区的履历是件好事,但基于恐怖的方法来勉励行动是有严重问题的,由于这会刺激本社区成员将其它社区的人视为争夺开源贡献者关注的仇敌,而不是作为在更大寻衅中的潜在盟友(推动软件开拓艺术发展)。
这还会见告那些喜好其它措辞的人,在一个把他们以及他们的差错视为“敌对竞争对手”的社区里,他们是不受欢迎的。

事实上,我们希望有多种多样的跨平台的开源编程措辞供选择,由于编程措辞是思考的紧张工具——使我们能够以明确的办法表达我们的想法,从而让打算机也能够理解。
如果有人找到了一种适宜大脑的措辞,能够办理面前的问题,那就太好了,不管他们选择的是哪种(些)措辞。

因此,我对 Python 社区有三个详细的要求,以及一个较为宽泛的建议。
首先,我的要求是:

如果我们要利用社区的本能来勉励行动,就该当避免利用恐怖感,而该当利用自满感。
当我们将恐怖作为勉励成分时,就像在说“如果我们不做 X,就会失落去开拓者对 Python 的关注”,这即是是故意地在自由的开源贡献者中创造悲观的感情。
然而,依赖社区的自满感就像在说“目前尚不清楚如何在 Python 中办理 X 问题。
如果我们看看 Y 措辞,就可以看到他们有一个非常好的方法来办理问题 X,我们可以接管进 Python,以供应类似的舒适的用户体验。
”积极的态度让我们对自己的努力感到自满,而不是贬低他人的努力,这有助于在 Python 社区内匆匆成一种持续学习的文化,并促进与其它社区改进协作关系,共同发展。
克制对其它开源编程措辞社区采纳歧视的态度,尤其当这些社区授权人们办理自己的问题,而不是等待商业软件供应商来办理问题。
天下上大多数主要的问题办理起来都是无利可图的(由于耐劳于这些问题的人并不富余,而且无法旁边机构基金的决定),以是我们该当鼓励试图办理这些问题的人,不管我们如何看待他们的技能选择。
如果我们认识的人刚开始学习编程,并且他们选了一种我们不喜好的措辞,我们该当支持他们的选择。
他们比我们更知道什么适宜自己,适宜我们的措辞不一定适宜他们。
如果他们对自己最初的选择感到了沮丧,乃至已经对学习编程变得没有动力,此时再给他们推举别的编程措辞。
这个建议还适用于那些在改进糟糕的网络安全状况的人:我们在面对天生不屈安的措辞时,采纳的方法是改进操作系统的沙箱功能,逐步学习有更好确当地安全属性的措辞,并改进现有措辞的默认行为,而不是列举为什么从程序安全性的角度来看,他们选择的措辞是一个糟糕的选择,来迷惑初学者。
(如果有人支配了由初学者编写的未经审核的软件来处理安全敏感的任务,那就不是开拓者的问题,而且支配者的问题,他们没有对软件的出处和安全属性进行适当的尽职调查。

我的宽泛的建议针对那些碰着了 Python 核心程序的限定,并因此希望探索 Python 中可用的“思考工具”的人。
这个建议便是:

拓宽我们的视野

在开拓 Python 核心程序的过程中,我们会做的一件事是查看其它措辞中办理了我们正面临的问题的特性,看看是否有办法既接管它们,又使 Python 代码更易于阅读和编写。
这意味着学习其它专注于特定软件开拓风格的编程措辞,可以帮助我们在利用 Python 时,提高对这种编程风格的理解。

为了供应帮助,我不才面列出了一些值得探索的领域,以及可能加深对这些领域的理解的措辞。
我尽可能链接了维基百科的页面,而不是直接链接到措辞的主页,由于维基百科常常会供应有趣的历史背景,当你为了教诲目的学习一门新的编程措辞,而不是直接用于实际运用时,这些背景值得去理解。

虽然我知道这些措辞中的大部分(并且在开拓生产系统时利用过几种),但这份推举清单中还包括我间接知道的措辞(常日是通过阅读教程和设计文档,或者通过与我信赖的人交谈,以获取对一门措辞的优点与毛病的洞察)。

还有很多本该当放但没有放进名单里的措辞措辞,以是下面罗列的仅是我感兴趣的部分(例如,我紧张感兴趣的是 Linux、Android 和 Windows 的生态系统,以是我舍弃了 Apple 生态中的 Objective-C 和 Swift 措辞,其余我也不熟习 Processing 这种专注于艺术的编程措辞,无法想象学习它们能教给 Python 开拓者什么)。

除了考虑一门措辞可能教给你的东西,如果你想得到一份更全面的清单,可以去查看 IEEE Spectrum 关于编程措辞盛行度和增长度的年度榜单。

过程式编程:C、Rust、Cython

Python 默认的实行模型是过程式的:从主模块的顶部开始,逐条语句地实行。
Python 对下面先容的所有数据和编程建模方法的支持,都建立在这种过程式的实行模型上。

C 措辞仍旧是无可争议的底层过程式编程的统治者。
它是 Python 官方阐明器以及 Linux 操作系统内核的核心实现措辞。
作为一名软件开拓职员,学习 C 措辞是更多地理解底层硬件的最好方法之一——C 措辞常常被称为“可移植的汇编措辞”,对付任何新的 CPU 架构来说,第一个交叉编译的运用程序将是 C 编译器。

Rust 是一种相对较新的编程措辞,由 Mozilla 创造。
Rust 的目标是吸取全体行业在不该用 C 时碰着的所有教训,设计一门能与 C 库相互操作的新措辞,供应底层的系统编程所需的对硬件用场的精确掌握,但利用不同的编译方法来进行数据建模和内存管理,从构造上肃清许多困扰 C 程序的常见毛病(如缓冲区溢出、指针重复开释缺点、空指针访问和线程同步问题)。
经由培训和早期的专业履历,我是一名嵌入式系统工程师,而 Rust 是我见过的第一种看起来有潜力缩减当前由 C 措辞和自定义汇编代码所主导的生态位的新措辞。

Cython 也是一种较底层的过程式措辞,但与 C 和 Rust 等通用措辞不同,Cython 专门用于编写 CPython 的扩展模块。
为了实现这一目标,Cython 被设计为 Python 的超集,许可程序员选择何时支持纯 Python 语法以得到灵巧性,何时支持 Cython 的语法扩展,以便天生在速率和内存效率方面能与原生 C 代码相称的代码。

学习这些措辞,你可以加深在内存管理、算法效率、二进制接口(ABI)兼容性、软件可移植性、以及将源代码转换为运行系统等实践方面的见地。

面向工具的数据模型:Java、C#、Eiffel

编程最紧张做的事情之一是为现实天下建模,最盛行的做法是供应原生的语法支持面向工具编程:对数据作构造化的分组,利用类方法操作那些数据构造。

Python 本身是经由精心设计的,无需先编写自己的类就可以利用面向工具的特性。
并不是每种措辞都采取这种方法——本小节中列出的措辞都认为学习面向工具设计是利用该措辞的必要条件。

在 20 世纪 90 年代中后期,Sun Microsystems 公司进行了一次大规模的市场推广,Java 成为了许多高档院校中计算机科学入门课的默认措辞。
虽然如今在许多传授教化活动中,Java 已经被 Python 所取代,但它仍旧是开拓商用程序时最盛行的措辞之一。
还有一些基于通用 JVM(Java 虚拟机)运行时的措辞,例如 Python 的 Jython 实现。
Android 系统的 Dalvik 和 ART 环境则是基于 Java 开放的 API 二次开拓。

C# 在许多方面与 Java 相似,在 Sun 和微软未能办理他们关于微软的 Java 实现(即 J++)的业务差异之后,C# 成为了一种替代方案。
像 Java 一样,这是一门开拓商用程序的盛行措辞,还有其它一些措辞共享着 .NET CLR(公共措辞运行时),包括 Python 的 IronPython 实现 (最早的 IronPython 1.0 的核心组件被提取成了与措辞无关的 .NET 动态措辞运行库)。
在很长一段韶光里,. NET 是一种专用于 Windows 的技能,而 mono 作为一种跨平台的开源实现,但微软在 2015 年初转向了开源生态系统计策。

与此清单中的大多数措辞不同,我不推举在日常事情中利用 Eiffel。
但是,我依然推举学习它,由于它教会了我许多关于良好的面向工具设计的知识,比如它认为“可验证的精确性”是运用程序的设计目标。
(学习 Eiffel 也让我明白了为什么“可验证的精确性”并不是大多数软件开拓时的设计目标,由于可验证的精确软件实在不能很好地处理模糊性,并且完备不适用于那些你不清晰干系的约束条件却须要给自己留下足够的回旋余地,以便能够通过迭代开拓找出更详细的细节的情形。

学习这些措辞,你可以深入理解继续模型、左券式设计、类不变性(class invariant)、前置条件、后置条件、协方差、逆变、类方法解析顺序、泛型编程以及其它适用于 Python 类型系统的观点。
还有很多标准库模块和第三方框架利用这种“看得见的面向工具”的设计风格,比如 unittest 和 logging 模块,以及 Django 框架中基于类的视图。

面向工具的 C 派生:C++、D

CPython 运行环境可以被视为一个“带有工具的 C”的编程环境——在其核心,CPython 利用 C 的方法实现面向工具编程,即定义 C 构造体来保存干系的数据,并将构造体的实例作为第一个参数通报给函数,然后对数据进行操作(这便是 CPython C API 中全能的 PyObject 指针)。
这种设计模式对应到 Python 层面,便是实例方法的显式 self 参数以及类方法的显式 cls 参数。

C++ 的目标是保持与 C 措辞源代码的完备兼容,同时添加更高等的特性,例如支持原生的面向工具编程和基于模板的元编程。
它是出了名的冗长和难以编程(只管 2011 年对措辞标准的更新办理了许多糟糕的问题),但它也是许多领域的编程首选,包括 3D 建模的图形化引擎和跨平台运用的开拓框架(例如 Qt)。

D 措辞也很有趣,由于它与 C++ 的关系类似于 Rust 与 C 的关系:它的目标是保留 C++ 的大多数令人满意的特性,同时也避免它的许多问题(如缺少内存安全)。
不像 Rust,D 不是一种从头开始设计的新编程措辞——正好相反,D 是 C++ 的衍生物,虽然它不像 C++ 一样是一个严格的 C 超集,但它遵照着一个设计原则,即任何落入 C 和 D 的共同子集的代码,在两种措辞中必须要表现同等。
Python猫原创

学习这些措辞,你可以更深入地理解将高等措辞的特性与底层 C 运行时模型相结合的繁芜性。
学习 C++,在 Python 中操浸染 C++ 编写的库和工具包时,也可能会有帮助。

面向数组的数据处理:MATLAB/Octave、Julia

面向数组的编程是为了支持数值编程模型:那些基于矩阵代数和干系数值方法的模型。

虽然 Python 的标准库不直接支持这一点,但 Python 在设计时考虑了面向数组的编程,并专门为第三方 NumPy 库和类似的面向数组的工具添加了一系列语法和语义特性。

在许多方面,Python 的科学技能栈 被作为商业 MATLAB 的替代方案,后者被广泛用于科学和工程领域的建模、仿真和数据剖析。
GNU Octave 是一个开源的方案,目标是兼容 MATLAB 代码的语法,许可儿们对照这两种面向数组的编程方法。

Julia 是另一种相对较新的措辞,重点关注面向数组的编程和基于类型的函数重载。

学习这些措辞,你可以理解 Python 的科学技能栈,以及有机会通过像 OpenCL 和 Nvidia 的 CUDA 这种技能来探索硬件层面的并行实行,并通过 Apache Spark 和专用于 Python 的 Blaze 来理解分布式数据处理。

统计数据剖析:R

随着对大型数据集的打仗越来越多,对灵巧处理这些数据集的剖析工具的需求也越来越大。
R 编程措辞便是这样的工具,它特殊关注统计性的数据剖析和可视化。

学习 R 能会让你深入理解 Python 在科学技能栈的统计剖析能力,尤其是 pandas 数据处理库和 seaborn 统计可视化库。

打算管道建模:Haskell、Scala、Clojure、F#

面向工具的数据建模和面向数组的数据处理紧张关注静态的数据,无论因此命名的属性形成凑集的形式,还是以构造化数据形成数组的形式。

比较之下,函数式编程措辞强调以打算流的形式对动态数据进行建模。
即便只学习函数式编程的基本知识,也能极大地改进数据转换操作的构造,纵然在其它过程式、面向工具或面向数组的程序中也是如此。

Haskell 是一种函数式编程措辞,对 Python 的设计产生了重大影响,最显著的是在 Python 2.0 中引入的列表推导式。

Scala 是一种(存疑的)JVM 函数式编程措辞,加上 Java、Python 和 R,它们是 Apache Spark 数据剖析平台的四种紧张编程措辞。
只管 Scala 的设计侧重于函数式编程,但它的语法、数据模型和实行模型的设计也最大限度地降落 Java 程序员利用的门槛(因此所谓“存疑的”——实在是由于,Scala 最好被归类为一门具有强函数式编程支持的面向工具编程措辞)。

Clojure 是另一种基于 JVM 的函数式编程措辞,是 Lisp 的一种方言。
它之以是涌如今这份清单里,由于它是 Python 的 toolz 函数式编程工具包的灵感来源。

F# 不是我自己特殊熟习的措辞,但它作为 .net CLR(公共措辞运行时)推举的函数式编程措辞,以是还是值得关注。

学习这些措辞,你可以深入理解 Python 自己的打算管道建模工具,包括容器推导式、天生器、天生器表达式、functools 和 itertools 标准库,以及第三方的 Python 函数工具包,比如 toolz。

事宜驱动编程:JavaScript、Go、Erlang、Elixir

打算管道是处理数据转换和剖析问题的一种极佳的方法,但许多问题须要程序作为持久性做事运行,等待事宜发生,然后处理那些事宜。
在这类做事中,为了能够同时容纳多个用户(或多个操作),常日必须要并发地处理多个事宜。

JavaScript 最初是作为 Web 浏览器的事宜处理措辞而开拓的,许可网站开拓者在本地相应客户端操作(如鼠标点击和按键敲击)和事宜(如网页完成了渲染)。
所有当代浏览器都支持它,它与 HTML5 领域工具模型(DOM)一起,已经成为一种定义用户界面外不雅观和行为的事实上的标准。

Go 是谷歌设计的一种用于创建高度可伸缩的 Web 做事的专用措辞,并且已经被证明是一种非常适宜开拓命令行运用程序的措辞。
从编程措辞设计的角度来看,Go 最有趣的方面是在其核心并发模型中利用了通信顺序进程(Communicating Sequential Processes)观点。

Erlang 是由爱立信设计的专用措辞,用于创建高度可靠的电话交流机以及类似的设备。
它被用于开拓出了盛行的 RabbitMQ 代理中间件。
Erlang 利用 Actor 模型作为核心的并发原语,在实行线程之间通报,而不是让它们直接共享数据。
虽然我从未用过 Erlang 编程,但我的第一份全职事情涉及一个基于 Actor 的 C++ 并发框架,而该框架由一名前爱立信工程师开拓,其余,我自己也开拓了一个这样的框架,基于德州仪器(Texas Instrument)的轻量级 DSP/BIOS 运行时(现在的 TI-RTOS)里面的 TSK (Task)和 MBX (Mailbox)原语。

Elixir 涌如今这份清单里,由于它被设计运行在 Erlang VM 上,供应了与 Erlang 相同的并发语义,同时还供应了一系列在措辞层面上的特性,打造出一个更加全面的环境,更有可能吸引其它措辞例如 Python、Java 或 Ruby 的开拓者。

学习这些措辞,你可以深入理解 Python 对并发和并行的支持,包括原生协程、基于天生器的协程、concurrent.futures 和 asyncio 标准库模块、第三方网络做事开拓框架(如 twisted 和 Tornado)、Django 中引入的 channel 观点、GUI 框架中的事宜处理循环。
Python进阶

渐变类型:TypeScript

在 Python 3.5 中涌现的一个比较有争议的特性是新引入的 typing 模块,它为 Python 生态带来了一个支持渐变类型的标准词典。

Python猫注:Gradual typing 是 Jeremy Siek 和 Walid Taha 在 2006 年提出的理论,许可程序中同时涌现动态类型与静态类型。
海内有人将其翻译为“渐进类型”、“渐近类型”、“渐进定型”、“动静稠浊类型”等等,但我以为并不足好。
渐变类型大概是我的创始,借鉴自 Photoshop 的渐变颜色,表达出从动态类型到静态类型的过渡(或者说交融共处的)特点。
“渐变”一词有冲破界线分明的状态(如大小、远近、明暗),从而达到中和状态的含义。

对付那些紧张从 C、C++ 和 Java 等措辞中打仗静态类型的人来说,这彷佛是一个令人吃惊的糟糕特性(因此引发了争议)。

微软的 TypeScript 为 Javascript 程序供应了渐变类型,因此它能更好地阐明这个观点。
TypeScript 代码会被编译成 JavaScript 代码(然后就不包含运行时类型检讨),盛行的 JavaScript 库的 TypeScript 表明会掩护在专用的 DefinitelyTyped 仓中。
Python猫原创

正如 Chris Neugebauer 在澳大利亚 PyCon 演讲 中指出的,这很像是 Python 与 typeshed 类型提示库、以及像 mypy 这种类型推断和剖析工具之间的关系。

在实质上,TypeScript 和 Python 中的类型提示都是编写特定种类的测试的办法,要么利用单独的文件(就像普通测试一样),要么嵌入在代码体中(就像静态类型措辞中的类型声明一样)。
对付这两种情形,你都要运行一个单独的命令,来检讨别的代码是否与已添加的类型断言同等(对付 TypeScript,这是在编译成 JavaScript 时隐式地发生的;对付 Python 的类型提示,这是一个完备可选的静态剖析任务)。

动态元编程:Hy、Ruby

C、C++、C# 和 Java 等措辞的学习者在打仗 Python 时,常常感到不安的一个特性是“代码即数据”(code is data):函数和类之类的东西是运行时工具,可以像其它工具一样被操纵。

Hy 是一种 Lisp 方言,可以同时在 CPython VM 和 PyPy VM 上运行。
Lisp 及其方言将“代码即数据”的观点推到了极致,由于 Lisp 代码由嵌套列表组成,这些列表描述了要实行的操作(这门措辞的名称本身就代表列表处理器“LISt Processor”)。
Lisp 风格措辞的强大之处在于,它让你非常随意马虎编写出自己的领域特定代码。
Lisp 风格措辞的最大缺陷是,它让你非常随意马虎编写出自己的领域特定代码,但这可能导致每个人写的代码变得难以阅读。

Ruby 措辞在许多方面与 Python 相似,但对付 Python 中“支持但不鼓励”的动态元编程特性,Ruby 社区则相对开放。
这包括在已有类定义中添加新的方法,以及利用闭包来实现措辞的核心构造,例如迭代。
(Python猫注:关于两种措辞中迭代构造的实现比拟,可阅读 通过 for 循环,比较 Python 与 Ruby 编程思想的差别)

学习这些措辞,可以让你深入理解 Python 自己的动态元编程特性,包括函数和类装饰器、猴子补丁、unittest.mock 标准库、以及像 wrapt 这样的第三方工具代理模块。
(我不知道学习哪种措辞可以深入理解 Python 的元类系统,如果有人在这方面有任何建议,请在评论中奉告我。
Python 的元类驱动着很多特性,例如核心的类型系统、抽象基类、列举类型和渐变类型表达式的运行时求值。

务实问题办理:Lua、PHP、Perl

主流的编程措辞并不是伶仃存在的——它们作为一个更大的生态系统的一部分而存在,这个生态系统由发行者(企业和社区组织)、终端用户、框架开拓者、工具开拓者、教诲事情者等等组成。

Lua 是一种盛行的编程措辞,作为一种脚本引擎嵌入到大型程序中。
标志性的例子是它被魔兽天下游戏用来编写客户端插件,它也被嵌入到了许多 Linux 发行版所利用的 RPM 组件中。
与 CPython 比较,Lua 运行时的大小常日只有 CPython 的十分之一,而且由于较弱的自省能力,它更随意马虎与程序的其它部分以及做事器的操作系统隔离开来。
Lua 社区对 Python 生态的一个显著贡献是 LuaJIT FFI(Foreign Function Interface 外来函数接口),它被 CPython 和 PyPy 采取,作为支持 JIT 的 cffi 接口库的根本。

PHP 是另一种盛行的编程措辞,作为 Linux-Apache-MySQL-PHP LAMP 技能栈中的“P”而崛起,由于它专注于天生 HTML 页面,并且在早期的虚拟专用做事器(Virtual Private Server,简称 VPS) 供应商中广泛利用。
只管其设计上有诸多的观点性毛病让人感到绝望,但它如今是几个极其盛行的开源 Web 做事的根本,包括 Drupal 内容管理系统、Wordpress 博客引擎和维基百科的 MediaWiki 引擎。
PHP 还支撑着一些主要的做事,比如 Ushahidi 平台,它是一个开源的社会化新闻发布社区。

像 PHP 一样,Perl 也是基于 Linux 而崛起。
但跟 PHP 专门作为 Web 开拓平台不同,Perl 是系统管理员的工具,在基于文本的 Linux 操作系统中,它利用正则表达式将命令的输出转成字符串,并进行操作。
当 sh、awk 和 sed 都无法胜任某些任务时,Perl 涌现并派上了用场。

学习这些措辞,在编程措辞设计方面,不大可能得到什么俊秀审美或者优雅观点。
学习它们,最可能的是理解编程措辞在现实中是如何被分发和采取的,以及这些在多大程度上取决于有时的机会、历史意外事宜、以及发行商在系统中默认集成而降落了利用门槛,而不是取决于措辞本身固有的能力。
Python猫原创

特殊是,它可以供应对以下项目的主要性的洞察:CKAN、OpenStack NFV、Blender、SciPy、OpenMDAO、PyGMO、PyCUDA、树莓派基金会和 Python 被大量商业组织采取,以保护它们在 Python 生态中不断的投入。

编程思维:Scratch、Logo

我常常跟函数式编程以及面向工具编程的推戴者们谈论,他们声称这类措辞就像过程式措辞一样易于学习。

如果我们评论辩论的是通过嵌入式编程(例如机器人)进行传授教化,在软件中建模的工具都有现实天下的对应物,比如学生们可以触摸的传感器、马达和继电器,那么,那我会认为 OOP 的人有一定的道理。

但是对付其他人,我现在有一个标准的寻衅:拿起一本烹饪书,把个中一个食谱翻译成你认为是随意马虎学习的编程措辞,然后找一个能理解烹饪书中措辞的学生,让其按照翻译好的食谱操作。
实在,他们不须要真正地操作下去——只需做一个思想实验,就足以意识到他们声称的“很随意马虎学”是假设了多少先验知识。
(我很期待看到学术研究职员在现实中做这种研究——我真的很希望看到结果)

另一种办理这个问题的方法是去学习那些实际上被用来教孩子们编程思维的措辞。

个中最受欢迎的是 Scratch,它利用了拖放编程界面,让学生们操纵一个独立的图形环境,它里面的电子图形可以移动,并相应环境中的事宜。
像 Scratch 这样的图形环境就相称于我们用来教孩子阅读和书写的图画书。

利用分外的教诲措辞来操作图形环境的想法并不新鲜,最早的例子之一是 1960 年代发明的 Logo 环境。
在 Logo 中(以及类似的环境,如 Python 的 turtle 模块),你紧张打交道的是一个“乌龟(turtle)”,你可以通过绘制线条来辅导它移动和修正环境。
这样的话,命令序列、重复和状态(例如,“起笔”、“落笔”)可以基于人们的自然直觉来利用(“想象你是那只乌龟,如果你右转 90 度会发生什么?”)

回顾并重新学习这些措辞,有助于有履历的程序员放下固化的不雅观念:它们所用的观点可以提醒我们,这些观点是我们如今认为天经地义的,但初学者们须要先学习。
当这样做的时候,我们能够更好地与学生和其他初学者们相处,由于我们更有可能打开逻辑的枷锁,也不会再忽略那些有必要的学习步骤。

译者附注:以上便是全部的译文。
我还翻译过不少优质的文章,分享近期的几篇如下:

1、通过 for 循环,比较 Python 与 Ruby 编程思想的差别

2、与 Python 之父谈天:更快的 Python

3、Python 官方研讨会:彻底移除 GIL 真的可行么?

4、深入Python阐明器源码,我终于搞明白了字符串驻留的事理

5、为什么 Python 没有函数重载?如何用装饰器实现函数重载?

6、Python优化机制:常量折叠

如果你以为本文有帮助,请点赞+关注支持一下啦,感激!

标签:

相关文章

房山第一探寻历史文化名区的魅力与发展

房山区,位于北京市西南部,历史悠久,文化底蕴深厚。作为北京市的一个重要组成部分,房山区的发展始终与首都的发展紧密相连。房山区积极推...

Web前端 2025-02-18 阅读1 评论0

手机话费开钻代码数字时代的便捷生活

我们的生活越来越离不开手机。手机话费作为手机使用过程中的重要组成部分,其充值方式也在不断创新。手机话费开钻代码应运而生,为用户提供...

Web前端 2025-02-18 阅读1 评论0

探寻专业奥秘如何查询自己专业的代码

计算机科学已成为当今社会不可或缺的一部分。掌握一门专业代码对于个人发展具有重要意义。面对繁杂的学科体系,如何查询自己专业的代码成为...

Web前端 2025-02-18 阅读1 评论0