# PyConAr2020 propuesta de charlas Ideas de charlas que me gustaría preparar para la Pycon ## Bio Sasha es un desarrollador de software amateur y autodidacta. Es aficionado por resolver problemas y obsesivo por encontrar soluciones sencillas. Hábitos que obtuvo durante su formación académica en la Facultad de Ciencias Exactas. Además tiene dejos de divulgador científico y cuando puede da charlas en meetups, colegios y otros eventos. Actualmente se desempeña como Quant Developer programando en C#. ## Prefacio a una apología ¿Qué aprendí durante mis primeros dos años trabajando como desarrollador? Siempre me pasó que al empezar un nuevo trabajo tengo mas dudas de cómo va a ser la experiencia, cuáles van a ser todos los inconvenientes con los cuales me voy a encontrar y que cosas voy aprender. Casi siempre las cosas ocurren de manera muy distinta a lo que me imaginaba y mi perspectiva cambia a medida que van ocurriendo. Hace un poco más de dos años empecé a trabajar de programador no teniendo experiencia profesional ni una formación en el rubro, por lo que quiero compartir mis vivencias y opiniones a todes les que estén arrancando. En la charla voy a hablar de los miedos, prejuicios y expectativas que tenía al iniciar mi trayecto profesional como programador. También voy hablar sobre cuales son las cosas que me parecen más importantes a tener en cuenta al momento de empezar a trabajar y a tener en cuenta en el ambiente de trabajo. -------------------- *Miedos con los que empecé y los que siguen.* Cosas importantes para el trabajo Cómo aprendí cosas nuevas Preconceptos de la profesión y realidad *¿Cuáles son los miedos con los que empecé y cuales sobreviven?* No poder solucionar los problemas Escribir código que rompa producción No mantener el ritmo del equipo No entender los problemas que me asignaban No llegar a tiempo con la solución *¿Cuales son las cosas que ahora considero más importantes al tiempo de trabajar?* Tener un ambiente en el cual pueda expresar las dudas Tener una buenas habilidades de comunicación Tener espacio para experimentar nuevas soluciones Tener claridad para estimar el trabajo que conlleva el problema Un espacio para poder documentar el avance *¿De qué manera aprendí cosas nuevas?* Interactuando con mis companieres Tomando cursos especializados Explorando muuuchas fuentes distintas para un tema Exponiendo sobre temas que me interesaban Ayudando a otres *¿Qué preconceptos tenía sobre la profesión y como son realmente?* Los sistemas de producción eran sistemas estables y sin problemas El desarrollo de nuevos features era directo y sin interrupciones Las cosas se hacían de una única manera No existían tantas especializaciones ni tecnologías ## Kritik des reinen Codes Métricas para medir la calidad de tu código A medida que un programa crece, crece su complejidad. Además existen muchas formas de obtener una misma solución, cada una con distintas características y cualidades para que sean aptas para variadas situaciones. Pero algo característico del software es que es algo maleable y que cambia constantemente, de ahí viene el *soft*, y hay soluciones que hacen de nuestras soluciones más rígidas que otras lo cual trae complicaciones a futuro. Para evitar esos problemas es necesario evaluar las soluciones y tener un control sobre el estado del código. Para eso existen distintas métricas para cuantificar las características del software y poder comparar las distintas soluciones. La charla va a estar guiada por las siguiente preguntas ¿Qué mide realmente cada una de estas métricas? Y ¿cómo puedo utilizarlas para mejorar mi código? Y voy a exponer las siguientes métricas divididas en dos grupos y las herramientas disponibles en Python para evaluarlas Métricas más usuales: Numero de lineas Complejidad ciclomática Índice de mantenibilidad Cobertura de tests Métricas más complejas: Indice ABC Cognitive complexity ## Conozco un grupo de objetos que resuelven problemas Los Decoradores: Ep.1 El origen de una solución Ep.2 El problema en la serpiente Ep.3 Cuatro porciones para llevar Ep.4 El recambio de yerba En la charla voy a hablar sobre ¿Qué son los decoradores? ¿Cómo se implementan los decoradores en Python? Exponer una distinción en los distintos usos/tipos de decoradores Exponer mis opiniones sobre que tener en cuenta al utilizar decoradores *¿Qué son los decoradores?* Los decoradores como patrón de diseño, *¿Cómo se usan los decoradores en Python?* Objeto que recibe un Callable y devuelve un callable *Distinción de los distintos tipos de decoradores que se pueden implementar* Tagging, Control flow, Descriptive, Executing *Cosas importantes a tener en cuenta al utilizar decoradores* Agregar características ortogonales a nuestros objetos de manera dinámica Agrega complejidad en una sola línea de código Implementación, función, parametrizable, clase ## Bug through the ./run and you're to blame Scripting, you give code a bad name :dark_sunglasses: ¿Es posible utilizar JupyterLab como ambiente de desarrollo? El ecosistema de herramientas asociadas a Jupyter es cada vez más extenso. Pero una de las mayores críticas para el desarrollo de soluciones es el uso de Notebooks como principal ambiente de trabajo. En la charla vamos a explorar cuáles son las características ideales para el desarrollo de código y algunas de las soluciones existentes para utilizar en JupyterLab - ¿Qué es necesario para poder desarrollar código? Editor de texto Posibilidad de tener linting Ejecución del código Integración con el test runner Debugger integrado - ¿Qué herramientas están disponibles para facilitar el desarrollo dentro de jlab? Julynter Pytest nbval ## Tres tristes unit tests “Una vez que le agarres la mano no va a haber vuelta atrás” debe ser una de las frases más dichas al enseñar sobre los test unitarios. Pero siempre queda corta para demostrar las bondades y problemas que acarrea su uso. Algo muy importante es que es necesario ejercitar mucho como implementar test unitarios para comprender su beneficio en situaciones más complejas. Además, al principio es extremadamente complicado entender qué es lo que hay que testear y cómo testearlo. Acá vamos a poner a prueba ( o testear ) la manera en la que pensamos sobre los test unitarios cuando no sabemos nada de test unitarios. ¿Hace sentido lo que digo? Quizás tengas que ver la charla para comprobarlo. En la charla se va a hablar sobre: - ¿Qué es un Test Unitario (TU)? - ¿Para qué sirve un TU? - ¿Por qué es tan complicado implementar un TU? *¿Qué es un Test Unitario (TU)?* Self testing code Automatizar la evaluación de tu código *¿Para qué sirve un TU?* Validar tu código Documentar cómo se usa tu código Presión sobre el código que demuestra fallas en el diseño del código Red de contención para realizar cambios de manera segura *¿Por qué es tan complicado escribir un TU?* Testeamos implementación El diseño no es el adecuado