¿Qué buscamos desarrolladores para desarrollar la plataforma 1C: Enterprise?

Nuestro sueño es hacer el mejor juego de herramientas para desarrollar aplicaciones comerciales en el mundo. Tenemos muchas ideas geniales, cuya implementación nos permite cumplir este sueño, desarrollar nuestras herramientas para seguir siendo los mejores. Bueno, para implementar estas ideas en el nivel adecuado, necesitamos programadores geniales.

En resumen, estamos buscando a aquellos que:

  • Me gusta (o está listo para amar) hacer marcos replicados
  • quiere hacer un producto que millones de personas usen

Para mostrar con más detalle qué desarrolladores estamos buscando y cómo, tomamos entrevistas cortas con los gerentes de contratación de nuestra empresa. Se hicieron preguntas durante la entrevista:

  • ¿Qué tipo de desarrolladores necesitas?
  • ¿Qué pides para una entrevista?
  • ¿Qué preguntas prefiere en la entrevista, teóricas o prácticas?
  • ¿Debería un programador escribir pruebas?
  • ¿Hace preguntas no desde el ámbito profesional de la actividad?
  • ¿Establece tareas lógicas para el pensamiento rápido que no están directamente relacionadas con la programación? Tipo de tarea sobre una pelota con helio en un automóvil :


¿En qué áreas pueden trabajar los programadores en el desarrollo de nuestra plataforma? Bueno, por ejemplo:


imagen

Grupo de desarrollo de internet


imagen

El grupo escribe servicios en línea que probablemente son utilizados por millones de usuarios finales de productos 1C. Los servicios, por ejemplo, le permiten obtener información sobre la contraparte por TIN, verificar la confiabilidad de la contraparte, etc. El área de actividad es muy responsable, los servicios operan bajo una gran carga, el tiempo de inactividad del servicio es extremadamente indeseable, por lo que intentamos crear el producto más confiable. También hacemos un producto llamado Sistema de interacción . Este es un mecanismo que transfiere información entre las aplicaciones cliente y 1C: servidores empresariales; con su ayuda, en particular, se implementa el messenger integrado en las aplicaciones 1C.

Desde el desarrollador, quiero que desarrolle el producto en su conjunto: analice las necesidades de los usuarios, piense en la arquitectura y escriba el código. Debido a que las personas a menudo vienen a las entrevistas y dicen que no es interesante para mí analizar el área temática, quiero que el analista me escriba un TOR, según el cual programaré la funcionalidad. Es decir, una persona solo está interesada en los aspectos técnicos de la programación. Tratamos de no contratar a esas personas, porque Tenemos un equipo pequeño, tenemos que lidiar con una gran cantidad de áreas relacionadas. Por lo tanto, los requisitos principales que no están relacionados con las habilidades profesionales son la capacidad de formular de manera hermosa y precisa los requisitos del producto, pensar en la implementación, desarrollar un producto y ser responsable del resultado final. El interés personal de la persona en la calidad del producto final es importante, por lo que la persona fabrica un producto del que le gustaría estar orgulloso.

En el libro de Eric Evans, "Diseño orientado a objetos", una de las ideas principales es que el desarrollador también debe ser un analista, tener una buena comprensión del área temática que automatiza, comprender lo que es valioso para el negocio, y si no lo comprende, entonces no lo hace. podrá desarrollar un buen sistema que satisfaga todos los requisitos del usuario. Si el desarrollador hace un resumen del área temática, entonces no tomará decisiones clave sobre la arquitectura del producto, pero tendrá que implementar estas decisiones, y en este caso existe el riesgo de una implementación de baja calidad. El mismo Evans recomienda distinguir dos partes en el área del dominio: la parte que es fundamentalmente importante para los negocios, la que hace que su producto sea realmente su producto, y la segunda parte, que no es muy importante, que es responsable del agrupamiento de la infraestructura. Y a los mejores desarrolladores se les debe dar la implementación de la primera parte importante.

