艾伦方差
“ Java英雄”系列休息了很长时间。 老实说,我想即使有很多人我想把它包括在这里,它也可能会终结于茫茫荒野。 丹是其中之一。 我第一次要求他捐款已经差不多一年半了,与此同时发生的所有事情使我安于不再得到答案的平静。 但是以下内容在JavaOne期间到达了我的收件箱,并且基本上是我的生日礼物。 因此,我今天再次打开Java英雄书,并在其中再加一章! 谢谢丹! 称您为朋友非常好!
丹·艾伦
Dan Allen是开源和标准的倡导者和创新者。 他在Red Hat担任首席软件工程师。 在此期间,他担任Arquillian社区经理,为各种开源项目(包括Arquillian,Ascidoctor,Awestruct和JBoss Forge)做出了贡献,并参加了JCP。 他帮助各种开源项目取得了巨大成功。 他还是《 Seam in Action》(曼宁,2008年)的作者,曾为各种出版物撰写技术文章,并且是国际公认的演讲者。一般
你是谁?
我是一名开源倡导者和开发人员,社区催化剂,作家,演讲者和企业主。 目前,我正在通过领导Asciidoctor项目,通过倡导Arquillian来提倡更高的软件质量来改善文档状态,并且,一般而言,我将尽我所能来做出我所贡献的开源项目及其社区,大获成功。 经过漫长的会议之后,您可能会发现我和社区成员一起喝着Trappist啤酒欢呼雀跃。
您在公司的正式职位?
我与Sarah White共同创立的咨询公司OpenDevise的开源黑客和社区战略家副总裁。
你在乎吗?
与过去的标题相比,我更关心此标题,主要是因为我必须对其进行定义。
一般来说,标题可能毫无意义。 拿我以前的头衔,中间件首席软件工程师。 像这样的所有真正成功完成的职务都是传达员工的薪资等级。 “校长”之后的荣誉是“高级校长”。 那接下来呢“校长?” 我以前是什么? 初级微不足道的工程师? 我们不妨像美国政府那样使用数字等级(例如GS-10)。 至少这是一个逻辑系统。
像许多同龄人一样,我一直在为自己的角色定义自己的头衔。 对我来说,标题的目的是帮助他人了解您的专业和重点。 这样,他们就会知道您何时需要找到他们。 这就是为什么我选择标题“开源黑客和社区策略家”的原因
我生活和呼吸开源,所以标题的“开源”部分很合适。 如果您想讨论有关开源的任何事情,我总是很游戏。
我也喜欢社区,尤其是热情社区。 我一直在思考它,以及如何使其更好地工作。 这就是“社区战略家”一词的来历。
我喜欢让人们对技术感到兴奋,然后在他们发现对技术进行改进或创新的热情时,帮助他们前进。 双方都经历了如此激动而自豪的经历。 在我看来,这种感觉被称为开源。 我只是反复地以“开源黑客和社区策略家”的身份来复制它。 也许有一天,人们会认出我是“串行社区创建者”!
我们这些开源的人也通过我们领导或帮助管理的项目(如果有)来识别自己。 目前,我是Asciidoctor项目的负责人-力所能及。
你会说外语吗? 哪个?
我希望。 我在高中学习法语,但认为这种经历纯属学术性质。 我正在挑战自己阅读法文推文,以重温我曾经知道的内容。
我在外语方面的真实生活经验来自与来自全球的开源社区成员的互动以及在其他国家/地区度过的时光。 即使我听不懂其他语言,也喜欢听音乐般的声音和节奏。 我从聆听中获得了一定的乐趣,而不会分散注意力。
我最喜欢的外语经验是使用《 Arquillian用户指南》的翻译及其翻译。 它不仅使我接触到多种语言(超过十二种),而且使我对一种语言在一个人的身份中所扮演的角色以及对一个国家的自豪感产生了直接的欣赏。
经验也促使我理解Unicode和字体。 我很自豪地说,我了解Unicode的全部内容及其工作方式(至少从编程的角度来看)。
我期待着与翻译合作更多,重新考虑翻译的管理方式,并继续吸收语言的声音和节奏。 也许有一天,我至少会精通其中之一。
您的日常“引导”过程需要多长时间?
一个更有趣的问题可能是“何时?” 因为我保持了一些奇怪的时间。 我的日常目标通常是在太阳升起之前上床睡觉。 这使我的早餐和自助餐可以处理您的午餐。 当然,这全都取决于时区。 正如我的一位同事所指出的那样,我在会议上是非吸血鬼的。
您可能想知道疯狂的时间表是怎么回事。 关于管理开源项目的事情是,您永远不知道某人何时准备好参与。 当有人准备参加时,您需要抓住机会。 他们可能需要一段时间(如果有的话)才能再有时间。 这个人可能在世界任何时区。
说实话,无论如何我也喜欢夜晚和白天。 我享受夜晚的寂寞,然后我经常做一些最好的工作。 其他时候,我只是享受沉默。 我也期待这一天,尤其是在科罗拉多洛矶山脉的景色很清晰的时候。 我在紫色或白色峰顶的背景下做了一些我最好的工作。 您可能会说,我白天和黑夜都汲取了灵感,以培养我的创造力。
在“早上”我只做咖啡的第一件事,但是我每天做几次其他引导活动(例如Twitter)。 我大约需要一两个小时才能浏览自己的电子邮件和Twitter,并在Google+进站。
推特
你有推特手柄吗? 为什么?
当然。 这是@mojavelinux 。
我有一个Twitter帐户:
- 开放
- 连接
- 去探索
- 报告
- 保持联系
当我第一次使用Twitter(超过6年前)时,许多人认为它是荒谬而毫无意义的。 之所以吸引我,是因为它提供了一种无需事先安排即可进行交流的方法。 它有点像一个全局IRC通道,并对其应用了上下文过滤器。
Twitter改变了我开展业务的方式以及与同事和社区互动的方式。 宁愿尝试解释它,我将给出两个示例。
当我们发展Seam 3社区时,我们不仅在等待人们加入邮件列表。 我们在Twitter上寻找了谈论JSF和Java EE的人。 当时最有声音的人之一是布莱恩·里瑟姆。 当他发布有关JSF的反馈或投诉时,我们会通过直接回复他来吸引他。 那把他的帖子变成了对话或设计会议的开始。 当需要雇用某人担任相关职位时,他已经是最高候选人,并且自此成为最高雇员。 有像布莱恩的故事。
很容易得出结论,我们“雇用了我们在Twitter上认识的人”。 这没有抓住重点。 Twitter的公共频道使我们有机会找到对特定技术或平台有浓厚兴趣和经验的人。 如此公开,我们甚至不必知道在哪里寻找对方(Twitter上除外)。 聚会是不可避免的。
Twitter还消除了与您自己的公司甚至其他公司的员工进行通讯的开销。 您只需在Twitter上发布广播,通常会植入一些触发词或标签,然后该人将看到它,或者有人将其传递给该人。 无论哪种方式,您都可以消除雇员目录的整个麻烦。 Twitter上发生了全球性对话,我们都参与其中。 现在打开了。
您总体上关注谁?
首先,我的社区成员。 正如我所提到的,Twitter是我保持社区脉动并与他们进行全天交流的方式。 我关注一些公司和项目的提要,例如GitHub和Java EE,但大多数时候我想知道该帐户背后有个人。
我不愿意跟我认识的任何人进行面对面的交流,无论是面对面的交流还是在线交流。 我也对LinkedIn和Google+遵循相同的政策。
你对推特有个人的“政策”吗?
一种政策是保持拨入状态。我每天至少在我的时间表上耕作一次,并尝试回答我遇到的任何问题。 作为社区负责人,重要的是要出席并参与全球对话。 有几天,我只有在咨询了自己的信息流之后才能确定议程。
我确实确保不让它接管(某种)。 当我发现自己只在阅读或转发而不是分享时,我意识到我需要重新进行创作,以便可以分享一些东西(或稍作休息)。
我非常谨慎地发布和转发有用的信息。 这是我个人政策的重要组成部分。 我使用诸如Klout,“ Twitter提及”标签和新的Twitter分析之类的工具来了解人们认为有用或有趣的内容,并专注于扩展这些主题。 我拨出没有React的主题,因为我尊重追随者的时间。
贵公司是否限制或鼓励您使用Twitter?
公司的政策是,使用您自己的判断。
公共社交网络对开源产生了巨大的积极影响,主要是因为开源既是公共的又是社会的。 这使Twitter对我的职位至关重要。 我们经常在Twitter上发现新的贡献者(反之亦然)。 我们有时也将其用作限制为140个字符的邮件列表(相信我,这是对真实邮件列表中经常出现的论文的一种缓解)。
简而言之,没有Twitter(或类似的东西),我就无法完成工作(在当今时代)。
工作
您的日常开发设置是什么?
一个带有大量Vim和网络浏览器的选项卡式终端。 我所做的几乎所有工作都在这些环境中进行。 由于我一直大量参与AsciiDoc和编写内容的工作,因此我的许多Vim会话都排队了一个AsciiDoc文档。
我在Vim中进行所有的Ruby开发。 我依靠语法高亮显示和自己的直觉作为Ruby IDE。 如果您看到我分割窗户的次数,它会使您感到恐惧。 不要模仿我的工作,它可能效率很低,但是以某种方式对我有用。
当我需要进行一些Java黑客攻击时,我绝对必须启动IDE。 在Vim中编辑Java(无需任何其他插件)只是浪费时间。 我最喜欢Eclipse,因为那是我职业生涯中最先使用的东西。 但是,最近我更频繁地启动IntelliJ IDEA,有时我确实喜欢Netbeans。 当我必须在项目中编辑XML时,我会回到Vim,因为复制粘贴效率更高!
在浏览CSS时,浏览器中的开发工具可以节省生命和时间。 我喜欢在实时会话中制定所需CSS规则,然后将其转移到项目中的样式表中。 一切都始于“检查元素”。
哪种工具可以为您的工作提供最高的生产率?
Vim。 在过去的十年中,我每天都在计算机上使用Vim。 我无法想象没有它的生活。 Vim是我的锤子。
您更喜欢与同事互动的方式?
主要是异步通信,一年进行几次面对面的聚会。
异步通信是邮件列表,社交网络,电子邮件和(开和关)IRC的混合体。 由于我们所有人都有太多电子邮件,因此我与密友的大多数私人电子邮件已被Google+和Twitter的私人消息所取代。 您会惊讶那些私人消息的有效性更高。 当然值得一提。
我们通常在Devoxx和JavaOne之类的会议上会面。 这段时间非常重要,因为这是我们在屏幕名称后面形成人的印象的时候。 遇到某人并听到他们的声音之后,您再也不会再从他们那里收到一封电子邮件了。 您会听到他们的声音和表情来自他们的声音。 这些印象,以及当您亲自面对面时形成的联系,是使虚拟关系正常工作的原因。 除了技术(特别是技术)之外,您还发现了其他需要谈论的事情。
有时,我会被安排参加这些喜欢进行电话会议的团队。 首先,有人可以杀死会议电话吗? 他们太恐怖了,被嗡嗡声杀死了。 除此之外,跨国公司的电话根本不起作用。 没有时间是某人的好时光。 当我们最终设法使(大多数)人通电话时,没人知道什么时候该说话(或闭嘴)。 这是马戏团。 让我回到异步通讯。
如果确实需要“打电话”,我更喜欢Google Hangouts(在可行时)。 当我说这几乎和当面一样好时,我并不夸张。
您最喜欢的待办事项管理方式是什么?
我在这方面做了很多研究,并决定使用一个名为Nirvana的在线应用程序。 它比我评估过的任何其他方法都更加忠实地遵循David Allen的GTD方法。 当我擅长坚持时,它对我很有帮助。
当我表现不佳时,我会回到两个锚点,一个名为WORKLOG的文本文件和我的电子邮件收件箱。
我使用多年的一个技巧(对于上下文切换非常有用)是在我从事的每个项目中维护一个WORKLOG文件。 该文件中的任务并不是很急,但是确实让我想起了当我有时间从事该项目时下一步要做的事情。 长时间休息后返回项目时,此功能特别有用。
如果您希望在自己喜欢的公司工作,那会是什么?
现在,我的理想工作不是在别人的公司,而是我自己。 我喜欢开源的主要原因之一是它赋予的自治权。 我没有找到方法来创造价值的问题,但是有时候我确实有说服我的雇主追求价值创造的问题。
在我现在追求的理想工作中,无论如何我都可以创造价值,我可以判断何时成功和失败,可以决定何时需要增长,何时不需要增长我可以捍卫对我重要的原则。 这就是为什么我和妻子采取步骤创建自己的公司的原因。 我们的目标非常简单:生存,快乐与健康,创造价值,以开源方式工作并帮助客户取得巨大成功。
Java
您正在用Java编程。 为什么?
我坚信可移植性和选择。 我相信JVM为我们提供了这种自由。 它是最优化,最高效的运行时之一,这锦上添花。
我使用Java是因为它是JVM上的默认语言。 如果将另一种语言替换为默认语言,我可能会改用它。 Java是在JVM的公共运行时上终止运行和集成代码的一种手段。 有一些引人入胜的功能使Java变得令人愉悦,例如注释和现在的lambda和流。 但是,如果我有选择的话,我会选择其他语言,例如Ruby,Groovy和Clojure ...只要该语言在JVM上运行良好!
Java的最大乐趣是什么?
仪式和冗长。 输入太多。 我喜欢可以在很少的空间内完成很多工作的代码,但仍易于阅读和直观。 Java需要大量空间。
Java还缺少您在大多数其他语言中找到的标准库中的某些真正关键功能。 一个很好的例子是可以从文件或URL读取所有内容的单个函数。 这是一个简单的概念。 它应该具有简单的功能。 Java并非如此。
而且,获取器和设置器是愚蠢的。
如果您可以用Java更改一件事情,那将是什么?
减少进口仪式。 我知道,这不是很多人想到的第一件事...那是除非您已经用动态语言完成了很多工作。
Java语言和动态语言之间最大的区别之一(是经常提到的)是默认语言集中的类型数量和需要更多支持的导入语句数量。
看起来似乎没什么大不了的,尤其是因为IDE可以帮助管理导入语句,但是您会惊讶于它们仍然使您慢下来,并且在没有IDE的帮助下彻底瘫痪了开发。 在Ruby(在某种程度上是Groovy)中,您可以编写最简单的程序而无需单个import(require)语句。 这意味着您可以继续插拔电源。
Ruby还使您可以导入整个库,以便可以使用一个语句(RubyGem)访问应用程序中的所有文件。 在Java中,您必须在每个文件中导入您使用的每种类型(或至少每个包含它们的包)。 这是要管理的大量额外行。
我希望这种改进与Java模块化一起出现。 您可以将模块导入应用程序,然后在任何地方使用它的类型。 那对我来说将是改变游戏规则。 结合Java 8中的语言改进,我的Java效率也许可以赶上Ruby的效率。
您最喜欢动态语言的什么?
Ruby。 现在,我用Ruby写的代码比使用任何其他编程语言( https://www.openhub.net/accounts/mojavelinux/languages )都要多。 (我还广泛研究了Ruby和Java互操作)。 我可以证明Ruby是非常自然的,正如语言设计师所预期的那样。
我也是Groovy和Clojure的粉丝。 我喜欢Groovy的原因是我喜欢Ruby,它具有与Java无缝集成的附加好处。
Clojure是我的“挑战自己的语言”。 我不会说这对我来说很自然,但是它促使我编写更好的代码。 他们对LISP说的是真的。 它确实扩大了您的思维范围。
哪种编程技术使您前进最多,为什么?
毫无疑问,函数式编程。 这是一个流行的回应,但有充分的理由。 这不只是一种趋势。
根据我与Java EE,Seam和CDI的合作经验,我相信我有资格说在最佳情况下在共享上下文中管理状态是困难的,通常是容易犯错或不可能的。 随着孤立的流程变得越来越稀有,我们必须改变我们的发展方式。
函数式编程为我们提供了必要的工具。 高阶函数使我们无需依赖类层次结构和依赖共享状态的诱惑就可以编写逻辑。 持久的集合且没有副作用,让我们编写默认情况下线程安全的代码,更好的是,准备针对多核甚至分布式进行优化。
不过,请不要相信我。 只需听一些Rich Hickey的演讲,然后获取有关Clojure的书或教程并开始学习即可。 您的思想会说服您。
您从事过的最大项目是什么?
这是一个J2EE Web应用程序,它促进了抵押贷款和自动评估服务。 该应用程序是在一个不太清晰的基于组件的框架中编写的,该框架早于与EJB2后端和webMethods服务进行通信的JSF。 为了使其能够运行,必须将其加载到Weblogic的bootclasspath上,这是我永远不会理解的原因。 在我在那里工作期间,测试套件从未成功完成,而且没人能解决如何修复这个庞然大物。 调试是一场噩梦。 不好看可以说,我很欣赏像Spring这样的轻量级框架的需求,并且一旦我不愿意在该系统上工作,就改变了我的职业道路。
关于这项工作的好处是,我获得了使用XP开发方法的经验(故事卡,结对编程,不断失败的集成等)。 这可能是该应用程序持续发展并向前发展的唯一原因。
您犯过的最严重的编程错误是?
没有记录(也没有测试)。
我总是因为没有记录而自责。 我们将编程错误视为逻辑或语法错误,但我们可能犯下的最严重罪行没有传递知识和稳定性。 这就像在某个物业周围散布地雷,忘却了它们,然后将其变成公园一样。 错误将由下一个不知道要确保系统安全运行所需的所有知识的人犯。
最后,我将对今年OSCON上最受欢迎的Tweet进行一些修改,以鼓励您成为更有纪律的程序员。
总是[编写文档],好像最终维护您的代码的[人员]会是一个暴力的精神病患者,知道您的住所。
—约翰·伍兹( 来源)
翻译自: https://www.javacodegeeks.com/2014/10/the-heroes-of-java-dan-allen.html
艾伦方差