Was sind die Quellen des Bitcoin-Überlaufs von Programmiersprachenstapeln?

Dies bietet uns die Möglichkeit, die Meinungen von Hunderttausenden von Entwicklern zu prüfen. Es gibt viele Möglichkeiten, die Beliebtheit einer Sprache zu messen. Beispielsweise haben wir häufig Stapelüberlaufbesuche oder Fragensichten verwendet, um diese Trends zu messen. Dieser Datensatz ist jedoch eine seltene Methode, um herauszufinden, welche Technologien die Menschen verärgern, wenn sie die Möglichkeit haben, dies in ihrem Lebenslauf zu sagen.

Als Maß für die Polarisierung jedes Etiketts sehen wir, welcher Bruchteil der Zeit auf den Etiketten erscheint, die wir nicht mögen, verglichen mit der Häufigkeit, mit der sie auf den Etiketten erscheinen, die Sie mögen oder nicht. Daher würden 50% bedeuten, dass ein Label genau so oft abgelehnt wurde, wie es gewünscht wurde, während 1% bedeutet, dass es 99 Personen gab, die es für jeden, der es nicht mochte, mochten. (Wir verwenden die empirische Bay-Methode, die ich in diesem Beitrag beschreibe, um diese Durchschnittswerte zu schätzen, und diese neue Bitcoin-Methode, um 95% der glaubwürdigen Intervalle zu berechnen).


Wenn Sie einige unserer anderen Veröffentlichungen über wachsende und absteigende Programmiersprachen gelesen haben, stellen Sie möglicherweise fest, dass die Etiketten, die Sie am wenigsten mögen, tendenziell am schnellsten wachsen. R, Python, Typ, Go und Rust nehmen in Bezug auf die Stapelüberlaufaktivität rapide zu (wir haben Python und R bereits vorher speziell untersucht), und sie gehören alle zu den am wenigsten polarisierten Sprachen. In ähnlicher Weise sind viele der Etiketten, die abnehmen, wie z. B. Perl, Objekt-C und Rubin, einige der Etiketten, die auf der Website am schnellsten schrumpfen.

Im Allgemeinen besteht ein Zusammenhang zwischen dem Wachstum eines Labels und der Häufigkeit, mit der es nicht gefällt. Fast alles, was nicht der Meinung ist, dass mehr als 3% der Storys sagen, dass der Stack-Überlaufverkehr abnimmt (mit Ausnahme der stark polarisierenden VBA, die konstant ist oder leicht wächst). Und die am wenigsten missachteten Etiketten (R, Rost, Schreibmaschine und Kotlin) gehören zu den schnell wachsenden Etiketten (Buchstabenbuchstaben und Kotlin wachsen so schnell, dass sie im Rahmen gekürzt werden mussten).

Ein hervorstechendes Etikett ist die Funktionssprache clojure. Fast niemand drückt Ekel darüber aus, aber es ist immer noch einer, der schneller schrumpft (nach den fraglichen Besuchen hat er erst im letzten Jahr abgenommen). Eine andere Ausnahme ist MATLAB, das schrumpft, obwohl nicht viele Menschen ihren Unmut äußern. Dies kann auf eine Einschränkung der Daten hinweisen, um die Stimmung zu messen: Während ein Webentwickler eine Meinung zu PHP, C # oder Ruby hat, haben Personen, die nicht in der Datenanalyse arbeiten, wenig Grund, eine Meinung zu MATLAB zu äußern. (Dies ist wahrscheinlich ein Teil des Grunds, warum R auch in “Abneigungen” selten erwähnt wird).

Wir schlagen nicht notwendigerweise eine kausale Beziehung vor, in der die Bezeichnungen, die eine Komponente der Programmierer nicht mag, dazu führen, dass sie aufgegeben werden. Eine andere Möglichkeit besteht darin, dass sich die Leute wohl fühlen, wenn sie ihren Missstand öffentlich zum Ausdruck bringen und kostenlose Bitcoins erhalten, wenn sie feststellen, dass die Sprache bereits an Popularität verliert. Es ist auch denkbar, dass Entwickler dieses Feld häufig verwenden, um die Technologien zu beobachten, mit denen sie früher gearbeitet haben, aber nicht. Dies würde zu einem natürlichen Fortschritt von “ersetzten” Technologien führen, die in einem Bereich landen, den Sie nicht mögen. Die meisten Labels sind ungeliebt und beliebt

