资讯专栏INFORMATION COLUMN

如何直观地理解程序的运行过程?

Olivia / 2691人阅读

摘要:了解代码的执行过程是编程的基本要求。还有种方法就是使用提供的调试功能,通过添加断点和单步运行,了解程序的运行状态。对于初学编程,难以理解程序运行过程的苦手来说,绝对可称之为神器。每天共执行和演示超过段程序。

了解代码的执行过程是编程的基本要求。一个熟练的编程老手只需要用肉眼看着代码,就能对其运行的过程有所了解。然而对于刚接触编程不久的新手来说,这种事情就没那么显而易见了。于是在编写代码和调试代码时,一旦程序的逻辑有些复杂,就像掉进代码的迷宫,完全不知道东南西北。

所以,每当有人对自己的代码没有给出预想结果而百思不得其解,无奈寻求帮助时,我都会建议在程序中增加输出,一方面是根据不同输出的先后顺序来判断程序的运行路径,另一方面则是观察各变量在运行过程中的实际数值,确认是在哪里发生了错误。

还有种方法就是使用 IDE 提供的调试功能,通过添加断点和单步运行,了解程序的运行状态。Visual Studio、Eclipse、xCode 等常见的 IDE 几乎都提供了调试工具。对于 Python,也可以使用 pdb 库来实现断点调试。

上述两种途径应该是大部分程序员 debug 时候的基本套路。但同样的,对于新手来说,即使这样的工具,用起来仍然有些费力。

有时我会选择在纸上画出一些流程和图形来向人解释程序,虽然效果会好些,但显然不是一种可以广泛推广的方式。后来意外发现有一款工具满足了此类需求,非常适合新手,可以让你直观地“看”出程序是怎么运行的。对于初学编程,难以理解程序运行过程的苦手来说,绝对可称之为“神器”。

这就是 Online Python Tutor 。一款免费的在线代码运行及演示工具。

项目地址:pythontutor.com

关于此项目的介绍(摘自网络,出处未知):

Online Python Tutor 是由 Philip Guo 开发的一个免费教育工具,可帮助学生攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。通过这个工具,教师或学生可以直接在 Web 浏览器中编写 Python 代码,并一步一步可视化地执行程序。

截至 2013 年 12 月,来自 165 个国家和地区共 50 万多人使用了这个在线工具,通常是用作教材、讲义或在线编程指南的补充。每天共执行和演示超过 6,000 段 Python 程序。除了自学的初学者,Online Python Tutor 的用户还包括了那些参加 Coursera、edX 和 Udacity 等在线课程的学生,还有诸如 MIT、UC 伯克利等高校的教师。

Python Tutor 支持 2.7 和 3.3 两个版本的 Python。

除了 Python 外,还可运行 Java、JavaScript、TypeScript、Ruby,另外也有支持 C、C++ 的版本。

可以通过一行 JS 代码,把此工具嵌入到你自己的页面中。

也可以生成链接,把你的代码直接分享给别人。

附带单元测试功能。

网站上还提供了很多的实例,其中包括一些比较经典的算法。

再来体验一下其使用过程:

在编辑器里输入代码,点击 “Visualize Execution” 即可运行并演示。


import random

def fn(x):
    return x**2

result = []
for i in range(3):
    t = random.randint(1, 10)
    print t
    r = fn(t)
    result.append(r)
print result

我用了段包含循环、列表、函数、模块的代码片段。看看效果如何:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44840.html

相关文章

  • 白话Java I/O模型

    摘要:因为所有的数据从最底层讲是字节,那么就可以使用字节流这个概念去指代数据动态转移这个过程。而数据的转移,就是把一堆字节流从运往。创建内存中的中转区域,然后将上面的文件的字节流直接接入到这个。然后再从把字节流输出到对应的。 I/O的很多操作和使用,其实并不是一个非常直观的概念,特别是打开文件、创建buffer。这对于终端用户来讲是个非常奇葩和奇怪的过程。我只是想要从一个文件里读取内容,从过...

    VincentFF 评论0 收藏0
  • 弄懂JavaScript作用域和闭包

    摘要:关于本书,我会写好几篇读书笔记用以记录那些让我恍然大悟的瞬间,本文是第一篇弄懂的作用域和闭包。作用域也可以看做是一套依据名称查找变量的规则。声明实际上是根据你传递给它的对象凭空创建了一个全新的词法作用域。 《你不知道的JavaScript》真的是一本好书,阅读这本书,我有多次哦,原来是这样的感觉,以前自以为理解了(其实并非真的理解)的概念,这一次真的理解得更加透彻了。关于本书,我会写好...

    everfly 评论0 收藏0
  • JavaScript 程序员可以从C++中学到什么

    摘要:特别是所谓的不需要的引用可能会导致内存泄漏,这意味着程序占用的内存比实际需要的多,从而降低了内存的效率。但是如果我们能够意识到内存泄漏的风险,就可以采取措施将其删除。意外的使用全局变量是导致内存泄漏的一个常见原因。 作者:Bret Cameron翻译:疯狂的技术宅原文:https://medium.com/@bretcamer... 本文首发微信公众号:前端先锋欢迎关注,每天都给你...

    不知名网友 评论0 收藏0
  • 如何成为一个优秀程序

    摘要:我开始去关注一个问题的最终目的是什么,得益于乔治波利亚的书如何解决这个问题。在此基础上,我也会制定了计划,这也是乔治波利亚的另一个建议。明白为什么让我对前后关系理解更深刻,帮助我成为一个见多识广的程序员。 showImg(https://segmentfault.com/img/bVbvMKu); 原文链接: https://medium.com/free-code-camp... ...

    dunizb 评论0 收藏0
  • 如何成为一个优秀程序

    摘要:我开始去关注一个问题的最终目的是什么,得益于乔治波利亚的书如何解决这个问题。在此基础上,我也会制定了计划,这也是乔治波利亚的另一个建议。明白为什么让我对前后关系理解更深刻,帮助我成为一个见多识广的程序员。 showImg(https://segmentfault.com/img/bVbvMKu); 原文链接: https://medium.com/free-code-camp... ...

    wuyangchun 评论0 收藏0

发表评论

0条评论

Olivia

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<