Cómo hacer crecer a un desarrollador web de aprendiz a arquitecto. Matriz de competencias

En lugar de un epígrafe

Cuando me gradué de la universidad en 2004, casi no había equipos de desarrollo en nuestra ciudad. ¿Dónde trabajar, de quién adquirir experiencia práctica?



La elección fue simple: "admin" o "a Moscú". O dejar la profesión.



Ahora enseño desarrollo web en universidades locales, administro un gran equipo y es importante para mí que los jóvenes inteligentes quieran vivir en mi ciudad para que nuestra ciudad no sea considerada un “lugar podrido”.


La esencia del artículo es breve.



Mis colegas y yo sabemos cómo “hacer crecer” a los programadores web desde “casi cero” hasta el nivel de un profesional seguro (Senior / Architect).



Queremos contarte cómo funciona todo y compartir materiales y métodos con la comunidad.



Este artículo está escrito para estudiantes, principiantes y desarrolladores web en crecimiento.



A continuación se describe la "vía de desarrollo de un desarrollador web", los niveles de competencia "Trainee", "Junior", "Middle", "Senior" y "Architect", como yo los veo, y se dan ejemplos de tareas de certificación.



La pirámide de habilidades del programador o "qué descargar al principio"



¿Cómo convertirse en un buen programador web? ¿Necesito terminar "informática" en una buena universidad? ¿O los cursos mensuales son suficientes? ¿O "con un libro y un ratón" se puede estudiar todo?



Los tres "pilares" sobre los que se sustenta la profesión de cualquier desarrollador en cualquier pila tecnológica son los algoritmos, las bases de datos y la propia programación (lenguaje + POO + patrones).



imagen

¿Qué es la Algoritmización?



Un análogo cercano "cotidiano" de la habilidad técnica de la "algoritmización" es la reparación de ventiladores. ¿Y si no gira? Verifique / cambie el enchufe, luego gire las cuchillas con la mano, luego "haga sonar" el cable.



La lógica es obvia: "Lo dividí en partes y revisé cada una". Sorprendentemente, muchas personas no saben cómo pensar de esa manera. Esto está en la sangre de un programador real.



Base de datos



El curso de DB es uno de los principales, como física para un ingeniero. Lo malo es que a menudo se les enseña igualmente mal: se reducen a "volver a contar párrafos".



Tanto la teoría como la práctica son importantes en DB. El programador debe poder escribir consultas, comprender la lógica ORM y diseñar la estructura.



¿Qué tecnologías necesita conocer un programador?



¿En qué consiste la profesionalidad de un desarrollador? El tiempo aproximado de desarrollo está indicado para la ruta clásica de desarrollo (a partir de la universidad).



Pyramid.png



La algoritmización se enseña "de acuerdo con la mente" en la escuela / universidad. Esto lleva de 1 a 2 años, y este período determina la altura del futuro despegue profesional. Si no dominas los algoritmos, nunca crecerás.



Las características de un idioma en particular se pueden aprender con bastante rapidez. Si está aprendiendo un segundo o tercer idioma, resolverá su primer problema significativo en una semana. Pero "Lo sé perfectamente" tomará al menos un año de práctica.



Los marcos a menudo incluyen cientos de módulos / clases / extensiones y están en constante evolución. Dominar el marco te llevará al menos varios meses.



Muchas personas autodidactas siguen el camino "fácil", pero equivocado: en lugar de algorítmico, comienzan a aprender el marco. Y después de un par de meses, los practicantes declaran que pueden programar. Fallan en entrevistas serias dentro de los 10 minutos posteriores al inicio.



Las tecnologías específicas (por ejemplo, AJAX, renderizado JS del lado del servidor, push & pull, balanceo de carga entre geo-clústeres, generación de perfiles de consultas largas en xhprof, colas de mensajes, bases de datos NoSQL) son infinitas. Puedes aprenderlos para siempre.



Esta pirámide debe atravesarse "de abajo hacia arriba". Si comienzas con un marco y escribes un buen currículum, pero no sabes cómo funciona el "simple JS" o "en qué se diferencia una solicitud de obtención de una publicación", no serás un profesional.



¿Qué tareas hay que resolver?



La primera etapa es "inicio". Primero, necesita la habilidad de una solución segura y correcta para tareas relativamente simples. La mayoría de las veces se trata de problemas de juegos, matemáticos o lógicos.



Para la habilidad "Escribo código simple rápidamente" necesitas resolver cualquiera de las colecciones clásicas de problemas de programación en cualquier lenguaje de programación. Por ejemplo, Zlatopolsky







