c# - nouveau - quel langage de programmation choisir




Pourquoi apprendre Perl, Python, Ruby si la société utilise C++, C#ou Java comme langage applicatif? (20)

Je me demande pourquoi un développeur C ++, C #, Java voudrait apprendre une langue dynamique?

En supposant que l'entreprise ne passera pas de son langage de développement principal de C ++ / C # / Java à un langage dynamique, à quoi sert une langue dynamique?

Quelles tâches d'assistance peuvent être accomplies par les langages dynamiques plus rapidement ou mieux après seulement quelques jours d'apprentissage qu'avec le langage statique que vous utilisez depuis plusieurs années?

Mettre à jour

Après avoir vu les premières réponses, il est clair qu'il y a deux problèmes. Mon principal intérêt serait quelque chose qui est justifiable pour l'employeur en tant que dépense. C'est-à-dire que je cherche des justifications pour que l'employeur finance l'apprentissage d'une langue dynamique. Mis à part le fait évident que l'employé aura une vision plus large, les employeurs sont généralement à la recherche d'un «vrai» avantage.


Étant donné l'intérêt croissant pour l'exécution de langages dynamiques (da-vinci vm etc.) sur la JVM et le nombre croissant de langages dynamiques qui s'exécutent dessus (JRuby, Grrovy, Jython), je pense que les usecases ne font qu'augmenter. Certains des scénarios que j'ai trouvés vraiment appréciés sont

  1. Prototypage - utilisez RoR ou Grails pour construire des prototypes rapides avec l'avantage de pouvoir l'exécuter sur le serveur d'application standard et (peut-être) de réutiliser les services existants, etc.

  2. Test - l'unité droite teste beaucoup plus rapidement dans des langages dynamiques

  3. Script de test de performances / automatisation - certains de ces outils commencent à autoriser l'utilisation du langage dynamique standard de choix pour écrire les scripts de test au lieu des langages de script propriétaires. L'avantage secondaire pourrait être de pouvoir réutiliser un code de test unitaire que vous avez déjà écrit.


Apprendre quelque chose avec un système de POO flexible, comme Lisp ou Perl (voir Moose), vous permettra de mieux développer et comprendre vos pensées sur l'ingénierie logicielle. Idéalement, chaque langue a une facette unique (que ce soit CLOS ou une autre technique) qui améliore, étend et augmente vos capacités en tant que programmeur.


Beaucoup de fois une tâche rapide surgit qui ne fait pas partie du logiciel principal que vous développez. Parfois, la tâche est unique, par exemple comparer ce fichier à la base de données et laissez-moi savoir les différences. Il est beaucoup plus facile de faire l'analyse de texte en Perl / Ruby / Python qu'en Java ou en C # (en partie parce qu'il est beaucoup plus facile d'utiliser des expressions régulières). Il faudra probablement beaucoup moins de temps pour analyser le fichier texte en utilisant Perl / Ruby / Python (ou peut-être même vbscript cringe puis le charger dans la base de données que pour créer un programme Java / C # pour le faire ou le faire par main.

En outre, en raison de la facilité avec laquelle la plupart des langages dynamiques analysent le texte, ils sont parfaits pour la génération de code. Bien sûr, votre projet final doit être en C # / Java / Transact SQL mais au lieu de couper et coller 100 fois, de trouver des erreurs et de couper et coller encore 100 fois, il est souvent (mais pas toujours) plus facile d'utiliser un générateur de code.

Un exemple récent au travail est que nous avions besoin d'obtenir des données d'un système de comptabilité dans notre système de comptabilité. Le système a un format d'importation, mais l'ancien système avait un format complètement différent (largeur fixe bien que certaines choses aient dû être appariées). La tâche n'est pas de créer un programme pour migrer les données encore et encore. C'est de mettre les données dans notre système et de les maintenir là-bas. Donc, même si nous sommes un magasin C # et SQL Server, j'ai utilisé Python pour convertir les données dans le format qui pourrait être importé par notre application. En fin de compte, peu importe que j'aie utilisé python, il importe que les données soient dans le système. Mon patron était plutôt impressionné.

