软件测试要素_软件美好未来的要素

软件测试要素

在这次访谈中,我深入探讨了开放网络传播者Kyle Simpson的生活和动机,他是javascript书籍《 You Do n't JS》的作者在GitHub上找到他并在Getify.me 查看他的许多项目和文章。

你从哪里来?

俄克拉荷马城出生并成长。 从大学中期开始,在俄克拉荷马州开始上学,但现在在德克萨斯州奥斯汀市工作。 我和妻子和两个孩子住在那里。 我之所以搬到奥斯汀,是因为90年代在俄克拉荷马州没有太多的技术社区,奥斯汀是最近的大型技术中心。 现在,我回到俄克拉荷马州参观,看到他们那里有一个很棒的社区 ,我很嫉妒! 真高兴!

你在哪里上学?

我从俄克拉荷马大学开始,然后转入德克萨斯州立大学并获得计算机科学工程学士学位。

您的日常状况如何?

我有两种不同的日子; 我会说/教的日子,以及我从事FOSS开发的日子。 在教学期间,我会与社区联系,并教JS谋生-主要是在公司研讨会环境或与会议相关的公共研讨会上。 那些日子,我整日站着,教书,讲课,并引导人们进行锻炼。

当不这样做时,我会加入FOSS社区-编写代码,或撰写博客或书籍。 我花了大量时间这样做,不断在GitHub上进行到处都有提交和拉取请求。 我目前在GitHub上有300多个工作日 ,不是为了炫耀,而是激励其他人通过FOSS贡献做更多,更定期地做。 如果我的勇气可以鼓励一个人多做一件事情,那就是全部。

最好的描述方式是:我有50%的时间花在教书上,还50%的时间花在FOSS社区上,以“所有船只随风而起”的理论建立网络平台及其技术的知名度。 ”。 学习和欣赏网络技术的人越多,就会有更多的人雇用我来教他们。 我是事物的狂热学习者,最好的学习方法是教别人。 我认为“我如何使这对其他人有意义?” 一旦我学到一些东西,我就会写代码来解释它,找到一本书或一篇帖子来描述它,如果发现了我不理解的东西,请分支并学习更多,然后重新开始循环。 它变得越来越深。

我说了一段时间后说,“我认为这是开发人员,尤其是那些闯入行业重要的,发现有一件事你爱学习,并掌握它。” 编写所有其余代码可能不是一回事,而是坚持一些有价值的东西的过程 。 不要只是从一个事物跳到另一个事物。 尽管这样做可能会获得不错的薪水,但深入理解某些事物的技巧仍然存在一些缺失。 一旦做到这一点,并且知道所要知道的内容,那么尝试尝试一下就很棒了! 在分支的同时寻找要掌握,冲洗和重复的下一件事。 在5到10年前,不断地跳来跳去成为“无所不包的所有交易大师”更为重要。 现在缺少的是真正知道自己在做什么的人。

当前,我们的行业奖励“灵活性”,并以别人的异想天开来工作。 “昨天,我们用Angular编写了所有内容,而今天,我们将用React重写所有内容……”经过足够多的改动之后,您“成为”了高级开发人员,但是您错过了以某种方式欣赏技术的机会确实值得我们加深了解。

精通? 怎么样?

好吧,具体答案是可变的。 Angular与Node会有很大不同。 通常,重要的技能是好奇心和学习欲望。 不要只是读一行代码,然后说:“我想这就是它的工作原理……”继续阅读,并不断跟踪兔子的漏洞,直到您可以说您理解该行代码的每一部分为止。 我告诉研讨会的参加者,我不希望您编写自己的框架,但是可以 。 不要将框架视为黑盒,您需要深入了解它们。 如果您选择某种东西,不仅要知道它的工作原理,而且还要为什么 。 知道何时需要更改来自于了解原因-不是因为有一本好书,或者该回购有多少“明星”。 这些都是不好的信号。 除了了解开源社区之外,您自己的理解是最强烈的信号。

您不必重新发明轮子,但是在决定将其螺栓连接到要制造的汽车上之前,您应该了解轮子如何滚动。

