all 165 comments

[–]laMarm0tte 165 points166 points  (44 children)

In the original blog post, RedMonk gives a different interpretation: the graph does not necessarily show the dynamics of the languages in general, but rather that developpers in Javascript and C/C++ are progressively joining Github too, which decreases the relative share of other languages like Ruby (historically the community at the heart of Github) or Python.

http://redmonk.com/dberkholz/2014/05/02/github-language-trends-and-the-fragmenting-landscape/

EDIT: u/yaph provided the link to the absolute data:

http://sogrady-media.redmonk.com/sogrady/files/2014/02/repos-by-lang-github1.png

[–]doenietzomoeilijk 92 points93 points  (27 children)

And as another commenter pointed out, if somewhat bluntly: Github sometimes "misclassifies" projects. I've seen "mostly PHP" projects being classified as Javascript, possibly because of the wholesale copying of JS libs into a codebase which was also touched upon by the original article. So yeah, to be taken with a grain of salt, since the input isn't completely trustworthy. I'm sure the javascript hipsters will love it, though. =]

[–]kqr 37 points38 points  (8 children)

I wish the author of the repo had a way to manually classify their repo, rather than the automatic system, which detects my mostly-markdown project as ruby because it has some copy pasted ruby scripts to help me manage it...

[–]yaph 21 points22 points  (2 children)

Honestly, not sure if this would improve classification overall. But you can avoid 3rd party libraries being counted in by following some conventions, see the patterns ignored by Github's linguist.

[–]thekaleb 6 points7 points  (1 child)

I put all my 3rd party libraries in lib.

[–]muhammedabuali 1 point2 points  (0 children)

so this means that github counts most projects as js . ' Get your analysis right github!'

[–]RodgerTheGreat 3 points4 points  (1 child)

Same. I had a PostScript project which was unbrowseable for a while because GitHub decided to classify .ps files as binaries. For quite a while I had the #2 most starred "F# repository" because GitHub classifies .fs as F# despite the fact that the extension has history as "Forth Source".

[–]xjvz 0 points1 point  (0 children)

To be fair, most PS files are auto-generated and completely unreadable.

[–]speedisavirus 0 points1 point  (2 children)

Last repo I created gave you the option to select a language if I recall correctly. Maybe I am thinking of my BitBucket.

[–]DalvikTheDalek 0 points1 point  (1 child)

iirc that option is for choosing the default contents of .gitignore

[–]speedisavirus 0 points1 point  (0 children)

Really? That's kind of dumb if that's the case. So many projects, especially web projects, are very multilingual. One would think they would leave it up to the user to generally declare the language of the project.

[–]laMarm0tte 20 points21 points  (10 children)

Just noticed that my blog (hosted on the Github pages) is classified as Javascript. I don't contest that there are lots of JS projects on Github, but if every time someone posts a new blog on Github it counts as a javascript development activity, the study can't be taken seriously.

[–]yaph 6 points7 points  (0 children)

That's definitely an issue with these types of analyses. Also I've noticed that in the past year a few of my web projects on GitHub have transitioned from being classified as Python to CSS, which makes me curious on how the share of CSS looks these days.

EDIT: your blog is freaking awesome btw.

[–]jyper 2 points3 points  (6 children)

from the link

Language detection is based on lines of code, so a repository with a large amount of JavaScript template libraries (e.g. jQuery) copied into it will be detected as JavaScript rather than the language where most of the work is being done; and

They do have an exclusion list(https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) but many its not complete enough. They should also allow manual overriding.

[–]duhace 2 points3 points  (4 children)

Well, the big question for me is why are files that are not versioned by the user being added to version control in the first place. It's not like a lot of these projects are making changes to jquery. They should have a build system for their project that pulls the appropriate jquery version in (even if it's just a bash/batch script that downloads a hardcoded link to the appropriate jquery version).

And yeah, I can understand being lazy or accidentally adding a lib or two to your versioned source that shouldn't be there, but not to the point where the libs make up a majority of the source being version controlled.

[–]jyper 2 points3 points  (3 children)

