The impact of language choice on github projects
corte.si
corte.si
> I suspect that the Perl result is due to the fact that it becomes harder and harder to contribute to a Perl codebase, the bigger it gets.
And a codebase in any other language retains its original complexity no matter how large it grows? A more reasonable explanation from the comments:
> My experience is that a lot of Perl projects are helper modules with focused scope, which get written as supporting units in the course of other work. They progress to a point where the author(s) consider(s) them satisfactory, then go into maintenance mode.
A number of people have argued that Perl projects somehow approach completion more quickly than other projects, and that this explains the decline. I'm pondering ways to test this idea from the data, but I must say that it sounds pretty implausible to me.
It sounds exactly right to me, if you consider that some 21,000 of those Perl projects are CPAN distributions. There's a very strong bias among CPAN contributors to building small, reusable tools. I am the primary developer of some 30 of those Perl 5 projects. My commit rate has followed the graph of several commits in the initial stages, then very few after a year or eighteen months because the projects entered bugfix-only maintenance mode.
> Perhaps a sign of a wee bit of defensiveness in the Perl community at the moment?
You made some flippant provocative statements apparently based on poor assumptions unsupported by any of the evidence you presented. What did you expect?
Given the huge jump in the number of Perl projects available on GitHub thanks to the recent BackPAN import, it's a reasonable conclusion. Likewise the commit history; CPAN's fourteen years old.
> ... charming ... the type of absolute certainty you can only achieve by having no data at all ... some magical tendency...
You'll have a much more fruitful discussion without this condescension. > I'm open to suggestions of ways to settle the matter with actual data.
Easy suggestion: find the percentage of Perl projects in your study that came from the BackPAN import. See if they match the experiences of the CPAN contributors who've offered explanations.
At any rate, I'm happy to ditch the snark, and talk about something concrete. I'm not sure what your suggestion is - I could separate out the CPAN projects (is there any way to do this programmatically?), and see if they show a greater decline in commits than non-CPAN Perl projects. But that wouldn't settle the issue, because I would still need some way to distinguish between projects that have decreasing commits because developer impetus is petering out as projects become more unwieldy, and projects that have decreasing commits because they are nearing "completion". I would also want to compare the results with an equivalent set of Python or Ruby libaries - choosing an appropriate set would be tricky.
Nowadays it seems like placing the opening bracket on its own line is more popular. I have found people are unusually turned off by these choices. ie, if you prefer the bracket on its own line, code where it is at the end of the line really bothers you, and vice versa. I wonder how much this affects adoption of new projects.
My understanding of the existing implementation, I believe its in IDEA, is that it will do this, and save new changes back in whatever style had the highest frequency when the file was opened.
I'm a fan of having project wide style guidelines. But, if you seriously don't use open source code because of where the curly braces are, you're being pretty stupid.
Interestingly the latest language stats from GitHub (http://github.com/languages) shows this:
Ruby 22%
JavaScript 15%
Perl 14%
Python 9%
Shell 7%
C 6%
PHP 6%
Java 4%
C++ 4%
Objective-C 2%Interesting to see how the Perl community has really hopped on the bandwagon. Happy to see it.
When I started my Github account in Nov 2008, Perl only had around 1% of language metrics. It rose over the past year to 6% and recently jumped to 14% because of the BackPAN inclusion (http://github.com/gitpan/).
Ruby 35.3%
Python 11.5%
Javscript 9.4%
PHP 7.6%
C 5.4%
None 5.3%
Java 5.3%
C++ 4.0%
Objective C 3.8%
Perl 3.6%
C# 1.7%
Erlang 1.4%
ActionScript 1.3%
Scala 1.0%
Lua 0.9%
Clojure 0.7%
Lisp 0.6%
Haskell 0.5%
Go 0.5%
Objective J 0.3%
Pretty close to the overall estimate by github. Some of the difference can probably be explained by the fact that Github tried to eliminate commonly included libraries when they did their file line counts, while I didn't.I understand what you trying to do by eliminating projects with less than 4 watchers but this is arbitrary figure and the results you produced are therefore affected by this decision.
When you play with population samples then side effects can creep in. You can see this in the difference in Ruby being 35.3% in your figs and it being 21% on Github. Its a big difference and can possibly be explained by things like: http://www.ruby-toolbox.com/
Different. Yes. Older. Yes.
Github and SF represent two wholly different development paradigms: SF (mostly) represents the central way for doing development where a central repository contains the officially blessed code and additions are done by sending patches to maintainers when then go ahead and igno^H apply them.
github is based on forking and moving patches around in a more fluid manner.
Due to how the traditional systems (CVS, SVN) work, finding contributors on SF would actually be very hard because the traditional systems don't discern between author and commiter: If I send a patch to awesome-project to a maintainer, they would commit it in their name and it would be impossible to automatically determine my initial ownership.
If I fork awesome-project on github, create a patch and make them pull (or cherry-pick or whatever) from my repository, git will track them as commiter and myself as author.
This is probably another reason why, on the original article, ruby projects seem to have so many more contributors: Some of the older non-ruby projects on github are mirrors of the projects main SVN repository, thus losing all author information on patches coming from external contributors.
One must be careful to really be comparing apples to apples here, but still, in light of these inherent limitations, the article was very interesting.
By the way, though, git does not change the human nature of projects: there is still usually one official one. Git 'forks' are just a more efficient means of doing patch management (you point out some of the benefits), rather than (hopefully), different, competing versions of the same codebase. I say 'hopefully' because in most cases it's nicer for everyone involved if the code in question has one more or less authoritative source, rather than forcing the user to figure out which one of the 788 rails forks is the 'real' one. Project forks are occasionally necessary, but they are also costly, which is why they should be rare, and only for situations where it is impossible to collaborate. In some ways it's a pity that git/github use the 'fork' terminology: while it's technically a fork, in most cases it does not represent a genuine attempt to create a competing code and user base.
but if I send a pull-request or even just a patch created by "git format-patch" and that patch gets applied, then I am credited as author and the person who put it into the official repository is credited as commiter.
In SVN or CVS, you would do this by some comment in the commit message or the changelog but it's entirely optional and often such contributions are only visible in some mailinglist or bugtracker.
This skews any analysis of contributor frequency in the traditional style of managing projects.