¿Debo esperar que los graduados recientes estén familiarizados con los conceptos básicos de programación? [cerrado]

9

Parece que hay una ENORME discrepancia entre lo que espero de alguien que ha estudiado programación durante unos años en la universidad y lo que uno realmente sabe.

No siento que esté haciendo preguntas demasiado complicadas en las entrevistas. Algunas de mis preguntas habituales son:

  • ¿Cuál es la diferencia entre un tipo de referencia y un tipo de valor?

    Si parece que el entrevistado realmente no comprende su propia respuesta, o si no conoce la terminología que estoy usando, me meto en más detalles al pedirle que me explique qué sucede cuando escribo int i = 0; en un método, ¿qué pasa con el objeto o = 0, objeto o = new MyClass (), etc.

    Básicamente, hago todo lo posible para engañar al entrevistado para que me cuente sobre la pila de llamadas, el montón, etc., y trato de mantener los conceptos agnósticos del lenguaje. Si el entrevistado me dice que hizo mucho C, o C ++, o c #, profundizo en el lenguaje específico y posiblemente en los detalles de implementación.

    Si es necesario, le pregunto al entrevistado qué es una pila de llamadas o dónde se almacenan los argumentos pasados ​​a una función en el idioma imperativo de su elección.

    La mayoría de los entrevistados no tienen idea de lo que es una pila de llamadas, y mucho menos las consideraciones de boxeo, etc.

  • ¿Cuál es la diferencia entre una clase abstracta y una interfaz? ¿En qué casos deberías usar uno sobre el otro?

    Por lo general, también les pido que imaginen un diseño de una pequeña biblioteca con un caso de uso destinado a usar alguna herencia y algunas fábricas abstractas.

    La mayoría de los entrevistados no tienen idea de cuál podría ser el verdadero propósito de la herencia. Usualmente conocen algunas palabras clave (virtual, anulación, etc.), pero realmente no saben cuándo usarlas, y mucho menos explicar qué es una tabla virtual.

Aunque reviso los CV de antemano, incluso para las personas con 5 años de experiencia en proyectos de la vida real que involucran arquitecturas complejas, diría que menos del 25% de todos mis entrevistados pueden responder esas dos preguntas correctamente. Y cuando digo correctamente, no me refiero a "en profundidad" ... solo para tener una idea aproximada de cuál es el concepto.

Con respecto a los juniors, estoy de acuerdo con contratar a alguien que no sabe cómo organizar su tiempo muy bien, o alguien que no está acostumbrado a los procesos de construcción industrial, por ejemplo, pero tengo la sensación de que si uno no ha escuchado la palabra " callstack "después de unos años de estudiar Ciencias de la Computación, es estúpido o desmotivado, o eligió su universidad muy imprudentemente.

¿Crees que soy demasiado extremista aquí? ¿Es común aprender estos conceptos básicos después de haber completado la universidad? ¿Conoces a personas que no estaban familiarizadas con esto y se convirtieron en muy buenos ingenieros de software después de unos años? ¿Y cree que mi empresa podría tener problemas para atraer a personas con talento, o experimenta el mismo tipo de problemas en su propio proceso de contratación?


Editar. con respecto al "tipo inmediato", fue solo una traducción literal del francés al inglés, como solemos hacer nuestras entrevistas en francés. Lo arreglé en mi pregunta. Pero aún así, creo que todos entienden perfectamente lo que quise decir, lo que de alguna manera hace mi punto, ¿no?

Brann
fuente
44
Solo un comentario menor, pero no sabría a qué te refieres con un tipo inmediato, tipo de valor, por otro lado, podría explicarte. Sin embargo, siento que todos los que se graduaron con cualquier título de CS deberían poder responder esas dos preguntas. Para mejorar su pregunta, tal vez podría dar un ejemplo de cuán exhaustivas deberían ser las respuestas que espera.
sebastiangeiger
Estudiar un idioma durante más de 2 años en la universidad, competir con otras asignaturas deja a los estudiantes con el mínimo indispensable una vez que terminan sus exámenes. De lo único de lo que puede estar seguro es de que pueden aprender esa información, o que alguna vez lo supieron. Solo la experiencia práctica puede darles permanencia de conocimiento. Joel Spolsky da un gran ejemplo de cómo y por qué los estudiantes carecen de muchas habilidades que deberíamos esperar que los programadores tengan en su artículo de blog aquí - http://www.joelonsoftware.com/items/2009/10/26.html
Justin Shield
@sebastiangeiger; tienes razón actualizada!
Brann
2
Debe saber que no sabe casi nada. Este es el punto clave para mejorar con el tiempo.
deadalnix
Curiosamente, Brann, todas las personas que respondieron esta pregunta mencionan el "tipo inmediato" (error de traducción) y le dicen que no saben qué es. ¿Sus entrevistadores dicen: "No he estudiado estos asuntos en profundidad?" ¿o dicen ser expertos en, por ejemplo, detalles de tiempo de ejecución y un profundo conocimiento de los compiladores?
Pindatjuh

