Preparando un IDE para trabajar en Ciencia de Datos
Mis Extensiones para Trabajar en VSCode
Trabajando como Científico de Datos, o de cualquier programador en general, pasas gran parte de tu día en frente de algún editor de código o un IDE. Si bien yo realmente creo que no está totalmente definido cuál es el mejor ambiente para trabajar, a mí me gusta la versatilidad que ofrece VSCode. .
En el mundo de los datos uno trabaja en varios frentes: Desde exploración o diseño de prototipos en Notebooks, hasta diseño de pipelines automatizados utilizando Scripts, y desplegando sistemas en Cloud o tecnologías asociadas como Docker. En general uno tiene que manejar muchas tecnologías en distintos entornos. Y a pesar de que me gustan las tecnologías especialistas, tener un entorno multifacético como VSCode me gusta mucho, en especial porque es un todo en uno: Python Scripts, Jupyter Notebooks, terminal además de permitir conectarme a entornos remotos como contendores de Docker o mi servidor utilizando SSH. Todo en un sólo lugar.
La intención de este artículo no es juzgar qué es mejor y donde trabajar. Yo tengo mi opinión y me gusta trabajar en VSCode. Básicamente quiero compartir y documentar para mi yo del futuro
cuál es mi configuración elegida.
Lo bueno de VScode es que es completamente personalizable, pero me pasa que siempre que veo videos/artículos que abordan las mejores extensiones están enfocadas en un público más de desarrollo Web, o en otros lenguajes de programación más que en Python en el contexto de Ciencia de Datos. La idea de este artículo es mostrar extensiones conocidas y otras bien under
que me han permitido aumentar la productividad (uno de mis sueños que es no depender tanto del mouse, ni tampoco de Vim/NeoVim que no me terminan de convencer) o sencillamente que tu ambiente de trabajo se vea más bonito.
Como editor de Texto en verdad creo que Vim/NeoVim
es lo mejor que hay por velocidad, atajos, funcionalidades, y otras capacidades como IDE. Donde no me termina de convencer es como un entorno de ejecución en tiempo real de Python (tipo REPL). A diferencia del desarrollo de software uno necesita ir ejecutando trozos de código en memoria rápidamente y la verdad es que no he encontrado algo que me termine de gustar en VIM
. El Jupyter Notebook
es lo mejor (o menos malo) que he encontrado, pero tiene muchos otros problemas. Para mí la mejor solución la tenía Atom con Hydrogen, pero sabrán que Microsoft decidió darlo de baja y eliminarlo (igual tenía algunas pifias de performance, se volvía muy lento con archivos con muchas líneas de código, pero la idea de tener un Script con el output inmediatemente al lado es para mí lo mejor que hay. VSCode ofrece el Python Interactive Window pero no anda ni cerca de lo útil que era Hydrogen, de hecho funciona muy mal). Me encantaría que algo así saliera en VSCode pero al parecer es medio imposible por la forma en la que VSCode funciona.
Python
Obvio, esta es probablemente la primera extensión a instalar para poder ejecutar código en Python. No mucho que decir, permite ejecutar Python en VSCode, permite la interactive Window, que es para ejecutar código en vivo tipo REPL pero en Python Script, además de habilitar los Jupyter Notebooks (antes eran extensiones separadas pero ahora viven todo bajo la extensión de Python). Actualmente esta extensión igual instala extensiones amigas como Jupyter Cell Tags, Jupyter Keymap, etc. Pero son extensiones que trabajan behind the scenes
.
La extensión además permite refactoring (aunque no funciona mucho), e incorpora Pylance como Language Server para dar sugerencias de código, y isort como una herramienta para ordenar imports. Además tiene incorporación con formatters (yo uso Black) y linter (la verdad es que odio los linters por la cantidad de suciedad que agrega a mi pantalla, pero normalmente trabajo con flake8 pero ahora estoy probando Ruff).
Una de las cosas que más me gusta es que por fín integraron la posibilidad de modificar Tags para poder usar librerías súper interesantes como Papermill.
Entiendo que aún existe gente que usa R, y la verdad es que si bien VSCode tiene una extensión para trabajar con R, creo que RStudio funciona mucho mejor. Si les interesa hablar de la pelea R vs Python, lo dejamos para otra ocasión.
Extensiones de estética
Probablemente muchos pueden pensar que no son necesarias pero de verdad hacen que nuestro ambiente de trabajo sea más ameno. Al menos el hightlighting creo que ayuda mucho a leer mejor el código y poner atención a distintas partes del código. El resto me hace más feliz!! Pero igual ayuda.
One Dark Pro
No mucho que decir acá más que es mi tema favorito (que de hecho proviene de Atom). Para mí es bien importante que el código sea muy multicolor, y que permita diferenciar cada parte del código. He probado muchos temas y este por lejos es el mejor, tiene colores predefinidos para:
- Palabras Claves
- Funciones
- Clases
- Métodos
- Atributos
- Strings
- Números
- Booleanos
- Signos
Una imagen de cómo se ve código Python con casi todo lo que mencioné se puede ver acá:
Material Icon
Esta es una extensión muy sencilla que coloca íconos a las carpetas y los íconos de manera muy bonito para reconocerlos mejor. Utiliza el nombre o la extensión para asignar íconos que facilitan encontrar archivos y diferencias carpetas importantes de otras no tan importantes.
Una cosa que me gusta bastante de VSCode es que marca qué archivos no están siendo trackeados por Git, cuáles son nuevos, cuáles son partes de .gitignore
, etc. Si bien no es ninguna extensión adicional lo que permite esto, Material Icon si agrega esos colores dorado, verde, o gris para denotar distintos estados de un archivo en Git.
indent-rainbow
Es una extensión muy pequeñita que permite marcar la indentación con colores para asegurarse que estén alineados. Si está incorrectamente alineado aparecerá en rojo, sino irán marcando por colores los distintos niveles.
Better Comments
Esta extensión permite destacar ciertos comentarios. En general lo he encontrado bien útil para poder tener mensajes a los que tengo que estar atento en el futuro o para que mis compañeros vean mis mensajes. Básicamente, tiene varios tipos de mensajes que se destacarán dependiendo del símbolo con el que partan:
Si bien se sugieren esos comentarios, la verdad es que uno puede usar el color para lo que uno quiera.
Rainbow CSV
Esta es otra pequeña extensión muy livianita, que permite colorear un CSV para poder tener una mejor lectura del archivo raw. Es la extensión más común, y si bien hay otras extensiones que permiten ver los CSV cómo Spreadsheets, a mí me gusta esta, porque de nuevo, me gusta el editor bien multicolor.
Autocompletado
Son extensiones que ayudan a autocompletar código o escribir código de manera más rápida y oprimiendo menos teclas.
Github Copilot
La verdad es que cada vez lo ocupo menos. Si bien es un gusto que me complete mucho código, rara vez me da la respuesta absolutamente correcta, lo que significa que tengo que terminar editando la sugerencia. Lo mejor que tiene es sugerir variables de manera correcta o librerías que necesito importar, pero normalmente editar para mí es más lento que escribir todo. Una de las razones por las que he dejado de usarlo es porque hago clases donde la mayor parte del tiempo hago código en vivo, y no es ninguna gracia que te sugieran largas líneas de código.
Sirve, vale la pena (yo lo tengo gratis por ser estudiante), pero no es la gran maravilla. Podría vivir sin él y prefiero algo como Intellicode que permita autocompletar más rápido y entender mejor lo que estoy haciendo.
Intellicode
Esta extensión ha terminado siendo mucho más útil. Intellicode es bien interesante, ya que permite mejorar las capacidades de Pylance para dar mejores sugerencias. No sé si habrán dado cuenta de que muchas veces las sugerencias son bien malas. Uno siempre importa csv y al colocar pd.read_
se sugiere .read_clipboard()
porque alfabéticamente va primero. Al habilitar Intellicode, el motor de sugerencias va aprendiendo para entregar mejores sugerencias de acuerdo a tu código y a tus prácticas de escritura. Verás que mejores sugerencias se ven con una estrella:
Solía haber una extensión llamada Kite que era muy similar y que la verdad funcionaba sumamente bien hasta que comenzar a cobrar por todas las cosas buenas que tenían. Lamentablemente quebró y encontré esta que ha suplido bastante bien mis necesidades.
Path Intellisense
Esta extensión permite el autocompletado de los paths/rutas reconociendo que archivos están disponibles a medida que uno construye la ruta. Sumamente útil, en especial para los que tenemos mala memoria recordando donde guardamos nuestra info. Creo que lo único que no me gusta es que exige para disparar las sugerencias (al menos inicialmente) el partir el path con ./
. A parte de eso, muy buena extensión.
Python Type Hint
Como el nombre lo dice, sugiere autocompletado para cuando quieres utilizar Type Hints.
Superpoderes
Extensiones que permiten que haga cosas de manera más rápido o eficiente normalmente utilizando sólo el teclado.
Autodocstring
Es otra pequeña extensión que entrega el template de un Docstring. Para los que no sepan, un Docstring es una documentación propia de una función en Python. Lo bueno de esto es que no sólo entrega una pauta de referencia de cómo rellenarla sino que además VSCode la renderiza de manera muy bonita cuando se hace hover sobre la función con el mouse.
Es importante recalcar que VSCode soporta muchos formatos de docstring, pero yo ocupo estilo Numpy
, el cuál se puede configurar en Settings > AutoDocstring:Docstring Format
.
La extensión automáticamente identificará los parámetros de entrada y si es que existe un return
y mostrará placeholders para reemplazar el tipo de dato y una descripción de cada elemento.
Quick and Simple Text Selection
Probablemente la mejor extensión para los que nos gusta usar el teclado y sumamente desconocida (pueden ver el número de descargas). Tiene atajos de teclados que permiten seleccionar todo lo que se encuentre entre cualquier tipo de paréntesis o comillas. Además tiene otra funcionalidad que permite cambiar el tipo de comillas inmediatamente.
En mi caso lo tengo configurado como acorde, es decir, presionados como secuencia, no al mismo tiempo, esto gracias a mi Corne:
Ctrl k ;
seleccionará todo lo que está dentro de cualquier tipo de comillas.Ctrl k a
seleccionará entre paréntesis,Ctrl k s
entre corchetes yCtrl k d
entre llaves. La elección de esto tiene que ver con cómo hago los distintos de paréntesis en mi teclado.Ctrl k :
irá rotando entre “”, ‘’ y ``. Súper útil.
Advanced New File
Es una extensión que sólo permite crear un archivo nuevo. La gran gracia es que puedo especificar su ruta completa y creará carpetas intermedias que se requieran para su creación en el caso que no existan. Me gusta principalmente porque permite agregar un atajo de teclado para hacerlo más rápido.
TabOut
Probablemente la extensión más simple pero más útil del mundo. Una de las ventajas que tiene VSCode es el auto-cerrado de paréntesis y comillas, que es genial para que nunca olvides cerrarlos. El problema que trae eso es que luego tienes que usar la flecha a la derecha ➡️ para salir del paréntesis o cierre de comillas. Esto es particularmente un problema porque la flecha a la derecha suele estar lejos en los teclados convencionales y eso significa perder la posición de home row si haces touch typing (que es una demora innecesaria). Esta extensión tiene el único objetivo de usar la tecla Tab para salir de un cierre de paréntesis o comillas. Demasiado simple, pero no les puedo explicar lo productivo que es.
Python postfix completion
Todavía no me termino de acostumbrar a esta extensión, pero tiene varias cosas muy interesantes. Por ejemplo: Si tengo un objeto en Python llamado item
y hago item.len
se transforma automáticamente en len(item)
. Esto siempre pasa, no te das cuenta que es una lista y no tiene .shape
y tienes que devolverte a hacer el len()
. Tiene varios atajos más para return, for loops, if statements, y funciones de conversión como int()
.
Python Indent
Por alguna razón VSCode al presionar Enter dentro de alguna estructura de datos o alguna sintaxis que requiera indentación, no mantiene la indentación. Esta extensión asegura que si se mantenga. Simple! Por ejemplo si escribo un else:
y presiono Enter automáticamente la siguiente línea está indentada.
Misceláneo
Todas las extensiones que no supe como clasificar.
Git Graph
Otra extensión muy pequeñita. Muchos recomiendan el uso de Git Lens (pero realmente no entiendo para qué sirve). Esto lo único que hace, pero lo hace muy bien, es mostrar de manera mucho más bonito un git log
.
La extensión muestra todas las ramas, como interactúan entre ellas y cada uno de los commits. Simple y bonito!!
Markdown All in One
Como el sitio lo llevo principalmente en Markdown, uso esta extensión para habilitar atajos como Ctrl + B
para Negrita o Ctrl + I
para Cursiva, además de funcionalidades para trabajar mejor en Markdown como previsualizar o evitar el autocompletado innecesario.
Remote SSH
La mejor extensión que existe para conectarte de manera remota a un servidor. La verdad es que por ahora ser cliente Movistar me dio un pequeño problema porque no tenía autorización al puerto 22 que es el puerto por defecto para usar SSH, pero aparte de eso, requiere cero configuración y me permite conectarme de manera remota a mi servidor JARVIS.
Project Manager
Creo que todavía no le termino de sacar el beneficio a esta extensión, pero básicamente, en vez de tener que abrir cada carpeta de proyecto, o navegar por el terminal dependiendo de donde quieres trabajar te coloca una pestaña en la que tienes todos tus proyectos. Por lo que basta con abrir VSCode donde sea y ahí tienes todo. No me termino de acostumbrar porque tengo la costumbre de entrar siempre por terminal. Pero es una excelente extensión.
DVC
Esta es una extensión para poder generar experimentos en DVC, muy similar a lo que sería Tensorboard. Probablemente muy útil (no la he usado mucho aún), pero requiere de un tutorial por sí sola.
La verdad es que tengo más extensiones instaladas, pero que en verdad no les he encontrado el uso. Una de ellas es Bookmarks
, nunca la he usado. Hay otras que me parecen bien interesantes como Docker
o Dev Containers
, pero me gusta mucho el uso del terminal, por lo que casi siempre termino interactuando mediante él.
Otra cosa que para mí es sumamente importante es el terminal. Si bien no es una extensión adicional, sí utilizo mucho el terminal integrado para no tener que abrir ventanas adicionales.
Mi terminal utiliza Oh my ZSH
con Powerlevek10k
. Esto me permite tener mucha información en la línea del terminal como:
- La ruta actual en la que estoy parado.
- La rama de Git además archivos en stage, si commits esperando push o incluso un stash. Además me indica estados como rebase y el estado del rebase en caso de conflictos.
- El ambiente de Python en el que estoy actualmente.
- Hora.
- Me indica si el estado del comando fue exitoso o no.
Y tiene autocompletado, syntax highlightning entre otros. Vale mucho la pena.
Ahora, para que todo esto valga la pena tiene que ir de la mano con la configuración de VSCode, y por sobre todo los atajos de teclados. Yo diría que utilizo la mayoría de atajos por defecto, pero tengo algunos customizados que hacen mi vida más sencilla (en combinación con la disposición de algunas teclas en mi teclado como Ctrl
).
Pero lo dejamos para la otra,
Espero que les haya gustado y les sirva para armar un ambiente más ameno y cambiarse a VSCode.