• 0 Posts
  • 19 Comments
Joined 1 year ago
cake
Cake day: October 5th, 2023

help-circle


  • It’s great to see the attempt and also an example of what the C4 guidelines are made to avoid.

    Notice how many comments are little nitpicks about this and that. Completely stalling the commit and getting further away from the original point of C4 which is to reduce contributor friction and avoid these kind of endless discussions on PRs.

    I don’t want to be too critical because some of that is a clear lack of understanding of the motivations of C4 which is explained more thoroughly in Pieter’s blog posts. You don’t want to adopt a contributor guidelines that you don’t understand of course.

    IMO it’s better just to implement it as-is and start using it in practice rather than bikeshedding.


  • Best practices for minimizing complexity:

    1. Try out “stacking”
    2. Simplify software design

    I didn’t say there wasn’t information in there but the above paraphrased quote goes to the heart of what my comment was about.

    Firstly, how is purchasing their product considered a “best practice”? It’s not generally accepted or the standard superior option by any stretch of the imagination.

    Secondly, the option they give to minimizing complexity is to simplify your software design. Ignoring a couple problems with this statement, if they’re being honest this should be above the recommendation to “try out stacking”.

    It doesn’t have to be that deep. You can give it a quick read and take from it what you will, but it is an ad for their product more so than it is an article that contains broadly useful information. They have every right to do so and maybe their product really is tremendously great but I’m just calling it how I see it.





  • This is not an answer to your question but it’s tangentially related.

    Someone I greatly respected ran an open-source project with the policy of merge everything. Completely flip this idea of carefully review, debate and revise every PR. His theory was that it helps to build an open community, and if something breaks someone else will revert that commit. He says that the main branch was almost always stable, a massive improvement to how it was run previously. He passed several years ago and for some reason this reminded me of him.

    I guess what I’m trying to say is if you get something out there that people find useful, the code will be looked at. It doesn’t help you if you’re looking for someone to collaborate sorry.


  • Interesting. I don’t see any immediately obvious technical reasons why this wouldn’t be possible.

    There are languages that include a variety of different programming paradigms (I’m thinking of D). I can’t think of any that support different syntaxes but I’m sure one would exist. However, a language that is configurable I feel does not exist and could be an interesting experiment.

    I still do fear however, that any attempt would still not be practical as if you design a language feature that is generic enough to work with/without other features and with different syntaxes then it would not be specific enough to be clearly useful. In other words by trying to support everything it becomes good at nothing.


  • I’m starting to understand what you’re saying. It wouldn’t be a universal programming language because even those things you list are not universal.

    So now I am imagining a system very roughly where you could say (for example):

    language.add(Variables)
    language.add(Functions)
    language.add(Loops)
    language.add(Strings)
    language.add(BracketScope)
    language.add(Regex)
    language.add(ActorConcurrency)
    

    You would add support for various features and maybe control the syntax via configuration? Is that more along the lines of what you are envisioning?


  • You’re essentially describing a turing machine. I don’t mean to be facetious and I don’t have proof for this but my gut tells me by the time you make something this generic it will no longer be a “universal programming language” and will become a specification to allow for anything while failing to provide anything actually useful.

    Anything more specific and you’re essentially implementing YACC or some form of code generation that’s already been invented and is not specific enough to be useful for this purpose.

    EDIT: In my mind it’s like saying we have cars, boats, airplanes, bicycles, etc. Why isn’t there a platform where if we wanted we could add wings and jet engines and make it into a plane? Or instead add a horse and carriage? Or 4 wheels and a steering wheel?

    Maybe you could do so, but the result wouldn’t be anything actually useful because making a plane has specific design goals that aren’t shared with a bicycle.


  • The more generic you make something the worse it is at specific goals. The more use cases you support, the more complex and harder to maintain, the more it’s likely to fail. There will never be a “universal” programming language.

    Imagine if you had a programming language that did “everything”. Well there are people who want a simple programming language. Don’t these two things seem completely at odds?