Un desarrollador de pila completa que puede pasar de un prototipo a MVP completo (producto mínimo viable) a menudo se considera un gato de todos los oficios, maestro de ninguno y con una buena razón. Para definir el desarrollador moderno de pila completa, primero debemos centrarnos en lo que solía ser el desarrollador de pila completa.
Desarrolladores Full Stack Entonces
Hace mucho tiempo, alrededor del año 2000 (en Internet, hace 17 años es mucho tiempo), un desarrollador de pila completa era alguien que podía:
crear una página web en algunas herramientas de Adobe como Photoshop o Fireworks
convierta este diseño en HTML, CSS y zonas interactivas en imágenes (aw, ¿recuerda eso?)
escribir algunos scripts PHP 4.0 básicos (en ese momento no había PHP orientado a objetos en el horizonte) para manejar el lado del servidor de la lógica
almacenar todos los datos dinámicos en MySQL, quizás hacer un poco de optimización
subirlo todo a un servidor a través de FTP y cobrar el cheque de pago
Tenga en cuenta que estamos hablando de PHP aquí: un desarrollador Full Flash o Coldfusion tenía un flujo de trabajo diferente (pero solo un poco diferente).
Eran tiempos simples, la vida era buena. Las agencias unipersonales eran una moneda de diez centavos por docena, y la gente todavía tenía tiempo para pasar con su familia después del trabajo.
¿Qué te parece ahora?
¿Qué necesita saber un desarrollador de Full Stack ahora?
En estos días, tenemos horrores como estos, ¿cómo se llegó a esto?
Para tener éxito en un mercado ahora saturado, los desarrolladores, que a menudo somos perfeccionistas, dudamos en delegar y, a menudo, seguimos el lema “si quieres que algo se haga bien”. Esto nos obliga a un rincón donde tenemos que aprender todo, por lo que ser un desarrollador de stack completo a menudo termina abarcando lo siguiente.
Servidor Admin / Devops
Un desarrollador debe saber cómo hacer una administración básica del servidor. Esto incluye pero no se limita a:
conectarse a servidores remotos a través de la terminal, en entornos sin GUI
script de shell básico
administrar usuarios y grupos en un servidor
administrar programas de servidor como Apache y Nginx para servir aplicaciones
administrar firewalls y permisos
instalar nuevo software y actualizar la distribución
vía GIPHY
Además de estos conceptos básicos, un desarrollador debe saber cómo crear entornos de desarrollo buenos, saludables y aislados, ya sea en Docker o en máquinas virtuales como con Vagrant. Si todo lo anterior es algo con lo que no está familiarizado, tenemos un excelente libro sobre esto a la venta aquí.
El desarrollador también debe estar íntimamente familiarizado con los sistemas de control de versiones para poder producir de manera confiable copias de seguridad y colecciones de código compartibles y colaborativas, rastreando los cambios a lo largo del tiempo. Ningún flujo de trabajo de desarrollador moderno está completo sin control de versiones en estos días. Tenemos un fantástico video curso sobre esto para comprar aquí.
Nube
Además de los servidores gestionados o virtualizados, un desarrollador podría necesitar saber sobre la nube: alojamiento en plataformas como Heroku, Google Cloud, Azure, AWS y otras.
vía GIPHY
Hay mucho que decir sobre las plataformas y herramientas que son más exageradas que útiles de inmediato, pero estar familiarizado con los servicios de los que todos hablan puede ser útil a largo plazo: un cliente podría exigir un cambio de proveedores en cualquier momento, Y vale la pena estar listo. Afortunadamente, tenemos la guía definitiva para implementar en todos estos hosts en la nube.
Back End
En el extremo posterior, además de conocer el lenguaje de elección, en nuestro caso PHP y su multitud de marcos y CMS, un desarrollador debe estar familiarizado con:
servidores web como Nginx y Apache que enlaza con Devops arriba
desafortunadamente, NodeJS para compilar JS, CSS y otros activos en sitios estáticos. Afortunadamente, hay formas de evitar NodeJS utilizando PHP.
herramientas como Composer para la gestión de paquetes y dependencias en el propio PHP: ningún entorno de desarrollador moderno está completo sin él
buen diseño de API, ya que la mayoría de los nuevos sitios web actuales están basados en API y simplemente hablan con un front-end separado (más sobre eso a continuación).
Los motores de búsqueda como ElasticSearch (introducción aquí) son realmente importantes para el rendimiento
cronjobs y trabajos en segundo plano con herramientas como Gearman o bibliotecas como Crunz
saber sobre el almacenamiento en caché con Varnish, Redis y herramientas poderosas similares que dividen los costos de alojamiento en un solo dígito a menudo harán o deshacerán un proyecto
Base de datos
La base de datos es una sección separada porque, aparte de una buena comprensión de las bases de datos relacionales para datos cuyo esquema a menudo no cambiará (como MySQL o PostgreSQL), un desarrollador necesita saber sobre bases de datos noSQL como MongoDB, Redis o Cassandra, no mencionar bases de datos de gráficos como Neo4j.
Lo que es peor, todos están en el servidor, bajo el control del desarrollador. También hay varias soluciones remotas como el RestDB tipo Mongo o Firebase propiedad de Google, etc.
Interfaz
En el frente, hay un verdadero caos.
vía GIPHY
Para obtener una descripción general completa de lo que se necesita para un flujo de trabajo front-end saludable en estos días, consulte esta excelente publicación en el canal de JavaScript, pero como TL; DR incluye lo siguiente:
NodeJS y NPM
Hilo
Preprocesadores y transpiladores (como Babel) para cosas como Typecript, ES6, LESS, SCSS, SaSS
Constructores y corredores de tareas como Grunt y Gulp
Marcos como VueJS, React, Angular
Paquetes de módulos como Webpack, Browserify, Rollup
Diseño
En diseño, un desarrollador necesita saber cómo esbozar un prototipo de una aplicación antes de convertirla a un formato utilizable como HTML y CSS. Esto se puede hacer interactivo con algunos JS, los back-end se pueden simular con puntos finales JS falsos, y solo una vez que esta aplicación de shell esté hecha y su diseño de experiencia de usuario y diseño de interfaz estén listos, puede comenzar el verdadero desarrollo. Esto en sí mismo es una gran empresa y garantiza un conjunto especial de herramientas como:
Photoshop y / o Illustrator o una alternativa de código abierto como Gimp / Inkscape: descubra todo sobre esto en el canal Design
un editor bueno y rápido como Atom o Sublime Text (aquí hay 10 complementos ST para el desarrollador de pila completa)
Selectores de patrones como patrones sutiles y selectores de colores que combinan los colores entre sí
sistemas de cuadrícula para CSS
todo, desde la sección de Front End anterior para la burla de JavaScript
formas de implementar un prototipo en línea para que los clientes lo vean y le den su opinión: Ngrok es muy útil para esto
Explotación florestal
Para controlar de manera efectiva el estado de una aplicación, un desarrollador deberá poder rastrear los errores y acceder a los registros y extraer información valiosa de ellos. Tendrán que ser capaces de reconocer y marcar tendencias, así como también notar aumentos en el uso de CPU o E / S para evitar el tiempo de inactividad a tiempo. Esto se relaciona un poco con Devops, pero exige su propio conjunto particular de habilidades.
vía GIPHY
Tenemos una excelente publicación sobre la pila de ELK que lo preparará lo más necesario para todas sus necesidades de registro: combina ElasticSearch para buscar registros, Logstash para recopilarlos y Kibana para un tablero en el que mostrarlos. una pila fina para un monitoreo fácil de usar. Incluso hay soluciones alojadas que se encargan de esto, como Logz.io.
Móvil
Finalmente, hay dispositivos móviles a considerar. Con la vista web en iOS y Android cada vez más eficiente, y el advenimiento de PWA (aplicaciones web progresivas), las aplicaciones nativas están perdiendo su encanto debido al complejo proceso de desarrollarlas. Por lo tanto, un desarrollador de pila completa debe estar familiarizado con las PWA o con algo como React Native o una vista web completa como NativeScript, Tabris, Cordova, Phonegap u otra implementación para obtener una buena “aplicación cliente” para su API ( vea la sección de back end arriba).
¿Vale la pena ser un desarrollador Full Stack?
Entonces, después de todo esto, ¿vale la pena?
En primer lugar, debe tenerse en cuenta que muy pocos desarrolladores de pila completa son esta pila completa; muchos se centran en la mayoría de estas tecnologías y aspectos, no en todos, simplemente porque no es posible prestarles mucha atención.
En segundo lugar, saber al menos un poco de todo podría no convertirte en un maestro de un oficio específico, eso es cierto, pero te hará capaz de comprender qué implica un proyecto y cuáles de estas tecnologías necesita realmente un proyecto. . Esta es una habilidad invaluable al delegar, abrir una agencia o simplemente guiar a un equipo existente de regreso de un camino perdido a un camino bien definido.
Puede que no sea el “JavaScript rockstar”, “Elasticsearch ninja”, “MySQL guru”, “Devops maniac” o “Mobile wrangler” con el que te habrías enamorado, pero en mi caso, ser full stack me permite extender mis alas, probar diferentes tecnologías y ofrecer soluciones alternativas poco comunes a mis clientes cuando trabajen por cuenta propia. El dinero puede provenir de todos lados, y los contratos que puedo tomar van desde el trabajo del servidor hasta el desarrollo del complemento WP y todo lo demás porque estoy moderadamente familiarizado con todas esas cosas (el primero más que el segundo, lo admito). Para mí, definitivamente vale la pena ser una pila completa y si lo comparo con mis días de solo Flash, mientras que disfruté más el trabajo en ese momento (¡sin JavaScript!), El pago fue menor y los proyectos fueron más difíciles de conseguir.