您是如何开始使用FOSS的?

我在一家公司工作,不是作为开发人员,而是作为“用户体验(UX)架构师”。 我曾在项目管理团队中设计用户界面(UI)的原型,然后将其交给开发团队。 不可避免地,我写的一切都只是投入生产或稍作改动。 我在2008年从事的一个项目需要进行跨域Ajax请求,那时候真是一个痛苦。 我需要一个解决方案来证明我对应用程序的概念,然后说:“我知道一些Flash,而且我知道它可以做到。” 因此,我围绕一个不可见的Flash文件构建了一个JS API包装器,具有与XMLHttpRequest(Ajax)对象相同的API,然后我将其称为项目flXHR (基于Flash的XHR)。

一旦它开始工作,我想:“也许其他人会发现它有用吗?” 因此,我将代码发布为开源。 那时,开放源代码是在GitHub之前的版本,因此所有源代码都在我的网站上,而且我从博客文章等中指向人们。我也将代码放在Google Code上 ,但是没有太多社区支持然后。 在2009年初,我想进入会议现场。 2009年是第一次专门针对JavaScript的大型会议JSConf ,因此我决定去谈论SWFObject (当时是Web上下载次数最多的项目之一),而我在flXHR中的使用率很高。 我是SWFObject的核心开发人员,并在会议上进行了“ B跟踪”演讲。 第一次谈话只有三个人参加,但是我爱上了这样一个想法,我可以讲话以引起人们对开放源代码的注意,并激励其他人帮助使其变得更好!

开放源码观点的充实性于当年下半年的2009年11月发布。我发布了我可能最著名的项目: LABjs (一种性能优化的动态脚本加载器)。 我在德国柏林的JSConfEU上发表有关脚本加载的演讲 。 登台演出前两小时,我在偷听很多人在谈论这个叫GitHub的新网站,让我去,并签署了,而我就坐在台下。 我把所有的LABjs代码都推送到了那里,那是我的第一位官员:“我在FOSS社区”。

您希望本科生在离开学校之前会遇到一件事吗?

毫无疑问, Rich Hickey的会议演讲“ Simple Made Easy ”,他是CognitectDatomic数据库以及Clojure语言的作者。 他是一个非常聪明的家伙。 这次演讲对我来说非常重要,我不仅将其保存在书签中,还可以在工具栏上每天都引用它。 前提是,人们会合并两个术语:“简单”和“简单”。 他实际上将“复杂”与“困难”进行了比较。 复杂的根源词来自“弯曲的”,就像将多股绳子编织在一起一样。 高度编织的代码很复杂,并且难以维护和重构。 软件开发人员在构建时会专注于构建“易于安装”的软件,该软件易于安装和使用,对您有很多帮助。 这种追求通常会导致软件复杂。

如果开发人员追求模块化的简单(非复杂),非编织软件,那么他们通常也可以使用简单的软件。 如果追求简单,通常会变得很复杂,但是如果追求简单,那么您也可以轻松实现。

Node.js是我的示例。 我试图将其安装在虚拟机上,并且具有操作系统(OS)的要求,但是由于操作系统没有正确版本的Python ,所以无法安装它。 Node是JavaScript框架,将Python用于其安装程序吗? 为什么我需要Python才能安装Node ??? 答案是因为用Python编写跨平台安装程序更容易 ...但是,当添加其他编织时,还可以使其实施和维护更加复杂。

地球上几乎每个框架都声称是模块化的,但大多数不是。 对我来说,模块化意味着可以删除一部分,并且仍然可以使用该框架。 如果框架需要所有这些部分,则“单独文件”不是模块化框架! 我的目标是希望开发人员遵循简单的模块化设计,这是最重要的道德规范。 随之而来的是可以使人们易于使用的正确设计。 我们不必再为创建美观,“简单”的界面而烦恼,而要为制作简单的软件而烦恼得多。

您的工具链是什么?

Sublime是我的文本编辑器。 原则上,我喜欢基于浏览器的编辑,但是我运行夜间版本的浏览器,以便尽早发现错误,同时仍然有机会修复它们。 在编写代码时,我无法处理浏览器崩溃和不确定性的问题。

