Several months ago I sent out an e-mail on my approach to language design where I mentioned that I consider language design to not be very important due to the fact that one can always migrate oneself out of a bad language later. I wrote this at the end:
Apart from reading, the best way to learn good language design is to simply experiment. Remember that undoing language engineering mistakes is usually not a big deal.
And Markus Völter, whom I mentioned in the e-mail, then disagreed with me on Twitter:
Thanks for mentioning me, @spclngs, but I vehemently disagree with this :)— Markus Voelter (@markusvoelter) March 8, 2022
“…. which make bad language design decisions not a big deal”
“… undoing language engineering mistakes is usually not a big deal.”
Seen too many really bad languages. https://t.co/esoHZHJXk4
Yesterday, Markus has published Thinking vs. Coding, where he offers his view of the balance between the two extremes of drowning in heavily documented up-front design versus running off to code something after talking to customer for a few minutes.
Markus suggests specific topics to focus on when talking to the customer, as well as who are the best people to talk to, and that there comes a point where you stop talking. Towards the end, he writes:
A final very important ingredient for these “thinking sessions” is that you recognize when you have to stop thinking and start coding.
I want to add that the transition between thinking and coding can be gradual. In an intermediate step you can take the domain expert, open a text editor, and try to express together a few key examples in the syntax of the future DSL in plain (or rich) text. This low-tech approach can help quickly figure out the right amount of detail or the best paradigm to use.
Read the full article by Markus here: Thinking vs. Coding.