写点什么

外部 DSL:成功与失败的因素

  • 2008-12-23
  • 本文字数:903 字

    阅读完需:约 3 分钟

领域特定语言持续升温的背景之下, Michael Feathers 对外部 DSL 提出了一些看法,包括它们的优点、缺点,以及技术之外的成功和失败因素。他强调,外部 DSL“进一步解放了你的双手”,允许你建立“一套完整的语法,并直接根据特定领域的需要去调整”,然而更重要的是,一旦公司使用了它们,就代表着承担了一种重大的义务。并且这种“义务并不随着软件实现的完工而结束”。

由于内部 DSL 专注于特定的领域,它可能带来高昂的维护成本,因为你需要专业的技能才能应用 DSL 应对变化。同样的原因,使用外部 DSL 也使得公司的招聘变得更困难,尤其在雇用领域专家的时候更是如此:

让我们面对现实吧,如果你正在寻找工作,那么希望在简历上写点儿什么?写你熟悉一种专属于某一家公司的语言,还是一种整个业界都熟知的语言?

一个非常流行的例子是 Erlang。今天,人们正在强烈地关注 Erlang,但是我们不应该忘记,在某种程度上,它曾经被 Ericsson 放弃,因为 Ericsson 担心自身招聘和培养开发者的能力。很多人都知道 Erlang 的故事,但是他们没有意识到这种场景在业界有多普遍。我看过很多的遗留代码,其中的很大一部分代码都是用公司“自产自销”的语言开发的,而公司在支持这些代码的时候就遇到了麻烦。

因此,Michael Feathers 的建议就是,对于外部 DSL 来说,“成功的决定因素远远不止技术方面”。公司只有客观地评估了将要承担的负担,决定即使在“不利的商业环境下”也不退缩,才能真正地释放外部 DSL 的威力。除了这些以外,Feathers 还罗列了一些如何降低采纳外部 DSL 之代价的建议:

  1. 如果你创建了一套外部 DSL,那么考虑将它开源,或者至少考虑在业界形成一个围绕它的组织。这样可以在一定程度上降低维护的开销,也能避免招聘的麻烦。
  2. 如果你不能或者不愿向外界开放你的 DSL,那么也不要指望你的开发者会完全忠实地使用这些 DSL。否则,你就要为同等能力的开发者支付更多的薪水。在协商薪水的时候,公司就要为使用小众(little known)技术的开发者多付出一些了。

内嵌式 DSL 是值得考虑的另一种选择,因为根据作者的观点,内嵌式 DSL 更容易构建,并具有很多与外部 DSL 相同的优势。

查看英文原文: External DSLs: Success and Failure Factors

2008-12-23 03:492134
用户头像

发布了 53 篇内容, 共 16.7 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

郑泽康:一名热爱技术的“保安”|OneFlow U

OneFlow

人工智能 机器学习 深度学习 程序人生 cuda

windows下C与C++执行cmd命令并实时获取输出

DS小龙哥

3月月更

从多快好省到好快省多,您的项目管理走对了吗?

禅道项目管理

项目管理

你的“数学潜意识”原来可以被唤醒!

博文视点Broadview

实践丨SpringBoot整合Mybatis-Plus项目存在Mapper时报错

华为云开发者联盟

spring 容器 Spring Boot 测试 Mybatis-Plus

微服务架构下消息服务多通道设计思路

全象云低代码

微服务 低代码 后端开发 消息中间件 后端技术

速度和质量不可兼得,为什么DevOps落地如此困难?

飞算JavaAI开发助手

一首古诗带来的图数据库大冒险

NebulaGraph

知识图谱 实践案例 分布式图数据库

揭秘!网易有道技术岗实习生都在做什么?

有道技术团队

招聘 实习 网易有道

WebGL 及其在 WebRTC 中的应用

ZEGO即构

WebRTC WebGL 实时音视频 即构科技

java培训如何用反射做简易 Spring IOC 容器

@零度

Java springloc

ABAP excel数据上传函数改造

Jasen Ye

Excel upload abap

【直播回顾】OpenHarmony知识赋能第四期第三课——I2C驱动开发

OpenHarmony开发者

OpenHarmony 驱动开发

ABAP 文件上/下载

Jasen Ye

upload abap download template GRAPHICS

Facebook 开源 Golang 实体框架 Ent 现已支持 TiDB

PingCAP

从HDFS的写入和读取中,我发现了点东西

华为云开发者联盟

hdfs HDFS写入 HDFS读取 文件读取

加快云原生技术转型, 智能调度登陆华为云DevOps: 增速,节源

华为云开发者联盟

软件 DevOps 代码托管 智能调度 华为云DevOps

数仓如何设置大小写不敏感函数

华为云开发者联盟

MySQL DWS GaussDB(DWS) 大小写不敏感函数 GUC参数

云原生时代已来,计算机教育如何因「云」而变?

阿里云弹性计算

云原生 ECS 计算机教育

web前端培训如何用CSS来实现透明方格

@零度

CSS web前端

大数据培训连续登录经典面试案例

@零度

大数据

手把手教你从Apk中取出算法

奋飞安全

android 安全 java

Meetup预告|云原生时代热门监控利器解析与应用

云智慧AIOps社区

运维 云原生 安全 监控工具

对于金融机构而言,为什么选择私有化IM比企业微信、钉钉更好?

BeeWorks

OceanBase 源码解读(九):存储层代码解读之「宏块存储格式」

OceanBase 数据库

源码剖析 oceanbase

如何升级到 React 18

CRMEB

知识管理在企业竞争发展中的作用

小炮

知识管理

SeaTunnel 在 oppo 的特征平台实践 | ETL 平台数据处理集成

Apache SeaTunnel

Big Data 大数据平台 大数据开发 apache 社区 opensource

利用亚马逊云科技整个自用免费网盘

亚马逊云科技 (Amazon Web Services)

Builder 专栏

容器化 | K8s 部署 RadonDB MySQL Operator 和集群

RadonDB

MySQL 数据库 Kubernetes 高可用 RadonDB

项目管理标准化的武林秘籍

大智若愚

团队管理 项目管理 标准化 软技能 标准框架

外部DSL:成功与失败的因素_开源_Sadek Drobi_InfoQ精选文章