¿Cómo va la entrevista? Tenemos un cuestionario, unas 10 preguntas que hacemos a los solicitantes. Las preguntas en el cuestionario no son teóricas, sino prácticas, por ejemplo: el código generó una excepción con ese seguimiento de la pila, explique lo que hará. O bien, si tiene una consulta a la base de datos que se ejecuta lentamente (se proporciona el texto de la consulta), hay un plan de consulta, evalúe: si el plan de consulta es incorrecto, debe explicar cómo acelerar la consulta. No tiene sentido preguntarle a una persona qué tipos de UNIONES son, por supuesto, él conoce estos tipos si está incluso un poco preparado para una entrevista. La experiencia práctica de usar estos JOIN es interesante. Si una persona tiene experiencia en el análisis de planes de consulta, no será difícil para él hablar sobre formas de resolver el problema, si no existe tal experiencia, el libro no ayudará aquí. Aquí es donde pasa la línea que distingue al desarrollador que acaba de leer sobre la funcionalidad del desarrollador que realmente utilizó esta funcionalidad. Estamos más interesados ​​en tratar con el segundo tipo de desarrollador, queremos que la persona se "involucre inmediatamente en el juego".

Algunas de las preguntas en el cuestionario ya han dejado de funcionar, y hemos reemplazado estas preguntas por otras nuevas. Por ejemplo, hace algún tiempo, durante las entrevistas, a menudo pedían implementar el patrón Singleton, y cuando el candidato hizo esto, dijeron: ahora que sea flojo. Desde entonces, aparecieron varios artículos sobre Habré, que describían en detalle cómo escribir tales cosas, la gente aprendió esta tarea de memoria y dejó de ser una prueba de idoneidad profesional.

También queremos que los desarrolladores escriban pruebas de manera competente; por ejemplo, que la firma del contrato que debe cumplir el sistema se describe en la firma de prueba. Esto se puede hacer, por ejemplo, en Java en el estilo recomendado por Roy Osher , cuando el nombre del método de contrato se divide en tres partes: "dado", "lo que esperamos", "cuál es el resultado". Y puedes hacerlo en Groovy usando Spock . Es importante si el candidato comprende qué es exactamente lo que debe probarse, si es necesario probar los valores límite, si conoce la pirámide de prueba , etc.

También preguntamos sobre los proyectos en los que la persona estuvo involucrada, especialmente si utilizaron tecnologías que son relevantes para nosotros. Por ejemplo, usamos Hazelcast , hasta ahora pocas personas lo usan en producción (de implementaciones grandes recientes, en Yandex.Money ), y estamos muy interesados ​​en personas con experiencia en el uso de Hazelcast. Además, el candidato puede revelarnos aspectos inesperados y útiles de la nueva tecnología, sobre los cuales aún no conocemos.

Un tema importante para nosotros es cómo escribir código para trabajar en un entorno multiproceso. Por ejemplo, hay varios nodos de aplicación en un entorno altamente cargado, y le pedimos al candidato que le diga cómo hacer que el sistema funcione y sea confiable, mientras minimiza su bloqueo.

¿Debería un programador escribir pruebas? Una visita obligada, pero no todo. El programador debe escribir pruebas unitarias incondicionalmente. Por cierto, nosotros en el equipo no insistimos en el uso obligatorio de ningún método, por ejemplo, TDD ; algunos desarrolladores usan TDD por iniciativa propia, les gusta mucho. También escribimos pruebas de integración. Los desarrolladores también hacen pruebas de carga, escriben planes de prueba para JMeter.

Equipo de desarrollo de clientes web


imagen

Aunque estamos desarrollando un cliente web en JavaScript, preferimos que el candidato, además de tener experiencia en desarrollo web en JavaScript, tenga experiencia en el desarrollo de lenguajes OOP “clásicos”: C ++ o Java o C #. Esto se debe a los detalles del proyecto; Cliente web 1C, escrito en JavaScript, pero más parecido ideológicamente a una aplicación escrita en lenguaje OOP. Cubrimos el código JavaScript con anotaciones JSDoc , por lo que la verificación de tipos estáticos ocurre durante el ensamblaje. Este enfoque se eligió porque utilizamos el Compilador de cierre de Google , que nos ayuda, en particular, a aumentar la velocidad de nuestro código y reducir la cantidad de memoria que consume. Por lo tanto, la experiencia de OOP será de gran ayuda para el candidato.

