本周在我的收件箱中,我收到了一些很好的读者问题。
我会尝试在这里回答他们,以便每个人都能从回复中受益!
提高您作为开发人员的写作水平
我想知道你在这里和很多旧文章中提出的写作要点。我肯定看到了它的价值,但我怎么知道我在进步呢?
我认为保留博客的反馈循环会更容易一些,因为有些读者总是会参与,但是你对如何自我评估他们的写作有什么建议吗?
学会写好是我对开发人员的首要建议。
良好的书面沟通在我们的工作中非常重要。您需要能够与其他工程师交流复杂的技术主题。您还需要能够采用这些想法并为工程以外的受众简化它们。
为了更好地写作,这是我的建议:
- 最重要的是,练习。经常写。你不需要写很多,但你应该养成写作的习惯。重复练习是培养写作技能和技巧的关键。
- 开一个博客,让你在公共场合写作。没有比直接来自读者的评论和参与更好的反馈了。我认为每个软件开发人员都应该有一个博客。
- 在学习写作方面有很棒的资源。如果您以前从未写过或生疏了,书籍、课程等可能会有所帮助。我可以推荐的书籍:Writing Well、Bird by Bird 和 The War of Art。
- 使用结构来帮助指导您的写作。例如,每当我编写新的 Jira 工单或设计文档时,我通常会遵循摘要、背景、提问、详细信息的模式。我并不总是完全遵循结构,但它确实帮助我将写作分成更小的部分,有助于共享上下文并清楚地揭示问题。
希望这有助于入门!
开始测试
这些年来,我从未深入研究过测试。有什么好的入门书或推荐的方法吗?也许只是构建 hello world 并对其进行测试?
这当然是一种方法!我实际上喜欢从小处着手的想法。增量学习是探索任何新主题的最佳方式。
让我们以这个例子来运行一下。
这是一个hello.py
包含我的 Python hello world 函数的文件:
def hello():
return 'Hello world'
我可以创建一个test.py
文件来添加我的测试:
import unittest
class TestHello(unittest.TestCase):
def test_hello(self):
self.assertEqual(hello(), 'Hello world')
if __name__ == '__main__':
# This is a helpful way to run tests from the command line
unittest.main()
我可以从命令行运行测试python test.py
.
----------------------------------------------------------------------
Ran 1 tests in 0.000s
OK
这是我能想到的最简单的单元测试示例!
但是从这里开始,您可以开始扩展您的 hello 功能。
- 也许您添加了对名称参数的支持
- 也许你允许用户在命令行上输入他们自己的名字
- 也许您构建了一个
Person
类,该类可以包含一个first_name
和last_name
其他可识别信息 -
first_name + ' ' + last_name
如果它们都存在,也许您需要一个函数来连接它们。如果存在,请使用它。否则,使用Hello there
默认值。
在每个步骤中,您都可以在编写实际代码以实现功能之前编写功能测试。然后,尝试用您编写的新代码使失败的测试通过。
这本质上是测试驱动开发的基础。
希望这有助于阐明事物。在实际应用程序中,测试从这里变得更加复杂。但是首先编写测试意味着您的目标是可测试代码,这通常是非常好的清洁代码。
作为反馈的可观察性
您是否认为日志记录/可观察性是反馈循环的好策略?
当然,日志是一种反馈形式。您希望让您的监控尽可能紧密地形成反馈回路。特别是当出现问题时。
也就是说,当我在最近的一篇文章中谈到反馈时,我真正指的是在开发功能时的反馈。为此,没有即时的跳动反馈。
运行您的测试、简单脚本或 API 请求,并反复获取有关被测代码的反馈。这里的关键是,在大多数情况下,您只需几分之一秒即可获得反馈。
可观察性需要更多的跑腿工作。向代码中添加新的监视器/日志,将它们发送到(通常)外部服务,登录仪表板以查看日志显示,可能会处理日志延迟。
您也不希望系统中的日志中充斥着各种小的 DEBUG/INFO 级日志,这些日志用于开发人员反馈,但从未被删除。
经验丰富的开发人员的 Python 入门
作为一名经验丰富的开发人员,我应该做些什么好的 python 入门知识?
老实说,官方 Python 文档非常棒。如果您是一位经验丰富的开发人员,我建议您从那里开始。
甚至还有 Python 文档的特定部分供有经验的开发人员学习 Python。
我也喜欢Corey Shafer关于 Python的YouTube 视频。他非常擅长干净利落地解释概念,毫不含糊。