1. 23
  1. 15

    there should be one and only one programming language for everything. That language is Nim.

    This attitude makes me inclined to avoid Nim. I want to use a language that’s honest about its limitations. If you believe that a general-purpose language can beat a specialized one at any task that’s extremely naive and reflects very poor judgement.

    Many of the other points just feel like stating the obvious. Using the word “zen” to refer to these ideas feels very disrespectful of Buddhists.

    1. 14

      I’m assuming that statement was tongue-in-cheek. But Nim does have a really broad range of uses, since it can compile to C or JS, has an interpreter for a large subset of itself, and has a very extensible syntax.

      The term “the Zen of ____” has become a trope since the 1960s — try googling it — and has nothing to do with Zen Buddhism. You might as well say an article called “The Ten Commandments of functional programming” is disrespectful to Christians/Jews/Muslims.

      1. 8

        Respectfully, old tropes can still be - and in fact are probably more likely to be - racist or appropriative, and should be reevaluated occasionally.

      2. 10

        Using the word “zen” to refer to these ideas feels very disrespectful of Buddhists.

        I’ve studied Zen Buddhism a bit and my understanding is that they’re generally far from the snowflakes you picture them here to be. It could be said that you’re probably being more disrespectful of them by saying that.

        1. 2

          “Snowflakes”? Can you explain? I’ve only ever heard it used by ultra-conservatives as an (unintentionally ironic) insult so I’m confused by the usage here, thanks

          1. 3

            Perhaps a cultural difference. It’s used where I live without too much political baggage. It refers to a person who gets offended without a reason. Zen Buddhists typically are not like that although there are individual differences obviously.

            I think it’s a pretty clear metaphor though, I’m confused what you’re confused about.

        2. 4

          Using the word “zen” to refer to these ideas feels very disrespectful of Buddhists.

          I’m not a Buddhist, but from what I have read about Chan Buddhist monks (from which Zen is descended) they were a pretty iconoclastic bunch. I imagine that some might have more of an issue with expounding a series of formalisms than with the appropriation of a term. My understanding is that they believed that enlightenment came from a sudden moment of clarity, not necessarily sustained study, and they tried to induce that moment of insight through koans as well as suddenly shouting or striking a pupil.

          Whats more, there are some great koans about not letting things get to you. I like this one in particular:

          Tanzan and Ekido were once traveling together down a muddy road. A heavy rain was still falling.

          Coming around a bend, they met a lovely girl in a silk kimono and sash, unable to cross the intersection.

          “Come on, girl” said Tanzan at once. Lifting her in his arms, he carried her over the mud.

          Ekido did not speak again until that night when they reached a lodging temple. Then he no longer could restrain himself. “We monks don’t go near females,” he told Tanzan, “especially not young and lovely ones. It is dangerous. Why did you do that?”

          “I left the girl there,” said Tanzan. “Are you still carrying her?”

          1. 3

            I am a (largely) Zen Buddhist, and we’re used to the word being used for chocolate bars and shampoos and the like. ‘The Zen of Nim’ just makes me assume it’s a riff on Python; no problem.

            Ironically, I’m more at pains to point out that what you posted above is not a koan; it’s a fun story, or parable, but it would never be used as a part of meditation practice and is of a considerably different flavor than actual koans.

            1. 1

              Fair enough. I picked it up from Ashida Kim’s site so it isn’t my original description.

              ** Edit **

              I’m actually going to back this up. The wikipedia page for koans says they are “a story, dialogue, question, or statement which is used in Zen practice to provoke the “great doubt” and to practice or test a student’s progress in Zen.” This isn’t the classic sound of one hand clapping or does a dog have a Buddha nature, but it does present a paradox: it is not the act touching a woman that is inimical to the monk’s path, but it’s the how the woman disturbs and occupies their thoughts.

              1. 2

                I mean, you can believe what you like, but koans are a specific corpus which have a specific function in Zen training. It’s not a structural characterization; there is a specific body of texts that are used as koans, and that story ain’t in it.

                1. 1

                  I’m open to changing my mind about it. I just don’t feel like I’ve got a good reason to yet. There is one website the calls it a koan, a person that says it isn’t, and a definition that indicates that it could be. Rather than focusing on why this specifically isn’t a koan, what should I be looking at for koans? You say that there is a specific body of texts, what are they called?

          2. 4

            I suspect they’re copying the Zen of Python. However your point is a good one, probably best to avoid the use of Zen at all in a programming context.

            1. 11

              I suspect they’re copying the Zen of Python.

              Copying bad design is not good design.

              But, of course, I kid.

              1. 4

                You kid and it’s actually funny! Even funnier if you know Python and the Zen of Python!

                Truly a rarity in the tech sphere. If I could upvote this 20 times I would :)

              2. 4

                The computer science literature is full of “Bibles”. Do you find them equally disrespectful?

                1. 3

                  I don’t actually find the usage of “Zen” disrespectful because I’m not a Zen buddhist.

                  I don’t have a problem with any of this, however I try to be respectful of things others find to be deeply important even if I cannot understand them.

                  1. 2

                    Yes, I guess I should have asked technomancy directly. Sorry for that :-)

                    But what I meant is that, like many other words, “Zen” is now used in everyday language, without its religious meaning. That might be sad, but I don’t think we should see any disrespect in that.

                  2. 3

                    I wouldn’t find this disrespectful if it were a list of aphorisms which seemed paradoxical or contained some subtle wisdom. These just don’t hit that mark. It feels like invoking the word “zen” is only done to make it sound more clever than it is.

              3. 4

                As it stands, Nim is well on its way to becoming as complex as Ada or C++. I guess the price for “one programming language for everything” is that you then have to satisfy everyone, which is only possible if the language becomes continually more extensive.

                1. 3

                  That’s a fair critism, but I came to Nim from C++ because I thought most of the C++ complexity was ad-hoc and unjustified.

                  1. 2

                    It’s worth taking a look at how C++ came to be. Stroutrup added concepts to the existing C language that he knew from Simula and found useful. In this sense, “C with classes” was minimal and complete. Ada, on the other hand, started with the claim to support all applications of the DoD at that time with only one language (i.e. “one programming language for everything”); already the first version of Ada was accordingly large and complex. In the meantime, C++ has also reached an almost incomprehensible size and complexity. With C++ 11, a lot of “syntactic sugar” was introduced, i.e. things that could already be done, but perhaps somewhat less elegantly; this trend continued and the result we see in C++17 and 20; the price is an ever larger language scope. How much is enough (i.e., optimal) is a difficult question. At the moment I am trying to find an answer to this with http://oberon-lang.ch.

                    1. 1

                      I believe that Stroustroup planned for C++ to be multi-paradigm from the beginning, at least that’s the take I got from his book. C++ just happened to luck into the OO craze and I guess that paradigm became dominant.

                      1. 2

                        “multi-paradigm” is not the same as “one programming language for everything”. C++ was “multi-paradigm” by construction in that OO features were added to a procedural language without removing anything. But the new features were not just useful for OO, but also e.g. for better modularization and resource management.

                      2. 1

                        oberon+ looks neat (and reminds me of ada but presumably a lot less complex). But I can’t find any resources for learning it or any information about any standard libraries it has. Do the standard libraries use camelCase (as shown in the examples) this would also be a blocker for me.

                        1. 2

                          Do the standard libraries use camelCase (as shown in the examples) this would also be a blocker for me.

                          honest question, just curious: why is casing so important for you that you basically ignore all other technical merits of a language?

                          1. 1

                            I find it hard and aesthetically displeasing to read. (Also worth noting that languages which like to rely on camel case often pick the wrong side of XMLHttpRequest.) I find it hard to type on a keyboard. Given the choice of learning a language or not dealing with camelCase I simply pick not to learn the language. There are in fact so many languages out there that it is difficult to “miss out” on much by making such an arbitrary choice. There is likely at least one more language out there with mostly overlapping technical merits which does not force camelCase upon me.

                            That being said, I have recently thought about investigating using something like treesitter to basically place a thin layer over the top of a language which can translate snake_case to camelCase using a variety of rules (or even by also communicating with an LSP server) so that I can learn a language like Haskell comfortably.

                          2. 1

                            Oberon+ is a union and extension of the existing Oberon 90, Oberon-2 and Oberon-07 dialects (see https://en.wikipedia.org/wiki/Oberon_(programming_language)). Historically there is no “standard library” for Oberon, but there is the Oberon System, which is a full operating system with a lot of modules also available for custom applications. There was an initiative to define Oberon System independent standard libraries (see http://www.edm2.com/index.php/The_Oakwood_Guidelines_for_Oberon-2_Compiler_Developers) which my compiler supports. But I will eventually implement my own standard libraries; up to then you can use any C library by the foreign function interface built into Oberon+; at http://oberon-lang.ch there is a language specification and some other articles; see also https://github.com/rochus-keller/Oberon.

                      3. 2

                        From what I can tell, the feeping creaturism is a hell of a lot more integrated than in other languages I’ve seen, and all of the language grammar in the above article is pretty well thought-out.

                      4. 1

                        Concise code is not in conflict with readability, it enables readability.

                        APL devs will be thrilled to see this