Dois-je m'attendre à ce que les diplômés récents connaissent les concepts de programmation de base? [fermé]

9

Il semble qu'il y ait une énorme différence entre ce que j'attends d'une personne qui a étudié la programmation pendant quelques années à l'université et ce que l'on sait réellement.

Je n'ai pas l'impression de poser des questions trop compliquées lors des entretiens. Certaines de mes questions habituelles sont:

  • Quelle est la différence entre un type de référence et un type de valeur?

    S'il semble que l'interviewé ne comprenne pas vraiment sa propre réponse, ou s'il ne connaît pas la terminologie que j'utilise, j'entre dans les détails en lui demandant de m'expliquer ce qui se passe quand j'écris int i = 0; dans une méthode, qu'en est-il de l'objet o = 0, objet o = new MyClass (), etc ...

    Fondamentalement, je fais tout ce que je peux pour inciter l'interviewé à me parler de la pile d'appels, du tas, etc., et j'essaie de rester dans les concepts d'angnostique linguistique. Si l'interviewé me dit qu'il a fait beaucoup de C, ou C ++, ou c #, je plonge plus profondément dans le langage spécifique, et peut-être dans les détails d'implémentation.

    Si nécessaire, je demande à l'interviewé ce qu'est une pile d'appels ou où sont stockés les arguments passés à une fonction dans le langage impératif de son choix.

    la plupart des personnes interrogées n'ont aucune idée de ce qu'est une pile d'appels, encore moins des considérations de boxe, etc.

  • Quelle est la différence entre une classe abstraite et une interface. Dans quels cas devez-vous utiliser l'un sur l'autre?

    Habituellement, je leur demande également d'imaginer la conception d'une petite bibliothèque avec un cas d'utilisation visant à utiliser un héritage et des usines abstraites

    La plupart des personnes interrogées n'ont aucune idée de ce que pourrait être le véritable objectif de l'héritage. Ils connaissent généralement certains mots clés (virtuel, remplacement, etc.), mais ne savent pas vraiment quand les utiliser, sans parler d'expliquer ce qu'est une table virtuelle.

Même si je sélectionne les CV au préalable, même pour les personnes ayant 5 ans d'expérience dans des projets réels impliquant des architectures complexes, je dirais que moins de 25% de toutes mes personnes interrogées peuvent répondre correctement à ces deux questions. Et quand je dis correctement, je ne veux pas dire «en profondeur» ... juste pour avoir une idée approximative de ce qu'est le concept.

En ce qui concerne les juniors, je suis content d'embaucher quelqu'un qui ne sait pas très bien organiser son temps, ou quelqu'un qui n'est pas habitué aux processus de construction industrielle par exemple, mais j'ai le sentiment que si l'on n'a pas entendu le mot " callstack "après quelques années d'études en informatique, il est soit stupide, soit démotivé, ou a choisi son université de façon très imprudente.

Pensez-vous que je suis trop extrémiste ici? Est-il courant d'apprendre ces concepts de base après avoir terminé ses études universitaires? Connaissez-vous des gens qui ne les connaissaient pas et qui sont devenus de très bons ingénieurs logiciels après quelques années? Et pensez-vous que mon entreprise pourrait avoir du mal à attirer des personnes talentueuses, ou rencontrez-vous le même genre de problèmes avec votre propre processus d'embauche?


Éditer. en ce qui concerne le «type immédiat», ce n'était qu'une traduction littérale du français vers l'anglais, comme nous faisons habituellement nos interviews en français. Je l'ai corrigé dans ma question. Mais encore, je pense que vous comprenez tous parfaitement ce que je voulais dire, ce qui fait mon point, non?

