Que pensent les développeurs Java de Scala? [fermé]

19

J'ai remarqué que le support IDE est loin d'être aussi bon, mais le langage lui-même prend en charge les idiomes de programmation fonctionnelle beaucoup plus proprement.

Richard Warburton
la source
3
Le python est ma religion, donc je me soucie seulement de ce que Guido pense de Scala. neopythonic.blogspot.com/2008/11/scala.html
Job
7
Scala est une langue si géniale qu'elle attire non seulement tous ces grands esprits de la communauté Scala, mais malheureusement aussi beaucoup de haineux envieux qui essaient de trouver fondamentalement n'importe quoi pour attaquer la langue et les gens qui l'utilisent.
soc
@soc: Juste pour être clair: je ne déteste pas Scala, et les gens qui l'utilisent ne se soucient probablement pas (ne devraient pas!) de ce que j'en pense. Je pense que c'est trop complexe. C'est tout. La complexité peut convenir à ceux qui ont un gros cerveau. Je n'ai pas :-)
Joonas Pulakka
3
Désolé, je suis simplement ennuyé quand les gens continuent de répéter des mythes sans sauvegarder leurs affirmations.
soc
2
@soc: Eh bien, toute cette question est entièrement subjective, donc toute réponse est bonne, que ce soit un mythe ou non.
Joonas Pulakka

Réponses:

18

Je programme Scala depuis plus d'un an maintenant, je vais donc essayer de me reculer d'un an pour répondre à cette question.

  • Le code Scala est plus concis que le code Java (pas de setter ou getter, beaucoup d'informations de type peuvent être déduites)
  • La prise en charge intégrée du littéral XML est très attrayante.
  • La compatibilité et l'interopérabilité des bibliothèques Java sont excellentes
  • Le support de certains idiomes fonctionnels est rafraîchissant (pour la compréhension, la fermeture, les fonctions lambda, cartographier, plier, réduire)
  • Il ne semble pas y avoir de fonctionnalité intéressante que le créateur du langage ne voulait pas inclure

Les points ci-dessus étaient plus ou moins ce que je pensais de Scala avant de commencer à l'apprendre.

En un an, voici ce que j'ai découvert:

  • L'achat du livre d'escalier a été un excellent investissement et m'a sauvé des heures d'apprentissage par moi-même
  • La syntaxe a quelques bizarreries et il y avait parfois où j'étais vraiment perplexe pourquoi quelque chose n'était pas valide. Le compromis est une fois que vous êtes familier, le code a moins d'encombrement et est plus facile à lire. Notez que ce n'est pas vraiment un problème si vous lisez plutôt que d'écrire du code.
  • La bibliothèque de collection en 2.8 est un plaisir à utiliser. Il est difficile de revenir à Java.
  • Le littéral XML est bien, mais au-delà de certaines choses de base, j'ai dû aller à l'écosystème de la bibliothèque Java. C'est pratique cependant.
  • L'utilisation des bibliothèques Java de Scala est super facile et pratique. L'utilisation des classes Scala de Java est un peu plus délicate, mais cela fonctionne.
  • Je suis passé à l'édition communautaire IntelliJ IDEA et bien qu'il ne soit pas parfait, il est plus que suffisant.
  • Le créateur du langage a vraiment pensé à l'ensemble des fonctionnalités et tout fonctionne très bien ensemble. Le support orienté objet est meilleur qu'en Java (avec les traits) et vous pouvez faire de la programmation fonctionnelle.
  • C'est un langage que certains développeurs Java détestent apparemment avec passion. Pour moi, cela a ramené le plaisir de la programmation.
huynhjl
la source
21

Eh bien, je pense que Scala est trop complexe. Cela ressemble au C ++ en ce qu'il a une myriade de façons différentes de faire les choses. Certains appellent cela «richesse», «expressivité» ou «puissance», mais votre kilométrage peut varier. Dans de nombreux projets du monde réel, vous devrez limiter artificiellement les fonctionnalités du langage que vous allez utiliser et ce qui ne l'est pas, afin que tous les développeurs impliqués puissent parler le même sous-ensemble du langage.

Pour la programmation fonctionnelle, je préfère Clojure , qui est beaucoup plus simple que Scala.

Que la guerre sainte commence ;-)

