当您遇到编码问题时,您如何找到答案?
许多开发人员会说“Google”或“Stack Overflow”。今天,我想提出一个不同的答案。我认识的许多顶级开发人员都很常见。
使用便签本。
什么是便签本?
暂存器是您用来通过编写一些快速代码来测试您的假设的文件。
便签簿可以回答以下问题:
- 当我尝试访问字典中不存在的键时会抛出什么错误?
- 将日期时间转换为 ISO 字符串并返回的正确语法是什么?
- 当我有 的实例时
SomeLibraryClass
,我可以使用哪些方法和属性?
使用便签本,您可以非常快速地得到问题的答案,因为您可以在现场进行测试。
您还知道便签本的答案是正确的。您可以随心所欲地设置您的小型实验。
顶级开发者使用暂存器
我不能夸大便签本的好处。
它们可以非常快速地用于获得问题的答案。设置文件后,随着时间的推移,迭代实验会变得更容易、更快。对于需要暂存器来运行实验的编译语言尤其如此。
通常,我可以在几秒钟内用便签本回答一个问题,而谷歌要花几分钟才能找到正确的结果。
而“正确”的结果是最重要的一点。您会在互联网上找到各种问题的答案。他们中的许多人都错了。当您运行自己的暂存器实验时,您会对解决方案的正确性充满信心。
暂存器化合物对开发人员的好处。你通过实验来学习。这种体验式学习的一个隐藏好处是,您将来会更好地记住课程。
REPL 和其他实验方法
除了保留暂存器文件之外,还有其他方法可以进行试验。
在非编译语言中,如 Python 或 JavaScript,您可以只打开一个读取、评估、打印循环 (REPL) 来测试一些假设。在命令行上键入python
或node
以立即运行一些代码。
例如,我刚刚用 Python REPL 在不到 30 秒的时间内回答了我的第一个问题(上图):
% python
Python 3.9.9 (main, Oct 20 2022, 08:04:02)
[Clang 14.0.0 (clang-1400.0.29.102)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {}
>>> d['not_a_key']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'not_a_key'
尝试访问 Python 字典中不存在的键会引发KeyError
。
REPL 非常适合回答快速、相对较小的问题。
一个挑战是,一旦您退出 REPL,您的所有上下文都会随之消失。如果您的实验需要一些设置和迭代,最好将该设置保存在一个文件中。
使用便签本
让我们使用便签本来回答其他两个问题(在 Python 中)。
将日期时间转换为 ISO 字符串并返回
这是我学习 ISO 字符串的便笺簿。这些字符串是跨语言和国家/地区共享的日期和时间的标准格式。
首先,让我们尝试将日期时间转换为 ISO 字符串。我将创建一个 Python 日期时间,然后使用标准库函数查看我可以使用哪些方法dir()
:
from datetime import datetime
utcnow = datetime.utcnow()
print(dir(utcnow))
有一种isoformat
方法看起来像我需要的!让我们更新scratch.py
来测试一下。
from datetime import datetime
utcnow = datetime.utcnow()
iso = utcnow.isoformat()
scratch.py
现在,让我们通过使用 Python 中的交互式标志运行我们的文件来获得一点乐趣-i
。
看,我们可以进入我们程序的运行时,看看我们变量的值是多少。utcnow
并且iso
似乎按预期工作,并且它们参考了同一时间。
要回答问题的第二部分——从 ISO 转换回来——我想看看datetime
。看!有一个fromisoformat
方法。
我们再更新scratch.py
一次来测试一下:
from datetime import datetime
utcnow = datetime.utcnow()
iso = utcnow.isoformat()
from_iso = datetime.fromisoformat(iso)
assert utcnow == from_iso
回到命令行,当您运行 时python scratch.py
,您看不到任何输出。成功assert
并且不会引发错误!
我们很快回答了这个问题,学到了很多东西(可能比从 Stack Overflow 复制粘贴更深入),并且我们有我们理解的工作代码。
探索未知的图书馆
让我们以csv
图书馆为例。它是标准 Python 的一部分,所以我们可以直接将它导入我们的暂存器。
如果我们转到csv 文档并复制其中一个示例,我们可以尝试一下:
import csv
with open('eggs.csv', 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
但现在,我们可以进行更改scratch.py
以了解 CSV 库的工作原理。
import csv
with open('eggs2.csv', mode='w', encoding='utf8') as csvfile:
spamwriter = csv.writer(csvfile)
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
愚蠢的例子
这些都是简单的例子,但它们已经展示了暂存器的强大功能。
在更复杂的应用程序中,暂存器可能是天赐之物。您可以使用它们以可重复的方式设置复杂的案例。编写暂存器来重现错误是您可以使用的最佳调试模式之一。
从简单的问题到复杂的调试,暂存器都是很棒的工具。随着您更好地使用它们,您将成为更好的开发人员。
每日清单
我每天早上都会为软件开发人员写一些新东西。