菜单

语言 & 框架

采纳?

  • React Hooks 引入了一种管理状态逻辑的新方法; 鉴于 React 组件相比较类来说更接近于函数, Hooks 接受了这一点并将状态传给函数,而不是将函数作为方法传给带有状态的类。 基于我们的经验,Hooks 提高了组件之间功能的重用性和代码的可读性。 考虑到 Hooks 使用 React Test RendererReact Testing Library改进了可测试性,以及不断增长的社区支持,我们将其作为我们的首选方法。

    历史信息
  • JavaScript的世界日新月异,随着我们使用框架的经验越来越多,我们的倾向也在改变。我们深入使用某些框架,其他备选框架自然黯然失色。在React前端测试方面,React Testing Library就是这样一个例子。我们团队很喜欢的是,用这个框架写的测试比其他框架(如 Enzyme)更健壮,因为它鼓励独立测试组件间的关系,而不是测试全部实现细节。 这种思维源自于测试库,React Testing Library 是它的一部分,它还为像AngularVue.js这样的框架提供了一整套库。

    历史信息
  • Vue.js 在我们的社区中已经成为一个值得信赖且备受喜爱的成功的前端框架。虽然还有其他被广泛采用的同类型产品,比如 React.js,但简明的API设计、职责清晰的指令及模块(一个模块对应一个文件的设定)和更简单的状态管理,都让Vue.js成为有力的竞争者。

    历史信息

