Why people design a new #ProgrammingLanguage?
There are tons of good reasons of course. Some does that for fun or for curiosity, some for political or educational reasons, some to address shortcomings faced with existing one, either in specific use case or in general.
To me, at least at the conscious level, it’s completely a political issue.
I see how programming is a new political force (so much that I actively used it to fight #BigTech in Italy) and I see how people who cannot read (aka #debug) or write (aka #programing), are doomed to becomes second class citizens in a #cybernetic society.
I don’t want this to happen to my daughters, so I want to teach them how to program and debug.
BUT mainstream programming languages are weird, full of accidental complexity and with over-complicated semantics.
As a nerd who can programs in most of them, I tend to get fun in the abstractions and details of, say, a #Haskell or an homoiconic macro in a #Lisp.
But while they are fun to a person grown (and selected to fit) within such a primitive computing environment, they are inheritely excluding people who cannot spend decades to grasp their subtle intricacies.
And how you can teach such languages to kids?
Sure they can learn and understand any programming language construct way better of an average adult, but at a first glance all they will only see is glibberish!
And while some will be fascinated by such esoteric language that can be used to create games, worlds and agents that serve their will (just like I was when I was a kid), most will find that complicated and thus boring.
On the other hand a language that is explicit and with simple semantics (such as say #Oberon) will seem verbose and boring to a professional programmer.
I love the simple clarity of a #snake implementation like this https://github.com/tmartiro/voc-snake/blob/main/Snake.Mod whose complexity is almost just the complexity of the task at hand.
And while I see little improvements I could add to such language to further simplify it’s syntax and semantics, when I try to do so, I end with something that is less readable than the original, despite syntax and semantics being simpler (as in less rules and no exceptions or incoherence).
It was pointed out by @[email protected]: while I want to make the language easy to read and simple to understand, I subconsciously try to address the issues I faced in my ~25 years as a polyglot programmer.
And apparently I can’t resist such impulse, like if I cannot escape my experience.
It’s sad.
It makes me think of how the phonetic alphabet was invented by people who cannot read or write but were exposed to hierogliphs, and think that creating a democratic programming language is beyond my ability because of how my mind has been blent from the existing one.
@[email protected] @[email protected]
@[email protected]
@[email protected]
Programming languages are formal languages and must adhere to a higher level of rigour than natural languages, they cannot be ambiguous.
They are not strange, they just have to be able to describe a very often complex reality. Beyond the simple hello world there are a myriad of problems to solve. Designing a language with three or four simple constructs is not difficult, but how to use it to describe complex problems? Simplicity of language but complexity of code? To achieve simple code in the sense of easily readable code, we often use not so simple languages, languages with hidden traps that only experts are able to master.
What is needed, possibly, are languages with a low entry level and an expert teacher.
In any case, programming is not easy, it requires organisational skills, abstraction and generalisation, analysis and so on. Probably a mindset that not everyone has and that must be accompanied, if not prone to such practice, by years of study and practice.
We have talked several times about teaching programming to kids. Each time you try to bring up the subject by not addressing the real issue: the kid cognitive path. It’s not the in language itself, but in the right time to teach. There are many suitable languages and some integrated environments to do this without having to reinvent the wheel, especially ignoring the kid’s cognitive capacity. If at a certain age they are incapable of abstracting, there is no teaching that matters.
On the discourse that they can understand better than an adult, I disagree, maybe an old man but not an adult in his full mental faculties.
What would explicit language mean? I assume you mean imperative? Not only imperative languages are explicit. What does explicit mean? Not contain syntactic sugar? For some languages some structures are syntactic sugar and for others the same structures are not. What does explicit mean then?
The clarity you find in an Oberon code others may find in other code, even assembly. You are not able to affirm the clarity of a language you know (obviously readable for you) and negate it for one you don’t. Too much easy don’t think? I rewrote, for example, that code in OCaml and to me OCaml is clearer than Oberon code and I know both languages. Who is right?
In your language, with not inconsistencies (maybe), you are at the dilemma of the simplistic and the useful. Inevitably you fall in 25 years as a programmer, problems are probably real and cannot be ignored. A programming language must be able to deal with these problems, trying to be readable, but above all effective.
One sometimes errs on the side of presumption, thinking that the multitude of people who have tried their hand at language development are therefore demented. That only you can solve the problems of the development world.
No one escapes their own experience, the only one who could do so would be god. Does this entity exist outside of experience? … but, let’s drop this.
As I told you, the idea that programming for everyone is not only utopian but myopic. People should have a critical approach to software before they know how to program, the reverse leads to developers with an ethical sensibility equal to a tick.CC: @[email protected] @[email protected] @[email protected] @[email protected]
It’s not much about thinking that people who tried before were demented, but about knowing, as we both know, that each programming language had certain goals in mind and certain constraints to work within.
Given that programming is usually seen as a profession (and an engineering one), instead of a human right, I think it’s reasonable to assume that very few programming languages were designed to pursuit a political goal.
Many educational “toy” languages, for example, are fun to learn and may help some kids to discover a passion for programming, but cannot be used for building serious softwares, such as an operating system, an editor, a browser or whatever.
As a conseguence such kids cannot develop a demand for programs they can fully understand and modify, and they becomes useds as adult.
The best attempts at viable simplicity I know about are Wirth’s #Oberon system and language, that basically conflated user and programmer, were a step in the right direction.
In my head I’d like to improve from there with simpler semantics (no heap memory, no record extensibility, total functions, cantor set theory for types…), but when I try to, I end writing example programs full of symbols instead of readable keywords.
I get what you say about the need of rigour yet flexible semantics.
And maybe you are even right.But if you are not?
What if a powerful language with a readable syntax and simple semantics that every adult could understand could exist…but nobody ever try to create it?
@[email protected] @[email protected] @[email protected] @[email protected]
As I often say, industrial languages must be distinguished from academic or research languages. Industrial languages are born out of industrial needs, they are pragmatic and often dirty. Probably the ones you have to deal with in your work. Fortunately I don’t have to answer to anyone in my choices and I can use what I want for the most part. There are many languages suitable for teaching without lapsing into toy language. There is no politics in a programming language but rather in its use and software that is produced with it. Do we want to fall into defining right-wing for imperative programming and left-wing for logic? OOP? Functional? :D
Oberon, Oberon. How many lines of code did you write in Oberon or ComponentPascal? Come on, let’s be serious. I probably wrote more in Oberon/ComponentPascal than you.
Interesting Oberon? Yes it was twenty years ago but because the OberonSystem was interesting. Is it still? Fads come and go and sooner or later it’ll be back too, you just have to wait for.
You want to teach Oberon? Do it, do less wanking and do it. You will gain time from the search for the perfect programming language. Perfection is in the language of god alone, I’m basking very well in the imperfection of language of the devil. :DCC: @[email protected] @[email protected] @[email protected] @[email protected]
For all your experience you’ve forgotten the most important aspect of programming. Iteration.
You never get things right on the first try, but its the goal that matters. The goal is the why and the test case for success.
You also might want to take into consideration the impetus’ for why people learn to read/write software. You couldn’t get me remotely interested in learning say applying make up, unless it was in the context of something i wanted to do, like say costumes.
And remember there might not be a one size fits all approach here! Focus on something your daughters will enjoy, maybe they like music? Teach them about the structure of midi. And most importantly involve them in the process. They’re your users, get feed back and advice from them.