Brann
la source
4
Juste une remarque mineure mais je ne saurais pas ce que vous voulez dire par type immédiat, type valeur par contre je pourrais vous l'expliquer. Cependant, je pense que tous ceux qui ont obtenu un diplôme CS devraient pouvoir répondre à ces deux questions. Pour améliorer votre question, vous pourriez peut-être donner un exemple de l'exhaustivité des réponses que vous attendez.
sebastiangeiger
L'étude d'une langue pendant plus de 2 ans à l'université, la compétition avec d'autres matières ne laisse aux étudiants que le strict minimum après la fin de leurs tests. La seule chose dont vous pouvez être sûr, c'est qu'ils peuvent apprendre cette information, ou qu'ils l'ont déjà connue. Seule une expérience pratique peut leur conférer une permanence des connaissances. Joel Spolsky donne un excellent exemple de comment et pourquoi les étudiants manquent de nombreuses capacités que nous devrions nous attendre à ce que les programmeurs aient dans son article de blog ici - http://www.joelonsoftware.com/items/2009/10/26.html
Justin Shield
@sebastiangeiger; vous avez raison mis à jour!
Brann
2
Il doit savoir qu'il ne sait presque rien. C'est le point clé pour s'améliorer avec le temps.
deadalnix
Brann, fait intéressant, toutes les personnes qui ont répondu à cette question mentionnent le «type immédiat» (erreur de traduction) et vous disent qu'elles ne savent pas ce que c'est. Vos intervieweurs disent-ils: "Je n'ai pas étudié ces questions en profondeur?" ou prétendent-ils être des experts, par exemple, des spécificités d'exécution et une compréhension approfondie des compilateurs?
Pindatjuh

Réponses:

15

La terminologie est une chute courante dans une situation d'entrevue.

Vous posez à la personne interrogée une question en utilisant une terminologie qui signifie quelque chose pour vous, mais la personne interrogée peut la connaître par un terme différent, ou peut simplement connaître la théorie générique sans application à des langues ou des environnements spécifiques. Des malentendus s'ensuivent. Aucune des parties n'est heureuse.

En fait, il s'avère que l'interviewé comprend parfaitement que certaines valeurs peuvent être stockées directement dans un registre et que d'autres font référence à un morceau de mémoire ailleurs, mais parce que vous posez la question dans un domaine spécifique, le point de ce que vous demandez, et ce que vous voulez que l'interviewé vous dise, ne passe pas vraiment.

Peut-être que vous rencontrez beaucoup de situations où l'interviewé clique soudainement et dit `` Oh - c'est de cela que vous parlez '' - puis explique de manière assez adéquate.

C'est un équilibre difficile parce que les programmeurs fraîchement sortis de l'université ne vont pas avoir l'expérience diversifiée que le développement du monde réel dans un environnement d'équipe leur donne. Pendant ce temps, les développeurs expérimentés ne se souviendront souvent pas (ou ne seront même pas intéressés) de tout ce qu'ils ont appris à l'université parce que cela n'est tout simplement pas pertinent pour leur utilisation quotidienne.

Ces deux types de personnes (eh oui - c'est la personne interrogée et l'intervieweur) besoin d'apprendre à communiquer avec l'autre avant de pouvoir en apprendre davantage sur les uns des autres. Il incombe à la personne ayant la plus grande expérience (l'intervieweur) de veiller à ce que cela se produise.

Sans parler du fait que certaines personnes souffrent d'une défaillance complète de la mémoire lors des entretiens. Moi-même inclus. Je me souviens d'avoir été invité à écrire un programme en C et je n'ai pas pu me souvenir du symbole utilisé pour accéder à un membre à partir d'un pointeur (->) et j'ai dû demander à quelqu'un. Ce n'était même pas pour mon premier emploi. Boy a ce moment me tourmente depuis 15 ans :-)

À mon avis, la capacité de communiquer, de résoudre les problèmes de manière efficace et complète est beaucoup plus utile; ramasser les choses rapidement; faire preuve d'une attitude positive et positive; bien interagir avec d'autres personnes et d'autres valeurs fondamentales.

N'abandonnez pas les personnes interrogées car elles ne savent pas ce qu'est un type immédiat. Passez.

Roger Attrill
la source
@Brann - type immédiat -> type de valeur. noté
Roger Attrill
Eh bien, ce n'est peut-être pas assez clair d'après le libellé de ma question, mais je fais vraiment beaucoup pour m'assurer qu'il n'y a pas de problème de terminologie. Je demande à l'enquêté ce qui se passe dans des situations spécifiques dans la langue de son choix, je lui demande s'il sait ce qu'est une pile d'appels, je lui demande s'il y a différents "types" de souvenirs, je lui demande où sont passés les arguments passés à une fonction stocké dans la langue impérative de son choix. Vraiment, je ne pense pas que ce soit un problème de terminologie. Parfois, l'interviewé n'a AUCUNE IDÉE sur ce qui se passe derrière la scène quand une classe est instanciée.
Brann
en ce qui concerne le "passage", c'est ce que je fais habituellement. Mais d'après mon expérience, quand une personne interrogée ne sait pas ce qu'est un type de valeur, elle ne connaît pas non plus la synchronisation des threads, ni à quoi servent les génériques, etc. Donc, après quelques questions, quand il devient clair, le candidat n'est pas 'ne convient pas au travail, je lui donne généralement quelques conseils sur ce qu'il faut apprendre pour mieux performer dans les entretiens techniques et ... passer au prochain candidat :)
Brann
12