Où je vois souvent les langages dynamiques utilisés pour tester. Il est beaucoup plus facile de créer un programme Python / Perl / Ruby pour créer un lien vers un service Web et y lancer des données que de créer le programme Java équivalent. Vous pouvez également utiliser python pour frapper des programmes de ligne de commande, générer une tonne de données de test de déchet (mais toujours valide), etc. assez facilement.

L'autre chose sur laquelle les langages dynamiques sont importants est la génération de code. Création du code C # / C ++ / Java. Quelques exemples suivent:

La première tâche de génération de code que je vois souvent est celle des personnes utilisant des langages dynamiques pour maintenir les constantes dans le système. Au lieu de coder manuellement un tas d'énumérations, un langage dynamique peut être utilisé pour analyser assez facilement un fichier texte et créer le code Java / C # avec les énumérations.

SQL est un autre jeu de balle mais vous obtenez souvent de meilleures performances en coupant et collant 100 fois au lieu d'essayer de faire une fonction (en raison de la mise en cache des plans d'exécution ou de la logique compliquée). un ensemble). En fait, il est très utile d'utiliser la définition de table pour créer automatiquement certaines procédures stockées.

Il est toujours préférable d'acheter pour un générateur de code. Mais même si vous ne le faites pas, est-ce plus amusant de passer du temps à copier / coller ou est-ce plus amusant de créer un script Perl / Python / Ruby une fois et ensuite de générer le code? S'il vous faut des heures pour coder manuellement quelque chose mais moins de temps pour créer un générateur de code, alors même si vous l'utilisez une fois que vous avez gagné du temps et donc de l'argent. S'il vous faut plus de temps pour créer un générateur de code que pour le coder une seule fois, mais vous savez que vous devrez mettre à jour le code plus d'une fois, cela peut toujours être logique. Si cela vous prend 2 heures pour coder à la main, 4 heures pour faire le générateur mais vous savez que vous devrez coder à la main un travail équivalent encore 5 ou 6 fois qu'il est évidemment préférable de créer le générateur.

En outre, certaines choses sont plus faciles avec les langages dynamiques que Java / C # / C / C ++. En particulier, les expressions régulières viennent à l'esprit. Si vous commencez à utiliser des expressions régulières dans Perl et réalisez leur valeur, vous pouvez soudainement commencer à utiliser la bibliothèque d'expressions régulières Java si ce n'est déjà fait. Si vous avez alors il peut y avoir quelque chose d'autre.

Je vais vous laisser avec un dernier exemple d'une tâche qui aurait été formidable pour une langue dynamique. Mon collègue de travail a dû prendre un répertoire plein de fichiers et les graver sur différents CD pour différents clients. Il y avait quelques clients mais beaucoup de fichiers et il fallait les regarder pour voir ce qu'ils étaient. Il a fait cette tâche à la main .... Un programme Java / C # aurait fait gagner du temps, mais pour une fois et avec tous les frais généraux de développement, cela ne vaut pas le coup. Cependant, tapoter quelque chose ensemble dans Perl / Python / Ruby aurait probablement valu la peine. Il a passé plusieurs heures à le faire. Il aurait fallu moins d'un pour créer le script Python pour inspecter chaque fichier, correspondre à quel client il va, puis déplacer le fichier à l'endroit approprié ..... Encore une fois, ne fait pas partie du travail standard. Mais la tâche est apparue comme une exception. Est-il préférable de le faire vous-même, passer le plus de temps possible à faire de la tâche Java / C #, ou passer beaucoup moins de temps à le faire en Python / Perl / Ruby. Si vous utilisez C ou C ++, le point est encore plus dramatique en raison des soucis supplémentaires de programmation en C ou C ++ (pointeurs, pas de vérification des limites des tableaux, etc.).



