<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[少儿编程介绍 | 校外课]]></title><description><![CDATA[少儿编程介绍及少儿编程教程，内容覆盖：校外课少儿编程课程学习、Adafruit 硬件编程、Python 编程、Javascript 编程、少儿编程基础和算法等]]></description><link>https://learn.xiaowai.co/</link><image><url>https://learn.xiaowai.co/favicon.png</url><title>少儿编程介绍 | 校外课</title><link>https://learn.xiaowai.co/</link></image><generator>Ghost 2.20</generator><lastBuildDate>Tue, 04 Nov 2025 03:13:36 GMT</lastBuildDate><atom:link href="https://learn.xiaowai.co/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Adafruit Circuit Playground 可穿戴编程开发主板 - 引脚介绍]]></title><description><![CDATA[Adafruit 可穿戴编程开发主板功能丰富，且内置 USB 接口，连接电脑即可编写并运行程序，是在真实硬件上实践编程的最佳方法。在这篇文章里，我们来介绍一下 Adafruit Circuit Playground 可穿戴编程开发主板的引脚。]]></description><link>https://learn.xiaowai.co/adafruit-circuit-playground-pinout-introduction/</link><guid isPermaLink="false">5e53d100ad269b0530f2cb28</guid><category><![CDATA[Adafruit 硬件编程]]></category><dc:creator><![CDATA[Jason]]></dc:creator><pubDate>Mon, 24 Feb 2020 14:22:22 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/02/Adafruit-Circuit-Playground---------.png" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/02/Adafruit-Circuit-Playground---------.png" alt="Adafruit Circuit Playground 可穿戴编程开发主板 - 引脚介绍"><p>Adafruit 可穿戴编程开发主板 (Adafruit Circuit Playground Express)，是一款基于ARM Cortex-M0 处理器的一体式编程开发主板。主板内嵌陀螺仪，加速计，温度、光线、声音及压力传感器，GPS 和麦克风微控制器。主板呈圆形，周围带鳄鱼夹焊盘，支持焊接或缝接，并可使用 USB、AAA 电池组或锂电池供电。主板功能丰富，且内置 USB 接口，连接电脑即可编写并运行程序，是在真实硬件上实践编程的最佳方法。</p><p>在这篇文章里，我们来解释一下 Adafruit Circuit Playground 可穿戴编程开发主板的引脚。本文内容包含以下几个部分：</p><blockquote><a href="#section1">一、引脚简介</a>	<br><a href="#section2">二、供电引脚</a>	<br><a href="#section3">三、通用输入/输出引脚</a><br><a href="#section4">四、内部使用引脚</a><br><a href="#section5">五、引脚名 与 number 号之间的对应关系</a><br><a href="#section6">六、示例代码</a></blockquote><p></p><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h3 id="-">一、引脚简介</h3><p></p><p>Adafruit Circuit Playground 可穿戴编程主板上紧靠边缘有 14 个圆孔，每个圆孔周围有导电金属焊盘，可通过焊结或使用鳄鱼夹连接线连接到其他设备。这就是主板上的引脚（pinout）。在这 14 个引脚中，共有 6 个供电专用的引脚，以及 8 个通用的输入/输出引脚。除此之外在主板上也有很多主板内部器件（如温度感应、光线感应等器件）专用引脚。</p><p>在下面所列的主板图片里可以看到每个引脚的编号。下面就来介绍一下这些引脚。</p><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h3 id="--1">二、供电引脚</h3><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://xiaowai.co/docs/applab/assets/circuit_playground_powerpads.jpg" class="kg-image" alt="Adafruit Circuit Playground 可穿戴编程开发主板 - 引脚介绍"><figcaption>Adafruit Circuit Playground 可穿戴编程主板 - 供电引脚</figcaption></figure><!--kg-card-end: image--><p><br>上图中标记出来的，就是这 6 个供电专用的引脚，它们均匀分布于编程主板四周。在这 6 个引脚之中：</p><ul><li>3 个标记为 GND - Ground 的电源地线引脚。这三个地线引脚是连接在一起的，用于信号或电源的地线连接。</li><li>2 个 3.3 V 标记的电源输出引脚，用于编程主板通过板载电源调节向外部连接器件进行电源输出。最大可以提供约 500 毫安 (mA) 的电流，但这包括内部器件供电电流。向外部器件输出的电流通常可以有 300 毫安 (mA) 左右；如果不开启板载霓虹灯，向外可以输出约 450 mA 的电流。</li><li>1 个 Vout 标记的电压输出引脚。这是一个特殊的电源引脚，与上面 3.3 V 引脚不同的是，它直接连接到主板的外部 USB 电源或电池，而不通过主板电源调节，所以可以提供比上面 3.3 V 电源引脚更高的电压，实际电压以主板连接的电源为准。这个引脚上有一个可复位的保险装置，允许通过电流约 500 毫安到 1 安培最大电流。如果保险触发断电保护，可以稍等一会，它会自动复位。</li></ul><p>如果需要为芯片、传感器或其他需要 3.3 V 电源的低功耗设备提供电源，就可以使用 3.3 V 电源引脚。</p><p>如果需要连接 NeoPixels、DotStars 或其他较高功率的电子设备器件，需要达到 5 伏左右的电压，就可以使用 Vout 电源引脚。</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h3 id="--2">三、通用输入/输出引脚</h3><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://xiaowai.co/docs/applab/assets/circuit_playground_iopads.jpg" class="kg-image" alt="Adafruit Circuit Playground 可穿戴编程开发主板 - 引脚介绍"><figcaption>Adafruit Circuit Playground 可穿戴编程主板 - 通用输入输出引脚</figcaption></figure><!--kg-card-end: image--><p><br>Adafruit Circuit Playground 可穿戴编程主板上共有 8 个通用输入/输出（General Purpose Input Ouput）引脚。如上图所示。这 8 个引脚里，有一些共同的特点，也有一些区别。</p><h3 id="--3">共同的特点</h3><p></p><p>都可以用作 LED 灯、按钮和开关的数字输入、数字输出。此外，所有这些都可以用作模拟信号输入（12 位 ADC）。除了A0之外，其他所有的引脚都可以被用于硬件电容式触摸。所有引脚也可用作硬件的中断输入。</p><p>引脚可向外提供最高 20 毫安（mA）的电流。不要将电机或其他较大功率器件直接连接到这些管脚上！但可以考虑连接到转换器来控制电机的开或关。</p><p>所有的这些引脚都是对外 3.3 V 输出电平，所以不要与 5 V 输入一起使用。一般来说，大多数 5 V 设备都可以转为 3.3 V 输出。</p><p>除了与板载扬声器共享的 A0 之外，所有其他引脚都是独立的，它们不被板载的任何 USB 连接、LED 灯 或 传感器等共用，因此在编程里使用这些引脚时，不必担心会干扰主板其他功能。</p><h3 id="--4">独有的特点</h3><p></p><p>让我们从比较特殊的位于主板右下角的 A0 引脚开始，然后按逆时针挨个介绍。</p><ul><li>A0（又称D12）-这是一个特殊的引脚，可以做真正的模拟输出，所以它非常适合播放音频剪辑。输入可以是数字输入/输出，也可以是模拟输入/输出，但如果这样做，会干扰内置扬声器。这是一个引脚，不能用于电容接触。</li><li>A1/D6-该引脚可以是数字I/O或模拟输入。该引脚具有脉宽调制输出，可以是电容式触摸传感器</li><li>A2/D9-该引脚可以是数字I/O或模拟输入。该引脚具有脉宽调制输出，可以是电容式触摸传感器</li><li>A3/D10-该引脚可以是数字I/O或模拟输入。该引脚具有脉宽调制输出，可以是电容式触摸传感器</li><li>A4/D3-该引脚可以是数字I/O或模拟输入。该引脚也是I2C SCL引脚，可以是电容式触摸传感器</li><li>A5/D2—该引脚可以是数字I/O或模拟输入。该引脚也是I2C SDA引脚，可以是电容式触摸传感器</li><li>A6/D0-该引脚可以是数字I/O或模拟输入。该引脚具有脉冲宽度调制输出、串行接收和电容式触摸传感器</li><li>A7/D1—该引脚可以是数字I/O或模拟输入。该引脚具有脉冲宽度调制输出，串行传输，可以是电容式触摸传感器</li></ul><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h3 id="--5">四、内部使用引脚</h3><p></p><p>除了上面提到的 14 个引脚外，在 Adafruit Circuit Playground 可穿戴编程主板里还有很多板载器件内部使用的引脚，这些引脚包括：</p><ul><li>D4 - 左按钮 A</li><li>D5 - 右按钮 B</li><li>D7 - 主板开关</li><li>D8 - 内置 10 个霓虹灯</li><li>D13 - 红色 LED 灯</li><li>D27 - 加速计</li><li>D25 - 红外发射器</li><li>D26 - 红外接收器</li><li>A0 - 扬声器模拟输出</li><li>A8 - 光线传感器</li><li>A9 - 温度传感器</li><li>A10 - 红外距离传感器</li><li>D28 - 内部 I2C SDA（使用线1访问）</li><li>D29 - 内部 I2C SCL（使用线1访问）</li><li>D30 (PIN<em>SPI</em>MISO) - SPI FLASH MISO</li><li>D31 (PIN<em>SPI</em>SCK）-SPI FLASH SCK</li><li>D32 (PIN<em>SPI</em>MOSI）-SPI FLASH MOSI</li><li>D33-SPI 闪存芯片选择</li></ul><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h3 id="-number-">五、引脚名 与 number 号之间的对应关系</h3><p></p><p>引脚相关的方法有：<a href="https://xiaowai.co/docs/applab/pinMode">pinMode()</a>、<a href="https://xiaowai.co/docs/applab/digitalWrite">digitalWrite()</a>、<a href="https://xiaowai.co/docs/applab/digitalRead">digitalRead()</a>、<a href="https://xiaowai.co/docs/applab/analogWrite">analogWrite()</a>、<a href="https://xiaowai.co/docs/applab/analogRead">analogRead()</a>。使用这些方法时都需要指定引脚 <code>number</code>。下面的列表里包含所有引脚名称/标记 与引脚 <code>number</code> 的对应关系。</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>number</th>
<th>对应引脚名称/标记</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>A6 / RX</td>
</tr>
<tr>
<td>1</td>
<td>A7 / TX</td>
</tr>
<tr>
<td>2</td>
<td>D2 / A5</td>
</tr>
<tr>
<td>3</td>
<td>D3 / A4</td>
</tr>
<tr>
<td>4</td>
<td>D4 / left button</td>
</tr>
<tr>
<td>5</td>
<td>D5 / right button</td>
</tr>
<tr>
<td>6</td>
<td>D6 / A1</td>
</tr>
<tr>
<td>7</td>
<td>D7 / slide switch</td>
</tr>
<tr>
<td>9</td>
<td>D9 / A2</td>
</tr>
<tr>
<td>10</td>
<td>D10 / A3</td>
</tr>
<tr>
<td>12</td>
<td>D12 / A0</td>
</tr>
<tr>
<td>13</td>
<td>D13 / LED</td>
</tr>
<tr>
<td>14</td>
<td>A0</td>
</tr>
<tr>
<td>15</td>
<td>A1</td>
</tr>
<tr>
<td>16</td>
<td>A2</td>
</tr>
<tr>
<td>17</td>
<td>A3</td>
</tr>
<tr>
<td>18</td>
<td>A4</td>
</tr>
<tr>
<td>19</td>
<td>A5</td>
</tr>
<tr>
<td>20</td>
<td>A6</td>
</tr>
<tr>
<td>21</td>
<td>A7</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="--6">六、示例代码</h2><p></p><p>设置红色 LED 灯（引脚编码 #13）的引脚模式，使用 digitalWrite() 方法打开编程主板上的红色 LED 灯。</p><!--kg-card-begin: markdown--><pre><code>// 红色 LED 灯连接引脚 #13
// 设置引脚 #13 状态可以控制 红色 LED 灯的开关
// 将引脚 #13 设置为输出模式
pinMode(13, &quot;output&quot;);
// 使用 digitalWrite 方法接通（通电模式）引脚 #13
digitalWrite(13, 1);
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://xiaowai.co/docs/applab/assets/cp_red_led.jpg" class="kg-image" alt="Adafruit Circuit Playground 可穿戴编程开发主板 - 引脚介绍"><figcaption>Adafruit Circuit Playground 可穿戴编程主板 - 红色 LED 灯位置</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p><br>了解更多内容，请参考：<br><a href="https://studio.xiaowai.co/projects/applab/new">进入 Applab 应用实验室</a><br><a href="https://xiaowai.co/docs/applab/index">Applab 编程语言参考</a><br><a href="https://studio.xiaowai.co/maker/setup">查看 Applab 环境配置</a><br><a href="https://learn.xiaowai.co/adafruit-circuit-playground-dev-environment-setup-guide/">Adafruit 编程主板用户指南</a><br><a href="https://studio.xiaowai.co/projects/public">查看编程作品</a></p><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/">少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/">少儿编程之编程语言选择：Java 与 JavaScript 详细比较</a><br><a href="https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/">少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 有哪些大的改进</a><br><a href="https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/">少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示</a></p><p></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/a-new-definition-of-computational-thinking/">少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的</a><br><a href="https://learn.xiaowai.co/thought-as-a-technology/">少儿编程之编程思想介绍 ——  思想，作为一种技术</a><br><a href="https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/">少儿编程之 Kill Math 项目介绍：让数学不只是符号</a><br><a href="https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/">少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="Adafruit Circuit Playground 可穿戴编程开发主板 - 引脚介绍"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之随机数：计算机里的随机数，真随机数与伪随机数]]></title><description><![CDATA[随机数最初被应用在密码学里，计算机出现后被广泛应用于计算机编程领域。从简单的短信验证码、幸运转盘、随机播放音乐、棋牌类游戏中的随机洗牌，到安全登录、使用随机密钥进行数据加密等，都会用到随机数。在这篇文章里，我们就来介绍一下计算机里的随机数，以及真随机数与伪随机数。]]></description><link>https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/</link><guid isPermaLink="false">5e4c1512ad269b0530f2c3d0</guid><category><![CDATA[编程科普]]></category><dc:creator><![CDATA[Jason]]></dc:creator><pubDate>Mon, 24 Feb 2020 12:47:36 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/02/random-numbers-in-computer-science-real-vs-pseudorandom-number.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/02/random-numbers-in-computer-science-real-vs-pseudorandom-number.jpg" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"><p>随机数最初被应用在密码学里，计算机出现后被广泛应用于计算机编程领域。从简单的短信验证码、幸运转盘、随机播放音乐、棋牌类游戏中的随机洗牌，到安全登录、使用随机密钥进行数据加密等，都会用到随机数。在这篇文章里，我们就来介绍一下计算机里的随机数，以及真随机数与伪随机数。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. 什么是随机数</a><br><a href="#section2">2. 真随机数与伪随机数</a><br><a href="#section3">3. 为什么使用伪随机数，而不是真随机数</a><br><a href="#section4">4. 如何生成伪随机数</a><br><a href="#section5">5. 如何生成真随机数</a><br><a href="#section6">6. 真随机数或伪随机数很重要吗</a><br><a href="#section7">7. 有时候，可能并不需要真随机数</a><br><a href="#section8">8. 随机数偏差：赌徒谬误</a><br><a href="#section9">9. 蒙特卡洛方法使用随机数求 π</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-">1. 什么是随机数</h2><p></p><p>很多人都玩过掷骰子的游戏，通过掷骰子的方式生成的点数，就是一个 1 到 6 之间的随机数。随机数可以简单理解为随机的数字，是从一组可能的值中提取出来的，并且每个可能的值被提取的概率是一样的。这也是随机数的基本特点：随机性。除了随机性，真正的随机数还需具备另外两个特点：不可预测性和不可重现性。</p><ul><li>随机性：不存在统计学偏差，是完全杂乱的数列</li><li>不可预测性：不能从过去的数列推测出下一个出现的数</li><li>不可重现性：除非将数列本身保存下来，否则不能重现相同的数列</li></ul><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="2-">2. 真随机数与伪随机数</h2><p></p><p>同时满足上面三个条件的随机数就是「真随机数」（true random numbers）。前面提到的掷骰子，产生的数就是真随机数，因为它产生的数列同时具备随机性、不可预测性、不可重现性三个特点。</p><p>有真随机数就有假随机数，也就是「伪随机数」（pseudorandom numbers）。具有随机性但又不能满足上面所有条件的都被归类为伪随机数。而伪随机数又分两种：其中只有随机性特点的伪随机数被称为「弱伪随机数」，有随机性同时又有不可预测性的伪随机数被称为「强伪随机数」。</p><p>在一些对安全级别要求不高的随机数应用场景中（如短信验证码、幸运转盘），可以使用弱伪随机数。而在一些安全级别要求较高的场景中，如使用随机密钥进行数据加密时，就需要使用强伪随机数甚至真随机数，这样可以提高加密过程的不可预测性，从而增加破解难度。</p><p>平时我们接触到的计算机里使用的随机数都是伪随机数。下面是一个使用真随机数与伪随机数生成位图的比较。图片左侧使用的是真随机数（random.org 数据），右侧使用的则是计算机中的随机数（PHP rand 函数生成的伪随机数）。可以看到计算机里的伪随机数具有不那么随机（具有明显周期性）的特点。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/02/------------.png" class="kg-image" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"><figcaption>真随机与伪随机数位图对比</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="3-">3. <strong><strong>为什么使用伪随机数</strong>，而不是真随机数</strong></h2><p></p><p>既然真随机数比伪随机数更随机，为什么还需要使用伪随机数呢？简单来说就是随机数越是接近真随机数，生成的成本越高。</p><p>首先一般的计算机根本无法生成真随机数。计算机里生成随机数的方法都是首先获取一个种子数字（如计算机时间），然后将这个数字通过某种算法经过一系列运算从而得到随机数，同时这个随机数又会作为下一个随机数的种子数字。但不管采用什么算法，都无法满足不可重现性这一特点。因为只要后面的数字与前面出现过的数字相同时，后面生成的随机数列也会是相同的。</p><p>而要生成真随机数，除了算法还需要借助一些特殊硬件在算法中加入其它一些随机因子。如在服务器上使用可以获取服务器本身热噪声数据的硬件设备。</p><p>并且越是接近真随机数，生成过程所花费的时间会越长，因为这通常意味着需要使用更复杂的算法进行更多的运算。这也是很多场景里使用伪随机数，甚至是弱伪随机数的一个重要原因。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="4-">4. <strong><strong>如何生成伪随机数</strong></strong></h2><p></p><p>下面以生成随机数最基础的方法「线性同余法」（Linear congruential generator）为例，看一下如何生成一组随机数。</p><p>线性同余法使用下面的递归公式来生成随机数列：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/02/------2.svg" class="kg-image" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"></figure><!--kg-card-end: image--><p>其中 a、c、m 是三个设定的常数。用 a 乘以上一个随机数，与 c 相加，最后与 m 求余，从而得到下一个随机数。在算第一个随机数时，上一个随机数还不存在，需要指定一个数字，这个数字被称为种子数字（seed）。</p><p>线性同余法的周期（也就是出现两个相同随机数的间隔）最大为 m，因为任何数与 m 取余的结果都是一个位于 0 与 m - 1 之间的数字，最多递归到第 m 次必然出现与前面出现数字重叠的现象。而通过这个算法也可以看到，只要出现一个重复的数字，后面出现的所有数字序列与前面出现的序列都是重叠的。而大部分情况下线性同余法的周期都会小于 m。要令线性同余法达到最大周期 m，a、c 以及 m 三个常数数值还应符合以下条件：</p><ul><li>c 与 m 互质</li><li>m 的所有质因数都能整除 a - 1</li><li>若 m 是 4 的倍数，则 a - 1 也是</li><li>a、c、以及种子数字都比 m 小</li><li>a、c 是正整数</li></ul><p>可以通过两个 a、c、m 不同取值的例子，看一下取值对这个算法的影响。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/02/-------------1.png" class="kg-image" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"></figure><!--kg-card-end: image--><p>通过上面的结果可以看到，当 m = 9, a= 2, c=0 时，生成随机序列的周期依赖种子数字（seed）的取值。当种子数字为 1 时，可以生成一个周期为 6 的随机序列；而当种子数字为 3 时，随机序列的周期仅为 2，仅能生成值为 6 或 3 这两种数字。而当 m = 9, a= 2, c=1 时，不管种子数字是多少，都可以生成一个周期为 9（最大周期）的随机序列。</p><p>在实际计算机生成随机数的算法里，m 会取一个很大的数字（如 2^32，2 的 32 次方），同时严格选择 a 与 c 的值，这样可以使生成的随机数列周期很大（接近 m 值）。但不管怎样，算法总会在某个时刻重复出现前面重复出现过的数字，并且在这个数字后面的所有数字都会与前面出现的部分重复。这也是我们说平时我们接触到的计算机里使用的随机数都是伪随机数的原因。</p><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="5-">5. <strong><strong>如何生成真随机数</strong></strong></h2><p></p><p>要在计算机里生成真随机数，除了算法方面还需要借助一些特殊的硬件在算法中加入其它一些随机因子。这些随机因子可以是用户键盘或鼠标相关的随机操作数据，也可以是环境噪音、计算机本身热噪声、宇宙射线、放射性同位素衰变数据等任何在物理层面产生的随机数据。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://assets.matters.news/embed/84a40e81-3775-4cbd-b978-b52a082ee893.png" class="kg-image" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"><figcaption><span style="border-collapse: inherit; box-sizing: inherit; background-repeat: no-repeat; background-position: 50% center; background-size: cover;">使用鼠标和键盘输入来生成随机数</span></figcaption></figure><!--kg-card-end: image--><p>现在某些计算机 CPU 里可以通过放大电路的热噪声并以此为因子来产生真随机数。我们知道温度高于绝对零度的原子都存在热运动，在集成电路里这些原子的热运动会在电路里产生噪声，噪声会使得电路中的电压存在微小的起伏，而这些起伏变化是可以视为随机的。这种 CPU 正是通过获取这些变化的随机数据并以此来生成真随机数。</p><p>但这种真随机数也有明显的缺点，那就是生成的速度比我们上面提到的伪随机数会慢很多。通常这种真随机数只被用在一些对安全级别要求较高的场景中，如使用随机密钥进行数据加密时，用来提高加密过程的不可预测性，增加破解难度。<br></p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="6-">6. <strong><strong>真随机数或伪随机数很重要吗</strong></strong></h2><p></p><p>对于一些如打乱音乐播放列表或在触发一个游戏事件时挑选一个随机样本的一般场景里，使用的究竟是伪随机数还是真随机数其实无关紧要。在这些场景中，是不是接近真随机数对一般用户来说区别并不是很大。</p><p>在某些场景中，使用伪随机数还可能是更好的选择，比如为某些科学研究挑选一个随机样本时，使用伪随机数能让其他人通过使用同样的种子数字值来复现你的研究。在一些游戏开发领域，在测试游戏时能够复现同样的「随机」事件反而会带来更多便利。</p><p>而在另外一些场景中，需要使用真随机数，或使用随机性相对较高的随机数如强伪随机数。如在数据加密相关应用中，使用真随机数是非常重要的，因为这有助于数据的持续保护。另外在一些棋牌类游戏或博彩类应用中增加相关随机性也可以有效降低各种作弊可能。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="7-">7. <strong><strong>有时候</strong>，可能并不需要<strong>真随机数</strong></strong></h2><p></p><p>关于随机数，有些时候真随机数并不一定是人们的所预期的「随机数」。以下面这张图里的左右两部分为例 —— 你觉得其中哪个部分是真正的随机分布，哪个部分又是刻意营造的随机分布？</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://assets.matters.news/embed/adc9a4ba-e993-47bb-9b6a-443490b1e5c0.png" class="kg-image" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"><figcaption>左右两部分，其中有一个是随机分布的</figcaption></figure><!--kg-card-end: image--><p>很多人会认为右边黑点的分布看起来更随机一些。但其实右边的部分为了确保黑点的均匀分布经过了调整，是可以营造的效果。事实上，左边的部分才是真实随机分布的结果。而这种真实随机分布的结果有时却并不一定符合我们的直观预期。</p><p>在线数字音乐服务 Spotify 曾经有这样一个案例。多年以来，Spotify 用户一直在抱怨随机音乐播放列表的随机效果并不是很随机，他们认为 Spotify 的随机算法有问题。Spotify 调查了这个问题，发现他们的算法的确是随机的，但问题是越是随机，同一位艺术家的音乐越有可能会被一首接一首地播放。而这显然不符合用户对随机的预期。为了解决这一问题，Spotify 在算法中降低了随机性，使得来自同一艺术家的音乐在播放列表中刻意被分开，使其更符合人们心目中随机性。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="8-">8. 随机数偏差：<strong><strong>赌徒谬误</strong></strong></h2><p></p><p>正像上面例子我们看到的，人们期望的随机性与真实的随机性之间并不总是一致。这种偏差现象又被称为「赌徒谬误」（gambler’s fallacy）。就像掷硬币时，如果连续出现十次正面，人们往往会相信第十一次掷出背面的概率会大一些，但事实却不是这样。</p><p>赌徒谬误可以总结为下面两点：</p><ol><li>相信独立随机事件（比如掷硬币、掷骰子）具有某种固有的趋向于平均值的性质。就像掷硬币时，如果出现了连续正面朝上的情况，就相信背面朝上的可能性会增大，因为这样可以让正面背面出现的比率更接近平均值。</li><li>人们往往低估独立随机事件连续发生的可能性。一个常见的现象是轮盘赌桌上的人在看过之前结果的列表后，如果看到连续出现了五个黑色数字，就会相信下一个数字为红色的可能性会更高，从而低估黑色数字连续出现的可能性。</li></ol><p>假设轮盘每天转 12 小时，平均每分钟转一次，那么每天就能转 720 次。假设出现红色数字和黑色数字的概率都是 50%（为了简单起见，忽略其他情况），你认为一天里连续出现 8 次或更多次黑色或红色数字的概率是多少？</p><p>答案是大于 75%。换句话说，平均四天中有三天都会出现至少一组 8 次或更多次的黑色或红色数字连击。不仅如此，每天还有 30% 的几率出现至少 10 次的连击，而出现 12 连击的概率大约为 8%。而这显然与多数人预期的结果是不一样的。</p><!--kg-card-begin: html--></section><section id="section9"><!--kg-card-end: html--><h2 id="9-">9. 蒙特卡洛方法使用随机数求 π</h2><p></p><p><strong>蒙特卡罗方法</strong>是一种以概率统计理论为指导的数值计算方法，可以通过随机数（伪随机数）来解决很多计算问题。</p><p>比如近似计算圆周率，方法为：</p><ol><li>每次随机生成两个 0 到 1 之间的随机数，检查以这两个数为横纵坐标的点是否落在单位圆内</li><li>生成一系列随机点，统计落在单位圆内点数个数与总点数之间的比率</li></ol><p>而理论上单位圆内的点数个数与总点数的比率应该近似于四分之一圆面积与正方形面积的比率，即：π:4 。通过这样的关系我们就可以使用随机数来近似的求出 π 值。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/02/---------.gif" class="kg-image" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"><figcaption>蒙特卡洛方法使用随机数求 π</figcaption></figure><!--kg-card-end: image--><p>在 C 语言中的实现代码：</p><!--kg-card-begin: markdown--><pre><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;