Puede parecerle extraño resolver 1000 problemas aburridos, pero todo buen programador lo hizo al comienzo de su viaje. Alguien: en el instituto, alguien en la escuela, nuestros hijos lo harán en los jardines de infancia.



Este método de enseñanza por parte de los médicos se llama "método de plomo w * py". Perdóname por ser grosero, pero no puedes borrar palabras del arte popular.



La segunda etapa es la "práctica".Necesitas escribir código que puedas descifrar en un año. Para que cuando aparezcan nuevos requisitos, no tenga que volver a escribir todo desde cero. Para que cuando el proyecto crezca 100 veces, siga siendo “apoyado”. Para que cuando sumen programadores al equipo, no te muerdan por un estilo extraño.



Esta es una transición muy difícil. Muchos programadores nunca lo hacen: se convierten en desarrolladores de “un programa” o siempre escriben proyectos de no más de 200 líneas. Este no es un nivel profesional.



Para aprender, debes resolver grandes problemas en equipo y leer los libros correctos en paralelo. Por ejemplo, el "Código limpio" de Robert Martin .



Las "grandes tareas" son servicios reales utilizados por personas con un equipo de al menos 2 personas y miles de líneas de código. Tales proyectos forman un especialista seguro.



La tercera etapa es "maestría". Implica dominar marcos específicos dentro de la pila de tecnología elegida. Debes aprender a resolver problemas modernos reales a un alto nivel.



Un libro más difícil y útil es Enterprise Application Patterns de Martin Fowler . También hay que leerlo, después de aproximadamente un año y medio de trabajo en la profesión.



¿Para qué? ¿Puedo terminar el curso de “desarrollador web” de 3 meses?



Sorprendentemente a menudo, "programadores como" vienen a las entrevistas. Tienen cursos, múltiples trabajos, portafolios con hermosos sitios web en su haber (extraño, como si estuviéramos buscando un diseñador web).



Al mismo tiempo, la gente muchas veces no sabe la respuesta a la pregunta más simple como “qué son las cookies” o “cómo funciona la carga de mensajes en el feed de VKontakte”, ni siquiera tienen versiones.



Un buen programador conoce la teoría y la aplica en la práctica, pensando todo el tiempo "cómo hacerlo bien". La "médula espinal" y "copiar fragmentos de código de Google" no lo llevarán muy lejos. Necesitas una base y práctica.



¿Cómo conseguir esta "base"? ¿Dónde está el lugar adecuado para estudiar? Hay dos maneras. El primero son 4-5 años en una buena universidad. El segundo son algunos años de auto-estudio y práctica persistentes. Puede convertirse en un programador sólido sin una educación especializada si tiene la cabeza brillante, el corazón abierto y usted mismo está listo para trabajar duro.



Los cursos cortos son útiles para adquirir conocimientos básicos y comprender "dónde profundizar". No harán un profesional.



Matriz de competencias. Pasante - Junior - Medio - Senior - Arquitecto



Creemos que nuestra matriz es la respuesta a la pregunta "cómo pasar de un principiante a un gurú del desarrollo web".

En nuestro mundo, un desarrollador se ocupa principalmente de tareas de backend, pero no debe tener miedo del front-end y la administración (hay especialistas estrechos para tareas malvadas).



Una matriz completa con ejemplos de preguntas de certificación está disponible aquí.



Esta es una tabla dividida en grados (pasante, junior, intermedio, senior). Cada grado contiene un conjunto de competencias únicas. Las preguntas se agrupan por área de especialización (PHP, SQL, Frontend, tecnologías web en general y administración de servidores)



Aprendiz



Al principio, el alumno debe poder:



  • distinguir con confianza las cookies de las sesiones;
  • comprender que se está llevando a cabo una operación específica en el servidor o en el navegador;
  • para escribir una tarea simple de administración de datos en PHP sin marcos de servidor. Por ejemplo, "mantener una base de datos de grupos y estudiantes con la edición, eliminación, creación y visualización";
  • Organiza decentemente el resultado de tu trabajo.


El aprendiz está estudiando. Su tarea principal es adquirir conocimientos, resolver problemas bajo supervisión y conseguir peces gordos.



Casi todos los alumnos eliminan una base, pierden una ventana o resuelven un problema cerrado durante mucho tiempo. Por supuesto, ningún daño a los proyectos de combate.



Los errores son una parte normal del aprendizaje.





Júnior



Junior puede resolver problemas por sí solo. A menudo consulta con los ancianos, pero no hace preguntas a los pasantes en absoluto.





Lo que Junior debería poder hacer prácticamente al principio:



  • reescribir (y eso significa comprender completamente) la autorización en el sitio;
  • edite con confianza la configuración y el código marco del trabajo de directorios, fuentes de noticias, formularios;
  • recopilar interfaces de gestión de datos simples y sitios completos en el marco;
  • escribir una integración simple con una API externa.