Ils sont utiles pour le "Quick Hack" qui consiste à combler une lacune dans votre langue principale pour une solution rapide (et potentiellement sale) plus rapide qu'il n'en faudrait pour développer la même chose dans votre langue principale. Un exemple: un simple script dans perl pour parcourir un fichier texte volumineux et remplacer toutes les instances d'une adresse e-mail par une autre est trivial avec un laps de temps de 10 minutes. Pirater une application de console ensemble pour faire la même chose dans votre langue principale prendrait des multiples de cela.

Vous avez également l'avantage que l'exposition à d'autres langues élargit vos capacités et que l'apprentissage de l'attaque de problèmes dans une perspective de langues différentes peut être aussi précieux que le langage lui-même.

Enfin, les langages de script sont très utiles dans le domaine de l'extension. Prenez LUA comme exemple. Vous pouvez insérer un interpréteur LUA dans votre application avec très peu de frais généraux et vous avez maintenant un moyen de créer une fonctionnalité de script riche qui peut être exposée aux utilisateurs finaux ou modifiée et distribuée rapidement sans nécessiter une reconstruction de l'application entière. Ceci est utilisé avec beaucoup d'effet dans de nombreux jeux, notamment World of Warcraft.


J'ai souvent constaté que l'apprentissage d'une autre langue, en particulier une langue dynamiquement typée, peut vous apprendre des choses sur d'autres langues et faire de vous un meilleur programmeur. Apprendre le rubis, par exemple, vous apprendra la programmation orientée objet de manière Java, et vice versa. Dans l'ensemble, je crois qu'il est préférable d'être un programmeur bien arrondi que coincé dans une seule langue. Cela vous rend plus précieux pour les entreprises / clients pour lesquels vous travaillez.


Je ne pense pas que quelqu'un l'ait déjà mentionné. Apprendre une nouvelle langue peut être amusant! Sûrement que c'est une raison suffisante pour essayer quelque chose de nouveau.


Je ne sais pas si c'est ce que vous cherchez, mais nous écrivons notre application principale avec Java dans la petite société pour laquelle je travaille, mais nous avons utilisé python pour écrire rapidement de plus petits scripts. Logiciel de sauvegarde, scripts temporaires pour manipuler les données et extraire les résultats. Il semble parfois plus facile de s'asseoir avec python et d'écrire un script rapide plutôt que de jouer avec des classes et des trucs en java.

Les scripts temporaires qui ne vont pas rester en place n'ont pas besoin de beaucoup de temps de conception gaspillés sur eux.

Et je suis fainéant, mais il est bon d'apprendre autant que possible et de voir quelles caractéristiques existent dans d'autres langues. En savoir plus ne vous blesse jamais dans les changements de carrière à venir :)


Je programme principalement en Java et en C # mais utilise des langages dynamiques (ruby / perl) pour supporter un déploiement plus fluide, déclencher des tâches d'OS, des rapports automatisés, un peu d'analyse de logs, etc.

Après une courte période d'apprentissage et d'expérimentation avec ruby ​​ou perl, vous devriez être capable d'écrire des scripts de manipulation de regex qui peuvent altérer les formats de données ou récupérer des informations à partir des logs. Un exemple d'un petit script ruby ​​/ perl qui pourrait être écrit rapidement serait un script pour analyser un très gros fichier journal et ne signaler que quelques événements intéressants dans un format lisible par l'homme ou un format csv.

En outre, avoir de l'expérience avec une variété de langages de programmation différents devrait vous aider à trouver de nouvelles façons d'aborder les problèmes dans des langages plus structurés comme Java, C ++ et C #.


La connaissance de grep et de ruby ​​a permis d'affiner un problème et de vérifier la solution pour un problème impliquant des tonnes d'exceptions Java sur certains serveurs de production. Parce que j'ai jeté la solution ensemble dans ruby, cela a été fait (conçu, implémenté, testé, exécuté, corrigé, corrigé, amélioré, analysé) dans un après-midi au lieu de quelques jours. J'aurais pu résoudre le même problème en utilisant une solution tout en Java ou une solution C #, mais cela m'aurait probablement pris plus de temps.

