Introduction

In this notebook we ingest programming languages creation data from "Programming Language DataBase" and visualize several statistics of it.
We do not examine the data source and we do not want to reason too much about the data using the stats. We started this notebook by just wanting to make the bubble charts (both 2D and 3D.) Nevertheless, we are tempted to say and justify statements like:
◼
  • Pareto holds, as usual.
  • ◼
  • Language creators tend to do it more than once.
  • ◼
  • Beware the Second system effect.
  • Data ingestion

    Here we get the TSC file with Wolfram Function Repository (WFR) function ImportCSVToDataset:
    In[]:=
    url="https://pldb.io/posts/age.tsv";​​dsData=ResourceFunction["ImportCSVToDataset"][url,"Dataset","FieldSeparators"->"\t"];​​dsData[[1;;4]]
    Out[]=
    Out[]=
    Here we summarize the data using the WFR function RecordsSummary:
    In[]:=
    ResourceFunction["RecordsSummary"][dsData,"MaxTallies"->12]
    Out[]=
    
    1 id
    actionscript
    1
    ada
    1
    advice-taker
    1
    algol-60
    1
    ampl
    1
    antlr
    1
    apl
    1
    aplus
    1
    arc
    1
    arm
    1
    arquero
    1
    (Other)
    204
    ,
    2 name
    A+
    1
    ActionScript
    1
    Ada
    1
    Advice Taker
    1
    文言文編程語言
    1
    ALGOL 60
    1
    AMPL
    1
    ANTLR
    1
    Apache Arrow
    1
    APL
    1
    Arc
    1
    (Other)
    204
    ,
    3 pldbScore
    Min
    15930
    1st Qu
    20920
    Mean
    22156.1
    Median
    22757
    3rd Qu
    23706.3
    Max
    24427
    ,
    4 rank
    Min
    1
    1st Qu
    77.75
    Median
    348
    Mean
    840.93
    3rd Qu
    1308
    Max
    4820
    ,
    5 appeared
    Min
    1948
    1st Qu
    1978.25
    Mean
    1993.02
    Median
    1995
    3rd Qu
    2008
    Max
    2023
    ,
    6 tags
    pl
    136
    dataNotation
    9
    textMarkup
    9
    library
    7
    grammarLanguage
    6
    queryLanguage
    4
    stylesheetLanguage
    4
    editor
    3
    protocol
    3
    compiler
    2
    dataFlow library
    2
    (Other)
    30
    ,
    7 creators
    Niklaus Wirth
    8
    Breck Yunits
    7
    John Backus
    5
    Chris Lattner
    4
    Larry Wall
    4
    Tim Berners-Lee
    4
    Anders Hejlsberg
    3
    Arthur Whitney
    3
    Brendan Eich
    3
    Donald Knuth
    3
    Hampton Lintorn-Catlin
    3
    (Other)
    168
    ,
    8 ageAtCreation
    Min
    16
    1st Qu
    30
    Median
    35
    Mean
    36.7535
    3rd Qu
    42
    Max
    70
    ,
    9 foundationScore
    1st Qu
    0
    Median
    0
    Min
    0
    3rd Qu
    8
    Mean
    32.2791
    Max
    970
    ,
    10 numberOfUsersEstimate
    Min
    0
    1st Qu
    176
    Median
    1690
    3rd Qu
    16837.8
    Mean
    267334.
    Max
    7179119
    ,
    11 numberOfJobsEstimate
    1st Qu
    0
    Median
    0
    Min
    0
    3rd Qu
    46
    Mean
    8224.23
    Max
    771996
    ,
    12 inboundLinksCount
    1st Qu
    0
    Min
    0
    Median
    1
    3rd Qu
    9
    Mean
    33.9674
    Max
    980
    ,
    13 measurements
    Min
    6
    1st Qu
    15
    Median
    24
    Mean
    32.0744
    3rd Qu
    41.75
    Max
    140
    
    Here is a list of languages we use to "get orientated" in the plots below:
    In[]:=
    lsFocusLangs={"C++","Fortran","Java","Mathematica","Perl 6","Raku","SQL","Wolfram Language"};
    Here we find the most important tags (used in the plots below):
    In[]:=
    lsTopTags=ReverseSortBy[Tally[Normal@dsData[All,"tags"]],Last][[1;;7,1]]
    Out[]=
    {pl,textMarkup,dataNotation,library,grammarLanguage,stylesheetLanguage,queryLanguage}
    Here we add the column "group" based on the focus languages and most important tags:
    In[]:=
    dsData=dsData[All,Append[#,"group"->Which[MemberQ[lsFocusLangs,#name],"focus",MemberQ[lsTopTags,#tags],#tags,True,"other"]]&];
    Here are dataset’s dimensions (at this point):
    In[]:=
    Dimensions[dsData]
    Out[]=
    {215,14}

    Distributions

    Here are the distributions of the variables/columns:
    ◼
  • age at creation
  • ◼
  • i.e. "How old was the creator?"
  • ◼
  • appeared"
  • ◼
  • i.e. "In what year the programming language was proclaimed?"
  • In[]:=
    Association@Map#->HistogramNormal@dsData[All,#],20,"Probability",
    &,{"ageAtCreation","appeared"}
    Out[]=
    ageAtCreation
    ,appeared
    
    Here are corresponding Box-Whisker plots together with tables of their statistics:
    In[]:=
    aBWCs=Association@Map#->BoxWhiskerChartNormal@dsData[All,#],"Outliers",
    &,{"ageAtCreation","appeared"};​​aBWCs=AssociationThread[Keys[aBWCs],Transpose[{Values[aBWCs],#[[2]]&/@Cases[aBWCs,Tooltip[___],∞]}]]
    Out[]=
    ageAtCreation
    ,
    max
    70
    75%
    42
    median
    35
    25%
    30
    min
    16
    ,appeared
    ,
    max
    2023
    75%
    2008
    median
    1995
    25%
    7913
    4
    min
    1948
    

    Pareto principle manifestation

    Number of creations

    Here is the Pareto principle plot of for the number of created (or renamed) programming languages per creator (using the WFR function ParetoPrinciplePlot):
    In[]:=
    ResourceFunction["ParetoPrinciplePlot"][Association[Rule@@@Tally[Normal@dsData[All,"creators"]]],ImageSize->Large]
    Out[]=
    We can see that ≈25% of the creators correspond to ≈50% of the languages.

    Popularity

    Obviously, programmers can and do use more than one programming language. Nevertheless, it is interesting to see the Pareto principle plot for the languages "mind share" based on the number of users estimates.
    Remark: Again, the plot above is "wrong" -- programmers use more than one programming language.

    Correlations

    In order to see meaningful correlation, pairwise plots we take logarithms of the large value columns:
    Remark: Note that we "cheat" by adding 1 before taking the logarithms.
    We obtain the tables of correlations plots using the newly introduced, experimental PairwiseListPlot. If we remove the rows with zeroes some of the correlations become more obvious. Here is the corresponding tab view of the two correlation tables:
    Remark: Given the names of the data columns and the corresponding obvious interpretations we can say that the stronger correlations make sense.

    Bubble chart 2D

    In this section we make an informative 2D bubble chart with (tooltips).
    First, note that not all triplets of "appeared","ageAtCreation", and "numberOfUsersEstimate" are unique:
    Hence we make two datasets: (1) one for the core bubble chart, (2) the other for the labeling function:
    Here is the labeling function (see the section "Applications" of the function page of BubbleChart):
    Defining a custom Callout function:
    Here is the bubble chart:
    Remark: The programming language J is a clear outlier because of creators' ages.

    Bubble chart 3D

    In this section we a 3D bubble chart.
    As in the previous section we define two datasets: for the core plot and for the tooltips:
    Here is the corresponding labeling function:
    Make a bubble 3D chart:
    Make a 3D plot with custom callouts:
    Here is the combined 3D chart:
    Remark: In the 3D bubble chart plot "Mathematica" and "Wolfram Language" are easier to discern.

    Second system effect traces

    In this section we try -- and fail -- to demonstrate that the more programming languages a team of creators makes the less successful those languages are. (Maybe, because they are more cumbersome and suffer the Second system effect?)
    Remark: This section is mostly made "for fun." It is not true that each sets of languages per creators team is made of comparable languages. For example, complementary languages can be in the same set. (See, HTTP, HTML, URL.) Some sets are just made of the same language but with different names. (See, Perl 6 and Raku, and Mathematica and Wolfram Language.) Also, older languages would have the First mover advantage.
    Make creators to index association:
    Make a bubble chart with relative popularity per creators team:
    From the plot above we cannot decisively say that:
    The most recent creation of a team of programming language creators is not team’s most popular creation.
    That statement, though, does hold for a fair amount of cases.

    Instead of conclusions

    Consider:
    ◼
  • Making an interactive interface for the variables, types of plots, etc.
  • ◼
  • Placing callouts for the focus languages in bubble charts.
  • References

    Here are reference links with explanations and links to dataset files:
    ◼
  • The Ages of Programming Language Creators (pldb.io)
  • ◼
  • Short note about data and related statistics; provides a link to a TSV file with the data.
  • ◼
  • The Ages of Programming Language Creators (datawrapper.dwcdn.net)
  • ◼
  • "Just a plot"; provides a link to a CSV file with the data.
  • ◼
  • The Ages of Programming Language Creators (Reddit)
  • ◼
  • Link(s) and discussion.
  • CITE THIS NOTEBOOK

    Computational exploration for the ages of programming language creators dataset​
    by Anton Antonov​
    Wolfram Community, STAFF PICKS, May 21, 2024
    ​https://community.wolfram.com/groups/-/m/t/3180327