Respuestas:

15

La terminología es una caída común en una situación de entrevista.

Usted le hace una pregunta al entrevistado usando una terminología que significa algo para usted, pero el entrevistado puede saberlo por un término diferente, o simplemente puede conocer la teoría genérica sin aplicación a lenguajes o entornos específicos. Se producen malentendidos. Ninguna de las partes es feliz.

En realidad, el entrevistado comprende perfectamente que algunos valores pueden almacenarse directamente en un registro y otros hacen referencia a un trozo de memoria en otro lugar, pero debido a que hace la pregunta en un dominio específico, el punto de lo que está preguntando y lo que usted quiere que el entrevistado le cuente, realmente no se transmite.

Tal vez tenga muchas situaciones en las que el entrevistado de repente hace clic y dice 'Oh, de eso es de lo que está hablando', y luego explica de manera bastante adecuada.

Es un equilibrio difícil porque los programadores recién salidos de la universidad no tendrán la experiencia diversa que les brinda el desarrollo del mundo real en un entorno de equipo. Mientras tanto, los desarrolladores experimentados a menudo no van a recordar (o incluso estar interesados ​​en) todo lo que aprendieron en la universidad porque es simplemente irrelevante para su uso diario.

Estos dos tipos de personas (sí - que es el entrevistado y el entrevistador) necesidad de aprender a comunicarse con uno al otro antes de que pueda aprender acerca de uno al otro. La responsabilidad recae en la persona con mayor experiencia (el entrevistador) para garantizar que esto suceda.

Sin mencionar el hecho de que algunas personas tienen fallas completas de memoria en las entrevistas. Yo incluido Recuerdo que me pidieron que escribiera un programa en C y no pude recordar el símbolo utilizado para acceder a un miembro desde un puntero (->) y tuve que preguntarle a alguien. Ni siquiera fue para mi primer trabajo. El chico me ha acosado ese momento durante los últimos 15 años :-)

Mucho más útil en mi opinión es la capacidad de comunicarse, poder resolver problemas de manera eficiente y completa; recoger las cosas rápidamente mostrar una actitud positiva positiva; interactuar bien con otras personas y otros valores fundamentales.

No renuncies a los entrevistados porque no saben qué es un tipo inmediato. Siga adelante.

Roger Attrill
fuente
@Brann - tipo inmediato -> tipo de valor. notado
Roger Attrill
Bueno, tal vez no esté lo suficientemente claro por la redacción de mi pregunta, pero realmente hago mucho para asegurarme de que no haya problemas de terminología. Le pregunto al entrevistado qué sucede en situaciones específicas en el idioma de su elección, le pregunto si sabe qué es una pila de llamadas, le pregunto si hay diferentes "tipos" de recuerdos, le pregunto dónde están los argumentos para una función. almacenado en el lenguaje imperativo de su elección. Realmente, no creo que sea un problema de terminología. A veces, el entrevistado NO TIENE IDEA sobre lo que sucede detrás de escena cuando se instancia una clase.
Brann
con respecto a lo de "seguir adelante", eso es lo que suelo hacer. Pero en mi experiencia, cuando un entrevistado no sabe qué es un tipo de valor, tampoco sabe acerca de la sincronización de hilos, ni para qué son los genéricos, etc. Entonces, después de algunas preguntas, cuando queda claro que el candidato no está No encajo en el trabajo, generalmente le doy algunos consejos sobre qué aprender a desempeñarse mejor en entrevistas técnicas y ... seguir adelante con el próximo candidato :)
Brann
12

