你好
我是大卫·洛德。除此之外,我还是 Python 编程社区的成员和Python 软件基金会研究员。我维护并为许多项目做出贡献,但我最出名的身份可能是Pallets开源组织的首席维护者,包括Flask 、 Jinja 、 Click 、 Werkzeug 、 ItsDangerous和MarkupSafe 。在那里的某个地方,我什至还设法找到了一份工作和某种社交生活。
我多年来一直说我想写作——以至于我多次提起这件事可能已经惹恼了我的朋友们。这总是一个循环,我找到一个最终开始的理由,陷入过度思考,并最终放弃该项目。我想写,我想分享,现在我终于真正尝试了。
但首先要写什么呢?我认为介绍总是合适的;如果有人不知道我是谁,为什么要关心我要说的话呢?这就是我成为今天的软件工程师的原因。这是荒谬的删减,但希望它有点有趣。
早期的
我很早就知道我想与计算机一起工作。事实上,我妈妈最近发现了一本她在 1996 年我上二年级时保存的学校日记。提示是“你长大后想做什么?”我回答说:“我想成为一名计算机奇才!”在写完这篇文章的几个月内,我从每月的读书俱乐部中挑选了“制作你自己的网页!儿童指南” ,开始了我的编程之旅。
但我认为它开始得更早。我父亲拥有他通过工作收到的第一批 ThinkPad 笔记本电脑之一。他会在家里的办公室里打字,而我会坐在他旁边玩乐高积木并观看。我想这一直困扰着我——电脑是我父亲使用的最酷的东西。几年后,他升级了,我必须保留原来的 Windows 3.1。
我们对它进行了修改以安装声卡并配置“游戏模式”。我玩了Gizmos and Gadgets 、 Glider 4和JumpStart 3rd Grade 。我什至开始学习 HTML (谢谢你,制作你自己的网页!)一年后,我的父母让我学习基础编程,虽然我不记得了基本这是我对游戏编程的介绍。
对我学习编程影响最大的是六年级后的那个暑假。我在营地的朋友用Game Maker 4制作了一款多人游戏。 (我做出了一个不太酷的决定,设计一个有关太阳能的网站。)比游戏本身更令人兴奋的是,它还在 Game Maker 的网站上得到了推荐;每个人都可以玩它,甚至可以修改它。 (我刚刚意识到这是我对“开源”的第一次介绍。)我如饥似渴地阅读了教程、文档和示例项目,这样我就可以开始构建自己的项目。我在 Game Maker 论坛上注册了,这样我就可以帮助其他有问题的人。学习也是如此;当我有足够的信心在“高级”类别中发帖时,我感到非常自豪。
现在回想起来,我希望当时我就了解备份,更不用说版本控制了。遗憾的是,我没有早年创造的任何东西,只有回忆。
大学
高中时,我创办了计算机编程俱乐部,加入了魔方俱乐部,并且是首届机器人俱乐部团队的成员。我申请了太多的大学,最终选择了加州大学圣地亚哥分校,在那里我已经被他们高度评价的计算机科学与工程项目录取了。
很难回忆起有多少课程实际上对我有用,这是另一篇文章的主题,但更让我印象深刻的是所有课外活动。我加入了极限飞盘团队,保持活跃并结识朋友。我还加入了学生会,担任文件和网站管理员,并在医学院商业应用程序开发部门找到了一份工作(尽管我们将其称为 SoM BAD,说起来更容易、更有趣),维护他们的数据库和维基。
没过多久我就意识到我只是在课堂上学习了一些Java和C(还有很多计算机科学),感觉自己不知道如何进行很多实际的编程,所以我开始寻找自己,并且找到了Python。
Python
我不太记得我是如何选择 Python 的。但我做出这个决定的部分原因是,与我考虑的其他语言相比,Python 更容易快速阅读和理解。我认为Python 3.1刚刚问世;我什至没有意识到 2 和 3 之间的选择有什么大不了的,所以我只是选择了最新版本。我发现了Dive into Python 3 ,它写得非常清楚,然后我发现了 Django 0.8 及其令人惊叹的教程。我喜欢学习和尝试 Python 和 Django 的每一分钟。我被迷住了,当我找到第一份(目前仍然是)工作时,我开始寻找机会在那里使用它而不是 Java。
烧瓶
工作一年半后,我得到了一个疯狂的机会,可以在没有任何指导的情况下,独自从头开始做一个项目。 “我们有这个电子表格,用于跟踪网络上的设备,您可以将其制作为网页吗?”我开始编写 Django 模型;弄清楚他们需要从软件中得到什么,并增强我对后端和前端设计的感觉。
经过几个月的努力,效果非常好!它的成功导致越来越多的功能请求滚滚而来。此时,我已经达到了我所知道的如何使用 Django 的极限——它更多地阻碍了我,而不是让我更容易成长。我环顾四周,发现 Flask 诞生仅几年。那时我还没有真正融入这个社区,所以我没有意识到它和它的作者变得多么受欢迎。大多数情况下,我只是喜欢它的感觉及其支持进一步扩展的最小理念,以及学习和切换是多么容易。
(我将来肯定会写更多关于 Django 和 Flask 的文章。尽管我有偏见,但我并不真正提倡使用一种框架而不是另一种框架。希望从我自己的故事中可以看出这一点,但我取得了成功,并与这两种框架一起成长。)
当我在学习 Flask 和 Flask-SQLAlchemy 的同时编写项目的第 2 版时,我开始更多地参与社区。我在早期的 Stack Overflow 上查找并回答了问题。我关注问题跟踪器,阅读每个新问题和 PR,并观察它们的处理方式。这是我对开源和社区贡献的真正介绍。我开始帮助问题跟踪器,阅读 Armin 的博客,并了解更多有关 Python 2 到 3 过渡的复杂性以及他对项目的想法。
Flask 和其他项目当时似乎处于一个缓慢的时期。即使在那时,许多维护者已经听腻了“什么时候会有新版本”的陈词滥调。我发布了一个很长的答案,详细说明了我观察到的有关该项目、维护人员和问题跟踪器的所有内容。今天读到那篇文章我仍然感到惊讶,无论是我的写作能力如何,还是它的相关性。
几天后,即 2015 年 10 月 8 日,也就是二年级日记发表 19 年后,我收到了一封来自 Armin Ronacher 的电子邮件,标题为“Flask 1.0”。 “我读了你最近的评论……并想向你传达一些想法。”惊慌失措之后,我开始了一次简短的聊天,最后,我成为了 Flask 的维护者。我从中学到了很多东西,但这是未来几篇文章的主题。
超过
从那以后的几年里,我在这项工作上投入了大量的时间——改进项目、尝试发展团队和社区、使工作可持续、参加会议以及会见 Python 社区中许多很棒的人。除了我的全职工作之外,我还有另一份全职工作维护 Flask 并承担其他开源项目。我是 Stack Overflow Python 聊天室的主持人、圣地亚哥 Python 的组织者以及太多项目的维护者。我因 PSF 奖学金的工作而获得认可。不知何故,我设法保持了一群亲密的朋友,拥有了自己的爱好,并结识了我出色的伴侣艾莉莎。 (编者注:我得到的只是最后的简短提及?显然,我需要重新谈判我的合同。)
保持平衡很困难,而且似乎总是有更多的项目需要跟踪。虽然经历了很多起起落落,但总的来说,我很感谢我所处的位置、我所做的事情以及我认识的人。我不希望这个博客仅仅是一个技术渠道,我还想分享我生活中的有趣花絮,我期待着在这里分享更多内容。