¿Debería buscar desarrolladores con conjuntos de habilidades específicas o generalistas que necesiten aprender? [cerrado]

8

Gracias a la gran ayuda de este sitio y SO, he podido hacer un prototipo de un software que quiero vender, pero desafortunadamente, aunque el prototipo funciona, creo que la calidad de mi código es muy baja. No utilicé muchos OOP o patrones de diseño, así que aunque mi código es comprensible para mí, creo que un desarrollador normal se desmayaría si tuviera que leerlo.

Por lo tanto, quería contratar a un desarrollador para que tuviera un poco más de calidad y mejorar algunas de mis implementaciones de API que tal vez no haya hecho correctamente. Aunque tengo problemas para contratar a un desarrollador.

Conocí a 2 desarrolladores y les pedí que leyeran las especificaciones de mi software. El problema es que carecían de los conocimientos de dominio de mi empresa (lo cual es completamente comprensible y nada importante), pero tampoco tenían conocimiento de los sistemas tecnológicos subyacentes que utilicé, como Hadoop, Hbase, Cuda, etc. Pasé mucho tiempo explicando map / reduce, bigtables y otras tecnologías que utilicé. Pensé que era de conocimiento común debido a mis interacciones con las personas en este sitio, pero las personas que conocí mencionaron que nunca tuvieron que lidiar con estas cosas, por lo que no lo sabían.

Mi pregunta es, para los proyectos de software que contratan desarrolladores de contratistas, ¿es peligroso si el desarrollador no tiene experiencia con las tecnologías subyacentes? ¿O puede un desarrollador general que se realiza en otra área de manera realista aprender nuevas tecnologías? Hice un cálculo muy rápido del reverso del sobre y creo que los costos iniciales serían similares si contratara a un estudiante o desarrollador sin experiencia en mis tecnologías que trabaje muchas horas en lugar de contratar a un desarrollador altamente experimentado que cobra el doble pero termina a la mitad el tiempo, pero ¿qué otros riesgos debería considerar o preocuparme? Además, si contrato a un generalista, debería estar pagando por el tiempo que les toma aprender hadoop o cuda si son contratistas (parece tener sentido comercial pero no estoy seguro de qué tan justo es para ellos si no usan el habilidad de nuevo).

Estoy un poco confundido, por lo que cualquier sugerencia sería genial.

Alma perdida
fuente
1
"¿O puede un desarrollador general que se realiza en otra área de manera realista aprender nuevas tecnologías?" Bueno, por supuesto, de lo contrario, ninguna tecnología nueva desde hace décadas se habría puesto de moda.
DarenW
66
I think a normal developer would faint if they had to read it- Eso es algo de honestidad allí mismo.
Joel Etherton el
¿Qué lenguaje de programación?
GlenPeterson
1
"Hadoop, Hbase, Cuda, etc. Pensé que era de conocimiento común" ... Me sorprende que lo pienses. Puedo estar equivocado. Me sorprendería más si lo fuera.
NoChance
1
Los desarrolladores que tienen la inclinación a trabajar "fuera del horario laboral" lo hacen en sus propios términos, generalmente trabajando con sus compañeros en proyectos favoritos, y casi siempre tienen baja tolerancia para los códigos pobres y los no programadores que realizan la programación. Es como pedirle a un mecánico que venga (después de que termine su trabajo de 9 a 5) y que lo ayude a volver a armar su automóvil después de intentar algunas reparaciones el fin de semana.
mattnz

Respuestas:

19

¿Es peligroso si el desarrollador no tiene experiencia con las tecnologías subyacentes?

Si. (El aprendizaje lleva tiempo, y cometer errores es a menudo parte del proceso).

¿O puede un desarrollador general que se realiza en otra área de manera realista aprender nuevas tecnologías?

Si. (Escoger nuevas tecnologías es algo que los generalistas hacen todo el tiempo. No duras mucho como programador si no puedes aprender cosas nuevas).

Creo que los costos iniciales serían similares si contratara a un estudiante o desarrollador sin experiencia en mis tecnologías que trabajará muchas horas en lugar de contratar a un desarrollador altamente experimentado que cobra el doble pero termina en la mitad del tiempo