Está solicitando conocimientos específicos del idioma, y ​​los términos que utiliza no se utilizan 100% de la misma manera en todos los idiomas. Yo, por mi parte, no tengo idea de qué es un "tipo inmediato".

Además, tenga en cuenta que lo que se enseña en una universidad no es cómo generar código estándar en X, sino haber aprendido muchos conceptos subyacentes y visto varios paradigmas de programación. En otras palabras, es muy parecido a una licencia de conducir: aunque conozca la teoría básica, aún necesita mucha práctica real.


fuente
He actualizado a "tipo de valor". Pero la cuestión es que si el entrevistado no entiende la pregunta, generalmente la explico con más detalles e intento muchas cosas para engañar al entrevistado para que me cuente sobre la pila de llamadas, el montón, etc. (sí, lo sé esos son detalles de implementación, pero aún así, esos son conceptos generales que no son realmente específicos del lenguaje OMI)
Brann
Creo que el concepto "callstack" es uno de esos conceptos generales de los que estás hablando. Incluso después de volver a redactar la pregunta de diez maneras diferentes para asegurarme de que el entrevistado sepa que estoy esperando que me diga sobre la asignación de memoria, la pila de llamadas, los tipos de valor, etc.
Brann
Si te entiendo correctamente, ¿quieres saber si el desarrollador conoce los punteros y sabe qué hacen y cómo usarlos?
No, no lo hago. Quiero asegurarme de que el desarrollador tenga al menos una idea aproximada de lo que sucede detrás de escena cuando usa la función x o y de su lenguaje de elección. Preguntarle sobre los punteros es solo una forma de hacerle hablar sobre lo que sabe sobre la asignación de memoria.
Brann
3
@Brann, todo lo detallado sobre la pila de llamadas, el montón, etc., es esencialmente solo punteros aplicados .
3

"Escucho y olvido. Veo y recuerdo. Lo hago y entiendo". (Y, en mi opinión, la comprensión conduce a una mejor retención de la memoria).

En pocas palabras, un recién graduado no tiene mucha experiencia, por lo que, como alguien más notó, no van a tener mucho más que el mínimo conocimiento, sin importar cuál sea su idioma "elegido".

Fui a una universidad que fue diseñada específicamente para simplificar el aprendizaje sobre la especialidad elegida (por ejemplo, no tendrías Literatura Histórica si fueras un experto en CS; lo más cerca que podrías estar de Literatura Histórica es Ciencia Ficción), y en línea recta de la universidad, no habría sido capaz de decirle lo que una interfaz era mucho menos su diferencia a una clase abstracta, aunque no nos enteramos de la abstracción (y abundan las interfaces en .Net, la tecnología aprendí). Es posible que hayamos tocado las interfaces, pero se perdió en todas las demás cosas que necesitábamos saber para aprobar la clase. No fue hasta mi primer trabajo fuera de la universidad que aprendí acerca de las interfaces, particularmente de alguna manera significativa.

Usted mencionó hacer entrevistas en francés, lo que hace obvio que estamos en diferentes países, por lo que su kilometraje puede variar, pero aquí en los EE. UU., Las universidades están notoriamente atrasadas en lo que respecta a la tecnología. Por lo tanto, a menos que esté tratando con lenguajes maduros (C / C ++, COBOL, etc.), también es bastante probable que lo que ha estado utilizando incluso durante años no esté disponible en la versión en la que los estudiantes han aprendido. Por ejemplo, .Net 3.0 introdujo Entity Framework, WPF, WCF y una serie de otras cosas interesantes, pero incluso mi escuela todavía estaba atrapada en .Net 1.1 y 2.0 (lo que significaba estar atascado con ADO.NET y ni siquiera aprender sobre Object -Mapeo relacional). Una escuela que usa PHP puede estar atascada en PHP 4 (no OOP).

Tenga en cuenta también que un estudiante tiene que tomar una tonelada de información que a menudo solo se usa por un corto período de tiempo. Los conceptos "avanzados", como la abstracción, a menudo se enseñan hacia el final de la clase, donde el estudiante solo puede tener una semana más o menos para jugar con él, mientras lucha con las otras clases que tiene que tomar, y posiblemente, en inicio de un trabajo a tiempo parcial o completo. Combina todos esos elementos y es una maravilla que la persona pueda recordar algo , mucho menos mantenerlo todo en orden.

