Ask HN: How would a programming language look if designed by non-programmer

55 points by tester34 ↗ HN
Since it's hard to find such a person, who understands CS/Math/can program machines but never used "normal" programming languages

I do wonder how it'd be designed, maybe current approach sucks?

OOP is beautiful itself, it *enables normal people* to model complex systems that'll be running on computers, but can we get even better?

131 comments

[ 2.6 ms ] story [ 143 ms ] thread
It'd be a fascinating experiment. The languages we use all have a great deal of shared history.

Essentially all modern languages were designed by people who were good enough programmers to implement compilers/interpreters/runtimes in a language like C, so it's hard to avoid some intellectual crossover. You'd need to have a separate team implementing the design proposed by this outsider.

Go look at some of the programming languages from many years ago, when most of the good stuff we like hadn't been thought of.

A good starting point is the video, 50 in 50, by Guy Steele and Richard Gabriel. It reviews 50 programming languages from the first 50 years of computing.

I found that vid on vimeo but the quality is awful. Do you know of any better source of this talk?
Just commenting: before I really I got into web dev, I dropped some time on this Microsoft platform called Touch Develop. It was interesting but I was glad I did not get locked into that way of thinking.

I could see the appeal of something like voice and copilot.

50 years ago, these people were quite common. There were only mathematicians and engineers, but programmers didn't exist yet.

The good: Excel, Dataflow Diagrams (commonly found in game, music and arts), SQL, Declarative Dataflow Paradigms in general. Mutablity is counterintuitively counterintuitive if you don't have a model of the underlying execution system.

The weird: Prolog, APL, languages done by mathematicians and logicians

The ugly: SPSS, R, two languages done by statisticians, and they are absolutely abhorrent, and often missused.

If we reinvented programming today my guess is that it would be a lot less text driven and a lot more data oriented.

Despite constantly reading on this website that R is bad or wrong, I somehow manage to get all of my data work done quicker and with fewer headaches than excel, sas, or Python.
I hear the complaint that R is a terrible language mainly from professional programmers.

I'm sure it is poorly designed from a computer science perspective, but there is no programming language out there which makes it so easy to run any model under the sun as does R.

I think that’s not a feature of the language, but of its libraries. R is popular for similar reasons why it’s so hard to replace python.

In Python’s case, the language isn’t bad, but the implementation is horrible for performance. It sits on the back of lots of fast C/Fortran/whatever code, and polished the (relative) turd a lot, making the end result quite usable, but the “sitting on top of part” also makes it hard to improve the performance of the implementation.

For both R and python the end result is good, but they still are local optima in the space of what is possible.

I've had the opposite experience. My preferred programming style is functional. My current gig has been in Clojure, and I couldn't ask for a better product programming language. I find Python code very difficult to write in a functional way (even the official howto is littered with for loops [1]), but in R I can feel an underlying lispiness, and the pipe operator `%>%` from magittr is really nice: whereas in Clojure there is `->`, `->>` and `as->` for thread-first, thread-last, and named threading respectively, in R with `%>%` I get thread-first as the default and I can override it by placing `.` wherever I want in the downstream function calls.

[1] https://docs.python.org/3/howto/functional.html

From memory, R is quite slow, and has syntax I found really ugly. Dots as part of names (my.variable), $ for member access, operators wrapped in % for pointwise operations, eg %*% for pointwise multiplication.

These probably shouldn’t matter but did for me. FWIW the statistical offering was fantastic.

I'm struggling to think of an aesthetic reason why SQL would be "good" yet R, "ugly".
I don’t know R but SQL is definitely ugly.

There is no world in which listing the columns before the tables in a SELECT statement is a good idea. It makes intellisense/autocomplete awkward.