Joonas Pulakka
la source
2
Si seulement Rich Hickey se souciait autant de .Net que de JVM ...
Job
Il serait utile que vous expliquiez un peu plus ce que vous ressentez comme trop complexe.
Richard Warburton
4
@ Richard Warburton: Les problèmes de complexité de Scala (ou, comme le dit Martin Odersky, "la force et un problème de Scala: son extensibilité") ont été largement discutés dans de nombreux forums. Une telle discussion est ici . Je ne dis pas que complexe == mauvais en soi . Le problème est que , bien que les plus brillants 1% des programmeurs peut être en mesure de faire des miracles avec Scala, la grande majorité est tout simplement pas va « obtenir », et qui est un problème pour l' utilisation du monde réel. C'est comme une voiture de Formule 1: la grande majorité des gens ne pourront tout simplement pas conduire une telle bête.
Joonas Pulakka
2
+1 Pour avoir mentionné Clojure comme alternative valable (en ce qui concerne la programmation fonctionnelle).
Oliver Weiler
Clojure est génial, mais est-il aussi performant que Scala? Est-il aussi facile de refactoriser, sans tout ce typage statique? (Refactoring Python est assez difficile, par exemple - j'ai écrit des refactorings pour cela.)
9000
13

Il y a environ un an, comme je devenais de plus en plus frustré par l'avenir des produits de ma startup si je continuais à utiliser Java, j'ai décidé d'essayer Scala. Je programmais déjà en JavaScript et Python à l'époque, Ruby était aussi une bonne alternative, mais je cherchais un langage typé statiquement, de préférence un qui pourrait s'exécuter sur la JVM.

J'ai vraiment essayé d'aimer Scala, je l'ai vraiment fait, mais j'ai trouvé que le code était vraiment moche et difficile à comprendre. Je me demandais dramatiquement que si Scala était notre meilleure réponse à Java, alors j'étais sûrement foutu et condamné à continuer à travailler avec un langage que je n'aimais pas après tout ...

Heureusement, peu de temps après, j'ai découvert Fantom . Oh mec, je l'ai adoré! Pour moi, c'était comme la splendeur de l'américain face à la bureaucratie allemande! Cela correspondait aux exigences que je recherchais à Scala, mais de manière beaucoup plus élégante . Il avait l' intégration de Vim , Eclipse et Netbeans , un cadre Web agréable , des produits matures fonctionnant avec lui, une petite mais incroyablement utile communauté ... Typage dynamique et statique! Je me suis réjoui!

(Je pourrais continuer mais ce post est censé être sur Scala, pas sur Fantom, donc je m'arrête ici. Ma préférence est claire , néanmoins il y a ce post comparant les deux. Je n'ai jamais pu comprendre pourquoi Fantom reçoit si peu d'attention par rapport à Scala. Mais apparemment, je ne suis pas le seul, si vous écoutez ce podcast [ mp3 ] jusqu'à la fin.)

ivo
la source
9

Lorsque j'ai commencé à essayer Scala il y a 2 ans, cela me semblait étrange et intimidant. À un moment donné, j'ai découvert que le langage de base est en fait beaucoup plus simple que Java, mais sa syntaxe et sa sémantique sont si flexibles que vous pouvez créer de nouvelles constructions de langage comme lui, même sans fonction de macro. Depuis, je suis complètement passé à Scala pour tous mes projets Java, car cela me permet d'écrire sans trop de code standard.

J'aime Clojure, mais il y a des situations où la plate-forme a besoin de vous pour compiler en bytecode statique (Android, applets, ...) et pendant que vous pouvez le faire, dans Scala, c'est juste là.

Alors que Scala vous permet de résoudre de nombreux problèmes de manière fonctionnelle, je trouve souvent des problèmes où l'utilisation des cours semble plus naturelle. Cela rend les choses un peu plus complexes, mais loin des complexités et des douleurs du C ++.

Le plus gros point à retenir pour moi quand j'ai vraiment commencé à apprendre la langue était que je pouvais programmer juste en Java, juste sans le bruit (un peu comme lorsque vous démarrez Groovy), mais finalement vous voulez essayer de plonger plus profondément dans la puissance de la langue - elle grandit avec vous.

À propos de la question IDE: Après avoir utilisé Emacs pour tout, tous mes problèmes IDE ont disparu :-)

