Comment interviewer un scientifique naturel pour un poste de développeur? [fermé]


30

Question d'origine

J'ai déjà réalisé quelques interviews pour mon entreprise, principalement des informaticiens pour des postes de développeur mais aussi des testeurs et chefs de projets. Maintenant, je dois combler un poste vacant dans notre groupe de recherche au sein du département R&D (note latérale: «recherche» signifie que nous essayons de résoudre des problèmes dans notre domaine professionnel / niche de marché en utilisant des logiciels dans des projets de recherche avec des universités, d'autres entreprises, des centres de recherche et les organisations d'utilisateurs finaux. Ce n'est pas de la recherche en informatique, nous n'allons pas résoudre le problème P = NP).

Maintenant, nous avons invité un gars titulaire d'une maîtrise en chimie (avec beaucoup de physique dans son CV aussi), qui n'a jamais suivi de cours d'informatique. J'ai déjà parlé avec lui environ une demi-heure lors des journées de carrière d'une université locale et il ne fait aucun doute que le gars est intelligent. Ses notes sont également excellentes et il a obtenu son diplôme avec distinction. Pour son BSc, il avait besoin de s'enseigner lui-même la programmation en Mathematica et m'a dit de manière crédible qu'il aimait beaucoup la programmation. Il a également résolu un problème de chimie physique que je ne comprends probablement pas en utilisant son propre logiciel, implémenté dans Mathematica, pour sa thèse de maîtrise. Il comprend une interface graphique et une taille notable de 8 000 LoC. Il semble être très attiré par ce que nous faisons au sein de notre groupe de recherche et pour être honnête, il est assez difficile pour une PME comme nous d'avoir de bonnes personnes. Je suis également très intéressé à l'embaucher, car il pourrait m'aider à rédiger des propositions de projet, des rapports, des présentations, etc. Il conviendrait probablement aussi à notre équipe.

La seule question qui reste est: comment puis-je vérifier s'il obtiendra les compétences en programmation dont il a besoin pour faire l'implémentation de logiciels dans nos projets, car ce sera une partie importante du travail?

Bien sûr, je vais lui demander ce que c'est, cela le fascine dans la programmation. Je vais également demander comment il a procédé à l'écriture de son logiciel de sciences naturelles et comment il l'a structuré. Je vais lui demander comment il a réussi à obtenir les compétences et les informations sur le développement logiciel dont il avait besoin. Mais est-ce que je pourrais demander plus? Quelque chose de plus concret peut-être? Dois-je lui demander d'expliquer sa solution Mathematica?

Pour être clair: je ne recherche pas de connaissances dans une langue ou une technologie particulière. Nous sommes une boutique .NET dans le développement de produits mais je veux avoir un choix libre pour nos projets de recherche. Je m'intéresse donc à la méta-compétence d'être capable d'apprendre tout ce qui est réellement nécessaire.

J'espère que cette question peut être résolue et non ouverte car j'aime vraiment savoir s'il existe un moyen par défaut de vérifier la capacité à acquérir d' autres compétences en programmation sur le tas. Si quelque chose n'est pas clair pour vous, veuillez me faire quelques commentaires et laissez-moi améliorer ma question.

Mise à jour pour refléter les réponses données jusqu'au 2011-12-01

Quelle réponse j'ai acceptée et pourquoi

Merci à tous pour vos réponses, la plupart d'entre elles sont très utiles, j'ai donc beaucoup voté! Bien que la réponse de Tom Squires ait obtenu le plus de votes, je vais accepter la réponse donnée par le prince Goulash . Bien sûr , Tom est objectivement correcte, mais la réponse du prince est un peu plus utile pour moi et je revérifié la FAQ que c'est le critère d'accepter une réponse.