Avoir une expertise linguistique dynamique vous conduit aussi parfois à des solutions plus simples dans des langues moins dynamiques. En ruby, perl ou python, vous n'avez qu'à chercher intuitivement des tableaux associatifs (hachages, dictionnaires, quel que soit le mot que vous voulez utiliser) pour les plus petites choses, où vous pourriez être tenté de créer une hiérarchie de classe complexe dans un langage statique lorsque le problème ne l'exige pas forcément.

De plus, vous pouvez brancher la plupart des langages de script dans la plupart des runtimes. Donc, il ne doit pas être l'un ou l'autre.


Les langages dynamiques sont fantastiques pour les idées de prototypage. Souvent, pour des raisons de performance, ils ne fonctionneront pas pour des solutions ou des produits permanents. Mais , avec des langages comme Python, qui vous permettent d'intégrer le C / C ++ / Java standard à l'intérieur d'eux ou vice versa, vous pouvez accélérer les bits vraiment critiques, mais laissez-les collés avec la flexibilité d'un langage dynamique.

... et ainsi vous obtenez le meilleur des deux mondes. Si vous avez besoin de justifier cela en termes de pourquoi plus de gens devraient apprendre ces langues, faites remarquer beaucoup plus vite que vous pouvez développer le même logiciel et combien plus robuste est la solution (parce que les problèmes de débogage / correction dans les langages dynamiques considérablement plus facile!).


Mis à part les problèmes philosophiques, je sais que j'ai eu de la valeur en écrivant des scripts Ruby rapides et sales pour résoudre des problèmes de force brute pour lesquels Java était trop gros. L'année dernière, j'avais trois structures de répertoires séparées qui étaient toutes plus ou moins les mêmes, mais avec beaucoup de différences entre les fichiers (le client n'avait pas entendu parler de contrôle de version et je laisserai le reste à votre imagination).

Il aurait fallu beaucoup de frais généraux pour écrire un analyseur en Java, mais dans Ruby, j'ai eu un travail en environ 40 minutes.


