多年前我在做技术支持。因为这些C/C++编译成的二进制文件出的问题都很复杂, 所以当年维护的时候特别艰难。你们年轻的一代可能并没有意识到这些,不像在VMs中运行的现代语言,这些库可以完全访问原始的系统内存,并且可以用与根本原因相距千里的恐怖的内存段异常将整个服务器轻易地搞垮,几乎不给你留下一丝线索。
由于这种复杂性,我们支持技术的一个常见活动是集中批评代码的缺点,不波及代码的开发者。我当然感受到过沮丧。我的意思是,真的很沮丧。
我花了一段时间明白了正是这些困难的问题促使我学到了相当难的东西。我曾经深入的研究过 Microsoft C++的运行时的堆模型,搞明白了缓冲区越界是如何造成安全漏洞的。我想出多种方法通过使用调试器功能去复制悄悄进行的多线程竞态条件,并且教自己程序习语以避免出现这些问题。只是没有其他的方法可以追捕到生产问题。并且我在不就之后很擅长这些。
既然我回顾了那个时候,我想做的只有感谢那些马虎或者临时失效为借口(或者诸如此类的事情)的开发人员,他们给了我去学习所有问题的机会。这是一次很好的经历。不过还有一个没什么用的,当我回顾作为软件工程师的早年生活觉得后悔的一件事时,我希望我能够更乐在其中。
这是一次很好的经历。不过还有一个没什么用的,当我回顾作为软件工程师的早年生活觉得后悔的一件事时,我希望我能够更乐在其中。
这也是我如今想知道的事情——我是否仍然漏掉了一些事情?是否有一个让软件工程师生活更好的法测(最好是一个算法)?
TDD 和 JUnit的创造者,做了一个叫做「轻松工作」的不同寻常的演讲,在演讲中他谈论了自己多年来作为软件工程师的生活和他一路上学到的东西。我对这些很感兴趣,因为我觉得我可能会为自己作为一个程序员对个人幸福的追求找到一些线索,并且我没有失望。
很棒的引言。继续读下去!
什么是放松地工作,它和软件工程师的生活有什么关系?
放松地工作就像函数程序设计里的monads :它很难定义,多方面的,无形的,却是不可否认的真实的。当我们有“我在这可以的,我是谁,做我在做的事情”的想法时,Beck说。“有太多事情要做,但是我不可能完成所有的事情”的想法可以免于担心、痛苦和躁动。这是对我们自己和同事的信任。平静的基本意识是让我们完全集中注意力在工作上并达到我们最大的潜能。
我突然想到没有优秀的管理能力是不能实现这些事情的。当你有合理的截止日期、有用的资源和明确的目标你会觉得放松。对此我很感激——Conductor已经将它作用在一起。
但是放松地工作的最后是关于我们:程序员。这些年来,我们养成了习惯——和我们的同事相互合作的方法,我们怎样认识自己工作等等。有一些比起其他的更有益于放松地工作。例如,Beck呼吁我们保持信任:与我们的经理和同事沟通切实的期望,有责任感——我们都会好的;
Beck谈论到当他没有得到交流计划的延误和其他问题的提示时会产生焦虑,而他获得安逸是当他对于问题更开放时。从我个人经验看来,好的开发者倾向于这种有预见性态度。
他们能够传达坏消息并且承认错误。这是成熟开发者的标志。说的好,Kent!
好的开发者应该有这种即将到来的态度。他们能够传达坏消息并且承认错误。
放松地工作是快乐的
我们的Conductor有很多有趣的东西:举几个例子,这里有Nerf枪,Bieber-Buscemi(长篇故事)和可以随时取用的桶装啤酒。这些东西确实让Conductor成为工作中古怪有趣的地方。(而且这里真的很棒。)Beck还说,有比这些更深刻的东西——快乐。他指出,并不像有趣,是一种短暂感觉,快乐是一种深层的感情——持久并且非常令人满足。愉快的工作促成生产效率的提高,更好的形象,当然还有快乐本身。
发现快乐是作为程序员旅程的一部分(除了享受快乐,咄!)。并且它会在你对它期待最小时发生。Kent Beck说你可以和其他人有一个真正严肃的、充满冲突的激烈的讨论,并且从中得到快乐,即使讨论本身并不有趣。Seth, 我们的CEO,可以证明这件事——当你加入Conductor,你会免费获赠Fierce Conversations,并且你新的招聘计划会鼓励你去练习使用它们。
Kent Beck说你可以和其他人有一个真正严肃的、充满冲突的激烈的讨论,并且从中得到快乐,即使讨论本身并不有趣。
一个发现快乐的很棒的方法是在一个你可以做自己的地方工作。我曾经在一个公开表示不喜欢敏捷方法的公司工作,这使我懊恼不已。当时我的经理明确指出不允许工程师和潜在用户谈话,试图消除“分心”。所有我被允许做的事情只有根据说明书完成特性,他说。不能与任何工程外的人谈话。这让我很不开心。
因此我们不能为用户反馈得到任何的官方支持,但是我们围绕这个找到很多方法。我们小组和一对售前和一个专业服务人员交了朋友。我们有频繁的讨论和即兴演示。很多好主意出现。浪费被消灭在萌芽状态,精益的风格。和一小群未来的用户一起工作,我们搭建一些我们知道他们会发现有用的东西。我们最后创造出来的东西看起来一点也不像最初的说明书(充满感激)。但是,当知道我们有多少努力不被认可,这仍然是一件苦忧参半的胜利。
最终我要另寻他处,于是我到了Conductor。这真是一个挑战。我做的第一件事是上了公司赞助的TDD课程(竟然来自一个Kent Beck的前同事)。我有没有提到是因为我的前一个工作对测试感到气馁的?没错——根据一些数学运算,如果你做了较少的测试相同数目的键入能给你更多特征。让我重复一下:我看见了管理人员积极地鼓励开发者写测试!
但是我在Conductor这里,在XP刷新后,我发现Conductor是个你不仅允许并且被鼓励去和客户通话并和你的用户变得熟悉的地方。这是一个地方我们经常重做并且演示我们工作的地方。我们理所当然地得到定期反馈。这里充满活力,使人振作,让人精力充沛。现在这是一个令人愉快的形势变化。工作场所的选择有很大影响。
这里充满活力,使人振作,让人精力充沛。现在这是一个令人愉快的形势变化。工作场所的选择有很大影响。
放松地工作是随和的
我提到了在早期当我还是一个支持工程师时颇受开发者的阻挠。你可以责备我吗?当他们舒服地坐在他们的椅子上写代码的时候,我查找并修复他们的漏洞到深夜。他们把东西弄乱而我是那个走进并清理混乱的英雄。戏剧性的。我无数次拯救了世界。我认为。
Kent Beck记得在他年轻时有相似的看法。他的建议是避免浪费精力在无根据的装腔作势。你觉得编程让你像一个英雄和编程让你有一个程序是完全不同的,Beck建议。与其把时间浪费在这种滑稽事情上,我们可以做更酷的事情:比如执行代码重构,写博客帖子和实现新的好工具。让时间轻松且愉快。“我们喝咖啡吧”Beck建议。有的人把这个标语放在保险杆贴纸上。
你觉得编程让你像一个英雄和编程让你有一个程序是完全不同的,Beck建议。
捡起众所周知的罐子
“如果你在沙漠里并且看见一个小罐头在地上将会怎么样?”——beck说,当我们遇到其他人以我们不认同的方式工作时会回想起这些例子。我们可能会说,或许处于失意,或许纯粹出于习惯,“谁对自然这么不尊重把小罐子扔在这……(含糊地嘟囔)”我又有年轻时我自己做技术支持时的画面。多年来我见过了很多众所周知的小罐子在源代码中,在那时我真的是一个环保主义者。我没有意识到的是我身上的负面影响。
由于知道我们想让事情变得更好,Beck说这是我们不伴随“戏剧性”地捡起罐子的人的完美地自然的表达。我们倾向于评价别人的工作,他主张,要平等地评价我们自己。对其他人更宽容,相比之下,将会引导我们变得更能自我宽容,反过来开启我们接受更多有挑战性工作的能力。
对其他人的不足之处抱有同情心让我们有更大可能从自己的失败中学习,帮助我们成为更好的程序员。下一次在代码中遇到铁罐时,“把它捡起来”,Beck说。不要紧。就像这样。
我们倾向于评价别人的工作,他主张,要平等地评价我们自己。对其他人更宽容,相比之下,将会引导我们变得更能自我宽容,反过来开启我们接受更多有挑战性工作的能力。
在工作上更放松
过了很长一段时间我才认识到作为支持工程师对我的事业如何有益,因此我对Kent Beck放松地工作中的东西很熟悉。我也发现这个演讲很激励人心。
首要的是,可以肯定的是另一个程序员(我长时间的行为榜样)在他生活中作为软件工程师有过类似的经历并且得到类似的结论。第二,从陷于大部分的机器和他们没感情的语言的忙碌高压的工作中休息一下是很好的,然后停下片刻去探索人文科学,即使对我们大部分是内向且腼腆的极客,这也是一个礼物。读完所有Kent Beck的科技书以后,我为涉及到他是人类并且有人类的想法方面感到开心。
-
工程师
+关注
关注
59文章
1566浏览量
68433 -
程序员
+关注
关注
4文章
949浏览量
29759
发布评论请先 登录
相关推荐
评论