d'avenir - Pourquoi apprendre Perl, Python, Ruby si la société utilise C++, C#ou Java comme langage applicatif?



meilleur de (25)

Une grande raison d'apprendre Perl ou Ruby est de vous aider à automatiser les tâches compliquées que vous avez à faire encore et encore.

Ou si vous devez analyser le contenu des fichiers journaux et que vous avez besoin de plus de ressources que celles disponibles en utilisant grep, sed, etc.

Utiliser aussi d'autres langages, par exemple Ruby, qui n'ont pas beaucoup de "coût d'installation" vous permettra de prototyper rapidement des idées avant de les implémenter en C ++, Java, etc.

HTH

à votre santé,

Rob

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.


Ne dites pas à votre employeur que vous voulez apprendre Ruby. Dites-lui que vous voulez en savoir plus sur l'état de l'art dans les technologies de framework Web. il se trouve que les plus chaudes sont Django et Ruby on Rails.


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.


Permettez-moi d'inverser votre question en demandant quelle est l'utilité pour un anglophone d'apprendre une autre langue?

Les langues que nous parlons (et celles que nous programmons) éclairent notre façon de penser. Cela peut arriver à un niveau fondamental, tel que c ++ versus javascript versus lisp, ou au niveau de l'implémentation, dans lequel une construction ruby ​​fournit un moment d'eureka pour une solution dans votre "vrai travail".

Parlant de votre vrai travail, si le marché se dirige vers le sud et que votre employeur décide de vous «faire la bonne taille», comment pensez-vous que vous vous opposerez à un gars flexible parce qu'il a écrit un logiciel en plusieurs langues au lieu de exposition? Toutes choses égales par ailleurs, je pense que la réponse est claire.

Enfin, vous programmez pour vivre parce que vous aimez la programmation ... non?


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.


Apprendre une nouvelle langue est un processus à long terme. Dans quelques jours, vous apprendrez les bases, oui. Mais! Comme vous le savez probablement, l'applicabilité pratique réelle de n'importe quel langage est liée à la bibliothèque standard et aux autres composants disponibles. Apprendre à utiliser efficacement nécessite beaucoup d'expérience pratique.

Peut-être le seul avantage immédiat à court terme est que les développeurs apprennent à distinguer les ongles qui ont besoin d'un Python / Perl / Ruby -hammer. Et, s'ils sont bons, ils peuvent alors en étudier d'autres (en ligne peut-être!) Et devenir de véritables experts.

Les avantages à long terme sont plus faciles à imaginer:

  1. L'employé devient un meilleur développeur. Meilleur développeur => meilleure qualité. Nous vivons dans une économie du savoir ces jours-ci. Il est plus sage d'investir dans ces cerveaux qui fonctionnent déjà pour vous.

  2. Il est plus facile de s'adapter quand la prochaine grande langue émerge. Il est très probable que la NBL aura beaucoup de fonctionnalités présentes dans les langages de script d'aujourd'hui: fonctions de première classe, fermetures, flux / générateurs, etc.

  3. Nouvelles possibilités de marché et capacité à répondre plus rapidement. Même si vous n'écrivez pas en Python, les autres le sont . Vos clients? Un autre fournisseur dans le projet? Peut-être qu'un élément essentiel a été écrit dans une autre langue? Cela vous coûtera de l'argent et du temps, si vous n'avez pas de personnes capables de comprendre le code et de s'y interfacer.

  4. Recrutement. Si votre entreprise a la réputation d'enseigner des choses nouvelles et intéressantes aux gens, il sera plus facile de recruter les meilleurs. Tout le monde fait Java / C # / C ++. Ce n'est pas un moyen très efficace de se différencier sur le marché du travail.


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.


Le «véritable avantage» qu'un employeur pourrait voir est un meilleur programmeur qui peut mettre en œuvre des solutions plus rapidement; Cependant, vous ne serez pas en mesure de fournir des chiffres précis pour justifier la dépense et un employeur vous fera probablement travailler sur ce qui fait de l'argent maintenant, plutôt que de vous faire travailler sur des choses qui améliorent l'avenir.

Le seul moment où vous pouvez recevoir une formation à la charge de l'employeur, c'est quand il en ressent le besoin et c'est moins cher que d'embaucher une nouvelle personne qui possède déjà cette compétence.


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 .


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


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!


