The Forum for Discussion about The Third Manifesto and Related Matters

You need to log in to create posts and topics.

Datomic? and a provocative lecture

12

By way of wishing a Happy New Year ...

If you need to work off some of the Seasonal excesses, this lecture should get your blood racing. I imagine the guy managed to step on everybody's toes by the end of his survey. (He certainly annoyed me in what he alleged about Functional Programming.)

I noticed in passing a 'killer app' database tool: Datomic. " a distributed database and implementation of Datalog." sez wp.

Is anybody using Datomic? What for? Which industries? What role does the 'log'ic part of Datalog play?

Starting about 21:30, the guy has quite a bit to say about (interface, implementation) inheritance under the umbrella of 'paradigm' and then 'style' of programming.

Do I understand him to be saying the OOP community now considers 'inheritance' to be of dubious value? (For some value of 'inheritance'.) And the feature of real value is at least 'composition', 'encapsulation' up to 'modularity'? Is this 'back to the future' (again)? 'Modularity' was a key discipline of "Jackson Structured Programming" in COBOL in the '80's, gawdelpus. (The means of 'composition' was PERFORM ... THRU ...; I plead guilty as charged; in mitigation I was a very Junior Programmer at the time.)

Datomic is maybe the most successful of the various Datalog implementations. I've never seen or even heard of it being used in the wild, but that doesn't mean it's not being used. I presume something has kept the company going for the last seven years, but it might be no more or less than the small number of companies listed at https://www.datomic.com/customers.html

Datalog is a subset of Prolog, so it's a "logic" language to the same extent that Prolog is a "logic" language. As I've mentioned before, the theoretical academic database world (at least, that part looking for -- or that was looking for -- "the right way to do databases") now considers it to be a solved problem and the solution is Datalog. That the rest of the world has largely ignored this is considered to be the rest of the world's problem.

The OOP community considering inheritance to be of dubious value is an oversimplification. Good programmers have always regarded it as a tool to be used judiciously. Unfortunately, not-so-good programmers -- encouraged by simplistic examples in texts and tutorials -- tended to overuse it. That led to the usual feature/paradigm/approach popularity pendulum-swing where the vast unwashed adopt it en masse and then reject it en masse. Neither is particularly sensible.

There are cases where inheritance provides a nice solution, but it should normally be treated as a specialised cutting tool that lurks at the very bottom of the toolbox, to be pulled out rarely and with careful consideration. That has always been -- and remains -- the case, despite past pro-inheritance and current anti-inheritance hype.

Note that the main benefit of inheritance is to provide a means to define abstractions and concrete implementations of abstractions whilst avoiding repeating yourself. It facilitates a general programming strategy that features always (or usually) coding to abstractions, and then creating concrete implementations of the abstractions. Done well, this strategy results in extensible, sometimes even generically reusable, code.

Of course, there are alternatives to inheritance (templates, generics, composition, etc.) that notionally achieve the same thing, but even with all of these, inheritance sometimes provides the neatest -- though almost never the least controversial -- way of expressing certain solutions.

I'm the forum administrator and lead developer of Rel. Email me at dave@armchair.mb.ca with the Subject 'TTM Forum'. Download Rel from https://reldb.org

The lecture covers familiar ground. I don't think his grasp of OO matches mine. I can't really comment on the FP bits.

I was interested to see JS top of his list, and C# very close to Java. I think Dave sees the world differently.

Inheritance is very useful for some rather narrow use cases. I used it in building the Andl type system, for example. It takes a lot of work to do right.

Yes, Datalog is well worth knowing about. Alice is big on it. It's not really anything like Prolog to use.

It's widely used in a number of specialised areas, but not in your typical business app. I've run across Datomic a couple of times, but there's plenty out there.

Andl - A New Database Language - andl.org
Quote from dandl on January 4, 2020, 10:33 am

The lecture covers familiar ground. I don't think his grasp of OO matches mine. I can't really comment on the FP bits.

I was interested to see JS top of his list, and C# very close to Java. I think Dave sees the world differently.

Not sure what you mean, but whatever you mean, I don't think it's just me.

The lecture refers to a popularity hierarchy much less frequently cited than the TIOBE Index, which currently puts Java first, C second, Python 3rd, C++ 4th, C# 5th, VB.NET 6th, and JavaScript 7th. That roughly accords with what I see in the wild, but all of the popularity hierarchies are imprecise estimates at best. I don't think any of us would disagree which languages are categorically popular and which are -- relatively speaking -- not. E.g., C#, JavaScript and Java are popular; Coq is not. Whether Java or C# or JavaScript is more or less popular than the other two hardly matters.

Inheritance is very useful for some rather narrow use cases. I used it in building the Andl type system, for example. It takes a lot of work to do right.

Yes, Datalog is well worth knowing about. Alice is big on it. It's not really anything like Prolog to use.

That's because it's used for very different things in a different context, but Datalog is (a subset of) Prolog. Rather like Common LISP and Emacs LISP are both LISP, but used in a different context for very different purposes.