Tenga en cuenta que hay una gran diferencia entre "sin experiencia con tecnología X" y "sin experiencia, punto". Una cosa es tener que aprender un nuevo marco o lenguaje, y otra muy distinta es comenzar su primer trabajo como desarrollador y no tener a alguien con alguna experiencia que lo oriente en la dirección correcta.

¿Qué otros riesgos debería considerar o preocuparme?

Las decisiones que se toman durante el proceso de diseño y desarrollo pueden ser difíciles y / o costosas de cambiar más adelante. Un desarrollador inteligente y experimentado puede ahorrarle mucho más que solo horas de desarrollo. Por otro lado, alguien que sea realmente bueno en lo que hace podrá cobrar en consecuencia.

Estoy un poco confundido, por lo que cualquier sugerencia sería genial.

Quizás el artículo de Joel Spolsky ayude: La Guía Guerrillera para las Entrevistas . En pocas palabras, Joel dice que busca dos cosas: 1) inteligente, 2) hace las cosas. Más allá de eso, sugeriría buscar a alguien con quien pueda trabajar, y que entienda lo que está tratando de lograr y trabaje para lograrlo con usted.

Caleb
fuente
4

Supongo que si un novato puede hacer exactamente las mismas cosas por la mitad del precio en dos veces, todo funciona. Siendo realistas, habrá problemas que su novato no resolverá y dificultades que no pueden evitar. No creo que obtengas un código similar. Vas a terminar bajando tus expectativas.

Es más probable que este sea el caso cuando se trata de diseño. Pague la tarifa adicional para que el desarrollador experimentado trabaje en el diseño. Puede usar el novato para ayudar con el volumen de codificación si cree que es rentable.

JeffO
fuente
3

Si. Ambos.

Idealmente, podría encontrar a alguien en el medio que necesitaría una ventaja, pero no para que alguien lo lleve con conocimientos técnicos o de dominio. Sin embargo, muchas fuerzas afectan el problema de personal que está tratando de resolver.

¿Por qué hay una escasez de habilidades de dominio?

Los desarrolladores son un grupo itinerante, que se mueve de un dominio de aplicación a otro según lo exige el mercado. Si algo está de moda, diez o tal vez cien o incluso mil empresas lo perseguirán hasta que la competencia expulse del mercado a todos menos a un puñado de jugadores. En consecuencia, los incentivos para que los desarrolladores profundicen en su precontratación de conocimiento de dominio empresarial es zip. Si está haciendo algo bastante novedoso, no encontrará otros con conocimiento de dominio. Si tiene competidores, o particularmente ex competidores, no debería tener que renunciar a su búsqueda de experiencia en el dominio.

Si contrata a un desarrollador de hot shot, pueden estar más interesados ​​en desarrollar habilidades portátiles, por lo que aún puede verse obligado a tener mucho peso para el conocimiento del dominio. Quizás debería considerar pedirle a un ingeniero de sistemas que documente el conocimiento del dominio relacionado con las características para que el desarrollador lo use. Quizás entre inteligente y hacer las cosas, elegirás a alguien fuerte en las cosas hechas. Si puede encontrar un desarrollador que esté interesado en estar con usted por un tiempo, aprendiendo tanto su negocio como su tecnología, que coloque las necesidades de su empresa en igualdad de condiciones con las suyas, eso puede ser mejor a largo plazo que el tipo inteligente cuyos planes involucran subir y, con bastante frecuencia, salir.

Habilidades de alta demanda

Si está haciendo algo que tiene una gran demanda, debe hacer mucho más para atraer candidatos. Si su visibilidad es baja y lo que tiene que ofrecer a cambio es menos estelar que la competencia, es posible que deba pagar mucho más o aumentar el talento que necesita de un grupo de candidatos con otras habilidades.

¿Habilidades de dominio o habilidades tecnológicas?

En la pregunta, mencionas varias habilidades de las que carecen tus candidatos, incluidas Hadoop, Hbase, Cuda, map / reduce y bigtables. No estoy seguro de que llamaría a estas habilidades de dominio porque se basan en la tecnología en lugar de los detalles de hacer un producto que sea específico de la industria para sus clientes. Sospecho que cada una de estas habilidades es portátil y seguirá siendo valiosa después de que su industria en particular se haya automatizado y haya dominado, encontrado un nicho o pasado a otra cosa.