boxofrats
la source
9

J'aime Scala pour de nombreuses raisons, mais il y en a une qui est souvent négligée: sa simplicité.

Scala n'est peut-être pas aussi simple que, disons, Oberon, mais il est beaucoup plus simple que certaines autres langues. La spécification du langage Scala fait ~ 160 pages, la spécification du langage Java est ~ 600 (juste le langage, pas la JVM ou les bibliothèques!), La spécification du langage ECMA-334 C # (dont AFAIK correspond à un sous-ensemble de Visual C # 2.0) est ~ 440 pages (c'est sans des trucs comme les compréhensions de requête LINQ, les expressions lambda, les méthodes d'extension, la co- et la contravariance génériques dynamic, les arguments optionnels avec des valeurs par défaut, les arguments de mots clés, var). Même la version actuelle d'ECMAScript 5.1 est plus volumineuse avec ~ 210 pages. Et bien sûr, mon propre langage "par défaut", Ruby, dont le brouillon ISO actuel pèse environ 310 pages, qui ne spécifie qu'un sous-ensemble presque inhabituellement minuscule de l'intersection de Ruby 1.8.6, 1.9.1 et 1.9.2.

Jörg W Mittag
la source
6
Le nombre de pages dans la spécification de langue est une mesure intéressante de sa complexité. C'est incroyable de voir comment Scala divise les opinions à ce sujet. Personne ne dirait que Python est complexe, ou C ++ est simple, mais Scala semble être à la fois :-) par exemple scala-lang.org/node/7431
Joonas Pulakka
Vous pouvez créer des choses complexes avec le langage, et certaines ressembleront à du langage - des méthodes avec des noms non alnum, qui ressemblent à une surcharge d'opérateur, ce qui n'est pas le cas, par exemple.
utilisateur inconnu
2
Le nombre de pages dans la spécification de langue est une TERRIBLE façon de comparer la complexité de deux langues. Juste pour donner deux exemples: la spécification Java est écrite de manière quasi didactique tandis que la spécification Scala est écrite de manière très laconique. Ou un autre exemple, C # 2.0 était en fait à peu près aussi complexe que Java aujourd'hui, ou peut-être un peu plus complexe étant donné la machinerie, les délégués et les propriétés «dangereux». Mais comme vous le constatez, la spécification C # 2.0 est plus petite que le JLS.
James Iry
1
Maintenant, Martin Odersky a comparé la taille des grammaires formelles des langues. C'est une mesure raisonnable d'un aspect de la complexité. Mais ce n'est raisonnable que parce que les grammaires ne sont pas aussi flexibles que l'anglais. Même alors, vous devez être prudent. Tout comme avec les programmes ordinaires, vous pouvez facilement étirer ou réduire les grammaires avec différents choix sur la façon de les disposer, le nombre de productions distinctes à inclure, les classes de caractères de base à assumer, etc.
James Iry
3
attends quoi ? Pourquoi voudriez-vous essayer de mesurer la complexité avec la taille de la spécification? C'est une terrible idée.
smartnut007
9