En la entrevista, preguntamos qué tareas tuvieron que resolver el candidato y su equipo en trabajos anteriores, discutimos la arquitectura de las soluciones implementadas por él. Pedimos a los candidatos tareas, algunas de ellas, sobre ingenio rápido y pensamiento algorítmico. Por ejemplo, hay tareas que se "resuelven" con una gran cantidad de código, y si lo piensa, entonces en una línea.

Hay un grupo de tareas para el conocimiento específico del diseño, en JavaScript. Por ejemplo, dibujamos en una hoja de papel la estructura de una página HTML (la estructura puede ser dinámica, cambiar en el tiempo de acuerdo con un cierto algoritmo) y solicitar escribir un código que creará dicha estructura y la implementará en la dinámica.

También intentamos evaluar la predisposición del candidato a la actividad analítica; no quisiéramos tener un codificador "limpio" en el equipo, incluso si escribe código de alta calidad, pero funciona estrictamente de acuerdo con una especificación técnica fija. Me gustaría que el desarrollador se involucre en las tareas, entienda profundamente lo que se está haciendo en el producto y por qué, idealmente, también fue el impulsor de la nueva funcionalidad.

Si el candidato es un estudiante o el estudiante de ayer, podemos hacer preguntas puramente teóricas, por ejemplo, preguntar los principios básicos de OOP u otra cosa. Si una persona con experiencia, tales preguntas pueden no tener sentido, lo más probable es que el candidato conozca estos principios y los use en su trabajo, una solicitud para formularlos puede llevarlo a un callejón sin salida, porque cursi olvidó la redacción del libro de texto.

Cada entrevista es única. Es interesante hablar con una persona sobre algunos temas, con otra sobre otros. Al final de la entrevista, hablamos sobre nuestro producto, sobre el alcance de su uso (y son impresionantes, nuestro sistema tiene millones de usuarios finales), observamos qué tan interesadas están las personas.

Equipo de escalabilidad de aplicaciones


imagen

Quienes somos


Nuestro equipo es experto en el campo de la construcción de sistemas altamente cargados en la plataforma 1C: Enterprise. Estos ingenieros abordan los desafíos de confiabilidad y escalabilidad. Tales tareas a menudo se encuentran en la encrucijada de la administración y el desarrollo. El resultado de resolver tales problemas es un sistema realmente genial. Ejemplos de tales tareas:

  • Implemente una infraestructura tolerante a fallas en dos centros de datos y simule fallas
  • Garantizar la degradación del rendimiento del sistema con un aumento del número de usuarios en 10 veces, acelerar el cálculo del costo de muchas horas en 3 veces,
  • para investigar y eliminar los puntos muertos que surgen,
  • para garantizar la recuperación coordinada de más de una docena de bases de datos de información distribuida en un momento dado, teniendo en cuenta los intercambios entre estas bases de datos.

Y esta no es una lista completa de tareas. Es especialmente agradable que muchas de las tareas nos lleguen con la frase: "¿Es posible hacer esto?" Es decir La gente no cree al principio. No discutimos y siempre tratamos de convencer para intentar comprobar en la práctica, que hacer. A esto necesitamos agregar una disposición para conectarse en medio de la noche a un gran sistema de clientes, porque los ingenieros locales han roto algo y nadie sabe qué hacer. Más de una vez fue necesario restaurar la base destruida en ausencia de copias de seguridad o averiguar por qué la carga en el sistema aumentó en un 5%. Si lo desea, incluso puede leer comentarios sobre nuestro trabajo.

A quien buscamos


Estamos buscando ingenieros que quieran apasionadamente hacer lo imposible. Uno de los requisitos más importantes para un candidato es quemar los ojos, el deseo y la capacidad de comprender rápidamente lo que no ha encontrado antes, utilizando el conocimiento existente. Estos son ingenieros y desarrolladores de confiabilidad, todo en uno. Imagine que un cliente lo contacta con varios miles de usuarios y le dice que está tratando de poner en funcionamiento un mecanismo complejo que sus ingenieros desarrollaron en el transcurso de un año. Y por cierto:

  • aún no ha logrado terminar el desarrollo ante los requisitos constantemente cambiantes del negocio del cliente;
  • Si bien el desarrollo de mecanismos clave para la implementación está en pleno apogeo, los ingenieros aún no han alcanzado el mecanismo de prueba con miles de usuarios;
  • incluso ahora, nadie tiene idea de por qué, con un aumento en el número de usuarios en esta implementación, exactamente en este mecanismo, la productividad cae bruscamente;
  • el desarrollo se realizó en Windows con MS SQL Server DBMS y, en la etapa final, se tomó la decisión política de implementar PostgreSQL en CentOS y DBMS para estar en el centro de la tendencia de sustitución de importaciones;
  • y accidentalmente descubres que hay tiempos de espera cuando incluso 10 usuarios trabajan;
  • Debe calcular el equipo para este mecanismo, porque el cliente tuvo que comprarlo el mes pasado;
  • comprende que necesita elaborar una implementación paralela de los algoritmos en este mecanismo, coordinarlos con sus colegas y juntos decidir cómo llegarán a tiempo sin introducir nuevos errores.

