Eu amo que escrever Python, Ruby ou Javascript requer tão pouco clichê. Eu amo construções funcionais simples. Eu amo a sintaxe limpa e simples.
No entanto, há três coisas nas quais sou realmente ruim ao desenvolver um software grande em uma linguagem dinâmica:
- Navegando no Código
- Identificando as interfaces dos objetos que estou usando
- Refatorando eficientemente
Eu tenho tentado editores simples (por exemplo, Vim) e IDE (Eclipse + PyDev), mas em ambos os casos sinto que tenho que comprometer muito mais com a memória e / ou constantemente "grep" e ler o código para identificar as interfaces. Isso é especialmente verdade quando se trabalha com uma grande base de código com várias dependências.
Quanto à refatoração, por exemplo, alterando os nomes dos métodos, ela se torna extremamente dependente da qualidade dos meus testes de unidade. E se eu tentar isolar meus testes de unidade "cortando-os" o restante do aplicativo, não há garantia de que a interface do meu stub permaneça atualizada com o objeto que estou stub.
Tenho certeza de que existem soluções alternativas para esses problemas. Como você trabalha eficientemente em Python, Ruby ou Javascript?
fonte
Respostas:
Obtenha um editor melhor que o VIM.
Eu uso o Komodo Edit.
Boa. Pensar é bom. Eu acho que "aprender" leva eventualmente à "memória".
Isso é típico. Se você não consegue se lembrar deles, eles são muito complexos, não são? Hora de simplificar.
Simples é difícil de criar. Mas quando você tem problemas para se lembrar, é um sintoma de mau design.
Eu uso grep. Funciona para mim. Meu Komodo Edit tem muitas pesquisas legais. O mesmo acontece com o Notepad ++
Doc Strings e a
help()
função funcionam. Eu os uso. Diariamente.Isso não é novidade. Isso sempre foi verdade, mesmo em uma linguagem estática.
Em uma linguagem estática, geralmente ficamos preguiçosos, assumindo que - desde que seja compilado - é realmente provável que funcione. Isso é manifestamente falso, mas ficamos preguiçosos.
Estes não são "problemas" e não requerem "soluções alternativas".
"sem saber o tipo dos objetos"? Realmente. Ao projetar o cliente de um objeto, sei qual o tipo que projetei.
Quando defino um serviço, usado por vários clientes, o tipo "exato" não é relevante, quando defini a interface necessária de
quack()
efeathers()
.Por fim, tenho o Read-Execute-Print-Loop e outras ferramentas para determinar o tipo "exato" nos casos raros em que tenho um problema sutil. É o que eu realmente uso todos os dias.
Não parece muito difícil - pelo menos em Python - descontrair o tipo de um objeto. Os idiomas dinâmicos devem ter um REPL, facilitando a visualização do que está acontecendo.
Isso não faz muito sentido.
help()
trabalho.E meu IDE geralmente pode localizar a definição. Nem sempre - algumas construções dinâmicas complicadas podem ocultar facilmente a classe base. Nesse caso, eu tenho que pensar na classe do objeto para localizar a definição do método. Claro, estou escrevendo o código, então há pouco (ou nenhum) mistério lá.
fonte
Uma rápida pesquisa apareceu Rfactor para Ruby ( entrevista aqui ) e reparador de bicicletas para Python. Não tenho certeza de quão bons são ... mas vale a pena olhar.
fonte
Existe uma empresa - JetBrains - autores do ReSharper, TeamCity e IDEA. Eles recentemente começaram a analisar linguagens dinâmicas e já lançaram suas ferramentas para Python, PHP e Ruby.
A qualidade é ótima. Estes não são outros plugins para o seu IDE favorito, mas IDEs com todos os recursos e são muito bons para refatoração / navegação / depuração etc. - são como o IDEA Lite.
fonte