Me encanta que escribir Python, Ruby o Javascript requiera tan poca información. Me encantan las construcciones funcionales simples. Me encanta la sintaxis limpia y simple.
Sin embargo, hay tres cosas en las que soy realmente malo cuando desarrollo un software grande en un lenguaje dinámico:
- Navegando por el código
- Identificando las interfaces de los objetos que estoy usando
- Refactorizando eficientemente
He estado probando editores simples (es decir, Vim), así como IDE (Eclipse + PyDev), pero en ambos casos siento que tengo que comprometer mucho más en la memoria y / o constantemente "grep" y leer el código para identificar Las interfaces. Esto es especialmente cierto cuando se trabaja con una gran base de código con múltiples dependencias.
En cuanto a la refactorización, por ejemplo, cambiar los nombres de los métodos, depende en gran medida de la calidad de las pruebas de mi unidad. Y si trato de aislar las pruebas de mi unidad "cortando" el resto de la aplicación, entonces no hay garantía de que la interfaz de mi código auxiliar esté actualizada con el objeto que estoy copiando.
Estoy seguro de que hay soluciones para estos problemas. ¿Cómo trabajas eficientemente en Python, Ruby o Javascript?
fuente
Respuestas:
Consigue un mejor editor que VIM.
Yo uso Komodo Edit.
Bueno. Pensar es bueno. Me parece que el "aprendizaje" conduce eventualmente a la "memoria".
Esto es tipico. Si no puedes recordarlos, entonces son demasiado complejos, ¿no? Hora de simplificar.
Lo simple es difícil de crear. Pero cuando tiene problemas para recordar, es un síntoma de mal diseño.
Yo uso grep. Esto funciona para mi. Mi edición de Komodo tiene mucha buena búsqueda. También Notepad ++
Doc Strings y la
help()
función funcionan. Los uso Diario.Eso no es noticia. Eso siempre ha sido cierto, incluso en un lenguaje estático.
En un lenguaje estático, a menudo nos volvemos perezosos, suponiendo que, siempre y cuando se compile, es muy probable que funcione. Esto es manifiestamente falso, pero nos volvemos perezosos.
Estos no son "problemas" y no requieren "soluciones".
"sin saber el tipo de los objetos"? De Verdad. Cuando diseño el cliente de un objeto, sé qué tipo diseñé.
Cuando defino un servicio, usado por varios clientes, el tipo "exacto" no es relevante, cuando tengo definida la interfaz requerida de
quack()
yfeathers()
.Finalmente, tengo el Read-Execute-Print-Loop y otras herramientas para determinar el tipo "exacto" en los casos raros cuando tengo un problema sutil. Eso es lo que realmente uso todos los días.
No parece demasiado difícil, al menos en Python, desenrollar el tipo de un objeto. Los lenguajes dinámicos deben tener un REPL, por lo que es bastante fácil ver lo que está sucediendo.
Eso no tiene mucho sentido.
help()
trabajos.Y mi IDE a menudo puede localizar la definición. No siempre: algunas construcciones dinámicas enrevesadas pueden ocultar fácilmente la clase base. En ese caso, tengo que pensar realmente en la clase del objeto para localizar la definición del método. Por supuesto, estoy escribiendo el código, por lo que hay poco (o ningún) misterio allí.
fuente
Una búsqueda rápida encontró a Rfactor para Ruby ( entrevista aquí ) y al hombre de reparación de bicicletas para Python. No estoy seguro de cuán buenos son ... pero vale la pena mirarlos.
fuente
Hay una empresa, JetBrains , autores de ReSharper, TeamCity e IDEA. Recientemente comenzaron a buscar lenguajes dinámicos y ya lanzaron sus herramientas para Python, PHP y Ruby.
La calidad es excelente. Estos no son otros complementos para su IDE favorito, sino IDE con todas las funciones y son bastante buenos para la refactorización / navegación / depuración, etc., son como IDEA lite.
fuente