构建可扩展Python库:赋能开发者编写代码的技术实践
让开发者编写代码(PyCon India 2019 主题演讲)
演讲者:Ines Montani @_inesmontani
关于某机构
- spaCy:用于工业级自然语言处理的开源库(10万用户)
- Prodigy:为机器学习模型创建训练数据的标注工具(2500+用户)
- 某机构:专注于人工智能和自然语言处理开发者工具的软件公司(6名开发者)
核心理念
开发者终归要开发。好工具帮助人们完成工作。你不需要替他们完成工作。
- 最差的开发者体验:那些试图成为“完全集成解决方案”的工具。
- 更好、更便宜、更容易。
库的可扩展性
- 所有库都是可扩展的吗?毕竟人们用它们写代码。
- 有些库比其他的更可扩展。库并不总是提供可组合的基元。
案例:词形还原
- 原句:
are, going, swimming, should, go - 目标:
go, swim
库是否应该处理这类问题,以免用户重复编写相同代码?
- “这类问题”的集合可能比你想象的要大,而且不断增长。
支持格式的陷阱
- 初始支持:
.json,.CSV,.TXT - 增加:
MYSQL,SQLITE - 用户问:它支持MongoDB吗?
- 结果:库不断增加对新格式的原生支持,负担越来越重。
跳出框架思考
- 问题:你的工具能与X集成吗?
- 更好的方法:开发者能在Python中与X集成吗?如果开发者能自助解决问题,他们会快乐得多。
实用技术建议
- 回调函数
- 函数注册表
- 单分派泛型函数(PEP 443)
- 入口点
- 避免I/O操作
一个可扩展的设计模式
function registry (and entry point)
↓
let user do I/O
↓
iterable of dicts (list, generator)
↓
callback function
常见质疑与回应
- 质疑: 但这看起来太复杂了!简单的系统演示起来容易得多!
- 回应: 尝试邀请他们的工程师参加演示。这对双方是双赢。
- 质疑: 但我们想赢得客户,并尽可能多地提供功能!
- 回应: 如果你销售“全部或没有”,用户如果不想要“全部”,就只能选择“没有”。
- 质疑: 但我们希望工具易于学习。用户为什么需要知道所有这些其他Python知识?
- 回应: 背景知识容易学习,它具有通用性且有很好的资源。难以掌握的是工具特定的知识。
- 质疑: 但这不具有排他性吗?不会编程的人怎么办?
- 回应: 如果工具是可编程的,他们仍然可以从生态系统中受益。(例如,通过图形界面使用由可编程工具构建的模型训练器)。
编码者与非编码者?
- 让技术对与你不同的人变得可访问 ≠ 替他们想到他们可能想要的一切并全部提供给他们。
- 不要将世界划分为“编码者”和“非编码者”。
来自开源的启示
- 开源工具一次又一次地击败了闭源软件(尽管面临巨大劣势)。
- 为什么?因为它们是可编程的。
- 赚钱和构建闭源系统没问题。但要吸取这个教训。
结语
- 某机构网址:explosion.ai
- 推特:@_inesmontani
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码


浙公网安备 33010602011771号