Medio



Middle es un especialista que puede resolver por sí mismo cualquier problema típico de la industria.





Prácticamente lo que Middle debería poder hacer al principio:



  • trabajar con autorización externa (iniciar sesión a través de un proveedor externo o convertir su código en un proveedor de autorización);
  • programar con seguridad las interfaces de las tiendas públicas en línea, los mercados o los portales de intranet (según las especificaciones);
  • recopilar interfaces de gestión de datos complejas y secciones del marco;
  • escribir integraciones complejas con API externas, implementar servicios web.


Mayor



Senior conoce "su pila" a fondo, aprende y aplica fácilmente nuevas tecnologías y trabaja como mentor.







Por ejemplo, lo que el propio Senior debería saber y poder hacer en el bloque “Trabajar con servidores y Linux”.



  • Construya un sistema de implementación atípico
  • Trabajando con microservicios.
  • Organización de pruebas de carga
  • Configurar la integración continua
  • Sincronización de archivos y replicación de datos
  • Cree un clúster tolerante a fallas y de alta carga con y sin Bitrix Framework.
  • ELK / otros sistemas de registro y análisis
  • Servidores de cola Gearman / RabbitMQ y sistemas distribuidos de construcción


Normalmente, Senior desempeña el papel de líder técnico del equipo de desarrollo.



Arquitecto



Un arquitecto es el siguiente nivel de desarrollo para un especialista, cuando piensa en la arquitectura de grandes proyectos y lidera su implementación. No solo es técnico, sino también director de proyectos.







Estos especialistas juegan un papel clave en proyectos complejos desde el punto de vista técnico y organizativo.



La calidad de un arquitecto determina la capacidad de un proyecto para completarse a tiempo y desarrollarse durante muchos años seguidos.



Gestión de desarrollo de programadores



Cada mes, con cada programador, realizamos individualmente una “reunión de planificación del desarrollo” y una conversación sobre otros temas sobre el trabajo. El jefe de departamento, el líder tecnológico y / o el mentor están involucrados.



Durante estas reuniones, juntos determinamos las prioridades de desarrollo: aprobar un examen de laboratorio o de competencia oral.



¿Cómo se organiza la verificación de nivel (certificación)?



¿Qué es la atestación? Este es un procedimiento para confirmar las calificaciones de un programador. Todos los programadores lo pasan. La certificación incluye trabajo de laboratorio y exámenes orales.



Como resultado de la atestación, aparece “Sí” frente a las competencias confirmadas en la matriz de competencias. Esto aumenta la calificación, por ejemplo, "Trainee-54%" → "Junior-27%".







¿Cómo va la certificación?



La certificación incluye teoría (examen oral) y práctica (trabajo de laboratorio). El objetivo es “cerrar” varias competencias en la matriz, confirmar el nivel, conseguir nuevas tareas y aumentar los sueldos.



Los ejercicios prácticos solo se pueden realizar correctamente si estudias y comprendes la teoría. No se aceptan trampas ni trampas, y el mentor no se perderá el truco.



Muchos bloques de la matriz de competencias se cierran con la práctica y no hay preguntas teóricas sobre ellos.



Teoría. Examen oral



Las competencias no cubiertas por el trabajo de laboratorio deben confirmarse en un examen oral.



Para cada competencia, hacemos unas 5 preguntas. De manera amistosa, debes responder todo o casi todo. La duración del examen oral depende del nivel, generalmente de 1 a 2 horas.



Práctica. Trabajos de laboratorio



El trabajo de laboratorio cubre varias competencias a la vez. Una vez finalizado el trabajo de laboratorio, estas competencias se contabilizan como confirmadas y no entran en el examen oral.



El trabajo de laboratorio finaliza con un informe. El informe puede incluir una demostración, revisión de código, preguntas orales. El conjunto de controles depende del propio laboratorio.



Redacción aproximada de las tareas.



Hemos desarrollado unas 20 tareas (las solemos llamar "trabajo de laboratorio" para los alumnos). Varios - publicaremos.



A continuación se muestran ejemplos de tareas sencillas.



Tarea 2a. "Web básica". Implementemos CRUD en PHP puro.



Competencias:



  • PHP: autenticación y autorización del sitio
  • PHP: procesamiento de un formulario de comentarios con almacenamiento y validación de datos
  • Interfaz: creación de formularios html
  • Anverso: Selectores y sintaxis CSS, comprensión de los pesos de los selectores
  • SQL: Conceptos básicos de Mysql
  • SQL: tipos de datos
  • PHP: sintaxis del lenguaje PHP