En los EE. UU., Al menos, a menudo se supone que un graduado reciente no sabe nada más allá de los conceptos básicos genéricos (la diferencia entre pasar por valor y pasar por referencia, tal vez), porque se entiende que la teoría genérica y la resolución de problemas es la parte principal de escuela, no aprender los entresijos de un idioma determinado.

Recomiendo usar las preguntas que ha tenido más como un indicador de lo que necesitará enseñar / volver a enseñar (recuerde, es muy posible que simplemente no hayan aprendido el término que está tratando de usar, incluso si cree que es omnipresente), a diferencia de si el entrevistado es "inútil" o no. Combine eso con la medición de cuán dispuestos están a aprender y cómo son sus habilidades generales para resolver problemas (en serio, deles un acertijo para resolver y vea cómo lo hacen), y muy bien puede tener una futura estrella de rock que usted puede haber pasado por alto porque no sabían a qué se refería con "pila de llamadas".

Shauna
fuente
Bueno, en Francia (y sospecho que es lo mismo en la mayoría de los lugares), cada plan de estudios CS incluye una codificación obligatoria en C (o lenguajes similares) cuando uno aprende sobre la asignación de memoria, entre otras cosas), y algo de codificación obligatoria en C ++ / java / .net (donde se aprende sobre OOP). Además de esto, también haces muchas cosas que pueden abarcar muchos campos, pero si uno se gradúa sin saber qué es un método virtual, significa que no se tomó muy en serio sus estudios ... Ciertamente sabía qué fue cuando me gradué ... ¿Qué pensarías de un estudiante de matemáticas que no sabe qué es una serie?
Brann
@Brann: de acuerdo con mi (rápida) investigación sobre qué es la informática (así como mi comprensión anterior de la misma), CS no es un programador importante. Sí, tiene programación, pero no es necesariamente el objetivo principal. Por lo demás, la "informática" es tan amplia y bastante vaga que puede variar de una escuela a otra. Stanford se encuentra entre las mejores escuelas de CS en los EE. UU., Y para sus listas de selección de cursos de otoño e invierno ( www-cs.stanford.edu/courses ), tiene menos de media docena de cursos que parecen centrarse en la programación real (no solo teoría del programa), de aproximadamente 50 clases.
Shauna
Esto significa que es probable que un estudiante use cualquier idioma durante un semestre o dos, y luego no lo toque durante el resto de su carrera estudiantil. Además de eso, también está aprendiendo sobre robótica y programación genética, que son muy diferentes de la programación estándar de escritorio / sistemas integrados / firmware.
Shauna
¿Qué pensarías de un estudiante de matemáticas que no sabe qué es una serie? - Eso depende de qué tipo de Matemáticas se especializó el estudiante y en qué está trabajando realmente. Nuevamente, es completamente posible que el estudiante lo haya aprendido (y, por lo tanto, técnicamente sabe lo que es), pero simplemente lo haya olvidado, porque nunca lo usa en su trabajo diario con criptografía o matemáticas discretas. Las matemáticas y la programación generalmente se consideran temas para usar o perder.
Shauna
3