Sí, y de nuevo: no todos están listos para ayudar a identificar errores y antipatrones en sus decisiones, por lo que debe poder comunicarse de manera muy diplomática con los ingenieros que trabajan en estrés continuo en los últimos meses.

Como nos vemos


Las entrevistas pueden ser estresantes para el candidato. Pero este estrés ni siquiera se puede comparar con el estrés que obtendrá en una situación real si no piensa y utiliza toda su experiencia existente.

El problema de muchos candidatos es que no saben cómo aplicar sus conocimientos y no pueden explicar a su hijo de seis años. Es por eso que durante la entrevista le pedimos periódicamente que nos enseñe algo que el candidato conoce mejor. Naturalmente, realmente quiero reclutar personas de las que podamos aprender mucho. En tales discusiones, la profundidad del conocimiento y una muy buena comprensión son muy importantes. Hubo una experiencia cuando a las 7 de la mañana entrevistamos al candidato, discutimos los componentes de administración de memoria en MS SQL Server y finalmente decidimos comprender las páginas y las extensiones. Luego, HR intervino y dijo: “¡¿Con qué lo estamos atormentando ?! ¿Quién sabe eso? ", Y salimos de la habitación para hablar. Un colega somnoliento y bostezo pasó accidentalmente por el pasillo en dirección al café. Al colega se le hicieron las mismas preguntas, respondió con claridad, correctamente, esencialmente, sin abrir un ojo y continuar bostezando.

Naturalmente, tratamos de probar el conocimiento de las matemáticas, los algoritmos. Más bien, se relacionan con el conocimiento básico. Pero el conocimiento de algoritmos distribuidos y la capacidad de aplicar dicho algoritmo en una tarea será una ventaja segura para el candidato.

Otra forma es pedirle al candidato que se presente en el lugar del desarrollador de 1C y pedirle que implemente algún tipo de tarea aplicada. En una entrevista y estrés del candidato, dicha tarea le permite ver cómo piensa el candidato. Observamos la solución del candidato, ayudamos al candidato a ver un problema tecnológico significativo en su solución, luego observamos cómo el candidato cambiará la solución, sin permitir otro problema tecnológico. A veces hacemos 6-7 iteraciones, buscamos y evaluamos las debilidades de la solución. Al mismo tiempo, inmediatamente se hace posible no solo discutir y comprender lo que una persona sabe, por ejemplo, sobre puntos muertos, sino también si comprende cómo reducir a cero la probabilidad de que ocurra en su código.

El conocimiento de un lenguaje de programación particular no es un factor súper importante. Es más importante cuando una persona piensa en términos de programación usando un lenguaje, y no se limita a construcciones de lenguaje.

Lo que se usa en el trabajo


La primera y más utilizada herramienta es la plataforma de tecnología 1C: Enterprise. Se requiere conocimiento de la plataforma a nivel de administrador y desarrollador. Es decir debe comprender cómo implementar una solución específica y ejecutarla en el sistema para miles de usuarios.

Muy a menudo es necesario analizar el funcionamiento del MS SQL Server y los DBMS PostgreSQL, por lo que el uso de herramientas de creación de perfiles, vistas dinámicas y revistas se incluye en el conjunto de habilidades activas. Y aquí la capacidad de trabajar con grandes volúmenes es importante. Un bloc de notas estándar de Windows no es muy conveniente cuando se trabaja con 1 TB de registros de texto con consultas generadas por máquina y sus planes. Inmediatamente es necesario conocer las expresiones regulares, así como un conjunto completo de herramientas e idiomas que las soporten. Para analizar los planes de consulta, debe comprender qué son los índices y cómo la combinación de combinación difiere de la combinación hash.