I'm the forum administrator and lead developer of Rel. Email me at dave@armchair.mb.ca with the Subject 'TTM Forum'. Download Rel from https://reldb.org
Quote from Dave Voorhis on January 4, 2020, 10:51 am
Quote from dandl on January 4, 2020, 10:33 am

The lecture covers familiar ground. I don't think his grasp of OO matches mine. I can't really comment on the FP bits.

I was interested to see JS top of his list, and C# very close to Java. I think Dave sees the world differently.

Not sure what you mean, but whatever you mean, I don't think it's just me.

I'm sure there are other Java developers who share your opinion.

The lecture refers to a popularity hierarchy much less frequently cited than the TIOBE Index, which currently puts Java first, C second, Python 3rd, C++ 4th, C# 5th, VB.NET 6th, and JavaScript 7th. That roughly accords with what I see in the wild, but all of the popularity hierarchies are imprecise estimates at best. I don't think any of us would disagree which languages are categorically popular and which are -- relatively speaking -- not. E.g., C#, JavaScript and Java are popular; Coq is not. Whether Java or C# or JavaScript is more or less popular than the other two hardly matters.

No. The TIOBE index is some weighted mix of stuff that's presumable easy to measure (by a company that actually does quality stuff):

"The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings."

The SlashData index is based on a survey (by a company that actually does developer research):

Every year we survey more than 40,000 developers in over 150 countries working in web, desktop, cloud, mobile, IoT, games, AR/VR, machine learning and data science.

So taken at face value, one should prefer SlashData. While Java is very popular, many more developers actually use JS, and C# comes really close. That matches my experience.

 

Andl - A New Database Language - andl.org
Quote from dandl on January 5, 2020, 11:15 am
Quote from Dave Voorhis on January 4, 2020, 10:51 am
Quote from dandl on January 4, 2020, 10:33 am

The lecture covers familiar ground. I don't think his grasp of OO matches mine. I can't really comment on the FP bits.

I was interested to see JS top of his list, and C# very close to Java. I think Dave sees the world differently.

Not sure what you mean, but whatever you mean, I don't think it's just me.

I'm sure there are other Java developers who share your opinion.

The lecture refers to a popularity hierarchy much less frequently cited than the TIOBE Index, which currently puts Java first, C second, Python 3rd, C++ 4th, C# 5th, VB.NET 6th, and JavaScript 7th. That roughly accords with what I see in the wild, but all of the popularity hierarchies are imprecise estimates at best. I don't think any of us would disagree which languages are categorically popular and which are -- relatively speaking -- not. E.g., C#, JavaScript and Java are popular; Coq is not. Whether Java or C# or JavaScript is more or less popular than the other two hardly matters.

No. The TIOBE index is some weighted mix of stuff that's presumable easy to measure (by a company that actually does quality stuff):

"The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings."

The SlashData index is based on a survey (by a company that actually does developer research):

Every year we survey more than 40,000 developers in over 150 countries working in web, desktop, cloud, mobile, IoT, games, AR/VR, machine learning and data science.

So taken at face value, one should prefer SlashData. While Java is very popular, many more developers actually use JS, and C# comes really close. That matches my experience.

SlashData is a self-selecting developer sample, so statistically questionable.

And where are embedded systems, financial trading and banking?

Those are just fields with which I interacted in one way or another last week. There are more not considered and each with their own industry-specific tendencies, like health informatics.

In embedded systems, C and VHDL dominate. There is a lot of embedded development going on.

Financial trading and banking are almost entirely non-Web or "iceberg model", i.e., vast invisible backend and -- depending on application -- maybe a tiny visible Web frontend. A bit of JavaScript/Web might poke up above the water but there's a vast mass of Java underneath.

But again, the important point is that I don't think any of us would disagree which languages are categorically popular. Which among Java, C#, JavaScript and Python is more or less popular than the others hardly matters. In general, they're all popular and for any practical purpose can be regarded as roughly equally popular.

Though if I had to predict the future, I'd guess it likely that JavaScript -- at least as ECMAScript -- will be the first from that set to fade from popularity as it's replaced by transpiling alternatives -- successors to Dart or TypeScript, perhaps -- and compiled alternatives, as-yet to be invented and facilitated by WebAssembly. JavaScript on the server side has little reason to continue to exist except in small projects by relatively weak developers *cough* Node *cough* as there are various superior alternatives.

I'm the forum administrator and lead developer of Rel. Email me at dave@armchair.mb.ca with the Subject 'TTM Forum'. Download Rel from https://reldb.org

So taken at face value, one should prefer SlashData. While Java is very popular, many more developers actually use JS, and C# comes really close. That matches my experience.

SlashData is a self-selecting developer sample, so statistically questionable.

On available data, still better than TIOBE. Do you know more?

And where are embedded systems, financial trading and banking?

Those are just fields with which I interacted in one way or another last week. There are more not considered and each with their own industry-specific tendencies, like health informatics.

In embedded systems, C and VHDL dominate. There is a lot of embedded development going on.

Absolutely. The standard electronic device methodology is: choose a CPU; add some chips;; wire it up; start coding.