int main(int argc, char* argv[]) {
  int times = 100000, sum = 0;

  srand(time(0));
  for (int i = 0; i &lt; times; ++i) {
    double x = (double) rand() / RAND_MAX;
    double y = (double) rand() / RAND_MAX;

    if ((x * x + y * y) &lt;= 1.0) {
      sum++;
    }
  }

  double pi = 4.0 * sum / times;
  printf(&quot;pi = %f&quot;, pi);

  return 0;
}
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/a-new-definition-of-computational-thinking/">少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的</a><br><a href="https://learn.xiaowai.co/thought-as-a-technology/">少儿编程之编程思想介绍 ——  思想，作为一种技术</a><br><a href="https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/">少儿编程之 Kill Math 项目介绍：让数学不只是符号</a><br><a href="https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/">少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之随机数：计算机里的随机数，真随机数与伪随机数"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点]]></title><description><![CDATA[随着学习的深入，选择一款适合自己的功能更为强大的 Python IDE 是必要的，因为它可以帮助你大大提高学习效率。在这篇文章里我们会介绍几款最为流行的 Python IDE，并比较分析它们的不同特点，从而帮助进行少儿编程学习的你选择一款更适合自己的 Python IDE。]]></description><link>https://learn.xiaowai.co/what-is-the-best-python-ide-comparing-for-your-choices/</link><guid isPermaLink="false">5e1a2b31ad269b0530f292be</guid><category><![CDATA[Python 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Thu, 06 Feb 2020 00:00:00 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/02/Getting-Started-With-Python-IDLE-1800-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/02/Getting-Started-With-Python-IDLE-1800-1.jpg" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"><p>在学习 Python 编程过程中，选择一款适合自己的 Python  IDE（集成开发环境）可以很好地提高你的学习效率。在很多 Python IDE 里，提供了应用程序开发所需的所有工具，通过使用这些工具可以节省大量的时间并简化编程工作，甚至很多基本的任务或操作都可以自动完成，让你可以腾出更多时间用于更有意义的工作，如完善项目的独特功能。在这篇文章里我们会为少儿编程学习者介绍 Python IDE 有哪些以及如何选择。</p><p>在刚开始学习 Python 时，你可能使用的是在线 Python 编辑器及运行环境，或者任何一款被介绍使用的 Python IDE，这都没有问题；因为对于开始入门的学习者来说，这就足够了。但随着学习的深入，选择一款适合自己的功能更为强大的 Python IDE 是必要的，因为它可以帮助你大大提高学习效率。在这篇文章里我们会介绍几款最为流行的 Python IDE，并比较分析它们的不同特点，从而帮助进行少儿编程学习的你了解这些工具，如果有需要也可以选择一款适合自己的 Python IDE。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. IDE和一般代码编辑器之间的区别</a><br><a href="#section2">2. IDLE: Python 入门学习者的选择</a><br><a href="#section3">3. PyCharm: 专业开发者付费选择</a><br><a href="#section4">4. Spyder: 科学运算相关开发者的选择</a><br><a href="#section5">5. Wing: 可以满足各种开发者的选择</a><br><a href="#section6">6. 在 Eclipse 里使用 PyDev</a><br><a href="#section7">7. 最好的 Python IDE 如何选择</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-ide-">1. IDE和一般代码编辑器之间的区别</h2><p></p><p>在介绍及选择最佳的 Python IDE（集成开发环境）之前，我们需要澄清 IDE 和一般的代码编辑器之间的区别。IDE 和一般的代码编辑器都是经常被用于编程开发的软件，都可被用来查看编辑代码，那么它们之间有什么区别？</p><p>简单地说，代码编辑器相比 IDE 功能更少，通常只被用来查看或编辑代码。代码编辑器通常是一个文本编辑器，虽然具有一些附加功能如语法高亮显示和代码提示，其中一些可能还内置终端或调试器，但通常只被用来查看或编辑代码。而 IDE（集成开发环境）则除了包含代码编辑器的所有功能，还包含大量其他工具，通过这些工具可以帮助快速方便的构建项目、管理项目、调试项目以及部署项目。IDE 通常还包含各种资源库，使编写代码的工作变得更加容易。</p><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="2-idle-python-"><strong>2. IDLE: Python 入门学习者的选择</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/02/Python-IDLE.jpg" class="kg-image" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"><figcaption>IDLE: Python 入门学习者的选择</figcaption></figure><!--kg-card-end: image--><p>IDLE 通常被推荐为 Python 入门学习者 Python IDE 的最佳选择，它的名称本身的含义就是集成开发和学习环境（Integrated Development and Learning Environment）。IDLE 完全用 Python 编写，在 Windows、macOS 和 Unix 都可以运行。IDLE 是免费的，自 1998 年以来它一直内置在 Python 中。这意味着只要你安装了 Python 就可以使用 IDLE，而不需要单独安装。</p><p>IDLE 里有代码编辑器的所有基本功能（语法高亮显示、自动缩进、自动代码提示等），在 IDLE 里你也可以直接调试和执行代码。IDLE 里还有一些扩展功能，但是与其他Python IDE 集成开发环境相比，这些扩展功能并不是很多。IDLE  主要是满足 Python 的基础用途。对于初学者来说，IDLE 因为功能相对简单，反而更容易使用，所以是入门学习者的一个很好的选择。</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="3-pycharm-"><strong>3. PyCharm: 专业开发者付费选择</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/11/Screenshot-2019-11-11-at-09.32.13-294x300.png" class="kg-image" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"><figcaption>PyCharm: 专业开发者付费选择</figcaption></figure><!--kg-card-end: image--><p>JetBrains 在  2010 年发布了 PyCharm IDE 专业版。三年后，他们发布了 PyCharm 社区版。与专业版不同，社区版是免费和开源的。当然相对专业版，社区版在一些功能上有一些限制。PyCharm 专业版 在 30 天的免费试用期之后，需要花费大约每年 220 美元或每月相应大约十分之一的费用。PyCharm 目前最新版本是 2019.2 版，支持 Linux、Windows 和 macOS 不同的操作系统。PyCharm 里的用户界面是完全可定制的，在扩展功能方面也有很多插件可以选择。</p><p>PyCharm 专业版是最好的 Python IDE 之一。它不仅具有强大的语法高亮、代码跳转、智能提示以及自动完成等代码编辑相关功能，还有一整套可以帮助用户在 Python 语言开发时提高效率的工具如调试、项目管理、单元测试、版本控制等。此外，PyCharm IDE 还包含了一些高级功能，包含在如 Django 的不同 Python 开发框架下的专业开发支持，对最流行的数据库管理系统的支持，并包含一系列科学运算相关工具，是专业开发者的一个很好的选择。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="4-spyder-"><strong>4. <strong><strong>Spyder: 科学运算相关开发者的选择</strong></strong></strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/11/Screenshot-2019-11-11-at-11.09.21.png" class="kg-image" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"><figcaption>Spyder: 科学运算相关开发者的选择</figcaption></figure><!--kg-card-end: image--><p>简单来说，Spyder 可能并不适合多数初学者，可能也不适合大多数开发人员。但 Spyder 在科学计算相关领域的 Python 开发方面，则具有其他 Python IDE 无法超越的优势。Spyder 最初于 2009 年发布，名称的含义即为科学计算的 Python 开发环境，是专门为数据分析师、科学计算相关领域的科学家及相关工作者设计的。Spyder 是免费的，在 Windows、macOS 和 Linux上都可以安装运行。</p><p>与其他功能强大的 Python IDE 开发工具类似，Spyder IDE 也包含功能齐全的代码编辑器功能、调试器功能、日志及内置控制台等功能。除此之外，它还有一些专门针对科学计算的功能，例如多个 IPython 控制台、静态代码分析和一个独特的变量浏览窗口。</p><p>Spyder 中集成了很多科学计算软件包，如 NumPy、SciPy 等，并提供众多的附加功能组件，通过这些组件可以获得更多的功能支持，如单元测试、框架集成及改进的内存管理等功能。Spyder 是科学运算相关开发者的最佳选择。</p><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="5-wing-"><strong>5. Wing: 可以满足各种开发者的选择</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/11/title-logo-social-media.png" class="kg-image" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"></figure><!--kg-card-end: image--><p>Wing IDE 在 2000 年首次在 Linux 上发布，发展到现在已经有三个版本：Wing Pro 专业版、Wing Personal 个人版以及 Wing 101 版本。它们都支持 Windows、macOS 和 Linux 不同操作系统上安装运行。使用 Wing Pro 专业版需要付费，在 30 天的免费试用期结束后，一个用户的许可费用是每年 179 美元，或者是一次安装 245 美元（不包括升级）。</p><p>Wing Personal 个人版和 Wing 101 版本都是免费的。相对专业版免费版本的部分功能会有限制。Wing 101 是最基础的版本，更适合 Python 初学者使用，提供了最必要的工具：简单实用的代码编辑器、调试器和检索功能。使用 Wing Personal 个人版的用户可以在 101 版本基础上获得额外的功能支持，如编辑器特性（如代码折叠和多重选择），以及其他一些如项目管理等工具方面的支持。</p><p>付费的 Wing Pro 专业版功能强大，支持各种 Python 开发框架、单元测试、集成的版本控制系统（包括但不限于 Git、CVS 和 Bazaar），同时还支持使用 Python 脚本的自由扩展。Wing Pro 还被认为是 Python 代码调试的最佳 IDE，因为它支持远程和多线程调试。</p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="6-eclipse-pydev"><strong>6. 在 Eclipse 里使用 PyDev</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/11/pydev_banner3.png" class="kg-image" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"><figcaption>在 Eclipse 里使用 PyDev</figcaption></figure><!--kg-card-end: image--><p>既然是关于最好的 Python IDE 的讨论，我们就不能不提 PyDev，虽然 PyDev 本身并不是一个真正的 IDE。这样说是不是不太好理解？我们来解释一下。</p><p>2001 年，IBM 的一个团队发布了 Eclipse IDE 的第一个版本。Eclipse 是一个集成开发环境工具，目前版本为 4.13。它的主要优点是有很好的可扩展性，它使用一个功能强大的插件系统，可以让开发者用户创建功能强大的自定义 IDE。一些插件为 Eclipse IDE 提供了额外的编程语言支持，PyDev 就是其中之一。在 Eclipse 里安装配置 PyDev 后，Eclipse 就可作为一个免费的 Python IDE 使用。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/02/eclipse-logo.jpg" class="kg-image" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"><figcaption>Eclipse IDE</figcaption></figure><!--kg-card-end: image--><p>PyDev 的最新版本是 7.4，它不仅支持 Python 3.8，还支持 Jython 和 IronPython。借助 PyDev，可以在 Eclipse<strong> </strong>交互式控制台中修改、执行和调试代码。同时与其他 Python IDE 集成开发环境一样，它也包含代码编辑器，其中包含语法高亮显示、代码折叠、智能缩进、内容助理、代码自动提示等功能。它的调试器也支持多线程、条件断点、表达式监控和变量显示等功能。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="7-python-ide-">7. 最好的 Python IDE 如何选择</h2><p></p><p>优秀的 Python IDE 工具很多，我们不可能在这篇介绍里把它们一一列举。但上面提到的这几款软件是付费及免费 Python IDE 中最为广泛使用的几个。</p><p>对于学习少儿编程的用户及其他 Python 编程初学者来说 IDLE 或者 Wing 101 就足够了，可以满足学习前期的所有需求，同时这两款软件又是轻量级的，足够简单不会给初学者带来学习上的压力。随着学习的深入，可以考虑试一下真正专业软件，试试 PyCharm 和 Wing Pro。PyDev 有它的优点和缺点，如果你之前用过 Eclipse IDE，那么 PyDev 是很值得一试的。如果你小小年纪就在朝着科学家的方向努力，你的选择可能是最简单的：Spyder。</p><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/">少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/">少儿编程之编程语言选择：Java 与 JavaScript 详细比较</a><br><a href="https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/">少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 有哪些大的改进</a><br><a href="https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/">少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示</a><br></p><p></p><p>了解更多校外课课程介绍，请参考：<br><a href="https://learn.xiaowai.co/user-guide-and-xiaowai-general-introduction/">新用户指南 - 校外课网站编程学习环境及少儿编程课程介绍</a><br><a href="https://learn.xiaowai.co/adafruit-circuit-playground-dev-environment-setup-guide/">Adafruit 可穿戴编程开发主板 - 用户使用指南</a><br><a href="https://learn.xiaowai.co/unpluged-programming-games-for-parents-and-kids/">离线学习少儿编程，一些不使用电脑也可以学习编程知识的亲子互动游戏</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之编程工具介绍：最好的 Python IDE 有哪些？详细比较不同 Python IDE 特点"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示]]></title><description><![CDATA[JavaScript 是最流行的编程语言之一。如何学习 JavaScript，有没有一种更好的学习方法，可以更快速的掌握这门编程语言？在此我们专门整理了一份 JavaScript 学习方法介绍，可作为少儿编程相关学习的参考。]]></description><link>https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/</link><guid isPermaLink="false">5e1a2717ad269b0530f2923a</guid><category><![CDATA[JavaScript 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Tue, 04 Feb 2020 15:54:53 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/02/top-10-tips-about-how-to-learn-javascript.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/02/top-10-tips-about-how-to-learn-javascript.jpg" alt="少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示"><p>JavaScript 是最流行的编程语言之一。它主要用于 Web 开发，尤其是交互式前端页面的创建。任何类型的 Web 开发领域，几乎都会使用到 JavaScript。当然除了 Web 开发，JavaScript 也被应用于别的开发领域。不管是对于学习少儿编程的孩子还是成年人来说，学习任何一门新的编程语言都不会是一件容易的事情。</p><p>如何学习 JavaScript，有没有一种更好的学习方法，可以更快速的掌握这门编程语言？在此我们专门整理了一份 JavaScript 学习方法介绍，可作为少儿编程相关学习的参考。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. 从基础开始学习</a><br><a href="#section2">2. 选择 JavaScript IDE 编码工具</a><br><a href="#section3">3. 选择在线编程课程或编程教程</a><br><a href="#section4">4. 不断地练习</a><br><a href="#section5">5. 答疑解惑的途径</a><br><a href="#section6">6. 记录学习过程知识点</a><br><a href="#section7">7. 理解自己编写的每一行代码</a><br><a href="#section8">8. 身边常备 JavaScript 参考手册或书籍</a><br><a href="#section9">9. 一同学习的伙伴</a><br><a href="#section10">10. 学会利用不同类型的学习资源</a><br><a href="#section11">11. 总结</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-"><strong>1. </strong>从基础开始学习</h2><p></p><p>学习 JavaScript 或其他任何一门编程语言时，开始阶段的学习是很重要的。你可能会发现初始的一些概念是很容易理解的，但不要掉以轻心。多花一些时间在基础知识的学习上，可以帮助你对学习的编程语言进行充分了解，并让后面的学习更加顺利。</p><p>选择一个适合的在线课程，或者一本适合的编程学习书籍。按照课程介绍，完成每一节课程以及练习，并对所学内容及知识点进行详细记录。这可以帮助你很好的理解学习内容，并在后面更复杂的编程语法和其他 JavaScript 功能相关学习中减少学习阻力。</p><p>在学习 JavaScript 时，确保理解课程里的每一个知识点是非常重要的。如果出于某种原因没有做到这一点，那么你就需要很好的检查并改变学习方法，甚至调整编程课程，如选择更好的编程课程或编程书籍。可以考虑下面的方法，来帮助你实现更有效地学习：</p><ol><li>给自己准备 JavaScript 学习的专业记事本。在学习时记录知识点，并确保你理解了所记下的所有内容。</li><li>每次在学习新的内容之前，尝试花五到十分钟的时间查看之前笔记。这样做几次后，你会发现自己正在掌握更多内容，并真正理解自己在做什么！</li><li>编写代码时，尽可能多的在注释中包含 JavaScript 代码示例。这将帮助你更好的在实际场景中更好更快地编写  JavaScript 代码。</li></ol><p>通过这几个简单的步骤，可以帮助你更好地进行 JavaScript 基础学习。在学习过程中进行编程练习、编码挑战等方式来测试自己的学习效果。</p><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="2-javascript-ide-">2. 选择 JavaScript IDE 编码工具</h2><p></p><p>尽管在很多在线编程课程中，并不需要使用桌面代码编辑器（IDE），但是在学习过程中找到一款适合自己的编码工具将是一个不错的选择。尽管可以通过如 <a href="https://xiaowai.co">校外课</a> 在线课程学习 JavaScript（以及其他编程语言），这些在线课程允许你直接在浏览器窗口中编写代码，但如果深入学习或尝试开发自己的编程项目时，还是需要使用桌面代码编辑器。</p><p>在编写高质量 JavaScript 代码方面，<a href="https://atom.io/">Atom</a> 代码编辑器是最好的选择之一。它相对易于使用，免费并且提供了一系列有用的功能。这些功能包括：</p><ul><li>内置的 JavaScript IDE 开发支持。</li><li>多种编程语言兼容，可以使用相同的 Atom 界面处理许多不同类型的程序代码。</li><li>简单实用的 Git 和 GitHub 集成支持。</li><li>支持不同的操作系统</li></ul><p>下载 Atom 代码编辑器相对简单。访问 <a href="https://atom.io/">Atom</a> 网站，点击首页里的「下载」按钮，下载后运行并按提示进行操作即可。使用起来也很简单，你也可以参考<a href="https://flight-manual.atom.io/">《 Atom 使用手册》</a>，此文档涵盖了有关如何使用 Atom 编写、编辑和组织代码所需的所有知识。</p><p>如果您不想下载任何内容，则可以使用 <a href="https://xiaowai.co">校外课</a> 提供的免费的在线 <a href="http://studio.xiaowai.co/projects/weblab">Weblab 编辑器</a> 以及 <a href="http://studio.xiaowai.co/projects/applab">Applab 开发环境</a>，在其中尝试各种 JavaScript 示例并自己编写代码。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/02/xiaowai-co-weblab-onine-IDE.jpg" class="kg-image" alt="少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示"><figcaption>校外课 weblab 在线编辑器</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/02/xiaowai-co-applab-onine-IDE.jpg" class="kg-image" alt="少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示"><figcaption>校外课 applab 在线编程环境</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="3-"><strong>3. </strong>选择在线编程课程或编程教程</h2><p></p><p>学习 JavaScript，可以选择多种方法。对于不同年龄段的学习者有适合的不同的方式。如果你对编程已经有一些了解，那么学习 JavaScript（或任何其他语言）应该是一个相对容易的过程，选择也会更多。你可能只需观看视频，在线阅读图文教程，并练习在代码编辑器中编写越来越复杂的程序即可。</p><p>对年龄较小或完全没有编码经验的初学者可能会相对困难一些。但不管是什么类型的学习者，都可以使用高质量的在线课程来完成 JavaScript 的学习。</p><p>与线下课程相比，使用在线课程有很多好处。这些好处包括：</p><ul><li>价格更低。甚至有很多优质的免费的在线课程，同样可以达到很好的学习效果。</li><li>通过在线课程学习，可以更合理的安排自己的学习时间及学习节奏。你可以选择在自己适合的时间段，安排适合自己的学习时长。</li><li>在线课程内容很多，形式多样，有免费的也有付费的，有图文说明的也有视频讲授的，有包含运行环境、练习环境的，也有包含课程内容检测、课后跟踪的，各种不同形式，完全可以覆盖不同年龄及不同特点的人群。</li><li>在线课程通常支持多次返回到理解困难的部分进行重复或着重学习。</li></ul><p>在线课程是一个很好的选择，但在学习过程中需要要求学习者有一定的自律性及主动性。如果没有一个目标，没有规划，再好的在线课程也并不一定能带来好的效果。虽然别的学习形式也会有同样的问题，在线课程会更明显一些。孩子在学习少儿编程时也是如此，这种时候家长需要帮助孩子制定学习计划，并注意跟踪计划执行完成情况。</p><p>在 <a href="https://xiaowai.co">本网站</a> 你也可以找到适合自己的在线编程课程进行学习，或者我们也会不定时推荐一些优质的在线课程资源供参考。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="4-"><strong>4. </strong>不断地练习</h2><p></p><p>学习任何一门编程语言，都需要投入足够的时间与精力。练习实践是学习过程中最重要的部分之一。如果不练习编写代码，整个学习过程就会变成纸上谈兵。可以说，如果你不愿意花时间在课程之外进行编程代码练习，学习的效果都可能会大打折扣。</p><p>而要进行 JavaScript 编程练习，你需要下载上面所提的代码编辑器。使用代码编辑器后，练习编写代码会更容易更自如一些。前往 GitHub 或其他一些开源代码网站，搜索并找到一些开源代码项目。下载并在代码编辑器中将其打开，学习别人写的代码，并尝试运行。然后在别人代码的基础上，实现自己的一些有趣的功能，最终努力理解每一行代码里实现的每一个功能。</p><p>学习 JavaScript 编程的另一个比较有效的方式是参与一些编程挑战。编码挑战既有趣又引人入胜，它们可以迫使自己进入不同的领域，跳出自己惯有的习惯思维。搜索使用提供编码挑战的网站。大多数情况下，每个挑战都会提供详细的目标说明，并且要求创建一段代码实现特定目标功能。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2018/09/best-way-to-learn-python-2.png" class="kg-image" alt="少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示"><figcaption>编程挑战</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="5-"><strong>5. </strong>答疑解惑的途径</h2><p></p><p>就像学习任何别的东西，学习编码过程中有时会很无聊，乏味，保持学习JavaScript 或任何其他语言的持续的动力并不是一件容易的事情。在这过程中甚至可能产生让人想放弃的想法。</p><p>如果你开始有这种感觉，那就说明学习过程遇到了问题，你需要重新寻找一个可以为你答疑解惑的途径。找一个可以为你提供指导的编程老师，不管是线上的还是线下的。积极参与一些编程论坛及一些编程活动，跟更多的编程学习者及专业人员交流编程心得，将对你的编程学习带来很大的帮助。</p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="6-"><strong>6. </strong>记录学习过程知识点</h2><p></p><p>勤做笔记，记录 JavaScript 学习过程中的知识点，可以帮助你达到更好的学习效果。做笔记可以让你将难以理解的概念和知识点变成你自己所能理解的内容，并在以后的学习中通过查看笔记帮助你快速有效的回顾以前内容。通过记笔记这种简单方式可以很好的增强 JavaScript 的学习效果。</p><p>如果您想学习 JavaScript，在开始课程前首先要做的就是准备好笔记本，准备几支不同颜色的笔，几个荧光标记笔。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="7-"><strong>7. </strong>理解自己编写的每一行代码</h2><p></p><p>在学习 JavaScript 或其他编程语言时，很容易编写出自己也不太了解的代码。仅按照教程在代码编辑器中编写一些代码以及进行故障排除，有时并不能让你了解你所编写每一行代码。</p><p>为了更好的学习  JavaScript，你需要确保理解你所编写的每一行代码，代码的作用以及对上下文有什么影响。「掌握」和「学习」JavaScript 之间的区别是很大的。每次编写程序时，你可能需要停下来用几分钟的时间思考一下，查看笔记或课程内容或者教程，对编写的代码做足够的了解。如果对某些内容不清楚，要及时翻阅笔记，查看语言参考指南（稍后会详细介绍），或寻求他人的帮助。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="8-javascript-"><strong>8. </strong>身边常备 JavaScript 参考手册或书籍</h2><p></p><p>要想更好地学习 JavaScript，最好在身边常备一本 JavaScript 参考手册或类似书籍，遇到不太明白的问题可以随时查阅。这样的参考手册或类似书籍，往往可以涵盖几乎所有的需要了解的内容，并且提供一系列 JavaScript 代码示例，可用来帮助快速查询一些知识点、语法或编程约定。你也可以通过添加 <a href="https://www.w3school.com.cn/jsref/index.asp">在线参考页面</a> 到浏览器收藏夹，随时在线查询。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/02/javascript_reference.jpg" class="kg-image" alt="少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示"><figcaption>JavaScript 参考手册</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section9"><!--kg-card-end: html--><h2 id="9-"><strong>9. </strong>一同学习的伙伴</h2><p></p><p>学习 JavaScript 的最佳途径之一是找到志同道合的人并与他们一起学习，一同进步。这会让你的学习过程变得更有趣。你可以在线下同学之间寻找这样的伙伴，也可以在线上编程论坛或通过社交网站寻找这样的朋友。通过一同探讨并分享编程学习心得、编程学习资源，甚至合作编程开发项目，共同提高。</p><!--kg-card-begin: html--></section><section id="section10"><!--kg-card-end: html--><h2 id="10-"><strong>10. </strong>学会利用不同类型的学习资源</h2><p></p><p>在学习的过程中除了利用好课程本身的资源信息，你还需要尽快熟悉下面几种可以利用的资源。尽管以下任何资源都可能不会单独教你学习 JavaScript，但有效的利用它们可以很好地增强学习体验及学习效果，并在以后在使用 JavaScript 过程中成为你最为得力的助手。这些资源包括：</p><h3 id="-">在线视频</h3><p>在很多视频网站如 bilibili、YouTube 等也有很多很有帮助的资源可以很好的帮助解决在编程学习过程中遇到的问题。订阅或关注一些高质量的 JavaScript 相关频道或专栏，将对 JavaScript 学习及使用能力带来很大的提升。</p><h3 id="--1">参考文档</h3><p>如上文所提到的，将一些高质量的参考指南页面添加到浏览器书签/收藏列表里是很有必要的。参考指南将成为 JavaScript 学习的最有价值的工具之一。这些参考文档对 JavaScript 有着对语法、规范及编程最佳实践方面的清晰解释。对概念不理解、使用方式不清楚或遇到其他很多问题，都可以在这些文档里找到答案。如果使用得当，这样的参考指南可以极大地加快 JavaScript 编程学习的进度。</p><h3 id="--2"><strong>开发社区</strong></h3><p>JavaScript 是一门被广泛使用的开发语言，受到广大开发者欢迎的其中一个原因就是 JavaScript 几乎在所有方面都有活跃的开发社区支持。当您对某个概念或想法感到困惑或碰到问题时，在线编码社区或论坛也是一个获得帮助的好地方。能够快速的获取相关的准确的资讯也是体现编程能力的一个方面。</p><h3 id="--3"><strong>在线课程</strong></h3><p>在如 <a href="https://xiaowai.co">校外课</a> 这样的平台上有很多在线编程学习课程或学习教程，可以作为你 JavaScript 学习的主要内容或重要辅助。</p><p>开始学习像 JavaScript 这样的编程语言可能会遇到一些困难。但是，如果你能有效利用这些资源，学习的过程就会简单得多。</p><!--kg-card-begin: html--></section><section id="section11"><!--kg-card-end: html--><h2 id="11-">11. 总结</h2><p></p><p>不管是对于学习少儿编程的孩子还是成年人来说，学习任何一门新的编程语言都不会是一件容易的事情。选择合适的编程课程，从基础开始学习；有效利用各种学习资源，找到志同道合的学习伙伴；遇到困难，及时寻找答疑解惑的途径；学习过程中记录详细笔记，借助编程开发工具，不断练习及挑战自己。参考这些学习方法，一定可以让你的编程学习更顺利、更有效。</p><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/">少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/">少儿编程之编程语言选择：Java 与 JavaScript 详细比较</a><br><a href="https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/">少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 有哪些大的改进</a><br></p><p></p><p>了解更多校外课课程介绍，请参考：<br><a href="https://learn.xiaowai.co/user-guide-and-xiaowai-general-introduction/">新用户指南 - 校外课网站编程学习环境及少儿编程课程介绍</a><br><a href="https://learn.xiaowai.co/adafruit-circuit-playground-dev-environment-setup-guide/">Adafruit 可穿戴编程开发主板 - 用户使用指南</a><br><a href="https://learn.xiaowai.co/unpluged-programming-games-for-parents-and-kids/">离线学习少儿编程，一些不使用电脑也可以学习编程知识的亲子互动游戏</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进]]></title><description><![CDATA[在这篇文章里，我们来详细介绍下 HTML 以及 HTML5 出现的背景，它们之间的区别，并详细比较一下 HTML5 相比 HTML 之前版本有哪些方面的改进。通过阅读本篇文章，家长或学习少儿编程的孩子可以对这方面的信息有一个很好的了解。]]></description><link>https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/</link><guid isPermaLink="false">5e1a3a4fad269b0530f293f2</guid><category><![CDATA[JavaScript 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Sat, 18 Jan 2020 06:12:27 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/the-difference-between-html-and-html5-main-changes.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/the-difference-between-html-and-html5-main-changes.jpg" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><p>HTML5 是很多互联网应用的基础，现在几乎所有 Web 开发都是基于 HTML5 进行的。HTML5 是什么，它跟 HTML 有什么区别？在这篇文章里，我们来详细介绍下 HTML 以及 HTML5 出现的背景，它们之间的区别，并详细比较一下 HTML5 相比 HTML 之前版本有哪些方面的改进。通过阅读本篇文章，家长或学习少儿编程的孩子可以对这方面的信息有一个很好的了解。不管学习什么少儿编程内容，对学习的内容首先有一个基本的了解都是很有必要的。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. HTML 是什么</a><br>	<a href="#section2">1.1 HTML 是如何工作的</a><br><a href="#section3">2. HTML5 是什么</a><br><a href="#section4">3. HTML5 与 之前 HTML 版本的区别</a><br>	<a href="#section5">3.1 更好的容错机制</a><br>	<a href="#section6">3.2 对 Web App 应用的支持</a><br>	<a href="#section7">3.3 语义方面的改进</a><br>	<a href="#section8">3.4 对移动设备支持方面的改进</a><br>	<a href="#section9">3.5 多媒体方面的支持</a><br>	<a href="#section10">3.6 对矢量图形的支持</a><br>	<a href="#section11">3.7 更多改进</a><br><a href="#section12">4. HTML 文档类型声明</a><br><a href="#section13">5. 结论</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-html-"><strong>1. HTML 是什么</strong></h2><p>首先让我们来了解一下什么是 HTML。HTML 的全称是 HyperText Markup Language（超文本标记语言）。HTML 来自于这个全称的首字母缩写。就如名称所示，它是用来描述一种超文本格式内容的标记语言。</p><p>通常我们在记事本里输入文字，保存后只包含文字内容的格式，叫做纯文本格式。在纯文本格式里我们无法显示链接、图片、音频、视频等非文本内容。超文本则能做到这一点，就像我们经常浏览的网页就是超文本格式的一种。HTML 就是用来规范这种超文本格式的语言，通过固定的格式来不仅标记文字，还可以标记图片、音频、视频等信息内容。这就是这种「超文本标记语言」的含义。使用 HTML 规范生产的内容通常就是我们看到的网页，或者是与网页相同形式的内容（如邮件内容），通过单击鼠标点击这种内容里的链接，可以从一个主题跳转到另一个主题，从一个页面跳转到另一个页面。</p><p>一个常见的误解是很多人会把 HTML 当作一种编程语言，其实不是。它是一种标记语言，是一种规范。这种规范有两方面的意义。一方面用来指导内容制作者（如 Web 开发人员）制作这种网页形式的内容；另一方面则用来指导 Web 浏览器正确显示这些内容。通常来说同样的一个页面，我们使用不同浏览器打开时看到的结果是一样的，这正是这种规范的作用。</p><p>HTML 与 真正的编程语言的区别在于 HTML 不能处理一些业务逻辑，如在不同情况下显示不同的页面内容，而编程语言可以。单纯通过 HTML 标记，我们无法做到让显示的内容在某些情况下做一件事，而在另一种情况下做另一件事。在网页里可以做到这一点，是因为通常使用了 JavaScript 这门编程语言对使用 HTML 标记的内容进行操作的结果。</p><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="1-1-html-">1.1 HTML 是如何工作的</h2><p></p><p>使用 HTML 规范编写的内容，用来告诉浏览器在页面上显示什么以及按什么顺序显示。一个只使用 HTML 创建的简单网页，看起来会比较简单，因为这种标记语言通常并不用来设计网站的外观样式（样式使用 CSS 来设计）。只需要将想要显示的元素按恰当的结构及顺序组织在一起就可以。了解 HTML 对 Web 开发很重要，因为所有的操作（功能通过 JavaScript 来实现）都是基于这种内容进行的。</p><p>简单地说，HTML 通过 &lt;&gt;（开始）和 &lt;/&gt;（结束）来标记不同定义的元素，并通过这样的方式，告诉 web 浏览器要显示的元素是什么，应该放在哪里。</p><p>比如：</p><ul><li>&lt;p&gt; 告诉浏览器这是一个文本段落。</li><li>&lt;h2&gt; 告诉浏览器这是一个二级标题</li><li>使用 &lt;/p&gt; 或 &lt;/h2&gt; 放在段落或标题内容的末尾，告诉浏览器到这里段落或标题结束。</li></ul><p>了解更多的 HTML 标签信息，可以参考这里的 <a href="https://www.w3school.com.cn/tags/tag_html.asp">列表</a> 。</p><p>当然上面提到的是一些简单的使用情况，实际使用会比这更复杂些，但意思是一样的。HTML 只需要将显示的元素按顺序并按一定的结构罗列出来。在什么位置放置什么元素，使用什么标记来代表这种元素，在 HTML 这个标记语言发展变化过程中是不断变化的。这也是 HTML 与 HTML5 之间的重要区别 - 语法。随着 HTML 的发展，以及 Web 开发的概念和功能的发展，HTML 也变得越来越完善，越来越易用，也越来越直观。</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="2-html5-"><strong>2. HTML5 是什么</strong></h2><p>到这里相信你已经对 HTML 有了基本的了解。现在的问题是  HTML5 又是什么？</p><p>HTML 最初是在 1989 年由 GERN 的 Tim Berners-Lee 发明的，并在 1993 年 6 月正式发布 HTML 1.0 版本。其后：</p><ul><li>HTML 2.0：1995 年 11 月发布。</li><li>HTML 3.2：1997年 1 月 14 日发布。</li><li>HTML 4.0：1997 年 12 月 18 日。</li><li>HTML 5：今天讨论的主角，结合了 HTML 4.01 的相关标准并革新，使其更符合现代 Web 发展要求，在 2014 年发布。HTML5 的出现，极大地提升了 Web 在富媒体、富内容和富应用等方面的能力，被认为是移动互联网全面应用的重要推手。</li></ul><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-22.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>HTML 的历史</figcaption></figure><!--kg-card-end: image--><p>作为 Web 标记语言的 HTML 必须与 Web 一起发展。而创建 HTML 前一版本的人，根本不会想到未来互联网会发生这么大的变化。HTML 需要不断升级以适应新的需求。HTML5 是这门超文本标记语言的最新版本。它的目的是让 Web 内容尽可能地与任何浏览器兼容。虽然技术上我们依旧可以使用 HTML 以前的版本来编写 Web 内容，但这显然不是一个明智的选择。HTML5 与之前版本之间最明显的区别在于它可以更好地适用一些现代网站的特点，其中一个重要方面就是更好地适用现在被大量使用的移动设备。HTML5 上一个版本 HTML 4.0 发布于 1997 年，那时候像智能手机这样的移动设备还未出现。而在今天，智能移动设备已经无处不在。在今天如果新创建一个网站，必然会选择使用 HTML5。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="3-html5-html-"><strong>3. HTML5 与 之前 HTML 版本的区别</strong></h2><p></p><p>我们知道了什么是 HTML、什么是 HTML5，现在我们来看一下 HTML5 这个最新版本是如何演变而来的。</p><p>你知道以前的网页是什么样子吗？下面是一个上世纪 90 年代早期的一个典型网页：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/web-page-1992.jpg" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>上世纪 90 年代早期的一个网页</figcaption></figure><!--kg-card-end: image--><p>下面这个则是上世纪 90 年代中期 BBC 精心制作的页面：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-15.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>上世纪 90 年代中期的网页</figcaption></figure><!--kg-card-end: image--><p>HTML的第一个版本创建于 1993 年，其后的 HTML 2.0 版本则是在 1995 年发布的。上面你看到的是两个上世纪 90 年代网页的样子。而在今天：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/today-website.jpg" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>现在的 awwwards 网站</figcaption></figure><!--kg-card-end: image--><p>‌差别是不是很明显？想要使用过去 HTML 版本来创建现在风格的东西将是非常困难的。随着计算机和互联网应用的发展，世界各地的开发人员为了满足不断出现的新的需要不断地重新编写 HTML 规范，以确保不断完善 Web 相关的功能。</p><p>HTML 3.2 版本是在 1997 年 1 月发布的，但它只停留了很短的一段时间（大约 11 个月），下一个版本 HTML 4.0 就出现了。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/what-google-look-like-in-1998.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>1998 年的 Google 网站</figcaption></figure><!--kg-card-end: image--><p>HTML 4.0 是在 1997 年由 W3C（万维网联盟）创建的，并作为互联网的基础使用了长达 17 年之久。2014 年，HTML5 诞生，开发者很快就开始使用它开发网站。HTML5 相对于之前的版本更能满足现在 Web 使用的需求，下面我们就来看一下，HTML5 相对之前版本都有哪些方面的提高。</p><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="3-1-">3.1 更好的容错机制</h2><p></p><p>HTML5 与之前版本的一个关键区别就是有更好的容错处理机制。为什么需要容错呢？</p><p>对于 Web 开发者来说，一个很不幸的事实就是，没有人能写永远不会出错的代码。很多网站都普遍存在着一些已知的无效 HTML 结构。而 HTML5 的目标之一是让浏览器开发人员制作出可以应对这种无效结构的浏览器解析器，从而更好地处理一些 HTML 代码里的错误，并为此专门定义了一部分这方面的要求。这样即使开发人员犯了一些小错误或遗漏了某个地方的规则，浏览器也可以显示出合适的页面内容。</p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="3-2-web-app-">3.2 对 Web App 应用的支持</h2><p></p><p>HTML5 与之前版本的另一个重要区别就是对 Web App 应用的支持。为什么会有这种变化呢？</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/McDonald-website-1996.jpg" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>1996 年 McDonald 网站</figcaption></figure><!--kg-card-end: image--><p>90 年代的网站，都是由一个一个相互间独立的页面组成的。</p><p>而现在的网站则更像是网页浏览器中运行的独立程序，就像下面这样。HTML5 在这方面的改进，使开发者为我们带来这样产品成为可能。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-16.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>现在的 McDonald 网站</figcaption></figure><!--kg-card-end: image--><p>当 HTML4 作为标准时，开发人员要实现类似的功能是有很大困难的，需要借助 Flash、JavaScript、浏览器扩展和许多其他工具来克服当时的限制。而在 HTML5 里，这些给开发人员带来困难的解决方案及实现，成为了 HTML 本身的一部分，允许开发人员从一开始就按照预期的方式工作，从而节省了大量的时间。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="3-3-">3.3 语义方面的改进</h2><p></p><p>HTML5 与之前版本的另一个重要区别就是改进了语义，换句话说，就是简化了语法。</p><p>一个复杂的网页结构会在各方面给人们带来很大的不便。HTML5 的出现使得超文本标记语言的语法变得更加直观。例如，现在我们可以使用像 &lt;nav&gt; 这样的标签来显示标记页面导航。或&lt;footer&gt; 标记页面页脚结构。你可以点击这里了解 HTML5 里所有<a href="https://www.w3school.com.cn/html/html5_new_elements.asp">新标签</a>。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-21.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>HTML4 与 HTML5 典型页面元素使用对比</figcaption></figure><!--kg-card-end: image--><p>HTML5 这方面的改进让 HTML 规范下代码的编写和校对变得更加容易。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="3-4-">3.4 对移动设备支持方面的改进</h2><p></p><p>1997 年 HTML 4.0 发布时，手机在当时还算是一个相当新的东西。那时候的电话只能用来打电话、发短信。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-18.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>1997年，第一款内置天线手机 —— 汉诺佳 CH9771</figcaption></figure><!--kg-card-end: image--><p>而在 2014 年 HTML5 被引入时，我们已经生活在了一个全新的世界之中。智能手机加上当时的 4G 互联网成为几乎每个人口袋里里的必备。而这一现状也促使 HTML5 与 HTML 之前的重大区别 —— 对移动设备支持方面的改进。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-19.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>2012 年的 iPhone 5 手机</figcaption></figure><!--kg-card-end: image--><p>移动设备屏幕相比而电脑显示器除了尺寸，还有其他方面的一些明显区别，如竖屏与横屏的区别。HTML5 可以让开发者很容易的开发出适配各种设备，对 Web 使用者更为友好的内容。让世界各地的开发者更容易创建移动友好网站的地方。并且根据 <a href="https://www.thinkwithgoogle.com/consumer-insights/shopping-occasion-experiences/">ThinkWithGoogle</a> 的调查，如果销售产品的企业网站适配移动设备支持，将带来更多的销量。这种对移动设备支持方面的改进对用户、开发者以及企业都是有利的。</p><!--kg-card-begin: html--></section><section id="section9"><!--kg-card-end: html--><h2 id="3-5-">3.5 多媒体方面的支持</h2><p></p><p>处理音频、视频的方式是 HTML5 与之前版本之间的另一个区别。</p><p>在 1997 年 HTML 4.0 出现的时候，当时拨号上网的连接速度跟现在相比是非常慢的，HTML 4.0 对网站上音频视频内容支持很差是没有问题的，因为当时根本就没有这样的需求。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-20.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>2005 年的 YouTube 视频网站</figcaption></figure><!--kg-card-end: image--><p>但到了 2014 年直到今天，情况则完全不同。互联网连接速度要快得多，音频和视频内容得到了广泛的使用。在这个背景下出现的 HTML5 增加了对视频和音频支持，是对HTML 的一个重要改进。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/youtube-today.jpg" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>现在的 youtube 网站</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section10"><!--kg-card-end: html--><h2 id="3-6-">3.6 对矢量图形的支持</h2><p></p><p>HTML5 相比之前版本的另一个重要改进，就是增加了对矢量图形的支持，这推动了大量制作精细、整洁、漂亮的页面内容的出现。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/svg-vs-png.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>SVG 与 PNG 不同尺寸显示效果对比</figcaption></figure><!--kg-card-end: image--><p>一个场景的 .jpg 文件通过将原始文件中的像素更紧密地挤压在一起，这种图片在尺寸变大时，会出现明显的图片质量问题。而矢量图形则可以解决这个问题。使用 .svg 格式的矢量图片，不管想要多大或多小的尺寸，它都可以做到完美地缩放。这对要做到适配所有终端设备的 HTML 页面来说是很重要的。矢量图形是一种很好的方式，可以确保网站的基本元素，如徽标、图表等，无论在什么设备上观看，都有完美的效果。</p><!--kg-card-begin: html--></section><section id="section11"><!--kg-card-end: html--><h2 id="3-7-">3.7 更多改进</h2><p></p><p>HTML4 网站只能在浏览器缓存中存储很少临时数据，而基于 HTML5 的网页则可以 使用 Session Storage、Local Storage、IndexedDB 以及 Web SQL 等多种方式实现复更灵活的数据处理及存储。</p><p>在 HTML5 中可以访问处理各种输入和输出设备，如摄像头、GPS、蓝牙等。并提供了非常显著的性能优化和更有效的计算机硬件使用，如对文件系统及内存方面的访问等。</p><p>同时 HTML5 也引入了更多的表单控件及元素，这为开发人员制作更为丰富多彩的更有现代感的网站提供了更好的支持，并让这一过程变得更为简单、快捷。</p><!--kg-card-begin: html--></section><section id="section12"><!--kg-card-end: html--><h2 id="4-html-"><strong>4. HTML 文档类型声明</strong></h2><p></p><p>HTML 代码文件通常以文档类型声明开始，这个文档类型声明用来告诉浏览器页面使用 HTML 版本的情况。在 HTML4 里声明像这样：</p><!--kg-card-begin: markdown--><pre><code>&lt;!DOCTYPE
 HTML
 PUBLIC
 &quot;-//W3C//DTD HTML 4.01//EN&quot;
 &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