Vous demandez des connaissances spécifiques à une langue et les termes que vous utilisez ne sont pas identiques à 100% dans toutes les langues. Pour ma part, je n'ai aucune idée de ce qu'est un "type immédiat".

En outre, considérez que les choses enseignées dans une université ne consistent pas à lancer du code standard dans X, mais à avoir appris beaucoup de concepts sous-jacents et vu divers paradigmes de programmation. En d'autres termes, cela ressemble beaucoup à un permis de conduire - même si vous connaissez la théorie de base, vous avez encore besoin de beaucoup de pratique.


la source
J'ai mis à jour "type de valeur". Mais le fait est que si la personne interrogée ne comprend pas la question, je l'explique généralement plus en détail, et j'essaie beaucoup de choses pour l'inciter à me parler de la pile d'appels, du tas, etc. ... (oui, JE SAIS ce sont des détails d'implémentation, mais ce sont quand même des concepts généraux qui ne sont pas vraiment IMO spécifiques au langage)
Brann
Je pense que le concept de "callstack" est l'un de ces concepts généraux dont vous parlez. Même après avoir reformulé la question de dix manières différentes pour m'assurer que l'interviewé sait que je m'attends à ce qu'il me parle de l'allocation de mémoire, de la pile d'appels, des types de valeur, etc., je reçois toujours, le plus souvent, des regards vides ...
Brann
Si je vous comprends bien, vous voulez savoir si le développeur connaît les pointeurs et sait ce qu'ils font et comment les utiliser?
Non je ne sais pas. Je veux m'assurer que le développeur a au moins une idée approximative de ce qui se passe derrière la scène lorsqu'il utilise la fonction x ou y de la langue de son choix. Lui demander des pointeurs n'est qu'un moyen de le faire parler de ce qu'il sait sur l'allocation de mémoire.
Brann
3
@Brann, toutes les informations détaillées sur la pile d'appels, le tas, etc., ne sont essentiellement que des pointeurs appliqués .
3

"J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends." (Et, à mon avis, la compréhension conduit à une meilleure rétention de la mémoire.)

En termes simples, un diplômé récent n'a pas beaucoup d'expérience, donc comme quelqu'un d'autre l'a fait remarquer, il n'aura pas beaucoup plus que le strict minimum de connaissances, quelle que soit sa langue «choisie».

Je suis allé dans un collège spécialement conçu pour rationaliser l'apprentissage de la majeure choisie (ainsi, par exemple, vous n'auriez pas de littérature historique si vous étiez un major CS; le plus proche de la littérature historique est la science-fiction), et tout droit sorti de l'université, je n'aurais pas pu vous dire quelle interface était encore moins sa différence avec une classe abstraite, bien que nous ayons appris l'abstraction (et les interfaces abondent en .Net, la technologie que j'ai apprise). Nous avons peut-être abordé les interfaces, mais elles se sont perdues dans toutes les autres choses que nous devions savoir pour réussir la classe. Ce n'est que lors de mon premier emploi à la sortie de l'université que j'ai découvert les interfaces, en particulier de manière significative.