Los sistemas en el mercado empresarial a menudo se ejecutan en Linux. No hay entorno gráfico en los servidores. Las habilidades de la consola son bastante importantes.

Imagine lo que necesita para descubrir por qué la carga de la CPU en los servidores PostgreSQL en CentOS por procesos Postgre aumentó en un 5%. Intenta escribir en una hoja de papel el algoritmo de tu investigación. E inmediatamente hay una comprensión de lo que se necesita

  • poder aplicar no solo el tiempo de actividad , vmstat , sar , atop , perf ,
  • sepa cómo usar pgbadger , psql y configurar el registro en postgresql.conf,
  • poder encontrar una consulta deseada,
  • usar analizar, analizar su plan,
  • reescriba la solicitud y verifique que la carga haya disminuido.

Lo que es importante para nosotros


Es muy importante que una persona piense a gran escala y siempre trate de ver el panorama general. Por ejemplo, la mayoría de los candidatos, resolviendo la tarea de ordenar un archivo de texto, ofrecen un algoritmo adecuado para ordenar un archivo de 10 MB. Pero cuánto cambian su comprensión y su punto de vista cuando se enfrentan a clasificar un archivo de 10 TB en condiciones de memoria limitada y espacio en disco. Y debe recordar que el costo de acceder al disco es mayor que el costo de acceder a la memoria. Realmente quiero que el candidato piense "a escala" en todas las tareas.

1C: Grupo de Desarrollo de Plataforma Empresarial


imagen

Lo principal que se requiere de nuestro equipo de los candidatos es la capacidad de pensar analíticamente, analizar a fondo el problema y la capacidad de sopesar las soluciones. La plataforma 1C: Enterprise tiene un ciclo de desarrollo bastante largo (meses), por lo tanto, es imposible, como en el desarrollo web, implementar la funcionalidad en partes, paso a paso. Esto requiere la capacidad de pensar profundamente al considerar los detalles de la implementación, debe intentar hacer "todo a la vez". Es decir no usar el primer método disponible sobre el que leí ayer en Habr para resolver el problema, sino sopesar cuidadosamente todos los pros y los contras de varias soluciones.

Entender en la entrevista si el candidato tiene tales cualidades no es tan simple. La forma más relevante es hablar sobre la experiencia previa del candidato. Cuando una persona dice qué solución genial se le ocurrió, preguntamos, ¿y qué problema, de hecho, se resolvió? ¿Por qué se eligió esta solución particular y no otra? Y si las condiciones del problema han cambiado un poco, ¿cómo habría cambiado la solución? Al hacer varias preguntas similares, puede comprender cuán profundamente estaba inmersa la persona en el tema.

Hay otro aspecto ilustrado por la frase: "Contratamos a aquellos que saben trabajar, y luego, por alguna razón, queremos que quieran trabajar". Por lo tanto, en la entrevista quiero entender qué es el trabajo para una persona. Si para él este es un pasatiempo agradable que le permite ganar dinero, entonces, con un alto grado de probabilidad, nada bueno saldrá con el candidato.Para la mayoría de los desarrolladores profesionales, su trabajo es lo más interesante que han tenido que hacer, la investigación, el deseo y la capacidad de crear algo nuevo. Una persona que viene a nosotros debe estar lista para estudiar, estudiar y estudiar. No solo necesitamos artistas, necesitamos personas que nunca se cansarán de estudiar, tenemos que estudiar mucho y constantemente en nuestro trabajo.

¿Qué más le gustaría ver con el candidato son las habilidades de ingeniería, es decir, en sentido figurado, la capacidad de ensamblar una solución elegante a partir de cubos?