Sublime有许多插件 ,可用于任何所需的插件 。 尽管我使用的不是很多,但是其他人喜欢“ intellisense”插件,以及许多其他插件,它们是他们构建的强大生态系统的一部分。

我的其他主要工具是Firefox和Chrome中的浏览器开发人员工具。

我的另一个关键任务工具是Git命令行工具。 GitHub是我的图形git客户端,因为它有效地增加了我对git CLI的使用。

吉特 如何使用它?

我没有很多花哨的过程,这取决于我是写书还是写代码。 对于书籍,当我进行更改时,我想编写一个连贯的部分,并在每个部分进行一次提交。 在撰写一个部分时,我可能会添加到目录中,或者澄清另一部分,或者添加另一部分。 每当进行一系列逻辑更改时,我git add每个单独的文件(以markdown BTW编写的文件)和git commit -m 。 在提交消息中,我列出了提交内容描述的书,哪些章以及有关内容的快速描述。 该系列丛书的提交历史真正地讲述了一个故事,讲述了我花了几个月多的时间才弄清楚如何逐段地逐一编写它们!

我通常使用git commit -m ".." && git push ,以便在提交后立即推送。

我通常不进行批量提交,通常只有当我上了一架没有wifi的飞机时,这种情况下,一旦我重新上线,我一次就会推送5-8次提交。 通常,在完成我正在研究的部分后,我会尝试向右推动。

对于代码,我有两种不同的策略。 如果它是“大”功能,则创建一个功能分支,然后将多个提交放入该功能分支。 目标不是完成功能并进行大规模合并,而是定期合并 。 我喜欢以稳定的批次进行开发,定期合并,并且不会对掌握有害。 如果在开发功能时确实在master上进行了错误修复,则我将功能分支重新定基以获取该修复。我不一定要进行短暂的分支,但要进行短暂的差异。 :)

许多开发人员确实进行了壁球合并,并希望表现出“实现了这一完美功能,并立即完美地编写了它”。 我不要 我想保留历史。 在极少数情况下,如果请求请求中包含很多逻辑上相互联系的单个提交,那么我将进行壁球合并。

如果我有一个简单的错误修复程序,通常我将直接添加并提交给master。 无论如何,每次执行最终提交时,我都会同时提交文档和测试。 我坚信只有在具有文档和测试后,它才能完成 。 我并不是真正从事测试驱动开发(TDD),而是面向测试或基于测试的开发。 我有一组测试,有时有时会写在前面,但是典型的计划是,当我使用新功能修复某些东西时,“我不知道它应该如何表现”,这将需要我逐步实施。 我将测试与代码(代码测试)一起开发,而不是在测试后或以其他方式编写代码。

在从事其他人的项目或作为一个更大的团队时,我会更加正式。 我尽量避免需要复杂的Git采摘或交互式重定基础功能的场景。 在我的职业生涯中,我只做过几次这些事情。 我在大多数情况下都使用GitHub,它可以很好地处理这些情况。 无论执行什么处理,一次带有2-3次提交的请求都可以保留在历史记录中,因此我通常将其原样合并。

你目前在做什么?

除了我的书以外,我还可以在任何给定的一周里浏览三个主要的项目兴趣领域。

我最感兴趣的第一点是异步(“ async”)编程模式(承诺和生成器,诸如此类)。 我有一个名为asynquence的库,这是一个promises风格的异步库。 它还可以处理生成器,响应序列,甚至CSP。 (请参阅: Hoare的开创性著作“通信顺序过程”),这些更高级的模式位于基本的“序列”抽象之上。 其他大多数库都只有一种异步编程,但是我建立了一个可以处理所有主要模式的库。 我认为异步是JS开发人员需要加速的最重要的事情之一。 我有一些关于该主题的会议演讲和项目。

我们越来越认识到,复杂的程序需要更多精心计划和强大的异步功能。 仅回调本身并不能真正消除它。