Quand j'ai appris Python, j'ai travaillé pour un magasin Java. Parfois, je devais faire de sérieuses tâches de traitement de texte qui étaient beaucoup plus faciles à faire avec des scripts Python rapides qu'avec des programmes Java. Par exemple, si je devais analyser un fichier CSV complexe et déterminer laquelle de ses lignes correspondait à des lignes de notre base de données Oracle, cela était beaucoup plus facile à faire avec Python qu'avec Java.

Plus que cela, j'ai trouvé que l'apprentissage de Python a fait de moi un meilleur programmeur Java; Ayant appris plusieurs des mêmes concepts dans une autre langue, je pense que je comprends mieux ces concepts. Et pour ce qui rend Python plus facile que Java, vous pouvez consulter cette question: Java -> Python?


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.


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.


J'ai trouvé plus que je joue avec Ruby, mieux je comprends C #.

1) Lorsque vous passez d'une langue à l'autre, chacun d'eux a ses propres concepts et philosophies derrière les problèmes qu'il essaie de résoudre. Cela vous aidera à trouver le bon outil pour le travail ou le domaine d'un problème .

2) Le rôle du compilateur (ou interprète pour certaines langues) devient plus important. Pourquoi le système de type Ruby diffère-t-il du système .Net / C #? Quels problèmes chacun de ces problèmes résout-il? Vous vous trouverez à comprendre à un niveau inférieur les constructions du compilateur et son influence sur la langue

3) Passer de Ruby à C # m'a vraiment aidé à mieux comprendre les Patterns . Je suggère vraiment de mettre en œuvre des modèles de conception communs dans une langue comme C # et ensuite dans une langue comme Ruby. Cela m'a souvent aidé à voir à travers la cérémonie du compilateur la philosophie d'un modèle particulier.

4) Une communauté différente. C #, Java, Ruby, Python, etc ont tous des communautés différentes qui peuvent aider à engager vos capacités. C'est un excellent moyen de prendre votre engin au niveau suivant.

5) Dernier point, mais non le moindre, parce que les nouvelles langues sont amusantes :)


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 pense que les principaux avantages des langues dynamiques peuvent être réduits à

  1. Développement rapide
  2. La colle

Le temps de cycle de test de code de conception court rend les langages dynamiques idéaux pour le prototypage, les outils et les scripts uniques rapides et sales. À mon humble avis, les deux derniers peuvent avoir un impact énorme sur la productivité d'un programmeur. Cela me stupéfie combien de personnes marchent à travers les choses manuellement au lieu de fouetter un outil pour le faire pour eux. Je pense que c'est parce qu'ils n'ont pas quelque chose comme Perl dans leur boîte à outils.

La possibilité de s'interfacer avec à peu près n'importe quoi (d'autres programmes ou langages, bases de données, etc.) facilite la réutilisation du travail existant et l'automatisation des tâches qui, autrement, devraient être effectuées manuellement.


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.


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 #.


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.



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.


É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.


Il s'agit d'élargir vos horizons en tant que développeur. Si vous vous limitez uniquement aux langues fortement typées, vous ne finirez peut-être pas par trouver le meilleur programmeur possible.

En ce qui concerne les tâches, Python / Lua / Ruby / Perl sont parfaits pour les petites tâches simples, comme trouver des fichiers et les renommer. Ils fonctionnent également bien lorsqu'ils sont associés à un framework (par exemple Rails, Django, Lua pour Windows) pour développer rapidement des applications simples. Hell, 37Signals est basé sur la création d'applications simples mais très utiles dans Ruby on Rails.


Code pour WebDriver utilisant java pour exécuter avec IE. Je crois que ce concept pourrait vous être utile en utilisant C #:

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);      
File file = new File("C:\\Program Files\\Internet Explorer\\iexplore.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
driver = new InternetExplorerDriver(capabilities);

Si le code ci-dessus ne fonctionne pas, utilisez ce qui suit au lieu de "Fichier fichier = nouveau fichier (" C: \ Program Files \ Internet Explorer \ iexplore.exe ");":

File file = new File("F:\\Ripon\\IEDriverServer_Win32_2.25.2\\IEDriverServer.exe");

[Remarque: la version de IEDriverServer et Windows (32 ou 64 bits) peut varier d'un individu à l'autre]





c# java python ruby perl