El conocimiento requerido de los lenguajes de programación depende del área de desarrollo de la plataforma para la que se busca el candidato. El núcleo de la plataforma es C ++ y Java, el cliente web es JavaScript y es deseable conocer los conceptos básicos de C ++, algunos proyectos requieren conocimiento de 1C, pero el conocimiento de otros lenguajes y tecnologías es altamente deseable. Tenemos que crear muchas cosas nuevas para el mundo de 1C, queremos que la perspectiva y la erudición de los desarrolladores les permita operar con ideas y conceptos inventados en otros lenguajes y tecnologías, y comprender cómo aplicarlos bien y correctamente en los lugares correctos al desarrollar soluciones de 1C. Por ejemplo, para desarrollar nuestro producto en la nube 1cFreshEscribimos varias herramientas, principalmente para la administración, en 1C (en 1C son más rápidas de desarrollar que en los lenguajes tradicionales). Si un desarrollador comprende los patrones de tecnologías y lenguajes utilizados por los administradores del sistema (bash, Python, Perl), esto lo ayudará a crear una herramienta fácil de usar.

Si estamos entrevistando a un estudiante, podemos pedirle que calcule su integral y explique por qué la integral se considera así. El estudiante senior promedio ya no recuerda el significado de la integral, y un estudiante concienzudo y entusiasta recuerda muy bien el significado y puede explicarlo.

Si tenemos un administrador del sistema, podemos preguntar, por ejemplo, sobre las peculiaridades de la manipulación de RAM en Linux. Si una persona trabaja con un DBMS, preguntamos, por ejemplo, qué niveles de aislamiento de transacción existen, qué candidato prefiere usarlo y por qué. Si, por ejemplo, una persona trabajó en la sincronización de varias bases de datos, discutiremos con él qué hacer si una de las bases de datos sincronizadas se restableció repentinamente desde una copia de seguridad. Un problema arquitectónico típico que se puede resolver de diferentes maneras.

También me gustaría ver el deseo de cambiar el mundo para una mejor y saludable parte del perfeccionismo como candidato. Sin una cantidad razonable de perfeccionismo, es difícil escribir código que funcione durante años en implementaciones muy diferentes.

¿Debería un programador escribir pruebas? El programador debe emitir un producto que funcione. Si es un programador adulto, a nadie le debe importar cómo lo hace. Si se trata de un programador novato, se le recomienda escribir pruebas. Un desarrollador serio finalmente comienza a entender qué pruebas deben escribirse para el código que crea, donde hay secciones débiles de código que están mejor cubiertas por las pruebas. Estamos en contra de la cobertura de prueba global sin sentido. El programa funciona correctamente, no porque estaba completamente cubierto de pruebas, sino porque el desarrollador se volvió de cabeza. Las pruebas son una herramienta auxiliar para protegerse de los errores en los lugares más difíciles de un programa. Y debemos recordar que las pruebas no son una panacea para los problemas arquitectónicos. Lo más importante, una persona debe girar sobre su cabeza.

De las preguntas que no son de TI, a veces hacemos esta pregunta, y ¿por quién se ve una persona en 3-5 años? Creemos que trabajaremos junto con una persona si sus aspiraciones de desarrollo coinciden con la forma en que la empresa ve su desarrollo.

Es críticamente importante evaluar dos cosas. El primero es dónde está la persona ahora, qué experiencia y conocimiento tiene ahora, qué nivel de tarea puede resolver en este momento. El segundo es lo que una persona en un entorno favorable está lista para convertirse en unos años. Y así, por supuesto, durante estos pocos años, trabajó en nuestra empresa, resolvió problemas, creció profesionalmente. Nos interesa aún más no lo que es una persona ahora, sino quién será en un año, dos o tres. La perspectiva siempre es más importante para nosotros que el estado actual de las cosas. Para nosotros, un recién llegado más prometedor es más interesante que una persona con grandes logros, pero sus ojos se quedan en blanco.

1: –


Por lo general, comenzamos la entrevista con preguntas: ¿cuál fue su proyecto más interesante, su proyecto favorito? Realmente quiero entender de inmediato qué hace que una persona se ilumine en el trabajo y si se ilumina en el trabajo en general.

Luego se pregunta si una persona tuvo que optimizar el rendimiento de los programas, como lo hizo.

Preguntamos qué métodos de prueba utilizó el candidato en sus proyectos, cómo construye una estrategia para probar el proyecto, podemos preguntar: tenemos un sistema con dicha funcionalidad declarada, ¿cómo lo probaremos?

Si la entrevista es sobre un desarrollador de Java, preguntamos sobre el trabajo del recolector de basura; una persona que desarrolla programas más o menos complejos debe ser consciente de los matices de su trabajo y de cómo escribir código detrás del cual el recolector de basura elimina eficientemente la basura.

