Remix.run Logo
notarobot123 8 hours ago

The key, then, lies not so much in minimising the number of basic features of a language, but rather in keeping the included facilities simple to understand in all their consequences of usage and free from unexpected interactions when they are combined. A form must be found for these facilities which is convenient to remember and intuitively clear to a programmer, and which acts as a natural guidance in the formulation of [their] ideas.

We've successfully found some strong patterns for structuring programs that transform data in various ways for the kinds of programs Wirth was imagining. The best patterns have proven themselves by being replicated across languages (for example discriminated unions and pattern matching) and the worst have died away (things like goto and classical inheritance).

There's still work to do to find better languages though. A language is good if it fits the shape of the problem and, while we've found some good patterns for some shapes of problems, there are a lot more problems without good patterns.

I had hoped there'd be more languages for everyday end-user problems by now. At the start of the SaaS era it seemed like a lot of services were specific solutions that might fit into a more general modelling language. That hasn't happened yet but maybe a programming language at just the right level of abstraction could make that possible.

wolvesechoes 7 hours ago | parent [-]

> and the worst have died away (things like goto and classical inheritance)

What's so wrong about classical inheritance, and how it died away while being well-supported in most popular programming languages of today (Python, C++, Java, C#, TS, Swift)?

Someone 6 hours ago | parent [-]

Inheritance has its uses, but is easily overused.

In a sense, it’s like global variables. About every complex program [1] has a few of them, so languages have to support them, but you shouldn’t have too many of them, and people tend to say “don’t use globals”.

[1] some languages such as classical Java made it technically impossible to create them, but you can effectively create one with

  class Foo {
    public static int bar;
  }
If you’re opposed to that, you’ll end up with making that field non-static and introducing a singleton instance of “Foo”, again effectively creating a global.

In some Java circles, programmers will also wrap access to that field in getters and setters, and then use annotations to generate those methods, but that doesn’t make such fields non-global.

wolvesechoes 6 hours ago | parent [-]

> Inheritance has its uses, but is easily overused.

This I can agree with, but it is far from being "worst pattern". Everything can be like salt.

Someone 3 hours ago | parent [-]

Yes, but inheritance used to be like salt. That’s why it, like “goto” and global variables, got so much attention.