Tiene bastantes vistas estrechas y las asume implícitamente.

  • Parece que hay una ENORME discrepancia entre lo que espero de alguien que ha estudiado programación durante unos años en la universidad y lo que uno realmente sabe.

    Que yo sepa no hay universidad, donde la gente estudia programación durante unos años. Las universidades ofrecen cursos de informática, de los cuales la programación es un aspecto.

  • ¿Cuál es la diferencia entre un tipo de referencia y un tipo de valor?

    Regla de oro: si Lisp puede prescindir de la distinción, es solo desorden;)

  • Básicamente, hago todo lo posible para engañar al entrevistado para que me cuente sobre la pila de llamadas, el montón, etc., y trato de mantener los conceptos agnósticos del lenguaje.

    Hablar de conceptos independientes del lenguaje es una buena idea. Sin embargo, ni el montón ni la pila son independientes del idioma.

  • Si el entrevistado me dice que hizo mucho C, C ++ o C #, profundizo en el lenguaje específico y posiblemente en los detalles de implementación.

    Todos estos idiomas tienen especificaciones. La implementación no está definida por el idioma. C y C ++ pueden compilarse de forma cruzada utilizando LLVM para ejecutarse en Flash Player o en cualquier tiempo de ejecución de JavaScript. Esto hace que sus suposiciones sobre el montón y la asignación de pila sean nulas.
    Con C #, es casi lo mismo. C # se JITED antes de la ejecución con mucha optimización, eso se puede hacer. Las variables locales, que son capturadas por los cierres finalmente terminarán en el montón, en lugar de en la pila, mientras que el análisis de escape permite almacenar objetos locales de alcance (que normalmente deberían ir al montón) para ser almacenados en la pila. La asignación adecuada del registro también reducirá en gran medida la necesidad de la asignación de la pila.

  • Si es necesario, le pregunto al entrevistado qué es una pila de llamadas o dónde se almacenan los argumentos pasados ​​a una función en el idioma imperativo de su elección.

    ¿Qué le preguntarías a alguien que solo tiene una amplia experiencia en programación con Haskell? :PAGS

  • La mayoría de los entrevistados no tienen idea de qué es una pila de llamadas, y mucho menos de consideraciones de boxeo, etc.

    La idea básica detrás del autoboxing es que las primitivas también pueden tratarse como objetos (o al menos valores cuyo tipo se puede descubrir en tiempo de ejecución). Con respecto a esa abstracción, hay tres tipos de idiomas:

    1. aquellos donde no existe. Supongo que Objective-C es el ejemplo canónico.
    2. aquellos donde realmente tiene
    3. aquellos donde existe pero no se sostiene. Supongo que Java es el mejor ejemplo (supongo que ya se ha solucionado).

    No veo por qué las personas no deberían usar idiomas de categoría 1 (en realidad es una buena idea). No veo por qué las personas que usan idiomas de categoría 2 realmente deberían molestarse. Y creo que todos los que usan un lenguaje de categoría 3, es decir, uno en el que una característica semántica básica simplemente se rompe, están usando el lenguaje incorrecto.

  • ¿Cuál es la diferencia entre una clase abstracta y una interfaz? ¿En qué casos debes usar uno sobre el otro?

    Ahora que es altamente subjetivo y realmente depende del idioma. C ++ no tiene interfaces. Objective-C no tiene clases abstractas. Yo diría que cualquier lenguaje que tenga ambos tiene una gran necesidad de rediseño. Muchos lenguajes modernos usan rasgos, mixins, categorías, roles y construcciones similares para proporcionar soluciones mucho más limpias para la reutilización de código que la herencia de implementaciones parciales. Los lenguajes basados ​​en prototipos no tienen clases del todo de todos modos.

    En definitiva, este es un tema difícil y controvertido. Una entrevista no es el lugar adecuado para resolver esta pregunta y realmente no convencería a nadie que solicite un puesto junior por no darme una buena respuesta.

  • La mayoría de los entrevistados no tienen idea de cuál podría ser el verdadero propósito de la herencia. Usualmente conocen algunas palabras clave (virtual, anulación, etc.), pero realmente no saben cuándo usarlas, y mucho menos explicar qué es una tabla virtual.

    Hay una serie de lenguajes orientados a objetos que no usan herencia ni vtables clásicas.

Mi consejo:

  • Tenga mucho cuidado de asumir que todo lo que sabe sobre programación es realmente un concepto básico de programación. Puede suponer que todo buen programador tiene la curiosidad de encontrar las respuestas a esa pregunta. Sin embargo, no puedes asumir que cualquiera que los conozca es bueno. Tiendo a creer que aquellos que le dan demasiada importancia a tales detalles en realidad no verán el bosque por los árboles.
  • Preocúpese menos por los detalles de implementación. Los lenguajes de programación están destinados a crear abstracciones. Debes pensar en términos de esas abstracciones y solo en términos de ellas. Un buen código no está escrito contra los detalles de implementación de un lenguaje. Está escrito para integrar mejor la semántica de su solución en las características del lenguaje. Si logra hacerlo, su código no solo se volverá robusto, sino que será fácil de leer para cualquier persona familiarizada con el lenguaje y más fácil de optimizar para un compilador.
  • Conocer las respuestas que espera no es tan importante. Comprenderlos es. Si alguien los conocía, porque los leyeron en un libro de texto o su profesor les dijo, entonces es de poco valor. En realidad, puedes explicarte todas esas cosas a ti mismo en cuestión de horas.
    Lo importante es que comprenda cómo se pueden aplicar estos hechos simples y aislados para diseñar soluciones flexibles y mantenibles a problemas complejos.