De los temas que no son programadores, es interesante preguntar acerca de los negocios: qué tarea desde el punto de vista de los negocios fue resuelta por el proyecto favorito del candidato, qué beneficio trajo. Ver el panorama general es una propiedad muy valiosa para el desarrollador. Una vez que hubo un candidato que hizo la cadena de bloques, su historia fue muy informativa.

Establecemos tareas de diseño, le pedimos al candidato que diseñe un sistema simple. Luego miramos el proyecto juntos, buscamos defectos, discutimos cómo eliminarlos. Es muy importante cómo responde el candidato a los comentarios.

Asegúrese de hablar sobre lo que estamos haciendo, es decir, estamos creando la plataforma 1C: Enterprise. Hablamos sobre cómo podemos trabajar en cosas de alta tecnología, por ejemplo, en un clúster de servidores o en una plataforma móvil .

No obligamos a los candidatos a escribir código en papel. Pero dibujamos mucho en papel durante la entrevista, dibujamos la arquitectura del sistema, los diagramas de módulos y una imagen de su interacción.

El conocimiento de idiomas específicos no es crítico. Sucede que una persona llega a la empresa como desarrollador de C ++, como desarrollador de C #, y aprende C ++ con bastante rapidez. Y hay muchos ejemplos de colegas que han aprendido nuevos idiomas en el curso de su trabajo. Si hay un deseo y conocimiento de uno de los idiomas, entonces aprender un nuevo idioma no es un problema.

También pedimos que una persona lea si Habr y stackoverflow, o incluso libros sobre una especialidad, y cuáles. A veces encontramos libros útiles de esta manera.

Grupo de Desarrollo de Mecanismos de Reporte


imagen

Necesitamos desarrolladores hardcore de C ++. Nuestro equipo está involucrado en mecanismos de informes, lo que significa que nuestro código funciona mucho con grandes cantidades de datos, y necesitamos un buen conocimiento de los contenedores y algoritmos.

En la entrevista preguntamos qué bibliotecas utilizó el candidato en su trabajo, qué algoritmos. Usamos mucho STL , por lo que preguntamos activamente sobre esta biblioteca, qué contenedores utilizó el desarrollador, para qué tareas. Por ejemplo, le pedimos que escriba un código que ponga una clase particular en el mapa y un par de tareas más similares. Para tales tareas, puede ver inmediatamente qué nivel tiene el programador frente a nosotros.

Raramente se hacen preguntas sobre teoría de programación. Creemos que el conocimiento práctico es más importante. Si una persona resuelve bien el problema, aplica con éxito la teoría en la práctica, no es tan importante que no recuerde la formulación exacta de los principios básicos de la POO.

Por cierto, si un estudiante asistió a una entrevista y, debido a la falta de experiencia, aún es difícil hacer frente a las tareas propuestas, haremos un descuento en esto. Ya tiene sentido conducirlo en teoría, preguntar sobre sus intereses profesionales. Si una persona se ve prometedora como un especialista, tiene sentido darle la oportunidad de desarrollarse con nosotros como un buen profesional.

Un criterio bastante importante para nosotros es la voluntad de entender el código de otra persona. La plataforma 1C: Enterprise es un gran producto, más de 10 millones de líneas de código, una colisión con este código en el trabajo diario es inevitable, al menos al nivel de incorporar su propio código.

Preguntamos cómo el candidato prefiere que se le asignen tareas, en forma de una especificación detallada, o simplemente estableciendo la forma de "hacer tal y tal mecanismo". Entendemos y aceptamos ambos enfoques, no rechazaremos a un buen programador solo porque necesita analizar la declaración del problema; Es simplemente importante para nosotros entender de inmediato cómo trabajar con una persona. Pero quiero que el empleado se desarrolle en la dirección de una mayor independencia en el futuro, para poder asumir la responsabilidad de una dirección separada. Puedo dar ejemplos de direccionesLista dinámica o diagramas . Y quiero que el empleado desarrolle esta dirección: descubra las necesidades de los usuarios de este mecanismo, comunicándose con los usuarios en foros y conferencias, compile listas de nuevas características, priorícelas, comprenda los problemas del mecanismo y sugiera soluciones. Si una persona está interesada, puede desarrollarse como líder del equipo, comenzando con la supervisión de los estudiantes internos de nuestro Centro para Jóvenes Especialistas y luego liderando a su equipo. Bueno, si una persona por naturaleza es un desarrollador "limpio" que prefiere trabajar en TK y no está muy interesado en comprender las necesidades de los usuarios, bueno, necesitamos esas personas.

