¿Qué opinas de tales requisitos para un programador Java?

Es importante comprender cómo se escriben los requisitos y cómo funciona realmente la contratación de tecnología (que se ha roto horriblemente durante años). Para un puesto vacante, una persona de Recursos Humanos le pedirá al gerente de contratación una lista de requisitos, y el gerente de contratación enumerará los requisitos que considere necesarios para el trabajo. La persona de recursos humanos puede ayudar a elaborar la lista en una descripción del trabajo, que luego se publicará en algún tipo de forma junto con la lista que ha proporcionado. Tenga en cuenta que, en general, la persona de recursos humanos no tendrá experiencia con la tecnología de software, por lo que depende por completo del gerente de contratación para expresar los requisitos técnicos.

Mirando esta lista, sugeriría que el puesto es probablemente para un trabajo de consultoría, de ahí el deseo de encontrar a alguien familiarizado con múltiples cachés distribuidos y múltiples bases de datos NoSQL. Ahora, podría decirle que estoy familiarizado con todas estas tecnologías, pero eso no significa que las haya implementado en un entorno de producción Java. ¿Quieren a alguien con experiencia trabajando con todas estas tecnologías en producción? ¡Buena suerte! Las personas con ese tipo de experiencia ya tienen un empleo remunerado. Debe leer los requisitos detenidamente para comprender lo que realmente están buscando.

Lo único que es extraño son los requisitos de caché distribuida y NoSQL. Significa que es un puesto de consultoría y están buscando a alguien con experiencia general en estas áreas, o están buscando implementar el almacenamiento en caché y NoSQL pero aún no han elegido una pila.

El resto de la descripción del trabajo es bastante normal para mí. Están buscando específicamente a alguien con habilidades de Spring y Mybatis y experiencia MySQL, lo que significa que el trabajo implica trabajar con esas tecnologías. “TCP / IP y HTTP” significa que pueden estar buscando a alguien que pueda escribir programas basados ​​en sockets, lo cual es algo bastante estándar en Java, y HTML / JavaScript / CSS solo significa que involucra IU basadas en la Web. Verá alguna variación en estos conjuntos de habilidades específicas requeridas según el trabajo, pero estas son habilidades bastante estándar que un desarrollador de Java que se ocupa del software basado en la web tendría.

Entonces, sí, este es principalmente un tipo de requisito de trabajo estándar para un programador de Java. Sin embargo, como señalé anteriormente, la contratación de tecnología está terriblemente rota. Las personas de recursos humanos carecen de las habilidades para evaluar adecuadamente a los posibles candidatos, pero generalmente son los guardianes que revisan la lista inicial de currículums para seleccionar candidatos precalificados. Además, la naturaleza del proceso alienta a muchas personas a enviar hojas de vida para trabajos para los que realmente no están calificados, creando una enorme pila de hojas de vida similares, pero no calificadas, para que las vea esa persona de Recursos Humanos. El resultado es que la persona de recursos humanos generalmente pasa de 5 a 10 segundos por currículum buscando palabras clave o credenciales de grado como el medio principal para las solicitudes de precalificación. Un poco mejor que elegir currículums al azar, pero probablemente no por mucho. Los mejores grupos de RR. HH. Tienen sus propias bases de datos internas de candidatos, pero aún así solo les ayuda a seleccionar con el mismo tipo de criterios. Un poco mejor, pero aún relativamente ciego.

Encontrará este mismo problema en todo el mundo, por lo que estas descripciones de trabajo, digan lo que digan, casi no tienen sentido. Si se encuentra en cualquiera de los extremos de este proceso, como gerente de contratación o buscador de empleo, su mejor apuesta para tener éxito es construir una red de contactos a través de reuniones de redes de software, charlas técnicas, escuelas, conferencias y otras interacciones sociales para que usted obtener exposición personal a tantas personas como sea posible. He encontrado la mayoría de mis mejores contrataciones a través de este tipo de contactos. Siempre es posible encontrar buenas personas a través de un envío de currículum a ciegas, pero la naturaleza del proceso significa que las probabilidades de que ese currículum llegue a manos de un gerente de contratación son bastante escasas.

