Être un programmeur de scala compétent nécessite-t-il d’être un programmeur Java compétent?

Je suis un grand fan de Scala esthétiquement, et de beaucoup du travail conceptuel mis dans des choses comme son système de frappe et ses bibliothèques.

Cependant, comme j’ai commencé à bricoler Scala (et que certains de mes collègues l’ont bricolé), je me retrouve à chercher de plus en plus de connaissances sur Java (surtout en ce qui concerne les bibliothèques).

Cela me pose quelques problèmes:

  • N’ayant jamais été un programmeur Java, je ne suis pas familier avec la bibliothèque standard Java, ni avec les bibliothèques populaires supplémentaires (comme Apache Commons).
  • Mon google-fu dans la sphère Java est faible. Il est difficile de savoir quoi rechercher – un problème exacerbé par le grand nombre de didacticiels Java non pertinents ou rudimentaires pour la programmation des débutants.

À ce stade, je ne sais pas si je devrais mordre la balle et essayer de trouver la tournée la plus rapide et la plus complète à travers Java pour me familiariser avec 20 ans de développement Java, ou s’il est raisonnable de continuer à corriger la connaissance que je me promène autour de scala.

Toute sagesse que pourraient nous offrir les scala parmi nous pourrait être grandement appréciée.

PS Je n’ai aucun doute sur ma capacité à me familiariser avec la syntaxe Scala, et je suis parfaitement à l’aise avec la functional programming et les paradigmes de la communauté Scala. Mais la compétence d’un programmeur ne repose pas uniquement sur sa capacité à s’enseigner, mais aussi sur sa capacité à apprendre et à adopter des outils et des compétences provenant d’autres personnes.

Vous devriez prendre une approche lazy pour apprendre Java. Apprenez-le quand vous en avez besoin.

À mon avis, une grande partie de l’ancienne connaissance de Java est dépassée, la plupart des nouveaux tutoriels sont redondants. Vous ne voulez certainement pas vous ennuyer avec les Collections obsolètes de Java, par exemple. De nombreux frameworks basés sur Java peuvent être ignorés en toute sécurité. Et la stack JavaEE peut être contournée en toute sécurité jusqu’à ce que vous deviez en utiliser une partie.

De nombreux schémas courants en Java sont beaucoup plus simples dans Scala, le premier étant surchargé par un code standard. La logique de base doit toujours être mise en œuvre à Scala. Je pense que vous pouvez faire la plupart de votre travail directement dans Scala et que vous n’avez besoin que de plonger dans Java lorsque vous construisez des choses telles que Swing ou l’intégration avec Spring, etc.

En ce qui concerne le choix et l’utilisation des bibliothèques Java, mes recommandations personnelles sont les suivantes:

  1. Si Spring peut le faire, utilisez Spring
  2. Si le spring est trop lourd, utilisez ce que Spring utilise.
  3. Si Spring ne peut pas le faire, vérifiez les projets github
  4. S’il n’y a rien sur github, vérifiez les projets Apache
  5. S’il n’y a rien d’Apache, vérifiez la sourceforge (t).
  6. Enfin, Google au hasard ou construisez-le vous-même.

C’est un peu risible, mais c’est l’impression que j’ai de la maturité et de la stabilité des bibliothèques tierces après avoir fait Java au cours des 12 dernières années.

Si vous voulez apprendre l’espagnol, commencez par apprendre l’espagnol et non le latin. Même chose pour les langages de programmation. Il y a deux choses de Java à savoir:

La première chose est des API. Mais vous n’avez besoin que d’un aperçu général de ce qui existe. Même les programmeurs Java de longue date ne connaissent pas tous les détails. Et trouver la bonne API ou lib pour un problème est généralement facile, car Java est si commun, et même avec Google Fu faible, vous ne devriez avoir aucun problème.

La deuxième chose que vous devez savoir, ce sont les principes de base et les limites de Java et de la JVM (y compris la manière de construire et d’exécuter), qui vous aident à comprendre certains problèmes et décisions de conception de Scala. Un exemple typique serait “effacement de type”: si vous ne comprenez pas cette limitation des génériques de Java, vous rencontrerez des problèmes lors de l’utilisation de génériques dans Scala.

Comme vous pouvez le voir, les choses que vous devez vraiment savoir sont limitées. Tout le rest peut être ramassé sur le chemin.

Cela dépend entièrement de votre définition de “programmeur Java compétent”.

Une bonne compréhension du modèle de mémoire Java et des stratégies de récupération de place aidera. Tout comme l’expérience avec un large éventail de bibliothèques en 3ème partie.

D’un autre côté … si vous êtes profondément endocsortingné dans l’dependency injection getter / setter utilisée par des bibliothèques comme Spring, alors vous devrez désapprendre beaucoup de mauvaises habitudes avant de pouvoir gérer correctement l’immuabilité – dans ce cas, avant L’exposition Java va probablement vous empêcher d’apprendre Scala.

Il y a beaucoup de gens qui viennent à la scala et qui viennent de Ruby / Python, Lisp / Scheme, C #, qui ont besoin de:

primitives

Options de démarrage de la JVM, comment fonctionne le hotspot, 32 vs 64 bits, utilisez openJDK?

benchmarks, profiling, comment lire les stacktraces;

des milliards de tests pour chaque besoin imaginable.

java.util.concurrent

Swing API appels; Chemin de classe; Maven, fourmi Hudson, interfaces

espaces de noms / packages / disposition des répertoires, et toutes les autres choses automatisées par:

intelliJ, netBean ou eclipse


http://news.ycombinator.com/item?id=1508609

http://www.mired.org/home/mwm/papers/simple-clojure.html

+ UseConcMarkSweepGC -XX: + CMSIncrementalMode -XX:, EscapeAnalysis etc. http://groups.google.com/group/clojure/browse_frm/thread/c8f69037b26e2856#

Oops compressés, http://blog.juma.me.uk/2009/10/26/new-jvm-options-and-scala-iteration-performance/

http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html

http://groups.google.com/group/jvm-languages/topics

Java pour les utilisateurs de Clojure

Learning Clojure – Que dois-je savoir sur Java et plus

http://copperthoughts.com/p/clojurists-guide-to-java/