</code></pre>
<!--kg-card-end: markdown--><p>HTML5 里：</p><!--kg-card-begin: markdown--><pre><code>&lt;!DOCTYPE html&gt;
</code></pre>
<!--kg-card-end: markdown--><p>在 HTML5 里，一个简单页面代码结构类似这样：</p><!--kg-card-begin: markdown--><pre><code>&lt;!DOCTYPE html&gt;
 &lt;html&gt;
  &lt;head&gt;
   &lt;title&gt;Page Title&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
   &lt;h1&gt;Sample h1 tag&lt;/h1&gt;
   &lt;p&gt;Sample&lt;/p&gt;
  &lt;/body&gt;
 &lt;/html&gt;
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: html--></section><section id="section13"><!--kg-card-end: html--><h2 id="5-">5. 结论</h2><p></p><p>最后我们来总结一下，HTML5 是 HTML 最新的版本，相比之前的版本 HTML5 有很大的改进，如对移动设备以及多媒体支持方面。通过这样的比较，家长或学习少儿编程的孩子可以对 HTML 与 HTML5 有更深的了解，并对未来少儿编程的学习带来帮助。</p><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/">少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/">少儿编程之编程语言选择：Java 与 JavaScript 详细比较</a><br><a href="https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/">少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示</a></p><p></p><p>了解更多校外课课程介绍，请参考：<br><a href="https://learn.xiaowai.co/user-guide-and-xiaowai-general-introduction/">新用户指南 - 校外课网站编程学习环境及少儿编程课程介绍</a><br><a href="https://learn.xiaowai.co/adafruit-circuit-playground-dev-environment-setup-guide/">Adafruit 可穿戴编程开发主板 - 用户使用指南</a><br><a href="https://learn.xiaowai.co/unpluged-programming-games-for-parents-and-kids/">离线学习少儿编程，一些不使用电脑也可以学习编程知识的亲子互动游戏</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 之前版本有哪些大的改进"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image--><p></p>]]></content:encoded></item><item><title><![CDATA[少儿编程之编程语言选择：Java 与 JavaScript 详细比较]]></title><description><![CDATA[在这篇文章里我们就来详细比较一下这两门编程语言。通过这种比较，家长或学习少儿编程的孩子们可以加深对这两种编程语言的了解，在选择少儿编程编程语言时做到心中有数。]]></description><link>https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/</link><guid isPermaLink="false">5e1a36aead269b0530f293c0</guid><category><![CDATA[JavaScript 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Thu, 16 Jan 2020 00:00:00 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/programming-language-comparison-java-vs-javascript-2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/programming-language-comparison-java-vs-javascript-2.jpg" alt="少儿编程之编程语言选择：Java 与 JavaScript 详细比较"><p>JavaScript 与 Java 是世界上最为流行的两种编程语言。在软件开发行业分析公司 RedMonk 发布的编程语言排行榜中，JavaScript 与 Java 长期占据榜首第一、第二的位置（第三名是 Python）。这两种编程语言不仅排名接近，名称也很相似，那么它们有什么关系，相互间又有什么区别？在这篇文章里我们就来详细比较一下这两门编程语言。通过这种比较，家长或学习少儿编程的孩子们可以加深对这两种编程语言的了解，在选择少儿编程编程语言时做到心中有数。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-12.png" class="kg-image" alt="少儿编程之编程语言选择：Java 与 JavaScript 详细比较"><figcaption>RedMonk 发布的编程语言排行榜中，JavaScript、Java 与 Python 名列榜首</figcaption></figure><!--kg-card-end: image--><p>有网友形容 Java 与 JavaScript 的关系，就像「雷锋」与「雷锋塔」的关系。虽然名字里都含有「Java」，但这两种编程语言实际却差别很大。下面我们就来详细比较一下这两种编程语言。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. Java 与 JavaScript 的诞生</a><br><a href="#section2">2. 解释型 vs 编译型</a><br><a href="#section3">3. 数据类型检查</a><br><a href="#section4">4. 可能的误解</a><br><a href="#section5">5. 基于类 vs 基于原型</a><br><a href="#section6">6. 平台独立性的区别</a><br><a href="#section7">7. Java 与 JavaScript 的不同用途</a><br><a href="#section8">8. 结论</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-java-javascript-"><strong>1. Java 与 JavaScript 的诞生</strong></h2><p></p><p>Java 和 JavaScript 的第一个区别与这两种编程语言出现的时间有关系。Java 是首先出现的，虽然这个时间上领先的优势并没有保持多久。</p><p>Java 编程语言项目开始于 1991 年，由 Sun 公司的工程师专门为家电产品上的嵌入式应用开发创建的。在最初的项目里，他们原本想用当时已经成熟的 C++ 进行开发， 但 C++ 程序对于硬件资源极其匮乏的嵌入式系统来说过于复杂和庞大，并且有一个很大的问题是不支持跨平台运行。</p><p>为了解决这个问题，工程师们对 C++ 进行了改造，去除了在 C++ 里的一些不太实用及影响安全的部分，并结合嵌入式系统的实时性要求，开发了这种称为 Java 的面向对象编程语言。这也是 Java 与 C++ 很多方面相似的原因。</p><p>Java 最初也不叫 Java，而是叫 Oak。只是这个名字已经在另一家公司注册了，它的缔造者们因为有人在喝一杯「 Java 」咖啡时无意提到了「Java」这个词将其重新命名为 Java，并在 1995 年发布了第一个版本。在这之后这门编程语言很快就流行起来了。因为它是基于 C++ 语法风格的，而这种语法为当时很多开发人员所熟悉；而且它还具有 「只编写一次，在任何地方都可以运行」的跨平台支持的特点，这相比 C++ 在很多使用场景下有很大的优势。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/02/java-vs-javascript-java-164x300.png" class="kg-image" alt="少儿编程之编程语言选择：Java 与 JavaScript 详细比较"><figcaption>Java 的 logo 是一杯咖啡</figcaption></figure><!--kg-card-end: image--><p>在 Java 发布的同一年，当时最大的网页浏览器公司 Netscape 决定为业余程序员「scripters」编写一种新的语言，以吸引更多的编码新手而不是专业人员参与到开发中来。它应该是一种客户端语言，在浏览器中运行，并且不需要任何专用软件就能使用。他们想设计出一种语言，<strong>看起来像 Java</strong>，但要比 Java 简单。为此一位名为 Brendan Eich 的开发人员神奇的在十天内编写出了这门新语言的原型，并将这门语言命名为「JavaScript」。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2020/01/image-13.png" class="kg-image" alt="少儿编程之编程语言选择：Java 与 JavaScript 详细比较"><figcaption>Brendan Eich - JavaScript 发明者</figcaption></figure><!--kg-card-end: image--><p></p><p>为什么要取这样一个看起来跟 Java 很有关系的名字（并且还需要得到 Sun 的授权）？现在我们有理由相信这可能纯粹是为了宣传。虽然 Netscape 最初确实有创建<strong>「看起来像 Java」</strong>这样一门编程语言的意图，但是完全不同的使用目的，导致了这两门编程语言在很多方面根本上的不同。JavaScript 在设计时的确参考了 Java 的命名规则，但也仅此而已。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/02/java-vs-javascript-logo-300x169.png" class="kg-image" alt="少儿编程之编程语言选择：Java 与 JavaScript 详细比较"><figcaption>JavaScript</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="2-vs-"><strong>2. 解释型 vs 编译型</strong></h2><p></p><p>在这里我们也可以从性能方面来比较一下 Java 与 JavaScript。但问题是这两种编程语言运行方式完全不同，这导致了两者在这方面并没有多少可比性：Java是一种编译语言，JavaScript 则是一种解释语言。</p><p>当我们在编写 Java 代码时，它需要首先被编译成机器代码才可以运行。这种编译后的代码，我们通常无法阅读，但机器可以，Java 虚拟机（JVM）能够轻松地运行它。前面提到的「只编写一次，在任何地方都可以运行」的原则实际上也是通过这一步做到的。编译语言意味着需要重新构建程序，这无疑是一个复杂的过程，需要使用特殊的工具来完成这一点。Java 代码是先编译后运行的，因此多数问题在运行前的编译阶段就会被发现。</p><p>而 JavaScript 则是一种脚本语言，这意味着它由一个可读的文本组成。脚本代码将以与编写代码相同的语法逐行执行。在以前，这意味着执行速度会很慢并容易成为一个问题。现在虽然执行方式一样，但运行速度已经不是问题。JavaScript 这种运行方式的不同也就导致了另一个明显的区别：JavaScript 只能在程序运行时检测到错误和发现问题，而不是在此之前。</p><p>脚本语言作为纯文本代码还意味着可以使用任何文本编辑器（包括记事本）就可以轻松地编辑修改代码。这对于 JavaScript 是很重要的一个特点。JavaScript 通常需要在浏览器中运行。不同类型不同版本的浏览器、不同类型不同版本的操作系统，意味着 JavaScript 需要具有更大的错误处理潜力，而这显然与「只编写一次，在任何地方都可以运行」的 Java 是不同的。</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="3-"><strong>3. 数据类型检查</strong></h2><p></p><p>在比较 Java 和 JavaScript 时，一个更明显的区别是它们各自检查数据类型的方式。在任何程序中，数据类型检查都是必须的：大多数操作都需要使用特定的数据类型来完成，并且需要确保使用正确的数据类型。使用「类型安全」的程序意味着可以避免大多数的因为类型错误而导致的问题。</p><p>在这方面 JavaScript 采用的是动态类型检查，相同的变量可用作不同的类型，这种方式在大多数脚本语言中是常见的。这意味着数据类型的安全性在程序运行时是动态验证的。一方面这可以让编程变得很灵活，并产生一些看起来很强大的语言功能；但另一方面，在程序运行之前，将无法确保它是类型安全的，这可能会导致运行时的错误。</p><p>而 Java 采用的则是静态类型检查，所有变量或表达式的类型在编译时就已经完全确定。这意味着在编译期间将能够验证数据类型，并更早地捕获大多数类型错误。并且编译器知道使用的是哪种类型，运行代码时通常可以运行得更快，占用的资源更少。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="4-">4. 可能的误解</h2><p></p><p>有人可能认为静态类型检查是编译语言的特点，而动态检查则是解释语言的特点。就很多编程语言的现状来说，这的确是对的。但实际上类型检查与编译语言还是解释语言并没有关系。一门语言可以使用静态或动态类型检查，同样一门语言可以是编译型也可以是解释型。虽然 Java 是编译型，从技术上讲，它也可以使用动态类型检查。</p><p>另一个常见的误解是静态类型检查必须在强类型语言中使用。采用强类型的编程语言意味着它具有更高类型安全约束：变量与特定的数据类型相关。但是，系统检查类型的方式跟这个并没有直接关系。</p><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="5-vs-">5. 基于类 vs 基于原型</h2><p></p><p>在比较 Java 和 JavaScript 时，需要了解两种编程类型的基本区别。Java 是基于类（class-based）的，将继承和实例化看作两个独立的过程。而 JavaScript 则是基于原型（prototype-based）的，这让 JavaScript 的继承和实例化看起来是一样的。下面我们来解释一下这一点。</p><p>在基于类的编程语言（这里的 Java）中，使用某个类来创建对象，但类本身并不是一个对象 —— 它更像一个工具。就像我们用烤盘做通心粉和奶酪，但烤盘本身不能成为你的晚餐。但在基于原型的编程语言（这里的 JavaScript）中，实例化后有了一个原型而不是一个类。这个原型可以被复制或克隆并生成其他对象，但与类不同的是，它本身也是一个对象。</p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="6-"><strong>6. 平台独立性的区别</strong></h2><p></p><p>Java 和 JavaScript 的另一大区别是，Java 是一种完全平台独立的编程语言。这意味着它可以单独在任何操作系统上使用：只需要一个 Java 虚拟机。这个虚拟机可以免费下载并安装到电脑上。没有它，将无法在计算机上运行 Java。</p><p>而 JavaScript 通常只在 Web 浏览器中使用。当然现在找一台没有浏览器的电脑也很难。然而，这也意味着 JavaScript<em> </em>的运行强烈依赖于 HTML 和 CSS。HTML 包含Web 页面的结构，CSS 用来操作样式，JavaScript 负责功能实现。光有结构没有功能显然是无用的，而光有功能没有结构，也同样会是一团糟。</p><p>可以在浏览器中运行 Java 吗？曾经可以。在以前我们是可以下载并安装 Java 浏览器插件，在网页里加载使用 Java 代码编写的交互式页面内容的。这些被称为 Java 小程序，并曾经得到过广泛的应用。但现在它们几乎已经绝迹了。由于 HTML5 提供了一个将多媒体直接嵌入到网页的功能，这种并不安全的 Java 小程序已无用武之地。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="7-java-javascript-">7. Java 与 JavaScript 的不同用途</h2><p></p><p>虽然从技术上讲 Java 和 JavaScript 都可以用于前端和后端开发，但它们有着显著的区别。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/02/java-vs-javascript-logo-300x200.jpeg" class="kg-image" alt="少儿编程之编程语言选择：Java 与 JavaScript 详细比较"></figure><!--kg-card-end: image--><p>作为一种通用语言，Java 应用范围更广一些。如果要为 Android 系统开发企业软件或应用程序，Java 应该是首选。Java 在金融与贸易领域、大数据以及科学应用等领域都有广泛的应用。很多自然语言处理系统是用 Java 编写的。「只编写一次，在任何地方都可以运行」的特点也使得它非常适合用于嵌入式系统开发，例如 SIM 卡中使用的Java Card。</p><p>而 JavaScript 则是为 Web 而生的，它从诞生开始的主要目的就是帮助创建交互式的动态 Web 页面。JavaScript 是完成前端开发需求的最佳选择。JavaScript 适合于电子商务、用户界面（UI）定制和创建各种简单的工具等几乎所有的前端 Web 开发场景。</p><p>需要注意的是，现在有很多各种各样的框架和资源库大大扩展了这两种语言的应用场景，不管是 Java 还是 JavaScript 都在不断扩展着自己的应用领域。Java 也被用于 Web 开发。而 JavaScript 也被用于移动应用程序开发，JavaScript 利用 Node.js 框架进行后端开发也有广泛的应用；而 JavaScript 简单轻便的特点，也使得它成为很多年轻公司的一个很好的选择。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="8-"><strong>8. 结论</strong></h2><p></p><p>在 Java 和 JavaScript 之间没有明显的优胜者。尽管有很多明显的差异，但这两种语言都很流行，都有自己的庞大的用户社区。我们希望通过这样的比较能够帮助初学者更好的理解这两门编程语言。不管是学习少儿编程的孩子还是成年的初学者，在学习一门编程语言或选择一门编程语言前，先对这门语言有一个基本了解都是很有必要的。</p><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/">少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程</a><br><a href="https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/">少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 有哪些大的改进</a><br><a href="https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/">少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示</a></p><p></p><p>了解更多校外课课程介绍，请参考：<br><a href="https://learn.xiaowai.co/user-guide-and-xiaowai-general-introduction/">新用户指南 - 校外课网站编程学习环境及少儿编程课程介绍</a><br><a href="https://learn.xiaowai.co/adafruit-circuit-playground-dev-environment-setup-guide/">Adafruit 可穿戴编程开发主板 - 用户使用指南</a><br><a href="https://learn.xiaowai.co/unpluged-programming-games-for-parents-and-kids/">离线学习少儿编程，一些不使用电脑也可以学习编程知识的亲子互动游戏</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之编程语言选择：Java 与 JavaScript 详细比较"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程]]></title><description><![CDATA[如何学习 Python，有没有一种最佳的学习方法，可以更快速的掌握这门编程语言？在此我们专门整理了一份 Python 学习的最佳方法，可作为少儿编程相关学习的参考。]]></description><link>https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/</link><guid isPermaLink="false">5e1a22d3ad269b0530f291be</guid><category><![CDATA[Python 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Wed, 15 Jan 2020 00:00:00 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/best-way-to-learn-python-in-8-steps.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/best-way-to-learn-python-in-8-steps.jpg" alt="少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程"><p>Python 是世界上最被广泛使用的编程语言之一。Python 简单易学，同时又功能强大。对于学习少儿编程的年龄稍大的孩子来说，Python 是一门很好的编程入门学习语言。通过 Python 的学习，可以很容易的进入几乎任何一个编码领域。如何学习 Python，有没有一种最佳的学习方法，可以更快速的掌握这门编程语言？在此我们专门整理了一份 Python 学习的最佳方法，可作为少儿编程相关学习的参考。</p><p>首先，我们会介绍一下 Python 编程语言的特点，以及它通常被应用与哪些方面。然后，我们会详细介绍学习 Python 的每个重要步骤。在此过程中我们会介绍一些在学习过程中可以利用的最佳资源或工具，以及如何利用这些资源或工具获得更好的学习效果。本文内容包含以下几个部分：</p><blockquote><a href="#section1">第一步：了解 Python 特点以及其用途</a><br><a href="#section2">第二步：选择一个 Python 在线编程教程开始学习</a><br><a href="#section3">第三步：在电脑上安装 Python</a><br><a href="#section4">第四步：熟悉并利用其他资源</a><br><a href="#section5">第五步：探索 Python 开发框架、工具库</a><br><a href="#section6">第六步：开始创建自己的开发项目</a><br><a href="#section7">第七步：理解 Python 错误代码</a><br><a href="#section8">第八步：注意经常挑战自己</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="-python-"><strong>第一步：了解 Python 特点以及其用途</strong></h2><p></p><p>在开始学习 Python 之前，首先需要了解 Python 是什么以及为什么使用它。简而言之，Python是一种简单易用、功能强大且用途广泛的高级编程语言。Python 备受开发者欢迎的几个特点包括：</p><ul><li>Python 一种解释性编程语言，可以不用编译直接运行。Python 代码在运行时不需要先被转换为机器可读的语言，在跨平台、安装部署及运行方面更方便快捷。</li><li>Python 语法简单，更接近自然语言，非常易于使用。大多数语法足够合乎自然语言逻辑，这无疑对学习与使用这门编程语言的开发者提供了很大的便利。</li><li>Python 是一门非常容易学习的语言，也是世界各地学校中最常教授的语言。</li><li>Python 功能又足够强大，可以被用来执行几乎所有类型的操作。</li></ul><p>Python 因为这些特点，在很多领域得到了广泛的应用。这些领域包括：</p><ul><li>Web 后端开发</li><li>游戏开发</li><li>数据科学与分析</li><li>移动应用开发</li><li>机器人与人工智能</li></ul><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="-python--1"><strong>第二步：选择一个 Python 在线编程教程开始学习</strong></h2><p></p><p>在线课程是一种经常被低估的资源，功能强大且使用方便。通过在线课程，不必去学校或培训机构，按自己的节奏，用更低的成本完成课程的学习，这适用于成人初学者，对少儿编程学习同样也是如此。在线课程因为下面的几个特点，是学习 Python 编程的一个很好的选择：</p><ul><li>通过在线课程学习，可以更合理的安排自己的学习时间及学习节奏。</li><li>最好的在线课程将以清晰，简洁的方式涵盖您需要了解的所有内容。</li><li>在线课程内容很多，形式多样，有免费的也有付费的，有图文说明的也有视频讲授的，有包含运行环境、练习环境的，也有包含课程内容检测、课后跟踪的，各种不同形式，完全可以覆盖不同年龄及不同特点的人群。</li><li>在线课程通常支持多次返回到理解困难的部分进行重复或着重学习。</li><li>价格更低。甚至有很多优质的免费的在线课程，同样可以达到很好的学习效果。</li></ul><p>在线课程是一个很好的选择，但在学习过程中需要要求学习者有一定的自律性及主动性。如果没有一个目标，没有规划，再好的在线课程也并不一定能带来好的效果。虽然别的学习形式也会有同样的问题，在线课程会更明显一些。孩子在学习少儿编程时也是如此，这种时候家长需要帮助孩子制定学习计划，并注意跟踪计划执行完成情况。</p><p>在 <a href="https://xiaowai.co">本网站</a> 你也可以找到适合自己的在线编程课程进行学习，或者我们也会不定时推荐一些优质的在线课程资源供参考。</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="-python"><strong>第三步：在电脑上安装 Python</strong></h2><p></p><p>在本网站的 Python 在线课程里你可以使用在线 Python 编程开发环境，无需自行安装准备开发环境，更为方便快捷。但在其他的绝大多数在线课程或线下课程里，都需要在电脑上自行安装 Python 开发环境，所以这一步我们就来介绍下安装。</p><p>首先 Python 有两个主要版本：Python 2 和 Python 3。这意味着在安装 Python 之前需要选择合适的版本。所有的课程都会申明适应版本信息，只要选择对应的版本即可。</p><p>如果使用 macOS X 的计算机进行学习，通常这已意味着你已经有了 Python 2 的运行环境，因为 Mac 系统里会预装 Python 2。</p><p>在大多数情况下，最好的办法是两个版本都安装。许多较旧的代码示例或代码项目是使用 Python 2 构建的，这意味着它们将无法在 Python 3 上运行。Python 3 相对 Python 2 有很大的改进或改动，两个版本相互间并不兼容。</p><h3 id="python-"><strong>Python 安装</strong></h3><p>要在计算机上安装 Python，首先需要打开 <a href="https://www.python.org/downloads/windows/">Python</a> 下载页面。在这个页面里有数百种不同的版本可用，通常需要做就是下载相应的最新版本。按照计算机的提示进行操作，像安装其他任何程序一样安装 Python。</p><p><em>在此之后，恭喜你，现在可以进入到下一步了！</em></p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="-"><strong>第四步：熟悉并利用其他资源</strong></h2><p></p><p>通常情况下在这时候你就可以开始在线课程学习了。在学习的过程中除了利用好课程本身的资源信息，你还需要尽快熟悉下面几种可以利用的资源。尽管以下任何资源都可能不会单独教你学习 Python，但它们却可以用来增强学习体验及学习效果，并在以后在使用 Python 过程中成为最为得力的助手。这些资源包括：</p><h3 id="--1"><strong>参考文档</strong></h3><p>如果真的想找到学习 Python 的最佳方法，将一些高质量的参考指南页面添加到浏览器书签/收藏列表里是很有必要的。参考指南将成为 Python 学习的最有价值的工具之一。<a href="https://docs.python.org/2/reference/index.html">官方 Python 语言参考</a> 提供了针对不同 Python 版本的有关语法、规范及编程最佳实践方面的清晰解释。对概念不理解、使用方式不清楚或遇到其他很多问题，都可以在这些文档里找到答案。如果使用得当，这样的参考指南可以极大地加快 Python 编程学习的进度。</p><h3 id="--2"><strong>学习视频</strong></h3><p>在很多视频网站如 bilibili、YouTube 等也有很多很有帮助的资源可以很好的帮助解决在编程学习过程中遇到的问题。订阅或关注一些高质量的 Python 相关频道或专栏，将对 Python 学习及使用能力带来很大的提升。</p><h3 id="--3"><strong>开发社区</strong></h3><p>Python 是一门被广泛使用的开发语言，收到广大开发者欢迎的其中一个原因就是 Python 几乎在所有方面都有活跃的开发社区支持。当您对某个概念或想法感到困惑或碰到问题时，在线编码社区或论坛也是一个获得帮助的好地方。能够快速的获取相关的准确的资讯也是体现编程能力的一个方面。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2018/09/best-way-to-learn-python-1.png" class="kg-image" alt="少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程"></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="-python--2"><strong>第五步：探索 Python 开发框架、工具库</strong></h2><p></p><p>几乎所有的 Python 编程项目都是基于框架及工具库进行开发的。一切从零开始是不现实也不必要的。了解或熟悉一些常用的框架或工具库将大大提升 Python 编程的能力。下面我们会以初学者最常用到的 Web 开发为例，列举几个几个最受欢迎的Python 编程框架。</p><ul><li><a href="https://www.djangoproject.com/">Django</a> – 作为一种开源，免费的全栈 Web 开发框架，Django 被全世界的开发人员使用。它旨在为开发人员提供他们所需的一切，而不是依赖库。</li><li><a href="https://www.fullstackpython.com/flask.html">Flask</a> – Flask是一个较小的开发框架，旨在帮助创建高质量的 Web 应用程序基础。它是模块化的，允许在必要时使用扩展。它还包括一系列既有吸引力又非常有用的开箱即用功能。</li><li><a href="https://trypyramid.com/">Pyramid</a> – 与 Django 类似，但更注重简单性和易用性，并以其高效率和快节奏的开发能力而闻名。</li></ul><p>这些只是一些最常见的 Python 框架。更过的框架及工具库内容可以参考本文末尾的链接。当然在学习 Python 时，并不需要学习所有最常见框架的所有功能。但需要对它们有所了解，熟悉它们的功能、用途及特点。</p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="--4"><strong>第六步：开始创建自己的开发项目</strong></h2><p></p><p>到目前为止，我们已经找到了学习 Python 的最佳方法。同时也应该对 Python 基础知识有了很好的了解。下面我们需要开始创建自己的开发项目，并在完善这个项目的过程中学习及练习编码。</p><p>学习 Python 的最好方法就是是通过编写程序来练习已经知道的知识。创建简单的程序很容易。在开始时并不需要编写一个完美的软件或游戏。在这个过程中，更应专注于创建执行特定功能的小代码段。在创建项目时，可以参考以下步骤：</p><ol><li>收集一些功能方面的想法并写下它们，然后从中选择一些看起来有趣并且有能力实现的部分作为项目要实现的目标。</li><li>开始编写程序，并在编程过程中进行测试，在一些错误成为主要问题之前修复它们。在这个过程中尝试制定一个简短的计划，并在这个计划里明确每一步需要完成的目标。</li><li>完成程序后，请仔细阅读并检查程序，并确保代码里有足够的注释信息来记录自己代码的工作方式和原因。检查测试是否完成预期的每一项目标。在这之后也可以考虑将部分信息或代码发布到社区获取反馈或建议，找到可以提升的地方并对项目进行完善。</li></ol><p>第一个程序很多可能不会有什么特别的地方，也可能得到很多负面反馈。但通过上面的步骤，编程技能必会得到提升，并让下一个项目变得更好。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="-python--3"><strong>第七步：理解 Python 错误代码</strong></h2><p></p><p>在学习中了解 Python 的常见错误代码的含义及解决方法。理解错误代码是学习P Python 最佳方法的重要部分。如果不知道特定错误的含义或解决方法，也就无法有效地对代码进行故障排除。</p><p>如果您还没有了解常见的 Python 错误，建议或一些时间了解并熟悉它们。可以访问 Python 官方网站的 <a href="https://docs.python.org/3/tutorial/errors.html">错误代码列表</a> 页面，获取错误类型的完整列表以及解决方法。</p><p>如果有问题找不到答案，重新查看上面提到的步骤，记住有很多种方式可以让自己在这方面获取足够的支持。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="--5"><strong>第八步：注意经常挑战自己</strong></h2><p></p><p>如果想更好的提升 Python 能力，就需要确保自己不断改进。经常挑战自我，确保学到新东西，并巩固已学到的一切。</p><h3 id="--6"><strong>研究学习别人的代码</strong></h3><p>下载和处理他人的代码是学习 Python 最佳方法的一部分。在 GitHub 之类的网站，找一些有趣的优秀的开源代码。下载代码文件，在代码或文本编辑器中将其打开，阅读代码。尝试了解代码的功能实现，通过学习别人代码来达到提升自己的目标。</p><h3 id="--7"><strong>尝试帮助别人</strong></h3><p>学习新的 Python 技能的另一种好的方法是帮助其他人。前往编码社区或论坛，尝试解答别人的问题，在这一过程中注意同一问题不同解决方案的好坏。在帮助别人的同时，也可以提高自己解决问题的能力。</p><h3 id="--8"><strong>编程挑战</strong></h3><p>编码挑战既有趣又引人入胜，它们可以迫使自己进入不同的领域，跳出自己惯有的习惯思维。搜索使用提供编码挑战的网站。大多数情况下，每个挑战都会提供详细的目标说明，并且要求创建一段代码实现特定目标功能。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2018/09/best-way-to-learn-python-2.png" class="kg-image" alt="少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程"><figcaption>编程挑战</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/">少儿编程之编程语言选择：Java 与 JavaScript 详细比较</a><br><a href="https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/">少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 有哪些大的改进</a><br><a href="https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/">少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示</a><br></p><p></p><p>了解更多校外课课程介绍，请参考：<br><a href="https://learn.xiaowai.co/user-guide-and-xiaowai-general-introduction/">新用户指南 - 校外课网站编程学习环境及少儿编程课程介绍</a><br><a href="https://learn.xiaowai.co/adafruit-circuit-playground-dev-environment-setup-guide/">Adafruit 可穿戴编程开发主板 - 用户使用指南</a><br><a href="https://learn.xiaowai.co/unpluged-programming-games-for-parents-and-kids/">离线学习少儿编程，一些不使用电脑也可以学习编程知识的亲子互动游戏</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之编程语言介绍：Python 编程应用情况详细介绍]]></title><description><![CDATA[在学习少儿编程时，家长或孩子通常会面临编程语言选择的问题。在开始少儿编程学习之前，很重要的一点就是了解编程语言的特点及用途用例。在这篇文章里，我们会详细介绍下 Python 这门编程语言在机器学习、人工智能、网络机器人应用、Web 开发、数据分析及数据挖掘、桌面 GUI 应用、游戏开发中的应用情况。]]></description><link>https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/</link><guid isPermaLink="false">5e1a3573ad269b0530f2939a</guid><category><![CDATA[Python 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Tue, 14 Jan 2020 00:00:00 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/programming-language-intro-what-is-python-used-for.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/programming-language-intro-what-is-python-used-for.jpg" alt="少儿编程之编程语言介绍：Python 编程应用情况详细介绍"><p>在学习少儿编程时，家长或孩子通常会面临编程语言选择的问题。在开始少儿编程学习之前，很重要的一点就是了解编程语言的特点及用途用例。在这篇文章里，我们会详细介绍下 Python 这门编程语言在机器学习、人工智能、网络机器人应用、Web 开发、数据分析及数据挖掘、桌面 GUI 应用、游戏开发中的应用情况，希望这些信息可以激发孩子学习 Python 少儿编程的热情，并给少儿编程学习带来动力。</p><p>Python 是一门多才多艺的编程语言。只要选择合适的工具、库资源以及正确的方法，在很多领域它都可以有挥洒自如的应用。当然对于少儿编程初学者来说，学习任何一门编程语言都不会是一件容易的事情，都需要勇气、毅力、时间及付出。了解一下 Python 的在不同领域应用的情况将会是学习 Python 的一个不错的开始。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. Python 是怎样一门编程语言</a><br><a href="#section2">2. Python 在机器学习领域的应用</a><br><a href="#section3">3. Python 是人工智能开发最佳编程语言</a><br>	<a href="#section4">3.1 Python 人工智能项目成功案例</a><br><a href="#section5">4. Python 在网络机器人方面的应用</a><br><a href="#section6">5. Python 在 Web 开发方面的应用</a><br><a href="#section7">6. Python 在数据挖掘方面的应用</a><br><a href="#section8">7. Python 在 GUI 开发方面的应用</a><br><a href="#section9">8. Python 在游戏及 3D 图形开发方面的应用</a><br><a href="#section10">9. 结论</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-python-">1. Python 是怎样一门编程语言</h2><p></p><p>Python 更接近自然语言，非常易于编写及阅读。从 Python 设计开发的早期开始，Python 就注重实现其尽可能地更易于使用这一目标。强调可读性是 Python 编程语言区别与其他编程语言的主要特征。</p><p>Python 是一种解释性编程语言，在运行时不需要先被转换为机器可读的语言，可以不用编译直接运行。Python 也是一种高级（ high-level）通用编程语言。1991 年，Guido van Rossum 创建了 Python 编程语言，发展到今天早已成为编程世界里一道亮丽的风景线。</p><p>另外，Python 的设计目标是生成更清晰，更有逻辑性的代码，不仅仅为小型项目，大型项目同样也是如此。</p><p>Python 的使用非常灵活，就像魔方一样，在很多方面可以按需要组装变化，游刃有余。Python 编程语言具有处理大量不同类型计算机任务的能力，并基于这种能力产生出令人叹为观止的技术应用。</p><p>下面是 Python 在一些知名项目里的应用，通过这些应用你也可以对这门编程语言的的影响及其使用情况有一个大概的了解：</p><ul><li>著名的 BitTorrent（BT，基于一种高效内容分发协议的应用）程序最初就是用 Python 开发的。</li><li>美国国家安全局（NSA - National Security Agency）将 Python 用于情报分析及信息加密。</li><li>知名视频网站 Youtube 使用 Python 作为其开发语言之一。</li><li>Google 对 Python 应用很多，其网络搜索系统就是基于 Python 开发的。</li></ul><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="2-python-"><strong>2. Python </strong>在机器学习领域的应用</h2><p></p><p>机器学习作为一个革命性的概念出现，并已在个性化应用及未来趋势预测方面发挥了重要作用。在过去的几年中，人工智能已经为各个行业领域带来了巨大的改变与提升。它作为一种全新的，之前闻所未闻的技术，在很短的时间内获得了飞快的发展。而在这个过程中，Python 起到了举足轻重的作用。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/08/adult-artificial-intelligence-bot-1020325-300x228.jpg" class="kg-image" alt="少儿编程之编程语言介绍：Python 编程应用情况详细介绍"></figure><!--kg-card-end: image--><p>创建以人工智能驱动的应用软件听上去很复杂。简单来说，使用 Python 进行的机器学习，就是教计算机学习特定的模式并加以识别，就像人们教孩子学习一样。经过这样的学习之后，计算机可以在评估潜在答案并对信息做出精度很高的预测。</p><p>机器学习由神经网络驱动，而神经网络则主要是由 Python 这门编程语言驱动的。这也是 Python 的主要用途之一。Python 驱动的神经网络就像是一个由类似人脑算法组成的系统。开发人员使用 Python 编程语言，创建高级网络算法，指导计算机通过分析大批量样本数据完成学习过程。</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="3-python-">3. Python 是人工智能开发最佳编程语言</h2><p></p><p>Python 能成为人工智能开发领域最佳编程语言，有下面几个方面的原因：</p><ul><li>Python 良好的生态系统对人工智能和机器学习提供了强大的支持。Python 有许多维护良好的工具库、框架，项目资源及教程，有丰富活跃的人工智能和深度学习开发社区。</li><li>Python 能在人工智能领域获得广泛应用，另一个重要原因是其在数据管理、数据分析方面的卓越表现。Python 在这方面具有很高的成本收益比率，而这为人工智能高效率、低成本地处理大量复杂数据提供了强大的支持。</li><li>Python 的语法更接近英语自然语言，更容易学习掌握及使用。同时这门编程语言又具有处理及掌控复杂情况与复杂系统的能力。这也是 Python 在包括人工智能在内的很多领域得到广泛应用的另一个重要原因。</li></ul><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="3-1-python-">3.1 Python 人工智能项目成功案例</h2><p></p><p>使用 Python 驱动的人工智能应用早已被被证明是非常成功的。<a href="https://www.skyscanner.net/">Skyscanner</a> 使用了无监督 Python 机器学习算法，可以做到低成本且高效率的对新的飞行路线做出评估，对旅行者的潜在目的地做出很好的预测。并最终为旅游业带来了很大的提升。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/08/photo-1507146153580-69a1fe6d8aa1-300x200.jpeg" class="kg-image" alt="少儿编程之编程语言介绍：Python 编程应用情况详细介绍"></figure><!--kg-card-end: image--><p>另一个能够证明 Python 是人工智能最佳编程语言的例子，是其在医疗保健领域获得的进展。Python 人工智能项目正在彻底改变疾病预测及伤害检测方面的情况，使追踪及维护患者的健康状况的难度大为降低。</p><p>此外，在 Python 相关技术驱动下出现了很多健康管理相关的应用程序。<a href="https://aicure.com/">AiCure</a> 作为可以帮助患者确保按处方服药的移动应用就是其中之一。而这正体现了 Python 这门编程语言的典型用途：推动技术进步并改善我们的生活。</p><p>如果有兴趣了解下 Python 机器学习方面的更多信息，从 <a href="https://keras.io/">Keras</a> 工具库开始将会是一个不错的选择，Keras 提供了一个创建 Python 神经网络的简化版本。在这以后可以继续深入了解 <a href="https://www.tensorflow.org/">TensorFlow</a>、<a href="https://pytorch.org/">PyTorch</a> 或 <a href="https://github.com/Theano/Theano">Theano</a>。</p><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="4-python-">4. Python 在网络机器人方面的应用</h2><p></p><p>网络机器人（bots）是一种通过互联网自动执行特定任务的程序。通过编程方式驱动的应用程序，在执行重复动作的某些任务面前，相比较人类无疑具有无可比拟的优势。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/08/rock-n-roll-monkey-FTfjMijq-Ws-unsplash-263x300.jpg" class="kg-image" alt="少儿编程之编程语言介绍：Python 编程应用情况详细介绍"></figure><!--kg-card-end: image--><p>例如，机器人在社交网站有很多应用，像是每天向用户发送的大量相同或相似的消息。机器人程序也被用于很多自动响应系统，如聊天机器人或客服机器人，对大量的用户输入的做出快速响应，让客户支持变得更有成效。</p><p>Python 是创建机器人程序的主要编程语言之一。下面我们来看一下 Python 在这方面的应用情况：</p><ul><li><a href="https://github.com/slackapi/python-rtmbot" rel="follow noopener noreferrer">python-rtmbot</a> 是一个流行的机器人开发框架，基于 WebSockets 上实现 Slack 自动实时消息交互 API。</li><li>GitHub 上有大量的活跃的 Python 机器人开源资源，包括项目、代码片段和文档参考信息。</li><li><a href="https://github.com/errbotio/errbot" rel="follow noopener noreferrer">Errbot</a> 是一个开源的 Python 聊天机器人项目，可以用来创建不同场景下的自动交互应用。</li></ul><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="5-python-web-"><strong>5. Python 在 Web 开发方面的应用</strong></h2><p></p><p>Web 开发包含比较广泛的内容，它通过创建网站的形式来完成特定任务及不同业务需求。其复杂性完全取决于产品类型及业务需求。</p><p>Python 是 Web 后端开发的主要编程语言之一。<a href="https://www.djangoproject.com/">Django</a>、<a href="http://flask.palletsprojects.com/">Flask</a> 和 <a href="https://falconframework.org/">Falcon</a> 是其最流行的编程开发框架，借助这些活跃的框架及社区资源，开发人员可以更容易的实现其开发目标。</p><p>Web 前端浏览器并不能直接执行 Python，虽然可以使用 <a href="http://pyjs.org/">pyjs</a> 工具库将 Python 编译为 JavaScript 做到这一点，但这种应用场景并不多见。像很多用于 Web 开发的编程语言一样，大多数 Web 应用程序至少同时包含 JavaScript 和 Python 这两种编程语言：前端浏览器运行 JavaScript，而 Python 在服务器端执行。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="6-python-">6. Python 在数据挖掘方面的应用</h2><p></p><p>Python 在科学计算、数据管理、数据分析、数据挖掘方面的具有卓越的表现，具有很高的成本收益比率，被认为是这方面最好的编程语言之一。</p><p>Python 在数据挖掘方面有广泛的应用。数据挖掘是一个通过分析大量数据以构建趋势预测的过程。这个过程通常会很复杂。从事数据挖掘工作的工程师或科学家首先需要对大量信息信息进行调研，并以此为基础做出某些假设并设计算法及构建数据模型。数据挖掘在很多方面如社交网络数据分析、犯罪影像分析都有广泛的应用。</p><p>Python 在这方面的另一个用途是对数据进行管理，组织并清理数据。</p><p>Python 因其全系列的开发框架及活跃的开发社区而闻名，大量的项目信息、代码片段及参考资源，为开发人员带来很大便利。这适用于几乎所有的 Python 使用场景，包括前面提到的人工智能、Web 开发，数据处理、数据挖掘在方面也不例外。以下是 Python 在数据分析数据处理方面的最为流行的框架或工具库列表：</p><ul><li><a href="https://numpy.org/">Numpy</a> 是为 Python 数值计算而设计并被广泛使用的领先框架。</li><li><a href="https://www.scipy.org/">SciPy</a> 是一个集合了科学、数学及工程各方面应用的模块。</li><li><a href="https://scikit-learn.org/stable/">Scikit-Learn</a> 是一个用于数据挖掘的 Python 机器学习框架，支持回归、聚类、模型选择、预处理和分类等多种处理方式及算法。</li><li><a href="https://dask.org/">Dask</a> 是一个支持大规模数据存储与读取、分析、并行计算运行框架。</li></ul><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="7-python-gui-">7. Python 在 GUI 开发方面的应用</h2><p></p><p>图形用户界面（GUI）相关的应用开发，也是 Python 的用途之一。GUI允许人们使用可视化元素（如图标或图片）而不是基于文本的命令与计算机交互。有许多模块可用于使用Python创建GUI。因此，我们简要指出最常用的：</p><ul><li><a href="https://docs.python.org/3/library/tkinter.html">Tkinter</a> 是一个内置的 Python 图形用户界面开发工具包。这个工具包可以运行在所有常见的操作系统上，如 Microsoft、Linux 和 Mac OS X。</li><li><a href="https://pypi.org/project/PyGTK/">PyGTK</a> 是一个帮助创建图形界面的免费工具包。</li><li><a href="https://www.wxpython.org/" rel="follow noopener noreferrer">wxPython</a> 是一套跨平台的优秀的 GUI 图形库。允许 Python 程序员很方便的创建完整的、功能键全的图形用户界面。WXPython 本身使用 C++ 开发创建。</li><li><a href="https://kivy.org/">Kivy</a> 一个用于生成移动应用程序和多点触摸应用程序软件的 Python 工具库。它是定义用户界面和交互的一个很好的选择。</li></ul><!--kg-card-begin: html--></section><section id="section9"><!--kg-card-end: html--><h2 id="8-python-3d-">8. Python 在游戏及 3D 图形开发方面的应用</h2><p></p><p>Python 在游戏及 3D 图形开发方面，也是一个有实力的候选者。在这方面 Python 同样也有为数众多的优秀框架及工具：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/08/florian-olivo-Mf23RF8xArY-unsplash-300x200.jpg" class="kg-image" alt="少儿编程之编程语言介绍：Python 编程应用情况详细介绍"></figure><!--kg-card-end: image--><p></p><ul><li><a href="https://www.pygame.org/news" rel="follow noopener noreferrer">PyGame</a> 可能是使用 Python 进行游戏开发的首选。这个优秀的工具库提供了制作功能齐全的游戏和多媒体程序模块。初学者可以考虑使用这个框架，并通过社区丰富的示例源码学习并理解游戏开发内容。</li><li><a href="http://pyopengl.sourceforge.net/" rel="follow noopener noreferrer">PyOpenGl</a> 是 OpenGL 编程开发的包装器。它包含了许多如何创建三维模型的示例。</li><li><a href="https://www.panda3d.org/">Panda3D</a> 是一个用于 3D 渲染和游戏开发的开源框架。</li><li><a href="https://docs.blender.org/api/current/index.html" rel="follow noopener noreferrer">Blender</a> 是一个复杂的工具，用于创建三维图形模型。这些工具应用一个嵌入式Python 解释器来生成 3D 游戏。</li><li><a href="http://arcade.academy/" rel="follow noopener noreferrer">Arcade</a> 是一个用于开发 2D 游戏开发的 Python 库。</li></ul><!--kg-card-begin: html--></section><section id="section10"><!--kg-card-end: html--><h2 id="9-"><strong>9. 结论</strong></h2><p></p><p>Python 灵活易用，社区资源活跃，并有丰富的扩展工具包及框架支持，应用非常广泛。仅通过一篇文章对 Python 的用途及特点进行全面详细的介绍，并不是那么容易。你还可以在网站找到更多少儿编程 Python 介绍内容，或者直接进行 Python 少儿编程相关课程学习：</p><p><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a></p><p>在结束本篇内容之前，让我们快速回顾一下上面提到的主要内容信息：</p><ul><li>Python 是一种灵活的编程语言，其在包括数据分析方面的良好表现为机器学习提供了强大的支持，并推动了机器学习的发展。</li><li>Python 是创建人工智能应用最佳编程语言之一。</li><li>Python 是数据分析处理工程师及科学家首选编程语言之一，使用 Python 可以简化分析数据、洞察数据及完成预测等一系列复杂数据处理过程。</li><li>在网络机器人、桌面 GUI 应用、Web及游戏开发等领域，Python 也是经常被使用的主要编程语言之一。</li></ul><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/a-new-definition-of-computational-thinking/">少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的</a><br><a href="https://learn.xiaowai.co/thought-as-a-technology/">少儿编程之编程思想介绍 ——  思想，作为一种技术</a><br><a href="https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/">少儿编程之 Kill Math 项目介绍：让数学不只是符号</a><br><a href="https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/">少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之编程语言介绍：Python 编程应用情况详细介绍"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之编程语言选择：Python 与 C++ 详细比较]]></title><description><![CDATA[接触少儿编程的孩子或家长以及其他初学者经常问这样的问题：如何选择编程语言？选择学习 Python 还是 C++，这两种编程语言的应用前景如何？在这篇文章里，我们就各个方面对 Python 与 C++ 进行详细比较，为学习少儿编程的家长或孩子以及其他的初学者在选择编程语言时提供参考。]]></description><link>https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/</link><guid isPermaLink="false">5e1a1c86ad269b0530f2912a</guid><category><![CDATA[Python 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Mon, 13 Jan 2020 00:00:00 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/programming-language-comparison-python-vs-c-plus-plus.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/programming-language-comparison-python-vs-c-plus-plus.jpg" alt="少儿编程之编程语言选择：Python 与 C++ 详细比较"><p>接触少儿编程的孩子或家长以及其他初学者经常问这样的问题：如何选择编程语言？选择学习 Python 还是 C++，这两种编程语言的应用前景如何？在这篇文章里，我们就各个方面对 Python 与 C++ 进行详细比较，为学习少儿编程的家长或孩子以及其他的初学者在选择编程语言时提供参考。</p><p>Python 与 C++ 的争论由来已久，这是一个很有趣的话题，因为这两种编程语言在语法、易用性、用途用法和整体编程方法等各方面都大相径庭，本不太适合直接拿出来进行比较。C++ 是一种通用编程语言，其源于 C 语言。尽管 Python 也是通用的，但它是一种更高级（high-level）的语言，这意味着 Python 代码更易于阅读和理解。 </p><p>孩子在少儿编程学习时，如何选择编程语言，选择 Python 还是 C++？简单来说，Python 更适合初学者，而 C++是更复杂的低级（low-level）语言。C++ 具有更多的语法及其他编程规范，而 Python 更接近自然语言（常规英语）。在常规用途方面，Python 是机器学习和数据分析领域领先的语言，而 C++ 则是游戏开发和大型系统的最佳选择。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. Python 简介</a><br>	<a href="#section2">1.1 Python 的应用领域</a><br><a href="#section3">2. C++ 简介</a><br>	<a href="#section4">2.1 C++ 的应用领域</a><br><a href="#section5">3. 少儿编程或初学者编程语言选择：Python vs C++</a><br>	<a href="#section6">3.1 Python 与 C++ 的主要区别</a><br><a href="#section7">4. C++ 与 Python 之间的整合</a><br><a href="#section8">5. C++ 与 Python 性能方面的比较</a><br><a href="#section9">6. Python 与 C++ 游戏开发方面的比较</a><br><a href="#section10">7. 结论</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-python-">1. Python 简介</h2><p></p><p>1991 年，Guido van Rossum 创建了 Python 编程语言。Python 是一种通用编程语言，强调可读性是 Python 编程语言区别与其他编程语言的主要特征。</p><p>从设计开发的早期开始，Python 就注重实现其尽可能地更易于使用这一目标。在易用性方面，Python 利用大量的空白符缩进使其代码更易于编写及阅读，从而为初学者及使用者提供了简单而令人愉悦的体验。</p><p>从这个角度来比较 Python 与 C++，C++ 显然具有更复杂的语法规范。例如使用所有类似 C 的编程语言都使用的大括号「{ }」和分号「;」，这在 Python 中不会见到。实现同样的语法规则在 Python 中使用简单的缩进就可以。</p><p>Python 的另一个重要特征，它是一种解释性编程语言，可以不用编译直接运行。Python 代码在运行时不需要先被转换为机器可读的语言，在跨平台、安装部署及运行方面更方便快捷。</p><p>Python 这些特点在带来简单便捷易于使用的优势同时，也会恰恰因为这些特点在别的方面（如性能）相比较于 C++ 存在一定程度的劣势。尽管如此，Python 在很多领域都得到了广泛的应用。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/02/python-vs-c-python-300x101.png" class="kg-image" alt="少儿编程之编程语言选择：Python 与 C++ 详细比较"></figure><!--kg-card-end: image--><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="1-1-python-">1.1 Python 的应用领域</h2><p></p><ul><li>Python 在机器学习（Machine learning）方面得到了广泛的应用，为许多行业如保险、零售、银行、航空航天和商业服务带来的显著的改善与提升。 通过机器学习，重新组织发掘已有的知识结构，获取新的知识或技能，做出精准预测并不断改善自身，已成为许多特定领域内的最佳实践。</li><li>在数据分析方面，Python 是被大多数数据分析人员广泛使用的主要编程语言。在成本收益比方面有很大优势，被用来处理大量数据。 Python 还被用于数据管理、统计分析、数据可视化、数据挖掘、数据预测等各个方面。</li><li>Python 在后端 Web 开发中也得到了广泛的应用。比如，使用 Django 框架进行快捷的 Web 开发。当然不借助框架也可以使用 Python 来创建网站，虽然这样的使用场景比较少。</li><li>虽然在 Web 前端开发中不能直接使用 Python 代码，但是借助某些工具也可以将Python 代码转换为 JavaScript 并在浏览器上直接运行。</li></ul><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="2-c-">2. C++ 简介</h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/02/python-vs-c-c-267x300.png" class="kg-image" alt="少儿编程之编程语言选择：Python 与 C++ 详细比较"></figure><!--kg-card-end: image--><p>C++ 是一种通用编程语言，通常被广泛应用于大型复杂系统的开发。在所有编程语言中，C++ 是可移植性最好的编程语言。使用 C++ 编写的代码可以很容易的从一个平台移植到另一个平台，甚至绝大多数代码不用修改就可以直接编译。</p><p>相比 C++，Python 遵循「写一次，就可以在任何地方运行」的原则，这意味着同样的代码可以在所有操作系统上运行。而使用 C++ 编写的代码需要在每个平台上重新编译才能运行。</p><p>C++ 与 Python 最大的不同，C++ 代码需要首先被编译为机器代码。Python 在解释时遵循不同的策略，而这种解释相比 C++ 这种编译后直接在硬件上运行的代码性能要差一些。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="2-1-c-">2.1 C++ 的应用领域</h2><p></p><p>让我们来看一下 C++ 最为广泛使用的几个领域：</p><ul><li>如上所说，C++ 更接近硬件。因此 C++ 编程被广泛应用于大多数嵌入式系统开发之中。这些嵌入式系统包括智能手表、医疗机器以及物联网传感器等。</li><li>跟嵌入式开发类似，C++ 编程语言在服务器和微控制器等应用程序的开发中同样有广泛的应用。</li><li>C++ 还是 3D、多人游戏或其他类型游戏开发使用的主要语言。它足够强大，可以创建诸如 CounterStrike，Doom 和 Red Dead Redemption 之类的强大且精细的游戏。很多游戏工具本身如 Unity 也是使用 C++ 编写的，虽然在 Unity 里面用户使用的是另一种编程语言 C＃进行开发。</li></ul><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="3-python-vs-c-">3. 少儿编程或初学者编程语言选择: Python vs C++</h2><p></p><p>通过上面的介绍，相信你对学习少儿编程时如何选择编程语言这个问题有了一个大概的了解。下面我们通过一个例子，来简单比较一下 Python 与 C++ 的这种不同：C++ 的语言规则相比 Python 要复杂得多。这是一段 C++ 的代码（输入名字，输出一段文字信息）：</p><!--kg-card-begin: markdown--><pre><code>#include
#include
using namespace std;
int main() {
string name;
cin &gt;&gt; name;
cout &lt;&lt; &quot;Good evening, &quot; &lt;&lt; name &lt;&lt; endl;
return 0;
}
</code></pre>
<!--kg-card-end: markdown--><p>而实现同样的功能，Python 的代码则是这样：</p><!--kg-card-begin: markdown--><pre><code>name = input()
print(&quot;Good evening, &quot; + name)
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="3-1-python-c-">3.1 Python 与 C++ 的主要区别</h2><p></p><p>下面会在编程语法及一般规范方面，对 C++ 与 Python 这两种编程语言进行详细比较：</p><ul><li>C++ 代码中大量使用大括号「{ }」和分号「;」来实现其语法规则。而 Python 则主动放弃了这样的编程规则，转而采取了一种更为友好的方式：使用缩进来完成类似的规范，通过不同的缩进级别来创建不同的代码结构。</li><li>Python 也并不使用很多编程语言里使用的分号「;」，而是简单的将代码行尾视为语句的结束。如果编程语句需要跨多行，只需使用反斜杠「\」即可。而在 C++ 里，必须使用分号来标识语句的结束。</li><li>布尔表达式在 Python 和 C++ 中是不同的。C++ 根据数值返回 false 或 true。例如，标记为 0 的所有内容均为 false，其他数值则为 true。 在 Python 里则有更多的使用场景，例如 none 和 false 常量为 false，就像空数组或集合一样。</li></ul><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://www.bitdegree.org/tutorials/wp-content/uploads/2019/05/photo-1516534775068-ba3e7458af70-300x200.jpeg" class="kg-image" alt="少儿编程之编程语言选择：Python 与 C++ 详细比较"></figure><!--kg-card-end: image--><ul><li>C++ 中的变量必须具有如 float 或 int 之类的类型，因为 C++ 是静态类型的，变量在初始化时强制要求指定变量类型。而 Python 则是动态类型化，这意味在 Python 里不需要指定变量的类型。Python 在这方面具有很大的灵活性，但也会因为这一特点很容易带来不恰当使用的问题。</li><li>单继承和多继承在 C++ 和 Python 中都是支持的。一个子类可以继承自单个父类，也可以继承自多个父类。</li><li>Python 与 C ++ 重要的区别之一是内存管理。Python 提供了被称为「垃圾收集器」的自动内存管理机制，不允许直接进行内存处理操作。但在 C++ 里则没有这样的机制，并且所有内存管理操作都需要自行处理。</li><li>Python 字典（dictionary）与 C++ 映射（map），除了使用不同术语方面的区别，在 C++中，映射是存储由键值索引的值的容器。虽然在 Python 中同样如此但是会更加灵活。因为在 Python 里，键与值可以是不同类型。</li></ul><p>作为 C++ 程序员一个较好的方面就是，转而学习 Python 对他们来说会很容易。Python 遵循简单规范的原则，在短时间内掌握起来并不难。但如果 Python 程序员想学习 C++ 则是不同的，因为 C++ 更复杂，Python 程序员需要更多的思考与研究才能适应 C++。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="4-c-python-">4. C++ 与 Python 之间的整合</h2><p></p><p>开发人员通常会将 C++ 编写的模块与 Python 编写的模块结合使用来彼此取长补短。此外，从 Python 代码中调用 C++ 也会扩展 Python 底层（low-level）实现的能力。</p><p>Python 虽然在性能方面通常会较 C++ 差一些，但在一般的情况下并不会很明显或作为问题出现。如果 Python 出现性能问题，也可以通过选择使用 C++ 语言编写相关加速模块来解决。在这种情况下，使用 C++ 编写的代码通常可以取得更好的性能。将 C++ 和 Python 结合使用，可以让开发项目做到易用性和运行速度兼顾。</p><p>要将 Python 模块嵌入到 C++ 之中，只需要创建一个 C++ 程序，编译并链接到 Python 程序即可。在这个过程中 Visual Studio 可能是必需的，其他可能会被用到的工具有 CPython、PyBind11 等。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="5-c-python-">5. C++ 与 Python 性能方面的比较</h2><p></p><p>比较 Python 与 C++ 在性能方面的表现，我们可以知道通常使用哪种语言编写的程序执行速度更快，效率更高。如前所述，C++ 为编译性编程语言，Python 则为解释性编程语言。解释性的编程代码通常会比编译性代码慢。此外，由于 C++ 要求强制指定变量类型，虽然这会影响其易用性，但在程序运行时这一点却可以有效避免因为类型错误或不当使用带来的很多问题。</p><p>总体而言，在性能方面，与 Python 相比，C++ 无疑是胜出者。</p><!--kg-card-begin: html--></section><section id="section9"><!--kg-card-end: html--><h2 id="6-python-c-">6. Python 与 C++ 游戏开发方面的比较</h2><p></p><p>使用 Python 可以更简单快速的创建游戏，这对初学者来说是一个很好的选择。因为这一特点，Python 很适合初学者作为游戏开发学习的入门语言，用来学习游戏开发的基本逻辑和原理。</p><p>但作为更高级别的游戏开发而言，选择 Python 语言进行游戏开发通常将不得不面临性能方面的问题。因为很多游戏特别是某些激烈的场景对性能要求很高，而 Python 在这方面并不占优势的特点会很明显。当然这也并不意味着 Python 不能用于游戏开发。就像前面提到的，在这种场景下，Python 仍然可以与其他语言如 C++ 结合使用，比如 Python 就经常在游戏中被用来实现其人工智能相关的功能。</p><p>回到我们的问题，在游戏开发方面相比 Python，C++ 在核心图形处理及重负荷游戏开发方面无疑具有明显的优势。</p><!--kg-card-begin: html--></section><section id="section10"><!--kg-card-end: html--><h2 id="7-">7. 结论</h2><p></p><p>通过上面的 C++ 与 Python 的比较，我们可以得出这样一个结论：就代码易于编写及易于阅读方面，Python 对于初学者来说更为友好，并且是在这方面表现最好的语言之一。另外，Python是 Web 后端开发的一个不错的选择，而 C++ 在任何类型的 Web 开发里都不是很流行。</p><p>Python 还是用于机器学习及数据分析领域领先的编程语言。虽然 C++ 也可以被用于机器学习相关开发，但通常来说这并不是一个很好的选择。就易用性而言，Python 在人工智能和机器学习方面更易于使用，并且具有强大的相关功能支持。</p><p>在游戏开发方面，C++ 无疑具有很大优势。虽然 Python 相比 C++ 更适合初学者快速创建游戏，并进行游戏开发相关理论及方法的学习。但对于更复杂更专业的游戏开发而言，C++ 是毫无争议的领导者。</p><p>在性能方面，C++ 优于 Python 很多。毕竟 Python 是一种解释性编程语言，在这方面难以达到与诸如 C++ 之类的编译性编程语言达到相同的高度。虽然在多数应用场景中 Python 的这一特点并不会成为问题，但在一些特殊的对性能要求苛刻的场景下这的确会成为 Python 应用的一个瓶颈。</p><p>好的一方面是，通过结合使用 C++ 和 Python 两种编程语言，可以做到易用性与性能兼得。因此在 Python 项目中某些对性能有严格要求的部分可以使用 C++ 编程来替代。</p><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/why-python-a-great-language-for-beginners/">少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/">少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/">少儿编程之编程语言选择：Java 与 JavaScript 详细比较</a><br><a href="https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/">少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 有哪些大的改进</a><br><a href="https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/">少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示</a></p><p></p><p>了解更多少儿编程相关信息，请参考：<br><a href="https://learn.xiaowai.co/the-reason-that-kids-need-to-learn-programming/">为什么要学习少儿编程，学习少儿编程有用吗，不做程序员有必要学习编程吗？</a><br><a href="https://learn.xiaowai.co/parents-need-to-know-what-programming-is-and-how-to-learn/">家长必读：为什么要学习少儿编程，编程需要学习哪些内容，怎样学习编程</a><br><a href="https://learn.xiaowai.co/is-programming-language-that-important-for-kids-learning/">学习少儿编程选择什么编程语言重要吗？学习少儿编程的目的是什么？孩子有必要学习少儿编程吗？</a><br><a href="https://learn.xiaowai.co/how-to-select-programming-language-and-course-for-kids-learning/">家长如何帮助孩子选择少儿编程学习的编程语言或编程工具，如何选择少儿编程课程</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之编程语言选择：Python 与 C++ 详细比较"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image--><!--kg-card-begin: html--><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊]]></title><description><![CDATA[从 2017 年 9 月 11 日星期一开始 Dynamicland 发布的一系列照片和视频剪辑让我意识到，我可能错过了一个有意思的东西 —— 并且可能是最具可行性的 —— 关于 Bret Victor 在 2014 年分享的「可视空间」概念。在这篇文章里我会尝试把我的一些想法总结的片段，放在一起。]]></description><link>https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/</link><guid isPermaLink="false">5e19011ead269b0530f28fb4</guid><category><![CDATA[家庭教育]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Sat, 11 Jan 2020 06:53:15 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/Dynamicland-seeing-spaces-and-design-studio.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/Dynamicland-seeing-spaces-and-design-studio.jpg" alt="少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊"><p>从 2017 年 9 月 11 日星期一开始 <a href="https://twitter.com/dynamicland1" rel="noopener">Dynamicland</a> 发布的一系列照片和视频剪辑让我意识到，我可能错过了一个有意思的东西 <strong>—— </strong>并且可能是最具可行性的 <strong>—— 关于 </strong>Bret Victor 在 2014 年分享的「可视空间」概念。在这篇文章里我会尝试把我的一些想法总结的片段，放在一起。如果你已经了解过 Dynamicland，这篇文章对你会有所帮助。本文内容包含以下几个部分：</p><blockquote><a href="#section1"><strong>1. 一个共享的知识空间</strong></a><br><a href="#section2"><strong>2. 最佳的可视化工具是房间</strong></a><br><strong><a href="#section3">3. 文字描述已经过时</a></strong><br><a href="#section4"><strong>4. 关于工具</strong></a><br><a href="#section5"><strong>5. 关于 Dynamicland</strong></a><br><a href="#section6"><strong>6. 也许不是工具的问题</strong></a><br><strong><a href="#section6">7. 设计工坊和参与式设计</a></strong><br><a href="#section8"><strong>8. 也许是为了促进共同理解</strong></a></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-">1. 一个共享的知识空间</h2><p></p><p>在 2013 年，Bret Victor 在<a href="http://worrydream.com/Engelbart/" rel="noopener">《关于道格拉斯·恩格尔巴特的一些话》</a>中批评了关于<a href="http://www.dougengelbart.org/firsts/1968-demo-interactive.html" rel="noopener">《所有演示之母》</a>的一些回顾，在这些回顾中格拉斯·恩格尔巴特的真正意图被忽略了。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://thinkhard.tech/2019/06/13/on-dynamicland/nls1.jpg" class="kg-image" alt="少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊"></figure><!--kg-card-end: image--><p>从当今计算机系统的角度来看 1968 年的演示，容易忽略恩格尔巴特对 NSL（oN-Line System 在线系统） 的真正目的，即从计算机程序员开始，作为人类智慧增强的工具。</p><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="2-">2. 最佳的可视化工具是房间</h2><p></p><p>在 2014 年，Bret Victor 发表了<a href="http://worrydream.com/SeeingSpaces/" rel="noopener">《可视空间》</a>，以对话和漫画的形式阐释了「可视空间」的想法，它就像一个工坊或者创客空间，但目的更多是为了帮助人们相互间增强理解而不仅仅是建造。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://thinkhard.tech/2019/06/13/on-dynamicland/478481867.jpg" class="kg-image" alt="少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊"></figure><!--kg-card-end: image--><p>视频中的对话和漫画里都描绘了一个未来实验室样子，在这个实验室中到处都是巨大的显示屏、摄像头和分析仪器，让创造者们了解他们正在构建机器人的行为。</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="3-">3. 文字描述已经过时</h2><p></p><p>同样在 2014 年，Bret Victor 发表了 <a href="https://vimeo.com/114252897" rel="noopener">《 文字描述已经过时: 通过动态模型阐释和理解》</a>，汇总了一系列的（包括他自己和别人的）例子，使用可探索性解释、可交互文档和软件工具，使系统更加直观和易于理解。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="4-">4. 关于工具</h2><p></p><p>Bret Victor 在 2014 年有一个的谈话分享，我从中理解到：他说到的是工具，当我们都认真地制造出最符合这种工作方式的工具时，一场革命就将到来。</p><p>在我上一个主要的个人项目中，我就是这样做的：我首先开发出工具，让我首先可以全面、深入地理解所做的工作。</p><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="5-dynamicland">5. Dynamicland</h2><p></p><p>几年之后，我的推特时间线被 Dynamicland 的参与者搞得有些混乱。我花了一分钟才明白我所看到的 Dynamicland，但如果你点击这条推特，就可以很好地理解 Dynamicland：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://thinkhard.tech/2019/06/13/on-dynamicland/20190612145820.png" class="kg-image" alt="少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊"></figure><!--kg-card-end: image--><p>这个项目起源于 Bret Victor 所在的 Y Combinator HARC 实验室。Dynamicland 是一个允许通过实体对象和交互方式编程的工坊，整个房间就是程序员的 IDE。</p><p>但是有另一条推特说道：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://thinkhard.tech/2019/06/13/on-dynamicland/20190612150906.png" class="kg-image" alt="少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊"></figure><!--kg-card-end: image--><p>我在这里引用一下这段话：</p><blockquote><em>把程序从屏幕里搬出来放到桌子上，帮助我们互相之间学习</em>。</blockquote><p>那就不仅仅是把房间作为编程的工具。房间还是一个促进互相之间相互理解的编程工具。我之前并没有意识到这一点。</p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="6-">6. 设计工坊和参与式设计</h2><p></p><p>在 2011 年，Will Evans 发表了一系列的文章，介绍了一个最初源于建筑领域的协作设计、工业设计、无关艺术评论的设计工坊。</p><ul><li><a href="https://web.archive.org/web/20111010221154/http://uxmag.com:80/articles/introduction-to-design-studio-methodology" rel="noopener">设计工坊方法简介</a></li><li><a href="https://web.archive.org/web/20111006040634/http://uxmag.com:80/articles/the-design-of-design-studio" rel="noopener">设计工坊的设计</a></li><li><a href="https://web.archive.org/web/20111111004917/http://uxmag.com:80/articles/design-studio-and-agile-ux-process-and-pitfalls" rel="noopener">设计工坊和敏捷用户体验：过程和陷阱</a></li><li><a href="https://www.flickr.com/photos/27764576@N06/sets/72157626509819731/" rel="noopener">自 2011 年 5 月 2 日以来，Will Evans 发布的相簿</a></li></ul><p>在像如 <a href="http://jpattonassociates.com/design-studio-recipe/" rel="noopener">产品发掘</a> 的过程中，设计工坊的方法被用于促进参与式设计。</p><p>在工坊的整个过程中，所有的参与者都在同一个实体空间中工作，他们使用相同的工具，彼此之间共享知识。使用的工具是标记纸和便笺，目的是为了促进彼此之间的理解。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="7-">7. 也许不是工具的问题</h2><p></p><p>Doug Engelbart 希望增强人类的智慧。他的论文<a href="http://www.dougengelbart.org/pubs/augment-3906.html" rel="noopener">《增强人类智慧：概念与框架》</a>没有探究通过其他人来增强智力，而是将 NSL 作为工具来增强，因为它支持广泛的协作。NSL 的参与者可以在相同的 <em>虚拟</em> 空间内同时工作，使用相同的工具和共享知识。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://thinkhard.tech/2019/06/13/on-dynamicland/SeeingSpaces-crop.jpg" class="kg-image" alt="少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊"></figure><!--kg-card-end: image--><p><strong>文字描述已经过时</strong>是针对工具而言的，但是正如 Bret Victor 在<a href="http://worrydream.com/Engelbart/" rel="noopener">《关于道格拉斯·恩格尔巴特的一些话》</a> 中批判到，这是「当今计算机是针对单用户设计」的产物。在现有的条件约束下，这些是 Bret Victor 能展示给我们的唯一东西。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="8-">8. 也许是为了促进共同理解</h2><p></p><p>自从 2010 年以来，我一直在运营着设计工坊，我把上面这张图片和这个引述放到了一起。</p><blockquote><em>把程序从屏幕里搬出来放到桌子上，帮助我们互相之间学习</em>。</blockquote><p>如果可视空间不仅仅是让一个<em>人</em>看到内部构造，看到时间，看到各种可能性的工具呢？</p><p>如果可视空间应该是让每一个人看到这些事物呢？如果你的所有同事，你的所有朋友，你所有相关人员，都处于同一个空间内，能够看到所有的数据和工具，获取共同的感悟呢？</p><p>这不是一个一群人在里面大房间吗？</p><p>如果我们可以看到未来的可视空间，一个小机器人和一两个创作者在一起，想象未来的工作坊是挤满了相关人员，或者全是学生，所有人都希望去理解、评价和贡献，或许你有一个理论来解释工坊的方法和参与式设计是如何扩展到工作的各个方面的。</p><p>设计工坊已经是一个用于描绘和迭代的可视空间：当你呈现和谈论设计时你可以看到内部；你可以看到随着时间的推移每个迭代都建立在前一个迭代之上；你可以看到各种不同的可能性；</p><p>如果可视空间仅仅只是一个工具的话，那么我们只能在原地等待这个世界提供这样的工具。</p><p>但是如果可视空间包含了其他人或者<em>引导性</em>的话，那么我们我们不仅可以从工作空间中实施流程和开发项目，还可以用仪器探索它，把它们从显示器和服务器中拿出来放到桌子上变成有形的艺术品，我们还能够让人们<em>参与</em>进来。</p><p>一个可视空间也可以是非技术层面的，就像一个设计工作室，只要它有 3 种可视化属性。采访和汇报可以可视化内部。可记录和重播的语音和图像、记笔记和分析用来可视化时间。场景规划用来可视化概率。</p><p>可视空间也可以是技术层面的。我们可以用投影仪和笔记本电脑拼凑出针对个别问题的解决方案，就像 Dynamicland 一样创造编程的共享感知。</p><p>Dynamicland 的哪些方面关于编程的，哪些方面是可归纳的具有普适性的？</p><p>从学习将东西从竖直的屏幕转到水平面（共享的工作台）是否已经足够？</p><p>是否满足前面 3 种可视化的属性，或者是否存在其它的核心属性来促进共享感知？</p><p>在你个人的工作中，从何开始做起？</p><p>现在是 2017 年 9 月 12 日。感谢您的关注。</p><!--kg-card-begin: html--></section><!--kg-card-end: html--><h2 id="-">后续</h2><p><em>更新于 2017 年 10 月 1 日</em></p><p>感谢所有的评论和转发。</p><p>同样感谢 Atlantic 文章 <a href="https://www.theatlantic.com/technology/archive/2017/09/saving-the-world-from-code/540393/" rel="noopener">《即将到来的软件天启日》</a>中的引用：</p><blockquote><em>把</em>但看到他的谈话最终产生的效果，Bret Victor 大失所望。他后来说道「很多人似乎误解了我所说的话」。当人们开始邀请他参加会议讨论编程工具时，他就知道人们误会了他的意思。他说道「每个人都认为我对编程环境感兴趣」。事实上他真正感兴趣的事让人们如何看见和理解系统，正如他提到「动态行为的视觉表示」。</blockquote><p>至少我并不孤单！</p><p></p><p>原文：<a href="http://vitor.io/on-dynamicland">Dynamicland, seeing spaces, and design studio</a><br>Author: <a href="http://vitor.io/" rel="dct:publisher">Vitorio Miliano</a><br>Translator: <a href="https://github.com/wangshub">王松</a> <br><a href="https://xiaowai.co">校外课</a> 校对</p><p></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/a-new-definition-of-computational-thinking/">少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的</a><br><a href="https://learn.xiaowai.co/thought-as-a-technology/">少儿编程之编程思想介绍 ——  思想，作为一种技术</a><br><a href="https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/">少儿编程之 Kill Math 项目介绍：让数学不只是符号</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之 Kill Math 项目介绍：让数学不只是符号]]></title><description><![CDATA[Kill Math 是一个综合的工程项目，目标是帮助人们通过更具体的表现以及更符合直觉的形式来探索和解决一些有意义的量化问题。长远的目标则是希望能够建立一套不同于现有的符号数学体系的可广泛使用并自动呈现的可视化数学表示方法。]]></description><link>https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/</link><guid isPermaLink="false">5e18f5f8ad269b0530f28eb3</guid><category><![CDATA[家庭教育]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Fri, 10 Jan 2020 22:52:36 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/kill-math-to-model-and-solve-meaningful-problems-of-quantity.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/kill-math-to-model-and-solve-meaningful-problems-of-quantity.jpg" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"><p>Kill Math 是一个综合的工程项目，目标是帮助人们通过更具体的表现以及更符合直觉的形式来探索和解决一些有意义的量化问题。长远的目标则是希望能够建立一套不同于现有的符号数学体系的可广泛使用并自动呈现的可视化数学表示方法。</p><p><strong>理解并预测量化世界的能力不应该只属于那些能够熟练运用抽象数学符号的人。</strong></p><p>当大多数人谈及数学的时候，脑袋里想的更多是数学的机理而不是思考数学的本质。赋予符号含义、按照神秘的法则的变换和根据变换来解释意义组成了这种所谓的「数学」。整个过程就像是在抓阄一样。</p><p>如此的数学机制发展起来是有原因的：这是在纸和笔的限制下构建的最有效的数学系统。但是很遗憾的是，大多数的人们并不习惯将含义和数学抽象符号联系到一起并且很熟练地使用它们。所以除了算术，数学的力量只是掌握在少数的科学家和工程师的手上（虽然嘴上不说，但是他们中的大多数也是饱受抽象符号的煎熬）。</p><p>现在我们将不再受限于纸和笔。抽象的符号变换不应该再是理解数学的唯一手段了。数学需要有新的形象。</p><h2 id="-">项目</h2><p></p><p>Kill Math 是一个综合的工程项目，目标是帮助人们通过更具体的表现以及更符合直觉的形式来探索和解决一些有意义的量化问题。长远的目标则是希望能够建立一套不同于现有的符号数学体系的可广泛使用并自动呈现的可视化数学表示方法。</p><p>在未来的某一天，在这篇博客内可能会有一篇介绍的文章，让你感动到流泪。但是这篇文章还没写，因为它需要大量的思考和演示示例，在此之前我需要深刻地理解我正在努力做的工作。</p><p>下面是我目前已经完成的部分：</p><ul><li><a href="http://worrydream.com/MediaForThinkingTheUnthinkable" rel="nofollow">通过媒介来思考原本不可思考的</a> 是一系列交互式的用于设计和理解系统的演示，并且整合了下面列出的很多工作。</li><li><a href="http://worrydream.com/ScrubbingCalculator" rel="nofollow">擦写计算器</a> 演示了在不使用符号变量的情况下解决实际的代数问题。不是求解 x 和 y，而是通过交互的方式调整变量。</li><li><a href="http://vimeo.com/23839605/" rel="nofollow">动态系统的互动探索</a> 演示了一个控制微分方程的工具，其中的每一个变量都用图表显示，每个参数都有一个旋钮，可以实时地进行调整。这套工具可以帮助用户了解参数是如何影响整个系统行为的。</li><li><a href="http://worrydream.com/LadderOfAbstraction" rel="nofollow">如何运用抽象</a> 是一篇可交互的博客，使用系统可视化来帮助设计和理解一个系统。</li><li><a href="http://worrydream.com/SimulationAsAPracticalTool/" rel="nofollow">将模拟作为一种实用工具</a> 是这篇文章的早期形态，这个项目主要是为了验证想法。</li><li><strong>下面</strong>是一系列关于这个数学主题的博客漫谈，我希望吸引更多志同道合的人，而不是为了说服那些持怀疑态度的人。（在怀疑论者看到更多的例子之前，他们可能会拒绝被说服。）</li></ul><p>我计划在不同的应用领域和数学领域收集一些有意义的问题，按照这里的哲学针对每一个问题，设计出一种解决方案，将此解决方案与传统解决方案进行比较。我希望在这个过程中出现的一些技术和设计模式可以为将来一般性的的框架提供参考。</p><p>跟往常一样，如果你在用类似的方式思考和工作，我很想看看你想出了什么有意思的点。</p><p>一些附加的想法发表在 Fast Company 杂志的这篇 <a href="http://www.fastcodesign.com/1664508/could-this-ipad-interface-help-kill-math">文章</a> 里。</p><h2 id="--1">杂记 —— 来自不同时间和地点一些想法</h2><p></p><h3 id="--2">语言与内在解释（一）</h3><p>理解和预测数是一种相当强大的力量。目前，这种能力掌握在极少数能够熟练运用数学抽象符号的人手中。</p><p>相比之下，考虑识字能力。从一个不在同一地点或时间的人那里接收思想的能力同样是一种巨大的力量。识字率上升带来的巨大社会影响也是众所周知的。</p><p>语言素养比数学素养更加普及。几乎所有「受过教育」的人都能阅读，大多数人甚至可以在某种程度上写作。但是大多数受过教育的人除了算术之外没有掌握什么有用的数学技能。</p><p>写作和数学都是基于符号表示的系统。但我认为语言更加自然，因为语言的符号直接映射到单词或音素上，这是人类与生俱来的能力。我想，阅读和听别人说话或看手语有着相同的心理机制。</p><p>我不认为每个人在处理数学符号上有着相同的天赋【注1】。相反，我们倾向于阐释隐含的物理含义，这两种隐喻都适用于使用抽象符号的机制（例如，「移动」一个因子到等式的另一边，「消除」两个因子，等等）和符号的语义解释（例如，指数「上升」，或者公式的可忽略项）。在一定程度上，一个人的数学能力和感受这些物理隐喻的符号紧密相连，从而使抽象的更具体。</p><p>我相信这两种精神上的扭曲都是在纸笔技术下的产物。一个人不应该手动地去变换符号和数学推导。因为这些工作最好完全由软件自动完成，或者像玩滑动拼图游戏一样，有一个可交互的带引导的软件。可能更具争议的是，我认为<strong>一个人不必去理解抽象符号的含义</strong>。相反地，动态图、图表、可视化模型和视觉特效就可以阐释事物本质。比如数值之间的关系、指数上升和公式的可忽略项应该被直观地用眼睛看到，而不是单纯地靠脑海想象。</p><h3 id="--3">语言与内在解释（二）</h3><p>人类是为语言而生的 —— 我们是处理符号的机器 —— 所以我不能说「符号的坏话」。我感觉有一些东西需要亲眼所见或者亲身体会才能够真正的理解与融会贯通。并且一些东西是可以很容易地绘制或者制作，对于那些缺少使用晦涩难懂的专业语言的经验的人来说，这很难用符号表述。</p><p>我认为数量和度量就属于这个范畴。例如长度 <code>1m</code> 和 <code>1mm</code> 的符号表示与直接观察这两种长度相比 —— 前者只是一页纸上的数字，而后者可以让你直观地感受。你觉得大多数人能够从符号上，感受和理解 <code>$1B</code> 和 <code>$1T</code> 财政救助款之间的区别吗？事实上它俩之间差了整整 3 个数量级。</p><p>你需要使用本能的直觉去理解一个问题。一个优秀的电路设计师能够<strong>感知</strong>到一个电路是如何运作的。当他们看着电路原理图的时候，就能感受到电压的脉动，就好像看着跷跷板或者水泵运作一般。然而这需要多年的经验来形成这种当你看着符号的时候就能理解符号含义的直觉。</p><p>同样地，人们以前认为去阅读和理解巨大的数字表格是处理数据的基本技能。但是威廉·普莱费尔发明了线形图，突然间所有人都可以<strong>通过平凡的眼睛来直观地感受数据</strong>。</p><p>复数提供了一个很好的例子。在许多科学领域，理解抽象的复数是一项基本技能。然后 David Hestenes 站出来说：「嘿，你知道复数、四元数、泡利矩阵和其他抽象有趣的东西吗？如果你用过克利福德代数的话，所有的这些东西都有几何表示，并且你可以实际地体会和品味到它们。」用你愚笨的嘴去品味复数！事实上没有人相信他，但是我相信。</p><p>我们的工具的目的就是使那些无法企及的抽象事物让普通人也能理解，将它们转换成我们能够感受到的形态。显微镜能够让我们的眼睛看到微小的事物。镊子能够让我们笨拙的手指夹起细微的颗粒。计算器能够让我们愚笨的大脑完成复杂的计算。所以我想有那么一个工具可以让我们普通的大脑看见和体会复杂的情景。</p><h3 id="--4">厨房里的数学</h3><p>在 <a href="https://www.amazon.com/dp/0465010636" rel="nofollow">《儿童的机器》</a> 这本书中，西蒙·佩伯特介绍了「厨房里的数学」。一道菜需要给 3 个人吃，但是厨师只做了 2 份菜，所以她需要将原材料的均分 2/3。一道菜需要 3/4 杯面粉。厨师量出 3/4 杯面粉，在柜台上摊开成一个圈，从圈里拿出1/3块，放回袋子里。这就是 2/3 和 3/4。</p><p>有些人显得很慌张因为他不会使用分数，但是我发现了一个有趣的解决方案。因为分数<strong>是具体的、可见的、有形的和直接的</strong>。<em>传统的方法就是分子分母上下同时约掉 3，但是这没有任何的物理意义</em>。</p><p>我想要创造出一个环境来增强厨房里的数学。</p><h3 id="--5">数学的艺术</h3><p>这个项目没有处于自身观点考虑来攻击应用数学。我不介意数学娱乐化或者艺术化。我一直出于个人兴趣在学习数学；我始终在以数学为乐。我对 <a href="http://worrydream.com/refs/Lockhart-MathematiciansLament.pdf" rel="nofollow">洛克哈特的悲歌</a> 产生了强烈的共鸣，并且我很喜欢 <a href="http://vihart.com/" rel="nofollow">Vi Hart</a> 和 <a href="http://www.cadaeic.net/" rel="nofollow">Mike Keith</a> 等人所做的工作。在模式和规则中隐藏着美感；但是发现这种美是有挑战的。我可能会因为盲目的传统和缺乏想象力的原因，迫使我使用古老的传统方式来完成这样的艺术形式。</p><p>以武术为例，这是另一种根据实际需要而发展出来的艺术形式。就像数学一样，人们练习武术可能是以为了身体或精神上的锻炼，为了挑战和掌握一项技能，为了它的优雅和美丽，或者作为一种社交活动为目的。与数学不同的是，我们意识到武术的精神已经发生了改变，因为随着技术的进步产生了更多教训人的方式。</p><p>（与数学不同的是，我们不会强迫地球上的每一个孩子上 12 年的课，那些在艺术方面不擅长的孩子也不会感到羞耻和低人一等。）</p><h3 id="--6">可能令人尴尬的个人往事</h3><p>当我读高中的时候，我每周会去几次当地的大学学习微分方程。有一天，老师解完一个二阶方程式：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://github.com/CodeLabClub/codelab-mindstorms/raw/master/%E8%AF%91%E6%96%87/image/2nd_order_eqution.png" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"></figure><!--kg-card-end: image--><p>他很随意地提出了一个问题：「你为什么认为这个解有两个任意常数？」</p><p>对这个问题我感到很疑惑，我认为答案本该如此呀。我能看出解有两个自由度，我能理解到这个程度，但是我从来没想到还有更深层次的原因。</p><p>老师然后说道，「因为你积分了两次」。然后他就开始继续讲其他的东西了，但是我小脑袋里已经满满都是问号。</p><p>我从来没有想过通过积分来求解微分方程。因为它看起来并不像积分。我知道积分是什么样的 —— 积分就是把东西都累加起来，就像往水槽里加水一样。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://github.com/CodeLabClub/codelab-mindstorms/raw/master/%E8%AF%91%E6%96%87/image/integral_demonstration.gif" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"></figure><!--kg-card-end: image--><p>并且我知道方程直观感受起来是什么样的 —— 它就像天平，慢慢地摆动越来越小，最后停了下来。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://github.com/CodeLabClub/codelab-mindstorms/raw/master/%E8%AF%91%E6%96%87/image/equation_demonstration.gif" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"></figure><!--kg-card-end: image--><p>后来我上了大学，从学校毕业后，开始了工程师的职业生涯，我没有被要求解上百上千个的微分方程。我理解了微分和积分在形式上的关联，但是我不知道我是否可以直觉感受到它。</p><p>后来有一天，我无意中读到斯托加茨的书 <a href="http://www.amazon.com/dp/0738204536" rel="nofollow">《Nonlinear Dynamics and Chaos》</a>。在书中他问道，如何求解下列的微分方程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://github.com/CodeLabClub/codelab-mindstorms/raw/master/%E8%AF%91%E6%96%87/image/differential_equation.png" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"></figure><!--kg-card-end: image--><p>随后他说，你不要这么做。它是非线性的。我们单单变换公式的方法不管用了。你需要把二阶的方程分解成两个一阶微分的方程式。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://github.com/CodeLabClub/codelab-mindstorms/raw/master/%E8%AF%91%E6%96%87/image/first_order_equations.png" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"></figure><!--kg-card-end: image--><p>画出相位空间的轨迹图，然后你就能直观地感受到整个系统的运作方式。</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://github.com/CodeLabClub/codelab-mindstorms/raw/master/%E8%AF%91%E6%96%87/image/phase_trajectory.gif" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"></figure><!--kg-card-end: image--><p>在轨迹的每一点上，鼠标在水平和垂直方向都被微分推进了一点点，整合起来就像 LOGO 语言的小海龟在相位空间运动一样。</p><p>为什么我整个职业生涯都在整合一个我们看不见的东西呢？对我而言，<strong>如果不在相位空间理解微分方程就像是没听过一首歌却要做音乐鉴赏一样</strong>。</p><p>回想多年前我的老师提出来的问题：「为什么解是两个任意常数？」答案就很显然了：你必须选择轨迹得起始点，两个常量就像是小海龟做积分时的坐标 x 和 y 一样。我很多年以前就解决了「初值问题」，我却从来没有切身体会过这个初值。</p><h3 id="--7">教育和命令行</h3><p>当这些笔记第一次发表的时候，我收到了很多读者的反馈。但是大多数的反馈都是以为为我想要变革 <em>数学教育</em>。有一个部分我简短切题地说道这个项目不是关于教育的，其他地方我没有提到过教育。</p><p>我发现这很令人费解。如果我提出一种新的驾驶汽车的方式（比如，我说方向盘这东西已经过时了，应该被替换为 Wii 游戏手柄），应该不会有人认为这是谈论 <em>汽车司机教育</em> 吧。甚至没有人会提到教育二字。他们可能会思考这是否是一种开车的好方法。</p><p>但是当说道一种新的理解数学的方式时，人们总是开始联想到教室和课程。</p><p>有一点尤其奇怪，当今解决实际生活中的数学问题总好的工具竟然是是电子表格。如果我需要一个新的形式的电子表格，同样，没有人会说这是关于教育的。</p><p>（这种对教育领域的重新定位也发生在对一个动态系统的交互探索的 <a href="http://vimeo.com/23839605/">演示</a> 中。肯定我本可以做得更好的：「这是一个原型工具，工程师和科学家可以对他们正在进行工程和科学系统进行建模和探索」。但是我认为这更加贴切这个工具的本意而不是仅仅「可视化 Lotka-Volterra 方程」。大多数的读者都想要像 <a href="http://demonstrations.wolfram.com/" rel="nofollow">Wolfram 那样的演示</a>，对某个具体的数学问题进行可视化。这种感觉就像，我展示了一个全新的漂亮的不粘锅，后来每个人都上来问我要一盘美味的炒蛋。）</p><p>如果让我猜测为什么「数学改革」被误解为「数学教育改革」？我推断大多数人可能只在学校里和数学打交道。就像校园物理或者校园化学一样，数学被视为一门课来教授，而不是强调它是一种工具。人们在算术之外并没有在实际生活中使用数学，就好像不使用平方反比定律或者周期表一样。</p><p>这就是这个项目出发的前提 —— 大多数人们没有使用数学。但是如果数学被以一种更好的方式教学的话，人们可能会把数学用得更好！我（包括整个项目）的立场是：<strong>不</strong>。教学目前你想要的数学抽象符号和方法 —— 他们将仍然没有作用。使用糟糕的用户界面的教学方式仍然是没有用 —— 因为没有展示出用户需要看到的东西，不符合用户大脑里所想的内容，没有呈现出用户可以采取的操作。</p><p>对于大多数人来说 UNIX 命令行仍然是没有用的。有很多方法可以让普通大众使用计算机的强大之处，而不必教会每个人都去使用命令行。有一个很好的方法就是 —— 设计更好的用户界面，更多易访问的应用程序，更高级的抽象。直接形象地和真实地表现事物。</p><p>所以<strong>当今的数学就像是命令行</strong>，我们需要更好的用户界面。</p><h2 id="--8">来自其他人的一些观点</h2><p></p><p>奥利弗·斯蒂尔: 邮件</p><blockquote>所有的不具体的抽象事物都是很难去想象的......我认为数学家是那些可以成功地弄清楚如何具体地思考抽象事物的人，所以抽象就不再抽象。我相信数学思维包括学习具体地思考抽象事物的能力，通常使用多种表示法如何将更多的事情视为「事情」的一部分。所以与其说避免抽象，更重要的是接纳抽象并且将抽象具体化...具体化抽象事物的一种方法是在旁边放一个已经具体化的实例。<strong><strong><strong><strong><br></strong></strong></strong></strong></blockquote><p>大卫·赫斯顿斯和盖瑞特·索布奇克: <a href="http://www.amazon.com/dp/9027725616" rel="nofollow">《克利福德代数到几何微积分：统一的数学语言》</a></p><blockquote>克莱恩对数学结构和历史的开创性研究揭示了数学发展和分支的两个主要过程...一种强调代数结构，另一种强调几何解释。克莱恩的分析表明，在数学的历史发展过程中，一个过程交替地支配着另一个过程。但这两个过程不应相互排斥。毫无疑问事实上每一个过程都是建立在人类思维的两大能力之一上的：<strong>语言能力和空间感知能力</strong>。从心理学的角度来看，代数与几何的融合是非常基本的所以我们可以说：<strong>没有代数的几何是愚蠢的！没有几何的代数是盲目的！</strong></blockquote><p>大卫·赫斯顿斯: <a href="http://geocalc.clas.asu.edu/pdf/OerstedMedalLecture.pdf" rel="nofollow">《改变物理的数学语言》</a></p><blockquote>在物理课程中，数学被认为是理所当然的 —— 这是一成不变的真理。数学对我们的物理世界的深刻影响却从未被认真分析过。今天使用的数学工具是在过去被发明出来解决旧的问题，但是很有可能不太适合今天新的问题...<br><br>我们不必深入研究物理学的历史来证明数学对物理的深远影响。因为有两个著名的例子足以说明这一点：解析几何和微积分的发明是牛顿创立经典力学的基础，张量分析的发明对爱因斯坦创立广义相对论至关重要...<br><br>我想通过引用这两个例子来说明的一点是，如果没有基本的数学概念，这两个物理理论实际上是不可想象的。我们使用的数学建模工具曾经扩展但也限制了我们认知世界的能力。数学的局限性在于，那些为经典力学和解析几何学提供的数学支撑的理论方法已经不适用于广义的相对理论了。当今在物理学使用的数学工具可能在概念上就存在局限性。<br></blockquote><p>艾伦·凯：<a href="http://www.archive.org/details/AlanKeyD1987" rel="nofollow">《用图像制造符号》</a></p><blockquote>法国著名数学家雅克·阿达玛在他晚年时决定投票选出他的 99 个同伴，作为地球上 100 位最伟大的数学家和物理学家，雅克问他们：「你们的工作怎么样？」。他们都是私交，所以纷纷回信。只有一百人中的几个人声称他们使用数学符号。这着实令人惊讶。他们中的大多数人以意象或比喻的方式来理解数学。有 30% 的人包括爱因斯坦都是这样。爱因斯坦说道，「我对数学有肢体一般的感受。」爱因斯坦就像感知自己的手臂和手指一样去感受抽象的空间。<br><br>[做某事 &gt; 图像 &gt; 符号]中令人难过的部分就是，美国的所有孩子都在以符号的方式去学习数学和物理。但没有一个有创造性的数学家或者物理学家在以这种方式学习...他们使用符号的方式交流，但是实际研究的时候就不是这样。太多的教育是建立在这种规则之上了，仅仅是因为我们以谈话的方式来交流，但是这并不意味着只靠说和听去教学。<br></blockquote><p>威廉·瑟斯顿：<a href="http://arxiv.org/pdf/math/9404236v1" rel="nofollow">《论数学的证明和发展》</a></p><blockquote><br>当有一个重要的理论被证明的时候，通常该解法可以很快地在相关子领域内传播。这个证明如果是通过沟通交流的话可以在一小时之内就被该子领域的其他研究人员理解。但是如果写成 15 或 20 多页的论文，人们可能需要好几个小时甚至好几天才能够理解掌握。<br><br>为什么非正式的讨论和直接磕论文之间有这么大的区别呢？当一对一沟通的时候，人们除了数学语言还可以用很多其他的方式来交流。他们可以用手势、画图表、用肢体语言发出声响这些方式交流。沟通在这里就是双向的，人们可以专注于他们最关心的点上。以面对面的沟通方式，就可以更好地传达正在发生的事情，不仅在逻辑和语言方面，而且在其他心理层面。<br><br>在会谈中，人们变得更加拘谨和正式。数学的受众通常不善于提出大多数心中所关注的问题，而演讲汇报的人通常准备了一个不切实际的大纲，即使他们被问到问题，也会回避相关的回答。<br><br>在论文中，人们会仍然会比较正式。写作者将他们的想法翻译成符号和逻辑表达，读者努力地要将它们翻译回来。</blockquote><p>理查德·汉明：<a href="http://www.lecb.ncifcrf.gov/~toms/Hamming.unreasonable.html" rel="nofollow">《数学的不合理有效性》</a></p><blockquote>有必要强调一点，数学的前提假设不是摩西从西奈山上取下来的石板。一开始我们头脑中有了一个模糊的概念，然后我们各种各样的假设集合，最终慢慢地收敛成一个特定的集合。在严格的假设方法中，原始模糊的的概念会被后来假设所定义的内容代替。这就使得很难有概念上的发展，进而减缓了数学的发展。并不是说假设的方法是错误的，只是应该清楚认识到它的任意性，注意当结论慢慢变得清晰时我们应该准备改变假设。<br></blockquote><p>理查德·汉明：<a href="http://www.amazon.com/dp/B000P2XFPA" rel="nofollow">《科学与工程的艺术》</a></p><blockquote>当数字滤波器首次出现时，它们仅仅被视为经典模拟滤波器的一个变种；人们不认为它本质上有什么新意或者不同。这就和早期人们对计算机的认知错误一样。多次有人跟我说，计算机只是一个大型的计算的台式计算器，后来我都厌倦了这种说法。他们说，「任何机器能做的事，人工也能办到」。但是这种观点的人忽视了机器与人工相比，在速度、精度、可靠性和低成本上具有巨大的优势。一般来说，一个数量级的变化（10 倍）将会产生本质上的影响，更不用说计算机比人工计算快了许多许多倍了。那些声称没有本质区别的人从未对计算机的发展做出过任何重大贡献...<br><br>这是一个常见的、无休止的错误；人们总是想认为新事物就要像过去的东西一样 —— 他们习惯于处在大脑的舒适圈 —— 因此他们抗拒对眼下正在发生的新领域新事物做出任何大的贡献。<br></blockquote><p>史蒂文·斯托加茨: <a href="http://www.amazon.com/dp/0738204536" rel="nofollow">《非线性动力学与混沌理论》</a></p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-10.png" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"></figure><!--kg-card-end: image--><p></p><p>【注1】: 西蒙·佩伯特可能不会同意这样的观点，他认为对于在 「Mathland」 （一个沉浸式的数学互动环境）中长大的孩子看来，使用数学就像是在法国说法语一样，可以熟练地使用抽象的数学符号。我可能反驳说，在南极长大的孩子可能会更抗冻，或许人们并不需要这种抗冻能力。</p><p></p><p>原文：<a href="http://worrydream.com/#!/KillMath">Kill Math</a><br>Author: <a href="http://worrydream.com/">Bret Victor</a><br>Translator: <a href="https://github.com/wangshub">王松</a></p><p></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/a-new-definition-of-computational-thinking/">少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的</a><br><a href="https://learn.xiaowai.co/thought-as-a-technology/">少儿编程之编程思想介绍 ——  思想，作为一种技术</a><br><a href="https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/">少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之 Kill Math 项目介绍：让数学不只是符号"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[家庭教育方法：关于儿童如何学习的背景思考]]></title><description><![CDATA[互联网如今开始把曾经保存于图书馆内的知识理念带入万千家庭，但绝大多数人仍需要足够的洞察与敏感，来驱使自己去努力探索、学习这些理念。]]></description><link>https://learn.xiaowai.co/background-on-how-children-learn/</link><guid isPermaLink="false">5e18eecead269b0530f28e34</guid><category><![CDATA[家庭教育]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Fri, 10 Jan 2020 22:03:58 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/Background-On-How-Children-Learn.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/Background-On-How-Children-Learn.jpg" alt="家庭教育方法：关于儿童如何学习的背景思考"><p>绝大多数传统文化都没有设立学校，也无此必要。儿童天生就是通过观察模仿成人的活动，来认识他们周围的世界。成为传统文化的一员意味着什么，如何在其中生存，这些命题相关的核心内容都是向儿童敞开的，以模仿游戏进行学习足矣。</p><p>而在如今高度发展的现代文化中，多数重要的成人活动或复杂难解，或脱离日常家庭存在，John Dewey（约翰·杜威）指出儿童已很难再用相同的方式学习。但若将儿童安置在 20 世纪的现代环境中，同时提供蕴含本世纪先进理念的玩具，在 Maria Montessori（玛丽亚·蒙台梭利）看来，儿童以沉浸其中及玩游戏的方式认识世界的天性，仍适用于 20 世纪的学习。早期教育的主要任务应是将儿童自己捡拾的常识塑造成 「非常识」，众多现代先进理念，特别是科学领域内的，都以这些「非常识」为根基，这是 Montessori 的另一洞见。</p><p>当前儿童教育的主要动机都是职业导向的，就是为工作市场做足准备。但更重要的需求是培养选民，使他们备足背景知识、思维能力、独立观点，加入到「大对话」中，充分参与民主建设，使之既利用投票选择政治代表，更利用投票否决他们（这可能也是民主共和的核心所在）。</p><p>纵世界瞬息万变，职业导向的教育赞成在相当早期就进行专科化。政治教育则支持更广博的、涵纳历史与现代理念的准备。显然，学点科学对于后者犹为重要，即使学生日后的职业志向与科学并无交集。</p><p>职业训练与公民培养之上，教育还有更大的考量，关乎帮助儿童实现乃至拓展人类之可能。鉴于此，我们不仅赞成学习阅读与书写，还推崇擅于学习，能够阅读名著典籍，思考并书写表达理念。这也触及到教育之所以存在的更古老的缘由：将精奥的理念深种于经验的土壤，深刻的人自此而生；不只是深刻，也是各方面都不会被轻易糊弄的人。</p><p>《仲夏夜之梦》中，William Shakespeare（威廉·莎士比亚）令精灵 Puck（帕克）叹道，「人类是多么愚蠢！」在此，他意不在表达现代语境中的笨蛋傻瓜之意，而是指所有人在任何事情上都太容易被愚弄。人类学家告诉我们，现代人种已存在约 4 万年（也可能是8万年之久）。但是「真科学」，即使已对我们身处的世界做出大量惊奇、重大的发现，也就数百年历史。关于绝大多数事物，我们已愚弄自己上万年。</p><p>我们不仅容易还「喜欢」被愚弄，这也是为什么如今剧院和其他形式的虚构艺术可以行道天下。此类愚弄，形式内容异常丰富，其中一些颇具价值。因此不该将儿童塑造得不假思索地抵制一切试图愚弄他们的行为；重要的是培养他们敏锐的洞察力，使儿童自己能够明智地决定何时接受愚弄。比如，在剧院这个黑暗的场所内，伴着悦耳的音乐，众人在台下观赏台上的才子佳人，聆听他们动人的言语，假装台上那布景并非纸板，而他们自己真得置身在「某时某地」。小心，这也是在描述政治集会！此时，关于自己想要追随什么，观众最好有完全不同的立场。对于人类意识，「剧院」是一个好的隐喻。世界不在我们头脑中，在其中的只是类似语言的对世界的各种表征。我们相信的东西远多于现实，即语言「大过宇宙」。比如说，我们可以用立方反比律描述万有引力，但对宇宙进行的所有严谨探测都只支持平方反比律。是以虚构艺术可行。</p><p>更棘手的是，甚至我们在描述「现实」时，最多也只能达到类似绘制一幅精细地图的程度，部分原因是我们绘制地图时所用的素材终究不是现实本身。我们可以用语言描述语言，数学就是具备这一功能的艺术形式，所以欧几里德几何完全适用于描述刚体间的空间关系。但我们知道，只要宇宙尚存质能，空间就绝非扁平，欧氏几何就永远只是「近似」准确描述真实世界的地图。</p><p>Herbert Marshall McLuhan （赫伯特·马歇尔·麦克卢汉）另有一个精妙的隐喻，「我不知道谁发现了水，但绝不是鱼！」他的意思是，我们正是那鱼，水则是我们的信念，我们浸润其中以至于对其视而不见。在所谓的「理性」之时，我们的逻辑都只是狭隘地附着于隐形的背景理念上。自古以来，人类无数次试图靠「理性」去解释我们居住的世界，但直到最近数百年，凭借技术的发展运用，背景理念才终究现身显形进而被回避。几乎一下子，我们发现自己生活在一个新的世界里，区别于绝大多数曾经的「理性」论断。随之而来的还有新发现的强大「把手」，使我们得以控制能量，制造更好的物品，应对致命的疾病，合成需要的化合物。</p><p>作为新的艺术形式，「现代科学」诞生，并贡献出理解世界的突破性理念。21 世纪伊始，科学及其累积的知识已极为广博，专业科学家也只习得已知世界的极小一部分。但所有科学家都会学习科学深刻有力的内涵理念：关于怎样避免被糊弄，如何在一定置信水平上做出发现，如何建设性的批判理论观点等。科学领域的这些「元技能」，无论出于以下何种原因，职业、公民责任、健康与营养、艺术、以及在21世纪成为充分自我实现的人，对全体人类都是重要的。</p><p>如 Frank Smith（弗兰克·史密斯）所言，重要理念被讨论、且书写系统存在的地方，名著典籍自此而生。历史上，理念与书写系统常共同演化。例如，书写系统的出现，使得讨论以一种新的方式进行，而口语交流形式无论在「长度或深度」上都无法与之媲美。进一步，相比手写稿，印刷出版的出现促成了更为复杂的讨论与阐述（因为毛校一旦完成，文稿就会被逐字精准印刷）。同时，印刷出版还极大地拓展了理念的传播范围，使得他们有更多可能触达到某些读者，而这些读者或许会进一步发展该理念（或证明为什么这些观点是站不住脚的）。</p><p>「现代科学」，以及这种观察、探究与讨论世界的新方式，肇始于 17 世纪。期间，印刷出版对其存在与传播起了决定性作用。新的重要理念与书写系统兼具，名著典籍果然应运而生。18 世纪，阅读牛顿的《自然哲学的数学原理》（关于重力及太阳系运行原理），与阅读 Shakespeare（莎士比亚）、Henry Fielding（亨利·菲尔丁）、Samuel Johnson（塞缪尔·约翰逊）、Thomas Paine（托马斯·潘恩）的作品同等重要。</p><p>但是，正如 C.P. Snow（查尔斯·珀西·斯诺）在其「两种文化」演讲中所指出的，18 世纪的阅读传统如今已退化成两种文化的严重对立，即传统「文科典籍」（包括虚构文学、散文、非科学类的经典与现代思想等），与科学领域新理念新进程的割裂，这种局面甚至（且特别）存在于学术知识界。Snow还注意到另一种现象：科学家同时熟稔文科著作的可能性，要远远大于文科学者精通科学的可能性。</p><p>在当今美国学校内，家长和校董事会会开除任何缺乏文化教养的老师（即使他们并没有费尽心思去搜寻这些不合格教师）；但对于另一种情况，即教导孩子的老师完全不懂数学与科学，他们则是安之若素的。这种区别对待部分是因为，美国的家长和校董事会成员几乎都是美国教育下长成的公民，读书时，在数学、科学领域他们自己也没有受到充分的教育引导，没有形成牢固的背景基础。教师们同样如此，绝大多数也都出自这种问题教育，所以他们根本意识不到缺失了什么。一代又一代，循环往复。</p><p>关于强大且并不昂贵的个人计算机，其最重要的一点就是，他们提供了一种新的阅读与写作媒介，区别于任一本书，这种新的媒介使得重要理念可以被讨论、操作实践与习得。</p><p>在美国数以千计的免费图书馆内，都有关于数学、科学学习的书籍。但如果你尚未意识到利用图书馆的妙处，也丝毫没有察觉自己缺失什么，那除非你非常特别，能自己找到一种方式走进这些深刻的理念。互联网如今开始把曾经保存于图书馆内的知识理念带入万千家庭，但绝大多数人仍需要足够的洞察与敏感，来驱使自己去努力探索、学习这些理念。</p><p>以上就是我们的工作以及 Squeak 基于的全部背景。我们的兴趣在于帮助孩子学习思考，甚至比绝大多数成年人都思考地更深、更好。我们将 Squeak 作为一种媒介，以电子纸的形式，容纳更新颖多样的表征理念的方式。我们创作了一些范例并已网上发布，供孩子和大人「阅读」与把玩。读者也可以转为创作者，因为「创作永远在线」。其实，「与作者共同创作」我们称之为的「动态论文」，是学习这种新的表征与思考方式的最好途径。如果想立刻尝试其中一个，请看「Methinks It Is A Weasel」，这是与进化论有关的一篇「动态论文」。点击链接，移步至「家庭项目」栏，选择任一「动态论文」走进这种新创作。</p><p></p><p>原文：<a href="http://www.squeakland.org/resources/articles/article.jsp?id=1003">Background On How Children Learn</a><br>Author: Alan Kay<br>Translator: 杨柳青</p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>了解更多少儿编程相关信息，请参考：<br><a href="https://learn.xiaowai.co/the-reason-that-kids-need-to-learn-programming/">为什么要学习少儿编程，学习少儿编程有用吗，不做程序员有必要学习编程吗？</a><br><a href="https://learn.xiaowai.co/parents-need-to-know-what-programming-is-and-how-to-learn/">家长必读：为什么要学习少儿编程，编程需要学习哪些内容，怎样学习编程</a><br><a href="https://learn.xiaowai.co/is-programming-language-that-important-for-kids-learning/">学习少儿编程选择什么编程语言重要吗？学习少儿编程的目的是什么？孩子有必要学习少儿编程吗？</a><br><a href="https://learn.xiaowai.co/how-to-select-programming-language-and-course-for-kids-learning/">家长如何帮助孩子选择少儿编程学习的编程语言或编程工具，如何选择少儿编程课程</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="家庭教育方法：关于儿童如何学习的背景思考"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之编程思想介绍 ——  思想，作为一种技术]]></title><description><![CDATA[技术上有许多有价值的目标。人工智能和延长生命之类的事情是坚实、具体的目标。相比之下，认知的新元素更加难以想象，而且有些含糊不清。根据定义，它们是尚未发明的思维方式。我们不能先验地说出认知的新元素会是什么，或者它们会带来什么。但我们能做的就是提出好问题，并大胆探索。]]></description><link>https://learn.xiaowai.co/thought-as-a-technology/</link><guid isPermaLink="false">5e18db22ad269b0530f28d15</guid><category><![CDATA[家庭教育]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Fri, 10 Jan 2020 21:08:48 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/thought-as-a-technology.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/thought-as-a-technology.jpg" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"><p>当你第一次面对计算机界面时，是否感到敬畏和喜悦？这个奇怪的界面，是否带给你一种接触外星文明的感觉？</p><p>有些人在玩富有想象力的视频游戏时也会有类似感受，诸如 Monument Valley，Braid、Portal 这类游戏。对于另一些人来说，当他们第一次理解如何使用电子表格来为公司、行业甚至整个国家构建模型时，也会生发出类似感受。还有一些人在初次使用支持强大想法的编程语言（例如 Haskell 或 Lisp）时，也有这种敬畏和喜悦的感受。</p><p>对我而言，第一次经历这种体验发生在使用 MacPaint 程序的时候。</p><p>11 岁之前，我只用过命令行界面与计算机沟通，例如在 Apple II、IBM PC 和 Commodore 64 这些电脑里：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>做图形相关的工作很复杂。在 Commodore 64 计算机上，我有时会制作游戏，使用方格纸绘制游戏角色中的像素，然后将它们转换为数值以便输入到计算机中。这是个艰苦的精细活儿。</p><p>有一天，父母带我去了一家 Apple 经销店。在那儿，我们见到一台叫做 Macintosh 的计算机，它运行着一个叫做 MacPaint 的程序。使用一种叫鼠标的新玩意儿，我可以直接在虚拟画布上绘制草图。我记得当我点击一个区域的时候内心充满了敬畏感，MacPaint 填满了该区域！它知道边界在哪里！ MacPaint 还提供了 FatBits，一种放大图案的方法，于是我可以逐像素地进行编辑。最神奇的是：如果我犯了一个错误，我可以通过单击鼠标按钮来撤消错误，将画布恢复到之前的状态。</p><p>MacPaint 将我与我的绘图直接联系在一起，就像使用铅笔或颜料。但它也提供了新的工具，可以轻松完成以前难以做到的事情。今天，这些工具已经为大家所熟悉，听起来可能还挺平庸。但对我来说，他们是我顿悟的时刻，改变了绘图对于我的含义。</p><p>当然，大多数人可能从未有过类似体验。但我相信很多人都曾对某些界面感到敬畏和欣喜。</p><p>在极致情况下，使用这样的界面就是进入到一个包含对象和行为的新世界，它与你之前看到的世界不同。起初新界面里的元素看起来很奇怪。但随着它们变得熟悉，你内化了这个世界里的元素。最终，你变得熟练，发现了强大而惊人的习语以及界面中隐藏的新模式。你开始用界面来思考，学习以前看起来很奇怪的思维模式，但它们逐渐成为你的第二天性。界面开始消失，成为你意识的一部分。在某种程度上，你已经发生了转变。</p><h2 id="-">是什么让界面拥有转变能力？</h2><p></p><p>大多数界面不怎么引人注目。但那些极致例子的存在提出了一个问题：是什么样的特质使界面拥有转变的能力？</p><p>要回答这个问题，有必要考虑下另一种转变技术–语言。孩子们在短短几年内就获得了语言能力。值得注意的是关注这样一个过程：一个孩子一开始听到一个不熟悉的单词，接着 Ta 大声说出这个单词，之后逐渐以更复杂的方式使用这个单词。我们对此熟视无睹。但令人震惊的是，孩子们可以将外部现象内化，并将其用作自己思想的载体。</p><p>语言是认知技术的一个例子：它是一种由人类设计的、存在于外部的人工制品，它可以内化，并用作认知的基础介质。语言这项技术由许多单独的部分组成 —— 单词和短语， 它们是认知的基本元素。这些认知元素是我们可以用来思考的事物。</p><p>语言不是我们用于内化的唯一认知技术。</p><p>让我们考虑一下视觉思维。想象你的大脑是一个光栅显示器，能够构思出任何图像，听起来很不错，但这是错误的。事实上，我们的视觉思维基于我们此前已经内化的视觉认知技术。</p><p>例如，世界上最知名的艺术教师之一 <a href="https://en.wikipedia.org/wiki/Betty_Edwards">贝蒂·爱德华兹</a> 解释说，大多数非艺术家成年人的视觉思维仅限于简单的「符号系统」，这限制了他们所看到的东西以及他们可以在视觉上构思的内容：</p><blockquote>成年后才开始学习艺术的学生通常不会真正看到他们眼前的东西 – 他们不会以绘画所需的方式来感知。 将感知到的眼前事物转化为文字和符号的能力，主要基于童年时期发展的符号系统以及他们对被感知对象的了解。<strong><strong><strong><strong><br></strong></strong></strong></strong></blockquote><p>需要非凡的想象力来构思新的视觉意义形式（例如新的视觉认知技术）。许多著名的艺术家和视觉探索者，他们之所以著名，部分原因在于他们发现了新的视觉意义形式。当其他人接触到这些新的视觉形式时，他们也可以内化这些新的认知技术，从而扩大他们自己的视觉思维范围。</p><p>例如，毕加索等立体主义艺术家发展了在一幅画中使用多个视点的技巧。一旦你学会了立体派艺术，它可以让你更清楚地了解所展示的东西的结构：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-1.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>另一个例子是 <a href="https://en.wikipedia.org/wiki/Harold_Eugene_Edgerton">Doc Edgerton</a> 的工作，他是高速摄影的先驱，他的照片揭示了世界上以前未被预料到的结构。如果你研究这样的照片，你就会对日常现象建立起新的心理模型，如此一来你的视觉思维范围便扩大了：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-2.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>另一类例子来自许多制图师，他们开发了描绘地图的新方法。例如，考虑一下由 Harry Beck 绘制的 1933 年伦敦地铁地图。在 20 世纪 30 年代早期，Beck 注意到官方地铁地图过于复杂，读者无法理解。像大多数地图上常用的那样，他放弃了确切的地理保真度来简化地图。他集中精力展示了车站网络的拓扑结构：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-3.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>诸如此类的图像既不自然，也不显而易见。没有毕加索，Edgerton，Beck 和许许多多其他先驱者开发出来的认知技术，没有人会拥有这些视觉思维。当然，只有一小部分人真正内化了这些视觉思维方式。但一旦技术被发明，我们大多数人都可以学习它们，并将其用于思考。</p><p>让我们回到计算机界面。</p><p>与语言、地图类似，计算机界面也是一种认知技术。要掌握它，需要内化界面中的对象和操作; 使它们成为认知元素。一个充满想象力的界面设计师可以发明全新的认知元素：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-4.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>我相信这就是 MacPaint 令 11 岁的我大为兴奋的原因：它扩大了我的思考范围。在此，它扩大了我所能创造的视觉图像的范围。一般而言，界面拥有转变能力的原因在于它引入了新的认知元素，从而实现新的思维模式。具体而言，这样的界面使得从前难以获得的深刻洞见变得容易获得。甚至，它将使你的探索（或其他形式的创造力）超越所有前人。 艾伦凯曾问道「计算机承载创意的能力究竟如何？」同样地，我们可能会问：「计算机的承载发现的能力究竟如何？」</p><h2 id="--1">我们如何发明新的认知元素？</h2><p></p><p>大多数界面是标准元素的重新组合，并没有引入任何新的认知元素。是否有启发式的方法可以用来发明新的认知元素？</p><p>作为深入了解这个问题的一种方式，我将首先展示一个原型界面。它是探索一维运动的原型，即粒子在线上的运动。为了避免让读者失望，我得声明这个原型肯定不像 MacPaint 那样具有变革性！它很粗糙，是一个想法的最初草图。但是它说明了两种有用的启发式方法，可以帮助我们发明新的认知元素。</p><p></p><p></p><h2 id="-1-">启发式 1：将界面中隐藏的表征具像化</h2><p></p><p>让我们先来看看数学家 William Thurston 提及的以下 <a href="http://mathoverflow.net/questions/38639/thinking-and-explaining">问题</a> ：</p><blockquote>你如何看待你所理解的数学与你说出的数学之间的巨大差别？你口中所说是你心中所想吗？<br>我觉得数学家们经常有未说出的想法在指导他们的工作，这些想法可能很难解释，尽管他们可能已经尽力了。<br>有一次我向 Andy Gleason 提到这个现象; 他立马说，当他教授代数课程时，如果他正在讨论一个群的循环子群，他心中的图像是群元重组成了一种由循环群组织而成的新形式。<br>他说我们永远不会对学生这样说。<br>他的话在我脑海里形成了一幅生动的画面，因为它符合我对群的理解。我想起了我学生时代的长期思想斗争，试图将意义附加到「群」上，而不仅仅是我在教科书中读到的符号、词汇、定义、定理和论据这堆东西。</blockquote><p>我们可以用 Thurston 的话说，数学家通常不使用书中的常规表征来思考数学对象。相反，他们的思考在很大程度上依赖于我们称之为隐藏表征的东西，例如 Thurston 前头提到与群论相关的心理图像。这种隐藏表征比常规表征更容易让他们进行推理，并偶尔为他们提供神奇的洞察力。</p><p>这种隐藏表征在许多领域被使用。例如，电气工程师 Gerald Sussman <a href="https://www.infoq.com/presentations/We-Really-Dont-Know-How-To-Compute">考察</a> 了以下关于电路的理解：</p><blockquote>我在 MIT 的电路理论课程中教授我的第一个电气工程课程……我发现我们教给学生的东西根本不是学生实际上应该学习的东西。即，专家们对电路时所做的事情……与我们告诉学生们写下来的东西 - 节点方程式完全不同……然后你要以某种方式将这些方程式揉在一起并解决它们，找出发生了什么。你知道，这不是一个真正优秀的工程师所做的。好的工程师做的是 […]<br></blockquote><p></p><p>在这一点上，Sussman 进行了长期的非正式分析。这是令人着迷的，不像我在电路课堂中听过的任何东西。我不会在这里引用 Sussman 的分析 ，这些分析需要他的声音和肢体语言，但是你可以在他 <a href="https://www.infoq.com/presentations/We-Really-Dont-Know-How-To-Compute">讲话</a> 中的 26 分钟之后看到它，Sussman 总结道：</p><blockquote>每个真正的工程师都会这样做。这不是我们教学生的那类东西。<br></blockquote><p>能量表面原型基于 Thurston 和 Sussman 描述的那类隐藏表示。它是我在理论物理学家的工作中，想象一维运动的方式，视觉效果不是我原创的：当我向其他物理学家展示原型时，有几个人告诉我 <code>哦，我也想象类似的一维运动</code>。虽然这种理解方式在物理学家中很常见，但他们很少谈论它。例如，它不用于教授一维运动课程。最多，你可以为学生们制作一些辅助性的草图。当然，你不会把这种思维方式摆在台面上，或者期望学生使用它来做作业/考试。</p><p>这很奇怪。在我们的公开对话中，缺乏这种思考一维运动的强大方法。原因是传统媒介很难表现它。为此我们构建了一个界面，明确地使能量表面成为我们思考或沟通一维运动的核心。</p><p>这样的界面远远超出了我所展示的原型。它将能量表面与传统的一维运动方法相结合，基于代数，微分方程和牛顿定律。因此，它将传统和新颖的认知元素结合起来，并导致一种非常不同的一维运动思维方式。</p><p>一维运动是一个重要但专业的科目。其他科目怎么样呢？专家是否使用其他隐藏表征，而人们日常并不用它？当 Gleason 和 Thurston 想到数学中的 <code>群</code> 时，他们想象的是什么？我们可以取出这些心里图像，用它们来启发界面设计吗？Sussman 对电路的思考方式怎么样？也许我们可以采用数学家用来思考高维几何的一些隐藏表征 ，并将它们转化为界面？其他科目又如何？我使用了物理和数学的例子，因为我对此熟悉，但我相信对于其他的复杂科目，专家们都有隐藏表征，它们可以启发界面设计，用于表达这些隐藏表征。</p><p>我认为这种表征的良好来源是我称之为最小范例的东西。专家经常拥有一系列具体的例子，他们用这些例子来推理。例如，假设数学家正在研究高维几何或拓扑中的某些问题。他们可能在推理许多空间维度 – 甚至可能是无限多的维度！然而他们粗糙的工作笔记上可能画着 2 维和 3 维的物体草图。这些草图帮助数学家思考更高维度的对象。例如，数学家 Vitali Milman <a href="http://mathoverflow.net/posts/26010/revisions">喜欢</a> 用草图显示高维凸包，这些草图显示了一种「尖尖」的物体，如下所示：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-5.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>这看起来很奇怪，因为凸包是各处都向外凸出的物体，就像凸透镜一样。他们肯定不是尖尖的、有着向内弯曲的曲线。但 Milman 使用这种表征来提醒自己一个关于高维凸包极其重要但并非直观的事实：几乎所有的体积都集中在它们表面附近。在 2 维或 3 维中，这个想法更准确地表现为如上所示的尖刺状物体，而不是 2 维或 3 维凸包，这就是为什么 Milman 认为它是一种对思想有用的辅助。</p><p>专家通常拥有许多这样的最小范例，以及他们可以用来快速推理这些示例的启发式方法。这些启发式方法通常是快速的经验法则，充满了例外和特殊条件，它们没有被严格的证明。它们让专家勾勒出论点的轮廓，弄清楚什么可能是真的，什么可能是假的。简而言之，它们是探索和获取洞察力的有力方式。</p><p>这与大多数计算机推理系统中的方法形成对比。例如，通过计算机进行数学学习的大量工作集中在自动化符号计算（例如 Mathematica），或者寻找严格的数学证明（例如 Coq）。在这两种情况下，重点都放在正确的数学推理上。然而，在创造性工作中，提供严格正确的证据仅仅是该过程的最后阶段（也常常是探索者最不感兴趣的部分）。相反，大多数创造过程都依赖于快速探索，更多地依赖于启发式方法和经验法则，而不是严格的证据。我们可以称之为启发式发现的逻辑。发展这样的逻辑对于构建探索性界面至关重要。我已经做了一些初步调查，看看这种逻辑在 <a href="http://cognitivemedium.com/emm/emm.html">走向数学探索媒介时</a> 会是什么样子。</p><p>如果专家经常发展他们自己的表征工具，为什么他们有时不会分享这些表征工具呢？为了回答这个问题，想象你多年来一直在思考一个问题 – 比如一个群的循环子群（前头 Thurston 的例子）。最终，你会突破现有表征形式的极限。如果你有强烈的动力 – 也许是出于解决当前研究问题的愿望 – 你可能会开始发明新的表征形式，获得传统手段所难以提供的洞察力。此时，你实际上充当了自己的界面设计师。但是，你开发出来的新表征可能完全在你的脑海中，因此不受传统静态媒介形式的约束。或者即使基于静态媒介，它们也可能会破坏关于什么是 <code>可接受的</code> 论点的社会规范。不管是什么原因，他们可能很难使用传统媒介进行沟通。所以他们保持私密，或者只与专家同事进行非正式讨论时使用。</p><h2 id="-2-">启发式 2：将界面中关于世界的深层原理具像化</h2><p></p><p>在传统的一维运动方法中，能量守恒原理是用代数形式写成的，如：</p><!--kg-card-begin: code--><pre><code>0.5mv^2 + U(x) = constant</code></pre><!--kg-card-end: code--><p>在专家那儿，这是思考系统的有力基础。但是，它有很多局限性。它与运动的联系是隐含的，而不是直接的：我们无法直接看到空间、速度或粒子的轨迹；我们不直接看到势能。相比之下，能量表面界面使这些事物直接且易于操作；它直接体现了能量守恒原理。这样就可以毫不费力地提出并回答需要在代数方法中进行大量工作的问题。</p><p>不应该混淆的是，这儿不是试图论证可视化是好的，而代数则是不好的。存在一种对可视化的盲目崇拜，为了可视化而可视化。事实上，并没有任何先验的理由证明可视化方法是更为优越的。相反，我们应当了解任何特定方法的益处和缺点。</p><p>对此的一个很好的证明是 Sussman 和 Wisdom 的 <a href="https://mitpress.mit.edu/sites/default/files/titles/content/sicm/book.html">经典力学的结构和解释</a>。本书通过 Lisp 程序介绍了经典力学的思想。本书实现了基于 Lisp 的经典力学界面，并具有许多新的认知元素。因此，它提供了思考经典力学的新方法，但不是视觉界面。</p><p>回到能量守恒和能量表面原型，这里有一个有用的启发：任何深层原理都是创造出强大的界面思想的机会。每一个数学定理，每一个重要的科学成果，都是对界面设计者想象力的挑战。我们能找到在界面中表达这些原理的方法吗？新的原理提出了哪些新对象和操作？这些对象和操作之间的惊人先验关系是由原理揭示的吗？我们能否找到生动地揭示这些关系的界面，最好是以研究的现象所特有的方式？通过回答这些问题，我们可以将一个令人惊讶的非直观原理转化为直观和新的理解的源泉。</p><p>在界面中将深层原理可视化要求同时掌握问题域相关的学科和界面。这在能量表面原型中可以看出，掌握界面需要理解势能、能量表面和轨迹之间的关系。因此，掌握界面需要了解很多物理知识！</p><p>这种现象的另一个例子是 Photoshop，它构建了许多深入的图像处理原理。当你掌握诸如图层、克隆图章和画笔之类的界面元素时，你就可以成为图像处理方面的专家。同样，掌握经典力学的结构和解释界面的人必然会学习很多经典力学。相比之下，Microsoft Word 的界面很少包含关于写作的深层原理，因此不需成为不错的写手的也可以掌握它的界面。这不是对它的批评，而是它反映了这样一个事实: 我们对于如何写出一手好文章，很少有非常强大而准确的想法。</p><h2 id="--2">用于抛体运动的界面</h2><p></p><p>让我展示另一个原型界面，来阐述前头两种启发式方法。第二个原型旨在帮助我们探索二维抛体运动。虽然这听起来可能类似于能量表面原型 – 但后者只是一维的经典力学！ 这实际上是一个非常不同的学科，因此，界面非常不同。它也比一维运动的原型更雄心勃勃，因为我将使用它来探索我在构建界面之前不知道如何解决的问题。和以前一样，这是一个粗略的草图。我们来看看：</p><p></p><p></p><p>这个原型使用了我们前头的两个启发式方法。多个轨迹的扇形和抛物位置的波阵面是一些专家熟悉的表示，但大多数物理学生都不知道。这些表示反过来又具体化了力学的基本定理，表达了轨迹可以通过两个特定的点。</p><p>抛体原型与能量表面原型非常不同。这可能是令人惊讶的，因为在传统的代数方法中，一维和二维运动看起来相似。但这种相似性是肤浅的和具有误导性的。事实上，非常不同的想法有助于理解两种情况下的运动。例如，轨迹扇形在 2 维度有所帮助，但在一维上却不太有用，其中粒子仅在线上前后移动。另一方面，在一维上，轨迹完全由能量守恒原理确定。在二维里，这不再是真的，因此原理不太有用。这些差异在传统的代数方法中是模糊的，专家需要花费数年的时间才能将它们内化。</p><h2 id="--3">结论</h2><p></p><p>在 20 世纪 <sup>60</sup>⁄<sub>70</sub> 年代，Douglas Engelbart、JCR Licklider、Alan Kay 和其他人发展了计算机作为增强和扩展人类的设备的愿景。这一愿景强烈影响了后来的研究人员和企业家，包括史蒂夫.乔布斯等人，现在已进入到主流媒体。</p><p>一个常见的非正式的拓展模型是我们可以称之为认知外包的模型：我们选择一个问题，将其发送到我们的设备，设备解决了这个问题（也许以一种用户不理解的方式）， 接着设备发回一个解答：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-6.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>例如，如果我想知道距离月球的距离，我会将问题发送给 Google，Google会回复一个答案：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-7.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>或者我可以向谷歌地图询问从我的办公室到伯克利的路线：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-8.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>许多人明里暗里使用这种认知外包模型来考虑如何 <code>增强</code> 人的认知。例如，它通常用于新闻报道。我相信，它也是程序员思考 <code>增强</code> 这件事的常用方法。</p><p>在本文里，我们已经看到了一种不同的增强思维的方式。它不只是解决那些用我们已经理解的术语来表达的问题，它的目标是改变我们可以思考的想法：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://learn.xiaowai.co/content/images/2020/01/image-9.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"></figure><!--kg-card-end: image--><p>这项工作面临的一个挑战是结果难以想象。我们可以发明什么新的认知元素？它们将如何影响人类的思维方式？直到他们被发明出来我们才能知道。</p><p>作为类比，让我们比较一下今天试图登陆火星与过去伟大的航海时代试图探索海洋这两件事之间的区别。乍看起来，它们似乎是相似的，但是登陆火星是一个特定的具体目标，但 15 至 18 世纪的航海探险者却不知道他们将发现什么。他们驾驶的船只是脆弱的，计划是模糊的，他们希望找到值得冒险的东西。从这个意义上讲，它比今天试图登陆火星更加困难。</p><p><code>智力增强</code> 与此类似。技术上有许多有价值的目标。人工智能和延长生命之类的事情是坚实、具体的目标。相比之下，认知的新元素更加难以想象，而且有些含糊不清。根据定义，它们是尚未发明的思维方式。我们不能先验地说出认知的新元素会是什么，或者它们会带来什么。但我们能做的就是提出好问题，并大胆探索。</p><h2 id="--4">致谢</h2><p></p><p>感谢 David Albert，Hannah Davis，Chaim Gingold，May-Li Khoe，Hassan Masum，Andy Matuschak，Robert Ochshorn，Caitlin Sikora，Toph Tucker 和 Devon Zuegel 讨论的想法，这篇文章是这些想法的产物。这项工作始于 <a href="http://www.recurse.com/">Recurse 中心</a>，并在 <a href="http://ycr.org/">YC Research</a> 完成。</p><h2 id="--5">引文</h2><p></p><p>在学术工作中，本文可以如下方式引用:</p><p>Michael Nielsen「Thought as a Technology」，可在 <a href="http://cognitivemedium.com/tat/index.html(2016">http://cognitivemedium.com/tat/index.html（2016）</a>找到。</p><h2 id="--6">背景</h2><p></p><p>缘起：本文源于我试图理解一些伟大的界面设计师的工作，包括 Douglas Engelbart，Alan Kay，Bret Victor 和其他人。一些重要的参考，包括：Engelbart 的<a href="http://cognitivemedium.com/tat/assets/Engelbart1962.pdf">增强人类智慧</a>、Kay 和 Goldberg 的 <a href="http://cognitivemedium.com/tat/assets/Kay_Goldberg.pdf">个人动态媒体</a> 、以及 Victor 的 <a href="https://vimeo.com/67076984">用于思维不可思维之物的媒体</a>。</p><p>关于在外部世界中发现的内化迹象： 参见 Lev Vygotsky 的着作，特别是「高等心理功能的内化」（Internalization of Higher Psychological Functions），第 4 章，在 Vygotsky 的一些著作的编辑和翻译集中，「社会中的思想」，哈佛大学出版社（1978 年） 。</p><p>使用计算机创造新的（微型的）世界：参见 Seymour Papert 的作品，特别是他的书「Mindstorms」（1980）。</p><p>关于隐藏表征的再现：这部分是由 Steven Wittens 的作品所启发，尤其是他对傅里叶变换的非凡 <a href="https://acko.net/tv/toolsforthought/">演绎</a>。当然，启发式方法用于许多其他工作，但 Wittens 的工作以一种特别敏锐和有效的形式表现出来。</p><p>关于深层原理的启示：这部分是由 Kasper Peulen 的 <a href="http://euclidthegame.com/Tutorial/">欧几里德游戏</a> 启发的，该游戏使用欧几里德几何的思想构建了一个界面。同样，这种启发式被广泛使用，但 Peulen 的游戏以一种特别好的经过提纯的形式展示它。</p><p></p><p>原文：<a href="http://cognitivemedium.com/tat/" rel="nofollow">Thought as a Technology</a><br>Author: <a href="http://michaelnielsen.org/">Michael Nielsen</a><br>Translator: 吴文杰</p><p></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/a-new-definition-of-computational-thinking/">少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的</a><br><a href="https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/">少儿编程之 Kill Math 项目介绍：让数学不只是符号</a><br><a href="https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/">少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>了解家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之编程思想介绍 ——  思想，作为一种技术"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的]]></title><description><![CDATA[这是我对计算思维的新看法：摩擦。让我们采用最初的 Cuny，Snyder 和 Wing的定义：计算思维是构建问题的框架，以便计算机能够解决这些问题。围绕特定任务的编程语言的工作向我们表明，我们可以让用户为了使用编程来解决他们的问题而必须学习的知识变得非常少。]]></description><link>https://learn.xiaowai.co/a-new-definition-of-computational-thinking/</link><guid isPermaLink="false">5e18c882ad269b0530f28af9</guid><category><![CDATA[家庭教育]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Fri, 10 Jan 2020 20:08:12 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/a-new-definition-of-computational-thinking.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/a-new-definition-of-computational-thinking.jpg" alt="少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的"><p>David Benedetto 为计算机科学教师协会（CSTA）撰写了一篇关于计算思维的博客，让我对计算思维有了新的认识（感谢 Shuchi Grover，他的推文吸引了我）：</p><p><a href="http://advocate.csteachers.org/2019/02/27/situated-computational-thinking/">情境计算思维（Situated Computational Thinking）</a></p><p>David 说：</p><blockquote>「我认为计算思维的定义是一个很好的起点，计算思维是表征问题及其解决方案所涉及的思维过程，从而使解决方案能够以一种由信息加工媒介有效执行的形式来表示。」（Cuny，Snyder，Wing，2010）<strong><strong><br></strong></strong></blockquote><p>他逐渐形成了这一立场，像 <a href="https://computinged.wordpress.com/2018/12/07/maybe-theres-more-that-one-kind-of-computational-thinking/">Shuchi</a> 一样，提出了计算思维的两种定义：</p><blockquote>这意味着什么？我认为，对于如何定义计算思维，我们有两个明确的选择。<br><br>（A）限制计算思维的含义。这是完全合理的，对于大多数实际目的来说可能是必要的。然而，这也带来了我们对计算思维认识的碎片化的必然结果。不同的学科、领域将有不同的计算思维。我们会这样做，但我们应该尝试理解我们施加的限制，以及施加它们的后果。 <br><br>（B）打破我们对计算思维的概念。我认为科学界（至少是那些正在研究计算思维结构及其在现实文化环境中如何发挥作用的人）应该这样做，这样我们就可以探索如何在各种背景中理解和实践计算思维，并将其用于各种各样的目的。<strong><strong><strong><strong><br></strong></strong></strong></strong></blockquote><p>作为一名研究人员，我更赞成前者 ——  让我们精确地定义计算思维。David 关心的是关于计算思维的社会背景。人们想要把许多事情都称为计算思维。我们能提出一个计算思维的定义来连接这些吗？ 这代表了计算思维在特定学科的用途，它的定义是否足够好以至于我们可以实际测量它的某些内容呢？</p><p>还有许多其他「思维」声称可以为学生提供关键技能。正如 耶鲁大学这篇有趣的 <a href="https://news.yale.edu/2019/03/26/math-not-computer-science-was-grace-hoppers-first-language">文章 </a> 指出的那样，海军上将 Grace Hopper 可能更多地支持「数学思维」而不是「计算思维」。 诸如「分解」或「抽象」之类的技能包含在计算思维的许多定义中（例如这篇<a href="https://geekyteacher.blog/2018/06/04/computational-thinking-decomposition/">博客</a>），而且在计算中确实需要这些技能。但这些技能最初属于数学、工程和科学，我认为这些学科的教师可能更适合教授这些技能并衡量它们。计算可以在学习分解和抽象方面发挥重要作用，但这些技能并不只属于计算或计算思维类。那么，计算的独特之处是什么呢？</p><h2 id="-">人机交互与计算思维之间的张力</h2><p></p><p>在我生活的计算机科学方面，我的研究领域是人机交互。我在 CHI、DIS、CSCW、 VL/HCC 和 UIST 上发表过文章。Cuny、Snyder 和 Wing 的定义很难让我与人机交互研究员协调一致。人机交互研究的目的是为了「表征问题及其解决方案，从而使解决方案能够以一种由信息加工媒介有效执行的形式来表示」，以将用户必须学习的知识最小化，人机交互正试图让用户更容易用计算机思考他们想要考虑的事情。计算思维是关于你需要用计算机思考什么的思维。</p><p>在过去几周的博客中，我一直在探索特定任务的编程语言的 <a href="https://computinged.wordpress.com/2019/03/25/task-specific-programming-languages-past-guzdial-is-smarter-than-present-guzdial/">概念</a> 。在 3 月初我们举办的一个参与式设计会议上，我惊讶地发现，教师可以用 Vega - Lite（交互式图形的语法）做多少社会研究。Sarah Chasin、Helena 和 Rousillon 的 <a href="https://computinged.wordpress.com/2019/04/15/a-task-specific-programming-language-for-web-scraping/">合作</a> 绝对令人震惊，因为人们不需要训练就能取得如此大的成就。Hariharan Subramonyam 给我发了一篇关于终端用户编程以及如何最小化终端用户开始编程所花费的精力的精彩文章 <a href="https://www.inkandswitch.com/end-user-programming.html">End-user programming</a> 。正如我在 SIGCSE 2019主题 <a href="https://computinged.wordpress.com/2019/03/02/a-crowdsourced-blog-post-about-my-sigcse-keynote-computing-education-as-a-foundation-for-21st-century-literacy/">演讲</a> 中谈到的那样，启动程序：代数和 Scratch 的大部分使用实际上都依赖于少量的计算概念。即使是少量的计算也有表达和学习的能力。</p><p>2009 年 Michael Mateas 写了一篇文章，影响了我的思考。我在博客上写道：「<a href="https://computinged.wordpress.com/2009/10/06/there-will-always-be-friction/" rel="nofollow">总会有摩擦</a>」。迈克尔看了看 1961 年 Alan Perlis 的演讲（我经常谈论和写作这个话题），尤其是与 Peter Elias 的对话。Elias 认为：学生不应该学习编程 ，计算机应该学习理解我们。Perlis 和 Mateas 都不认可，他们觉得计算机永远无法完全理解我们。人类可以顺利沟通，但是计算机不能。人机交互始终存在着挑战。人机之间总会有摩擦，而管理摩擦是人类的工作。</p><h2 id="--1">计算思维的新定义</h2><p></p><p>所以，这是我对计算思维的新看法：摩擦。让我们采用最初的 Cuny，Snyder 和 Wing的定义：计算思维是构建问题的框架，以便计算机能够解决这些问题。围绕特定任务的编程语言的工作向我们表明，我们可以让用户为了使用编程来解决他们的问题而必须学习的知识变得非常少。</p><p>为了满足 Alan Kay 关于生成性的观点，我们想教一些计算方面的东西，因为它们为我们提供了思维的新杠杆。我们想教一些有用的东西，但不是那些仅仅因为我们糟糕的用户界面就必须教的东西。</p><blockquote>计算思维的一个最小定义：我们必须学习的东西，以便与计算机沟通我们的任务。它应该很小，我们学习的部分应该是生成性的，对新问题和新思维有用。其他一切都应该通过良好的用户界面来消除。</blockquote><p>你不必仅仅为了使用编程语言来帮助你学习而去掌握抽象和分解。我们的社会研究教师修改了交互式图形项目，犯了错误（每一个错误）并从中恢复过来，尝试他们自己发现的新事物 —— 所有这些都在 10 - 20 分钟内完成。他们已经有了解决问题的能力。他们不需要任何「计算问题解决技巧」。他们当然没有学习任何能在 10 分钟内抽象和分解的特殊计算能力。他们已经掌握了足够的编程知识来学习。如果我们能够消除使用计算机来学习其他东西时对特定技能的需求，我们也应该这样做。</p><p>这与 David Weintrop 和 Uri Wilesnky 的定义相吻合 —— 这是实际使用计算机技术的科学家和工程师的计算实践。他们的定义特别强大，因为它是基于经验的。他们询问计算机科学家和工程师实际上在做什么。Weintrop 和 Wilesnky 的参与者希望完成他们的工作，而不是为了编程本身。因此，他们使用计算的最小子集为他们的思维和任务买单。</p><p>我喜欢这个定义，因为它是令人梦寐以求的。当下有很多东西需要你必须学会使用计算机来解决问题。Philip Guo 最近在密歇根大学举行了一次演讲（类似于他在威斯康星大学举办的演讲），描述了数据科学家如何成为系统管理员来管理所有不同的软件包和数据库以完成他们的工作。这是一个问题，而不是计算思维。这是需要处理的东西。我们能让计算思维变得有多小?</p><h2 id="9-">9 个评论</h2><p></p><blockquote>Raul Miller：<br><br>我一直试图解释的一个问题是，恶意软件的普遍性，以及助长这种情况的潜在盲目性。你的这篇文章让我想起了这一点。一方面，恶意软件涉及到对计算系统缺陷的深入的技术洞察，这些缺陷是由物理限制、仓促地满足最后期限等原因造成的，这似乎是大多数人难以理解的。另一方面，恶意软件的后果是不必要的资源使用 —— 时间、带宽等，系统趋向于不可用。在人机交互方面，这似乎需要汇总统计信息—计数器、图表等。在网络环境中（大多数计算，如今都是联网的）这些东西应该反映网络活动,应该可以从「上游」设备以及我们使用的机器中获得（设计使我们可以比较事物并查看计数本身何时被篡改，或者计数是显示恶意软件感染的迹象）。在我看来，这类系统设计的有用类比包括：复式簿记、校验、和疼痛生理学以及早期预警系统。当然，人们很容易对这些问题无动于衷 —— 几十年来，我们基本上忽略了这些东西，为什么它现在突然成为一个问题？（但这是一个问题，因为我们一直希望，如果我们能够恰当地处理系统的任意一些细节，它就会消失，但忽视了这一点，就永远无法解决很多问题。）不管怎么说……不是你真正想说的，但也不是完全脱离主题……无论如何...不是你真正得到的，但并没有完全脱离它，或者...<br></blockquote><p></p><blockquote>alanone1：<br><br>我认为，对于教学和课程来说，一个更简单、更直接的指导性问题是「什么时候应该容易，什么时候应该困难」？无端的困难不会促进成长，但是需要真正构建和重构一个人的思维的想法将需要大量的工作。如果我们的教育目标包括让学习者的耳朵之间产生巨大的差异 —— 而不仅仅是用外部工具来扩大，那么「重要的困难」就一定不能避免。正如伟大的教育家 Tim Gallwey 所指出的那样:「困难不一定等于痛苦，仅仅是你处理‘困难’的方式，就能在很大程度上决定你感受到多少 ' 痛苦 ' 。」处理后者是真正的教育者、课程设计人员、教师和用户界面设计人员的很大一部分工作。一个很大的错误是试图通过去除重要的困难区域来消除痛苦。这不仅抑制了增长，还教会了我们一些经常「反增长」的东西。这种错误总是由那些主要寻求早期成功的学习者所犯，最终并没有导致超出阈值的学习，从而在思维、行为和理解方面产生质的变化，即「吉他英雄」形式的反教育。<br></blockquote><p></p><blockquote>tdmorley：<br><br>也许你开始从数学的角度来考虑，语法和用法的细节，逗号、分号、内置特性的名称等等，这些都不重要，应该尽量减少这些方面的困难。还有一个更深层次的（更具数学性）计算思维，可以通过最小化表面困难的例子来暗示。<br></blockquote><p></p><blockquote>Kathi Fisler：<br><br>我昨天尝试发表这条评论，但因为某种原因似乎没有成功。重写介绍，重写简介，这样 WP 就不会拒绝说我已经发布了这个。虽然关于管理和减少摩擦的部分是有意义的，但基于专业实践的计算思维定义却没有。学生们经常试图学习专业人士已经学到并超越了的东西（因此不会出现在明确的常规练习中）。 在 Bootstrap：Physics 中，我们的目标是教授计算建模。在学习物理概念的背景下，学生进行（实验）观察，然后用代码编写一个基于函数的模型来捕捉该概念的动态。然后，他们可以使用自己的计算模型来进行测试、模拟、探索和预测，并将结果与其他物理模型的结果进行对比。 一个正在实践的工程师/科学家通常想要的只是模拟预测结果的能力。这表明只教学生如何使用模拟软件来匹配所需的练习。但在我们的例子中，学生的任务是学习计算的概念基础。这项任务从根本上不同于专业人士的需求（专业人员希望在他们还是学生时就学到这一点）。 我对你的定义的担忧是它忽略了某些现象的计算性解释/描述。在这里通过计算来教导人机交互观点并非是严格意义上的「需要」，但是这对非计算机科学领域中的人来说是有价值的。排除计算建模的定义抛出了太多的东西。（你的论点仍然适用于教授开发和使用计算模型的工具，但这是另外一个问题。）<br></blockquote><p></p><blockquote>Mark Guzdial：<br><br>谢谢，卡蒂。我同意你的观点，但这并不是来自这里。我打算为其他几个场所重写这个故事，所以我会确保在下一次迭代中让它更清晰。如果我们正在为专业人士及其任务进行设计，那么为专业实践设计特定任务的编程语言是有意义的。在为学习者设计时，他们参与的是他们应该学习的活动  ——  学习是「任务」的一部分。这就是以学习者为中心的设计的明确理念（Soloway，Hay，Quintana，me）。我们也认识到专业人士有一套适合自己的术语，但学习这些术语是学生学习任务的明确部分。<br></blockquote><p></p><blockquote>Briana Morrison：<br><br>因此我喜欢将计算思维定义为「摩擦」的想法，但是我不相信你的新定义，因为它似乎排除了只想编写程序的人，「因为」他们想创造一些很酷的东西，帮助他们完成个人项目等等。更不用说它限制了科学家和工程师。我更喜欢「分布式认知」（ la Hutchins）模型：计算机什么时候可以帮助我解决问题（什么时候它会带来更多的痛苦而不是帮助）？我怎样才能将问题转移到机器上？如果我必须添加 10 个数字，我可能会手动完成，但如果我有 100 个数字并需要额外的统计数据，我将求助于一个应用程序。如果一个文件中已经有 1000 个数字，我将编写一个程序来执行此操作。这一切都是为了了解什么是正确的工具以及何时使用它。我希望世界能够达到这样的程度：人们通过谷歌会找到「什么工具可以解决这个问题」并且会出现一系列答案  ——  每个都是一个潜在的独立计算工具/环境/语言/什么和一系列问题（多少数据，你什么时候需要答案，熟悉R等等）引导你找到合适的工具。这就是计算思维！<br></blockquote><p></p><blockquote>Mark Guzdial：<br><br>几乎所有关于计算思维的定义，以及源于 Wing 最初定义的所有定义都是关于解决问题的。我正在使用的 Cuny，Snyder 和 Wing 定义，计算思维是在计算机上解决问题所需的知识，同样属于同一谱系。仅仅因为你想要创造一些东西就是编程的一个很好的理由  ——  但这不是计算思维。将所有与计算相关的东西都投入到同一个「计算思维」箱中会导致无法定义和无法测试的混乱。<br></blockquote><p></p><blockquote>Briana Morrison：<br><br>我不是想把所有的东西都扔进计算思维里  ——  只是用计算机作为解决问题的工具（即使「问题」是创造艺术）。我不认为这与期望工程师知道正确的公式/组件/工具来解决问题有任何不同（当然这可能是计算性的），或医生知道在手术室使用哪种工具（也可能是计算性的）。我们已经拥有大量的计算工具来帮助人们解决问题  ——  我们没有的是让人们了解它们然后轻松使用它们的一个好方法（我的先验知识是什么以及我如何充分利用这些知识）。这就是我喜欢你们的社会研究参与式设计的原因  —— 教师想知道什么，找到答案的最佳方法是什么。我开始和我的老师一起探索谷歌 Studio，Tableau 等数据可视化工具（使用真实世界的数据集），看看我们能找到什么。这是计算思维吗？我认为它是 —— 我们正在使用计算工具和功能从原始数据中提取知识。我们在解决问题吗？也许....<br></blockquote><p></p><blockquote>Mark Guzdial：<br><br>我想我们意见一致，知道使用什么工具是解决问题的一部分。在这个定义中，我所做的是把责任放在作为工具开发人员的我们身上。为了使用该工具，领域专家应该了解的关于计算的知识越少越好。如果我们说「这是一个与你的问题相匹配的工具目录，而且大多数这些工具只需要几小时的时间来学习如何使用它们」，我们就不会对任何人有所帮助。相反，我们应该说：「这是满足你需求的 n 种工具，每种工具都可在 10 分钟内使用。」我想我们可以做到这一点，在这 10 分钟里  ——  你正在学习计算思维。<br></blockquote><p></p><p>原文：<a href="https://computinged.wordpress.com/2019/04/29/what-is-computational-thinking-its-the-friction-that-we-want-to-minimize/">A new definition of Computational Thinking: It’s the Friction that we want to Minimize unless it’s Generative</a><br>Author: <a href="https://computinged.wordpress.com/">Computing Education Research Blog</a><br>Translator: 廖曼江</p><p></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/thought-as-a-technology/">少儿编程之编程思想介绍 ——  思想，作为一种技术</a><br><a href="https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/">少儿编程之 Kill Math 项目介绍：让数学不只是符号</a><br><a href="https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/">少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>了解更多家庭教育方面的信息，请参考：<br><a href="https://learn.xiaowai.co/background-on-how-children-learn/">家庭教育方法：关于儿童如何学习的背景思考</a><br><a href="https://learn.xiaowai.co/grit-the-power-of-passion-and-perseverance/">决定孩子成功的关键是什么？家长应该注重孩子哪些特质的培养？对于孩子的学习，家长应该更注重结果，还是过程？</a><br><a href="https://learn.xiaowai.co/100-kids-must-read-books-for-parents/">青少年必备书单：最适合孩子阅读的 100 本经典图书；少儿书单；儿童必读书籍；少儿图书推荐；青少年必读图书</a></p><p></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image-->]]></content:encoded></item><item><title><![CDATA[少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言]]></title><description><![CDATA[在这篇文章里，我会来阐述下为什么我觉得 Python 对于计算机编程入门教学来说是一门很棒的编程语言（对基础编程课程更多观点可以查看这篇文章）。这也是从我针对初学者Python 编程教学过程中获得并总结的一些心得体会。]]></description><link>https://learn.xiaowai.co/why-python-a-great-language-for-beginners/</link><guid isPermaLink="false">5e1895d7ad269b0530f287a4</guid><category><![CDATA[Python 编程]]></category><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Fri, 10 Jan 2020 18:31:48 GMT</pubDate><media:content url="https://learn.xiaowai.co/content/images/2020/01/why-Python-a-great-language-for-beginners.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://learn.xiaowai.co/content/images/2020/01/why-Python-a-great-language-for-beginners.jpg" alt="少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言"><p>在这篇文章里，我会来阐述下为什么我觉得 <code>Python</code> 对于计算机编程入门教学来说是一门很棒的编程语言（对基础编程课程更多观点可以查看<a href="http://pgbovine.net/prog-curriculum.htm" rel="nofollow">这篇文章</a>）。这也是从我针对初学者<code>Python</code> 编程教学过程中获得并总结的一些心得体会。</p><p>简单地说，我有足够的信心作出这样一个判断，那就是对于大部分的编程初学者来说他们并不是很关心计算机科学或编程理论。对他们来说，重要的是如何简单地通过尽可能少的努力编写尽可能少的代码并在计算机上先运行起来。需要写的代码越少，可能出现的错误和漏洞也就越少，从而在关键的早期学习过程中减少学习障碍。很多初学者会因这种障碍带来挫折感并丧失信心，甚至会完全放弃编程学习。</p><p>Python 在编程入门学习方面优于其他的很多编程语言，因为它可以让初学者较少地关注诸如类型、编译器和编写样板代码等细节，把重心放到与实现特定目标相关的算法和数据结构的学习（类似的语言还有<code>Ruby</code>）。下面我会列举 Python 对于初学者友好的一些特点，这些特点很适合初学者进行编程入门学习。本文内容包含以下几个部分：</p><blockquote><a href="#section1">1. 无需声明变量类型</a><br><a href="#section2">2. 运行期类型错误，而不是编译期类型错误</a><br><a href="#section3">3. print 语句是多态的，会自动插入空格与换行</a><br><a href="#section4">4. 字符串、列表、字典内置，且语法统一</a><br><a href="#section5">5. 漂亮、干净的编程语法，简洁而准确；不会因为简洁而造成混淆</a><br><a href="#section6">6. 交互式命令提示符，和无需重启会话即可动态重新加载模块的能力</a><br><a href="#section7">7. 返回新值，而不是改变现有对象的操作</a><br><a href="#section8">8. 全面的标准库，以及大量可用的免费第三方库</a><br><a href="#section9">9. 合适程度的运算符重载</a><br></blockquote><!--kg-card-begin: html--><section id="section1"><!--kg-card-end: html--><h2 id="1-">1. 无需声明变量类型</h2><p></p><p>当一个初学者刚开始学习类似 <code>C++</code> 或者 <code>Java</code> 这种静态类型的编程语言时，通常他/她写的第一行代码便是像 <code>int count</code> 或者 <code>List&lt;String&gt; seq</code> 这种变量声明。这些代码除了让你视觉上感觉混乱、模糊真实的执行动作语句之外，没有别的用处。在初学者通常需要编写的小规模程序代码中，这些声明代码甚至会达到总代码量的 <code>1/4</code> 到 <code>1/3</code> 之多。对于经验丰富的程序员来说声明变量和类型是必要的也是自然的，但对于尚在努力应对编译器类型错误信息的初学者而言，它们确实很烦人。（在某些静态类型编程语言中你也可以不必声明类型，比如 <code>ML</code> 和其他有类型判断的语言，但是第一次就教学生 <code>ML</code> 语言就像是一上来就要给人家鼻子上狠狠来上一拳一样。）。</p><!--kg-card-begin: html--></section><section id="section2"><!--kg-card-end: html--><h2 id="2-">2. 运行期类型错误，而不是编译期类型错误</h2><p></p><p>编译期类型错误会给初学者带来很大困扰。至少让代码先跑起来，执行一些操作，这比连编译都通过不了，根本运行不起来要强很多。虽然在以产品质量为目标的代码规范中，严格的类型检查是非常重要的，因为这样可以减少因为运行期类型错误而导致的问题。但是对于初学者而言，他们并不会去写核反应堆代码，他们写的只是一二十行玩具操控的代码。至少让他们的程序先运行起来，让他们在运行期知道哪一行代码出了问题。有时候在发生这样的错误之前程序已然运行很深，运行期错误处理可以让初学者对代码错误有更直观的认识。</p><p>对于一个学习编程的新手来说，只是希望他的代码能够运行并做点什么（即使代码并不完美），这时候最打击士气的莫过于一个叫做「编译器」的神秘暴君拒绝将他的代码变成可执行程序。理想状态下，学生越频繁地运行他们的代码，缩短编程期间编辑调试的迭代周期增加迭代次数，编程学习的动力就越大。</p><p>（布鲁斯·埃凯尔在 <a href="http://www.mindview.net/WebLog/log-0025" rel="nofollow">强类型与强测试</a> 文章中讨论了动态类型语言在生成高质量代码方面的优势，即便对于资深程序员来说也是如此。）</p><!--kg-card-begin: html--></section><section id="section3"><!--kg-card-end: html--><h2 id="3-print-">3. <code>print</code> 语句是多态的，会自动插入空格与换行</h2><p></p><p>新手会在程序输出与调试代码中大量使用 <code>print</code> 语句（毕竟就让他们使用 <code>Python</code> 的调试器会有点困难）。不像 <code>C</code> 语言风格中晦涩的 <code>printf</code> 的语法，Python的 <code>print</code> 可以正确地打印出所有类型的变量，而无需考虑是基础变量还是复合变量。相比于下面的古怪的代码：</p><!--kg-card-begin: code--><pre><code>printf("%s lives at %d %s\n",
   person, street_number, street_name);