¿Debería un programador probar? Por supuesto! Un programador que no hace pruebas es como un cocinero que no prueba lo que ha preparado. Por supuesto, no puede requerir que el programador complete pruebas en todos los entornos compatibles (Windows, Linux, macOS, la web y el cliente móvil), pero debe verificar la funcionalidad básica en el sistema operativo actual. Bueno, incluso mejor si escribes una prueba automática. Esta será una prueba de regresión lista para usar, que se incluirá en la biblioteca de prueba y se ejecutará regularmente al cambiar en el área correspondiente del código.

1C Development Group : Herramientas de desarrollo empresarial


imagen

1C: Enterprise Development Tools está escrito en Java, y estamos buscando desarrolladores y evaluadores con conocimientos de Java. Estamos buscando personas con ojos ardientes, tanto profesionales ya iniciados con potencial. El conocimiento de Java es necesario para nosotros, así como el conocimiento de algoritmos y estructuras de datos, programación multiproceso; Desafortunadamente, en nuestro equipo, no podemos permitirnos esperar hasta que el nuevo desarrollador aprenda estas cosas. Pero el conocimiento de los marcos específicos que utilizamos ( EMF , Xtext , GEF , Lucene , Handly , ...) es una ganga. Si puede ver que una persona es muy consciente y se siente cómoda hablando con ella, significa que encajará en el equipo y recibirá rápidamente los conocimientos necesarios.

En general, encajar en el equipo es probablemente el criterio principal para nosotros, junto con la profesionalidad. Nuestro equipo es un equipo de entusiastas, no queremos diluirlo con personas de diferente naturaleza. Y una persona con un carácter diferente en nuestro equipo probablemente se sentirá incómodo trabajando. La señal de alerta inequívoca para nosotros es una forma de comunicación irrespetuosa. Una persona puede ser un muy buen profesional, pero si no puede comunicarse respetuosamente con sus colegas, no nos conviene. Tenemos un juego, puramente un equipo.

La peculiaridad de la educación de instituto es que las masas de los institutos no enseñan programación industrial. Enseñan sintaxis, construcciones de lenguaje, algoritmos. Pero la capacidad de escribir código documentado, acompañado, que contiene las posibilidades de desarrollo, extensibilidad, se enseña muy poco dónde. Por lo tanto, en una entrevista, un tipo de tarea muy importante son las tareas de diseño. Por ejemplo, preguntamos cómo escribiría el candidato tetris, qué componentes dividiría el proyecto, qué interfaces diseñaría para que los componentes interactúen entre sí. A continuación, complicamos el introductorio: por ejemplo, decimos que el tetris será tridimensional (o se agregarán nuevos tipos de formas, o las formas caerán desde diferentes lados) y ver qué tan bien el diseño elegido se adapta a las condiciones cambiantes. En general, una de las principales tareas de la entrevista es comprendercuán flexible y amplio puede pensar el candidato. Y, por supuesto, el programador debe escribir pruebas, al menos pruebas unitarias, y las pruebas de integración serían buenas. La pregunta estándar para la tarea de diseño es ¿cómo probará el sistema diseñado?

Bueno, para un probador, ¡la capacidad de pensar ampliamente es aún más valiosa! Hay una broma bien conocida de cómo el probador probó la barra: ordenó una cerveza, 2 cervezas, 0 cervezas, 999999999, –8 cervezas, cerveza qwertyuip, y después de que el proyecto se presentó a la producción, el cliente fue a la barra y preguntó dónde el baño La habilidad principal del probador es crear escenarios no estándar (y al mismo tiempo realistas); Los scripts estándar, como regla, son desarrollados por el propio desarrollador.

Conclusión


Cómo no proporcionar un enlace para abrir vacantes aquí :)

Y puede enviar un currículum a job@1c.ru .

Source: https://habr.com/ru/post/es432672/


All Articles