Vous avez mentionné avoir fait des entrevues en français, ce qui montre clairement que nous sommes dans différents pays, donc votre kilométrage peut varier, mais ici aux États-Unis, les collèges accusent un retard notoire en matière de technologie. Par conséquent, à moins que vous n'ayez affaire aux langages matures (C / C ++, COBOL, etc.), il est également très probable que ce que vous utilisez même depuis des années ne soit pas disponible dans la version sur laquelle les étudiants ont appris. Par exemple, .Net 3.0 a introduit Entity Framework, WPF, WCF et une foule d'autres choses sympas, mais même mon école était toujours bloquée sur .Net 1.1 et 2.0 (ce qui signifiait être bloqué avec ADO.NET et ne même pas apprendre sur Object - Cartographie relationnelle). Une école qui utilise PHP peut être bloquée sur (non-OOP) PHP 4.

Gardez également à l'esprit qu'un étudiant doit prendre une tonne d'informations qui ne sont souvent utilisées que pendant une courte période. Les concepts "avancés", comme l'abstraction, sont souvent enseignés vers la fin du cours, où l'élève peut n'avoir qu'une semaine ou deux pour jouer avec, tout en luttant avec les autres cours qu'il doit suivre, et éventuellement sur haut d'un emploi à temps partiel ou à temps plein. Combinez tous ces éléments ensemble et c'est une merveille que la personne puisse se souvenir de quoi que ce soit , encore moins garder les choses bien droites.

Aux États-Unis, au moins, un diplômé récent est souvent supposé ne rien savoir au-delà des bases génériques (la différence entre passer par la valeur et passer par la référence, peut-être), car il est entendu que la théorie générique et la résolution de problèmes sont la partie principale de l'école, sans apprendre les tenants et aboutissants d'une langue donnée.

