Il y a une citation d'un discours de PyCon 2011 qui dit:
Au moins dans notre magasin (Argonne National Laboratory), nous avons trois langues acceptées pour le calcul scientifique. Dans cet ordre, il s’agit de C / C ++, de Fortran dans tous ses dialectes et de Python. Vous remarquerez l'absence absolue et totale de Ruby, Perl, Java.
C'était dans le contexte plus général de l'informatique haute performance. La citation est accordée à un seul magasin, mais une autre question sur les langues pour HPC indique également que Python est une langue à apprendre (et non Ruby).
Maintenant, je peux comprendre que C / C ++ et Fortran soient utilisés dans cet espace de problèmes (et que Perl / Java ne soit pas utilisé). Mais je suis surpris qu'il y ait une différence majeure entre l'utilisation de HPC par Python et Ruby, étant donné qu'elles sont assez similaires. (Remarque - je suis fan de Python, mais je n'ai rien contre Ruby).
Y a-t-il une raison spécifique pour laquelle cette langue a décollé? S'agit-il des bibliothèques disponibles? Quelques fonctionnalités linguistiques spécifiques? La communauté? Ou peut-être juste une contiguïté historique , et ça aurait pu aller dans l'autre sens?
la source
Réponses:
Je vais développer mon commentaire.
Je pense que quelques facteurs ont influencé l'utilisation de Python dans l'informatique scientifique, bien que je ne pense pas qu'il y ait de points historiques définitifs où l'on pourrait dire: "Oui, c'est la raison pour laquelle Python est utilisé sur Ruby / toute autre chose. "
Histoire ancienne
Python et Ruby ont à peu près le même âge - selon Wikipedia, Python a été officiellement publié pour la première fois en 1991 et Ruby en 1995.
Cependant, Python est apparu plus tôt que Ruby, car Google utilisait déjà Python et recherchait des développeurs Python au tournant du millénaire. Etant donné que nous n’avons pas une longue histoire sur les utilisations des langages de programmation et leurs influences sur ceux qui les utilisent, je vais théoriser que cette première adoption de Python par Google a été une grande motivation pour ceux qui cherchent à se développer au-delà de Matlab, C ++, Fortran, Stata, Mathematica, etc.
À savoir, je veux dire que Google utilisait Python dans un système où ils disposaient de milliers de machines (pensez à la parallélisation et à l’échelle) et traitant en permanence plusieurs millions de points de données (encore une fois, à l’échelle).
Événement Confluence
Le calcul scientifique se faisait jadis sur des machines spéciales telles que SGI et Crays (vous vous en souvenez?), Et bien sûr, FORTRAN était (et est toujours) largement utilisé en raison de sa relative simplicité et de son optimisation plus facile.
Au cours des dix dernières années environ, le matériel de base (c'est-à-dire tout ce que vous et moi pouvons acheter sans être millionnaires) a pris le contrôle du domaine scientifique et de l'informatique de masse. Examinez les 500 meilleurs classements actuels - bon nombre des «super ordinateurs» les mieux classés au monde sont construits avec du matériel Intel / AMD normal.
Python est arrivé à un bon moment puisque, encore une fois, Google faisait la promotion de Python et que Google utilisait du matériel de base, et qu'ils disposaient de milliers de machines.
De plus, si vous fouillez dans de vieux articles sur l'informatique scientifique, ils ont commencé à germer vers l'ère des années 2000.
Support antérieur
Voici un article écrit pour le logiciel et les systèmes d’analyse de données astronomiques , écrit en 2000, suggérant Python comme langage pour le calcul scientifique.
L'article a cette citation sur Python:
Ainsi, vous pouvez voir que Python avait déjà une traction remontant à la fin des années 90, du fait qu’il fonctionnait de manière similaire aux systèmes existants de l’époque et qu’il était facile d’intégrer Python à des éléments comme C et aux programmes existants. D'après le contenu de l'article, Python avait déjà une utilisation scientifique depuis la période 1995-1996.
Différence de croissance de la popularité
La popularité de Ruby a explosé parallèlement à l'essor de Ruby On Rails, apparu pour la première fois en 2004. J'étais à l'université quand j'ai vraiment entendu parler de Ruby, et c'était autour de 2005-2006. django for Python est sorti à peu près à la même période (juillet 2005 selon Wiki), mais la communauté Ruby semblait centrée essentiellement sur la promotion de son utilisation dans les applications Web.
Python, en revanche, disposait déjà de bibliothèques adaptées au calcul scientifique:
NumPy - NumPy a officiellement démarré en 2005, mais les deux bibliothèques sur lesquelles elle reposait ont été publiées plus tôt: Numeric (1995) et Numarray (2001?)
BioPython - bibliothèque d’informatique biologique pour python, remonte à 2001, au moins
SAGE - Package Math avec la première publication publique début 2005
Et bien d’autres encore, même si je ne connais pas beaucoup de chronologies (en plus de la simple navigation sur leurs sites de téléchargement), Python a également SciPy (construit sur NumPy, sorti en 2006), qui avait des liaisons avec R (le langage de statistiques) dans au début des années 2000, MatPlotLib et un environnement shell extrêmement puissant dans ipython.
ipython a été lancé pour la première fois au début des années 2000 et a été doté de nombreuses fonctionnalités qui le rendent très agréable pour l'informatique scientifique, comme le graphing matplotlib intégré et la capacité de gérer des grappes de calcul .
De l'article ci-dessus:
Bonne liste de paquets scientifiques et numériques pour Python .
Cela est probablement dû en grande partie aux débuts de l'histoire et à la relative obscurité de Ruby jusqu'aux années 2000, alors que Python avait gagné du terrain grâce à l'évangélisation de Google.
Donc, si vous évaluiez les langages de script entre 1995 et 2000, que regardiez-vous vraiment? Il y avait Perl, qui était probablement assez différent du point de vue syntaxique pour que les gens ne voulaient pas l'utiliser, et il y avait aussi Python, qui avait une syntaxe plus claire et une meilleure lisibilité.
Et oui, il y a probablement beaucoup d'auto-renforcement - Python a déjà toutes ces grandes bibliothèques utiles pour l'informatique scientifique, alors que Ruby a une voix minoritaire prônant son utilisation en science, et certaines bibliothèques poussent, comme SciRuby , mais Les outils de Python ont mûri au cours de la dernière décennie.
La communauté de Ruby dans son ensemble semble être beaucoup plus intéressée par le développement de Ruby en tant que langage Web, car c'est ce qui l'a vraiment rendue célèbre, alors que Python a commencé sur un chemin différent et est ensuite devenu largement utilisé en tant que langage Web.
la source
J'ai beaucoup utilisé Python pour les applications d'ingénierie et Ruby pour les applications Web.
Le problème que je vois avec Ruby en tant que langage scientifique est qu’il existe trop d’options syntaxiques pour une opération donnée.
Python est conçu avec le principe suivant "Il devrait y avoir un - et de préférence un seul - moyen évident de le faire". Cela rend BEAUCOUP plus facile la lecture du code de quelqu'un et la détermination de son intention. Ceci est essentiel pour les examens par les pairs en ingénierie, etc.
J'aime Ruby et c'est génial pour certaines tâches, mais mon code Ruby pourrait être syntaxiquement totalement différent de celui d'un programmeur différent qui fait exactement la même chose. Cela provoque trop d'ambiguïté dans un environnement scientifique ou d'ingénieur.
la source
A priori, une grande partie de cela serait la dépendance de matlab par beaucoup de chercheurs. Python a des alternatives, telles que la sauge . Alors que le rubis ne le fait pas, ou du moins, il n'y en a pas.
Deuxièmement, selon la FAQ Ruby , python est à la fois procédural et orienté objet, tandis que ruby se fait passer pour un langage procédural. Si vous écrivez un petit script à des fins mathématiques, comme ce que vous feriez dans matlab, le paradigme OO est un casse-tête. Non seulement cela, mais cela oblige à abandonner conceptuellement les paradigmes fonctionnels / procéduraux utilisés par les chercheurs. Math n'est pas OO. Les mathématiques sont fonctionnelles, suivies des procédures (pensez à des preuves logiques).
Enfin, notez que Ruby FAQ indique que ruby est plus complexe que python. La programmation vient en second lieu pour les chercheurs, pas d'abord comme nous.
la source
1 + 1
envoie le message+
à l'objet1
? Cela ne change en rien la structure de votre programme.Lorsque la BDFL (Guido van Rossum) a écrit pour la première fois Python, son objectif était qu’elle soit aussi compréhensible que l’anglais clair (proposition de financement DARPA), ce qui éliminerait les erreurs de codage courantes.
Un problème très visible est l'utilisation du retrait pour délimiter des blocs. Dans les langues qui ont des délimiteurs d'instructions complexes explicites (par exemple des accolades en C, Pascal BEGIN / END), les espaces sont réduits à un seul caractère d'espacement avant de fournir le code au lexer. Cela permettrait une grande variation dans la disposition du code.
Pour les programmeurs professionnels, cela n’est pas un problème, car ils se sont formés à la gérer à partir de 30 heures ou plus par semaine.
Pour d'autres professionnels où la programmation est un outil, cette question devient un problème majeur. Ce groupe comprend des mathématiciens, des physiciens, des chimistes, des ingénieurs, etc.
Etant donné que Python réduit les erreurs pour les programmeurs non professionnels, cela leur permet de réfléchir au problème qu’ils tentent de résoudre et d’avoir moins à traiter avec les mécanismes du langage.
Ceci est un exemple simple de pourquoi il est populaire en dehors de la profession de programmeur. D'autres exemples peuvent être utilisés pour illustrer le même sujet, tels que les piles incluses, The Zen of Python (
import this
), l'utilisation de l'humour Monty Python, etc.la source
C’est une excellente discussion ici, je pense que les publications ici expliquent vraiment pourquoi le python est plus populaire dans la communauté scientifique. Cependant, il existe certains contre-arguments pour les sciences du rubis:
ruby peut être codé de façon plus intuitive que python (DSL, etc.): étant donné les bons packages utilisés:
check bioruby: http://bioruby.org/ une réserve de séquence peut être simplement: s.reverse etc. si vous utilisez des bases de données: l’API de liaison de base de données ruby est sans doute meilleure que python.
ruby permet un niveau d'abstraction plus élevé tout en restant concis.
meilleur système de gestion des paquets: les gemmes de rubis sont tellement plus faciles comparées à: setuptools, pip, etc.
Cependant, l’adoption de Ruby a été / sera / sera entravée par sa complexité. Je pense que Lisp est un langage génial / puissant, mais pourquoi n’a-t-il pas décollé comme langage général? la situation similaire existe ici avec ruby - il hérite de la puissance de lisp, bavarde et perl!: mais seule une sélection de personnes l’utilisera réellement pour en tirer les avantages. En fin de compte, il peut rester fort dans certains créneaux / domaines spéciaux (tels que le rail en Web, la configuration de marionnettes), il est difficile pour les non-programmeurs d’en profiter pleinement, mais c’est peut-être un bon ami du programmeur (vu les scientifiques apprécient le langage: http://www.cleveralgorithms.com/nature-inspired/index.html )
Une mise à jour la plus récente: il semblerait que python soit déjà en train de conquérir le paysage. Récemment, des livres tels que: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 et de nombreux autres livres (analyse de données, apprentissage automatique, etc.) ont tous été écrits en python. . Si Ruby veut rattraper son retard, des efforts sérieux sont nécessaires. Considérant matplotlib en python, il faut probablement plusieurs années avant d'obtenir l'état actuel. À moins que des efforts sérieux soient déployés dans le rubis, il ne pourra probablement pas rattraper le stade de l'analyse scientifique des données python / du calcul scientifique dans les 2-3 prochaines années.
la source
Après avoir utilisé python pour l’analyse de données pendant un certain temps (provenant d’expériences de travail avec ruby, lua et R), le paquet numpy (et de nombreuses bibliothèques scientifiques connexes) permet de lancer un calcul rapide (vitesse similaire à C, as numpy). est écrit / intégré aux codes C) avec la facilité de programmation en python.
Numpy existe depuis un certain temps, sa disponibilité a aidé de nombreux logiciels scientifiques connexes à être construits, tels que scipy, pandas, etc., etc. la bibliothèque de calcul est en cours de développement (NMtrix: https://github.com/SciRuby/nmatrix ). Cette différence de temps énorme fait de python le choix évident du calcul scientifique.
la source
Je me demandais la même chose. Comme Spencer Rathbun l'a dit, je pense que c'est à cause de l'aspect procédural de Python. Étant moi-même un "non-programmeur", je trouve ça magnifique de pouvoir coder dans Ruby et que le framework Rails soit excellent pour la facilité d'utilisation. Cependant, lorsque vous codez à des fins scientifiques (mathématiques, biologie, etc.), vous pensez normalement dans un langage "mathématique", c'est-à-dire que vous ne vous souciez pas des énoncés tels que
mais vous vous souciez plus de
Donc, je pense que Ruby est puissant que beaucoup de ses fonctionnalités seraient inutilisées dans un programme scientifique. Il est plus facile de penser aux procédures.
la source
Python supporte mieux les tableaux à N dimensions avec le paquet Numpy. Je n'ai rien vu de semblable pour Ruby.
Python semble être plus rapide dans le calcul numérique / scientifique que j'ai fait. Je n'ai aucune preuve autre que lorsque j'ai écrit des algorithmes similaires en Python et Ruby, les algorithmes Python ont fonctionné plus rapidement (YMMV).
la source
Une des raisons est que Python supporte bien l'utilisation / l'intégration / l'appel de code C / C ++, alors qu'à ma connaissance, Ruby n'offre pas le même degré (de facilité) d'intégration. Cela signifie que vous pouvez écrire les composants de code les plus performants en C / C ++, puis utiliser Python (c'est-à-dire un langage de haut niveau / plus facile à regarder des yeux) pour coller le tout. J'imagine que c'est aussi l'une des raisons de son adoption institutionnelle rapide par Google.
la source
Je pense que l’une des principales raisons pour lesquelles Python est devenu si populaire pour la science des données est due au temps et aux efforts que nous avons économisés (c’est-à-dire aux économies d’argent) que nous pourrions économiser pour étendre nos scripts pour une solution réelle (par exemple, un système logiciel). Avec Python, nous pourrions plus facilement créer une solution système basée sur le code que nous avons écrit pour la science des données.
J'ai eu plusieurs expériences avec la recherche d'un langage interprète avec cette fonction il y a environ 15 ans. À l’époque, Python avait été choisi comme tel, non pas parce que c’était un langage parfait pour la science des données, mais parce qu’il s’agissait d’un rare langage POO doté d’un interprète rapide / portable et extensible à une interface avec d’autres langages tels que C / C ++ /. Java. Contrairement à nos jours, il s’agissait de fonctionnalités intéressantes mais rares permettant de construire directement des solutions à partir du code de base déjà implémenté pour la science des données.
Le temps peut être un autre facteur critique pour la création d’un langage informatique. Il y a 15 ans, nous avions découvert qu'il existait déjà des packages de base tels que numeric et scipy pour le calcul numérique en Python, mais nous ne connaissions même pas l'existence de Ruby en tant que langage de programmation. À la fin de 2018, je pouvais trouver plusieurs projets utilisant Ruby pour la science des données. Dix ans plus tard, on pourrait se demander pourquoi Ruby est si populaire pour l'IA.
la source