Para llegar a la pregunta real:

¿Y cree que mi empresa podría tener problemas para atraer a personas con talento, o experimenta el mismo tipo de problemas en su propio proceso de contratación?

Todas las empresas tienen problemas para atraer personas hábiles, excepto quizás los grandes jugadores. Eso es porque hay pocos de ellos. Y debido a la suposición, esa universidad hace que las personas sean hábiles. No lo hace. Los hace conocedores (suponiendo que tanto el estudiante como la universidad cumplan con su parte del trato). La experiencia es lo que hace que las personas sean hábiles.

Hay algunos que han acumulado experiencia antes de ingresar a la universidad y que continúan haciéndolo durante sus estudios. Porque les gusta la programación y porque cuando recogen alguna idea nueva durante un curso, tratarán de ver cómo pueden ponerla en práctica, lo primero que vuelven a casa. Este es el tipo de personas que te encantaría contratar. Pero hay pocos de ellos.
Es la pasión por la programación y la superación personal y su búsqueda lo que hace que los programadores sean buenos. A tiempo.

Creo que debes darte cuenta de que, lamentablemente, la mayoría de las personas entrarán y abandonarán la universidad sin suficiente experiencia en programación.
Al mismo tiempo, nuestra industria tiene una gran necesidad de programadores experimentados. Por lo tanto, creo que la misión de nuestra industria es tratar de intervenir. Y al entrevistar a candidatos para puestos junior, lo que realmente está buscando es gente dispuesta a aprender y mejorar. Y debe elegir con cuidado, porque necesitará invertir mucha energía y no quiere que se desperdicie.

Piense en ello como contratar una sangre fresca para convertirse en un piloto para su equipo de carreras: un buen piloto tiene una comprensión suficiente de la mecánica para hacer el mejor uso de su automóvil, pero este conocimiento por sí solo no sirve de nada (ni siquiera es una gran ventaja comienzo). Lo que está buscando es alguien dispuesto a trabajar duro en su propia mejora y bien con su equipo.

back2dos
fuente
1

Independientemente del término "tipo inmediato" del que no tengo ni idea (¿tipo de valor? OK, no estaba seguro, gracias por actualizar), creo que tiene razón sobre sus preguntas y no es extremista. Estas son preguntas que se deben responder si uno sale de la escuela. Aun así, no descartaré a los candidatos de inmediato, todavía hay algunos que pueden tener potencial porque quieren aprender.

Para continuar con la analogía de la licencia de conducir: a algunas personas no les importa lo que sucede cuando insertan la llave (o presionan el botón "Inicio"). Simplemente lo hacen y conducen. Esto tampoco significa que no valen nada, solo que les tomará tiempo alcanzar el estrellato ;-)

Solo un comentario personal sobre el título / diploma: actualmente estoy trabajando con personas con antecedentes bioquímicos e industriales que tienen algunos años de experiencia en el campo de TI y también algunos tipos "experimentados" con experiencia en CS, y adivinen quiénes son los más conocedores. ¿Cómo funciona el motor del vehículo? ¡Sí, no son los chicos los que han estudiado CS! ¡Entonces estoy experimentando el hecho de que el diploma no siempre importa!

Jalayn
fuente
2
Algunas personas pueden pasar tanto tiempo jugando con su vehículo para alcanzar la velocidad máxima, que los lentos han terminado antes de comenzar.
bastante justo :-)
Jalayn
Estoy totalmente de acuerdo con respecto a las personas que provienen de otros campos además de CS. pero para alguien que realmente posee un título de CS, no saber lo que es un tipo de valor parece un poco preocupante por decir lo menos ...
Brann
@brann, es posible que no conozcan el término , pero aún deben tener en cuenta que la ubicación física de los datos que contiene la variable se coloca en el segmento de datos y no en el montón o la pila. ¿Qué idioma utilizas ya que esto parece ser importante?
Estoy usando C #. Y estoy de acuerdo en que conocer este tipo de detalles de implementación probablemente no sea tan importante en ese contexto (aunque en algunas situaciones específicas, podría serlo). Lo que pasa es que no estoy tratando de encontrar un experto ac #. Estoy tratando de encontrar a alguien lo suficientemente inteligente y motivado como para ser realmente bueno codificando en C #. Si a uno no le importaba aprender / entender qué tipo de valor, tiendo (tal vez erróneamente) a pensar que pierde una de esas dos cualidades, al menos
Brann
1