Paul Graham a publié un article il y a plusieurs années sur la raison pour laquelle les programmeurs Python ont fait de meilleurs programmeurs Java. ( http://www.paulgraham.com/pypar.html )

Fondamentalement, peu importe si la nouvelle langue est pertinente à la méthodologie actuelle de l'entreprise, l'apprentissage d'une nouvelle langue signifie apprendre de nouvelles idées. Quelqu'un qui est disposé à apprendre une langue qui n'est pas considérée comme «classe affaires» signifie qu'il est intéressé par la programmation, au-delà de gagner un salaire.

Pour citer le site de Paul:

Et les gens n'apprennent pas Python parce que ça va leur donner un travail; ils l'apprennent parce qu'ils aiment vraiment programmer et ne sont pas satisfaits des langues qu'ils connaissent déjà.

Ce qui les rend exactement le genre de programmeurs que les entreprises devraient vouloir embaucher. D'où ce que, à défaut d'un meilleur nom, j'appellerai le paradoxe Python: si une entreprise choisit d'écrire son logiciel dans un langage relativement ésotérique, elle pourra embaucher de meilleurs programmeurs, car ils n'attireront que ceux qui se souciait assez pour l'apprendre. Et pour les programmeurs, le paradoxe est encore plus prononcé: la langue à apprendre, si vous voulez obtenir un bon travail, est une langue que les gens n'apprennent pas simplement pour obtenir un emploi.

Si un employeur était prêt à payer le coût de l'apprentissage d'une nouvelle langue, il est probable que les personnes qui se sont portées volontaires pour apprendre (en supposant que ce n'était pas un cours obligatoire) seraient les mêmes que celles qui sont déjà sur la voie rapide.


Pensez-vous pouvoir travailler pour cette entreprise pour toujours? Si vous êtes sur le marché du travail, certains employeurs potentiels seront au courant du paradoxe Python .


Personnellement, je travaille sur une application Java, mais je n'ai pas pu me débrouiller sans Perl pour certains scripts de support.

J'ai des scripts pour retourner rapidement ce que je veux dire, des scripts pour exécuter des scripts de construction, des scripts pour gratter des données et comparer des choses.

Bien sûr, je pourrais faire tout ça avec java, ou peut-être des scripts shell (j'en ai aussi), mais qui veut compiler une classe (en vérifiant que le classpath est correct, etc) quand tu as besoin de quelque chose de rapide et sale. Connaître un langage de script peut éliminer 90% de ces tâches manuelles ennuyeuses / répétitives.


Pour répondre à la question mise à jour, c'est un problème de poulet / œuf. La meilleure façon de justifier une dépense est de montrer comment elle réduit un coût ailleurs, de sorte que vous devrez peut-être consacrer un peu de temps supplémentaire à apprendre quelque chose d'abord pour construire un prototype fonctionnel.

Montrez à votre patron une démo comme "hé, j'ai fait cette chose, et cela me fait gagner autant de temps [ou mieux encore, autant de dollars], imaginez si tout le monde pouvait utiliser autant d'argent que nous économiserions"

et ensuite, après qu'ils sont d'accord, expliquez en quoi c'est une autre technologie et que cela vaut la peine de recevoir plus de formation et de former d'autres personnes sur la façon de mieux le faire.


Si tout ce que vous avez est un marteau, chaque problème commence à ressembler à un clou.

Il y a des moments où avoir un tournevis ou une paire de pinces rend un problème compliqué trivial.

Personne ne demande aux entrepreneurs, charpentiers, etc, "Pourquoi apprendre à utiliser un tournevis si j'ai déjà un marteau?". Très bons entrepreneurs / charpentiers ont des tonnes d'outils et savent bien les utiliser. Tous les programmeurs devraient faire la même chose, apprendre à utiliser de nouveaux outils et bien les utiliser.

Mais avant d'utiliser des outils électriques, prenons un moment pour parler de la sécurité des magasins. Assurez-vous de lire, de comprendre et de suivre toutes les règles de sécurité qui accompagnent vos outils électriques. Cela réduira considérablement le risque de blessure. Et rappelez-vous ceci: il n'y a pas de règle plus importante que de les porter: des lunettes de sécurité - Norm


Souvent, les langages dynamc (en particulier python et lua) sont intégrés dans les programmes pour ajouter une fonctionnalité de type plugin et parce qu'ils sont des langages de haut niveau qui facilitent l'ajout de certains comportements, lorsqu'une langue de bas niveau / intermédiaire n'est pas nécessaire .

Lua manque spécifiquement tous les appels système de bas niveau car il a été conçu pour faciliter l'utilisation afin d'ajouter des fonctionnalités au sein du programme, et non comme un langage de programmation général.


Vous devriez également envisager d'apprendre un langage de programmation fonctionnel comme Scala. Il a beaucoup d'avantages de Ruby, y compris une syntaxe concise, et des fonctionnalités puissantes comme des fermetures. Mais il se compile en fichiers de classe Java et s'intègre parfaitement dans une pile Java, ce qui peut faciliter grandement l'avalement pour votre employeur.

Scala n'est pas dynamiquement typé, mais sa fonctionnalité de "conversion implicite" donne beaucoup, peut-être même tous les avantages de la frappe dynamique, tout en conservant de nombreux avantages du typage statique.


Un bon joueur de hockey joue là où se trouve la rondelle. Un bon joueur de hockey joue là où la rondelle va être. - Wayne Gretzky

Notre industrie est en constante évolution. Aucune langue ne peut être dominante pour toujours. Pour moi Java, C ++, .Net est où la rondelle est en ce moment. Et python, ruby, perl est l'endroit où la rondelle va être. Décidez pour vous-même si vous voulez être bon ou grand!





perl