Para el fondo, estamos haciendo aplicaciones de ingeniería de escritorio, con un AutoCAD como UI, algo similar a etabs .
Una cosa que realmente me molesta es, ¿hay alguna necesidad de contratar a los mejores desarrolladores? Para empezar, estamos experimentando grandes dificultades en el reclutamiento; La mayoría de los currículums que vemos están haciendo aplicaciones CRUD simples o personalización de SharePoint, lo que no creo que realmente implique mucha programación hardcore. Incluso aquellos a quienes llamamos para una entrevista, la mayoría no puede hacer la secuencia de Fibonacci y una simple búsqueda binaria, y somos lo suficientemente amables para dar pistas y explicar los problemas explícitamente para que los candidatos no tengan que buscar un diccionario para verificar ¿Qué significa "secuencia de Fibonacci"?
Esto me hizo pensar: Sí, necesitamos cierto nivel de aptitud de programación al hacer geometría computacional / programación lineal, y necesitamos cierto nivel de aptitud de programación al diseñar la arquitectura del software / o decidir qué patrón de software usar, pero más allá de eso , gran parte de nuestro código es solo código de plomería (creo), que puede hacer alguien que esté familiarizado con la programación.
Dado que realmente necesitamos talentos de programación ahora, y dado que contratar desarrolladores superestrellas es muy difícil, quiero bajar mi estándar y contratar solo a los más o menos, en contradicción directa con lo que predica Joel .
¿Qué piensas?
Editar: no necesita reescribir toda la geometría computacional / bibliotecas de programación lineal; todo lo que necesita hacer, en lo que respecta a mi aplicación, es poder saber cómo convertir los problemas en cuestión en términos de programación geométricos / lineales computacionales apropiados y saber cuándo / cómo usar las bibliotecas existentes. Entonces no es tan difícil como parece.
Respuestas:
Te sugiero que dejes de leer demasiado a Joel. Lo que ha escrito en su blog contradice sus respuestas en este sitio, por lo que realmente no tomaría mucho su palabra.
Lo que hace a una superestrella y por qué es necesario tenerla abre una discusión larga y sin rumbo. Es elitismo y no es práctico.
Lo que necesitas es una persona que:
El resto no tiene importancia.
No creería cuántos graduados jóvenes hay por ahí que no quieren nada más que sumergirse en este tipo de proyecto fuerte en CS y nunca mirar codificar aplicaciones CRUD. Hace un tiempo, yo era uno de ellos, prácticamente soñaba con unirme a un proyecto en torno al desarrollo del compilador, pero no pude encontrar uno. ¿Por qué no dar una oportunidad a uno de ellos?
No creo que AutoCAD haya sido escrito por superhombres. La mayoría de los proyectos exitosos fueron realizados por personas que simplemente querían hacer las cosas y realmente querían eso.
¿Qué se puede esperar si la mayoría de los trabajos requieren solo eso? La gente podría haber estudiado CS en la universidad e incluso haber sido realmente bueno en eso, pero no puedes esperar que lo recuerden si nunca lo han usado en programación práctica en 10 años. Obviamente, nadie va a leer sobre viejos libros de CS cada año solo para mantenerlo fresco si este conocimiento no se usa en ninguna parte.
fuente
Un libro que realmente me gusta es Primero romper todas las reglas . Tiene mucha información sobre las diferencias entre gerentes promedio y buenos gerentes. Una de las ideas clave que los buenos gerentes decían una y otra vez fue resumida por uno de ellos en la oración : nunca he esperado demasiado para encontrar la contratación correcta, y nunca he despedido a la contratación equivocada lo suficientemente rápido. Sí, es frustrante tomar mucho tiempo para contratar, pero vale la pena.
Un segundo punto que debe tener en cuenta es que cuando se mide el rendimiento del proyecto, hay un pico de productividad para equipos de 5-8 personas. No volverá a la misma productividad hasta que tenga un equipo de más de 20 personas. Sea muy, muy cauteloso al hacer crecer un equipo más allá del tamaño en el que funcionan las dinámicas de equipos pequeños. Y si vas a permanecer por debajo de ese umbral, entonces realmente quieres que esas 5-8 personas sean buenas.
Ambos puntos hablan enérgicamente hacia la espera de la contratación adecuada.
fuente
Todos afirman que "contratan solo el 1 percentil superior". Si eso fuera cierto, el 100% de las personas empleadas estarían en el "primer percentil" de todas las personas, por lo que el 99% de todas las personas estarían desempleadas (en cualquier campo). Como claramente este no es el caso, y todos hemos experimentado personas que claramente no están en ese grupo (¿por qué más haces esta pregunta?) Sabemos que esto no es cierto.
De hecho, las organizaciones formadas únicamente por esas personas serían muy inestables. Demasiado ego, demasiadas ideas en conflicto. Se desmoronaría a medida que cada uno hace lo suyo, se atascará en discusiones teóricas interminables sobre los méritos relativos de todo, o evolucionará en una constante pelea de gritos a medida que los sentimientos brotan cada vez que se debe tomar una decisión.
fuente
Lo primero que debe preguntar es por qué obtiene currículums que no cumplen con los estándares que desea. He trabajado con muchas personas buenas, por lo que están ahí fuera, y la aplicación me parece muy interesante. Si no puede encontrar personas que puedan hacer secuencias de Fibonacci y búsqueda binaria (que es más difícil de lo que parece; según Knuth, pasaron varios años entre su primera publicación y su primera publicación correcta), está haciendo algo para impulsar buenos lejos.
¿Estás pidiendo más habilidad de la que estás dispuesto a pagar? ¿Estás publicitando en los lugares equivocados? ¿Su empresa no es atractiva por ubicación o reputación? Este es su primer problema y el más básico, y el que necesita resolver con urgencia. Sin duda, usted y sus colegas conocen a algunas personas buenas que no trabajan para usted. Muéstrales lo que tienes y pregúntales si estarían tentados, y si no, por qué no. Es posible que esté demasiado cerca del problema para comprenderlo sin ayuda.
No contrates personas porque son las mejores que aplicaron. Contrata personas porque podrán hacer algo que tú quieras que se haga. Si contrata a mediocres porque eso es todo lo que se aplica, entonces lentamente perderá buenas personas y terminará con personas cuyo álgebra es inestable tratando de hacer cosas con geometría computacional. (Contratar a mediocres porque tienes un trabajo para un par de programadores mediocres es otra cosa, pero debes poder contratar personas de calidad donde las necesites).
fuente
"la mayoría no puede hacer la secuencia de Fibonacci y una simple búsqueda binaria"
Sus criterios son ciertamente incorrectos. En mi grupo todos somos físicos o ingenieros. Apuesto a que nadie podría hacer una búsqueda binaria porque no asistimos a cursos de CS y en la vida real usamos una biblioteca para eso. Incluso diría: alguien que escribe binsearch no sabe cómo enfocarse en cosas importantes.
Es de mucha mayor importancia si el candidato es inteligente y encaja en el grupo. Si desea verificar su talento de programación, dele un trabajo para que haga en casa. Tenga en cuenta cuánto tiempo le llevó a él / ella y discuta los resultados para averiguar si es el trabajo genuino de los candidatos.
fuente
Creo que "contratar a los mejores" se está convirtiendo en un gran culto.
La mayoría del trabajo de programación es rutinario y no creativo. Incluso cuando trabajas en nuevos proyectos realmente creativos. La mayor parte es monótono, y a menudo se basa en patrones. Esto es particularmente cierto para la interfaz de usuario.
La mayoría de los sistemas modernos también requieren que tanta gente los escriba, que inherentemente, no todos pueden ser los mejores. La mayoría de las personas son promedio, incluso si no lo son, aún tienen que hacer muchas tareas "promedio".
Dicho esto, exigir competencia básica y requisitos mínimos razonables no es irrazonable y no es algo en lo que deba comprometerse.
Piense en la cirugía de rutina: dependiendo de su tolerancia al riesgo, es probable que prefiera que un médico promedio lo realice en lugar de esperar 10 años para que el decano de la escuela de medicina tenga tiempo para hacerlo. Eso no significa que deba dejar que la persona que realiza la cirugía realice la cirugía.
fuente
"Contratar a los mejores" tiende a significar "contratar a los mejores que actualmente están disponibles aproximadamente donde estamos" de todos modos, y significa diferentes cosas para diferentes compañías. Algunos quieren codificadores de rockstar, otros quieren ingenieros de software meticulosos y el siguiente en el futuro quiere expertos en software. No hay un "mejor universal", así que tenlo en cuenta, y tal vez las especificaciones de tu trabajo sugieran que estás buscando un tipo de programador y la entrevista dice que estás buscando otro tipo de programador. De repente, no obtienes fósforos.
Dicho esto, no me gusta trabajar con programadores regulares. Así que no tiene nada que ver con la experiencia (podrían haber estado programando durante 20 años y todavía no son muy buenos), pero todo tiene que ver con la aptitud y el entusiasmo. Si el más o menos afecta a cualquiera de esos dos, tiene un problema. Tampoco tiene sentido contratar a alguien cuyas contribuciones deben ser modificadas por otros miembros del equipo porque el código no es lo suficientemente bueno. Más problemas en los asientos no siempre están en la respuesta, desafortunadamente, más problemas en los asientos también pueden significar más trabajo para los mejores miembros del equipo, ya que están tratando de hacer su trabajo y limpiar el desorden que el programador ha entregado. .
Algunas personas no parecen ser estrellas de rock, pero son programadores sólidos de nivel medio. Son buenos para tener en el equipo y eso no es lo que quiero decir con "programador regular". Este último es alguien que apenas evita ser despedido todos los años en el momento de la revisión del desempeño.
fuente
Como administrador, estoy de acuerdo en que contratar "el 1% superior" no es práctico ni necesario. Mi consejo sería contratar al equipo adecuado para construir y mantener su producto (podrían ser dos equipos muy diferentes, ya que construir vs mantener son muy diferentes en sus necesidades)
Le sugiero que identifique a las personas que actualmente tiene en su equipo que son "personas clave" (por ejemplo, hacer las cosas, tener buenas actitudes, pueden trabajar bien con la incertidumbre / requisitos de alto nivel, etc.) y luego contratar a las personas que tienen trabajó en el pasado (y respeto, obviamente). Esto elimina gran parte de la incertidumbre en torno al proceso de la entrevista y ayuda a gelificar al equipo.
Además, más "a más largo plazo": invierta mucho en un programa de pasantes. Si su equipo de programación es de 20 personas, obtenga 5 pasantes al año y deles un trabajo real. Recupera el uno o dos que te gustan cada año y trae 5 variables aleatorias más. Esta es probablemente la mejor manera de mantener a su equipo lleno de buenos programadores. Luego puede contratar afuera de manera oportunista y elevar el listón para esos candidatos.
Como ya se mencionó, preste atención a su proceso de entrevista. Haga que los candidatos escriban un código (o mejor, analicen su solución a un problema de "1 hora para llevar a casa"), haga que almuercen con el equipo. Conozca sus habilidades técnicas e interpersonales. Y nunca tenga miedo de decir "no", incluso cuando está desesperado por 20 personas más para un gran proyecto que comienza la próxima semana.
fuente
En mi experiencia, el Principio de Paretto también se aplica a la programación: el 20% de los desarrolladores realiza el 80% del trabajo y viceversa. OK, los números pueden ser exagerados. En realidad, tendrá algo así como el 20% de los empleados haciendo el 50% del trabajo (por trabajo quiero decir buen trabajo, no simplemente líneas de código). En realidad es más como una curva de campana. Entonces, en un equipo de 10, tendrás 1 héroe, 2 grandes, 4 promedio y 2-3 patéticos.
Muchas empresas utilizan la curva de Bell para evaluar las evaluaciones. Entonces, no importa cuán brillantes sean sus candidatos, caerán en sus niveles. No se puede tener un equipo donde todos estén al mismo nivel. No pasa
fuente
Ya hay un montón de respuestas aquí, pero creo que todavía hay un punto que debe discutirse: el impacto que tiene la contratación de los más o menos chicos en la calidad de su software y cómo hace que su vida como gerente sea mucho más difícil.
La respuesta a "¿hay alguna necesidad de contratar a los mejores desarrolladores?" Siempre es un gran gordo SÍ. Por supuesto, en realidad, esto no siempre es posible. El peligroso error que creo que está cometiendo al considerar esta pregunta es pensar que "nuestro software es tan simple que incluso un tipo puede hacerlo". Esto está mal.
Su software estará listo, no lo dude, pero espere resultados muy diferentes de un equipo excelente que de un equipo regular. Tendrá más errores, más problemas de rendimiento, más problemas de capacidad de mantenimiento y escalabilidad, etc. Tendrás que cuidar a tus chicos más o menos a través de problemas más complejos. Tendrás que cuidar a los chicos más o menos a través de decisiones de arquitectura adecuadas.
Si acepta esto y está listo para administrarlo, está bien. Solo prepárate para el proceso y los resultados.
fuente
Creo que no es realmente un problema contratar a un gran desarrollador. El verdadero desafío es hacer que quieran trabajar para usted.
¿Hay alguna necesidad de contratar a los mejores?
Eso creo. Un gran desarrollador no es solo el que hace todo a tiempo. No solo un individuo así es mucho más productivo que otros. El gran desarrollador también lidera con el ejemplo y simplemente inspira a otros miembros del equipo. Otros podrían avanzar mucho mientras trabajaban con ellos.
OK, entonces vas a bajar tus estándares. Eso es genial, probablemente cambiarás de opinión después de contratar a una persona realmente mala. El que responderá a todas sus preguntas de CS sin problemas pero que realmente no puede escribir una sola línea de código de producción. Buena suerte con eso :)
fuente
Vamos a dar un paso atrás.
¿Qué estamos intentando hacer? Escribir software
¿Por qué creemos que necesitamos contratar a los mejores? Porque ese maldito chico de Arnold no pudo salir de una bolsa de papel mojada y ahora el SQL está jodido y no puedo iniciar sesión.
Bien, entonces, ¿cuál es el mejor ? No sé, es probable que sea alguien que quiere mucho dinero y tiene un currículum de seis pies de largo con una gran cartera y trabajó en google o algo así. Debería tener un título, y tal vez algunas letras al final de su nombre. Sí, eso suena como el mejor para mí, y por lo mejor, me refiero a alguien que no es ese chico loco de Arnold. Ah, y él debería saber cómo hacer una mierda realmente difícil de la que escuché en la escuela, como "escribir un tipo de burbuja" o como lo llamen. Le pediré a uno de los otros tipos que mencione algunas cosas difíciles que tuvieron que hacer en la escuela, sí.
¿Parece que simplemente no quieres a ese maldito chico de Arnold? ¿Lo harías? Estoy cansado de tener código con errores, las cosas tardan una eternidad en hacerse, y estos nuevos tipos que entrevisto me dicen que tengo que volver a escribir todo.
Bien, entonces, ¿qué le pides al maldito chico de Arnold que haga? Cree un sitio web PHP, escriba algunos jQuery, haga que PHP haga algunos CRUD básicos con MSSQL y cambie los colores de fondo.
¿Suena eso como una tarea bien adaptada exclusivamente a los mejores? Estoy seguro de que lo mejor podría hacerlo, pero probablemente cualquiera que tenga el conjunto de habilidades adecuado que coincida con esto podría hacerlo.
Entonces, ¿no necesitas lo mejor? Bien, solo necesito a alguien con el conjunto de habilidades que cumpla con mis objetivos.
Oh. Sí.
fuente
El título de su pregunta menciona una "Aplicación de escritorio normal", pero su texto habla sobre la necesidad de aplicar el conocimiento de la geometría computacional y la programación lineal. Esas son áreas de aplicación que han generado enormes programas de investigación de varias décadas con consecuencias sociales masivas de cualquier avance (memoria, asignación de recursos de resúmenes de programación lineal ). Como resultado, hay muchos enfoques sofisticados para resolver problemas en estas áreas que funcionan muy bien.
Una mala contratación
En otras palabras, piense si realmente está trabajando en algo peatonal. Si es así, genial, la contratación debería ser mucho más fácil. Si no lo está, espere a alguien que pueda hacer lo que necesita.
fuente
Seguramente no soy un programador superestrella para los estándares de Joel. Sin embargo, he escrito algunos proyectos exitosos en mis 20 años de carrera como desarrollador. Podría haber resuelto tus preguntas. Pero menos de mi experiencia en el trabajo, donde, de hecho, gran parte del trabajo más complicado se realiza pidiendo a su base de datos o función de biblioteca que lo haga.
Pero si decide contratar personas con menos experiencia, debe considerar el uso de tecnologías que sean fáciles de manejar. Por ejemplo, si planeaba usar C ++ para todo el proyecto, limite la parte de C ++ a las bibliotecas escritas por sus mejores personas y deje que los demás implementen la interfaz de usuario en Visual Basic.
fuente
Escriba los valores que busca en un empleado que se unirá a sus filas.
Cuando el único valor apreciado es la competencia de programación, te encontrarás rápidamente rodeado de personas que solo valoran eso. Dado que la mayoría de los programadores verdaderamente competentes tienen un sistema de valores más elaborado, se abstendrán de unirse a su equipo.
Sin embargo, es más probable que esté buscando personas innovadoras, creativas, confiables, eruditas, curiosas, con autoaprendizaje, sociables, competentes y dedicadas. Muestre que su empresa comprende y respeta estos valores y está dispuesta a ayudar a sus empleados a desarrollarlos aún más.
Comprenda y acepte los valores de sus empleados actuales y comuníquelos en sus solicitudes de empleo. Las buenas empresas, con un sistema de valores sostenible, atraen a buenos empleados.
fuente
En cualquier organización tienes personas con más experiencia y personas con menos. No solo eso, sino que un experto en un campo puede ser un novato en otro. Claro que un aficionado entusiasta puede hacer más daño que bien a una base de código, pero así es como aprenden: arreglando sus errores y discutiendo su experiencia con sus colegas más experimentados.
Mi sugerencia sería que, en lugar de tratar de contratar superestrellas, intente contratar personas que sean razonablemente brillantes, que encajen con la cultura de su empresa, que estén ansiosas por aprender y que aprecien sus propias limitaciones.
fuente
Ciertamente, debe aspirar a contratar solo a los mejores. Eso no significa automáticamente que tendrás éxito en eso: solo hay muchos de los "mejores", y habrá ganadores y perdedores en la batalla para atraerlos. Mucho de esto vendrá de su aptitud y disposición para trabajar duro en el problema, y de los recursos disponibles para usted.
Renunciar antes de comenzar es la forma más segura de perder.
fuente
La búsqueda binaria es un problema interesante porque es bien sabido que la mayoría de los programadores realmente tendrán dificultades para escribirla correctamente ( Bently escribe sobre esto en Programming Pearls ). Tal vez no sea tan malo probarlo siempre y cuando no descarte a los candidatos debido a su incapacidad para resolverlo. Si lo resuelven rápida y correctamente, entonces al menos sugiere qué tipo de programador son para que tenga más información en ese caso particular.
fuente
necesitas contratar a los mejores. pero el término ha sido citado fuera de contexto muchas veces. necesita encontrar el mejor candidato con las habilidades requeridas para ese puesto, y no el mejor programador en un sentido general. El desarrollo de software es amplio y no todas las posiciones requieren el mismo conocimiento técnico.
Hágase esta pregunta (ya lo hizo ...): si tiene otro ingeniero en la misma posición durante 5 años, ¿esperaría que recuerde series de fibonanci y búsquedas binarias?
Si la respuesta es no, cambie su patrón de entrevista. Es posible que necesite conocer una docena de algoritmos de búsqueda si desea trabajar en una aplicación de búsqueda como Google o Bing. Todos los demás solo usan map.get ("");
dirija sus entrevistas a lo que necesita el puesto, no a un buen programador genérico de libros de texto.
fuente
Si realmente no le importa la calidad, le sugiero que use uno de los sitios web de outsourcing y comience con pequeños proyectos. Luego puede pagarles si pueden hacer el trabajo, y tener una manera fácil de rescatar si no pueden.
Sin embargo, me pregunto si realmente hay mucha codificación de rutina en una aplicación de ingeniería de escritorio. Pueden ser muy complejos y la mayoría de los programadores no son tan buenos para gestionar la complejidad. Podría crear fácilmente una gran cantidad de código heredado instantáneo que vinculará a su equipo en los próximos años. En general, las primeras contrataciones para un nuevo proyecto son las más cruciales y establecerán el tono para todo el proyecto.
fuente
Estoy totalmente de acuerdo con la mayoría de los comentarios anteriores que se refieren a adaptar a una persona a un problema. Esto generalmente resulta en una relación a largo plazo en lugar de contratar a una superestrella para que trabaje en un problema regular, lo que simplemente lo frustrará para que se vaya rápidamente.
Dicho esto, siempre debe intentar contratar a su empresa en lugar de un puesto en particular. Debido a que este mismo tipo cambiará entre equipos tarde o temprano con contactos personales, etc. y podría llegar a ser un peso muerto en otro lugar. Asegúrese de que su empresa tenga pautas de transferencia interna muy estrictas y que tenga una idea clara de lo que hará en su equipo durante los próximos dos años antes de contratar a una persona que cree que podría no cumplir con los requisitos de la empresa (pero resolverá el problema actual ) He visto demasiados casos en los que la mediocridad en los desarrolladores ha hecho que el equipo trabaje muy duro para adaptarse a ellos.
fuente