Para las personas de recursos humanos, los mejores reclutadores de recursos humanos en los campos técnicos tienden a ser reclutadores externos que tienen experiencia profesional en el campo y, por lo tanto, tienen la capacidad de precalificar a los candidatos más allá de solo buscar palabras clave en los currículums. Los departamentos internos de recursos humanos utilizan a estas personas para ayudar a identificar candidatos, pero es costoso para ellos en comparación con depender de reclutadores internos, por lo que prefieren encontrar candidatos ellos mismos. Lo cual, por supuesto, es un trabajo difícil.

Definamos ” familiar” como “se ha utilizado en entornos de producción del mundo real”.

Esto parece un conjunto razonable de requisitos para un ingeniero Java empresarial de nivel superior. La familiaridad con las colecciones es simplemente un juego de mesa, aunque una comprensión adecuada de las colecciones concurrentes y de subprocesos múltiples es muy rara.

La familiaridad con las bases de datos relacionales también está en juego, aunque redis / memcached (confundieron memcache y memcached) es un pequeño tramo. No sé por qué arrojaron JMS allí, pero no es irrazonable.

La lista de bases de datos NoSQL es simplemente un desastre, ¿por qué alguien arrojaría Mongo y HBase a la misma lista? Eso es ingenuo. Es poco probable que encuentren a alguien con ambos. Este es probablemente un requisito que, para muchos desarrolladores de J2EE, deberá relajarse.

Una comprensión práctica de HTTP es, una vez más, apuestas de mesa en estos días. Aunque TCP / IP? De Verdad?

En general, esta es una lista de deseos poco realista, poco ingenua. El candidato final probablemente tendrá profundidad en algún subconjunto de estos. Dicho esto, ciertamente no es imposible encontrar a alguien que conozca uno o dos elementos de cada lista. Por ejemplo, un desarrollador J2EE que conoce HTTP, MySQL, memcached y Mongo.

Para mí, estos requisitos indicarían que la empresa aún no tiene idea de dónde usar al candidato o que tiene un grave problema con el uso de la tecnología en aras de las palabras de moda.

¿Por qué necesitaría estar íntimamente familiarizado con SQL y NoSQL? ¿Por qué JEE y Spring? ¿Por qué y HTML / CSS / JS y por qué no los marcos actuales para este último?

¿Y qué nivel de habilidad indica la familiaridad? Parece ser menos que “habilidades sólidas”.

Si la empresa simplemente quiere ver cuántas de las casillas puedo marcar antes de que descubran cuáles de sus necesidades podría satisfacer, está bien, podría vivir con eso. Pero ciertamente tendría algunas preguntas muy curiosas acerca de su (s) pila (s) de software y conocimiento general de los asuntos técnicos a nivel gerencial.

Creo que la redacción es vaga.

¿Qué es “familiar”? Me considero familiar con TCP / IP porque puedo oler y desensamblar paquetes con WireShark y reconstruir manualmente las tablas de enrutamiento. Si no puedes hacer eso, entonces no te considero “familiar” … eres solo un usuario. No estoy familiarizado con MySQL. Puedo escribir varios dialectos de SQL y sé acerca de las estrategias de optimización de índice y cuándo los B-Trees pierden por Hash Maps, etc., etc. Es por eso que no estoy familiarizado con MySQL. Es un producto de calidad inferior en comparación con PostgreSQL (IMO).

Hay omisiones extrañas (?). ¿Por qué necesitan a alguien con colecciones de conocimiento y bases de datos específicas pero (aparentemente) no les importa si han oído hablar de JDBC?

TL; DR: Creo que los requisitos que pretenden solicitar son probablemente típicos para un puesto de alto nivel, pero lo que realmente piden es incoherente.

¿Qué opinas de tales requisitos para un programador Java?