El crecimiento de la habilidad técnica atrae a buenos candidatos

La ventaja de contratar y capacitarse en habilidades tecnológicas es que el desarrollador inteligente, capacitado, agresivo y orientado a la carrera que se entrena aprovechará la oportunidad de aprender algo con un futuro largo y gratificante. Si mantiene desafíos y una nueva combinación de tecnología manejable, muchos de los desarrolladores que desea adoptarán ser uno de su equipo para beneficio mutuo a corto y largo plazo.

DesarrolladorDon
fuente
2

¿Es peligroso si el desarrollador no tiene experiencia con las tecnologías subyacentes? ¿O puede un desarrollador general que se realiza en otra área de manera realista aprender nuevas tecnologías?

Un desarrollador puede recoger tecnologías (y lo harán, eventualmente) pero no creo que cumpla con sus requisitos.

Tiene un software que funciona, pero desea que lo revisen, refactoricen y quizás incluso reescriban. Realmente necesita un experto o al menos alguien con experiencia en un par de sus tecnologías para poder hacerlo, porque aunque existen patrones de software, las implementaciones varían entre plataformas y marcos debido a la singularidad de la plataforma y el marco.

Usted resolvió los problemas comerciales y dominó el dominio, y ha implementado el software. Ahora está buscando orientación técnica para permitir que su aplicación escale y viva una vida larga y saludable. Desea a alguien que haya hecho esto en un sistema similar, o utilizando una tecnología similar.

Las diferentes plataformas a menudo requieren mentalidades y experiencias completamente diferentes. ¿Supongo que estás trabajando en un proyecto de tipo big data / cómputo paralelo? Un desarrollador web o un desarrollador de integración debería poder reescribir su prototipo y hacer que funcione también, pero ¿por qué asumir que podrían hacerlo mejor que usted?

No esperes a la persona perfecta, porque puede que no exista, pero tu desarrollador debe estar familiarizado con al menos algunas de las tecnologías y conceptos que estás utilizando o, como dicen en los anuncios de empleo, demostrar la capacidad de rápidamente Aprender nuevas tecnologías y conceptos . Si no han oído hablar de Hadoop o MapReduce, entonces las alarmas deberían sonar, a lo grande.

Kirk Broadhurst
fuente
1

Realmente está solicitando una revisión de código y / o capacitación. Especialmente para la revisión de código, un grupo de programadores experimentados con diversos antecedentes es lo mejor. Cuando todos estén de acuerdo, haz lo que te digan. Cuando todos tienen una opinión diferente, estás haciendo lo correcto. :-)

Si usa mapReduce, CUDA y Hadoop y quiere un solo revisor, contrate al experto. Mi primera opción sería buscar a alguien con experiencia además de la escuela. También considere capacitarse, unirse a grupos de usuarios, etc. Es posible que pueda tomar algunas preguntas individuales clave y mostrarlas a sus amigos si tiene ese tipo de amigo.

¿Programmers.StackExchange permite a las personas publicar código para críticas? Si es así, elegiría no más de una página. Elija algo que sepa que está mal, pero no sé por qué.

¿Que lenguaje de programación estas usando?

GlenPeterson
fuente
[ codereview.stackexchange.com]
Kirk Broadhurst
0

Tomaría la total falta de familiaridad con lo que Hadoop / MapReduce incluso son como una señal de advertencia de que el desarrollador podría no estar haciendo ningún intento de mantenerse actualizado.

Dicho esto, eso es solo una señal, no una no contratación. Dales FizzBuzz o algo por el estilo, y si pasan, muéstrales tu código y pide una crítica. Quizás elija algo con un error deliberadamente, pero también algo que piense que está bien, ya que esa discusión será más interesante.

Ricky Clarkson
fuente
0

Es difícil dar consejos sobre esto. Solo algunos pensamientos:

