1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-28 12:02:19 +00:00
lmpythw-zh/ex1.md
wizardforcel daa2b88efa ex1
2017-08-10 16:57:54 +08:00

63 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 练习 1流程
> 原文:[Exercise 1: On Process](https://learncodethehardway.org/more-python-book/ex1.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
软件开发世界中有两种类型的流程。首先是团队流程,这是 Scrum敏捷或者极限编程。这些流程旨在帮助一群人合作开发大型代码库而不会相互干扰。团队流程指的是每个人如何协调代码行为标准报告和管理监督。通常这些团队流程归结为
+ 制作待办事项的列表
+ 执行列表上的事情
+ 确认正确完成了它们
许多团队流程的错误就是他们试图控制对个人更好的个人流程。极限编程XP流程在这方面可能是最糟糕的甚至指出每个程序员都有另一个程序员观察他们的工作并在文本编辑器显示一些错误的时候向他们喊叫。我强烈反对不在某些教育背景下将个人流程元素强加于人的流程。它侮辱了我们的专业精神创造一个独断专行的环境不会促进创造力或质量。在教育环境中规定学生使用特定的个人流程方法是必要的但在工作环境中不是。例如只有他们是一个初级或新手程序员需要学习我才强制某些人结对编程。团队流程应该是这样每个人都能够工作但他们需要在所需的质量水平完成工作。
另一种类型的流程是个人流程,我从画家,作家和音乐家那里得到这个想法。作为一个专注质量的创意人士,我正在开发一个流程,帮助你以一致的方式进行工作。事实上,一个业余画家,音乐家或作家的标志,代表了这些人不解它们的流程。通常声称没有创意的这些人实际上相反;他们只是不知道这件事,因此不断把它弄错。大多数其他创意学科都制定策略,帮助他们从概念中创造完成的作品,而不会半途而废。对于画家来说,这是一种方法,将绘画的问题分解为逻辑步骤,来确保更有可能成功。对音乐家来说,这是一个类似的流程,结合了平衡做法,保持他们所选的音乐风格的结构。对于作家,他们的流程是构建自己的作品的一种方式,使其自然流动并且没有漏洞和逻辑不一致性(大多数电视编剧似乎完全没有做到)。
对于软件,你的个人流程需要是某种东西,能够完成以下任务:
+ 确定可行的想法。
+ 让你开始了解这些想法,看看他们是否会工作,并迅速改变它们。
+ 在许多工作会话上逐渐优化你的想法,来避免问题或使你能够轻易恢复。
+ 确保你的想法的实现的质量,以便你以后不会被 bug 阻碍。
+ 确保你可以与他人合作(如果你愿意)。
请注意,我如何说,你不必与他人合作。自从开源以来,创建软件的概念就包括了对社区的过高要求。如果你不想与别人分享或合作,那么你侮辱了它们的存在,并且被认为是一个反社会的家伙。问题是很少有创意活动是在小组中开始的,通常在小组中开始的创意活动最终都没有创意。这种创意火花通常是,一个或两个人有了一个想法,然后从无到有实现了它。制造一个最终产品,如书籍,电影和专辑,可能需要一个庞大的团队。许多其他的创作活动可以独立完成,如绘画或大多数视觉艺术。
你永远不会找到一个艺术学校,它要求画家只能在团队中创作一幅画。软件不像绘画和写作一样,不是独立的创作流程,没有任何理由是这样。软件是一个模块化的学科,这意味着你可以自己创造一切,而其他人仍然可以使用它,即使他们永远不会和你谈话,永远不会写程序。你可以是一个十足的混蛋,人们仍然可以使用你的软件。写作和绘画都是一样的。有很多品行不端的作家,画家和音乐家,他们仍然受到数以百万计的人的崇拜。
如果你按照个人流程开始工作,有人试图告诉你需要分享,或者你是一个反社会的混蛋,那么他们就是在骂你。人们有权保持隐私,独自一人做自己的事情。要求你为较大项目做出贡献的人,似乎只有那些启动这些较大项目的人,似乎都在赚钱。在这一点上相信我,我已经为软件世界贡献了巨额资金,我还去参加会议,但人们说我不是一个贡献者,因为我没有为他们的项目编写代码(尽管他们从来没有帮我做过一件事情)。
在这本书中,当我说“流程”的时候,我的意思是个人流程。我很少涵盖直接关于与他人合作的任何事情,因为有一堆书已经涵盖了你应该如何与他人合作。有很少的书籍可以帮助你按照自己的个人流程工作,并为你定义处理什么,以及为什么。对于你想要专注的事情,自我为中心、贪婪、反社会或者暴虐都没有任何错误,所以你可以在你所爱的东西上做得更好。
## 挑战练习
练习实际上是写下你的想法,以及你似乎有什么问题。在这个阶段你可能不知道你的工作方式,因为你不是很有经验。为了帮助你,我编写了一个问题列表:
+ 长时间处理项目时有问题吗?
+ 你是否倾向于编写有缺陷的代码,而不知道为什么?
+ 你热衷于编程语言,但从来没有实现过任何东西?
+ 你不记得 API 吗?我也是啊
+ 你是否感到自卑或像会被抓住的骗子?
+ 你担心自己是否是一个“真正的程序员”?
+ 你不知道如何选取一个想法,将其从零开始变成代码?
+ 你有入门的问题吗?
+ 你在混乱的环境中工作吗?
+ 你是否完成了你的项目的第一个实现,不知道如何更进一步呢?
+ 你是否在代码的顶部继续插入代码,直到产生了巨大的混乱呢?
想想这些问题,然后尝试写下你在处理项目中所做的事情。如果你没有工作经验,请写下你认为应该在项目中做什么。
## 研究性学习
+ 再写一些这样的问题,然后回答他们。
+ 问其他你可能知道的程序员,他们的流程是什么。你会发现他们可能不知道。
## 深入学习
要记住的是,人们说他们的流程是什么,和他们实际做什么,可能是截然不同的。我们人类倾向于使用一种比现实更积极,更合乎逻辑的方式记住事情。在这本书中,你将打破这种习惯,并使用外部记录的指标(可能是屏幕录像)来确定你做什么。这不是你应该永远做的事情,但是当你提高编码技能时,这是一个很大的帮助。但是,当你询问一些其他更成功的程序员,它们的流程是什么,要记住,他们没有这样做,很可能他们告诉你的不是他们做的事情。如果你能找到一个更有经验的程序员,愿意在工作时记录他们的屏幕,那么比起询问他们做什么,这可能更有启发意义。我建议去观看其他程序员的屏幕录像,只是看看他们如何处理问题并记录笔记。