Question

Je suis un programmeur C ++ expérimenté avec des compétences en Python moyenne. Les raisons pour lesquelles j'étudiais Python en premier lieu sont les suivants:

  • pour obtenir un autre point de vue sur la programmation (statique vs dynamique, interprété vs compilé, etc.)
  • pour augmenter l'ampleur des projets que je peux travailler sur (Python me permet de faire le développement web, le développement pour les téléphones Symbian ou engrosser des scripts d'administration système rapide)
  • pour compléter mes compétences en C ++.

Je pense que Python est grand et je crois que je l'ai atteint les objectifs ci-dessus. Je vais continuer à l'utiliser pour les petits projets, des scripts et le développement web.

Je doute que je peux l'utiliser pour les moyennes et les grands projets bien. Alors que le typage dynamique est pratique, il permet une certaine classe de bugs que je trouve inquiétant. Les tests unitaires et peluchage peuvent atténuer ce problème, mais le typage statique élimine complètement.

Après avoir examiné certains langages de programmation, je pense que Scala ressemble à un bon candidat: J'aime l'inférence de type et il fonctionne sur la machine virtuelle Java de sorte qu'il devrait être disponible partout où la machine virtuelle Java est disponible. Je peux aussi en apprendre davantage sur la programmation fonctionnelle lors de son utilisation.

Mais ... J'ai aussi quelques doutes, et voici où j'espère que la communauté Stack Overflow peut aider:

  • La portabilité: Linux et Windows au moins je l'espère. Qu'en est-il des téléphones mobiles, est-il possible de le faire fonctionner il?
  • Compatibilité C ++: puis-je mélanger le code C ++ avec Scala? (JNI?)
  • paradigme de programmation: Je ne me sens pas à l'aise avec le passage à la programmation fonctionnelle (FP) à ce moment. Puis-je utiliser orienté objet et procédural avec une FP dans un premier temps, puis changer les proportions que j'apprends?
  • la maturité de la chaîne d'outils: quelle est votre expérience avec IDEs et débogueurs? J'utilise Eclipse en ce moment et il semble OK.
  • Vitesse d'apprentissage: compte tenu de mon expérience, comment voulez-vous vite penser que je peux atteindre un niveau réalisable avec Scala
  • Déploiement: comment exactement déployer-vous un programme Scala? Est-ce un pot, est-il un exécutable?

Enfin, que pensez-vous que sont quelques-uns des inconvénients Scalas?

Était-ce utile?

La solution

  • La portabilité: Linux et Windows au moins je l'espère. Qu'en est-il des téléphones mobiles, quelqu'un at-il réussi à obtenir à courir là-bas?

Oui. Il y a un certain mouvement à propos de Scala sur Android. Quant à J2ME, j'ai vu quelque chose à cet égard, mais pas beaucoup. Il y a un code concernant J2ME sur le référentiel de code source. Je ne sais pas comment il est viable, mais il me semble qu'il n'y a pas beaucoup de demande pour cela.

Je mentionne aussi qu'il ya / avait une piscine sur Scala-Lang sur les plates-formes cibles souhaitées, et J2ME a été l'un d'entre eux, très faible sur le totem.

  • Compatibilité C ++: puis-je mélanger le code C ++ avec Scala? (JNI?)

En plus vous pouvez mélanger C ++ avec Java, pour tout ce qui est intéressant. Si vous avez pas d'expérience avec cela, vous pouvez tout simplement lire les ressources Java, que tout en eux sera applicable avec Scala sans changement (côté de syntaxe Scala).

  • paradigme de programmation: Je ne me sens pas à l'aise avec le passage à FP à ce moment. Puis-je utiliser OO et procédural avec une FP au début, puis changer les proportions que j'apprends?

Certainement, oui. Scala sort de son chemin pour vous assurer de ne pas besoin de programmer dans un style fonctionnel. Ceci est la principale critique de la Scala de gens fonctionnels, comme une question de fait. Certains ne considèrent pas un langage fonctionnel à moins qu'il oblige le programmeur à écrire dans un style fonctionnel

Quoi qu'il en soit, vous pouvez aller à droite pour faire les choses à votre façon. Mon pari, cependant, est que vous prenez les habitudes fonctionnelles sans même se rendre compte qu'ils sont fonctionnels.

