A transcript of Araq's presentation at NimConf2021 is now available as a blog post (thanks to @pietroppeter!):
thnx! if anyone finds any other typos you could make fix suggestions in this PR (we could keep it open a few days): https://github.com/nim-lang/website/pull/315
on the topic of zen of nim, I really enjoyed going through the transcript, it really takes home the concept of a language that is both pragmatic and designed from first principles.
One thing that I really appreciate of Nim and that I do not find very often discussed, is that I find it (most of the times) very coherent and easy on my mind (in the sense that I have to remember very little and can infer how it works): I am usually able to guess an api when I try to use it, or remember the syntax (the only thing that I have somehow trouble remembering, not sure why, is the exact syntax of case) and in case when I need to create an api the names come naturally thanks to overloading (e.g. parse for my custom object).
What about you? what resonates with you in this zen of nim? what is something that you appreciate and that is usually not very much discussed?
on the topic of the first rule, @araq is it fair to say that 👼"design from first principles" is an alternative formulation of 👿"copying bad design is not good design" (it seems to be implicitly stated as such in the discussion)?
I see the 👿 formulation as explicitly pointing out a common "bad design" practice, while the 👼 one tries to provide what is the "good design" principle. I tend to prefer the "first principles" formulation, since it emphasize the correct way of doing things, instead of starting from don't do that.
The "Copying bad design is not good design" sounds pretty meaningless to me. Of course copying bad design is bad, the question is what do you consider to be bad design?
The slogan Brexit means Brexit comes to mind :P
I suppose that everyone agrees on what is bad design? What is good design?
I've yet to see a set of first principles from which Nim has been designed, if indeed it was originally designed from "first principles".
I've yet to see a set of first principles from which Nim has been designed, if indeed it was originally designed from "first principles".
"First principles": Memory is a set of "locations" of different sizes, ideally a value of a type is of a fixed size, in order to improve type checking you can have a distinct type of a fixed size, in order not to break composability you want to avoid arbitrary restrictions so distinct T should be available for any T... You get the idea.
It's easier to show examples where clearly things were not done from "first principles":