Generalmente no hago preguntas específicas sobre terminología o definiciones durante las entrevistas. Como han señalado otras respuestas, las personas tienen diferentes términos para diferentes conceptos y, si bien pueden comprender conceptualmente el tema, es posible que no puedan transmitírselo.

Con Juniors estoy intensamente enfocado en sus pasantías o proyectos escolares. Hago preguntas sobre preguntas sobre ellos, les dejo articular respuestas y luego empiezo a profundizar en su participación real en el proyecto, lo que aprendieron, lo que sintieron.

En general, si la persona tenía un peso muerto en el proyecto, entonces no pueden darme respuestas satisfactorias, por lo que es bastante fácil saberlo. Solo tenga cuidado de no confundir nervioso e introvertido con desinteresado y no involucrado.

Ser capaz de determinar el buen candidato que es tímido e introvertido es un poco difícil, pero la cultura en la que trabajo no sería buena para un desarrollador introvertido y tímido, por lo que si no pueden mantener una conversación productiva detallada conmigo, entonces No encajan bien.

árbol de arce
fuente
1
 or chose his university very unwisely.

Eso es muy injusto. Cuando eres estudiante, todo lo que puedes hacer es elegir la universidad mejor calificada en la que tus calificaciones te meterán, o tal vez aquella que anuncia que te permite jugar con perros robóticos que juegan al fútbol. Nada mas. Solo puede evaluar un curso universitario después de haberlo hecho, luego se fue y trabajó en la industria durante unos años y construyó algunos proyectos no triviales.

Incluso si muestra un gran letrero de neón en cada curso que dice "NO ENSEÑAMOS LA PILA DE LLAMADAS", ¿qué espera que hagan los estudiantes al respecto? ¿Pasar meses investigándolo para que realmente puedan entender lo que eso significa y cuánto necesitarían uno que lo enseñe? ¿Para cada curso con cada combinación de signos?

La gente no puede elegir su educación de manera realista.

DeadMG
fuente
0

Al entrevistar a nuevos graduados, me quedo con los temas enumerados en su CV. Si usaron Java, les preguntaré sobre Java. Si usaban Blub, me paso media hora leyendo sobre Blub y les pregunto sobre eso. Pero siempre pregunto usando las palabras clave del idioma. Si se trata de Java, preguntaré sobre "extiende" e "implementa", pero no sobre "subclase" y "hereda". Espero que los nuevos graduados puedan hablar sobre el código que han escrito, poder resolver un problema de programación simple y tener una idea de las estructuras básicas de datos (tablas hash y árboles).

Kevin Cline
fuente
0

Como Director que diseñó el proceso de entrevista, puedo informarle sobre lo que nuestra empresa espera de los nuevos graduados: espero que las personas puedan leer la documentación y aplicar los conocimientos. Por lo tanto, tenemos algunas tareas muy prácticas que les pedimos que realicen. Estas son tareas de codificación simples, no mucho más difíciles que el ejercicio promedio de la clase universitaria (los desarrolladores "buenos" experimentados pueden eliminarlo en aproximadamente 15 minutos). El candidato recibe una estación de trabajo con acceso a Internet, un compilador (en nuestro caso, un estudio visual) y archivos de ayuda.

Si no pueden escribir el código en estas condiciones, no reciben contrataciones. Simple como eso. Toda la excusa de "bueno, no sé el idioma" realmente nunca se me ocurrió porque cada candidato que viene a entrevistar aquí sabe que habrá una prueba, saben los idiomas y las herramientas que usamos por adelantado. Puede descargar Visual Studio Express en casa y hacer algunos conceptos básicos antes de pasar y pasar la prueba de nivel de entrada, aquellos que no se molestan ... bueno, eso es lo que yo llamo una bandera roja.

Eric
fuente
Esta es la mejor manera de encontrar a alguien que afirme que sabe algo que realmente lo sabe lo suficiente como para usarlo. Preguntar qué significa un término, algo que fuera del aula, casi nunca se usa, no tiene sentido. Es decir, en los últimos 18 meses, no he tenido una discusión sobre los tipos de referencia, aunque podría haberme quejado de algo que involucraba indicadores.
Ramhound