Peut-être que vous pouvez regarder la série dans mon Matrices propre blog sur la rédaction d'un classe Matrix. Même si elle ressemble à un code standard OO, il est, en fait, très fonctionnel.

  • la maturité de la chaîne d'outils: quelle est votre expérience avec IDEs et débogueurs? J'utilise Eclipse en ce moment et il semble ok.

IDEA (IntelliJ), NetBeans et Eclipse ont tous un bon soutien pour Scala. Il semble est le meilleur IDEA et NetBeans / Eclipse garder grenouille sautant les uns des autres, bien que NetBeans a certainement été plus stable que Eclipse de la fin. D'autre part, le support sur Eclipse prend une voie très prometteuse qui devrait produire des résultats dans les 6 prochains mois - il est juste que c'est une route de supplantation. : -)

Quelques signes intéressants d'outillage Scala pour ces enviroments est le fait que le plug-in Eclipse dans le développement utilise AOP pour fusionner de façon plus transparente avec l'ensemble IDE, que le plug-in NetBeans est complètement réécrite à Scala, et qu'il ya une Scala Power Pack sur IDEA qui soutient, entre autres, la traduction du code Java en code Scala.

Les gens ont des outils complets EMACS pour Scala ainsi, et beaucoup de petits éditeurs ont un soutien pour lui aussi. Je suis très à l'aise avec le soutien de jEdit pour les petits programmes et des scripts, par exemple.

Il y a aussi un bon support de Maven - en fait, la méthode standard pour installer Lift est d'installer Maven, puis construire un archétype de levage. Cela va tirer dans une version Scala appropriée. Il y a une cible de scala:cc qui fera recompilation déclenchée aussi bien.

En parlant de recompilation, ni Maven, et en particulier, ni Ant faire un bon travail à identifier ce qui doit être recompilé. De ce problème jailli SBT (simple outil de construction), écrit en Scala, ce qui permet de résoudre ce problème par l'utilisation du plug-in du compilateur Scala. SBT utilise la même mise en page de projet Maven, ainsi que les dépôts Maven / Ivy, mais les configurations de projet sont faites dans le code Scala au lieu de XML -. Avec prise en charge des fichiers de configuration Maven / Ivy et

  • Vitesse d'apprentissage: compte tenu de mon expérience, à quelle vitesse pensez-vous que je puisse atteindre unniveau réalisable avec Scala?

Très rapide. En tant que langage purement OO, Scala présente déjà quelques fonctionnalités intéressantes, comparables à des choses qui est présent dans C ++ mais pas Java, mais ils fonctionnent de façon différente. À cet égard, une fois que vous vous rendez compte que ces caractéristiques sont et les choses se rapportent à C ++, vous serez beaucoup en avance sur les programmeurs Java, comme vous le savez déjà ce qu'il faut faire avec eux.

  • Déploiement: comment exactement déployer-vous un programme Scala? Est-ce un pot, est-il un exécutable?

La même chose que Java. Vous pouvez déployer JARs, WARs, ou tout autre des cibles Java, parce que le compilateur scala générer des fichiers de classe. En fait, vous utilisez le pot de Java pour générer un fichier JAR de Scala à partir des fichiers de classe, et les cibles Maven pour la construction de soutien Lift fichiers WAR.

Il existe une alternative pour les fichiers de script, bien que. Vous pouvez appeler « scala » pour exécuter le code source Scala directement, semblable à un Perl de Shell script. Il peut également se faire sous Windows. Cependant, même avec l'utilisation d'un démon de compilation pour accélérer l'exécution, temps de démarrage sont assez lent que l'utilisation efficace de la Scala dans un environnement de script lourd besoin de quelque chose comme Nailgun .

En ce qui concerne les inconvénients de Scala, un coup d'oeil à ma réponse (et celle des autres) dans cette Stack Overflow question.

Autres conseils

Scala est un langage en pleine évolution bien la peine d'investir, surtout si vous venez de monde Java. Scala est largement couvert Artima . Voir cette du projet de loi Venners et lire aussi sur Twitter et Scal a

.