Financial trading and banking are almost entirely non-Web or "iceberg model", i.e., vast invisible backend and -- depending on application -- maybe a tiny visible Web frontend. A bit of JavaScript/Web might poke up above the water but there's a vast mass of Java underneath.

Agreed, except I see far more C# than Java in the back office because of Office, Active Directory and the like. Trading is mostly Java. Games dev is C/C++ {Unreal or custom engine), C# (Unity). AI is Python.

But again, the important point is that I don't think any of us would disagree which languages are categorically popular. Which among Java, C#, JavaScript and Python is more or less popular than the others hardly matters. In general, they're all popular and for any practical purpose can be regarded as roughly equally popular.

Though if I had to predict the future, I'd guess it likely that JavaScript -- at least as ECMAScript -- will be the first from that set to fade from popularity as it's replaced by transpiling alternatives -- successors to Dart or TypeScript, perhaps -- and compiled alternatives, as-yet to be invented and facilitated by WebAssembly. JavaScript on the server side has little reason to continue to exist except in small projects by relatively weak developers *cough* Node *cough* as there are various superior alternatives.

JS will survive, and already most new code is transpiled ES2015, Typescript or similar. Node survives because of NPM and transpiling, not because of Node itself.

 

Andl - A New Database Language - andl.org
Quote from dandl on January 6, 2020, 7:52 am

So taken at face value, one should prefer SlashData. While Java is very popular, many more developers actually use JS, and C# comes really close. That matches my experience.

SlashData is a self-selecting developer sample, so statistically questionable.

On available data, still better than TIOBE.

That's my point -- it's not better than TIOBE. In the scientific/academic community it's generally considered suspect. Note that the description at https://www.slashdata.co/methodology/ gives no rigorous details of how/where samples are selected. It's generally assumed -- probably with at least some basis -- that the data is largely or exclusively drawn from SlashDot users, which is wholly self-selecting.

Do you know more?

PYPL: http://pypl.github.io/PYPL.html

Github: https://octoverse.github.com/

Indeed: https://www.codingdojo.com/blog/the-7-most-in-demand-programming-languages-of-2019

Searching job sites is somewhat labour intensive -- unfortunately, they rarely emit easily-digestible stats -- but give perhaps the most direct picture of language use. Indeed.co.uk (and I assume all the other country-specific Indeeds, too) has a handy feature where your recent searches are summarised when you return to the site. I searched for known popular languages, left and came back later. At present, it tells me there are:

26,352 C jobs
11,287 Python jobs
10,030 JavaScript jobs
9,210 Java jobs
6,962 C# jobs
5,507 C++ jobs
3,453 PHP jobs

But once again, the important point is that I don't think any of us would disagree which languages are categorically popular. Which among Java, C#, JavaScript and Python is more or less popular than the others hardly matters. In general, they're all popular and for any practical purpose can be regarded as roughly equally popular.

I'm the forum administrator and lead developer of Rel. Email me at dave@armchair.mb.ca with the Subject 'TTM Forum'. Download Rel from https://reldb.org
Quote from dandl on January 6, 2020, 7:52 am

... I see far more C# than Java in the back office because of Office, Active Directory and the like. Trading is mostly Java. Games dev is C/C++ {Unreal or custom engine), C# (Unity). AI is Python.

I thought I'd respond to this separately, because it's a separate line of thought and really deserves its own threadlet.

This reminds me of the friendly debates I sometimes saw early in my career between the mainframe-ists (IBM big iron, 360/370; Amdahl etc.) and the midrange-ists (DEC, Sperry/Unisys, IBM 36/38 or AS400, etc.), each who claimed a certain supremacy.

My impression is that the emergence of the PC pushed mainframe-ists largely in a Java direction; the midrange-ists largely in a Microsoft (eventually .NET) direction; and for business too small for either, toward a dog's breakfast of random desktop / small office technology, most using or abusing the Microsoft Office suite in some fashion and almost certainly with MS Backoffice or similar -- and increasingly with various cloud-based services like SalesForce -- but without directly exposing C# or Java or any other "programmer" technology anywhere (small business rarely writes code, unless the business is a code shop) but almost certainly uses both and others on a daily basis.

I'm the forum administrator and lead developer of Rel. Email me at dave@armchair.mb.ca with the Subject 'TTM Forum'. Download Rel from https://reldb.org

I would broadly agree, for line of business apps. I've never been in the IBM camp, so missed out on that pull. I hung out with the dwarves, then went mini then PC.

What I did see in the early 1990s was a massive adoption of MS Windows for back office. Govt, telco, finance/insurance, distribution kept their big iron in the glass rooms, but rolled out Windows everywhere for the back office. OS/2 and Novell died, Windows got it all. That meant VB and MS SQL in support. Then when they did early web sites it was a battle between IIS/ASP and Websphere/beans or similar for budget.

Small business is still driven by their choice of accounting system and office systems. The biggest in Aus is MYOB, and that's written in C#. Newer web businesses never had IBM and didn't want to use Oracle, so had no reason to go to Java, which also acquired a poor reputation over security issues.You see Java everywhere, I see very little outside big iron IBM, OSS and Android. I guess it reflects different life experience.

Andl - A New Database Language - andl.org
12