Git kann für viele Entwickler eine Quelle der Frustration sein (es ist sicherlich für mich!), Aber die Leute geben es in ihrem Lebenslauf nur selten zu, da es das Label ist, das ihnen in unseren Entwicklergeschichten am besten gefallen hat. R macht diese Liste, aber es ist nicht das einzige Label, das sich auf Data Science bezieht und nicht kontrovers ist. Das Label für maschinelles Lernen wurde von 23.000 Menschen geschätzt und missfiel ihm selten. Tags wie python-3.X, CSS3 und HTML5 könnten darauf hinweisen, dass Entwickler selten angeben, dass ihnen eine bestimmte Version einer Technologie nicht gefällt (auch wenn sie dies angeben). Und natürlich ist Jquery im Stack-Überlauf so beliebt wie nie zuvor. Netzwerk polarisierender Etiketten.

Wir können all diese Labels in einer Geschichte kombinieren, indem wir sie in einem Netzwerk organisieren. In einer kürzlich erschienenen Publikation hat Julia Silge gezeigt, wie wir ein Netzwerk von Technologien aufbauen können, um das Software-Ökosystem allgemein darzustellen. Wenn wir die Knoten entsprechend der Unannehmlichkeit jedes Labels färben, können wir verstehen, welche Teile des Ökosystems umstrittener sind als andere.