Voici ce qui craint chez Scala:

  • Le pointeur nul était une assez mauvaise idée pour commencer. Hoare l'a appelé son "erreur d'un milliard de dollars", mais Scala est encore pire. Il contient des objets nommés null, Null, None et Nil. null est pour l'interopérabilité avec Java. Null est la spécification DOM du W3C sous forme de pointeur nul, None est ce que null aurait dû être remplacé et Nil est un élément vide.

  • Lorsque les constructions de langage s'avèrent être hacky, c'est généralement le programmeur qui est à blâmer et non la langue. Dans Scala, cependant, le langage principal contient déjà des classes de bibliothèque dont le seul comportement documenté est "Ceci est un hack". Tu ne le crois pas? Recherchez dans scaladoc scala.xml.Group.

  • Enfin et surtout, Scala est mal documentée. Presque aucune des classes scala de la documentation officielle ne contient d'exemple de code. Scala est beaucoup plus difficile à apprendre que Java et nécessite des connaissances approfondies en informatique.

Pour éviter d'être confondu avec un Scala-hater, voici ce que j'aime à ce sujet:

  • J'ai moins d'exceptions. Je n'ai jamais eu d'exception ClassCastException et très peu d'exceptions NullPointer lors de l'interaction avec Java.
  • Le code est beaucoup plus court et plus concis que Java
  • C'est un défi intellectuel. Java ressemble à un langage de bébé lorsqu'on le compare.

la source
10
nullest le pointeur nul de Java, Nullest le "type" de celui-ci. Noneest un "état" possible d' Option[T]une collection avec un ou zéro élément. Nilest une liste vide. Bien que vous vouliez rendre cela effrayant, ce n'est pas le cas. Ces types ne sont pas remplaçables ou interchangeables les uns avec les autres et se comportent exactement comme ils devraient le faire.
soc
9

Scala est complexe. Pas question! Sa syntaxe est extrêmement flexible et peut être personnalisée de nombreuses manières (surtout les opérateurs / notation infixe) - et le système de type a plus de fonctionnalités différentes que tout autre langage que je connais.

Donc, les choses ne sont pas aussi droites que par exemple dans Haskell: Typeclasses pour les couvrir toutes.

Alors que Scala essaie de rassembler la programmation fonctionnelle, l'OO, la programmation procédurale et les bibliothèques java ainsi que ses propres idées, nous nous retrouvons finalement avec beaucoup de concepts qui semblent en quelque sorte aller dans le même sens:

  • Valeurs implicites
  • Fonctions implicites
  • Existentials
  • Caractères génériques
  • Traits
  • Interfaces
  • Classes abstraites
  • Classes de cas
  • Types structurels
  • Contraintes génériques
  • Afficher les limites
  • Types anonymes

Choisir parmi eux semble difficile au début et on peut facilement se demander si l'on a trouvé la bonne solution à un problème. Il est même facilement possible de produire des trucs hacky en abusant de l' implicitart.

Mais la chose intéressante est: Scala fonctionne. Il est parfois difficile de comprendre pourquoi (en particulier pour déterminer par quelles conversions implicites + héritage + ... certains objets ont des fonctionnalités X), mais vous n'avez pas à vous en préoccuper la plupart du temps.

Écrivez Scala aussi simple que possible et cela fonctionnera. Ne vous laissez pas dérouter par tout ce qui est possible et utilisez simplement ce dont vous avez besoin. Et si vous avez besoin de quelque chose, vous pouvez être sûr que Scala l'a en quelque sorte;)

Et mieux vous obtenez, plus vous pourrez personnaliser Scala avec des opérateurs, des implicits, des monades, une syntaxe funky ... et enfin obtenir quelque chose de proche d'une DSL qui résoudra parfaitement votre problème.

Après tout, vous avez toujours la possibilité d'utiliser Scala comme un bien meilleur Java avec une syntaxe plus propre et plus facile, une inférence de type et certaines fonctionnalités.

Dario
la source
1
"surtout les opérateurs / notation infixe" - juste que scala manque d'opérateurs. :) C'est juste des méthodes.
utilisateur inconnu
6

C'est un excellent langage qui est plus simple que Java à bien des égards.

La plupart des gens ne l'aimeront pas, programmeur Java ou non, pour les mêmes raisons que la plupart des gens, programmeurs ou non, n'aiment pas apprendre de nouveaux langages de programmation. Je soupçonne que la plupart des gens qui ont appris un langage de programmation n’ont même pas aimé l’apprendre.

