这篇文章是为英语专业的学生、书虫、文学爱好者以及那些拥有人文背景的人而写的,他们有时会纠结于“那么你用你的英语学位做过什么吗?”这个问题。它也写给那些问过非 STEM 背景的同事这个问题的人,他们一直困惑于一个人怎么会从心理学专业转到 Python。
事实是,技术和人文科学并非如此遥远;事实上,我们英语专业学生在论文中完善的许多概念在我们作为开发者的日常生活中得到了应用。本文不是关于程序员可以从人文专业学生身上学到什么,反之亦然。它旨在展示这两个学科之间的重叠之处;研究它们的兼容性以及它们如何相互补充。
在成为德克萨斯大学奥斯汀分校的开发人员之前,我想成为一名英语教授。我于 2007 年在奥本大学获得了英语学士学位,在那里我做了很多技术方面的事情。我曾是一位教授的专业网站的网站管理员,该网站在 Dreamweaver 中维护并存储在 Zip 驱动器上。我还曾在技术中心工作,在那里我录制视频,教教授们如何使用 Blackboard,并帮助他们以我认为很酷的方式将技术融入课堂。
当我开始在德克萨斯 A&M 大学攻读英语硕士学位时,我仍然想成为莱西教授,并撰写关于文学的学术文章。但再一次,我将自己引导到技术角色。我在英语技术中心工作,而不是担任助教,我帮助教职员工录制视频、制作视频、使用 Moodle(Blackboard 的开源版本),并找到将 Google Docs 融入课堂的方法。我还为 World Shakespeare Bibliography 工作,在那里我研究了关于莎士比亚的学术文章,然后撰写了摘要。我必须使用一些 markup,以便管理员可以将我的摘要复制粘贴到网站中,但我当时不知道我正在进行某种编码。
2009 年,我参加了一个关于 TEI:文本编码倡议 的研讨会。TEI 是一种特定于手稿的 XML 标记语言。它有许多很棒的、特定的标签,用于出版商和关于书籍的其他信息,但它也提供了谈论正在为网络转录的手写手稿的方法;例如,您可以在标记中表示某些文本被划掉并替换为不同的措辞。我想使用 TEI 制作一个网站来谈论简·奥斯汀的同人小说。
但我觉得我不知道该怎么做。我真的对技术很感兴趣,但不是很精通技术。我不知道如何注册 URL,我不明白 CSS 是什么,而且即使有教程可以给我用,我也不知道如何找到它们。我还认为这太难了。在我开始之前,我就患上了 冒名顶替综合症。所以我写了一篇关于简·奥斯汀同人小说的论文来代替。
猜猜来源
让我们玩一个名为猜猜来源的游戏。我将放上一段来自风格指南的引文,你可以猜猜它来自哪里
句末句号后应使用两个空格。
这是来自 PEP8,还是 Strunk & White?
我讨厌 PEP8 中的这一行,因为在您的常规写作中,您永远不应该在句号后放两个空格。不要这样做。这来自等宽字体和排版时代,我们不再在互联网或印刷材料中使用等宽字体。
代码中除外。所以,在编写代码时遵循这条规则,但在其他任何地方都打破它。编写代码与撰写研究论文或文章有关的第一个线索就在 PEP8 中,Python 代码的风格指南:“在书写英语时,请遵循 Strunk & White。” PEP8 甚至没有引用 Strunk & White。它假设您知道这意味着什么。(对于那些不知道的人,Strunk & White 指的是 The Elements of Style,《英文写作指南》,最初于 1959 年出版。)
关于 Strunk & White 的更广泛的观点是,这是一本旨在帮助人们写出更清晰、更简洁、更一致、更易读的英语的指南。PEP8 也是一本旨在帮助人们编写更清晰、更简洁、更一致和更易读的代码的指南。
情节驱动开发
让我们来谈谈测试,因为测试是文学课上的一些概念可能会派上用场的完美例子。也许您还记得 故事弧 的基本知识
- 开端是您了解角色是谁、他们在哪里以及正在发生的事情的基本情况。
- 发展是问题被引入的地方,我们开始体验将我们引向高潮的事件。
- 高潮是情节中最激动人心的部分。这是改变主角命运的事情发生的地方。在 《傲慢与偏见》 中,这将是达西先生最终向伊丽莎白求婚的场景,然后她告诉他,即使他是世界上最后一个男人,她也不会嫁给他,然后她开始质疑自己。
- 下降是事情开始解开并就位的地方。
- 结局将一切都用一个整洁的小蝴蝶结系起来。结束。
我们也可以在测试中利用这个弧线,它被称为 弗雷塔格金字塔。事实上,这首先给了我灵感,我在 DjangoCon Austin 上做了一个演讲,本文就是基于此演讲。我在 Harry Percival 的 PyCon 测试研讨会 上,意识到他给出的功能测试示例是弗雷塔格金字塔应用于测试的完美示例。功能测试有
- 开端:哈利向我们介绍了伊迪丝,她听说过一个待办事项应用程序。
- 发展:伊迪丝进入应用程序,找到她的方向,并决定在她的待办事项列表中输入一个项目。
- 高潮:伊迪丝的命运永远改变了。她执行了将项目添加到她的待办事项列表中的关键性、决定性的行动。
- 下降:她输入了她的项目,她看到它已被输入并为她保存。
- 结局:伊迪丝很高兴,并且要回去睡觉了。
在哈利编写任何功能测试之前,他首先写出了这个完全遵循弗雷塔格金字塔的用户故事。这样,他就知道用户需要通过他的网站采取什么路径,他们会遇到什么,他们会做什么,以及这一切将如何解决。他可以编写测试来测试所有这些步骤是否都发生了,然后他可以编写代码来通过这些测试。
伊迪丝在应用程序中采取的路径是她的用户故事;伊迪丝本人是一个角色。在另一个世界中,伊迪丝可能是小说中的主角,而这段特殊的旅程可能是我希望在其他方面更激动人心的故事中的一个章节。事先研究过角色发展和情节发展,有助于编写完整且令人信服的用户故事。程序员需要对他们的代码应该做什么以及应该按什么顺序发生充满信心,才能有效地对其进行测试。
用户故事和功能测试并非终点。我们希望伊迪丝在应用程序崩溃时作何反应?我们希望她像在希腊悲剧中一样撕扯头发、撕裂衣服吗?我希望不是。我们可能希望为她提供纠正错误所需的工具(如果可能),或者让她放心,我们知道出了问题,并且我们已经在处理它了。以下哪一个是更令人安心的错误消息?
确定我们的代码可能在何处中断、构建检查并返回有用的数据需要创造性思维。任何程序员都可以返回错误消息,但要撰写一条有帮助的(而不是令人望而生畏的)错误消息,则需要一位既是创造性思考者又具备出色书面和口头沟通技巧的程序员。
当您编写好的测试时,您正在进行世界构建:可访问性需要同理心,而同理心需要想象力。您可以通过将自己置于使用您的代码的人的角度,来利用您沉浸在书中并认同主角时的那种美妙感觉。想象他们的挣扎和挫折。为他们创建一个角色。修复那些阻碍或惹恼他们应用程序的事情。
但回到功能测试。您知道这还像什么吗?大纲。
您知道还有什么看起来像大纲吗?基本上,所有 Python 代码。Python 比英语专业学生更喜欢空格和缩进以及漂亮的格式。
Python 代码实际上使用了与许多其他书面作品相同的格式,例如新闻报道、博客文章、小说、研究论文,甚至 艾米莉·狄金森手写的椰子蛋糕食谱。您的函数定义就像标题。而您的 文档字符串 就像研究论文的摘要,或最喜欢的小说新版的前言。文档字符串会告诉您一些关于即将到来的内容的信息,并让您一窥作者或程序员的想法。然后是中间的一切:函数的主体,文章或故事的段落。最后,您得出结论。您返回一些内容,并且您在此特定函数中的旅程结束了。
可读性很重要
一段写得好的代码将是可读的,但我们所说的可读性到底是什么意思呢?机器不需要代码是可读的,但在 PEP20:Python 之禅 中,蒂姆·彼得斯非常清楚地表明可读性很重要。计算机或编译器(或其他任何东西)根本不在乎您的代码是否一团糟,只要它能工作。但您的同事会在乎。后来者会在乎。与您分享工作的人需要您的代码是可读的。
编写可读的代码需要同理心,并且意味着您关心您的程序员同事。可读且认真注释的代码也有助于未来的程序员理解您的挣扎,或者您为什么以您的方式做出决定。注释甚至可以帮助您在自己的代码中重新定位自己。我的一个朋友曾经说过:“注释就像给自己的情书。”一位同事喜欢说,注释是让您在凌晨 3:00 接到电话说出了灾难性的错误时保持理智的东西。
在 《外乡人》系列 中有一个很好的例子,这基本上是一个完美的系列小说。《外乡人》系列讲述的是一位二战护士意外穿越时空回到 18 世纪苏格兰的故事。故事包括战争、浪漫和精彩(现在也是一部很棒的电视剧,但这并不是重点)。在第五本书 《烈焰十字架》 的结尾——我保证这不是剧透——我们的女主角克莱尔在 18 世纪,并且是方圆数英里内最有知识的医学专业人士。她治疗了一个最终死亡的人,她非常确定这是因为她给了这位病人他们过敏的药物。她纠结于是否在日记中写下发生的事情。在该系列的前一本书中,当镇民将她的医学技能误认为是魔法时,克莱尔被当成女巫审判,因此她变得犹豫是否要写下任何可能在以后被用来对付她的东西。
克莱尔说:“未来的医生在这里会面临同样的困境;是进行可能危险的治疗,还是让可能已经获救的病人死去。那会是谁呢?我擦了擦笔,心想……”然后她思考了一会儿她有多孤立,医生有多少,医学院校不多,她得出结论:“我坐直了身子,打开我的书。我蘸了蘸笔,开始写下必须存在的文字,为了跟随我的不知名的医生。”
这就是我们编写可读代码的原因:为了跟随我们的不知名的程序员。
结局
当我在大学时,我有一个室友,她是一名新闻专业的学生。妮基和我互相编辑对方的论文,我会尝试让她使用更多的形容词来使她的写作更令人兴奋。她会告诉我删掉我华丽的描述,直奔主题。大多数作文风格指南以及 PEP 8 和 20 都同意妮基的观点。
“省略不必要的词语。”
“简单胜于复杂。”
“有力的写作是简洁的。”
“稀疏胜于密集。”
这些是来自 PEP20 和 Strunk & White 的训诫。我不会具体说明哪一行来自哪部作品,因为这并不重要(而且Python 之禅的爱好者无论如何都能挑选出来)。但重点是它们是如此相似。好的写作是简洁、清晰和简单的,并且能够直奔主题,无论您是在编写一段代码还是写一篇文章。我可以将Python 之禅中非特定于代码的行通过电子邮件发送给我的作文导师朋友,他们会立即打印出来并分发给他们的班级。事实上,我应该这样做。
我们被称为编码员、程序员或开发者。我们整天都在做什么?我们编写代码。我们阅读拉取请求。我们编写测试。我们阅读其他人的代码。我们编写注释。我们是读者和作者。在阅读和写作文学课程中学到的教训与我们作为代码的读者和作者非常相关。
“你用你的英语学位做过什么吗?”我经常被问到。是的,我每天都在使用我的英语学位。
月度
精选文章,重点介绍 Opensource.com 的首次投稿者。
4 条评论