Durch die Verteilung der Etiketten der Entwicklergeschichte in Subökosystemen erzählt dieses Netzwerk, welche Arten von Etiketten dazu neigen, zu polarisieren. Es gibt Gruppen von polarisierten Markierungen in den Sub-Ökosystemen für Microsoft (um C # und .NET), PHP (zusammen mit WordPress und Drupal) und mobile Entwicklung (insbesondere Ziel-C). In der Gruppe der Betriebssysteme (unten rechts) können wir feststellen, dass Systeme wie OSX und insbesondere Windows ihre Beeinträchtigung haben, Label wie Linux, Ubuntu und Unix dagegen nicht. Rivalitäten

Dies hebt einige der “Rivalitäten” hervor, die dem Software-Ökosystem zugrunde liegen: Linux und OSX vs. Windows, Git vs SVN, Vim vs Emacs und (wie erwartet) R vs SAS. Die meisten dieser Paare stellen keine “entgegengesetzten” Technologien dar, sondern reflektieren stattdessen zwei Ansätze für ähnliche Probleme. Viele von ihnen deuten auf einen Fortschritt von einer früher verbreiteten Technologie hin zu einer moderneren hin (SVN wird durch git ersetzt, XML durch JSON ersetzt, VB ersetzt die Android-Bitcoin-Anwendung durch C #). Dies macht Sinn in Bezug auf das, was die Leute in einem Lebenslauf auflisten; Entwickler geben häufig an, dass sie es vorziehen, nicht mit etwas zu arbeiten, das sie für veraltet halten. Fazit

Ich habe kein Interesse an “Sprachkriegen” und ich kann nicht beurteilen, welche Benutzer Technologien gemeinsam nutzen, mit denen sie lieber nicht arbeiten würden. Das Nachdenken über die Polarisierung von Microsoft-Technologien ermutigt mich oft, meine persönlichen Erfahrungen zu teilen. Ich war ein lebenslanger Mac- und UNIX-Benutzer, und fast alle meine Programme an der Universität und der Graduiertenschule konzentrierten sich auf Python und R. Trotzdem war ich froh, einer Firma mit einem Stapel von .NET, und ich bin froh, dass ich es getan habe, weil ich die Ausrüstung, das Produkt und die Kaufdaten für Bitcoin-Instant-Produkte sehr gut fand. Ich kann nicht für irgendjemand anderen sprechen, aber ich bin froh, dass ich mich in Bezug auf meine Arbeit definiert habe und nicht etwas, das ich vermeiden wollte.

Dies ist eine wichtige Frage, die wir häufig berücksichtigen (zum Beispiel habe ich sie in den letzten beiden Abschnitten dieser Veröffentlichung angesprochen: https://stackoverflow.Blog/2017/08/01/flash-dead-technologies-might-next/). Es ist wichtig, diese Warnungen und verwirrenden Faktoren zu berücksichtigen und ehrlich zu sein. Ich denke jedoch, dass die meisten Variationen, die wir untersuchen, nützlich und informativ sind: Obwohl Besuche zum Sammeln von Überläufen keine vollkommen zufällige Auswahl dessen sind, was die Entwickler verwenden, sind sie repräsentativ genug, um Schlussfolgerungen zu ziehen.

Betrachten Sie Clojure vs Scala. Informationen zum vorherigen Stack-Überlaufverkehr (und ähnlichen Veröffentlichungen) deuten darauf hin, dass das Clojure eine geringere Benutzerbasis als Scala hat und stabil blieb oder zurückging, während Scala schnell wächst (insbesondere in Ländern mit hohem Einkommen). ). Wir sind nicht der einzige Datensatz, der dies zeigt: Er wird auch qualitativ mit den Trenddaten von Google (https://trends.Google.Com/trends/explore?Date=all) bestätigt&Geo = US&q =% 2fm% 2f03yb8hb,% 2fm% 2f091hdj) und Github-Aktivität (http://githut.Info/). (In einigen Fällen scheinen die Informationen flacher als die Reduzierung zu sein, dies könnte jedoch dadurch erklärt werden, dass wir die prozentuale Anzahl der gesamten Stapelüberlaufbesuche beobachten, und tatsächlich begann die Reduzierung unserer eigenen Daten nur im letztes Jahr).

Dies ist ein wichtiger Selbstdiagnosetest, wenn wir eine Datenquelle kritisieren: Prüfen Sie, ob wir Vorhersagen darüber treffen können, wie es falsch sein wird. Nachdem ich einen Haskell-Programmierer gefunden hatte, der sicher war, dass die Hash-Fragen im Stack-Überlauf unterrepräsentiert waren, und das Beispiel gab, dass, während lua und haskell dieselbe Anzahl von Benutzern hatten, Hash-SO-Fragen Sie waren viel seltener als Lua. Er baute eine Geschichte auf, die überzeugend klingt, warum die Entwickler von Lua solche Fragen stellen müssen, während Haskell andere Möglichkeiten hatte, Antworten zu erhalten. Aber er entfernte sich von seinem anekdotenhaften Eindruck, der in der Tat ganz falsch war: Es gibt regelmäßig Bitcoins, die doppelt so viele Red Hat-Anfragen pro Monat erledigen wie Lua. Wenn Ihr mentales Modell des Programmiersystems nicht in der Lage war, vorhandene Fakten vorherzusagen, warum sollten Sie warten, bis Sie versteckte Ideen über unterrepräsentierte und überrepräsentierte Technologien haben?

Ich habe viele falsche Hypothesen. Als ich zum Beispiel zum ersten Mal sah, dass der Prozentsatz neuer Fragen zu Rubin in den letzten Jahren abnahm, war ich überrascht. Ich hatte die Idee, dass es so sein könnte, weil so viele Fragen bereits beantwortet wurden, dass die Leute die vorhandenen besuchen, anstatt neue zu machen. Anstatt zu entscheiden, dass die Metrik unbrauchbar war und meiner eigenen Geschichte vertraute, habe ich mir die Daten angesehen und tatsächlich sind die Besuche bei Rubys bestehenden Fragen so schnell zurückgegangen wie die neuen Fragen. (Tatsächlich ist es fast nie wahr, dass die Ansichten von Fragen zunehmen, während neue Fragen mit Ausnahme kurzer Zeitabschnitte abnehmen). Ich könnte eine neue Geschichte darüber erzählen, dass es für Ruby-Entwickler besonders unwahrscheinlich war, bestehende Fragen zu besuchen. Aber würden Sie nicht anfangen, ein bisschen von den post-hoc-Ergänzungen zu ahnen und zu denken, dass Ruby tatsächlich abnehmen könnte?

Manchmal habe ich die Antwort von “Nun, alle Datenquellen: Stapelüberlauf, Github, Google Trends, sind partiell, daher sollten wir sie alle verwerfen” gehört, aber wenn wir alle unsere Daten löschen, haben wir kein lokales Konto bitcoin. “Lassen Sie sich nicht mit einer völlig unparteiischen Reaktion zurück: Wir haben nur unsere eigenen Vorurteile und subjektiven Eindrücke (” Ich bin sicher, dass die Clojure wächst, ich habe zwei Freunde, die beide angefangen haben! “) Die Daten haben ihre Probleme. , aber es ist das einzige Spiel in der Stadt.

Nun, ich mag Perl nicht und ich programmiere schon seit über 30 Jahren … Ich denke, meine Abneigung gegen Perl könnte mit der Unfähigkeit zum Programmieren zusammenhängen, aber ich bekomme immer noch die Gigs … Ich ging definitiv durch die Perl-Phase mit alles andere Es ist eine gute Skriptsprache und sollte als solche verwendet werden. Ich würde nie an einem großen Projekt arbeiten wollen, das in Perl geschrieben wurde … NICHT, weil die Sprache nicht in der Lage ist, sondern weil die Perl-Codierer (die einst einer waren) die Tendenz haben, alles in einer einzigen Zeile zu tun oder alles auszudrücken. Es ist nicht ganz Perls Schuld und nicht sicher, dass diese Dinge in den Code-Reviews auferlegt werden könnten, aber das ist nicht der Fall. Wörtlich mussten alle Perl-Projekte, die ich von einem anderen Entwickler oder Team geerbt habe, von Grund auf neu geschrieben werden. Warum? Weil es schneller war, sie neu zu schreiben, als all die verrückten Locus-Perl zu verstehen, die verwendet wurden … Wenn Sie nicht die unübersichtlichen Merkmale einer Sprache verwenden, wird eine Person nicht elitär. Dies macht es schwierig, ihren Code aufrechtzuerhalten.

Sobald ich zu Python gezogen bin, gab es wirklich nie einen Bedarf an Perl … und ich bin sicher, dass Peal eine Menge Lifting machen konnte, die ich mit Python mache, aber in einer Million Jahren habe ich nie versucht, einen Leitungscode zu behalten basierend auf mehr als 100.000. das war NIE in perl geschrieben … ich habe es mal mit ein paar tausend leitungscodes versucht. Ich sage nicht, dass es nicht geht, aber ich würde es überhaupt nicht genießen.

Python Android Bitcoin Android Hack ist eine großartige Sprache. Es ist einfacher zu lernen als Perl und es scheint nicht, dass die Leute verwirrenden Code schreiben möchten. Perl ist jedoch eine leistungsfähigere und vielseitigere Sprache. In jedem Fall haben unsere Vorlieben und Abneigungen wenig Einfluss. Wenn wir keine einsamen Genies sind oder das Unternehmen verwalten, müssen wir als Softwareentwickler jede Sprache oder Sprache verwenden, die unser Arbeitgeber gewählt hat … es sei denn, wir können die Arbeit nicht wirklich erledigen. In diesem Fall können wir Alternativen vorschlagen. Auf dieselbe Weise werden uns agile Methoden auferlegt, die die einzig wahre Möglichkeit sind, jedes einzelne Projekt, das man sich vorstellen kann, zu verwalten, anstatt sie für diese Projekte zu verwenden, wo dies angebracht ist, und sie für diejenigen, die sich darin befinden, zu lassen die nicht sind.

Ein Softwareentwickler, der gute Arbeit leistet, wird versuchen, einen lesbaren und wartbaren Code zu schreiben, unabhängig von der Sprache und ob das Unternehmen Codierrichtlinien hat. Ich habe keine Zeit für jene “Genies”, die schnell etwas rauben, was nicht gepflegt werden kann und das die Manager beeindruckt, die nichts besseres wissen.

Allerdings ist es selten die Unfähigkeit, den Code zu lesen, der die Software unhaltbar macht. Es ist fast immer schneller, fehlerhaften Code erneut bereitzustellen, als Ihre Probleme zu verfolgen und zu beheben. Zwar haben die Übersetzungseinheiten (oder einzelne Skripts) eine angemessene Größe. Natürlich neigen dieselben Narren, die obskuren Code schreiben, auch dazu, 100-Seiten-Programme zu schreiben. Ich habe entdeckt, dass es die schlecht entworfene Architektur einer Anwendung ist, die ein großes Problem darstellt. Durch die Weigerung, GOTO zu verwenden, haben viele Software-Designer aus den Interaktionen zwischen den Modulen Spaghetti erstellt.

Perl ist eine großartige Allzwecksprache mit einer enorm breiten Anwendbarkeit. Für jede Entwicklungsarbeit, die eine solche Vielseitigkeit nicht erfordert, sind andere Sprachen oft leichter zu erlernen und zu verwenden. Nehmen Sie zum Beispiel PHP. Es ist eher eine einfache Sprache, aber ziemlich elegant. Nach einer langen Karriere in der Software und seit ungefähr 20 Jahren ausgiebig in Perl, habe ich an einem Tag genug PHP gelernt, um effiziente und korrekte Implementierungen einiger komplexer Algorithmen zu programmieren. [Und ich beanspruche keine außergewöhnlichen Fähigkeiten. Ich hoffe, dass jeder Entwickler mit ähnlichen Erfahrungen dasselbe mit der gleichen Leichtigkeit tun kann.]