Si vous craignez qu'un langage soit aussi compliqué que C ++, j'éviterais Clojure comme la peste. Pleurer que Scala est plus compliqué que Clojure est devenu l'argument de secours pour les gens qui sont complètement ignorants concernant une ou les deux langues.

Clojure a des macros, ce qui signifie que vous pouvez modifier la syntaxe du langage autant que vous le souhaitez, vous offrant non seulement "une myriade de façons différentes de faire les choses", mais un nombre presque infini de façons de faire les choses. Et aucune de cette nouvelle syntaxe que les programmeurs créent avec les macros ne sera documentée nulle part dans la spécification du langage.

"Mais nous pouvons éviter d'utiliser des macros ou réglementer celles qui sont autorisées dans notre code", dites-vous. Félicitations, vous devez maintenant "limiter artificiellement les fonctionnalités linguistiques que vous allez utiliser ou non", ce qui est exactement ce que les idiots babillards qui utilisent Clojure de Scala ont utilisé comme raison pour éviter Scala pour commencer.

Josh
la source
6
Merci pour votre contribution Scala vs Clojure, mais est-ce vraiment ce que je demande à l'OP?
Martin Wickman
Point intéressant concernant les macros. Un peu inquiétant aussi. Des macros ou similaires sont-elles disponibles dans Scala, ou est-ce que tout ce qui est "artificiellement limité" est une distraction?
Armand
1
Cela semble être un commentaire à ma réponse plutôt qu'une réponse à la question d'origine. Je suis d'accord, les macros vous donnent une puissance infinie, donc lorsqu'elles sont mal utilisées, elles sont nulles. Donc, vous devez les utiliser correctement (uniquement en cas de besoin). Cela ne change pas le fait que Clojure la langue est l'une des plus simples qui soit. Scala ne l'est certainement pas.
Joonas Pulakka
> Cela ne change pas le fait que Clojure la langue est l'une des plus simples qui soient. <C'est aussi complètement faux, sauf si vous utilisez une métrique comme "nombre de constructions de langage". Si vous utilisez quelque chose d'utile, comme la facilité de lecture et d'écriture de programmes dans la langue, alors Clojure n'est pas l'un des plus simples.
Josh
Alors, continuez et donnez-nous une bonne mesure de la complexité du langage. "Est-il facile de lire et d'écrire des programmes dans la langue" est totalement subjectif , donc cela n'aide pas vraiment ici. Certes, trouver une métrique utile et objective peut être pratiquement impossible. (Par exemple, Jörg W Mittag ci-dessous utilise le nombre de pages dans la spécification de langue comme mesure de complexité. Bien qu'objectif, je ne suis pas sûr que ce soit très utile.)
Joonas Pulakka
4

J'aime vraiment les types plus granulaires de la bibliothèque Scala. Il semble que la nouvelle bibliothèque de collections ait été bien pensée. J'aime aussi la façon dont il réduit la quantité de code requise pour les classes simples et les concepts fonctionnels qu'il ajoute. Son inférence de type est également très utile. Cela ressemble à Java sans les roues d'entraînement. Après avoir utilisé C # pendant un certain temps, Scala se sent réellement comme un concurrent, Java étant toujours utile mais laissé pour compte.

Matt H
la source
2

En tant que programmeur Java, j'ai d'abord trouvé Scala intéressant. Cependant, après l'avoir essayé pendant un certain temps (et avoir rencontré presque tous les points positifs / négatifs déjà énumérés par d'autres), je me sentais très "meh" à son égard. Les améliorations de la langue sont compensées par la moindre disponibilité des ensembles d'outils. Je ne pouvais tout simplement pas trouver de raison déterminante de basculer. C'est bien, mais ce n'est pas "assez mieux" pour justifier un changement. N'a pas non plus ce facteur d'excitation subjective (comme Clojure semble le faire).

Brian Knoblauch
la source