Creo que los costos iniciales serían similares si contratara a un estudiante o desarrollador sin experiencia en mis tecnologías que trabajará muchas horas en lugar de contratar a un desarrollador altamente experimentado que cobra el doble pero termina en la mitad del tiempo, pero ¿qué otros riesgos debería considerar? ¿preocupado por?

Forma lo que has escrito en tu introducción:

  • my code quality is very low
  • I didn't use much OOP
  • I wanted to hire a developer to make it a bit more better quality and improve some of my implementations

Responder esto debería ser obvio :

Si contrata a un desarrollador sin experiencia , es muy poco probable que pueda aumentar la calidad del código . Un programador sin experiencia no es de ayuda .

Aunque puede ser más barato a corto plazo, contratar a un novato , ¡está pagando más tarde !

¿Qué otros riesgos debería considerar o preocuparme?

No cometa el error de calcular solo los costos, para que usted y su producto estén en funcionamiento. Más importantes son los costos de mantenimiento .

Como consecuencia directa, de lo que dije en el párrafo anterior, debe considerar lo que se llama Deuda Técnica . Como dijiste: la base de código no está en buena forma, por así decirlo, ya hay una deuda técnica . Y con la contratación de trabajadores no calificados, está aumentando la deuda . Tal vez en algunos años a partir de ahora, termine con una base de código inmanejable y tenga a) comenzar de nuevo yb) perder eventualmente clientes, lo que equivale en ambos casos: pérdida de dinero.

Además, si contrato a un generalista, debería estar pagando por el tiempo que les toma aprender hadoop o cuda si son contratistas (parece tener sentido comercial pero no estoy seguro de qué tan justo es para ellos si no usan el habilidad de nuevo).

Claramente: ¡Sí! No veo ninguna razón para no hacer esto. Necesitan el conocimiento, usted necesita que lo tengan, así que sí.

Si son buenos desarrolladores, deberían familiarizarse fácilmente con la tecnología nueva, o al menos nueva para ellos. Hay muchas posibilidades de que si se toman su trabajo en serio, tengan tecnologías en su radar , lo que significa que en realidad no han hecho nada productivo con la tecnología, pero saben cómo y cuándo usarla.

Tengo que admitir que no tengo conocimiento de Hadoop por mí mismo, pero sé cuándo podría ser una buena solución y tener una comprensión justa de cómo funciona en teoría ; entonces diría que no debería llevar mucho tiempo ser productivo.

Conocí a 2 desarrolladores y les pedí que leyeran las especificaciones de mi software. El problema es que carecían de los conocimientos de dominio de mi empresa (lo cual es completamente comprensible y nada importante), pero tampoco tenían conocimiento de los sistemas tecnológicos subyacentes que utilicé, como Hadoop, Hbase, Cuda, etc. Pasé mucho tiempo explicando map / reduce, bigtables y otras tecnologías que utilicé.

Explicar su negocio debería ser la parte más fácil para usted, ya que lo sabe mejor. No puede esperar que todos conozcan su negocio tan bien como usted o que lo sepan en absoluto.

Lo mismo ocurre con la tecnología:

Hay una gran cantidad de frameworks, idiomas, kits de herramientas por ahí; es poco probable que encuentre (m) algún desarrollador (es) que los conozca a todos

Por supuesto, se podría decir: $ Technology_du_jour está publicitado en los medios, por lo que espero que cada desarrollador tenga un conocimiento práctico. Pero esa no es la realidad.

Para mí, como desarrollador, mi trabajo es una compensación: tengo un conocimiento práctico de algunos idiomas y algunas tecnologías. Esto me hace flexible de muchas maneras. Si tengo que hacerlo, puedo desarrollar una comprensión profunda de mis herramientas actuales, pero a medida que pasan las estaciones, las herramientas y los idiomas lo hacen.

tl; dr;

1) Si puedes, contrata a un experto en tu dominio y en la tecnología deseada

2) Si no puedes,

2a) Busque un generalista con cierta experiencia en proyectos , que puede o no tener conocimiento de las tecnologías utilizadas en su proyecto

3) Si hay realmente , realmente nadie más: contratar a un estudiante.

Tienes una deuda técnica, ¡no la aumentes!

Thomas Junk
fuente