La esencia:



  • crea un repositorio en bitbucket y ejecútalo en él;
  • haga inmediatamente una solicitud de bifurcación y extracción;
  • instale el complemento Statistic en PhpStorm, el número máximo de líneas para todo el proyecto es 1500:
  • cree las tablas necesarias a través de PhpStorm y llénelas con datos;
  • hacer una página de autenticación;
  • hacer una página con un formulario de comentarios, que tiene: un campo de texto, un campo de texto de varias líneas, botones de opción, casillas de verificación, una lista desplegable, un botón de restablecimiento de formulario, un botón de envío de formulario;
  • el formulario de comentarios está disponible solo para usuarios autorizados, el criterio de admisión es que haya iniciado sesión en el sistema;
  • todo está bellamente diseñado, muestre un ejemplo del uso de los tipos básicos de selectores: id, clase, atributo, pseudo-clase, pseudo-elemento;
  • ambos formularios deben procesarse sin JS;
  • compruebe a través de PhpStorm que se están agregando datos a la tabla.


Cheque:



  • se comprueba la calidad de la descomposición de php, js, css;
  • la capacidad de asignar responsabilidades y establecer las dependencias correctas entre los componentes MVC / ECB;
  • acceso de seguridad);
  • seguridad (XSS, inyección SQL);
  • corrección de las redirecciones;
  • la unidad del estilo de codificación.




Desarrollo de la tarea



Tarea 2b. Desarrollo de la interfaz CRUD en PHP.



Competencias:



  • 3 formas de conectar un script
  • Creando formularios html
  • Selectores y sintaxis CSS, comprensión de los pesos de los selectores
  • JS: operadores, funciones
  • Depurar JS usando la consola del navegador
  • Conceptos básicos de Mysql
  • Tipos de datos


En resumen: seguimos trabajando en el sitio desde la tarea 2a:



  1. hacer un mini panel de administración:
  2. una lista de formularios de comentarios enviados;
  3. la lista debe estar ordenada por fecha de envío, las nuevas, primero;
  4. la lista se puede "actualizar", esto se hace usando AJAX;
  5. consejo: para pruebas interactivas de consultas de bases de datos, use la consola de la base de datos en PhpStorm;
  6. el formulario enviado se puede eliminar del área de administración, todo en AJAX;
  7. de esta manera para demostrar todas las formas de conectar JS;
  8. los datos enviados se pueden editar (utilice un formulario ya desarrollado, sin AJAX);
  9. Se puede utilizar jQuery.
  10. herramientas de desarrollador abiertas (preferiblemente Firefox):
  11. busque el origen de la solicitud en el registro de solicitudes;
  12. establecer un punto de interrupción, provocar la ejecución del código, examinar paso a paso la ejecución del código;
  13. durante la ejecución paso a paso, ver los valores de las variables a través del inspector correspondiente;
  14. agregar reloj;
  15. use la consola para acceder a las variables en el ámbito actual.


Cheque:



  1. se comprueba la calidad de la descomposición de php, js, css;
  2. la capacidad de resaltar y establecer las dependencias correctas entre los componentes MVC / ECB;
  3. acceso de seguridad);
  4. seguridad (XSS, inyección SQL);
  5. uniformidad del estilo de codificación;
  6. para demostrar todos los puntos sobre el uso de herramientas de desarrollo.


A continuación se muestra un ejemplo de la



Tarea 10 de "dificultad media".



Competencias de web scraping :



  • Expresiones regulares
  • Solicitudes HTTP del servidor, cURL
  • TODO: escribir utilidades de consola (y scripts únicos) basados ​​en la base de código de Bitrix Framework
  • TODO: agregar CRON


La esencia:



  • Analizar el sitio, pensar en estructuras de datos adecuadas para el procesamiento automatizado
  • Analizar el sitio en estas estructuras
  • Diseño como secuencia de comandos CLI
  • Configuración para implementar la capacidad de analizar no todo, sino solo lo que el usuario necesita


Cheque:



  • corrección del entorno CLI
  • descomposición de expresiones regulares
  • rentabilidad a petición
  • procesamiento de errores
  • la posibilidad de analizar en paralelo varios objetos a la vez
  • Trabajar en consola y modo interactivo
  • * trabajar en el modo de un servicio externo accesible a través de HTTP, con soporte para colas






Ver y descargar la matriz de competencias - 2020



Estoy seguro de que así es como, paso a paso, con un mentor y una constante revisión de código, a través de una cadena de certificaciones, el desarrollador adecuado se desarrolla "de aprendiz a arquitecto".



Los diamantes se forman bajo presión.



All Articles