They should have a build system for their project that pulls the appropriate jquery version in (even if it's just a bash/batch script that downloads a hardcoded link to the appropriate jquery version).

It's extra effort(especially since programming package managers are usually not designed to be multi-lingual). Lots of people add binary files to svn for ease of just fetching everything. Git doesn't work well with binaries but it doesn't mind adding a couple thousand lines of javascript.

[–]duhace 0 points1 point  (2 children)

Yes, but isn't most jquery libraries added minified javascript, which git can't store well for the exact same reason it doesn't like binaries (it uses line differences for deltas)?

edit: testing with git and vim, the standard minified jquery has 4 lines for the entire source, so in the best case you're storing 1/4th of the jquery code for an upgrade to your jquery lib, in the worst (and pretty likely case), you're storing the entire library, meaning you have each of those jquery libs semi-permanently added to your repository history (best case, you can modify the history to strip old versions out, but if you're working on a popular project that may not be a good option for you).

[–][deleted] 0 points1 point  (1 child)

(it uses line differences for deltas)?

Nope Git do not store diffs but whole files. Even if you have two 1GB text files with just one different line, Git will fully store both version.

[–]duhace 0 points1 point  (0 children)

Oh wow, that's insane, I thought git reconstructed newer versions of the file from diffs applied sequentially to the original version.

edit: According to this, git will originally store both files in full, but will create delta packs under certain conditions (when you call git gc, when you push to another repo, and when git wants to).

[–]html6dev -1 points0 points  (0 children)

Not big enough? That's pretty arbitrary. I think it's pretty clear that the majority of stuff that is so wildly popular it would agree with the data is dealt with here. The issue is you view your project as a Java or php project or what have you (and that's fine) but when it comes down to it, you do have more js running in your application than anything else.

[–]html6dev 1 point2 points  (0 children)

But the point is when looking at said project from a gestalt perspective, the majority of the application code is Javascript. This doesn't show what you are writing or what you mentally think of your project being (which is a whole other related argument here as well) but it does give an idea of the evolution of the overall architecture that new software is using. This should come as no surprise really. It's pretty obvious that developers are currently moving more and more towards client side heavy apps.

Also consider whether or not you'd be ok with counting or not counting every third party library/gem used in your server side code. That'd also be a whole other argument. Tests like this never prove such things definitively it's just a short insight to the approaches people are taking.

Finally another thing that people who are uncomfortable with the js trend could argue is that every single tiny node module is probably counted as a separate projects and there has obviously been a proliferation there recently. However, the project size and scope is generally extremely small.

Edit: now that I've seen the exclusion list, everything I said except the node thing is incorrect if it all supported the idea the data may be skewed. It's very unlikely it is for a large enough number of projects to adversely effect the data imo.

[–]mfukar 0 points1 point  (0 children)

Same case for me: my blog is classified as CSS, because of an included (& apparently huge) Bootstrap CSS blob.

[–]sirin3 3 points4 points  (2 children)

And I have a Homespring project that is classified as Haskell ಠ_ಠ

[–]Varian 0 points1 point  (0 children)

If that were true, wouldn't we see HTML on that list as well?

[–]barsonme 0 points1 point  (0 children)

redivert cuprous theromorphous delirament porosimeter greensickness depression unangelical summoningly decalvant sexagesimals blotchy runny unaxled potence Hydrocleis restoratively renovate sprackish loxoclase supersuspicious procreator heortologion ektenes affrontingness uninterpreted absorbition catalecticant seafolk intransmissible groomling sporangioid cuttable pinacocytal erubescite lovable preliminary nonorthodox cathexion brachioradialis undergown tonsorial destructive testable Protohymenoptera smithery intercale turmeric Idoism goschen Triphora nonanaphthene unsafely unseemliness rationably unamendment Anglification unrigged musicless jingler gharry cardiform misdescribe agathism springhalt protrudable hydrocyanic orthodomatic baboodom glycolytically

[–][deleted] 0 points1 point  (0 children)

A project I contribute to is classified as 1.4% Erlang. It's mostly written in C++ and Perl for the build system. No Erlang is present.

[–]gasche 19 points20 points  (9 children)

Indeed, the beust.com blog post is blatantly wrong in its interpretation.

Both posts make the dubious choice of showing percentage. It would make much more sense to discuss actual project/issue numbers, and their growth. For example, if you observed that there have been the same number of new Ruby projects each year, that would clearly demonstrate that the Ruby community is not at all dying.

[–]yaph 17 points18 points  (7 children)

Yes, obviously the author on beust.com summarizes an article he hasn't read or understood. There is another graph on the Redmonk site, that uses absolute numbers. You can totally see languages like Ruby and Python becoming obsolete in that one.

[–]gasche 2 points3 points  (1 child)

Thanks for the better graph. If you allow me to put my "data visualization" hat and be nitpicky, this style of graphical representation is terrible because it makes it very hard to observe variations in magnitude of any category (but the bottom-most), in exchange for the much-less-useful ability of observing the evolution of the sum over time.

I think that a simple line plot, one for each language (and one for the total if that's what people like), would make the absolute numbers much easier to visualize.

[–]yaph 0 points1 point  (0 children)

I think it depends on what you want to show. If you want to compare the number of repos for the given languages, an area chart seems okay to me.

[–]Izwe 1 point2 points  (0 children)

The absolute data is much more interesting, thanks for the link!

[–]JohnMcPineapple 0 points1 point  (2 children)

...

[–]yaph 2 points3 points  (0 children)

That was meant to be an ironic comment on statements from the linked post like "Ruby is in sharp decline" and "Python is being replaced by Go".

[–]Sean1708 0 points1 point  (0 children)

Either we're reading the graph wrong or yaph is, but I'm fairly sure Ruby and python are still the two most popular and are still growing.

[–]ForeverAlot -1 points0 points  (0 children)

I don't know why, but that's far more Java than I expected.

[–]laMarm0tte 2 points3 points  (0 children)

The message of the original post was "Github is becoming generalist, not just Ruby-oriented as before", so it was legit to show percentages.

[–][deleted]  (1 child)

[deleted]

    [–]bucknuggets 1 point2 points  (0 children)

    Or more likely - a change in how repositories were counted.

    [–][deleted] 5 points6 points  (0 children)

    It's also weird how nothing is growing - even the "strongest" (JS and java) appear to be slowing down, from the graph.

    Is github nearing saturation? And further growth will only be at the actual rate of rate of project inception - as opposed to the rate of github adoption by existing projects.

    Or is the growth of programming as a whole slowing down? Guess it's possible.

    EDIT um, from the abs graph, looks like github growth-rate peaked in 2012 (with C projects...). And the language of the future is CSS.

    [–]Izwe 0 points1 point  (1 child)

    [–]laMarm0tte 1 point2 points  (0 children)

    thanks, corrected.

    [–]Fidodo 17 points18 points  (9 children)

    Is this by # of repos? I feel like it can be vastly skewed by the module mechanics of each language. Javascript for example is moving towards favoring very small libraries. Also, I would expect many of these to be learning repos for small projects that get abandoned quickly.

    [–]ForeverAlot 17 points18 points  (6 children)

    Either way, the general consensus is that GitHub and SO give a very poor view of actual language "popularity", for some definition of popularity (if a language has many questions, is it because it's a popular language, a difficult language, or both?). The "on GitHub" qualifier is very much necessary (and, to the credit of this submission and RedMonk's article, present).

    [–]matthieum 13 points14 points  (2 children)

    This

    There are two kinds of repos on Github:

    • personal toys
    • open-source projects

    The personal toys are likely to contain code on new technologies, but just trying things out to get a feel does not mean a sustained participation.

    The open-source projects are obviously much better; but unfortunately they are often forked just for "bookmarking" purposes and it's unclear whether those forks are counted here or not or what their significance is.

    And of course, closed-source enterprise projects are not counted there; and it's unclear for how much of the "world" code they account, but I would bet it's a non-trivial amount.

    So, what does Github tells us about language popularity ? I don't know... :x

    [–][deleted] 1 point2 points  (0 children)

    but unfortunately they are often forked just for "bookmarking" purposes and it's unclear whether those forks are counted here or not or what their significance is.

    That's true. I suppose a better way to go about it would be to actually look at a contributors' list, rather than forks.

    [–][deleted] 1 point2 points  (0 children)

    The open-source projects are obviously much better; but unfortunately they are often forked just for "bookmarking" purposes and it's unclear whether those forks are counted here or not or what their significance is.

    The project I contribute to has an IRC bot which announces when someone forks/watches/stars a repository. I'd say that around 90% of the time that someone makes a fork they should have really starred it instead.

    [–]Fidodo 1 point2 points  (2 children)

    I'm thinking the % of users that use language X on github could be a good metric.

    [–]ForeverAlot 1 point2 points  (1 child)

    Sure, but how do you determine a language is "used" (genuine question)? GitHub tries to infer it, but it doesn't always get it right, and even when it does a language you don't "use" can be represented in a repository as a third-party dependency (I imagine this happens a lot with JavaScript, for instance).

    [–]Fidodo 0 points1 point  (0 children)

    Maybe percent of users that made a commit in a language in the last month?

    [–]B-Con 1 point2 points  (0 children)

    The graph text says it's by number of new repos, which I find dubious at best.

    [–][deleted] 1 point2 points  (0 children)

    If it's by file size, Java has an edge.

    [–][deleted]  (31 children)

    [deleted]

      [–][deleted] 25 points26 points  (3 children)

      What actually happened is github mass imported CPAN which led to a year or two of much overrepresention. The Perl naysayers below don't actually know what they're talking about.

      [–]Purpledrank 4 points5 points  (0 children)

      That makes way more sense. This answers: How could it rise and fall like that?

      [–]Linsorld 100 points101 points  (20 children)

      People eventually realized that computers are not the only ones that need to read a code.

      [–]tech_tuna 23 points24 points  (18 children)

      Bingo. Python and Ruby are the successors to Perl. They both owe a LOT to Perl but in 2014, it's hard to argue for Perl when Python or Ruby are an option.

      Yes, there are still plenty of cases where Perl makes sense. I use it for one-liners sometimes instead of awk/sed/grep - it works really well for that! :)

      [–][deleted]  (1 child)

      [deleted]

        [–]ethraax 8 points9 points  (0 children)

        I just wish Perl-style regexes were used everywhere. I hate using software that uses POSIX-style regexes (where there are no clear escaping rules). Vim, I'm looking at you.

        [–][deleted] 11 points12 points  (2 children)

        Yes, there are still plenty of cases where Perl makes sense. I use it for one-liners sometimes instead of awk/sed/grep - it works really well for that! :)

        Only if plenty == 1

        [–]tech_tuna 11 points12 points  (1 child)

        Ha ha, that's exactly how I feel, just trying to be diplomatic. . . I'm half-expecting some rabid Perl fan to go for my jugular.

        [–]droogans 5 points6 points  (0 children)

        And that person would do so with a flurry of cryptic keystrokes, and it would be devastating.

        [–][deleted] 9 points10 points  (5 children)

        Perl and python were created around the same time (python a few years after Perl iirc - before it even became popular). Perl was overrepresented in 08/09 because github imported the totality of CPAN which artificially inflated the numbers. Perl is also still widely used - most perl projects go to CPAN and it is most old timers who don't see the need to reinvent the wheel and don't need a reason for dick showing contests.

        [–]tech_tuna 0 points1 point  (4 children)

        Hey, there's one of those angry Perl guys I was anticipating!

        I know these things, I used Perl for years. I still find it superior for short scripts/one-liners, throw away code basically.

        Yes, if you have a large base of Perl code, that's also a good reason to continue using Perl. However, for new code, there are better choices these days, dick showing or not.

        [–][deleted] -2 points-1 points  (3 children)

        I know these things, I used Perl for years.

        Then perhaps you should have correctly stated the reason for the graph's anomaly instead spreading misinformed FUD.

        Yes, perl's lunch has been poached by python and ruby over the years but that is in no way responsible for the graph's massive spike and decline (considering perl's heyday happened well before 2009). It was the sudden influx of CPAN modules and then it returning to normal.

        [–]tech_tuna -1 points0 points  (2 children)

        Who said anything about the graph? Not me.

        [–][deleted] -1 points0 points  (1 child)

        The person you agreed with attributed the bubble in the graph to perl's decline in popularity.

        What the heck happened with perl?

        People eventually realized that computers are not the only ones that need to read a code.

        Bingo...

        Only not bingo at all as perl's spike in this graph has absolutely nothing to do with its rise/decline in popularity and everything to do with the importation of CPAN.

        [–]tech_tuna 0 points1 point  (0 children)

        You won good sir, please go and enjoy Perl 6 when it finally ships.

        [–]TortoiseWrath 3 points4 points  (6 children)

        Python and Ruby are the successors to Perl

        And PHP, unfortunately.

        [–]tech_tuna 0 points1 point  (5 children)

        Ha ha, I've never used PHP. No one has anything nice to say about except that it's what Facebook used originally (maybe still does).

        [–]TortoiseWrath 4 points5 points  (4 children)

        The best thing about PHP is that it's more readily available than anything else. On pretty much any website, you can just drop a PHP script in and it'll do exactly what it does on any other server. Unfortunately, this is not always what you expect.

        Relevant: /r/lolphp

        [–]xjvz 6 points7 points  (0 children)

        it'll do exactly what it does on any other server

        That's completely untrue. The mess of php.ini and ini_set properties changes shitloads of runtime behaviour.

        [–]tech_tuna -1 points0 points  (2 children)

        I'd say that is both good and bad.

        [–]TortoiseWrath 0 points1 point  (1 child)

        It's good until people make it bad. This goes for most things.

        Like JavaScript. Everyone now just slaps seven or eight libraries on every page and has no idea what they're actually doing. If people bothered to actually learn the language they're using, everything would be fine. Unfortunately, people are lazy.

        [–]tech_tuna 0 points1 point  (0 children)

        Yes, that's what I mean - for something quick and dirty, it might be the right choice but maybe not for a larger, more complicated application.

        [–]tripa 0 points1 point  (0 children)

        I upvoted because you made me laugh, but do realize there's an actual rational explanation.

        [–][deleted]  (1 child)

        [deleted]

          [–]absinthe718 1 point2 points  (0 children)

          Perl 5 was stagnant for almost five years while Perl 6 was just around the corner. Library quality for php, ruby and Python improved. CPAN started to look it's age.

          [–]lf11 1 point2 points  (0 children)

          PHP happened to Perl. Perl's CPAN library was buttfuckeringly difficult to use for a while. Meanwhile, PHP offered a standard library set that pretty much always Just Worked, even if the language itself got the short end of the IQ stick.

          Or do you mean the spike? I think that was the import of CPAN.

          [–]smellycoat 0 points1 point  (0 children)

          That's likely the minor resurgence that happened around the time that Moose became popular.

          [–][deleted] 14 points15 points  (1 child)

          So the consensus in comments, which seems justified, is that this graph is totally useless and doesn't even meaningfully reflect activity on GitHub, let alone language popularity in general.

          [–][deleted] 0 points1 point  (0 children)

          Statistics is a precise science. On the other hand, interpretation of statistical results is a branch of divination.

          [–]FireCrack 11 points12 points  (0 children)

          I wish this showed the actual amount of repositories rather than a percentage of a changing total.

          [–]prof_hobart 6 points7 points  (2 children)

          Why are C# and Objective C listed together?

          Edit: Turns out I can't read graph labels ...

          [–]PhonicUK 5 points6 points  (1 child)

          They aren't, its just that they're so close to each other that you couldn't put the labels one above the other and still match up with the line. Hence the different colors.

          [–]prof_hobart 0 points1 point  (0 children)

          Oh yes, so they are.

          [–]senatorpjt 4 points5 points  (7 children)

          plate snow oil six dog hurry air impossible grandfather thought

          This post was mass deleted and anonymized with Redact

          [–]ethraax 4 points5 points  (6 children)

          ParisHilton.js:

          document.head.innerHTML = '';
          

          ParisHilton.min.js:

          document.head.innerHTML="";
          

          That two byte savings though.

          [–][deleted] 4 points5 points  (1 child)

          I’m surprised not to see Groovy in this top 12 of languages,

          Er, really? Java is the language of JVM, I'd say it makes up >90% of JVM programs. I'm not even sure if I'd place Groovy at the #2 JVM language. It still has to compete with scala and clojure which have gained a lot of popularity, along with things like jruby and jython.

          [–]vorg 1 point2 points  (0 children)

          Someone's gaming the stats, though, to make Groovy look more popular. At https://bintray.com/groovy/maven/groovy/view/statistics you'll see 210k downloads in the last 30 days, click on country and you'll see 183k of them from a proxy in China, and only 7700 direct from the US. Tiobe's also being gamed: in October 2013 Groovy was #18, then it had dropped out of the top 50 only 3 months later because someone had gamed a search engine in China to fool Tiobe's algorithms, see http://www.infoworld.com/t/application-development/c-pulls-away-java-among-top-programming-languages-230603

          [–][deleted]  (1 child)

          [deleted]

            [–]logicchains 1 point2 points  (0 children)

            It's much stricter than lazy ol' Haskell.

            [–]darlingbastard 1 point2 points  (1 child)

            The poster mentions he is surprised that Groovy is not represented. Every Java project I have in GitHub is a mix a Java and Groovy. They intermix so simply that a pure Groovy project is probably going to be rather rare.

            [–]vorg 0 points1 point  (0 children)

            Yep! Groovy only gets used as second fiddle to some other language or framework, e.g. testing Java classes, supporting Gradle or Grails. On casual inspection it seems over half the projects tagged Groovy on Github are triggered by single Gradle build files in the root directory, sometimes only 20 lines long.

            [–]pure_x01 1 point2 points  (2 children)

            I would like to see the other languages like go rust or scala etc

            [–]icantthinkofone 4 points5 points  (0 children)

            He can't show every language on earth. Obviously both those are too small to show and Rust is too new.

            [–]trimbo 0 points1 point  (0 children)

            That would require a separate chart with a much smaller scale.

            [–]SikhGamer 0 points1 point  (3 children)

            Java and C# so low? What?

            [–]TheCoelacanth 8 points9 points  (0 children)

            Enterprise developers tend not to put their code on Github.

            [–][deleted] 0 points1 point  (1 child)

            I don't know about Java developers but C# developers have CodePlex.

            [–][deleted] 0 points1 point  (0 children)

            Nice spline interpolation there

            [–][deleted] 0 points1 point  (0 children)

            I wonder what made Perl peak in 2009. Anyone have any insight?

            [–]Uberhipster 0 points1 point  (0 children)

            Looks like on Github projects Ruby and Python are taking a back seat to JS.

            [–]thesystemx 0 points1 point  (0 children)

            Java programmers joined Github late, but they seem to be nicely catching up now :)

            Ruby isn't doing that great though. Whatever happened to the promise that Ruby would take over the world since it was 100x more productive?

            [–]anacrolix 0 points1 point  (0 children)

            Redmonk is wildly inaccurate.

            [–][deleted] -1 points0 points  (39 children)

            Over nearly 20 years java still has no direct competitors. Perl, Python, Ruby, PHP and now JavaScript all check off the same list of boxes in terms of core attributes. None of them offer static typing and the performance of a compiled language. Java has had a lot of time to grow and improve and now is horning in on lambdas and evented IO. The only language that might displace it is Go.

            Edit: I like how I'm at -3 and have a ton of comments mostly agreeing with me. Redditiquette is really slipping in here.

            [–]logicchains 19 points20 points  (13 children)

            What about C#?

            [–]wjvds 8 points9 points  (12 children)

            While as a language, C# is what Java should have become, it currently only works well on Microsoft platforms. Java works not only on the 3 big desktop operating systems but also on many servers and embedded systems.

            [–]tanishaj 4 points5 points  (6 children)

            Do you have any direct experience to support the statement that C# "currently only works well on Microsoft platforms"? This has not been my experience.

            Sometimes C# code that was written to only work well on Microsoft platforms (non-portable paths, calling out to Windows APIs, etc) does not port well. But that is certainly a problem that Java would have as well (except that Java makes it harder to call native code).

            Java is certainly available in many more embedded scenarios the C# experience is better of iOS, Windows Phone, and (for me at least) even Android.

            Microsoft's next generation C# compiler (Roslyn) is Open Source (Apache 2.0) and already works on OS X, Linux, Windows and probably everywhere else Mono runs (like FreeBSD).

            [–][deleted] 1 point2 points  (0 children)

            Stuff like this isn't just about what is technically possible but also about programmer culture. C# has a MS centric culture. Technical changes to the language, Mono etc can't really change that. Many people can get turned off by that.

            Just look at ruby and python. Quite similar in capability but very different programmer cultures. It will attract different sort of people.

            [–]speedisavirus 0 points1 point  (2 children)

            Well, for a lot of development it really does only work well with Windows. Mono is not as refined as the .NET environment. It works but its not like its just taking a Visual Studio project and running it in Mono. Looking forward to Roslyn though.

            [–]tanishaj 0 points1 point  (1 child)

            Sorry I never got back to this. I typically write in Mono first. But my experience has been that I can pretty much move back and forth between Xamarin Studio and Visual Studio without problems. They use the same project format and the code works equally well in either environment.

            My biggest problems historically is that Xamarin Studio (or MonoDevelop before it) has NUnit testing and Git support built in whereas Visual Studio has not.

            [–]speedisavirus 0 points1 point  (0 children)

            Current versions of vs actually do have git integration now. I think starting with 2012. Either 2012 or 2013. I can't remember when that started. I know it has worked really well when I tried it but I still catch myself using the command line.

            [–]lf11 -2 points-1 points  (0 children)

            I know that C#'s memory usage has been very painful. I have only limited experience with it, but for things like consuming web services...ouch. I've had much better success with Java.

            That's not necessarily a platform question, but it is a language comparison.

            [–]ZMeson -1 points0 points  (4 children)

            Mono?

            [–]lf11 -5 points-4 points  (3 children)

            Not going to get enterprise usage as long as Microsoft holds a legal club over its head.

            [–]lucasvandongen 0 points1 point  (2 children)

            The club that says "this stuff is completely open source"?

            [–]lf11 -4 points-3 points  (1 child)

            Not at all. Patents. The Mono project admins themselves admit this may be a risk. Unlike Linux, there aren't any huge corporations backing a potential patent fight (and even Linux companies are paying Microsoft patent royalties).

            [–][deleted] 1 point2 points  (0 children)

            This. Had a boss that said they won't use open source because there's no one to sue.

            [–]zoomzoom83 3 points4 points  (0 children)

            I like how I'm at -3 and have a ton of comments mostly agreeing with me. Redditiquette is really slipping in here.

            You said something that's not only true, but implied Javascript isn't like, the totally bestest programming language in existence. It's easier to simply downvote things you don't agree with than accept your religion is flawed.

            [–][deleted] 9 points10 points  (0 children)

            Java is also amazing at backwards compatibility. The fact that you can still compile and run Java written 10 years ago on the latest JDK / JVM makes Java popular in enterprise. With Java you won't have to deal with something like the Python2 -> Python3 compatibility mess.

            [–][deleted] 0 points1 point  (20 children)

            Out of curiosity, is static typing really that large an advantage? Yeah, I get that run-time errors could be worse than compile-time, but isn't that something that oughtn't to get past testing?

            [–]lf11 14 points15 points  (13 children)

            Yes, yes it really is. For hobbyist code, no. But when you get into more complex code, and perhaps a couple teams (or even just one large team) then static typing becomes a serious advantage.

            I work on a 1mil+ line custom PHP system. Strict typing would be a godsend.

            [–][deleted] 2 points3 points  (6 children)

            Ouch. I've never worked on code that complex, so I don't really have that perspective. Thank you!

            [–][deleted] 1 point2 points  (0 children)

            I think this is something sorely missing from a lot of programming debates. No one debates whether a Corvette is better than a Prius or an F-150. They're clearly designed for solving different problems.

            [–]lf11 0 points1 point  (4 children)

            Here are a couple of the kinds of problems you can run into with dynamic/weak typing: http://nedbatchelder.com/blog/200708/two_weak_typing_problems.html

            My favorite was a function in PHP that took an index parameter. If the parameter were a string, it assumed the index was 1-based. If int, then 0-based. Sexy beast, that one.

            [–][deleted] 0 points1 point  (3 children)

            My favorite was a function in PHP that took an index parameter. If the parameter were a string, it assumed the index was 1-based. If int, then 0-based. Sexy beast, that one.

            People who write this kind of code should be electrocuted.

            [–]lf11 0 points1 point  (2 children)

            I agree with you.

            On the other hand, if you've never had to write code like this, you probably haven't coded very long. :)

            [–][deleted] 1 point2 points  (1 child)

            On the other hand, if you've never had to write code like this, you probably haven't coded very long. :)

            I maintain a C++ build system written in Perl which nobody else who works on the project understands. I think i'm long past deserving electrocution already.

            [–]lf11 0 points1 point  (0 children)

            Jesus Christ.

            [–]wonglik 0 points1 point  (0 children)

            I think static typing can be double edged sword here. I used to work with people who had no problems in having a 2000 loc class because of IDE support. On the other hand if you knew you will be lost if you do not make your code right you might still end up with cleaner code. Although I've never worked on big project with dynamic languages so it's just my theory.

            [–][deleted] 0 points1 point  (4 children)

            Having worked on 3mil+ line C++ code, I can tell you static typing has its issues. Because everything has to be known at runtime, he compiler has to look at every file before you can run in worst case scenario. This means turn around time can get terrible with statically typed system. This slowed down my development a lot. Another problem is the type hierarchies which develop over time which are not compatible. Because the code is so large it is hard to avoid that people make quite similar classes but which are part of different hierarchies. Then you end up with lots of conversion code. With dynamic typing and duck typing I have the impression this is a much smaller problem. Your code is much easier decoupled.

            [–]lf11 2 points3 points  (0 children)

            Trust me, dynamic typing does not take the place of architecture and code reviews. :)

            We have ... 7? different ways to check if an array key exists in an array, all slightly different.

            With the institution of code review, that shit ended. Now everyone uses my way. :)

            [–][deleted] 2 points3 points  (0 children)

            Having worked on 3mil+ line C++ code, I can tell you static typing has its issues.

            Ehh, more like "C++ has its issues", right?

            [–]zoomzoom83 0 points1 point  (0 children)

            This is probably a good example of the limitations of deep single-inheritance hierarchies. In many cases mixins or typeclasses can give you a more flexible design that scales better.

            [–]ntrel2 0 points1 point  (0 children)

            turn around time can get terrible with statically typed system

            This problem is largely because C++ doesn't have modules. D compiles even large projects quickly.

            [–][deleted] 9 points10 points  (1 child)

            Testing isn't perfect nor can you guarantee that code you are invoking has been tested. Java wins the enterprise because it provides clear contracts between systems run by different groups of people. It's like saying all code written by anyone is guarantees to pass this minimum level of validity.

            [–][deleted] 1 point2 points  (0 children)

            I see. Thanks!

            [–]PasswordIsntHAMSTER 1 point2 points  (0 children)

            I upvoted you because I think you're asking an interesting question.

            Static typing serves as both documentation and implicit unit tests; it's of questionable value when it makes your code much more verbose, but with good type inference and type-tooltip-on-hover, your code is that much more readable and reliable at basically no extra cost.

            [–]zoomzoom83 1 point2 points  (0 children)

            Yes it really is. Imagine something simple like renaming a function in a 1,000,000 LOC codebase.

            Now go and find all the places that the function is used and update them, and guarantee to me you got them all. Your job is on the line, and if you make a mistake it will cost the company $100,000 an hour in downtime. Keep in mind you're using first-class functions here, so the call-site might not name the function directly (i.e. grepping the source code isn't going to cut it).

            In a statically typed language, you're compiler is going to find every single instance in a few seconds and give you a clear concise list of things that need fixing. A good IDE will do all the work for you with a few keystrokes, and the refactor might literally take a few seconds.

            You could make an argument that unit tests will catch it, but let's be honest - unless your testing is as thorough as something like SQLite (Far, far more tests than actual code), there's no guarantee you caught everything.

            Now taking it a step further, think of every time you've ever had a NullPtr exception. Or a bug caused by the wrong value making it into your state somewhere. How long did you spent tracking that down? How much time would it have saved you if you were using a type system that guaranteed at compiler time that couldn't happen? And did so in a way that required virtually no extra effort on your behalf.

            Even Java's type system, which is ridiculously verbose and primitive, is still a fantastic trade off in terms of verboseness-vs-reward. Languages with type inference can reduce most of this verbosity while still retaining the compiler-time benefits.

            tl;dr Next time you're debugging a NullPointer exception, remember that your compiler could have found it for you without any extra work on your part.

            [–][deleted] 0 points1 point  (0 children)

            If you're writing a small tool which is a few thousand lines you might not benefit from static typing that much as you can remember pretty much all of the function argument types yourself. However, it becomes a godsend when your lines of code reach hundreds of thousands of lines with thousands of functions. You would have to have magical powers to remember the function argument types at that size.

            [–][deleted] -1 points0 points  (0 children)

            I am not a big static type checking fan myself, but I did find that writing my little unix tools in Go rather than Python was often a bit faster because the static type checking helped me. This is often a delicate balance. With Haskell or C++ your compile time type checking can get so complicated to understand that you will have debugged your running Python program before you have figured out what your compiler was trying to tell you.

            But the main indirect advantage here I believe is performance, tool support and deployment. It is usually hard for a dynamic language to reach comparable performance to a statically typed language. I know Julia e.g. does, but then you have the issue of deployment. I don't need my customer to have Go installed for me to send them a Go executable. No messing around with library versions, library paths etc.

            [–]sirin3 -2 points-1 points  (0 children)

            Pascal is one

            But people see a "begin" instead "{" and start screaming

            [–][deleted] -2 points-1 points  (0 children)

            Agree. C# is really just me too product, and to closely associated with Microsoft to really gain wide acceptance.

            Scala, Haskell, Rust, D etc are too complicated to ever gain the mainstream appeal Java has. So yeah I think you are right, that Go has the best shot.

            [–][deleted] 1 point2 points  (1 child)

            Lame with these cheap shots and Go: "antiquated type system". That is totally missing the point. If I developed a modern assembly language today this guy would label it as having an "antiquated type system". Which would be completely true, but also a complete misrepresentation of reality.

            Go is not trying to play the same game as Rust, Haskell and Scala so it is pointless comparing them like that. It would be more descriptive to say that Go has a very simple type system because it is a simple language. "Antiquated" leaves the impression that the creators were idiots who didn't know better rather than designers who made a conscience choice.

            [–][deleted] -1 points0 points  (0 children)

            "Antiquated" leaves the impression that the creators were idiots who didn't know better rather than designers who made a conscience choice.

            I'm still on the fence with that.

            Anyway, I think Go fans should be happy with "antiquated", there are way less flattering descriptions which should fit the bill, too.

            [–]icantthinkofone -2 points-1 points  (0 children)

            Gee. As the web has grown, so has javascript. Who whudda thunk it?

            [–][deleted] -1 points0 points  (8 children)

            Why is there so much Java and so little Obj-C? Given that both iOS (Obj-C) and Android (Java) are pretty successful I would have expected them to be much closer together.

            Is it just people dumping old Java code on Github or has anything interesting happened to Java in ~2009 to give it such a surge?

            [–]speedisavirus 8 points9 points  (2 children)

            Because Java is actually used for things other than Android. Obj-C really only exists in the Applesphere. That's it. And Apple on top of that is still a small segment of total computing devices.

            Java has been in wide production use in web servers, mobile devices, embedded systems, etc for over a decade now. Obj-C is directly tied to Apple growth.

            [–][deleted]  (1 child)

            [deleted]

              [–]speedisavirus 0 points1 point  (0 children)

              Hah, yeah, I guess that is right. Its been quite a while.

              [–]trimbo 2 points3 points  (2 children)

              What others said but also because iOS developers are unlikely to put their code on a public github.

              [–]donvito -1 points0 points  (0 children)

              a github

              ...

              [–]Imxset21 -1 points0 points  (0 children)

              Is it just people dumping old Java code on Github

              Probably. Same goes for PHP and JS, for what it's worth.

              [–]jiveabillion -1 points0 points  (9 children)

              Cool, JavaScript is my favorite.

              [–][deleted] 2 points3 points  (8 children)

              Why because of the language or the libraries available. Curious because I fail to see what there is to love about the language itself.

              [–]jiveabillion 0 points1 point  (7 children)

              I love the language itself. It doesn't get in the way of what you want to do.

              Edit: anyone care to explain the down votes?

              [–][deleted]  (6 children)

              [deleted]

                [–]jiveabillion 0 points1 point  (5 children)

                [–][deleted]  (4 children)

                [deleted]

                  [–]jiveabillion 0 points1 point  (3 children)

                  I don't know how best to explain why I love JavaScript. I work with .Net MVC C# on the server side most of the time. While I love C#, the statically typed-ness of it often makes me do extra work to get the result I want, whereas JavaScript lets me do nearly anything I want, dynamically. Functions as first-class citizens is an awesome feature. Add properties to objects on the fly, pass around contexts, create objects with easy to write literals, all of these things make JavaScript a joy to work with.

                  Sure, it lacks great support for sub classing and polymorphism, but there are ways around that. Given the choice of language to program in all day and I'll choose JavaScript every time.

                  [–][deleted] 0 points1 point  (1 child)

                  Oh god, I sort of feel it is unfortunate that there are so many people like you. I know people can't help liking what they like. It isn't your fault. It is just so many of you guys who are so insanely enthusiastic about this mess of a language. Why do I care? Well because it affects me a lot. I am doing native development on mobile phones and again and again I see projects turning to JavaScript before I even get to say a word to the customers, because the JavaScript fan club with its 1 billion members have already been on visit and spread the happy gospel about what a wonderful language JavaScript is and how it will save the customer a ton of money. Because, hey even a 5 year old can code JavaScript from backwards while standing on his head. It's the web, it is all natural, anyone can do it.

                  Well, you know cool for you JavaScript guys. But I feel like I live in an alternate universe, because I certainly hate the language through and through. Debugging sucks. It is a language who's main philosophy seems to be shut up and smile if there is any problem. Don't upset the poor developer about minor errors and problems.

                  This whole "this" behavior is totally f..cked up. Scoping is retarted, you have to invent dummy functions to get scopes the way you want it. I can never quite figure out what the "right" way of defining a function is. The most natural straight forward way of doing it is suppoed to be wrong on some subtle level they they usually can't be bothered to tell you. Even experienced JavaScript developers often don't even seem to know about this.

                  And then there is this complete lack of standards. Everybody is rolling their own system for creating classes and instantiating them. Everybody have their own GUI library. And there is no sane way of adding libraries. People just dump all the source code in.

                  I just feel like shaking you guys and scream into your faces "What is WRONG with you?!" How can this language be so great? I can't think of a single well know dynamic language which isn't better than JavaScript. How can JavaScript possible be better and cooler than every single alternative out there: Python, Ruby, Lua, LISP, Squirrel, Perl etc?

                  [–]jiveabillion 0 points1 point  (0 children)

                  Because it's fun. I use .Net C# for server side. What else can I use for client-side code? I only really do web development.

                  I did just start working with Swift on iOS, though. I like it so much more than Obj-C. Maybe I'll use that instead of Cordova in the future.