Difference between DSL engineer and (general) software engineer?

I’d like to get your opinion on the difference between a DSL engineer and a (general) software engineer, if any. Which special skills, traits, or characteristics does a developer need to work sucessfully with DSLs?

A “DSL engineer” uses some suitable environment (probably a LWB) to create a DSL for their target audience.

A “general software engineer” serves the same target audience (for the sake of discussion), but doesn’t use DSL or modelling techniques.

Both need to understand their technical environment (LWB, GPL, frameworks, stacks), and have to understand their target audience’s problems well enough to deliver a helpful software system.

To avoid biasing the discussion, I’ll post my own take on this question only later.

On the one hand, a DSL/language engineer should be “just” a software engineer: a DSL implementation is “just” software as well, meaning it should come about through sensible software practices involving automatic testing, CI/CD, etc. In my experience, not all DSL/language engineers (and language engineering projects) adhere really well to this, e.g. by not having as many testing in place as could be. (I’m totally guilty of that myself.)

The reason language engineering usually gets away with this, is a result of the “fan-out effect”: small details in either the DSL implementation (especially in e.g. the generator), and the DSL content tend to “fan out” to many details in the software system that’s produced using the DSL from the DSL content. Because of that, problems in the DSL implementation tend to have more-or-less catastrophic effects on the desired software system, so it’s hard to miss that something (and what) needs to be fixed.

On the other hand, DSL/language engineers work on more meta-levels at the same time. Not only do they have to cater for the desired software system itself, but also the DSL implementation. The LWB can be seen as another (meta-)meta-level. That’s really different from “regular” (insofar such a thing exists) software engineering.

2 Likes

I would say the main difference is abstraction capabilities due to working on many levels.
While I fully agree with the statements by @meinte.boersma, I would like to point also to the other side: It is also possible that DSL engineer is not a software engineer at all. We have many examples of this e.g. in testing, safety or security areas in which more or less non-software engineers have defined/implemented the DSL.

1 Like

Thanks a lot for your insights. I completely agree with Meinte: Software engineering is a big part, and the differentiator are strong abstraction skills. Thanks Juha-Pekka for the extension to non-programmers, it’s a valuable alternative approach.

1 Like