试验?

  • 自2017年,我们把 CSS-in-JS 作为新兴技术提出后,它变得越来越流行了,在我们的工作中也可以看到明显的趋势。基于一些扎实的生产经验,我们现在推荐 CSS-in-JS 为试用技术。在上次的技术雷达中我们提到过,要了解这个技术, 样式化组件 框架是一个很好的出发点。在使用 CSS-in-JS 技术的时候,除了它的种种优点,通常也会遭遇到一个缺点:运行时计算样式会导致 用户可感知延迟。通过 Linaria, 我们看到了一类新的在创建时就考虑到这个问题的框架。Linaria 引入了许多技术把大部分性能开销转移到构建时间。不过这也带来了一些妥协,最常见的就是不支持 IE11 的动态样式。

    历史信息
  • 在长期使用 Kotlin 的过程中,我们的开发团队没有将 Java 框架与 Kotlin 混用,从而获得了更多针对 Kotlin 设计的框架的经验。作为轻量级的对象关系映射器(ORM),Exposed 过了好一阵子才引起我们的注意。Exposed 有两种数据库访问方式:类型安全的内部 DSL 包装 SQL,以及数据访问对象(DAO)模式的实现。它具有一个成熟的 ORM 所能被期待的功能,例如对多对多引用的处理,急切加载(eager loading)以及对跨实体联接的支持。Exposed 受到我们团队青睐的地方还在于,方法实现无需代理,并且不依赖于反射,这无疑对性能有所帮助。

    历史信息
  • GraphQL Inspector 可以比较两个 GraphQL 模式(schema)之间的变更。我们曾经警告要谨慎使用 GraphQL。自那以后,我们很高兴看到 GraphQL 相关的工具有了一些改进。ThoughtWorks的大多数团队会继续将GraphQL 用于服务器端资源聚合。通过将 GraphQL Inspector 集成到团队的 CI 流水线中,我们已经能够捕获 GraphQL 模式中潜在的重大变化。

    历史信息
  • 基于认为测试是唯一真正重要的 API 规范的经验,我们一直在寻找对测试有帮助的新工具。Karate 是一种 API 测试框架,其独特之处在于它不依赖通用编程语言,而直接使用基于 Gherkin 的语法编写测试。 Karate 使用一种领域特定语言,来描述基于HTTP的API测试。我们的团队喜欢 Karate 为 API 规范带来的易读性,并建议将其应用于测试金字塔的较高层次,而非过量应用在细节的断言中。

    历史信息
  • 随着 Kotlin 被越来越多地用于移动和服务端开发,其相关生态系统也在不断发展。Koin 是一个Kotlin框架,用于处理软件开发中的常规问题之一:依赖注入。 尽管有多种 Kotlin 依赖注入框架可供选择,我们的团队更喜欢 Koin 的简单性。Koin 避免使用注解,而是通过构造函数或模仿 Kotlin 的延迟初始化,从而仅在需要时才注入对象。 这与 Android 基于静态编译的 Dagger 注入框架形成鲜明对比。 我们的开发人员喜欢此框架的轻量级本质及其内置的可测试性。

    历史信息
  • 随着Node.js越来越流行,诸如Node滥用等趋势逐渐显现,这导致了许多开发者使用Node.js开发业务系统。我们经常看到大型JavaScript系统在可伸缩性、可维护性方面出现各种问题。NestJS是一个让Node.js应用开发更安全、更不易出错的基于TypeScript优先风格的框架。NestJS是一个有态度的框架。它的架构直接受Angular启发,符合SOLID原则。我们的团队常用NestJS构建Node.js微服务,它给开发者赋能,能让他们编写出可测试、可伸缩、低耦合、易维护的应用。

    历史信息
  • 我们的团队一直在使用并且很认可 PyTorch 机器学习框架,并且有几支团队对 PyTorch 的喜爱甚于 TensorFlow。PyTorch 暴露了 TensorFlow 隐藏的 ML 内部工作原理,使其更易于调试,并包含了程序员熟悉的结构,例如循环和动作。PyTorch 最新版本提高了性能,我们已在生产项目中成功使用了它。

    历史信息
  • Rust 日益受到欢迎。曾经,Rust、C++ 和 Go 哪门语言更好的讨论火了一段时间,谁是赢家却尚未明确。近期,令人感到高兴的是,Rust 改善显著,添加并稳固了更多内置 API,包括上一期技术雷达中提到的高级异步支持。此外,Rust 还启发了新语言的设计。例如, Libra 区块链上的 Move 语言 借鉴了 Rust 的内存管理方式来管理资源,从而确保了数字资产永远不会被复制或隐式丢弃。

    历史信息
  • SaramaApache Kafka的 Go 客户端库。如果你在 Go 中开发 API,你会发现 Sarama 非常容易设置和管理,因为它不依赖于任何原生库。Sarama 有两种类型的 API——一种高层 API 用于轻松地生产和消费消息,另一种底层 API 用于控制网络上的字节。

    历史信息
  • 苹果已在其新的 SwiftUI 框架上迈出了一大步,该框架用于在 macOS 和 iOS 平台上实现用户界面。我们很高兴 SwiftUI 跨越了 Interface Builder 和 XCode 之间略显混乱的关系,并采用了一致的、声明性的以及以代码为中心的方式。现在,你可以在 XCode 11 中并排查看代码和生成的可视化界面,从而获得更好的开发人员体验。 SwiftUI 框架还从近年来主导Web开发的 React.js 世界汲取了灵感,它利用视图模型的不可变值和异步更新机制,构成了统一的反应式编程模型。这为开发人员提供了一个完全原生的替代品,以替代类似 React NativeFlutter 这样的反应式框架。 SwiftUI 无疑代表了 Apple UI 开发的未来,尽管很新,但它已经显示出优势。它和它平缓的学习曲线给予我们非常棒的体验。值得注意的是,鉴于它不支持iOS 12以及更低版本,因此在使用SwiftUI之前,你应该首先了解客户的使用场景。

    历史信息