Ce que je vais lui demander pendant l'entretien

  • Je vais le laisser expliquer quelques tâches simples comme l'exemple dans The Camel Has Two Humps mentionné par Chris Burt-Brown

  • Je lui demanderai d'expliquer quelques flux de contrôle plus avancés, peut-être dans une notation graphique.

  • Je vais vérifier sa compréhension de la récursivité en utilisant un exemple mathématique.

  • Je vais le laisser expliquer un algorithme de son choix en langage naturel.

  • Je vais lui laisser expliquer sa solution Mathematica, en particulier je lui demanderai son modèle de procédure, l'utilisation des outils, la structuration du code et des logiciels en général ainsi que les différentes couches d'abstraction.

  • Pour vérifier sa motivation, je vais lui demander sa fascination pour le développement de logiciels.

  • Je lui demanderai s'il est au courant de ce qu'il devra apprendre sur le développement de logiciels d'entreprise. Surtout, je veux transformer la discussion en direction du travail en équipe, de la programmation en binôme, du TDD, car je m'attends à ce qu'il ne sache pas grand-chose à ce sujet après avoir travaillé seul sur son MSc.

On dirait que ça va être une longue interview;)

Mise à jour après l'interview 2011-12-09

Encore merci à tous pour vos bonnes réponses. Il a réussi l'entretien avec brio. Je n'ai jamais été plus satisfait d'un candidat. Sa solution Mathematica semble assez bien structurée. Il a été en mesure d'expliquer où il utilisait des fonctions d'ordre supérieur, bien qu'il ne sache pas que celles-ci sont désignées comme ceci. Il a répondu à mes questions de récursivité basées sur les mathématiques ainsi qu'à des affectations simples et des choses sur le flux de contrôle de The Camel Has Two Humps. Quand il expliquait certains algorithmes, j'ai beaucoup appris sur l'adaptation non linéaire;) Il a également dit honnêtement qu'il ne pouvait bien sûr pas garantir qu'il serait en mesure d'apprendre des choses sur le développement de logiciels professionnels qu'il ne connaissait pas jusqu'à présent. Mais il a vraisemblablement déclaré qu'il était toujours bon dans l'apprentissage de nouveaux concepts - même par lui-même - et qu'il était vraiment intéressé par le développement de logiciels. Il a également demandé que la pile technologique du projet, à laquelle il serait appliqué en premier, puisse l'examiner chez lui. Il était également curieux de la programmation en binôme et du travail d'équipe. J'espère maintenant que le contrat de travail sera conclu.


9
Je trouve merveilleux que les entreprises soient disposées à embaucher des personnes sans connaissance de la technologie qu’elles utilisent. Je souhaite avoir trouvé votre entreprise avant de faire ce que j'ai fait dans ma carrière!
NoChance

Emmad: C'est ce que j'ai essayé d'expliquer et de dire avec "méta-compétence". Quel est l'avantage de mon entreprise lorsque j'embauche maintenant un excellent programmeur C # qui n'est pas en mesure (ou désireux) d'apprendre Scala / Lift en cas de besoin? Et pour être honnête: en fait, il est assez difficile de trouver de bonnes personnes en Allemagne. Surtout lorsque vous êtes une PME qui n'est pas située dans une métropole branchée comme nous.
Silas

2
Demandez-lui de faire un peu de recherche sur le flux de contrôle simple et d'autres techniques très basiques dans une langue spécifique. Puis, quand il arrive, demandez-lui de résoudre un problème en utilisant ceux-ci.
Darren Young

2
J'ai travaillé avec quelques scientifiques devenus développeurs dans mon poste actuel. À mon humble avis, ils ont tendance à être très bons dans l'aspect de la résolution de problèmes du développement et pas si bons à écrire du code maintenable avec de bons principes OO. Si vous voulez qu'il fasse plus qu'écrire des outils «rapides et sales», vous devrez peut-être qu'un développeur traditionnel travaille avec lui.
Jordan Bentley

2
Je suis à peu près ce type. J'ai une formation en physique / chimie computationnelle, et j'ai développé de nombreux modèles / codes informatiques, ainsi qu'un certain nombre de projets parallèles (parfois complexes et réussis). Les principaux ajustements que j'ai dû faire dans un environnement de développement professionnel concernaient la méthodologie de développement et le travail en équipe. Assurez-vous qu'il comprend ce qu'il faut pour travailler ensemble sur un logiciel. Assurez-vous qu'il comprend les méthodes que vous utilisez (intégration TTD / contubue ce genre de choses) et ce que cela signifie pour sa sortie.
drxzcl

Réponses:


21

