Programar no es solo saber escribir y leer código para desarrollar con calidad cualquier trabajo es necesario conocer las herramientas y tecnologías que se usan.
El oficio de un piloto de F1 es manejar, pero seguro conoce la mecánica de su carro al derecho y al revés.
Nosotros escribimos código, pero necesitamos saber cómo funciona el servidor en el que este corre, al derecho y al revés.
Voy a listar las que yo considero que son las tecnologías y conceptos indispensables que debemos dominar aparte de saber como escribir código.
1. HTTP
Si no tienes claro cómo funciona el protocolo HTTP, arrancaste por el final.
Este debe ser el primer concepto que se aprende cuando se trabaja en desarrollo web.
El Curso de postman de platzi te ayudará con este tema.
2. Diseño de software
Saber acelerar, no es saber manejar.
Saber escribir código, no es saber programar.
Pablo durante todo el curso menciona que nuestro trabajo principal es diseñar no escribir código, para ser un buen diseñador de software yo te recomiendo este libro A Philosophy of Software Design
OJO - Las cosas no son blanco / negro
- Este libro no es perfecto
- Las opiniones del autor son eso, opiniones
- Pero te va a dar una excelente perspectiva sobre cómo afrontar un desarrollo de ahora en adelante.
3. Seguridad
El mayor problema en la seguridad en línea es la falta de conocimiento de quien implementa. Hay dos retos principales: seguridad en la comunicación, seguridad en la aplicación.
El primero se resuelve con comunicaciones encriptadas (SSL).
Para el segundo es importante conocer los riesgos que existen. Algunas de las más comunes:
- SQL injection - https://en.wikipedia.org/wiki/SQL_injection
- XSS - https://en.wikipedia.org/wiki/Cross-site_scripting
- CSRF - https://en.wikipedia.org/wiki/Cross-site_request_forgery
Platzi también nos puede ayudar con este tema, de hecho tiene toda una carrera
4. ReGex
Si no te gustan las expresiones regulares, garantizado que es porque no las sabe usar (bien).
Para variar Platzi tiene una solución para nuestros problemas con el Curso de Expresiones Regulares
Herramientas para ESCRIBIR código
Ahora si te voy a recomendar las herramientas que yo utilizo para escribir en python, las cuales me han ayudado a optimizar y hacer más eficiente la escritura del código y el mantenimiento de mi entorno de desarrollo en general.
Cabe destacar que yo trabajo sobre WSL2 en Windows 10 pro insiders, es decir, uso windows pero desarrollo sobre linux, si quieres un tutorial para preparar tu entorno de trabajo de esta manera dejalo en los comentarios.
Por como está haciendo las cosas windows últimamente me ha dado esperanzas en que no va a ser necesario comprarme una mac para tener un entorno de trabajo cómodo, compatible y eficiente.
Editor
VSCode de Microsoft.
- Corre en Windows, Linux y mac OS.
- Es gratuito.
- Tiene plugins para todas las herramientas que voy a mencionar.
No instales ninguna de las siguientes herramientas como dependencia de un proyecto. Estas deben ser instaladas de forma global en tu equipo. Por qué? Porque el proyecto no depende de ninguna de estas. Son ayudas que vas a usar para escribir un mejor código, y las podemos cambiar sin afectar los proyectos.
pipx
Instala paquetes de Python de forma independiente manteniendo limpio tu Python global.
pyenv
Instala múltiples versiones de Python en tu sistema.
Poetry
Cada proyecto debe tener su propio ambiente virtual de Python. Poetry maneja los ambientes virtuales y las dependencias del proyecto.
Es práctico configurarlo para que los ambientes virtuales sean creados en la misma carpeta del proyecto, así desde cualquier editor puede buscar en el código de los paquetes instalados:
poetry config settings.virtualenvs.in-project true
Black
Evita darle vueltas a tema sobre que formato de escritura de código usar. Usa black y listo!
pipx install black
isort
Ordena los imports de forma lógica.
Instalalo con el siguiente comando:
pipx install isort
Configura isort para que sea compatible con Black.
# ~/.isort.cfg
[settings]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
line_length=88
Flake8
El código debe seguir los lineamientos de estilo y documentación recomendados por Python. Flake8 permite ejecutar pruebas de varios linters con un solo comando:
-
pycodestyle - lineamientos de estilo.
-
pydocstyle - lineamientos de documentación.
-
pyflakes - errores de código.
-
bugbear - reglas adicionales de errores de código
-
McCabe - complejidad de código.
-
Fixme - detecta FIXME y TODO
Usa los siguientes comandos para instalarlo:
pipx install flake8
pipx inject flake8 flake8-bugbear flake8-docstrings flake8-fixme
y te recomiendo la siguiente configuración:
# ~/.config/flake8
# Based on
[flake8]
ignore = E203, E501, W503
max-line-length = 80
max-complexity = 18
select = B,C,D,E,F,H,T,W,B9
Pylint
Para que el resultado de PyLint sea correcto, debe ejecutarse con la misma versión de python que se va a correr el proyecto. Para esto es útil usar pyenv.
Puedes instalar Pylint así:
pip install --userpylint
-
Para que funcione en ambientes virtuales es necesario instalar Pylint-venv.
pip install --userpylint_venv
-
Para que funcione con Django instalar Pylint-Django.
pip install --userpylint_django
-
Archivo de configuración:
# ~/.pylintrc # Configuración para PyLint instalado por pip [MASTER] max-line-length=88 load-plugins=pylint_django init-hook=" from pylint_venv import inithook inithook()" disable=django-not-available,bad-continuation
Settings.json para VsCode
Esta es la configuración que uso en mi VsCode para integrar todas estas herramientas al editor:
// Python Config
"python.venvPath": "${workspaceFolder}/",
"python.pythonPath": "/home/david/.pyenv/shims/python",
"python.linting.enabled": true,
"python.formatting.provider": "black",
"python.formatting.blackPath": "/home/david/.local/bin/black",
"python.sortImports.args": ["--virtual-env", "${workspaceFolder}/.venv"],
"python.sortImports.path": "/home/david/.local/bin/isort",
"python.linting.flake8Enabled": true,
"python.linting.flake8Path": "/home/david/.local/bin/flake8",
"python.linting.pydocstylePath": "/home/david/.local/bin/pydocstyle",
"python.linting.pydocstyleEnabled": true,
"python.linting.pylintEnabled": true,
"python.linting.pylintPath": "/home/david/.pyenv/shims/pylint",
Debes tener instalada la extensión de Python
Deja en los comentarios que herramientas agregarías, cambiarías o quitarías de esta lista para desarrollar eficientemente en Python.
Curso Avanzado de Django v2