Je recommande d'utiliser les questions que vous vous posez davantage pour évaluer ce dont vous aurez besoin pour les enseigner / les ré-enseigner (rappelez-vous, il est tout à fait possible qu'ils n'aient tout simplement pas appris le terme que vous essayez d'utiliser, même si vous pensez que c'est omniprésent), par opposition à la question de savoir si la personne interrogée est «sans valeur» ou non. Combinez cela avec une évaluation de leur volonté d'apprendre et de leurs compétences générales en résolution de problèmes (sérieusement, donnez-leur une énigme à résoudre et voyez comment ils s'y prennent), et vous pouvez très bien avoir une future rockstar que vous peut avoir disparu parce qu'ils ne savaient pas ce que vous vouliez dire par «pile d'appels».

Shauna
la source
Eh bien, en France (et je suppose que c'est la même chose dans la plupart des endroits), chaque programme CS comprend un codage obligatoire en C (ou des langues similaires) lorsque l'on apprend sur l'allocation de mémoire entre autres), et un codage obligatoire en C ++ / java / .net (où l'on découvre la POO). En plus de cela, vous faites aussi beaucoup de choses qui peuvent couvrir beaucoup de domaines, mais si des diplômés sans savoir ce qu'est une méthode virtuelle, cela signifie qu'il n'a pas pris ses études très au sérieux ... Je savais certainement ce que c'était quand j'ai obtenu mon diplôme ... Que pensez-vous d'un étudiant en mathématiques qui ne sait pas ce qu'est une série?
Brann
@Brann - D'après mes recherches (rapides) sur ce qu'est l'informatique (ainsi que ma compréhension précédente), CS n'est pas un programme majeur. Oui, il contient de la programmation, mais ce n'est pas nécessairement l'objectif principal. D'ailleurs, "l'informatique" est si large et assez vague qu'elle peut varier d'une école à l'autre. Stanford est parmi les meilleures écoles de CS aux États-Unis et pour ses listes de sélection de cours d'automne et d'hiver ( www-cs.stanford.edu/courses ), elle compte moins d'une demi-douzaine de cours qui semblent se concentrer sur la programmation réelle (pas seulement théorie des programmes), sur une cinquantaine de classes.
Shauna
Cela signifie qu'un étudiant est susceptible d'utiliser une langue donnée pendant un semestre ou deux, puis de ne pas la toucher pour le reste de sa carrière étudiante. En plus de cela, il apprend également la robotique et la programmation génétique, qui sont très différentes de la programmation de bureau / systèmes embarqués / firmware standard.
Shauna
Que pensez-vous d'un étudiant en mathématiques qui ne sait pas ce qu'est une série? - Cela dépend du type de mathématiques dans lequel l'élève s'est spécialisé et sur quoi il travaille réellement. Encore une fois, il est tout à fait possible que l'étudiant l'ait appris (et donc, sait techniquement ce que c'est), mais l'ait simplement oublié, car il ne l'utilise jamais dans son travail quotidien avec la cryptographie ou les mathématiques discrètes. Les mathématiques et la programmation sont généralement considérées comme des sujets à utiliser ou à perdre.
Shauna
3

Vous avez un certain nombre de vues étroites et vous les supposez implicitement.

  • Il semble qu'il y ait une énorme différence entre ce que j'attends d'une personne qui a étudié la programmation pendant quelques années à l'université et ce que l'on sait réellement.

    À ma connaissance, il n'y a pas d'université où les gens étudient la programmation pendant quelques années. Les universités proposent des cours d'informatique, dont la programmation est un aspect.

  • Quelle est la différence entre un type de référence et un type de valeur?

    Règle générale: si Lisp peut se passer de la distinction, ce n'est que de l'encombrement;)

  • Fondamentalement, je fais tout ce que je peux pour inciter l'interviewé à me parler de la pile d'appels, du tas, etc., et j'essaie de rester dans les concepts d'angnostique linguistique.

    Parler des concepts linguistiques-agnostiques est une bonne idée. Cependant, ni le tas ni la pile ne sont indépendants de la langue.

  • Si l'interviewé me dit qu'il a fait beaucoup de C, ou C ++, ou C #, je plonge plus profondément dans le langage spécifique, et peut-être dans les détails d'implémentation.

    Toutes ces langues ont des spécifications. L'implémentation n'est pas définie par le langage. C et C ++ peuvent être compilés de manière croisée à l'aide de LLVM pour s'exécuter sur Flash Player ou tout autre runtime JavaScript. Cela rend vos hypothèses sur l'allocation de tas et de pile nulles.
    Avec C #, c'est à peu près la même chose. C # est JIT avant exécution avec beaucoup d'optimisation, ce qui peut être fait. Les variables locales, qui sont capturées par des fermetures, finiront par se retrouver sur le tas, au lieu de la pile, tandis que l'analyse d'échappement permet de stocker des objets de portée locale (qui devraient normalement aller dans le tas) pour être stockés dans la pile. Une allocation correcte des registres réduira également considérablement le besoin d'allocation de pile.

  • Si nécessaire, je demande à l'interviewé ce qu'est une pile d'appels ou où sont stockés les arguments passés à une fonction dans le langage impératif de son choix.

    Que demanderiez-vous à quelqu'un qui n'a qu'une vaste expérience en programmation avec Haskell? : P

  • La plupart des personnes interrogées n'ont aucune idée de ce qu'est une pile d'appels, encore moins des considérations de boxe, etc.

    L'idée de base derrière l'autoboxing est que les primitives peuvent également être traitées comme des objets (ou au moins des valeurs dont le type peut être découvert au moment de l'exécution). En ce qui concerne cette abstraction, il existe trois types de langues:

    1. ceux où il n'existe pas. Je suppose qu'Objective-C est l'exemple canonique.
    2. ceux où il tient vraiment
    3. ceux où il existe mais ne tient pas. Je suppose que Java est le meilleur exemple (je suppose qu'il a été corrigé maintenant).

    Je ne vois pas pourquoi les gens ne devraient pas utiliser des langues de catégorie 1 (en fait, c'est une bonne idée). Je ne vois pas pourquoi les gens qui utilisent des langues de catégorie 2 devraient vraiment s'embêter. Et je pense que tous ceux qui utilisent un langage de catégorie 3, c'est-à-dire celui où une caractéristique sémantique de base est simplement cassée, utilisent le mauvais langage.

  • Quelle est la différence entre une classe abstraite et une interface. Dans quels cas devez-vous utiliser l'un sur l'autre?

    Maintenant, cela est très subjectif et dépend vraiment de la langue. C ++ n'a pas d'interfaces. Objective-C n'a pas de classes abstraites. Je dirais que toute langue qui a les deux a un grand besoin de refonte. De nombreux langages modernes utilisent des traits, des mixins, des catégories, des rôles et des constructions similaires pour fournir des solutions beaucoup plus propres pour la réutilisation de code que l'héritage d'implémentations partielles. De toute façon, les langages basés sur des prototypes n'ont pas de classes.

    En fin de compte, c'est un sujet difficile et contesté. Une entrevue n'est pas le bon endroit pour résoudre cette question et je ne dirais vraiment à personne qui postule pour un poste junior de ne pas me donner une bonne réponse.

  • La plupart des personnes interrogées n'ont aucune idée de ce que pourrait être le véritable objectif de l'héritage. Ils connaissent généralement certains mots clés (virtuel, remplacement, etc.), mais ne savent pas vraiment quand les utiliser, sans parler d'expliquer ce qu'est une table virtuelle.

    Il existe un certain nombre de langages orientés objet, qui n'utilisent pas l'héritage ou les vtables classiques.

Mon conseil:

  • Soyez très prudent en supposant que tout ce que vous savez sur la programmation est vraiment un concept de programmation de base . Vous pouvez supposer que tout bon programmeur a la curiosité de trouver les réponses à une telle question. Cependant, vous ne pouvez pas supposer que quiconque les connaît est bon. J'ai tendance à croire que ceux qui accordent trop d'importance à de tels détails risquent en fait de ne pas voir la forêt pour les arbres.
  • Vous vous inquiétez moins des détails de mise en œuvre. Les langages de programmation sont destinés à créer des abstractions. Vous devez penser en termes de ces abstractions et uniquement en termes. Un bon code n'est pas écrit contre les détails d'implémentation d'un langage. Il est écrit pour intégrer au mieux la sémantique de votre solution dans les fonctionnalités du langage. Si vous réussissez à le faire, votre code deviendra non seulement robuste, mais bien lisible pour toute personne familière avec le langage, et plus facile à optimiser pour un compilateur.
  • Connaître les réponses que vous attendez n'est pas si important. Les comprendre est. Si quelqu'un les connaissait simplement, parce qu'ils les lisaient dans un manuel ou que son professeur leur avait dit, alors cela avait peu de valeur. En fait, vous pouvez vous expliquer toutes ces choses en quelques heures.
    Ce qui est important, c'est que vous compreniez comment ces faits simples et isolés peuvent être appliqués à l'ingénierie de solutions flexibles et maintenables à des problèmes complexes.

Pour arriver à la vraie question:

Et pensez-vous que mon entreprise pourrait avoir du mal à attirer des personnes talentueuses, ou rencontrez-vous le même genre de problèmes avec votre propre processus d'embauche?

Toutes les entreprises ont des problèmes pour attirer des personnes compétentes, sauf peut-être les grands acteurs. C'est parce qu'il y en a peu. Et en raison de l'hypothèse, cette université rend les gens habiles. Ce n'est pas le cas. Cela les rend bien informés (en supposant que l'étudiant et l'université tiennent leur part du marché). L'expérience est ce qui rend les gens habiles.

Il y en a quelques-uns qui ont acquis de l'expérience avant d'entrer à l'université et qui continuent de le faire pendant leurs études. Parce qu'ils aiment la programmation et parce qu'ils apprennent une nouvelle idée pendant un cours, ils essaieront de voir comment ils peuvent l'utiliser, la première chose qu'ils rentreront chez eux. C'est le genre de personnes que vous aimeriez embaucher. Mais il y en a peu.
C'est la passion pour la programmation et l'amélioration de soi et sa poursuite qui rendent les programmeurs bons. À l'heure.

Je pense, ce que vous devez comprendre, c'est que malheureusement la plupart des gens entreront et quitteront l'université sans expérience de programmation suffisante.
Dans le même temps, notre industrie a grandement besoin de programmeurs expérimentés. Par conséquent, je pense que c'est la mission de notre industrie d'essayer réellement d'intervenir. Et vous devez choisir avec soin, car vous devrez investir beaucoup d'énergie et vous ne voulez pas que cela soit gaspillé.

Considérez cela comme l'embauche d'un sang frais pour devenir un pilote pour votre équipe de course: Un bon pilote a une compréhension suffisante de la mécanique pour tirer le meilleur parti de sa voiture, mais cette connaissance à elle seule est inutile (ce n'est même pas beaucoup de tête début). Ce que vous cherchez, c'est quelqu'un qui veut travailler dur pour sa propre amélioration et bien avec votre équipe.

back2dos
la source
1

Quel que soit le terme "type immédiat" dont je n'ai aucune idée (type de valeur? OK, je n'étais pas sûr, merci pour la mise à jour), je pense que vous avez raison sur vos questions et que vous n'êtes absolument pas extrémiste. Ce sont des questions auxquelles on peut répondre si l’on sort de l’école. Pourtant, je ne licencierai pas les candidats immédiatement, il y en a encore qui peuvent avoir du potentiel car ils veulent apprendre.

Pour continuer avec l'analogie du permis de conduire: certaines personnes ne se soucient pas de ce qui se passe quand ils insèrent la clé (ou poussent le bouton "démarrer"). Ils le font et conduisent. Cela ne signifie pas non plus qu'ils ne valent rien, mais qu'il leur faudra du temps pour atteindre la célébrité ;-)

Juste une remarque personnelle sur le grade / diplôme: je travaille actuellement avec des personnes ayant une formation en biochimie et industrielle qui ont quelques années d'expérience dans le domaine informatique et aussi des gars "expérimentés" avec une formation en CS, et devinez qui sont les plus compétents sur le fonctionnement du moteur du véhicule? Ouais, ce ne sont pas les gars qui ont étudié le CS! Je constate donc simplement que le diplôme n'a pas toujours d'importance!

Jalayn
la source
2
Certaines personnes peuvent passer tellement de temps à bricoler leur véhicule pour atteindre sa vitesse maximale, que les lentes ont fini avant même de commencer.
assez juste :-)
Jalayn
Je suis totalement d'accord avec les personnes venant d'autres domaines que CS. mais pour quelqu'un qui possède en fait un diplôme CS, ne pas savoir ce qu'est un type de valeur semble un peu inquiétant pour le moins ...
Brann
@brann, ils ne connaissent peut-être pas le terme , mais ils savent tout de même que l'emplacement physique des données détenues par la variable est placé dans le segment de données et non dans le tas ou la pile. Quelle langue utilisez-vous car cela semble important?
J'utilise c #. Et je suis d'accord que connaître ce type de détails de mise en œuvre n'est probablement pas si important dans ce contexte (bien que dans certaines situations spécifiques, cela puisse l'être). Le truc, c'est que je n'essaye pas de trouver un expert ac #. J'essaie de trouver quelqu'un d'assez intelligent et suffisamment motivé pour devenir vraiment bon en codage en c #. Si l'on ne se soucie pas d'apprendre / comprendre ce qu'est un type de valeur, j'ai tendance (peut-être à tort) à penser qu'il manque l'une de ces deux qualités, au moins
Brann
1

Je ne pose généralement pas de questions spécifiques sur la terminologie ou les définitions lors des entretiens. Comme d'autres réponses l'ont noté, les gens ont des termes différents pour différents concepts et bien qu'ils puissent comprendre conceptuellement le sujet, ils peuvent ne pas être en mesure de vous le transmettre.

Avec Juniors, je me concentre intensément sur leurs stages ou projets scolaires. Je pose des questions sur des questions à leur sujet, je les laisse articuler des réponses, puis je commence à approfondir leur implication réelle dans le projet, ce qu'ils ont appris, ce qu'ils ont ressenti.

Généralement, si la personne était en lourd dans le projet, elle ne peut généralement pas me donner de réponses satisfaisantes, donc c'est généralement assez facile à dire. Faites juste attention à ne pas confondre nerveux et introverti avec désintéressé et non impliqué.

Être en mesure de déterminer le bon candidat timide et introverti est un peu difficile, mais la culture dans laquelle je travaille ne serait pas bonne pour un développeur introverti et timide, donc s'il ne peut pas avoir une conversation détaillée et productive avec moi, ne conviennent pas.

maple_shaft
la source
1
 or chose his university very unwisely.

C'est très injuste. Lorsque vous êtes étudiant, tout ce que vous pouvez faire est de choisir l'université la mieux classée dans laquelle vous obtiendrez vos notes, ou peut-être celle qui vous permet de jouer avec des chiens robotiques jouant au football. Rien de plus. Vous ne pouvez évaluer un cursus universitaire qu'après l'avoir fait, puis partir et travailler dans l'industrie pendant quelques années et construire des projets non triviaux.

Même si vous avez affiché une énorme enseigne au néon sur chacun de ces cours en disant "NOUS N'ENSEIGNONS PAS LA PILE D'APPELS", alors qu'attendez-vous que les élèves fassent à ce sujet? Passer des mois à le rechercher afin qu'ils puissent réellement comprendre ce que cela signifie et combien ils en auraient besoin d'un qui l'enseigne? Pour chaque cours avec chaque combinaison de signes?

Les gens ne peuvent pas choisir leur éducation de façon réaliste.

DeadMG
la source
0

Lorsque j'interroge de nouveaux diplômés, je m'en tiens aux sujets énumérés dans leur CV. S'ils utilisaient Java, je leur poserai des questions sur Java. S'ils ont utilisé Blub, je passe une demi-heure à lire à propos de Blub et je leur pose des questions à ce sujet. Mais je demande toujours en utilisant les mots-clés de la langue. Si c'est Java, je vais poser des questions sur "étend" et "implémente" mais pas "sous-classe" et "hérite". Je m'attends à ce que les nouveaux diplômés soient capables de parler du code qu'ils ont écrit, de pouvoir résoudre un problème de programmation simple et d'avoir une compréhension des structures de données de base (tables de hachage et arbres).

kevin cline
la source
0

En tant que directeur qui a conçu le processus d'entrevue, je peux vous expliquer ce que notre entreprise attend des nouveaux diplômés: j'attends des gens qui peuvent lire la documentation et appliquer les connaissances. Ainsi, nous avons quelques tâches très pratiques que nous leur demandons d'effectuer. Ce sont des tâches de codage simples, pas beaucoup plus difficiles que votre exercice moyen en classe (les "bons" développeurs expérimentés peuvent le supprimer en 15 minutes environ). Le candidat reçoit un poste de travail avec accès à Internet, un compilateur (dans notre cas visual studio) et des fichiers d'aide.

S'ils ne peuvent pas écrire de code dans ces conditions, ils ne sont pas pris en considération pour la location. Aussi simple que cela. L'excuse «bien je ne connais pas la langue» ne m'a jamais vraiment plu car chaque candidat qui vient interviewer sait qu'il y aura un test, il connaît les langues et les outils que nous utilisons à l'avance. Vous pouvez télécharger Visual Studio Express à la maison et faire quelques notions de base avant d'entrer et de passer le test d'entrée de gamme, ceux qui ne dérangent pas ... enfin c'est ce que j'appelle un drapeau rouge.

Eric
la source
C'est le meilleur moyen de trouver quelqu'un qui prétend savoir que quelque chose le sait assez bien pour l'utiliser. Demander ce que signifie un terme, quelque chose qui en dehors d'une salle de classe, est rarement utilisé est en quelque sorte inutile. Je veux dire qu'au cours des 18 derniers mois, je n'ai pas eu une seule fois une discussion sur les types de référence qui auraient pu se plaindre d'un élément impliquant des pointeurs.
Ramhound