Los siguientes requisitos son requisitos típicos en las empresas de Internet chinas para un programador de Java. Me pregunto si estos requisitos son esenciales en todo el mundo.

Tales requisitos son muy comunes en todas partes, creo, pero por lo general no significa que deba cumplirlos todos. Familiar significa que puede haberlo usado ya o al menos algo similar. Solid significa que realmente usaste esa tecnología en serio para las aplicaciones de producción. Entonces tienes un conocimiento más profundo de ello.

“Familiarizarse con” significa “no entrará en pánico a ciegas”, y el bit de “habilidades sólidas de Java” es un montón de cosas que rara vez se necesitan.

JMS no es un caché distribuido. Redis tampoco consideraría un caché distribuido.

Usar MySQL es pan y mantequilla. Pero la optimización de MySQL es algo especializada. No todos los desarrolladores Java (¿no muchos?) Sabrían cómo hacerlo a cualquier profundidad, más allá de escribir consultas que no utilicen combinaciones lentas no indexadas.

Entonces, no estoy seguro de qué hacer con esto.

No puedo decir si esto es para un trabajo muy específico (tal vez se requiere la optimización de JVM, aunque no puedo pensar para qué), o simplemente las tonterías habituales de reclutador.

Demasiados reclutadores enumeran un montón de palabras de moda (apenas entienden) con la esperanza de que alguien que afirme tener tanto conocimiento probablemente pase una entrevista. No tiene nada que ver con el trabajo en sí.

Pero si no te venden en el mercado de ganado, no se les paga.

Diría que para muchos trabajos, saber cómo usar Spring DI, usar JUnit para escribir pruebas, poder usar interface / class / List <> / Map <> / for / if / new, entiendo GET / POST / DELETE, sepa cómo un motor de plantillas escupe HTML / XML / JSON, y sepa cómo acceder a una base de datos que está listo para usar.

Entonces, una lista como esta no es esencial en todo el mundo. Pero a menudo lo verás.

Todo esto parece bastante práctico y bastante frecuente en requisitos y prácticas. El único problema es que no hay ningún requisito para que la persona pueda realmente escribir código. Supongo que los requisitos fueron inventados por personas que tampoco saben cómo escribir código. Estas personas copian y pegan código inútil que se ve impresionante y sólido, escribiendo 100 veces más líneas de las necesarias. Pero se vende, entonces, ¿por qué no? Pero es aburrido, por supuesto. Las personas familiarizadas con todo esto, pero no muy capaces de escribir código, simplemente copiarán los errores de otras personas y las soluciones obsoletas. Pero de nuevo, esta mierda se vende.

Estos requisitos no son atípicos para un desarrollador de Java empresarial back-end en un nivel intermedio a superior. Tenga en cuenta que la mayoría de estos requisitos son “familiares”, no “necesarios”. Es un poco inusual ver una demanda de SQL y NoSQL en el mismo requisito que NoSQL no es tan común como SQL.

Quienquiera que sea este requisito está haciendo programación concurrente y multiproceso. Desafortunadamente, decir que quieren familiarizarse con J2EE es como decir que quieres un piloto de carreras familiarizado con los autos. Es demasiado vago ya que J2EE es muy amplio. No se proporcionó información sobre qué tecnologías J2EE específicas se necesitan en el rol. Supongo que la pila web dado el siguiente Spring, MyBatis y HTML / JS.

Honestamente, estos son requisitos de trabajo de mierda. Los requisitos que elaboraríamos para un desarrollador de Java serían mucho más específicos en las tecnologías, exposición, habilidades requeridas y agradables que estaríamos buscando. Enumeraríamos los productos específicos J2EE y específicos del proveedor con los que queremos experiencia.

Pero en todo el mundo? No, esta no es una lista esencial. Es una descripción amplia de una clase de desarrollador Java. Por ejemplo, no muchas tiendas buscarán habilidades de optimización de NIO y JVM a menos que estén haciendo un ajuste de problemas bastante bajo e intenso. Y JMS no es un caché, así que no sé por qué aparece como un caché distribuido.