Je suis très partisan ici parce que j'ai commencé en tant que développeur de logiciels il y a quelques années avec un doctorat en physique, mais très peu d'expérience en codage (équivalant à un cours de premier cycle sur Fortran). Cela dépend clairement du type de logiciel que vous développez, mais je pense que les compétences en codage sont très faciles à acquérir par quiconque possède des compétences scientifiques / en résolution de problèmes à moitié décentes. Je n'entends pas cela comme une insulte aux programmeurs à vie qui ont étudié l'informatique: bien sûr, il y a des aspects techniques qui nécessitent une formation sérieuse pour maîtriser (par exemple, le multi-threading et l'architecture de très bas niveau), mais je suppose que c'est pas le poste que vous essayez de combler.

Pour mon entretien technique pour mon poste actuel, j'ai été confronté à un problème mathématique assez complexe et j'ai demandé de concevoir un programme pour le résoudre. L'accent était mis sur l'écriture d'un algorithme qui, une fois implémenté, résoudrait le problème. Je pouvais écrire une réponse en utilisant uniquement des mots pour décrire ma solution, mais j'étais autorisé à écrire du code dans la langue de mon choix si je le souhaitais. Le test portait davantage sur la capacité de résolution de problèmes et si j'étais capable de "penser comme un programmeur". Évidemment, s'il y avait des candidats de capacité égale et que l'un avait une expérience de codage plus directe, il se serait imposé, mais cela me semble assez juste.

L'essentiel est: examiner le candidat pour les compétences pour lesquelles vous l'embauchez, pas pour les idéaux que vous espérez qu'il atteindra.


2
Ayant travaillé avec des programmeurs qui étaient d'anciens scientifiques, ce ne sont pas seulement les détails de bas niveau qu'ils ignorent, mais aussi les choses de très haut niveau. YMMV bien sûr, mais c'est un manque général de profondeur qui est le problème. Pas que tous les emplois en aient besoin…
Donal Fellows

1
@DonalFellows: Je ne doute pas que les développeurs sans formation spécifique puissent manquer à la fois d'étendue et de profondeur de connaissances. Cela dépend du rôle et de la quantité de formation interne qui est offerte.
Prince Goulash

1
@DonalFellows: étant donné que le PO est intéressé à déterminer la capacité du candidat à apprendre, pas ses connaissances actuelles ...

2
@DonalFellows: comme je l'ai déjà dit, étant donné que le PO est intéressé à déterminer la capacité du candidat à apprendre, pas ses connaissances actuelles ...

2
@Mark Bannister: Un bon scientifique peut apprendre, ce n'est pas une question utile ici. Une question plus utile serait de savoir si le scientifique apprendra ce qu'il a besoin de savoir. C'est plus un problème de personnalité. Le scientifique sait-il ce qu'il ne sait pas sur le génie logiciel?
David Thornley

37

Comment puis-je vérifier s'il obtiendra les compétences en programmation dont il a besoin

Tu ne peux pas . Il est impossible de tester avec précision une compétence qu'il n'a pas encore. Vous devez faire un jugement sur la base de son intelligence et de son attitude. Cela va finalement toujours être un risque.

D'après mon expérience personnelle, je peux dire qu'il est très possible de passer de la science à la programmation. Ils se résument tous deux à utiliser votre cerveau pour résoudre des énigmes complexes.


8
+1 Pour "Ils se résument tous deux à utiliser votre cerveau pour résoudre des énigmes complexes."
joshin4colours

1
Quel est ton problème? Embauchez le gars, pour l'amour du ciel! N'oubliez pas que les programmeurs ne sont que des opérateurs de tours de haute technologie. Il est enthousiaste, intelligent et connaît beaucoup de chimie. Si vous ne l' engagez pas à ce moment-là, la prochaine fois que vous allez embaucher quelqu'un dans un an, vous vous botterez le cul que vous n'avez pas fait.
Pete Wilson

1
Il n'est pas rare qu'un diplômé CS ait programmé depuis l'âge de 13 ans environ. Au moment où ils entrent au collège, ils sont déjà programmeurs intermédiaires à la plupart des échelles. Cela ne signifie pas qu'ils n'ont rien appris de leurs diplômes. La programmation est facile ... L'informatique / ingénierie douce ne l'est pas. Cela ne signifie pas qu'ils ne pourront pas contribuer et être un membre précieux ... Mais cela signifie qu'ils n'auront probablement jamais la même fondation CS.
user606723

6

Je n'ai pas de sources secondaires vérifiant ce document, donc je ne peux pas le garantir, mais:

Le chameau a deux bosses
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

Nous avons trouvé un test d'aptitude à la programmation, dont nous donnons des détails. Nous pouvons prédire le succès ou l'échec avant même que les étudiants aient eu un contact avec un langage de programmation avec une très grande précision, et en testant avec le même instrument après quelques semaines d'exposition, avec une précision extrême.


3
Après avoir lu l'article, je pense me souvenir que j'ai lu plus sur cette étude il y a quelque temps. Je ne le trouve plus :( Edit: il a été mentionné à Coding Horror , merci pour le rappel
Silas

Vous m'avez battu, j'allais répondre avec le lien Coding Horror @Silas ajouté
Izkata

5

Comment puis-je vérifier s'il obtiendra les compétences en programmation dont il a besoin?

C'est très simple. Donnez-lui les compétences.

Maintenant, ce n'est pas une réponse très satisfaisante, mais permettez-moi de développer.

Je suis venu en programmation après avoir fait 3 ans en génie civil. C'est une formation assez solide en physique appliquée et en mathématiques. Ce n'est pas le calcul théorique qu'un diplôme CS donnerait, mais ça vaut quelque chose. Ce que j'ai tiré de l'expérience en ingénierie, c'est une solide expérience en résolution de problèmes . Quiconque a une formation en mathématiques apprécie déjà le concept d' élégance lorsqu'il parle d'une solution à un problème. Ils ont déjà reçu une formation en refactorisation depuis qu'ils ont passé du temps à prendre six pages de poulet à gratter et à le convertir en une élégante épreuve d'une demi-page à soumettre.

Quiconque a étudié la physique a développé une approche intuitive pour concocter une solution à partir de cadres de base.

Et qu'est-ce que la programmation en dehors de ces compétences? - Langage, idiome, modèles et cadres. Ce sont faciles à enseigner. C'est la résolution de problèmes que vous ne pouvez pas. Si vous êtes en mesure de fournir des instructions dans ces domaines, vous vous retrouverez avec un bon développeur.

La question devient alors "combien de temps pouvez-vous attendre qu'il se mette au courant?"

tl; dr; Vous pouvez enseigner la dactylographie. Vous ne pouvez pas enseigner intelligemment.


+1, Très belle réponse. Je souhaite que les gens aient des opinions plus ouvertes sur les professions: avoir un diplôme en mathématiques ne signifie pas que vous ne pouvez pas faire de programmation pour vivre, ni l'inverse. Apprendre à apprendre est la compétence importante de l'OMI.
K.Steff

2

J'ai un BSc en science des matériaux mais j'ai travaillé toute ma carrière dans le développement de logiciels.

Je dirais que votre candidat n'aura probablement pas de problèmes avec la programmation de base et les algorithmes, mais quand il s'agit d'exigences de type plus "ingénierie", il peut avoir besoin de conseils. J'entends par là bien structurer son code, ne pas avoir 500 fonctions de ligne, tester efficacement, concevoir pour l'efficacité ...

La plupart de cela peut être enseigné, mais vous voudrez peut-être concevoir des questions pour vérifier cela.


2

Il a également résolu un problème de chimie physique que je ne comprends probablement pas en utilisant son propre logiciel, implémenté dans Mathematica, pour sa thèse de maîtrise. Il comprend une interface graphique et une taille notable de 8 000 LoC.

Il me semble que le candidat sait déjà programmer, étant donné qu'il pourrait ne pas avoir autant d'expérience en tant que développeur dédié, mais qu'il a un projet démontrable qu'il a terminé et qui nécessitait une quantité de travail non triviale. En tant que tel, vous pourriez être en mesure d'interviewer le candidat de la même manière que vous le feriez pour un développeur qui utilise une langue différente de celle que vous utilisez, à savoir:

  • Compétences de base - Le candidat comprend-il la logique programmatique de base, le contrôle de flux, les structures de données de base.
  • Compétences avancées - Le candidat comprend-il la programmation et la conception orientées objet, les structures de données avancées, les interfaces, les classes abstraites, etc.
  • Compétences en résolution de problèmes - Étant donné un problème, le candidat démontre-t-il de solides compétences en résolution de problèmes.

Le langage utilisé par Mathematica est assez avancé et quelqu'un qui sait bien écrire des logiciels pour Mathematica devrait être assez compétent dans d'autres domaines, donc se concentrer sur cette expérience et l'utiliser comme base pour coder l'expérience pourrait être un bon moyen d'aborder l'entretien.


2

S'exprimant en tant que diplômé en génie aérospatial devenu programmeur, il est certainement possible de passer des sciences naturelles à la programmation. Cependant, soyez averti, être capable de résoudre des problèmes ne correspond pas toujours à la capacité d'écrire du code. Vous semblez vous en rendre compte et c'est une bonne chose.

Pour moi, les concepts les plus importants pour s'assurer qu'il saisit sont le flux de contrôle et la récursivité (et la boucle en général comme sous-ensemble de cela). Avant d'embaucher un candidat, même quelqu'un qui est clairement très intelligent doit être sûr de pouvoir écrire un algorithme de mots simples pour résoudre les problèmes. Assurez-vous qu'il peut prendre cet algorithme de mots simples et le transformer au moins en pseudo-code. Vous pouvez même sonder pour voir s'il peut au moins comprendre le concept de polymorphisme, bien que je ne sois pas sûr que ce soit la connaissance requise dans cette circonstance.

Méfiez-vous également de la capacité de résoudre des problèmes scientifiques dans Mathematica / MatLab / Tout ce qui ne signifie pas qu'il peut écrire du bon code. Cela signifie simplement qu'il est capable d'appliquer des principes de programmation de base (parfois extrêmement basiques), généralement des instructions if / else. Apprendre à être un bon programmeur nécessitera généralement un engagement personnel et patronal envers quelqu'un à ce stade. Attention: j'ai rencontré des gens très intelligents qui étaient / sont de bons ingénieurs qui ne pouvaient pas programmer leur sortie d'un sac en papier et honnêtement, ne pouvaient pas comprendre les bases du langage de base.

Expérience personnelle

Je suis diplômé de l'école avec un diplôme d'ingénieur et un peu d'expérience en programmation à mon actif. J'avais travaillé avec une très petite quantité de C, pas mal de MatLab et des accès VB +. Il m'a fallu environ 3 mois d'études pour devenir vraiment utile en tant que programmeur dans une boutique VB.NET. Il m'a fallu encore 9 mois pour devenir pleinement compétent. Cependant, je peux, avec un certain degré de confiance, dire que mes compétences en résolution de problèmes sont supérieures à 99% des autres programmeurs que j'ai rencontrés dans mon travail. Mes employeurs m'ont toujours considéré comme l'un de leurs atouts les plus précieux.

Conclusion

C'est une proposition de risque / récompense, mais souvent, le fait d'engager quelqu'un qui a les compétences de résolution de problèmes peut être payant à long terme tant qu'il est capable d'apprendre les concepts de programmation et que vous êtes tous deux prêts à investir du temps pour étendre sa programmation connaissance. Cependant, je crois fermement qu'il doit posséder au moins une compréhension de base des principes fondamentaux de la programmation avant de lui offrir un emploi. D'après mon expérience, une fois que vous êtes à ce stade, vous pouvez aller beaucoup plus loin avec.


Merci pour votre réponse. Cela confirme la plupart de mes pensées. Je veux juste ajouter que j'ai rencontré beaucoup d'informaticiens, travaillant en tant que développeurs et architectes depuis des années, que l'OMI n'est pas capable d'écrire du bon code aussi. Même certains de ceux qui écrivent des articles techniques sur la programmation. Bottom line: Être un bon progammeur nécessite toujours de lire beaucoup de livres, d'apprendre différentes langues et ainsi de suite ... quel que soit le type de diplôme que vous possédez.
Silas

1

Je commencerais par quelques questions et notions de base sur les algorithmes pour voir s'il est dans la logique des algorithmes et de la programmation. S'il est capable de comprendre ce qu'est un algorithme, il peut éventuellement développer les compétences nécessaires pour faire des choses concrètes par la suite.


1

Comment puis-je vérifier s'il obtiendra les compétences en programmation dont il a besoin pour faire l'implémentation de logiciels dans nos projets, car cela constituera une partie importante du travail

Honnêtement, je suis à peu près sûr que vous n'obtiendrez pas cette information lors d'une entrevue d'une ou deux heures. Donnez-lui une tâche de programmation en C # (quelque chose de pas trop technique) et une ou deux semaines à résoudre. Cela devrait être assez de temps pour apprendre les bases du langage pour quelqu'un qui a déjà appris la programmation avec Mathematica. Ensuite, faites un examen du code avec lui et décidez de cette base.


1

Vous pourriez regarder les pratiques de programmation dans un environnement scientifique? (sur Stack Overflow) pour avoir une idée de ce à quoi ressemble la culture de programmation des sciences naturelles. De cette façon, vous êtes en mesure de comparer sa préparation à celle de ses pairs.

D'ailleurs, vous pourriez lui demander de décrire les pratiques de programmation auxquelles il est habitué afin de savoir s'il est conscient qu'il existe d'autres façons de le faire .

Il y a beaucoup de "bons programmeurs" dans mon entreprise dont la qualification est capable de tenir suffisamment d'état dans leur tête pour concocter du code de travail, mais dont le travail a tendance à être non structuré et difficile à maintenir. En général, ils peuvent être enseignés, mais ... ils doivent être enseignés.


0

Un autre département où je travaille utilise une variation de notre test standard. La première tâche consiste à inverser les mots d'une chaîne en place. Ensuite, utilisez ce code pour inverser l'ordre des mots dans la chaîne, toujours en place. Au lieu d'utiliser un langage de programmation, ils ont le candidat qui conçoit les algorithmes sur papier et les exécute à l'aide d'une carte Scrabble.


0

Je demanderais de décrire (en utilisant le langage naturel) un algorithme pour calculer quelque chose à partir de la physique. Quelque chose d'un peu plus compliqué qu'une simple formule, puis je demanderais comment verrait-il son calcul encapsulé dans des objets (pas besoin de connaissances OOP, vous pourriez expliquer ce que vous attendez d'un objet). De cette façon, vous pouvez voir sa pensée logique. Ceci est plus important que toute compétence en programmation.


0

Tout d'abord, ils sont probablement assez intelligents, alors dans le pire des cas, ils peuvent apprendre à être un bon programmeur avec des conseils. Cependant, si vous en avez besoin pour vous lancer et être un programmeur décent dès le départ, demandez-leur d'envoyer un exemple de code qu'ils ont écrit.

S'agit-il d'une ou de deux fonctions polyvalentes géantes ou ont-elles encapsulé des fonctionnalités aux niveaux d'abstraction appropriés? Les nombres magiques sont-ils codés en dur partout? Le code est-il SEC? Ont-ils donné aux variables des noms raisonnables ou tout est-il une abréviation indéchiffrable ou une variable à une seule lettre? Pouvez-vous principalement suivre la logique de leur code? Comprennent-ils les bases OO?

Demandez ce qu'ils utilisent pour le contrôle de version (git / hg / svn / cvs / bzr, etc.). Ont-ils déjà profilé du code ou utilisé un débogueur, et si oui, lesquels ou quelle est leur stratégie de débogage générique?

S'ils échouent à ce test et que vous avez besoin d'un bon codeur dès le départ, sautez cette personne. Sinon, embauchez-les, suggérez-leur de lire des livres de génie logiciel (par exemple, Code complet) en plus des livres génériques de programmation / CS.

(Pour mémoire, je suis également physicien devenu programmeur.)


-3

Comme il est encore dans une université ou a récemment terminé ses études, il a l'habitude d'étudier. Faites-lui lire et comprendre le livre Design Patterns et après (ou pendant) un mois, discutez en profondeur avec lui sur les sujets. (Je pense que) cela peut vous en dire beaucoup sur ses capacités (non seulement les plus dures (celles-là aussi), mais aussi comment il gère la compréhension de nouveaux concepts, la compréhension de leur utilisation, les avantages et les inconvénients, etc.). Mais cela vous coûtera un mois.


8
-1 La question était de savoir comment l'interviewer, pas comment lui faire cesser de vouloir le poste.
Peter Taylor
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.