</code></pre><!--kg-card-end: code--><p>学生可以写出如下更容易理解的清晰代码：</p><!--kg-card-begin: code--><pre><code>print person, "lives at", street_number, street_name
</code></pre><!--kg-card-end: code--><p>上面的 <code>Python print</code> 语句实际上所有人都容易理解，就是要打印出一行像「约翰·多伊住在榆树街 135 号」这样的信息；而 <code>C printf</code> 的版本只适合 <code>C</code> 程序员阅读。</p><!--kg-card-begin: html--></section><section id="section4"><!--kg-card-end: html--><h2 id="4-">4. 字符串、列表、字典内置，且语法统一</h2><p></p><p>即使作为初级程序员，也可以很容易的通过使用字符串（存储文本数据）、列表（存储序列数据）、字典（存储关联数据）写出很棒的代码。Python 通过统一的操作语法让这三个基础的数据结构变得极其容易操作， 比如：使用 <code>[...]</code> 进行元素访问，使用 <code>for ... in ...</code> 来循环迭代，使用 <code>if ... in ...</code> 来做成员测试。</p><p>动态类型可以很容易的避免列表、字典笨拙的长类型声明。比如避免某些晦涩的 <code>Map&lt;String, List&lt;Integer&gt;&gt;</code> 声明, 而使用简单的初始化像 <code>x = [1, 2, 3]</code> 就可以简单赋值。例如你想创建一个 <code>key</code> 为字符串类型，<code>value</code> 为数值类型的字典，只需要把对应的内容扔进去就好，而不需要做任何冗长的声明：</p><!--kg-card-begin: code--><pre><code>d = {}
d["my bowling scores"] = [120, 140, 165]</code></pre><!--kg-card-end: code--><p>而要实现相同的初始化功能，<code>Java 1.5</code> 的代码却是这样的：</p><!--kg-card-begin: code--><pre><code>Map&lt;String, List&lt;Integer&gt;&gt; d = new HashMap&lt;String, List&lt;Integer&gt;&gt;();
List&lt;Integer&gt; lst = new LinkedList&lt;Integer&gt;();
lst.add(120);
lst.add(140);
lst.add(165);
d.put("my bowling scores", lst);</code></pre><!--kg-card-end: code--><p>我对 <code>Java</code> 没有意见（虽然可怜的 <code>Java</code> 总会收到抨击），但看看这一堆冗长的代码。为了将把相似的数据填到字典中，显然至少需要多次的重复代码输入。</p><p>是的，我知道，对于一个从事大型软件工作的经验丰富的程序员来说，多输入几行代码无关紧要。但对于初学者呢？哪个版本的代码更容易被理解！我无法想象怎样向一个初学者解释这段  <code>Java</code> 代码。对于初学者，他们并不需要关心类型声明，<code>Java</code> 泛型，参数多态机制或任何其他奇怪的编程语言术语，他们需要的只是希望用尽可能少的代码去实现自己预期的想法而已。</p><!--kg-card-begin: html--></section><section id="section5"><!--kg-card-end: html--><h2 id="5-">5. 漂亮、干净的编程语法，简洁而准确；不会因为简洁而造成混淆</h2><p></p><p>毫无疑问 <code>Python</code> 代码看起来优雅、干净、容易书写，并且易读、易理解。但同时，<code>Python</code> 也不会因为这种简洁造成混淆，出现像 <code>Perl</code> 代码经常会出现的情况。它在简洁和清楚准确两个层面上做到了很好的平衡。</p><p>最初 <code>Python</code> 吸引我的地方是我发现写 <code>Python</code> 代码很有趣，因为它看起来很美观。虽然这听起来有一点老套，但是看 <code>Python</code> 代码时唤起的愉快的发自内心的情感可以提高程序员的工作效率，让他/她觉得代码更整洁，更容易理解。如果你需要每天长时间盯着代码好几个小时，那么它越看起来越优雅就越好（世界上大部分事情都是如此），并且这一点很重要。</p><!--kg-card-begin: html--></section><section id="section6"><!--kg-card-end: html--><h2 id="6-">6. 交互式命令提示符，和无需重启会话即可动态重新加载模块的能力</h2><p></p><p>无论何时一个编程语言初学者有关于一个函数或者语言特色是如何工作的问题时，最好是使用科学的方法来进行回答，那就是<strong>先去试试看看发生了什么</strong>，然后再去改善，润色自己的理解，再去重新实验。最佳实践就是通过交互式命令提示，因为不需要保存源文件，重新编译它，重新编辑来消除你刚刚修改的代码中愚蠢的类型错误，重新编译，然后重新执行。通过使用 <code>Python</code>，你可以在交互式提示中创建数据结构，并实时测试它们。</p><p>更好的是，当你想去测试写在源文件（ <code>Python</code> 中称之为模块）的函数，你可以使用 <code>reload</code> 函数来重新加载你的改动而无需退出交互式环境。这对于在运行试验模块前需要做很多准备工作的场景十分的有帮助。一个快速的编辑调试周期会使初学者受益颇多，因为这会让他们感觉测试起代码来更自由，代价更低。实验的越多，理解的越深，越有学下去的动力。</p><!--kg-card-begin: html--></section><section id="section7"><!--kg-card-end: html--><h2 id="7-">7. 返回新值，而不是改变现有对象的操作</h2><p></p><p><code>Python</code> 标准库的许多操作都是以函数式风格编写的，这意味着这些操作会返回新值而不是修改原来的对象。在教授编程初学者使用 <code>Python</code> 的交互式命令提示符时，我发现这个函数特点非常有用，因为它允许人们在不改变原对象的情况下继续对同一对象进行重复实验。</p><p>例如，当我教授学生关于字符串切片的内容（目标是去除字符串两边的双引号）时，我创建了一个值为 <code>Weight in kilograms</code> 的 <code>x</code> 字符串类型变量，为了演示字符串切片的语法，我让他们尝试用不同的索引切片，以便自己查看结果：</p><!--kg-card-begin: code--><pre><code>&gt;&gt;&gt; print x
"Weight in kilograms"
&gt;&gt;&gt; print x[1:]
Weight in kilograms"
&gt;&gt;&gt; print x[2:]
eight in kilograms"
&gt;&gt;&gt; print x[3:]
ight in kilograms"
&gt;&gt;&gt; print x[:-1]
"Weight in kilograms
&gt;&gt;&gt; print x[:-2]
"Weight in kilogram
&gt;&gt;&gt; print x[:-3]
"Weight in kilogra
&gt;&gt;&gt; print x[1:-1]
Weight in kilograms</code></pre><!--kg-card-end: code--><p>最后一行代码实现了去除首部和尾部双引号的需求，因为切片操作每次返回的都是新值，而原始的字符串并没有被改变，所以可以被无限次操作而不受影响。试想如果不是这样，测试切片操作时每次都需要重新修改原始字符串的内容，这会是多么的不方便。</p><p>对初学者来说最佳实践就是去不断的实验练习，而函数式风格对此有很大的促进作用。</p><!--kg-card-begin: html--></section><section id="section8"><!--kg-card-end: html--><h2 id="8-">8. 全面的标准库，以及大量可用的免费第三方库</h2><p></p><p>大多数的介绍性编程课程都会让初学者编写一些数学相关的程序，如计算菲波那切数列或者求素数，写一个四则运算计算器，求一个集合的平均数，因为这些都很容易实现而且不需要外部依赖（毕竟，数学运算符在大多数编程语言中是原始运算，因为它们在大多数机器语言中都是原始运算）。</p><p>我个人认为如果学生脑海里有现实生活中应用的需求，那么编程将变得更加有趣。例如 <a href="http://pgbovine.net/xml_gal_manual.htm" rel="nofollow">用脚本管理自己的电子照片</a>，给他们喜欢的聊天客户端写拓展，互联网图片爬虫等。这些应用会使用到大量的库，幸运的是，<code>Python</code> 中有很多这样的库。没有这些库的帮助，学生永远也不能跳出编写玩具程序的范畴，更别提去创造能激励他们进一步学习的有用的软件了。</p><!--kg-card-begin: html--></section><section id="section9"><!--kg-card-end: html--><h2 id="9-">9. 合适程度的运算符重载</h2><p></p><p>运算符重载可以让代码看起来更简洁易读，但是滥用也会使代码变得一团糟。对一个编程语言来说允许运算符重载的程度（以及标准库中哪些运算符实际重载)，就决定了代码的可读性。一种极端是，在 <code>C</code> 和 <code>Java</code> 中，几乎没有操作符被重载。所以为了实现大部分的操作会调用繁多的函数/方法。另一种极端是，<code>Perl</code> 中大部分操作符都被重载了，在不同的上下文中有不同的含义，这同样使得代码看起来一团糟。我个人觉得 <code>Python</code> 在运算符重载方面取得了一个很好的平衡，比如 <code>+</code> 和 <code>[]</code> 。</p><p>举例来讲，<code>+</code> 操作符是演示优雅的运算符重载的绝佳例子：数值加法，字符串，列表和元组的拼接等。如果你问初学者他们期望 <code>+</code> 为上述类型做什么，他们很容易猜出正确的功能。另一方面，如果你问初学者他们期望 <code>+</code> 对两个字典做些什么，他们就会感到困惑了，因为现实中没有特别直观的对两个字典进行合并的场景。或许你能将两个字典合并成一个更大的字典，但是当两个字点都包含某几个 <code>key</code> 时，保留哪一个呢？字典中 <code>+</code> 缺乏明确的含义，这可能是为什么它在这种类型上不会过载的原因。<br></p><p>原文：<a href="http://pgbovine.net/python-teaching.htm">Why Python is a great language for teaching beginners in introductory programming classes</a><br>Author: <a href="http://pgbovine.net/philip-guo-cv.pdf" rel="nofollow">Philip Guo</a><br>Translator: <a href="https://github.com/guoruibiao">郭瑞彪</a> <a href="https://xiaowai.co">校外课</a></p><!--kg-card-begin: html--></section><!--kg-card-end: html--><p></p><p>更多关于编程语言的介绍，请参考：<br><a href="https://learn.xiaowai.co/programming-language-comparison-python-vs-c-plus-plus/">少儿编程之编程语言选择：Python 与 C++ 详细比较</a><br><a href="https://learn.xiaowai.co/programming-language-intro-what-is-python-used-for/">少儿编程之编程语言介绍：Python 编程应用情况详细介绍</a><br><a href="https://learn.xiaowai.co/best-way-to-learn-python-in-8-steps/">少儿编程之学习方法介绍：Python 最佳学习方法 通过八个步骤学习 Python 编程</a><br><a href="https://learn.xiaowai.co/programming-language-comparison-java-vs-javascript/">少儿编程之编程语言选择：Java 与 JavaScript 详细比较</a><br><a href="https://learn.xiaowai.co/the-difference-between-html-and-html5-main-changes/">少儿编程之编程语言介绍：HTML 与 HTML5 的区别，HTML5 相比 HTML 有哪些大的改进</a><br><a href="https://learn.xiaowai.co/top-10-tips-about-how-to-learn-javascript/">少儿编程之学习方法介绍：JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示</a></p><p>了解更多少儿编程相关科普文章，请参考：<br><a href="https://learn.xiaowai.co/a-new-definition-of-computational-thinking/">少儿编程之计算思维的新定义：计算思维是我们想要最小化的摩擦，除非它是生成的</a><br><a href="https://learn.xiaowai.co/thought-as-a-technology/">少儿编程之编程思想介绍 ——  思想，作为一种技术</a><br><a href="https://learn.xiaowai.co/kill-math-to-model-and-solve-meaningful-problems-of-quantity/">少儿编程之 Kill Math 项目介绍：让数学不只是符号</a><br><a href="https://learn.xiaowai.co/dynamicland-seeing-spaces-and-design-studio/">少儿编程之 Dynamicland 项目介绍：可视空间与设计工坊</a><br><a href="https://learn.xiaowai.co/k12-programming-binary-concept-introduction/">少儿编程之二进制：计算机二进制的历史，二进制与十进制的转换及相关亲子互动游戏</a><br><a href="https://learn.xiaowai.co/random-numbers-in-computer-science-real-vs-pseudorandom-number/">少儿编程之随机数：计算机里的随机数，真随机数与伪随机数</a></p><p></p><p>了解更多校外课课程介绍，请参考：<br><a href="https://learn.xiaowai.co/user-guide-and-xiaowai-general-introduction/">新用户指南 - 校外课网站编程学习环境及少儿编程课程介绍</a><br><a href="https://learn.xiaowai.co/adafruit-circuit-playground-dev-environment-setup-guide/">Adafruit 可穿戴编程开发主板 - 用户使用指南</a><br><a href="https://learn.xiaowai.co/unpluged-programming-games-for-parents-and-kids/">离线学习少儿编程，一些不使用电脑也可以学习编程知识的亲子互动游戏</a></p><p><br></p><p>扫码下面二维码，关注我们的公众号，阅读最新文章或观看更多视频教程：</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://learn.xiaowai.co/content/images/2019/11/support_qrcode_wechat_mp.png" class="kg-image" alt="少儿编程之编程语言介绍：为什么 Python 对于编程入门学习来说，是一门很棒的语言"><figcaption>校外课少儿编程 公众号</figcaption></figure><!--kg-card-end: image--><p><br></p>]]></content:encoded></item></channel></rss>