El escribir código estos días ya no es hacer todo el código desde cero, para eso tenemos una enorme cantidad de servicios y herramientas de software que nos facilitan el trabajo. Y de eso quisiera hablarles el día de hoy.
De mis herramientas favortias de desarrollo, que utilizo en el día. Esto no signfica que no halla usado otras o que no me gusten, simplemente estas que les mencionaré son las que más utilizo actualmente, debido a los tipos de proyectos que desarrollo estos días. Asi que Empcemos.
Coders, antes de empezar quisiera comentarles del sponsor de este video, llamado Expo. Expo es un SDK basado en React Native que te permite crear aplicaciones moviles multiplataforma de una manera sencilla a traves de sus herramientas como:
- Expo cli, una herramienta de terminal, que te permite desarrollar, construit y publicar tus proyectos de manera facil
- Snack. Un editor online que te permite desarrollar aplciaciones moviles des tu navegador
- Expo Go, una aplicacion movil que te permite ver en tu propio dispositivo lo que vas desarrollando en tu computador
- Expo SDK, y expo SDK, un conjunto de bibliotecas que permiten añadir funcionalidad a tus aplicaciones de manera simple
y lo genial de expo, es que te permite compilar tus aplicaciones en la nube evitando que necesites un mac, o un computador potente para construir tu app. Y cuenta con un plan grautio.
Pueden conocer mucho más de expo, con el enlace que les voy a dejar en la descripción, ademas tambien tengo un curso de Expo publicado, que tambien se los dejare en la descripción, para que puedan aprender de manera práctica. Ahora si vamos a empezar.
Herramientas Necesarias
Ok, primero voy mencioanrles estas herramientas que son necesarias si o si en todo desarrollo real, y digo real porque si vas a ser un hello world o estas conociendo un lenguaje, no son necesarios, pero si vas a crear un sitema que va a estar funcionan durante mucho tiempo, entonces estas sí son indispensables:
Estas son:+
- IDEs y/o Editores de Código
- Herramientas de Control de versiones
- Hosting de Git
- Sistemas de persistencia
Empemos con los Editores de Código y IDES:
Generalmente yo utilizo más editores de código que IDEs, porque son más ligeros. Los que uso son:
- Visual Studio Code, este editor lo uso mucho en desarrollo web, tanto backend con lenguajes como Go, Dart, Javascript y Python. y tambien en frontend, cuando desarrollo con frameworks como React, Angular, Vue, Svelte o vanilla Javascript. Aunque tambien lo uso mucho cuando desarrollo aplicaciones moviles con Flutter o React Native. ademas que tiene una enorme cantidad de plugins que soporta practicamente cualquier lenguaje popular.
- Vim y NeoVIM. Vim es el segundo editor de codigo que uso más, vim es un editor que lleva años en el mundo del software, a tal punto que fue creado en esa epoca de terminales antiguos, en donde las flechas del teclado no estaban, y en lugar de ellas estaban las letras j h k l, que cumplian un doble rol. Es decir es un editor bastante viejo, Pero estos dias se usa mucho como un editor que tiene un excelente rendimiento, consume muy pocos recursos y ayuda a la productividad, con sus atajos. este ide lo uso, cuando tengo un proyecto muy grande y la navegacion entre archivos se torna lenta, o tambien lo uso mucho desde el servidor, Muy pronto un curso de Vim.
- Android Studio. Este IDE lo uso mucho al desarrollar aplicaciones moviles obviamente, ya sea cuando se trata de aplciaciones nativas de Android, o tambien cuando desarrollo apliaciones moviles hibrido o basadas en tecnologia web como Ionic, React Native, o Flutter. Baicamente este IDE es una herramienta necesaria si das soporte a Android.
- IDES de Jetbrains. jetbrains es una emprsea que desarrolla Herramientas para programadores enfocados en multiples lenguajes, como el IDE Pycharm, para python, IntellIJ IDEA para java y kotlin, phpstorm para php, y webstorm para javascript, aunque tambien tiene editores para los lenguajes C, y Go. Aunque personalmente el que mas uso es IntellIJ IDEA cuando se trata de proyectos Java. aunque no acaba alli porque tambien tiene muchos otros productos relacionados a desarrollo de software como analiticas, decompiladores, o administradores e bases de datos.
- code-server. Este es un editor de código en la nube, es decir que se instala en el servidor y no en tu computador local, este lo uso mucho cuando tengo que cofigurar algunos proyectos o quiero hacer pruebas desde el servidor y quiero tener un editor similar a VScode alli. Aunque tambien tiene la ventaja de permitir colaborar muy facilmente entre varios desarrolladores y al estar en la nube, basicamente tienes tu computador con todas sus configuraciones disponible desde cualquier navegador.
algunos otros IDEs y Editores que he llegado a utilizar son:
- Eclipse
- brackets
- sublime text
- emacs
- visual studio
por nombrar otros conocidos.
VCS
Los VCS( Version control System), o los sistemas de control de versiones son herramientas de software que te permiten, como su nombre indica, controlar las distintas versiones de código a lo largo del tiempo.
aqui podemos encontrar a programas como:
- Git
- SubVersion
- o Mercurial
Aunque no son los unicos. Pero Git es el VCS, más popular y más ampliamente usado en el mundo. y es el que más uso.
Hosting de Git
Pero si usamos git, tarde o temprano vas a necesitas colaborar con otras personas o el tener un repositorio central en donde tu codigo este alojado, qui entra los hosting de Git, como:
- Github
- Gitlab
- o Bitbucket.
Este son tres servicios que le pertenecen a empresas, por ejemplo el que más uso es Github y este le pertenece a Microsfot, pero algo que muchos no saben es que tambien es posible hostear tu propio servidor de Github, aqui podemos mencionar a programas como Gitea, o Gogs, los cuales te permiten instalar un servicio parecido a github en tu propio servidor, y te permite tener completo control de tu código. el que más uso para estos casos es Gogs.
Y por supuesto tambien estan otros software relacionados que facilitan el manejo de un flujo de trabajo con git, pero que son opcionales, aqui entran software como:
- Github desktop
- Gitkraken
- GitFork
El que mas uso yo es Gitkraken.
Sistemas de persistencia
Todo sistema real, necesita un lugar en donde guardar o persistir sus datos a lo largo del tiempo, aqui entran las bases de datos, como:
- Sqlite
- MySQL
- Mariadb
- Postgress
- MS SQLServer
- Oracle
- Mongodb
- Redis
entre muchos mas. Por lo general en proyetos medianos, termino usando dos bases de datos una base de datos SQL como Mariadb o MySQL y una base de datos NoSQL como Redis. Aunque en proyectos grandes, he llego utilizar tres o cuatro, dependiendo del tipo de dsarrollo. esto asi es porque hay ocasiones en las que toca heredar un proyecto que ya tiene una base de datos con un micro servicio y se tiene que utilizar simplemente. o hay servicios de la nube que ofrecen tambien un servicio de bases de datos como podria ser:
- Dynamodb
- Amazon Relational Database Service
- Azure SQL Database
- IBM DB2 cloud
pero resumiendo los que más utilizo son: Sqlite, MySQL/Mariadb, Redis y Mongodb.
Entonces hasta aqui hablariamos de las herramientas que todo desarrollador deberia aprender a manjer, sea uno u otra, pero ahora les voy a mencionar otro tipo de herramientas.
Navegadores
Mencionandolos por orden, los navegadores que más uso estos días son estos:
- Google Chrome
- Brave
- Chrome Canary
- Chromium
- Firefox developer Edition
- Firefox
basicamente son tres navegadores basados en chromium, el mismo chromium y firefox. La razon de usar google chrome es que como desarrollador, las APIs que provee chrome, siempre sus lanzamientos estan por delante de firefox. De hecho si quires probar cosas experiementales de Google Chrome puedes usar Chrome canary para ir probandoalas. Aunque si hablaramos de herramientas para CSS y debugging, firefox no se queda atras con su devtools, y aqui tambien entraría Firefox Developer Edition. Brave lo uso porque es un navegador que esta muy relacionado a tecnologias relativamente nuevas como protocolos decentralizados como IPFS, criptomonedas con el uso del token BAT dentro del navegador, incluso tiene una billetera cripto integrada, y su modelo d negocio es bastante peculiar. Este navegador tiene varias cosas muy intersantes, y sera dentro de algunos días publicaré un video del tema.
Servicios Web
Cuando hablamos de servicios web, por lo general se mencionan dos: REST APIs y GraphQL APIs. Estan tambien deberian ser herramientas que todo desarrolladr deberia conocer, pero en los ultimos años tambien han aparecido servicios de la nube que simplifican la creacion de servicios web. Aqui estoy hablando por ejemplo de Servicios Serverless, en particular yo uso dos:
- Firebase (un Servicio REST y bibliotecas)
- Amplify (GraphQL)
aunque si hablamos de estos serivicos tambien podriamos mencionar a servicios como:
- Cloudinary, para hosting de imagenes
- Sendgrid, para correos transaccionales
- Azure Functions, para ejecucion de funciones en la nube
- Twilio, mensajeria
- Algolia, para autocompletado
Entre muchos ostros servicios enfocados en la nube.
Y Si hablamos de desarrollar apis ya sean REST o GRAPHQL, las herramietnas que mas uso son;
- Postman
- Insomnia, https://insomnia.rest/
- y una extension de vscode llamada REST Client
las tres soportan tanto REST API como GraphQL y son muy practias, aunque la que más uso es el plugin REST Client, al ya estar integrado en visual studio code, y el permitirte incluso guardar tus peticiones dentro del codigo de tu proyecto. Ademas soporta la sintaxis de otro cliente REST llamada cURL.
Y por supuesto los servicios web estan muy relacionados al mundo Cloud. Por ejemplo en mi caso los servicios que más uso cuando desarrollo son:
- AWS
- DigitalOcean
- Google Cloud y Azure
Con herramientas como:
- Docker. La cual nos permite crear contenedores para empaquetar toda nuestra aplicacion con todos su programas necesarios y dependencias, Ademas de Docker hub, el cual es un is love, docker is life
- Kubernetes, como orquestador de contenedores
- herramientas CI/CD, las cuales son herramientas para distribuir aplicaciones a los clientes con frecuencia mediante el uso de la automatización en las etapas del desarrollo de aplicaciones, como Jenkins, circle ci, travis ci, etc.
CMS
Ok, se que muchos de ustedes creen que todos los proyectos se deben hacerse desde cero, pero el reinventar la rueda no es divertido, y mucho menos si tienes mucha demanda de trabajo y poco tiempo. No me mal interpreten, hay proyectos que si necesitan codigo, pero si te piden un blog, o una tienda virtual autoadministrable, o un pequeño sitio de noticias, que ves es muy basico, un cms, lo soluciona en poco tiempo.
ya depende del desarrollador usar sus herramientas, por supuesto siempre dependiendo si cumple con lo que necesita el cliente. Los cms que más he llegado a usar son:
- Wordpress, Woocomerce
- Magento
- blogger
- jekyll
- Hugo
- Ghost
Siendo Ghost y wordpress los que más uso cuando se trata de este tipo de desarollos.
Aqui tambien entran los Headless CMS, que son basicamente CMS que no tienen front, tan solo son backend para que como desarollador puedas decidir que frontend usar. Entre los Headless CMS más populares estan: Storyblok, Prismic, Cloud CMS, Contentful, Directus, Contentstack y Strapi.
Siendo Strapi el que más uso en este tipo de casos.
Backend frameworks
en aquellos cuando se necestia la creacion de un backend, opto por varios lenguajes ,entre ellos:
- Go, con frameworks como Gorilla, Goji, o buffalo
- Python, con frameworks como Django o Flask
- Typescript / Node (Node), con frameworks como Loopback, Next, Nuxt, y Nest.
escogiendo GO, si tan solo tendria que hacer backend y Typescript si tambien tengo que hacer frontend y movil, o Python si necesito integrar con algun otro tipo de servicio de ciencia de datos a futuro relacionado a ML o Data science.
Herramientas de comunicación
Si trabajas para una empresa, los programas de comunicación se tornan importantes, Aqui entran programas como:
- Slack
- microsoft Teams
o incluso Discord y por supuesto los correos internos, pero este es otro asunto.
Servidores
En cuanto a servidores los mas populares como ya saben son:
- nginx
- apache
- windows iis
- lighttpd
- tomcat
siendo mi favorita nginx, al ser muy simple, rapido y uno de los más populares, actualmente. este lo uso mucho como Proxy, aunque lighttpd tamboien es mi segunda opcion.
Desarrollo movil
En lo personal, haciendo practicamente todo el trabajo, siempre prefiero herramientas multiplataforma, es es simple, el hacer una app nativa que soporte Android y iOS, es tener dos proyectos con codigo fuente distinto, y por lo general en algun momento vas a tener un cliente que te diga: las quiero en android y ios, o incluso hasta web.
es por esto que en lo personal tengo tres herramientas favoritas que con una sola base de código te permite crear una app android, ios y aplicacion web a partir de una mism base de codigo, de nuevo no un mismo lenguaje sino el mismo codigo, es decir el mismo proyecto, estas son:
- React Native y Expo
- Flutter
- y Ionic
Ionic, te permite crear apps hbridas con angular, react y vue. mientras que flutter que permite crear apps nativas es un sdk con un execelente rendimiento, documentacion y comunidad. y React native es la que seria la mejor opcion en Javascript para apps nativas. estas tres son buenas opciones.
Siendo mi favorita React Native y de segundo Flutter. Y yo se que muchos prefieren Flutter sobre react native, y obviamente se porque, incluso yo tambien lo escogeria si tan solo tendria que hacer una app, pero en micaso esto es diferente, porque casi siempre tengo proyectos en los que debo hacer backend, frontend y app, asi que el escoger Javascript es buena idea, que me ahoora muchas horas de trabajo, al estar presente en backend y frontend. pero si tan solo tendria que enfocarme en desarrollar una aplicacion escogeria flutter.
De hecho yo uso React Native con Expo mucho más que React Native Standalone, en muchos proyectos esto es simplemente, por dos razones:
- el desarolladar un proyecto con expo es muy practico, puedes hacer con n emulador, desde tu propio movil, o pestaña del navegador.
- y el build de android y ios lo puedo hacer en la nube en lugar de estar utilizando la potencia de un computador local. esto es muy util para sobretodo cuanto estoy desarrollando multiples proyectos, esto facilita el desarrollo y puedo ir avanzando otras cosas.
- ademas expo te permite generar una aplicacion web tambien con un solo comando.
- y si usas otros stacks de REact como MERN, o next, tambien te facilitaria mucho la creacion de tu app.
Aunque si en algun momento por cualquier razon quieren desligarse de expo, tambien este les permite convertir su app en un proyecto de React Standalone, sin problemas.
Y por mencionarles algo, en el pasado tambien he llegado a usar otros desarrollos como:
- Apache cordova ( y phonegap )
- titanium sdk
pero son opciones que actualmente ya no ofrecen mucho y seria mucho mejor optar por las que les he comentado o tambien podria ser:
- native script y xamarin
Sistema operativo
Finalmente me gustaria comentarles que sistema opertivo uso es más. En lo personal uso para desarrollar Linux. se que mucho de ustedes me ven usando windows en muchos tutoriales, pero es porque muchas personas que ven usan windows como principal so, asi que quiero que les sea facil seguir video.
En lo personal prefiero mucho más linux para desarrllar, siplemente porque muchos servicios y programas que Windows ejecuta en segundo plano usa no estan linux, reduciendo el consumo de recuros. ademas me gusta los entornos de desarollo ligerso, porque ayudan a la productividad, en particular uso entornos XFCE, consume poca bateria y es facilmente personalizable. y por supuesto existen muchos programas que mejoran la terminal, ademas de existir muchos proyectos relacionados a código tener una interfaz personalibable, aqui entran los multiplexores de terminal, window tile manage, entre otros. ademas que tambien cuando se despliega una aplicacion en producción, no resulta algo nuevo, ya que estamos en un entorno muy similar.
Pero obviamente estamos hablando de codigo, porque cuando edito o juego, uso Windows. en cuanto a Mac, no lo he llegado a usar, creo que Linux es un entorno unix más accesible, es gratis y es el mismo sistema del servidor. pero es algo pendiente para mi, el comprar un mac y empezar a probar cosas alli tambien, ya veremos a futuro.
Y ya esta. estas serian alguans de las herramientas que uso entre frecuentemente, pero no son las unicas, otro tipo de servicios y herramientas que tambien uso y se han quedado afuera son: son:
- CLIs
- Aplicaciones de Escritorio
- DApps, o aplicaciones decentralizadas
- herramientas Documentacion
- servicios de la nube para alojar y procesar archivos, entre otros.
Esto se los mencionare en otro video dedicado a serviciso para desarorlladores web, pero al menos por ahora ya tiene una idea de que uso estos días. Por favor comentame que herramientas son tus favoritas o que herramientas usas, y quizas tambien prodia hacer un video del tema.
Eso ha sido todo por el video del dia de hoy, nos vemos en el siguiente video.
aplicaciones de Escritorio
- https://snyk.io/
- exa - ls replacement, written in rust
- https://maven.apache.org/
- https://mizage.com/divvy/
- https://slack.com/intl/es-pe/
- Gradle
- Visual Studio Community
- TablePlus
- Evernote
- https://devdocs.io/dom-ambient-light/
ripgrep - smarter+faster grep entr - watch files, and run something when the files change shellcheck - shell script linter ngrok - tunnel your local ports out to the internet bpython - amazing python REPL blackbox - safely store secrets in version control ranger - console file manager with some dope addons
kitty - GPU accelerated terminal, supports ligatures mailhog - modern mailcatcher postman - API tester metabase - Beautiful DB tool
if you use kubernetes a ton: kubectx + kubens - easier management of many k8s clusters and namespaces kubetail - stream logs from any number of pods in k8s Windows Subsystem is so great. It's Linux. Built into Windows. So amazing. I have all my favourite Linux tools - in Windows!
Fiddler - Web Debugging Proxy Postman - Test, Document & Monitor APIs JSON Formatter - Format and Beautify JSON data Chrome Developer Tool - Web Debugging Tool Clockify - Tracking the time you spend on various programming activities is vital
json2csharp.com/ tableplus.io/ json2ts.com
clipboard manager. Ditto for example is my favourite software for that at the moment. ack is a great upgrade from grep. https://github.com/ogham/exa
Consola, terminal
- ssh
- zsh
- Cmdr Console Emulator cmder.net/ Linux command console emulator for Windows
- npm
- snap
- choco
- wsl
- Verdaccio
- tmux + tmuxp - terminal multiplexer, and a session manager