Pour les 3 prochaines années, je devrai travailler avec la JVM (exigence de projet) en utilisant une API de tiers très spécifique. Ils veulent Java mais on m'a donné une marge de manœuvre pour s'éloigner de Java. J'espérais que nous pouvions revenir à la framework .NET afin que je puisse développer du code dans F #, être absolument amoureux de OCAML. Le développement .NET a été frappé par notre client. C'est un non go. P>
Je me suis tourné vers la recherche, la lecture et le piquer autour des blogs de programmation / des forums essayant de comprendre quelle langue pourrait faire appel à moi plus loin: Scala ou Clojure. Ceux-ci semblent avoir la plus grande base de communauté / fan. Être expérimenté avec ML Langues, je vois beaucoup de personnes qui comparent Scala à ML. Cependant, il y a de vrais naysayers lors de cette comparaison. Si Scala était aussi proche de ML ma productivité et ma courbe d'apprentissage bénéficierait de ce commutateur. P>
Internet est plein de désinformation et de merveille si je souffre de tel. Je n'aime pas la syntaxe de Lisp (ne me blesse pas!) Mais si Scala a les verrues que je lis, je lis (pauvre soutien de l'IDE, cadre de test de l'unité de flux, problèmes de performance) je me demande si la clojure est la meilleure option. Je veux être productif hors de la porte, en utilisant des fonctions comme objets de première classe et de minimiser la douleur de la concurrence. P>
Alors, de toute façon, avant de passer trop de temps sur Internet et que je ne travaille pas ... je suis coincé avec la JVM, malade de Java et je me demandais où aller? P>
p>
11 Réponses :
noop? http://code.google.com/p/noop/ (expérimental) < / p>
Je ne peux pas aller avec quelque chose de trop expérimental. C'est pourquoi je me limitais à Scala / Clojure. Il a déjà été démontré que Scala travaille dans l'industrie pendant que Lisp existe depuis des siècles.
Avez-vous considéré comme Groovy? Je ne pense pas que ce soit aussi fonctionnel que Scala / Clojure, mais c'est certainement beaucoup plus fonctionnel que Java **. En général, je peux avoir le même travail à Groovy avec environ 50% du code que cela me faudrait à Java. P>
C'est parce que Groovy est syntaxiquement similaire à Java et fournit un accès transparent aux bibliothèques JDK, mais l'ajout de nombreuses fonctionnalités de langage (fermetures, méta-programmation, propriétés) et dactylographie élimine presque tous les casqueaux associés à Java Programmation. P>
** Je veux dire fonctionnel dans le sens de la "programmation fonctionnelle" plutôt que de "fonctionner correctement" p>
Groovy est une bonne suggestion. Il est assez similaire pour Java qu'il n'inspire pas nécessairement la peur dans les cœurs des maisons de Java, mais il est suffisamment similaire pour rubis que c'est beaucoup plus facile d'être concis et expressif et essayer des solutions de style fonctionnel qu'avec un java uni.
Groovy, hein? Je vais devoir donner une idée de cette idée! Merci pour votre réponse. Cela ferait le très bon point d'Oscar Reyes à son poste sur moi qui travaille dans une langue, le reste travaillant dans un autre sujet de moins.
C'est exact. Mais il semble que Groovy a perdu la majeure partie de son élan et qui sait si ça va le récupérer? (Je n'ai aucune donnée pour le prouver, autrement que le fait que je le vois moins souvent mentionné maintenant que les autres alternatives). Cela dit, faites attention aux performances de Groovy. C'est certainement beaucoup derrière le clojure et Scala's. De plus, depuis que vous venez de ML, vous vous retrouverez assez limité sur le côté de la programmation fonctionnelle des choses.
Le sweetspot de Groovy doit être utilisé comme langue de script. D'après ce que je me souviens, il vise à apporter une dactylographie à Java et quelques fonctionnalités fonctionnelles, etc.
Je suis en désaccord que Groovy a perdu de l'élan récemment. À titre de preuve, consultez la croissance des téléchargements de Grails au cours des deux dernières années. En outre, la société responsable de Groovy & Grails (G2ONE) a récemment été acquise par Springsource, de sorte que plusieurs millions de leurs dollars ont déclaré que Groovy est vivant et bien
Don, tu as raison. J'aurais dû nous empêcher de dire que Scala et Clojure semblent maintenant avoir plus d'élan.
C'est probablement vrai, mais j'attribuerais une grande partie de la couverture qu'ils ont obtenus à leur nouveauté, plutôt qu'ils ont un grand succès ou une grande base d'utilisateurs. Je pense qu'il y a beaucoup plus de développeurs utilisant Groovy régulièrement que Scala et Clojure combinés, mais j'ai exactement zéro des preuves pour soutenir cette déclaration :)
Bien que j'ai été accusé dans le passé de Dissing Groovy, je vais saisir cette occasion pour souligner que l'appel des API de Groovy de Java est un non-question, tandis que les soins doivent être pris lors de la conception de Code Scala pour permettre à l'appel homogène des API Scala Java. Notez que l'autant de la langue n'a aucun problème d'appeler des API de Java.
Un appel d'une manière d'une manière est une compatibilité transparente mais la compatibilité ascendante avec Java doit être approchée avec soin? C'est de la nourriture pour la pensée. Une autre raison pour laquelle je devrais donner à Groovy un aspect beaucoup plus approfondi, même s'il n'est pas fonctionnel au sens du FP.
La prise en charge de l'outil pour Scala et Clojure peut être immature, mais elle s'améliore régulièrement. P>
Depuis que vous aimez F #, Scala est probablement votre meilleur choix. Je dis Essayez-le et formez votre propre opinion - vous constaterez peut-être que les choses que les gens se croisent sont des choses qui ne comptent pas pour vous, ni des choses que vous pouvez travailler. P>
Très franchement, obtenez un autre emploi. p>
Si vous devez passer les trois prochaines années à vous sentir mal à l'aise sur ce que vous faites, vous devriez envisager de rechercher des alternatives plus attrayantes. p>
Même si vous parvenez à obtenir une langue que vous aimez, si vous faites partie d'une équipe (que je suppose que vous êtes), le reste de l'équipe pourrait ne pas aimer cette langue. Si le reste d'entre eux code en Java et vous êtes dans " remplir le langage de programmation vierge em>", les problèmes peuvent survenir. p>
Ce n'est pas si mal après tout. p>
Parlez avec votre patron, laissez-vous savoir comment vous sentez-vous. Commencez à chercher des alternatives et avoir un «congé» agréable et professionnel. p>
Il n'y a aucune raison pour que vous ne puissiez pas encore avoir de bonnes relations avec votre patron actuel. Si finalement, ils ont un nouveau projet pour .net, vous pouvez revenir. Parlez-en aussi avec eux. Laissez vos portes ouvertes. p>
Oscar, vous avez soulevé un bon point avec moi travaillant dans une langue, le reste dans un autre. Bien que j'ai parlé à mes patrons et qu'ils soient ok avec moi, passez cette voie aussi longtemps que ma productivité augmente. Je ne laisserai pas de travail juste parce que je ne travaille pas dans ma langue de choix.
Je pense que le choix de la langue est une raison parfaitement valide de quitter un emploi :) ou même une petite amie ou une femme!
Ce n'est pas vraiment un jeu de somme zéro, apprenez-les tous!
PS: Je vote pour Clojure B>, je le trouve le plus amusant! p>
À mon avis, Clojure et Scala n'ont pas de grand soutien de l'IDE, si c'est vraiment important pour vous. Cela dit, voici ce que je peux collectionner de ma lecture et mon expérience. P>
Les pros de Scala forts> p>
Les pros de Clojure forts> p>
sur la concurrence distribuée forte> p>
Si vos besoins en concurrence sont distribués, Clojure n'en a rien encore, à moins que vous ne l'exécutions au-dessus de la terre cuite ou quelque chose de similaire, auquel cas vous pourrez utiliser toutes ses caractéristiques de la concurrence. Si vous le faites, vous finirez par une meilleure expérience de simultanéité distribuée qu'avec les acteurs de Scala, imo. P>
Imo Scala tente de tout faire et réussit à faire la majeure partie. Clojure n'essaye pas la même chose, mais ce qu'elle se concentre sur suffit et réussit si bien que la plupart des gens connaissant vraiment le clojure ne voudraient pas revenir à autre chose. DIVULGATION STRUT>: Mes préférences personnelles vont bien sûr à Clojure. J'espère que j'ai pu être objectif dans ce que j'ai écrit. P>
Vous avez été très objectif et informatif. Je n'avais pas entendu parler de TerreCrotta. Une dernière chose à apporter à mon patron. Merci encore.
Je vous en prie. Cela dit, si vous envisagez d'utiliser une simultanéité distribuée avec le clojure, assurez-vous de rechercher / demander au groupe de Google Clojure à ce sujet; Ils ont parfois mentionné d'autres choix en terre cuite. Qui sait si l'un de ceux-ci serait un meilleur ajustement pour votre projet? Je suggère de rechercher sur le groupe de "TerreAcotta", vous trouverez toutes les discussions relatives à cette affaire, avec beaucoup de bonnes perspectives.
Vous devez vous considérer que vous pouvez vous considérer chanceux que vous puissiez utiliser la JVM, car le Java devient de plus en plus populaire pour des langages de programmation alternative que Java. P>
Outre Java, il y a Groovy , scala , Clojure (un dialecte LISP sur la JVM), Jruby (Ruby sur la JVM), Jython (Python sur la JVM), Jaskell (Haskell sur le JVM), fan (fonctionne sur le fichier JVM ainsi que le fichier CLR .NET) et beaucoup plus, et il y a Aussi un OCAML-Java , OCAML qui fonctionne sur la JVM. P>
Ainsi, il y a beaucoup de choix dans les langages de programmation sur la JVM, à partir de purement fonctionnel à de simples scripts et d'avance sur les langues OO. P>
Cela fait des années depuis la dernière fois que j'ai pris un coup d'œil au fan. Fait intéressant, il semble beaucoup plus intéressant que Groovy! "Productivité de Ruby, Performance de Java". Voir fandev.org
Lol, j'ai de la chance d'utiliser la JVM mais je peux toujours avoir espoir qu'un jour je me retrouverai avec une langue qui reflète tous mes amours. Je ne voulais pas rencontrer comme totalement opposé à la JVM. Je suis plus opposé à travailler avec Java et toutes ses verrues. Avant que je ne sois flambé ... Toutes les langues ont des verrues, ce n'est que ceux que vous êtes prêt à gérer.
C'est vrai, Java, la langue d'une langue sous le soleil avec des dizaines de milliers de classes dans ses API. :RÉ
Je vais aborder les points que vous avez soulevés à propos de Scala. P>
SUPPORT IDE FORT>: P>
Scala n'a pas le même niveau ou le même support d'IDE Java a - ou, à ce sujet, que f # devrait avoir avec VS10. p>
Cela dit, il a l'un des meilleurs (peut-être même le em> meilleur?) Les supports IDE sur JVM, en dehors de Java. À l'heure actuelle, NetBeans est assez bon et les gens ont toujours dit que l'idée est toujours meilleure (ouï-dire). Le plugin Eclipse est instable cependant. P>
Mais vous avez mentionné une plage de 3 ans et la prise en charge de l'IDE pour Scala devrait être grandement améliorée une fois que SCALA 2.8 est sorti, car il fournira un support de compilateur pour les IDes. Il n'y a pas de date de sortie définie, mais cela semble être dans les six prochains mois, peut-être trois. Et le plug-in Eclipse sera mis à jour avec cela. P> LI>
dans le cadre de test unitaire de flux strong>: p>
Oui, si vous vouliez dire qu'il est dynamique, évoluant et bien soutenu, au lieu de stagner et abandonné. Scalatest, Spécifications et Scalacheck sont des cadres de qualité supérieure, compatibles entre eux et compatibles avec d'autres cadres et bibliothèques Java, tels que Junit et JMock. P>
Les cadres de test, en fait, sont presque une affiche enfant de ce qui est possible avec Scala. P>
edit: strong> SCALA a un support de test d'unités de base dans sa bibliothèque standard (scala.testing.sunit). Cependant, étant donné que de nombreuses alternatives supérieures, activement soutenues et libres sont apparues, cela a été obsolète et ne fera probablement pas partie de la bibliothèque expédiée avec SCALA 2.8. p> li>
Performance Problèmes Strong>: P>
Je ne suis pas au courant de tout, mis à part le fait que vous puissiez écrire du code moche, comme avec une autre langue. Les personnes non utilisées à la programmation fonctionnelle font souvent des choses qui ne sont pas efficaces, telles que l'utilisation de la récursion de la queue ou des listes de concaténation, et le changement de paradigme que Scala permet d'amener cela à la lumière. P>
En tout cas, vous pouvez écrire du code Scala aussi vite que le code Java (même plus rapidement avec certaines fonctionnalités à venir). Et vous pouvez écrire du code Scala avec des fonctionnalités fonctionnelles presque aussi vite que le code Java. P> li>
ul>
Daniel, si je pouvais, je pourrais vous donner une bosse en réputation. Ce que vous dites est très vrai du soutien de l'IDE. Des tests unitaires, j'avais pensé que j'avais trouvé une désinformation à ce sujet. Il y avait des vues contradictoires de "Sunit est en train d'être obsolète" à "Junit ne fonctionne pas sur Scala". Merci d'avoir refusé cela.
Ah! Ça a du sens. Je compléterai la réponse, mais le court est que Scala (toujours) est livré avec un test d'unité dans sa bibliothèque standard, qui est Sunit. Tant mieux que rien, il a longtemps été dépassé par les alternatives tiers.
En termes de soutien de l'IDE et d'autres doutes que vous avez, Clojure ne fait pas mieux que Scala. Et pour une personne avec des antécédents ml / f # (ou généralement que, dans des langues de FP typées statiquement statiquement), vous trouverez certainement Scala beaucoup plus proche de ce que vous êtes habitué. P>
Mince. J'avais d'espoir que ça pourrait. Merci.
Je pense que vous avez une grande situation. Combien de personnes ont la permission de choisir la langue de mise en œuvre? Avec tout ce que vous avez disponible pour le JVM, votre environnement choisi n'est pas une grande partie de la restriction. P>
Tu as raison. Je suis très chanceux que j'ai reçu la permission d'explorer des langues. J'ai entendu des choses merveilleuses sur Ruby. Cela n'a-t-il pas été décrit comme "Perl sans bagage?" Cependant, cela réduit-il la douleur de la concurrence? Le client aimerait voir plus d'importance à l'évolutivité.
Si vous aimez ml, vous pouvez aimer cal qui est plus ou moins haskell 98 pour le jvm. p>
Il est de haute qualité et très stable, et a un bon soutien de l'IDE sur Eclipse, mais malheureusement n'est plus en développement actif. P>
Vous connaissez les alternatives, pourquoi demander ici? C'est surtout sur l'opinion personnelle d'ici.
à un nouvel emploi, vous travaillerez dans un environnement qui vous rend heureux et que votre entreprise actuelle peut engager une personne plus professionnelle.
À peu près toutes les langues qui existaient avant ce matin ne peuvent être compilées pour JVM. Faites votre choix.
Quoi de non professionnel de vouloir travailler avec des langues / technologies que vous aimez?
C'est une attaque légèrement personnelle. Cela dit que je n'ai pas vraiment l'idée du 1er paragraphe. Whitespace fr.wikipedia.org/wiki/whitespace_%28Programming_language%29 est un Grande langue pour écrire invisible entrer.
@Don - rien du tout. Whining parce que votre employeur actuel veut utiliser une langue que vous n'aimez pas, cependant ...
Et plus important encore, décider des langues de commutateur de remorquage simplement parce que vous êtes ennuyé de l'ancien. Ce qui signifie que votre client paiera pour vos erreurs de débutant.
Je ne suis pas "ennuyé" de Java. Je ne dis pas non plus "whining". Je suis juste en train de coller tout le code de la chaudière que je dois me développer en Java pour que rien ne soit fait. Il tue ma productivité. Dans OCAML, je peux me faire dans 10 lignes ce que cela me faudrait 50 à faire à Java. Pourquoi ne voulais-je pas passer à une langue plus productive?
Éventuellement utile. en.wikipedia.org/wiki/list_of_jvm_languages
En dehors de la curiosité, vous dites que vous avez peur du pauvre soutien de l'IDE, mais OCAML a-t-il réellement une IDE à parler? (Je n'ai aucune idée).
Une bonne IDE ou juste une IDE? OCAML a une pluggie pour Eclipse, Camélia, je crois qu'un dans Netbeans, puis il y a toujours des emacs. Je ne dis pas qu'ils sont bons. D'autre part, F # (qui est OCAML.NET avec un véritable support multi-threading) a VS2010 (et une pluggine VS2008.)
Wheaties, vous gémissez. Changer de langues parce que vous êtes ennuyé n'est pas une raison valable. Une raison valable de modifier des emplois - oui, pour modifier les langues sur un emploi en cours - non. Chaque fois que quelqu'un expérimente avec une nouvelle langue pour leur diamètre, ils créent un mal de tête pour tout le monde. Vous modifiez si la langue actuelle ne peut pas gérer les exigences, non pas parce que vous n'aimez pas l'utiliser.
À propos de Whining: Je vous demande que tous ceux qui disent que les bléts se plainent de le faire. C'est complètement non pertinent pour la question des waleats et non polie. De plus, il n'est certainement pas un bon moyen d'aider un nouveau membre StackoverFlow à se sentir accueilli.
Est-il non professionnel d'atteindre les outils qui fourniront l'application que le client souhaite plus rapidement et avec moins de bogues, tout en conservant la même performance? Est-ce non professionnel de préoccuper de sa production et de sa motivation et de rechercher des moyens de les améliorer? Est-ce peu professionnel d'indiquer un avis professionnel sur les outils de votre travail et de leur aptitude à la tâche que vous êtes mis? Les blétes ne sont pas derrière le dos de son responsable pour faire le travail (le Job B> fait!). Au lieu de cela, il a discuté de ses préférences et a reçu la liberté de la limite d'exercer son expertise.
Daniel (le vrai (TM) One) dit: le professionnalisme est souvent mal défini. Le vrai professionnalisme est tout au sujet de vous assurer que vous aimez ce que vous faites le plus, afin que vous puissiez le faire le mieux que vous puissiez.
Il est également peu professionnel d'exercer ouvertement des baleines. Donnez à vos insultes un niveau d'indirection. :-) Et vraiment, Java est Verbose, j'ai une certaine sympathie. C'est pourquoi Scala a été développé et par l'auteur du compilateur Java actuel de Sun ...
@Hlgem - Vous avez absolument raison. Changer de langues / plates-formes pour des raisons de "aimer" ou "aime" crée des maux de tête pour tout le monde, surtout lorsque la langue / la plate-forme que vous changez de poignées de poignées tout aussi bien (ou mieux comme le cas ici).