¿Por qué la necesidad de habilidades Java centrales tan fuertes?

Mirando las otras tecnologías, esto parece un proyecto web: HTML, cachés distribuidos, Sin SQL y MySQL (no Relacional en general, solo MySQL).

¿Es tan esencial la optimización de subprocesos múltiples y JVM? Raramente veo estas habilidades utilizadas en proyectos web.

Estas habilidades son necesarias para un desarrollo serio, pero en la mayoría de los proyectos web, Java solo se está utilizando como lenguaje adhesivo. No hay necesidad de habilidades básicas fuertes.

Depende de lo que quieran decir con “familiar” con una determinada tecnología. No implica experiencia, pero lo que sí implica no está claro. Sin embargo, estos también parecen menos importantes que el primer punto: habilidades sólidas de Java. Estos pueden evaluarse con relativa facilidad con las preguntas de la entrevista Java, pero no está muy claro cómo evaluaría la familiaridad de alguien (lo que sea que eso signifique) con las otras tecnologías enumeradas.

Si está escribiendo los requisitos, consideraría reformularlo un poco. Soy gerente de producto, pero estoy lo suficientemente “familiarizado” con todas estas tecnologías como para poder hablar durante una entrevista de una hora. Estar familiarizado con una tecnología no es lo mismo que tener experiencia. Puede parecer trivial, pero si está buscando a alguien para rockear con Spring en el primer día, es posible que desee decirlo.

¿Para qué es el puesto? ¿De qué son responsables? ¿Se están uniendo a un equipo con un producto existente? ¿Están de pie uno nuevo desde cero?

Creo que los desarrolladores de Java deberían pagar más.

Se supone que no solo debemos saber tantas cosas como casi todo está en Java, sino que también debemos mantenernos al día con las nuevas tecnologías que se presentan cada dos años aproximadamente.

El requisito anterior también me hace pensar que será un rol de contribuyente individual.

Además, los entrevistadores deben ser humildes y amables cuando ponen 10 requisitos y no pueden cumplir al menos uno o dos.

More Interesting

¿Hasta qué edad puede sobrevivir un profesional de software promedio en la industria?

Cómo trabajar de forma remota como ingeniero de software incrustado junior

Practicando en Spoj o Code Chef o Top Coder, ¿cuál debería preferirse si uno realmente no está muy interesado en los Algoritmos pero no quiere dejar esta parte porque esta es una parte integral de convertirse en un ingeniero de software?

¿Qué proporción de su tiempo pasan los grandes gerentes de ingeniería de software trabajando en el equipo, en comparación con el equipo y en todo el equipo?

Como ingeniero de software, ¿cómo lidias con un gerente egoísta, corrupto, astuto y barato que promueve a su miembro favorito del equipo a pesar de su falta de habilidades, en lugar de personas trabajadoras en su equipo?

¿Puede un ingeniero de software convertirse en IAS?

He sido ingeniero de software durante 20 años. ¿Puedo aplicar un puesto de director de ingeniería en otra empresa ahora?

¿Cómo es ser ingeniero de software de procesamiento de lenguaje natural en Facebook?

¿Necesito saber ingeniería de software para hacer una contribución significativa al aprendizaje profundo?

¿Qué tipo de sistema operativo e IDE utilizan los ingenieros de software de Facebook?

Si no puedo realizar una pasantía como ingeniero de software, ¿qué puedo hacer durante el verano para ser un mejor programador?

¿En qué medida debe un ingeniero de software de aplicaciones saber cómo funciona una computadora?

¿Comienza a explotar la burbuja tecnológica?

¿Dónde están los nuevos ingenieros de software del sistema?

Después de hacer un B.Tech (ECE) de una universidad muy mala con malos resultados, quiero convertirme en un ingeniero de software altamente remunerado. ¿Como puede ser? Solo tengo 20 años.