R has a lot of surprises built in and is fairly inconsistent. That makes it harder to fully learn (always have to pull up docs for everything). Also it means every so often I'll forget some weird edge case of a function and get a totally wrong result. For a certain class of work, this is fine: if you use it every day and are confident catching errata you'll learn all the weirdnesses. Many professional programmers work in a half dozen languages a week, so one that is significantly harder to learn will feel frustrating. For me it'll be actually slower to get the same result as other tools since I have to relearn its unique way of working.
SQL made relational programming possible, when computer were too slow to do declarative programming. The modern aproach would be something more highlevel/declarative like Datalog, but given the context SQL made a good tradeoff in terms of programmer control and declarativity.

R is ugly because it encourages users to use it wrong. For loops are slow as a snail, but are what everybody uses and teaches, while the proper/fast way to wrangle data, with higher order functions like map, is hidden behind idiosyncratic names and obscure APIs.

Even the creator of R considered making it a language instead of the scheme library that it started iut as, as a mistake.

I think something like QBE (https://en.wikipedia.org/wiki/Query_by_Example; about as old as SQL) is the way to let non-programmers write queries.
Looks a lot like declarative logical programming language in disguise (Datalog, Prolog).
I was a huge fan of xlispstat in the 1990s (which I've archived on Github at (https://github.com/jhbadger/xlispstat), but the simple fact is that the majority of the statistics community just didn't like Lisp-like languages, and not only xlispstat, but newer projects like Incanter (statistics for Clojure) have pretty much failed as well. R meets its need far better than a Scheme library that nobody would have used. It's yet another example of "worse is better".
50 years ago was 1971. There were lots of programmers and programming languages in 1971. By then we had Fortran, Algol, Cobol, Logo, Basic, Simula, Lisp, Snobol, B, APL… I could go on.
I'm of the age that I also consider 50 years ago to be the dawn of computing. Turns out it's closer to 75. :-)

It has been said that non-programmers used to catch on to APL quite quickly back in the day. Faster than regular programming languages in fact. The designers, Ken Iverson, didn't even design the language to be run on computers but rather as a mathematical notation.

Someone else mentioned Excel, and that is an example of data-oriented programming. It actually hides the code and displays the data, which is why most programmers hate it. It's not the data that is important when doing development, but the code.

Array oriented languages like APL and R allows you to work with data like Excel, but you work with the code, not the numbers. I'd argue that once you learn more about programming, one tends to want to work with the code rather than just looking at data.

> one tends to want to work with the code rather than just looking at data

I've observed the opposite trend. The more senior people get the more they care about the data and less about the code.

Programming = Datastructures + Algorithms

But it's the Data-structures/-models that dictate the algorithms and it's the domain and data therein that dictates the model.

Most companies could survive their code being lost. None would survive loosing all their customer data.

Functional programming is all about data, react is about data, machine learning is about data, google and facebook are about data.

Code is an incidental means to an end, in 90% of all cases, except flight software and games maybe, but even there the trend is towards data driven ECS-Systems and "collect all data for a timestep, and execute your flight control program to compute all actuator outputs in one go"-approaches.

And observability is one of THE hot topics in the biz right now.

> It has been said that non-programmers used to catch on to APL quite quickly back in the day

Thompson and Ritchie also said their secretaries happily wrote troff.

Do people get pampered too much today or are we severely underestimating them?

I think we underestimate them, but they also underestimate themselves (I hear a lot of "I can't..." by people who definitely can, once that word is in their head they no longer can but because of the mental block).

Also, there was a major difference between what the secretaries would have been using before troff and their experience with troff. In particular, at that time, they were probably using typewriters. A digital workflow would have been a massive improvement in experience. Need multiple copies? No more carbon copies or retyping, now it just comes off the printer (which may still use a carbon copy, but at least you don't have to retype it). Need to adjust something? At least for future printouts it's just changing the file, and maybe using whiteout and handwriting the correction in a few printouts. Want to reflow the entire page? On a typewriter you start over, with troff you edit.

Today, people have Word and Google Docs, why do they need troff/Markdown/TeX/LaTeX/Asciidoc/org-mode/etc.?

The experience, for the user, is not as qualitatively different as those secretaries would have experienced at the time. Not just secretaries, my parents (a pilot and an engineer) took to computers in the 1970s (in college)/1980s (work, later home) for the same reason, it was a better experience than using typewriters and hand calculating things (even with a calculator).

> Today, people have Word and Google Docs, why do they need troff/Markdown/TeX/LaTeX/Asciidoc/org-mode/etc.?

Because what they write has structure and they don't want to be distracted by the looks.

Just saw your reply, but I think you're missing my point and I'm not sure if it's willful or not. If not, here it is again: The difference in experience between Word/Docs and the various text-based markup languages is not as significant as the difference that someone would have experienced going from a typewriter to something digital, whether troff or anything else. It is like trying to get someone to go from Excel -> another programming language, versus a handheld calculator and pen and paper to anything on a computer. There are differences, I'm not saying there aren't and you're being obtuse if that's how you're taking it, but the magnitude is far less.

Regarding your "don't want to be distracted", Word has had an outline mode since at least 1995 (first time I used Word). Not sure about Google Docs, but it's a perfectly fine distraction free writing environment. So that's not even a selling point for users of Word.

> I think you're missing my point

I just don't object to anything but that one question.

> Word has had an outline mode since at least 1995

I haven't had Word for years so I can't check it out, but if you take WYSIWYG out of a WYSIWYG editor, what is left? Why would I use it instead of other tools you listed? I have used some of them.

To be fair, troff was designed when typewriters were ubiquitous and is basically a direct analogue. It's not going to be hard for a professional typist (ie. secretary) to learn troff. It's like teaching R to a statistician.
> It has been said that non-programmers used to catch on to APL quite quickly back in the day.

This is still true today. I used to run a program for kids where they coded with robots. We used C for a while and we spent the whole time teaching C, never really getting to cool robot activities. Then we switched to Matlab, and it was like night and day. They took to Matlab so quickly, and I think you are right that the array nature of the language is the main reason. Others include the ubiquitous table datatype, and a REPL interface.

I’m mid 30s and still think 50 years ago is 1950 …
It would probably look a lot like Excel.

Most people I work with who are non-programmers but who could benefit from coding spend a lot of their working life in Excel. When we teach them SQL and give them access to our data warehouse, a lot of the time the explanations that stick are thinking of it like a big spreadsheet with lots of pages and columns/rows. Spreadsheets are fundamentally very visual, and have few abstractions to get your head around before you can start work. (There have been "visual programming languages", but these often look like graph editors and I think that's a complex enough abstraction that it complicates the process).

From this we've then seen a whole load of tools that are trying to be "smarter" spreadsheets. Things like Airtable. Is it a spreadsheet? Is it a database? Is it a no-code application? Is it a project management system? Is it a calendar? Well, yes. Retool, and others also fit into this. They all have a lot of spreadsheet like functionality.

You mentioning visual languages makes me think of DRAKON, which was good enough for the Russian copy of the space shuttle project: https://en.wikipedia.org/wiki/DRAKON
Wow never knew that! Very interesting.

I don't know of many visual programming languages like this that have production uses. I've seen things like node based editing in Quartz Composer, various game engines, 3D modelling software, etc, but it's almost always only really for pipelines of graphical values rather than truly general purpose programming (even if they might be Turing complete).

I tried unsuccessfully to sell my team on DRAKON when we were consolidating workflow engines/schemas. It seems really neat.
COBOL was supposed to be just that. It is not considered a nice or beautiful language generally.
Only global scope sounds like a nightmare.
COBOL was definitely designed by programmers, not non-programmers. It was sort of aimed at non-programmers, but that was mostly marketing I think.
Here's a simple one: You write out the requirements of the program in English and it spits out a program that implements it all.
Please don't take my job.
"When someone says 'I want a programming language in which I need only say what I wish done,' give him a lollipop." —Alan Perlis
These already exist. They're called declarative languages.
One possibility: the non-programmer is more open to designing a language that is more than just text.

Programming in plain text (in a monospace font) hasn't changed for decades. It doesn't look like it will change for the foreseeable future either. This isn't because plain text is inherently superior. We're still relying on clumsy, cryptic syntax determined by the limited characters available on a keyboard.

The simplicity of text is very appealing to developers. But arguably, it's modern IDEs that make dealing with plain text tolerable - without them, the simplicity of text would rapidly lose its shine. And modern IDEs are enormous in their complexity and millions of lines of code.

So new programming ideas may come from unexpected quarters. And maybe less likely from developers conditioned by existing languages and tools.

A programming language is rarely only about the language.

Culture, tooling, standard library, testing practices, 3rd party libraries and other things carry significant weight.

I find it a stretch to claim that we are dealing with a monospaced text. As you mentioned, it is more than that. The text we deal with is at least: monospaced linted color-coded hypertext.

Basically in hand-wavy terms: the more self-aware the text is, the better.

Plain text is inherently superior for collaboration (versioning, diffing, merging, blame etc.), maturity of tools (I'm thinking Sublime/vi here, not IDEs), and interoperatbility with other tools (e.g. how easy it is to generate/consume).
Maturity and interoperability of tools isn't a valid excuse. New tools will be written and they will mature.
IMO, you have that backwards. We have lots of tools for plain text languages because it's easier to write tools for a language when it's plain text. Plain text is a blessing, not a curse.
LaTeX

I love the output it gives, but the language is quite horrible.

Do you really think Donald Knuth [1] and Leslie Lamport [2] are non-programmers?

[1] https://en.wikipedia.org/wiki/Donald_Knuth

[2] https://en.wikipedia.org/wiki/Leslie_Lamport

It's not uncommon for programmers - even for the great ones - to produce code that looks like it was written by non-programmers...
I would also argue that it's quite hard to determine from a Wikipedia article if a person were a good programmer at the time of creating a certain thing about 40 years ago.

If my memory serves me correctly, Leslie Lamport [1] created TeX because he wanted to write a book on math but there were no good systems to write math, so he made TeX. So to me, it sounds like he were a math teacher at that time, I have no idea if he actually knew programming when starting to work on TeX.

[1]: https://en.wikipedia.org/wiki/Leslie_Lamport

Your memory doesn't serve you correctly! Most parts of your post are factually incorrect...

Lamport didn't make TeX. It was Don Knuth. Lamport wrote the LaTeX macros for TeX to simplify typesetting books and articles.

> I would also argue that it's quite hard to determine from a Wikipedia article if a person were a good programmer at the time of creating a certain thing about 40 years ago.

Ironically, the informative and relevant article you linked does answer this:

Leslie Lamport was a computer scientist from 1970 to 1985. He released LaTex in 1984. So he was a full time computer scientist for more than 14 years before LaTeX. This (plus of course his subsequent career including winning the Turing Award) suggests he was a "good programmer" for most common usages of "good" and "programmer".

Lamport was only a math teacher (at Marlboro College) from 1965 to 1969, 15 years before LaTeX. He was a computer scientist for his entire post-PhD career.

Yes. Yes I do. Dr. Knuth, anyway.

He's not really a programmer, so much as he is a scientist first and foremost. When I think of a "programmer", I think of John Carmack and Tim Sweeney. When I think of computer scientist, I think of Donald Knuth.

TYPOScript, a Domain-Specific Language (DSL) for customizing the TYPO3 Content Management System. Typoscript is not a turing-complete language.

For starters, TYPOscript has very odd semantics for terms like "Object", "datatype", "register", and so on. You can have lines of code like "page = ", or "page < ".

Typoscipt was designed in the late 1990s, then by an autodidact or very young CS student(s). I don't know exactly, and I don't want to blame anyone. (nothing personal).

However, as a consequence, as a TYPO3 user I have countless files in my work-related directories that have a ".ts" filename extension - now used by TypeScript a well designed language for which rich toolsets exist.

So when I open a TYPOscript .ts file, practically every word on every line has these red squiggly lines from the linter ... very scary.

TYPOscript has its strengths, though.

It would look like GPT-3, you enter text and the system translates that to code machines can understand.

A programming language will never be a solution for people who can't program, break down problems to smaller chunks and be able to generalize and create abstractions.

Think about someone who can't drive. To them no matter how good a car is, a car alone will never be the solution to move around (ignore self driving cars for now since you are still required a driving license).

For these people one solution might be a taxi driver who can translate commands to actions to move the car to the destination.

An improved version would be for GPT-3++ to ask clarifying questions when designing/building the app, rather than merely receiving commands
Languages are not usually aimed at no-programmers. But low-code tools are aimed at them.

They're done by well funded companies, so I assume a lot of work(by very skilled people) has be done at understanding the answer to OP's question, and so a lot could be learned from them.

Perhaps something like the node editor in game engines - a visual system for connecting inputs to outputs and transforming the data as it goes through the graph. Non-technical users seem understand the analogy very intuitively.
Perhaps like Inform:

http://inform7.com/

Although I suppose in the age of GPT-3 that will probably take over.

Coding is organizing and modifying information. If you didn't code before, you cannot comprehend all the subtleties and will end up squeezing new concepts in your language as you start understanding them. Classical recipe for delicious spaghetti code and we all started there!

Through iterations and deliberate design choices, you may end up with a workable language. But you are no longer a non-programmer by then.

Principia

A work from the early 20th century, mathematics, logic.

I think some expert called Bertrand Russell's and A.N. Whitehead's "Principia Mathematica" initiative a "bizarre" piece of work, when seen from the perspective of a programming language designer.

I can't make a qualified statement about this, as I am neither a mathematician nor a language designer. And I cannot find the exact quote on the internet, sorry. Just saying.

In code? See for yourself :

https://www.principiarewrite.com/ or https://github.com/LogicalAtomist/principia/blob/master/PL.v

I’ve actually posed this question to non programmers. The language they come up with usually resembles natural language English. Alternatively it looks like a box/line drawing. It almost never looks like programming as we conceive it.
It's also not a general-purpose language in many cases.

To the extent that I have made languages (mostly re-implementations or extensions) that were meant to be used by others (usually engineers doing analysis, or operators of a complex system), they had developed a bespoke DSL that represented their problem domain. They tended to fall into two modes: command oriented with mutation, declarative query languages.

The declarative query languages were often the most consistent and uniform throughout. Not totally, but no "Wait, why are we changing the model in the middle of this?" question arose. The command languages tended to be more ad hoc. Like they'd have procedures that changed things and looked more like conventional procedure calls, but suddenly there's a print statement or a query that looks very different than the rest. Like it was multiple languages jammed together, which in a way it was. Taken as a whole it's inconsistent, but taken in context different people wanted the queries than wanted the commands. An operator wanted the commands, an analyst wanted the queries, and the way they spoke to the initial developers resulted in a mishmash design. At one point they may even have been two different products that get combined because analyst/operators were increasingly common (also, automation, why automate via two tools when you can do the same job with one?).

> The declarative query languages were often the most consistent and uniform throughout.

Declarative query languages are where it's at for non programmers IMO. SQL + Excel + Matlab is the sweet spot IMO. Why? Because non-programmers have the most success with these languages! No need to explain Excel. SQL is known by all kids of non-programmers. For example, my father in law sells directory ads. He is one of the least knowledgeable people about computers, and even he knows SQL. Matlab and other array languages also have quick uptake by non-programmers in my experience.

Version 1 might look odd but version 3 would look an awful lot like a normal programming language. There is no special "programmer" phenotype of person, there's only people who program. All of our current programming languages ultimately trace their history to non-programmers.
Perhaps I'm grumpy, but questions like this irk me. A programming language designed by a non-programmer would simply not work. It would have non-logical magic the non-programmer expects us programmers to create, things like the "do what I mean" function. One would have to seek out someone with a nearly programming language formality in their logical thinking, such as a mathematician, or linguist. Whatever such a non-programmer would create, it would have giant logic holes they never imagined, rendering the toy "language" unusable for anything beyond the toy concepts the non-programming imagined, and those would require that "do what I mean" function to work at all.
> One would have to seek out someone with a nearly programming language formality in their logical thinking, such as a mathematician, or linguist

I’ll give you some examples of people who possess the kind of logical mind you describe here yet lack programming ability:

- lawyers work with legal code trying to figure out ways to hack it to help their clients. Say what you will about lawyers, but they are good at finding and exploiting holes in logic.

- doctors debug and apply patches to complex, opaque, nonlinear systems. As a programmer, I can relate.

- teachers break down complex subjects into small digestible chunks that when consumed, produce a desired result. You have to be very literal and precise when giving children instructions; they tend to do what you say, not what you mean.

These three professions are removed from coding but it’s not hard to find analogues to programming in what they do. I think with the right language these people could integrate coding into their work the same way they do writing. And in many cases, with Excel they are. Show me a teacher who doesn’t use a spreadsheet or similar tool to manage their class. You can’t!

I completely agree the professions you provide would be people capable of a creating logical critical paths and therefore a programming language. Lawyers would be quite adapt at it, doctors as well, as would be educators - the examples you cite all exhibit professions that require critical analysis to achieve the basics of their profession. However, at the same time I might suspect the attorney would be the best of these three, followed by the educator. My reasoning for why these two would be better than a doctor at creating a programming language is because doctors do not need to work through the understandings of others, while both attorneys' and teachers' work requires the collective understandings of others to agree and that agreement is through the effort of the attorneys and teachers. That logical indirection required by attorneys and teachers is the insight that would enable them to create a programming language capable of use by others. Doctors would create some illegible scribble.
Just because a teacher can describe steps, that doesn't mean that it would be easy to make a computer do it. For example a teacher may say to find Waldo in an image: "scan for people from left to right, top to bottom, and stop when you find a guy in a red and white shirt." This would not work well as a programming language. How should this be compiled? How do you know if someone is a person, how do you know if they are wearing stripped clothes, what exactly counts as red?
Like I said, children can be just as pedantic as computers, especially when they’re trying.

Anyway, the language you describe wouldn’t work well as a tool, but not all programming languages are tools and are still worth making.

Using your example, this language could be a fun DSL for interacting with pictures. “Find all cars and make them red” I could imagine a backend tied to machine learning algorithms and a database query engine to make this possible. Parse with nlp, extract a query, form a plan with appropriate backends, execute, render output image. I dunno how useful that is, it would be fun and doable. You just gave me a great idea for my next senior capstone group. Thanks.

>Like I said, children can be just as pedantic as computers, especially when they’re trying.

Yes, but what are the chances that they make their new language that is not influenced by any other programming related knowledge to be specified at the right abstraction level using abstractions that are easy to implement? A language that they come up with is not going to be good. Similarly if you were to ask a non engineer to design you an airplane, it wouldn't be a good design. Experts are always going to be able to do a better job than those with less knowledge. I personally do not even think a kid is going to come up with some revolutionary concept that should be included into a language designed by experts.

> that is not influenced by any other programming related knowledge to be specified at the right abstraction level using abstractions that are easy to implement?

Why do they need to be easy to implement? We're talking about design. A lot of PL design is hard to implement. And why does it need to be programming related knowledge? We shouldn't restrict them to things that are easy to implement because then we'd restrict them to a very small subset of possible languages.

So when you say "A language they come up with is not going to be good", then I have to ask how are we measuring good? Because if you think that a teacher would not write a good programming language to write programs in, then I would probably agree with you, because writing programs is not something teachers do.

But like I said, not all programming languages are used to make programs. Most people use a programming language to do things that decidedly don't look like programming to you and I. For example a lot of developers consider Excel to be a not good language for writing programs. Programmers usually lament that Excel users would be better served by a "proper database", but they neglect to appreciate that making this change would quite literally ruin the tool for them. But there are more Excel programmers than all other developer-centric languages combined.

I think a teacher who uses Excel to to manage their classes could design a very compelling DSL for classroom automation.

> I personally do not even think a kid is going to come up with some revolutionary concept

We were talking about teachers designing the language. The children came into the picture because they would provide teachers a model for relating to the pedantic nature of computers.

Actually, I fall right into this category. I’m a mathematician who has just started to program for “real” this year (Python mostly, trying to learn C++, and Mathematica if you consider it a language). Actually, I find it hard to criticize anything about these languages, and most of the time I find my thinking aligns quite well with them.

The main thing I wish for is not a feature in the language, but introductory books for an audience like myself.

It would look like HyperTalk. I still get a kick out of a programming language that feels like English, prepositions and all.
AppleScript is sort of an attempt at that isn't it?

I got there by thinking 'probably not that far off python, but even more pseudocodey, a load of redundant keywords like `for every item in` instead of `for v in`' -- and such constructs probably wouldn't bind variables, you'd repeat yourself referring to `the item` or something.

I also think there'd probably be a lot of focus on (high school) mathematical functions (since that would be the expectation of what computers must be like) and graphics (because that's what computers look like). So everything would be about identifying pixels on the screen and colouring them, locating the cursor by position, that sort of thing.

> So everything would be about identifying pixels on the screen and colouring them, locating the cursor by position, that sort of thing.

Logo

Bring back the turtle.

Turtle graphics are only one part of Logo, which is a powerful Lisp with a syntax that reduces parentheses.
I'm not sure I'd agree that OOP is beautiful. It's just nouns with verbs inside, which doesn't seem particularly better than nouns with verbs outside.

I definitely would not agree that it "enables normal people to model complex systems". Not once in my entire career have I seen a business person provide anything of any value to a software's architecture. Even thinking they could is so strange to me I don't even know where to start to unpack it. Software architecture is so different to the processes it models, it would be nonsensical to even have them try. Like asking someone illiterate to organize a book.

Wasn't that whole concept just marketing by Sun to sell Java and OOP to the world? These days everyone using Java uses so much spring and xml I'm not sure it even makes sense to call it OOP anymore. It's more like AOP+DI with a little OOP thrown in.

If anything, I'd think trying to have a customer design your objects would result in a tremendous mess. The nouns and verbs they would think of are going to be extremely limiting once you add in the common needs like caching, parallelism, network boundaries, async processing, auth, logging, monitoring, protocol formatting, API versioning, etc. The hard parts we need help on from business people are understanding the business models completely, not where X function should live and if it should be in a class or not. And even if they did have strong opinions about that, logic is actually much easier to test when it's not in OOP, and I'd rather have automated unit tests.

Imma clarify:

By "normal" here I meant that you don't have to be some kind of genius in order to model real world using OOP.

And we have shitton of programmers that everyday model real world complexities using OOP

>Wasn't that whole concept just marketing by Sun to sell Java and OOP to the world? These days everyone using Java uses so much spring and xml I'm not sure it even makes sense to call it OOP anymore. It's more like AOP+DI with a little OOP thrown in.

Well, on the other hand C# doesn't have all of that XML fetish/Annotation Oriented Programming (@Transactional :P)/Aspect Oriented Programming magic, so it's not like there's only one interpretation and implementation of OOP and it must be Java's

Well, I'm not a programmer/have never worked with computers for a living and have no formal education in computing, and I have recently been designing my own language as a learning/fun exercise. It looks a lot like forth and ksh had a baby that grew up to become a state machine.