Roadmap to get started en el desarrollo con Drupal
Drupal is a technology I love, no por nada llevo usándola por más de 16 años. So, what steps would I recommend to someone new en este mundo para que sus proyectos sean éxitosos?
The list I provide here está basada en la experiencia como arquitecto desarrollando sitios en Drupal.
General things
Super common across all the projects that I’ve worked on y que no necesariamente estan limitadas a Drupal pero que se pueden usar para otras tecnologías (Wordpress, Django, C#, React).
Basic Linux command prompt (shell, terminal)
This is super basic. Being able to navigate the filesystem se volverá algo que toca hacer a cada rato. So understanding the different commands that allow you to move through the folder structure de cada uno de los proyectos, en ocasiones mover o copiar files and then deleting them when needed
There’s also a change you will need to use bash files developed por otros desarrolladores y que es importante saber como ejecutar.
There’s also the edge case en el que se tendrá que trabajar en un servidor, and being able to connect to them and do different things will be important.
Git (BitBucket, GitHub, GitLab)
I’d dare to say that this is bread and butter porque al igual que usar shell, es necesario manejar control de versiones de archivos, otherwise your project is going to become a nightmare to manage, especialmente si vamos a tener un equipo de personas trabajando.
Puntos adicionales if you learn to do all of the things using the terminal as well. Hay herramientas gráficas, and I personally use them when I need to understand de dónde viene un rama or how the different branches are created, pero para las tareas que son como el 95% de lo que se hace, la terminal should be more than enough.
In all my 16 years, the most common ones son:
init
add EL_ARCHIVO_O_CARPETA (avoid doing git add . like if it was the plague)
rm FILE_OR_FOLDER
commit -m “Message”
push ORIGIN BRANCH or TAG
pull ORIGIN BRANCH
rebase -i LA_RAMA
merge LA_RAMA
diff
log
checkout
clone
reset
Extra points if you go for understanding bisect, remote, reflog, blame, cherry-pick, stash, revert.
Docker and local dev envs
La contenedorización me ha ahorrado muchos dolores de cabeza. Having containers that already have everything setup for development me ha permitido reducir los tiempos de onboarding for new developers, así como el tiempo para configurar proyectos.
En este punto no digo que debas saber como generar imágenes de Docker or alter them. Basically you just need to learn to setup Docker and use the images for your development purposes.
Then tools like Docker4Drupal, Lando, Docksal or DDEV make it super smooth to get started ya que la comunidad de Drupal las hace parte de su desarrollo estándar. And this saves a lot of time when you are getting started.
Por ejemplo, tener que configurar MySQL o PostgreSQL for Drupal to work could be a super difficult task, pero estas herramientas make it a breeze.
Services: Nginx or Apache (or both), Mysql or PostgreSQL
Understanding how to configure software for specific purposes will be handy en el futuro porque se va a dar el caso donde algo no sirve and you need to mess with config files.
Ahora, esto no es vital, but is definitely something that will make you understand mejor como es que todo funciona junto and will be part of DevOps related career path.
HTML / CSS / Javascript
Un Drupal tradicional no usa ningún framework de JS para la parte del front end y el desarrollo es bastante tradicional. Se requiere tener buenas bases en esta holy trinity.
YAML
A simple language used to describe things. Esto no debería ser muy difícil de entender, dado que es solo una forma de definir cosas that you will later use, for instance, to store configuration values.
A11Y
La accesibilidad es prácticamente una necesidad en este época, as you need to cater for users with different capabilities. Puedes ignorar este punto if you want, but keep in mind that refactors serán más complicados si esto nunca se tuvo como una prioridad and then depending on the project, podría ser que sea trabajo no facturable.
Rendimiento and optmization
Understanding how an application performs and how to improve it va a también ser una habilidad necesaria. Moverse entre capaz y buscar cuellos de botella paga cuentas.
Also take into consideration disk usage, uso de memoria, big O notation y formas para mejorar ejecución y resource usage.
Security
Entender cuáles pueden ser los vectores de ataque for each of the technologies an application uses, including dependencies and keeping up to date en lo referente a nuevas formas de ataque.
Drupal specific technologies
PHP
This is the development language that powers Drupal. Transitioning from languages como por ejemplo C#, Java, Javascript deberían hacer que PHP to be pretty straightforward.
Twig
Sí ya saben HTML, ya tienen alrededor del 80% listo. Twig is a templating engine, akin to moustache y tiene un formato para imprimir variables. It also allows you to manage loops and conditions.
The most advanced stuff regarding Twig is that you can have template inheritance, el uso de bloques para poner placeholders of things other templates can change y finalmente una forma de crear filtros propios.
Symfony
Though not mandatory, it would always give you extra points el entender cómo Drupal usa Symfony y los conceptos que están dentro de este Framework.
Composer
El manejo de dependencias se hace a través de composer. Esto generará un autoloader and this will allow us to add PHP libraries that our system will use.
Understanding how to add dependencies, como actualizarlas y como navegar los comandos de why y why-not va a ser vital cuando tengamos dependency issues.
Conocimiento específico de Drupal
Ya acá nos enfocamos específicamente en lo que es trabajar con Drupal as a Framework (I know you will read online that it is a CMS… y eso es solo parcialmente cierto, la verdad es que tiene mucho para construir aplicaciones).
Core concepts
Entidades de contenido (Usuarios, nodos, taxonomías, usuarios)
Configuration entities (Blocks in Block Layout section)
Fields, bundles (tipos de contenido para nodos por ejemplo)
View modes: Display modes and Form Display modes
Field types and Widget types
El sistema de archivos y donde va every Drupal component that you will use.
Site building
Navigating the UI
Extender funcionalidad con módulos y temas
Configuring the sytem
Using Drush for site management
Uso de views para generar listados
The permission system
Configuration Management
Exporting / Importing configuration
The YAML structure de algunas configuraciones específicas.
Desarrollo de temas
Basic theme file structure
Entendimiento de herencia de temas
Understanding of the YML files a theme can have
Entendimiento de cuales hooks funcionan desde temas
Preprocess functions
Desarrollo de módulos
Basic module file structure
Entendimiento de los archivos YML que puede tener un módulos
Definir librerías
Understanding hooks and preprocess functions
Extender los permisos del sistema
Entity API
Dependency Injection
Entendimiento de Plugins, Annotations, Attributes
Routing and menus
After module development, entender como desarrollar controladores and how they link to the theming part
Extending menus with default entries
Caching
Understanding cache types
Uso de proveedores externos de cache
Understanding cache tags, cache contexts and cache bins
Multi idioma
Understanding how Drupal multilanguge system works (Languages and translation)
Translation framework
Web services framework
Métodos de autenticación
REST
JSON API
Pruebas automatizadas
Creación de pruebas de los distintos tipos que Drupal trae:
Unit tests
Pruebas de kernel
Functional tests
Pruebas funcionales de Javascript.
Drupal DevOps
Entender el proceso adecuado para realizar un deploy
Ejecución de pruebas automatizadas
Security related validations
Wow, that sure was a long list… importante recordar que esto es progresivo, it is not expected for you to know this out of college, pero debería darte una idea del camino hacia ser un architect in this path.
Cuáles serían otras cosas que consideras importantes? Do you disagree on this being a good roadmap? qué cambiarias?