[Remy Decausemaker:是的,我认为使用Python郁金香和从Twisted引入到Python 3.3开始的核心库中的功能很好地融合在一起

数字2与JS的“编译为”语言相同。 实验对于语言很重要。 极端地说,我有一组工具来定义自定义JS语法并将其转换为标准JS(基本上是标准JS +自定义语法)。 我正在研究对您的代码进行“少量”转换的工具。 更大的图景是“可逆转换”或能够双向转换的无损转换。 如果可以双向定义它们,则可以拥有自己的编辑器的“视图”,而拥有团队存储库的“视图”。 你的了校验码,你可以在代码的方式你的大脑工作的工作,球队可以在自己的的方式做工作。

例如,当您使用CoffeScript时,这是有损转换,是“全有还是全无”的决定。 每个人都需要以这种方式进行工作,或者根本不需要。 我的工具可以做的简单版本是简单的样式化内容,例如空格和制表符。 这些工具可以为您更改该代码样式,而不仅仅是抱怨错误。

ESRE是我正在为双向代码样式转换而构建的这样一种工具。

let-er是另一种工具,可将非标准版本的JS块作用域转换为标准JS块作用域。 我拥有这些工具的一系列正在进行中的原型,最终我可以回过头来编写整体的“元”工具,通过双向转换来驱动它们。

3号是JS / CSS之间的跨界。 这是模板世界中的一个项目。 模板有两个极端: 零逻辑模板或完整编程语言模板。 零逻辑模板包括像Mustache这样的项目。 我们不需要视图中的业务逻辑,因此我们完全不使用逻辑。 但是实际上,这会创建非常脆弱的控制器代码,该代码与UI的结构紧密相关,而脆弱的连接正是我们希望通过将关注点分开来避免的。

另一个极端是模板中有完整的编程语言。 我的比喻是:“如果我给你一堆绳子,我可以教你建一个绳桥,乐于助人的或套索的,那不是那么有用。” 如果您处于“必须完成15分钟的功能”中,则只需放入if语句和函数调用,然后在TODO注释中进行修复即可,但是很少这样做。 这就是我们无意间将业务逻辑泄漏到我们的视图中的方式。

两种极端都不够好。 我们需要中间的东西,它具有用于结构化UI构造的足够的逻辑,但是要排除所有您可以滥用来执行业务逻辑的机制。

在4到5年的时间里,我尝试了一种模板引擎,该引擎是一种令人愉悦的媒介,称为抓地力 。 它具有足够的结构逻辑,但受到限制,因此您无法执行函数调用,数学等操作。它已经足够成熟,可以在项目中使用它,并可以推出生产网站。 它绝对是一个进行中的工作,但使用起来“足够稳定”。 人们仍然可以肯定地使用语法,并且可能不喜欢我所做的选择。 但是我认为我至少提出了正确的问题,例如:模板引擎需要或不需要什么? 我从一无所有开始,仅在需要进行结构化工作时才添加功能。 您具有基本的循环和条件,但方式有限。 我将这种平衡概括为:“如果您发现自己无法做某事,则应该表明您在模板引擎中不需要它。”

两年前,我开始观察LESSSASS和其他工具(如COMPASS)的兴起。 让我震惊的是,他们在解决我认为在CSS世界中很重要的问题的能力有限。 这些工具要求您每次进行更改时都必须重新编译CSS。 “编译HTML模板,使用外部数据重新呈现”是一个已解决的问题。 由于某些奇怪的原因,CSS并没有发生这种情况。

因此,我在核心夹具模板引擎之上发明了handles-css ,一种类似于LESSCSS模板语法。 最重要的是使用handles-css:数据是外部的(即CSS变量),这意味着像SASS这样的项目的所有数据操作都 CSS 内部发明了声明性语法来处理,相反,您可以并且应该在CSS外部进行这些数据操作,从而产生新数据,然后重新呈现模板。

如果我想将“ blue ”更改为“ red ”,则无需重新编译所有CSS,就可以使用预先编译CSS,并使用不同的变量数据重新渲染它。

编译后CSS模板是基本的JS,这意味着您可以选择在浏览器中动态地动态渲染CSS,例如使用CSS响应不断变化的条件。 简单地重新渲染一小段CSS并将其注入到页面中比使用易碎的JS代码更改CSS样式属性要干净得多。 当然,您也可以像当前使用当前预处理器一样在服务器上运行grips-css。 关键是,您可以同时使用grips-css和这两个选项,而不仅限于仅限服务器且效率不高的总重新编译。 我要尝试做的是建议SASS和其他人追求的精神是好的 ,但是他们的追求方式是有限的,并且对于CSS的未来而言并非十分健康。

我认为CSS模板是将CSS工具功能向前推进的更干净,更可靠的方法。

您提到要在CSS中解决的重要问题吗? 就您而言,它们是什么?

LESS解决了三个主要问题。 可变数据 ,可以更改和重用,诸如mixin之类的结构化事物可以实现DRY编码。 并且, extends是多态性的简化版本,可以覆盖模板片段。 我们需要解决这些问题,但是确实做到了,但是正如我所说,几年前,我们在文本模板化中解决了这个问题,我们应该将HTML /文本模板化的那些原理应用于CSS领域。 CSS没有理由需要为这些问题发明自己的解决方案。

那么,下一步是什么?

戴上“预言家的帽子”,我认为未来3-5年我们会看到什么?

应用程序将变为“ UI可选”。 新款Apple Watch的显示屏非常有限,某些应用程序根本不会显示任何内容。 诸如Google GlassOculus之类的东西 ,您将拥有根本没有任何视觉表现形式的应用程序。 这就是我所说的即将到来的“ API即应用程序”时代。 您的“应用程序”可能只是一段可以发送和接收数据的代码-分布式API。 我们有一些公司开发的应用程序非常关注品牌推广。 Twitter希望您以他们想要的方式体验他们的应用程序。 Facebook希望您以他们想要的方式体验Facebook应用程序。 但是,现实情况是,人们将完全不用UI就能体验应用程序。 公司必须放弃对演示的控制,因为我们的设备和与之交互的方式从纯粹的视觉到听觉或触觉的互动都多样化。

我的手表可以在没有UI的情况下读取东西,这不过是数据操作而已。 Facebook应该提供供我的手表阅读的文字。 用户界面不一定会消失,但它成为应用程序的可选附件。 从长远来看,我想强调更多的去耦。 我们看到人们在构建单页,复杂的,前端驱动的应用程序。 大多数应用程序都在前端。 当然, Gmail使用起来很酷,但是在这种新的可选UI趋势中,我认为它们并不十分灵活。 很难将Gmail应用程序 与UI UI分开。

开发人员正在假设在提供每张视网膜图像时都可以访问无限,快速的带宽……我们并不是按照我们应该的方式分层设计事物。 对于所有连接速度慢的人来说,“嗯,他们最终将获得更好的访问权限。” 我们需要为用户提供浏览器中的工具,以选择对他们而言重要的内容。 我应该可以说:“不,我不需要庞大的单页Gmail应用程序,我需要一个简单的页面后移动版本。” 这远不只是期待“移动网站”。 我们需要分层的站点。

我们需要认真考虑一下我们假设UI和数据带宽使用量是无限资源的多少。 就像“响应式2.0”一样,它不仅响应屏幕布局,还响应网络条件。 该应用程序应该弄清楚我正在漫游,并且可能不会对我施加任何压力。 用户界面需要解耦,简化,分层,并更加专注于便携式应用程序。

几年前,我听过PPK (Peter Paul-Koch)的一次会议演讲。 他建议:“为什么我不能发送短信与您共享应用程序?为什么您必须从应用程序商店购买?” 他提出,获利将从应用程序转移到数据。 他认为应用程序应该是独立的可移植代码段,无论使用哪种设备,都可以自由共享它们。 JS之所以出色,是因为它无处不在。 例如,如果Facebook要向我收取数据费用,因为我的设备上没有向我投放广告的UI,那么我应该能够决定是否要为更新数据付费。

我希望这种事情代表着网络的未来以及应用的使用和消费。

翻译自: https://opensource.com/business/14/12/interview-kyle-simpson-javascript

软件测试要素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值