summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEkaitz Zarraga <ekaitz@elenq.tech>2019-12-05 14:01:47 +0100
committerEkaitz Zarraga <ekaitz@elenq.tech>2019-12-05 14:01:47 +0100
commite81be53f3d6db9b1430da2901853487553c34b26 (patch)
treef8af316b39800df0fb5bcefcd8880279301ed48e
parent8f4736604295dd65951b3763644959a690e392ca (diff)
add tools and clean todos
-rw-r--r--TODO.md16
-rw-r--r--src/A_devtools.md90
2 files changed, 90 insertions, 16 deletions
diff --git a/TODO.md b/TODO.md
index c206f1b..6812cb4 100644
--- a/TODO.md
+++ b/TODO.md
@@ -1,17 +1 @@
-Add some appendixes:
-
-A. Tipos de datos extra: OrderedDict, NamedTuple...
-B. Módulos y entornos virtuales: Pipenv
-C. Librerías comunes
-D. GUI
- - TKinter -> comes from TCL's GUI ToolKit
- - Qt is also possible with PyQt
- - https://github.com/PySimpleGUI/PySimpleGUI
-E. Testing
- - https://docs.python.org/3/library/unittest.html
-F. Depuración
- - https://docs.python.org/3.8/library/pdb.html
-G. Editores, IDEs etc.
-
-
Add exercises with the answers at the end of the book
diff --git a/src/A_devtools.md b/src/A_devtools.md
new file mode 100644
index 0000000..e856373
--- /dev/null
+++ b/src/A_devtools.md
@@ -0,0 +1,90 @@
+# Anexo I: Herramientas de desarrollo {-}
+
+IDLE es una herramienta de desarrollo muy limitada, suficiente para seguir los
+ejemplos que se recogen en este documento pero insuficiente para desarrollar
+aplicaciones avanzadas.
+
+## Desarrollo de código fuente
+
+Existen gran cantidad de entornos de desarrollo (IDE) avanzados y editores que
+pueden ser recomendables, aunque es cuestión de gusto personal decantarse por
+uno de ellos o por otro.
+
+La diferencia entre un entorno de desarrollo integrado y un editor es la
+siguiente: los entornos de desarrollo cumplen varias funciones adicionales,
+como en el caso de IDLE, dar acceso a una REPL de python y la posibilidad de
+analizar las variables en memoria. Los editores únicamente sirven para escribir
+el código, aunque en muchos casos la línea que separa ambos conceptos es
+bastante borrosa: existen editores con funcionalidades avanzadas y entornos
+integrados muy sencillos que parecen un simple editor. Resumiendo, los entornos
+integrados de desarrollo (IDE *integrated development environment*) tienen
+editores entre sus herramientas.
+
+### Entornos de desarrollo integrados
+
+Quien no utiliza entornos de desarrollo avanzados (una cuestión de gusto
+personal), por lo que se le hace difícil recomendar alguno en particular. Sin
+embargo, el wiki de python recoge una larguísima lista de editores y entornos
+de desarrollo integrado interesantes[^ides].
+
+[^ides]: <https://wiki.python.org/moin/PythonEditors>
+
+En el entorno del análisis de datos, la distribución *Anaconda* es muy usada.
+Anaconda es más que un entorno de desarrollo integrado. Incluye un entorno de
+desarrollo llamado Spyder, una shell propia, un gestor de paquetes y
+dependencias propio llamado Conda, posibilidad de integración con el lenguaje
+de programación R y gran cantidad de paquetes instalados por defecto.
+
+En otros entornos PyCharm es bastante común, aunque también son muy comunes los
+entornos de desarrollo integrados pensados para otros lenguajes que han
+comenzado a soportar python posteriormente como KDevelop, NetBeans y otros.
+
+Te recomiendo que, si usas un entorno de desarrollo integrado en otros
+lenguajes, investigues si soporta python. De este modo no tendrás que aprender
+una nueva herramienta. Al ser un lenguaje tan común, probablemente lo soporte.
+Si no lo soporta prueba con un IDE que siga una filosofía similar al que uses.
+
+### Editores de código
+
+Quien te escribe usa Vim, un editor de texto muy antiguo con muchas
+características que le hacen ser un editor muy eficiente. Existe gran variedad
+de editores de código que recomendar: Emacs, gEdit, Kate, Sublime, Atom... Todo
+dependerá de tus gustos personales.
+
+La ventaja principal de los editores de código es que conociendo uno en
+profundidad es más que suficiente para cualquier lenguaje, ya que están
+diseñados únicamente para escribir el contenido de tus programas, dejando las
+peculiaridades de ejecución de cada lenguaje a parte. Esto les aporta una
+ligereza difícilmente alcanzable por los IDEs.
+
+Sin embargo, esta virtud también es su mayor defecto. Al no integrar ninguna
+herramienta adicional, es necesario trabajar todo manualmente. En el caso de
+python, te fuerzan a usar una shell independiente y a interactuar con ella de
+forma manual. Al principio puede ser tedioso, pero aprender a gestionar los
+detalles manualmente es interesante ya que te permite obtener un gran
+conocimiento del sistema y lenguaje en el que trabajas.
+
+## Herramientas de depuración
+
+El propio diseño de python permite que sea fácilmente depurable. La REPL
+facilita que se pruebe la aplicación a medida que se va desarrollando, función
+a función, para asegurar que su comportamiento es el correcto. Además, la
+capacidad introspectiva del lenguaje es una buena herramienta, en conjunción
+con la REPL para comprobar el comportamiento.
+
+Además de estas características, la instalación de python viene acompañada del
+programa `pdb` (*Python Debugger*), un depurador de código similar al conocido
+[GNU-Debugger](https://en.wikipedia.org/wiki/GNU_Debugger). Existen otros
+depuradores de código más amigables que este, pero la realidad es que no suelen
+ser necesarios.
+
+## Testeo de aplicaciones
+
+Hoy en día el testeo de software es muy común, en parte gracias al desarrollo
+guiado por pruebas, o TDD (*Test Driven Development*).
+
+La librería estándar de python incluye un módulo para pruebas unitarias llamado
+`unittest` en que la librería Nose, muy conocida y usada, se basa para
+facilitar el trabajo de modo similar a lo que ocurre con Requests y `urllib`.
+
+Por supuesto, existen otras alternativas, pero estas son las principales.