Fui a una "feria de trabajo" recientemente y me sorprendió ver cuánto énfasis parecen poner los lugares de trabajo en los lenguajes de programación con los que los candidatos están familiarizados.
Desde mi experiencia (ciertamente limitada), si bien dominar verdaderamente un lenguaje de programación puede llevar años, aprenderlo a un nivel razonable es un asunto bastante simple para alguien que ya tiene experiencia con otros idiomas, y definitivamente puede encajar dentro del plazo que los empleadores generalmente asignan para La aceleración inicial.
Creo que un empleador se preocuparía más por la cantidad de lenguajes / paradigmas con los que estoy familiarizado, o cuál es mi experiencia en diseño algorítmico / software, en comparación con la tecnología específica con la que estoy capacitado en este momento.
Digamos que ya conozco Java, C ++, Smalltalk y Prolog ... ¿un lugar de trabajo que depende de Objective-C realmente me considera descalificado porque no tengo experiencia en ese lenguaje? ¿Es esto una falla en las metodologías de reclutamiento, y si es así, qué puedo hacer para convencer a ese lugar de trabajo de que mi falta de experiencia con Objective-C no debería importar? Estoy preguntando hipotéticamente, no específicamente sobre los lenguajes de programación mencionados.
Alternativamente, mi experiencia es limitada y admito que me falta algo. ¿Es la experiencia previa con un lenguaje de programación más crucial de lo que creo que es? ¿Hay alguna diferencia si se trata de un puesto junior o senior? ¿Debería hacer la diferencia?
Respuestas:
Contrariamente a los comunicados de prensa, es un mercado de empleadores en este momento.
Eso significa que simplemente pueden ser exigentes con respecto a cuáles son sus requisitos. Significa que pueden exigir experiencia .NET 4.0, y no solo experiencia 3.5 ... Significa que pueden exigir experiencia con Django, y no solo Pylons, etc.
Claro, puedes aprender todo lo que necesitas saber sobre Ruby en un par de semanas, y Rails puede tardar un par de meses (solo adivinando) para ser competente con ...
Pero el empleador puede elegir entre currículums vitae de personas que ya dominan Ruby & Rails.
TL; DR: Econ 101 ... No creas la exageración sobre la escasez de programadores .
fuente
El problema principal es que nadie sabe realmente cómo contratar buenos programadores. El problema secundario es que los trabajos de programación atraen a muchos solicitantes.
Dada una gran cantidad de currículums, sería muy bueno poder analizarlos y elegir a los buenos programadores, pero nadie sabe cómo hacerlo. De la forma en que trabajan la mayoría de las empresas, el tipo inicial suele ser por recursos humanos. La persona de RR. HH. No sabe nada de Smalltalk o C ++, excepto en la lista de requisitos, a diferencia de una persona de software que podría pensar "C ++ Y Smalltalk: este tipo no tendrá problemas con Objective-C".
Incluso cuando la pila va al gerente de contratación, es muy probable que sea demasiado gruesa para entrevistar a todos, por lo que el gerente de contratación tiene que desechar currículums por alguna razón u otra. Si se trata de un trabajo de C ++, y hay más personas con más de 5 años de C ++ de las que el gerente considera práctico para entrevistar, el gerente puede arrojar todos los currículums que no tienen C ++ en ellos. No es la manera de obtener las mejores personas absolutas, pero nadie sabe cómo contratar a las mejores personas absolutas, y si está limitado en la toma de decisiones por lo que figura en el currículum, las personas con experiencia en C ++ son al menos un poco mejores apuestas
fuente
Vamos a darle la vuelta: si supieras el objetivo C, ¿serías útil como programador de C ++? Yo diría que no, no lo harías, los idiomas son muy diferentes. Incluso para lenguajes simples como C, me gustaría ver 6 meses de experiencia antes de contratar a alguien, por C ++ varios años.
Hace algunos años, me enseñé PHP. Diría que pasaron varios meses antes de que fuera bueno en eso, pudiera orientarme en la biblioteca, entendiera modismos comunes, etc. Y ya sabía muchos idiomas.
fuente
Depende de varios aspectos del contexto. No solo el nivel de la función, sino también el estado del proyecto y la empresa.
En el nivel más simple, cualquier lenguaje imperativo de llaves es prácticamente el mismo que cualquier otro.
Si puede codificar en imperativo, puede codificar en imperativo. Ya sea Java, C #, C, C ++ o incluso javascript. Dado un libro de referencia decente (y posiblemente un poco de repetitivo), debería poder eliminar un pequeño programa en cualquiera de los otros en una tarde.
Sea cual sea su historial, usted conoce las ramas y funciones de los bucles, y la sintaxis es prácticamente la misma para todos ellos. Si su historial es OO, también sabe acerca de objetos, clases e interfaces.
Sin embargo, he visto a muchos programadores de imperativo solo luchar para escribir programas simples en lenguajes declarativos o funcionales. Si tuviera una tienda Erlang, preferiría que alguien con Erlang, o al menos Prolog, tenga experiencia sobre alguien con C ++.
Cómo depende del nivel del rol:
Reclutamiento para un puesto junior:
Si estuviera eligiendo un programador para un trabajo en C ++, hay ciertas trampas que me gustaría estar seguro de que el candidato es capaz de evitar, como la necesidad de prestar atención a la memoria o las longitudes de las matrices, simplemente para que no No se disparen (y a mí) en el pie Si nunca han hecho C o C ++, entonces tendría que resolver eso en la entrevista.
Y para un rol superior:
Una de las claves para programar eficientemente es saber lo que no debe escribir usted mismo. La clave para eso es las bibliotecas estándar (y estándar de facto). La clave para eso, es la experiencia. No puede simplemente sentarse con "Teach yourself Java" durante una semana e instantáneamente convertirse de un programador de C ++ de 10 años en un programador de Java de 10 años.
Cómo depende del estado del proyecto / empresa
Dado un proyecto Java que es prácticamente una pizarra limpia. Quisiera que un nuevo empleado senior tuviera mucho conocimiento sobre el ecosistema de Java y pudiera asesorar sobre las diferentes tecnologías disponibles.
Dado un proyecto de Java maduro, felizmente consideraría un desarrollador de C ++ experimentado, con poca o ninguna experiencia en Java para un rol superior de Java. La mayoría de las decisiones del ecosistema ya se habrán resuelto, y el nuevo empleado podrá adquirir experiencia con las bibliotecas de Java mientras la empresa aprovecha la experiencia del programador en el desarrollo de software OO.
fuente
Depende del lugar de trabajo. Si están muy ocupados, es posible que no tengan tiempo para esperar a que usted alcance un punto en el que pueda funcionar en Objective-C; es posible que quieran a alguien que pueda comenzar a ejecutar.
Algunos lugares de trabajo pueden estar dispuestos a arriesgarse si ven que está familiarizado con otros idiomas, además de tener fundamentos sólidos y conocimiento del dominio comercial. Eso realmente dependerá de cuán abiertos sean y cuán bueno seas para convencer al reclutador de que corra ese riesgo.
fuente
Contratar es difícil; contratar gente buena es aún más difícil. He terminado de contratar donde me enfrenté con una pila de más de 500 hojas de vida. Por supuesto, filtramos a las personas con menos experiencia en lo que queríamos para que la pila se redujera a un tamaño razonable. Es justo para el excelente candidato que no conoce ese idioma, probablemente no. Pero si puedo encontrar a 100 personas que tengan las calificaciones que estoy buscando, realmente no voy a pasar mucho tiempo en las 400 que no lo hicieron, sin importar cuán buenas sean.
Ahora en la contratación, puedo tener una larga lista de requisitos, pero generalmente solo uno o dos son factores decisivos. Y si no encuentra a nadie con la lista inicial de calificaciones que desea entrevistar (o más tarde si todos fallan la entrevista que he visto suceder), entonces generalmente volverán y mirarán a las personas que faltan algunas de las calificaciones menos críticas o personas que tienen algo similar pero no lo mismo. En esos casos, a menudo busca algo sobre la experiencia de la persona que lo haga mejor para su trabajo que alguien con todas las calificaciones técnicas. Por ejemplo, consideraría a un analista de datos con experiencia en una base de datos empresarial diferente si tuviera experiencia en mi dominio comercial (de hecho, esa persona probablemente haría mi primer corte si veía todos los currículums). Lo mismo con algo como C # y Java. Si la persona está haciendo un trabajo de un nivel similar de complejidad y especialmente en un dominio comercial similar, podría ser un muy buen candidato incluso si tiene el otro idioma.
Sin embargo, a menos que tuviera un programa de capacitación bastante formal para personas de nivel básico, sería menos probable que contratara a personas que no cumplían con mi conjunto mínimo de idiomas. Y casi nunca de un grupo que no tenía nada de lo que estaba buscando. Las personas sin experiencia tienen menos que aportar a la mesa en términos de alguna calificación de compensación y menos antecedentes para demostrar que pueden hacer un trabajo de nivel profesional en cualquier idioma. Tienen suficiente para aprender con su primer concierto profesional sin comprender el lenguaje más importante que usamos. Y contratarlos es un riesgo mayor que pueden pasar meses antes de que pueda obtener un trabajo útil de ellos.
Otro punto entra en juego si el oficial de contratación está moviendo al equipo a una nueva tecnología. Si nadie en el equipo es verdaderamente experto en la tecnología y tengo que contratar a alguien nuevo también, buscaré contratar a alguien con la mayor experiencia que pueda encontrar en esa tecnología porque tienen una idea de dónde están las "minas terrestres "para evitar son.
Finalmente, solicite los trabajos que le interesan incluso si no cumple con todos los requisitos establecidos (pero trate de cumplir con algunos, a los funcionarios de contratación no les gusta perder el tiempo con personas que nunca serían contratadas). Nunca se sabe qué competencia va a tener para un trabajo o qué impresionará más a las personas que seleccionan los currículums o hacen las entrevistas. Lo que podría obtener una entrevista en la empresa A podría ser exactamente lo que le impide obtener la entrevista en la empresa B, incluso si tienen requisitos similares en papel. Además, podrían tener un trabajo que satisfaga mejor sus calificaciones que aún no han anunciado. Pero nunca serás considerado para el trabajo si no saben de ti.
fuente
¿Debería ? No. lo hace ? Si tristemente Este es el síndrome de la "ardilla púrpura": la compañía quiere tener su pastel y comerlo también, y conseguir un candidato que pueda hacer todo lo que necesite o pueda necesitar bajo el sol. A menudo, pero no siempre, esto se debe a que A) No tienen idea de lo que realmente implica el desarrollo y simplemente asumen que alguien que cumple con todos sus criterios puede hacer el trabajo, B) Están siendo exigentes porque pueden salirse con la suya, o C) Planean presentar una H-1B / Green Card / Promot desde dentro, pero tienen que hacer que parezca que están anunciando un trabajo real.
fuente
Si tiene más de 20 años de experiencia en 3 o 4 idiomas que tienen características similares a Objective-C, entonces probablemente lo contrataría para hacer Objective-C y esperar que sea productivo en 6 a 8 semanas. (Esto se basa en mi experiencia personal con el aprendizaje de Objective-C hace unos años).
Si eres verde justo al salir de la escuela y no tienes experiencia práctica real tangible en nada, entonces probablemente no te contratarán para hacer algo con lo que no estás completamente familiarizado.
Objective-C es un hombre de paja interesante aquí. Requiere que conozcas muy bien C, requiere que conozcas muy bien el Análisis y Diseño Orientado a Objetos, en la mayoría de los casos requiere que conozcas C ++ en una medida no trivial porque hay bibliotecas de C ++ con las que probablemente querrás interactuar.
Requiere que comprenda la administración manual de la memoria, así como también cómo funciona la administración automática de la memoria / recolección de basura y cuándo usar cada técnica en el mismo programa.
No es solo Objective-C lo que necesita saber también sobre Cocoa y POSIX, porque acéptelo Objective-C es para todos los fines prácticos inútiles fuera de los entornos de Apple y también debe conocer Cocoa.
Y cuando Cocoa le falla, debe poder saber qué API POSIX usar cuando no puede hacer lo que quiere con los envoltorios de Cocoa.
También implica que también debes conocer Unix en un grado no trivial.
fuente
Depende del idioma / individuo.
Si soy un lugar de C # y alguien con experiencia en JAVA / J2EE aplica, voy a intentarlo. La sintaxis entre C # y JAVA no es tan diferente. La codificación es codificación y me imagino que una vez que se acostumbren a algunas de las diferencias estarán bien.
Lo mismo ocurre con JAVA -> C #.
Ahora, si usted fuera una persona de C # y solicite un trabajo en C ++, quiero ver experiencia. Hay demasiadas diferencias
Entonces sí, depende de la situación
fuente
Si bien creo que el OP está muerto sobre cómo un programador con experiencia en muchos paradigmas puede agregar fácilmente uno más, todo se reduce a la aversión del empleador al riesgo. Un empleado potencial que no está familiarizado con sus herramientas es un comodín; podrían ser realmente geniales, pero también podrían ser un fracaso, y será más difícil de lo normal para el entrevistador notar la diferencia si no pueden hacer preguntas en profundidad sobre las tecnologías que utilizan.
Definitivamente no estoy diciendo que esta sea la forma correcta de ver esto, pero así es como lo hacen algunos empleadores. Los inteligentes explotan esto y recogen a los increíbles programadores con 30 años de experiencia en C ++, mientras que los estúpidos los rechazan porque carecen de los 15 años requeridos de experiencia en Ruby on Rails. Sin embargo, los programadores también pueden explotar esto evitando el empleo con empleadores que están tan mal informados. Después de todo, ¿quién quiere trabajar para un lugar que sistemáticamente toma malas decisiones de contratación?
fuente
En parte, se trata de RR.HH. lanzando palabras de moda en una descripción del puesto, ya que realmente no entienden el papel. Es por eso que ocasionalmente te encontrarás con la situación cómica de una descripción de trabajo que especifica 3 años de experiencia en una tecnología que solo existe desde hace 6 meses.
En cuanto a si debería o no hacer una diferencia, eso realmente depende del rol y de las personas involucradas. Casi todos los gerentes que contratan (ciertamente todos los inteligentes) instruirán a Recursos Humanos para que los apruebe como candidatos que tienen mucha fuerza en la mayoría de las áreas, incluso si carecen de uno o dos puntos en la descripción del trabajo. Sin embargo, eso generalmente no se aplica a un recién graduado; Me refiero a personas con gran experiencia laboral que interactúan con clientes o equipos líderes o algo así.
fuente
¿Alguna vez has visto todos los elementos que componen tu pila de desarrollo? Por ejemplo, qué IDE, marco de prueba, integración continua, control de versiones, metodología de desarrollo y paradigmas de código que conforman un entorno que alguien usa para crear software. Esta puede ser una serie de herramientas que algunas compañías pueden querer que alguien ya conozca en lugar de tener que aprender desde cero. El punto de ironcode sobre el mercado de un empleador es otro factor aquí, ya que puede haber algunos casos en los que haya mucha competencia para un puesto y las empresas puedan apuntar hacia el cielo y posiblemente obtenerlo.
Solo para dar un ejemplo más concreto sobre ese entorno, esto es lo que tengo donde trabajo: Visual Studio 2008 haciendo ASP.Net usando C # principalmente, nUnit, Cruise Control.Net, Subversion, Agile / Scrum, con una combinación de procedimientos, OO , y funcional dependiendo de dónde se mira. Si quisiera cambiarme a Java, esto podría significar acostumbrarme a nuevas herramientas para muchas de estas funciones que pueden no ser lo que un empleador quiere absorber como costo de contratarme para ese puesto. También puede haber algunos puntos difíciles que aquellos con experiencia en esa versión pueden conocer mejor que otros y evitar algunas trampas que de otra manera podrían hacer que alguien diga: "¿Por qué lo construyeron de esa manera?"
fuente
No mires. Estos requisitos no los ponen los técnicos de TI. Son reunidos por la gente de recursos humanos. Y la forma en que las personas de recursos humanos obtienen los requisitos es gritando preguntas a las personas de TI mientras se tambalean hacia adelante y hacia atrás a la máquina de café.
Entonces dicen "¿Qué necesitas?" y el idiota al azar que termina respondiendo dice "Un programador. Necesita unos años de experiencia. Como, no sé, 4? Y sería bueno si supiera .Net". Una respuesta razonable.
Pero se traduce en "4 años de experiencia en .Net 4" y es .Net 4 porque, cuando buscas en Google .Net, el primer enlace te llevará a una página que habla de .Net 4.
También existe la posibilidad, y me he topado con esto varias veces, de que tienen un requisito de idioma específico porque quieren avanzar en esa dirección, y piensan que será más fácil si tienen una persona con experiencia en el personal.
fuente