En ce qui concerne vos questions:

  • Java peut fonctionner partout où il y a une machine virtuelle Java. Pas de chance avec les téléphones mobiles cependant. Vous avez besoin d'une pleine JRE, pas le sous-ensemble qui y est disponible.
  • Ceci est possible avec JNI. Si quelque chose est possible avec Java, il est alors possible avec Scala. Scala peut appeler des classes Java.
  • Programmation fonctionnelle est un point fort de Scala - vous avez besoin d'apprendre. Cependant, vous pouvez également commencer à l'utiliser sans en tirant pleinement parti de celui-ci et de travailler votre chemin avec elle.
  • Il y a un plug-in d'Eclipse. Il est pas le meilleur, mais il fera le travail. Plus de détails .
  • Si vous êtes expérimenté, je dirais très vite. Je vous recommande de trouver un livre pour commencer.
  • Voir cette entrée faq pour le déploiement.
  

paradigme de programmation: Je ne me sens pas à l'aise avec le passage à FP à ce moment. Puis-je utiliser OO et procédural avec une FP au début, puis changer les proportions que j'apprends?

Scala a plein appui à la programmation impérative, l'écriture de programmes sans éléments de PF dans celui-ci est un jeu d'enfant (cependant, FP est utile et la valeur d'apprentissage de toute façon).

  

Vitesse d'apprentissage: compte tenu de mon expérience, comment pensez-vous vite que je peux atteindre un niveau réalisable avec Scala

?

rapidement. Il y a un certain nombre de caractéristiques intéressantes Scala qui peuvent être pas familier aux personnes provenant d'un C ++, environnement Java, comme par exemple certaines des caractéristiques du système de frappe. Certains soutiennent que le fait qu'il ya beaucoup à apprendre à Scala avant que vous savez tout cela est un problème avec la langue; Je ne suis pas d'accord. La présence de ces caractéristiques est un avantage de la langue. Plus on est de fous met en vedette les. Après tout, vous ne devez pas les utiliser à la fois, comme vous ne devez pas acheter tout ce qui est vendu dans le magasin.

  

Vitesse d'apprentissage: compte tenu de mon expérience, comment pensez-vous vite que je peux atteindre un niveau réalisable avec Scala

?

Je viens aussi d'un arrière-plan C ++, une chose que je remarque est que, puisque vous écrirez beaucoup moins de code par rapport à C ++ pour une tâche comparable, votre apprentissage sera accéléré que vous aurez plus fait dans la même période . Ce fut le même phénomène que j'ai vécu avec Ruby.

En fait - si je vous - j'étudier les paradigmes de programmation au lieu des langues. Bien sûr, vous devez étudier une langue par exemple pour étudier le paradigme. Connaître les inconvénients et les avantages de différents paradigmes vous permet de visualiser vos problèmes d'un côté différent et fait de vous un meilleur programmeur (même dans les langues que vous connaissez déjà).

Reprenant un langage d'un paradigme déjà connu est une tâche facile relativly si nécessaire. Puisque Scala est FP (au moins vous l'avez mentionné) et C ++ / Python est POO, il est une bonne langue pour vous, je dirais.

Vous devez vous inscrire à ce cours par le créateur de Scala lui-même.

https://www.coursera.org/course/progfun

James Strachan (Java productif de développeurs open source, pour ceux pas dans la boucle) a une discussion intéressante de Scala ici , et pourquoi il estime qu'il est une progression de Java (le langauge, pas la plate-forme).

Scala dirait qu'il gagne beaucoup de traction. Je ne pense pas que ce soit un éclair dans la poêle, et est actuellement sur ma liste des langues à apprendre (en partie pour l'aspect fonctionnel)

Voici une preuve anecdotique sur apprenabilité de Scala.

Dans notre société, nous avons eu plusieurs stagiaires de U.Waterloo. On leur a dit d'écrire à Scala; jamais vu auparavant.

Ils ont ramassé Scala et un ascenseur remarquablement rapide; maintenant, ils produisent le code Scala; il peut être pas parfait, mais personne n'est parfait.

Ainsi, le fait qu'un gestionnaire ne sait pas Scala peut être pas le meilleur argument lorsque vous décidez sur l'adoption.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top