J'aime que l'écriture de Python, Ruby ou Javascript nécessite si peu de passe-partout. J'aime les constructions fonctionnelles simples. J'adore la syntaxe claire et simple.
Cependant, il y a trois choses sur lesquelles je suis vraiment mal quand je développe un gros logiciel dans un langage dynamique:
- Naviguer dans le code
- Identifier les interfaces des objets que j'utilise
- Refactoring efficace
J'ai essayé des éditeurs simples (c'est-à-dire Vim) ainsi que IDE (Eclipse + PyDev) mais dans les deux cas, je sens que je dois consacrer beaucoup plus de mémoire et / ou constamment "grep" et lire le code pour identifier les interfaces. Cela est particulièrement vrai lorsque vous travaillez avec une grande base de code avec plusieurs dépendances.
Quant au refactoring, par exemple le changement de nom de méthode, il dépend énormément de la qualité de mes tests unitaires. Et si j'essaie d'isoler mes tests unitaires en les «coupant» du reste de l'application, il n'y a aucune garantie que l'interface de mon stub reste à jour avec l'objet que je stubbe.
Je suis sûr qu'il existe des solutions à ces problèmes. Comment travaillez-vous efficacement en Python, Ruby ou Javascript?
la source
Réponses:
Obtenez un meilleur éditeur que VIM.
J'utilise Komodo Edit.
Bien. Penser, c'est bien. Je trouve que «l'apprentissage» mène finalement à la «mémoire».
C'est typique. Si vous ne vous en souvenez pas, alors ils sont trop complexes, n'est-ce pas? Il est temps de simplifier.
La simplicité est difficile à créer. Mais lorsque vous avez du mal à vous souvenir, c'est un symptôme de mauvaise conception.
J'utilise grep. Ça marche pour moi. Mon Komodo Edit a beaucoup de belles recherches. Notepad ++ aussi
Doc Strings et la
help()
fonction fonctionnent. Je les utilise. Du quotidien.Ce ne sont pas des nouvelles. Cela a toujours été vrai, même dans un langage statique.
Dans un langage statique, nous devenons souvent paresseux, en supposant que - tant qu'il est compilé - il est très probable qu'il fonctionne. C'est manifestement faux, mais nous devenons paresseux.
Ce ne sont pas des "problèmes" et ne nécessitent pas de "solutions de contournement".
"ne connaissant pas le type des objets"? Vraiment. Quand je conçois le client d'un objet, je sais quel type j'ai conçu.
Lorsque je définis un service, utilisé par plusieurs clients, le type "exact" n'est pas pertinent, lorsque j'ai défini l'interface requise de
quack()
etfeathers()
.Enfin, j'ai la lecture-exécution-impression-boucle et d'autres outils pour déterminer le type "exact" dans les rares cas où j'ai un problème subtil. C'est ce que j'utilise tous les jours.
Il ne semble pas trop difficile - du moins en Python - de dérouler le type d'un objet. Les langues dynamiques doivent avoir un REPL, ce qui permet de voir assez facilement ce qui se passe.
Cela n'a pas beaucoup de sens.
help()
travaux.Et mon IDE peut souvent localiser la définition. Pas toujours - certaines constructions dynamiques alambiquées peuvent facilement cacher la classe de base. Dans ce cas, je dois réellement penser à la classe de l'objet pour localiser la définition de la méthode. Bien sûr, j'écris le code, donc il y a peu (ou pas) de mystère.
la source
Une recherche rapide a révélé Rfactor pour Ruby ( interview ici ) et un réparateur de vélos pour Python. Je ne sais pas si les choses sont bonnes ... mais elles valent la peine d'être examinées.
la source
Il existe une société - JetBrains - auteurs de ReSharper, TeamCity et IDEA. Ils ont récemment commencé à étudier les langages dynamiques et ont déjà publié leurs outils pour Python, PHP et Ruby.
La qualité est super. Ce ne sont pas d'autres plugins pour votre IDE préféré mais des IDE complets et ils sont assez bons pour refactoring / navigation / débogage, etc. - ils sont comme IDEA lite.
la source