评估?

  • 在提升代码性能的过程中,定位代码的瓶颈和延迟点通常比较困难,特别是在异步操作中。性能剖析工具此时就十分重要。Clinic.js Bubbleprof会可视化Node.js进程中的异步操作,绘制程序调用流中的延迟图。我们很喜爱这类工具,因为它帮助开发人员轻松的定位和确定代码改进的优先级。

    历史信息
  • 在数据工程中使用良好的软件工程实践,也仍然存在一些工具空白。我们的一个团队尝试在数据管道中的不同步骤之间自动执行数据质量检查时,惊讶地发现,在该领域中只有很少的工具。他们选择了 Deequ ,这是一个用来为数据集编写类似单元测试的库。 Deequ 建立在 Apache Spark 之上,虽然它是由AWS 实验室发布的,但也可以被用在 AWS 以外的环境。

    历史信息
  • 在上一期技术雷达中,我们加入了BERT—— NLP(Natural Language Processing,自然语言处理) 领域中的一个关键里程碑。去年,百度发布了 ERNIE 2.0(Enhanced Representation through kNowledge IntEgration),它在 7 个 GLUE(General Language Understanding Evaluation) 语言理解任务和全部 9 个中文 NLP 任务上的表现均优于 BERT。和 BERT 一样,ERNIE 也提供了无监督预训练语言模型。它可以通过添加输出层的方法来进行微调,以创建多种 NLP 任务的当前最优模型。ERNIE 与传统预训练方法不同之处在于,它是一个连续的预训练框架。它可以不断地引入各种各样的预训练任务,以帮助模型有效地学习语言表达,而不是仅使用少量的预训练目标进行训练。我们对 NLP 的进步感到非常兴奋,并期待在我们的项目中尝试。

    历史信息
  • MediaPipe 是一个用于构建多模态(例如视频,音频,时间序列数据等),跨平台(例如Android,iOS,Web 和边界设备)的应用类机器学习流水线。它提供包括面部识别,手部识别,手势识别以及物体识别在内的多种能力。尽管 MediaPipe 主要部署在移动设备上,但多亏了 WebAssembly 和 XNNPack 机器学习推理类库的帮助,使得它也能在浏览器上运行。就像目前所看到的一样,我们正在探索一些将 MediaPipe 用于增强现实的用例。

    历史信息
  • CSS工具和框架提供了预先设计的组件,帮助开发者快速实现想要的页面效果。但是随着开发的进行,它们变得难以定制。Tailwind CSS 提供了一种有趣的方法。为了便于定制,它仅提供了较低层次的CSS样式类来构建模块,且没有自带任何多余的复杂样式。较低层次CSS样式类广泛的覆盖,使开发者不需要编写任何新的样式类或CSS样式。从长远来看,这将产出更易于维护的代码。这样来看 Tailwind CSS 在可重用性和自定义创建可视化组件之间,提供了适当的平衡。

    历史信息
  • 如果需要将关系数据库中的数据收集到 Kafka 的 Topic 中,可以考虑使用Tamer,它将自己标榜为“驯化的 Kafka JDBC数据源连接器 ”。尽管Tamer是一个相对较新的框架,但它比Kafka JDBC连接器更高效,尤其是在处理大量数据时。

    历史信息
  • Golang 社区中有相当一部分人是依赖注入怀疑论者,部分原因是他们将模式与特定框架相混淆,并且具有系统编程背景的开发人员本能地不喜欢反射引起的运行时开销。Wire 应运而生,这是一种编译时依赖注入工具,可以同时生成代码并将组件连接在一起。Wire 没有额外的运行时开销,并且更易于推断静态依赖关系图。 无论你手写代码还是使用框架,我们都建议使用依赖注入来鼓励模块化和可测试的设计。

    历史信息
  • 我们在之前的技术雷达中收录了几个状态管理库,但是 XState 采用的方法略有不同。这是一个简单的 JavaScript 和 TypeScript 框架,用于创建有限状态机并将其可视化为状态图。它与一些流行的响应式 JavaScript 框架 (Vue.js , Ember.js , React.jsRxJS) 集成,并且是基于W3C标准的有限状态机。另一个值得注意的功能是状态机定义的序列化。我们发现有一点很有用,那就是在其他上下文中创建有限状态机(特别是在编写游戏逻辑)时,可视化状态及其可能的转换的能力。 我们确实很喜欢Xstate的visualizer可以很容易做到这一点。

    历史信息

暂缓?

  • 我们通常不会将已经移除的工具保留在技术雷达上,但是我们的团队强烈感受到Enzyme应该替换为React Testing Library来用于测试React界面组件。使用Enzyme的团队发现它对于被测试组件内部的聚焦会导致脆弱的、无法维护的测试。

    历史信息
无法找到需要的信息?

每期技术雷达中的条目都在试图反映我们在过去六个月中的技术洞见,或许你所搜索的内容已经在前几期中出现过。由于我们有太多想要谈论的内容,有时候不得不剔除一些长期没有发生变化的条目。技术雷达来自于我们的主观经验,而非全面的市场分析,所以你可能会找不到自己最在意的技术条目。

新的,移进/移出 ,没有变化