[Test Développeur] Test pour recruter un développeur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Test Développeur] Test pour recruter un développeur

Re: [Test Développeur] Test pour recruter un développeur

par technopro » 04 avr. 2014, 09:38

Bonjour à tous,

Merci beaucoup pour toutes vos réponses, je m'attendais dans tous les cas à des réactions de votre part et c'était un peu le but, je sais pertinemment que je ne dispose pas du meilleur test pour recruter LE développeur PHP du marché, mais jusqu'à présent il m'a permit de voir ceux qui rendaient un test fonctionnel et ceux qui n'y parvenaient pas. Certains l'ont rendu très propres quand d'autres l'ont rendu beaucoup moins propre et finalement on arrive un peu à la même analyse que tu retirais Cyrano du test que tu as pu mettre au point.

Je vais me servir de l'ensemble de vos idées pour pouvoir l'améliorer, je vous remercie encore à tous pour votre aide dans tous les cas.

Re: [Test Développeur] Test pour recruter un développeur

par Cyrano » 04 avr. 2014, 09:06

Salut,
pour ma part, ce test me laisse perplexe. Ce que j'en comprends à la première lecture, c'est qu'il s'agit de créer un genre de système de base de données en PHP. C'est assez improbable comme idée, surtout coté performances, PHP n'est carrément pas fait pour ça, même si c'est une base en mémoire. Ensuite, il existe déjà des système très performants (Memcache et les bases NoSQL par exemple). Enfin, il existe déjà un langage normalisé pour les bases de données, à savoir le SQL : là, il est question de recréer un système avec son propre langage, ce qui présente un défaut majeur : il ne peut y avoir aucune portabilité avec d'autres systèmes à moins d'écrire des adaptateurs, et encore, ça ne ferait que plomber les performances en imposant une couche de traitement intermédiaire supplémentaire.

Peut-être y aurait-il lieu de se demander si tu poses les bonnes questions pour détecter le bon développeur. Pour ma part, j'avais conçu un petit test pour recruter des devs PHP, je suis allé à l'essentiel en me basant sur ma propre expérience :je demandais qu'on construise une petite classe pour se connecter à une base de données, pour exécuter une requête et pour en récupérer le résultat, point barre, rien d'autre. À tout casser, 3 méthodes et quelques propriétés, la base de données était prête et contenait un jeu de données et je fournissais un graphique du modèle de données. De plus, je laissais l'accès à Internet au candidat pour qu'il puisse accéder aux documentations dont il pourrait avoir besoin.
Le résultat est toujours instructif : n'imposant pas de manière particulière de faire, le résultat m'indique la manière de faire d'un candidat, je vois ensuite le style de codage qu'il produit, s'il est cohérent, s'il code proprement, s'il documente un tant soit peu son code. Je n'imposais l'utilisation d'aucune extension particulière pour accéder à MySQL : ça donne lieu à des résultats intéressants, la plupart utilisaient mysqli, mais j'ai eu un cas qui n'a pas hésité à utiliser PDO, ce que j'ai trouvé beaucoup plus futé.
J'ajoute que ça ne m'intéressait que moyennement qu'il termine ou pas le test, je voulais surtout voir son code et ses méthodes de travail et de codage. À choisir entre un qui finit en bâclant un boulot dégueulasse et un plus soigneux qui ne termine pas faute de temps, j'aurais tendance à privilégier le second (voir ma signature en bas des messages que je poste ici), parce qu'il travaillera toujours proprement mais gagnera en vitesse avec l'expérience. Je serais presque tenté de dire qu'à la limite, si, profitant de son accès au net, il me construit un code à coups de copier/coller, si le résultat est propre et fonctionnel, ça me montre au moins qu'il sait quoi copier, comment l'utiliser et comment obtenir rapidement et correctement le résultat attendu, c'est au moins aussi important que de savoir écrire soi-même tout le code, dans les limites du raisonnable s'entend, mais après-tout, c'est ce qu'on fait tous lorsqu'on utilise un framework X ou un CMS Y.

Petit détail : tu as posé une annonce pour recruter un dev : tu y parles d'un projet ultra-innovant .... avec du Symfony 1.4 :shock: Je veux pas te vexer, mais pour du ultra-innovant, il faut être à la pointe avec les dernières versions et ça veut dire qu'il faudrait convertir ça à Symfony 2, d'autant que plus le projet avance, plus la mise à jour sera ardue si tu tardes à évoluer vers la dernière version. C'est d'autant plus important que tu parles ici de performances : la ré-écriture de ces frameworks a été, sur ce point, un élément plutôt essentiel. J'ajoute aussi que le titre parlant d'un projet déjà en ligne, ça pourrait motiver (ou pas...) de mettre un lien vers l'existant histoire de se faire une idée générale, en tous cas ça filtrerait en limitant à ceux intéressés par ledit projet.

Re: [Test Développeur] Test pour recruter un développeur

par damien_55 » 03 avr. 2014, 19:53

Slt,

Je débarque et je vois ce test ??

@technopro: Perso, je n'y comprends rien à ce test. c'est quoi le but? je ne pense pas etre totalement nul en php mais là ce que tu décris dans ton test est illisible et surtout, je ne comprends pas à quoi ça sert.

J'ai passé pas mal de test dans des boites de recrutement, le tien me laisse perplexe.

Je suis l'avis de sirkawa, ou les exemples présentés sont claires et utiles dans un projet et surtout compréhensible pour le commun des devs php, je pense.

Je ne sais pas ou tu as trouvé ce test, mais les termes utilisés dans ce test ne me semble pas etre liés à php directement.

la bdd: laquelle ? mysql, progresql, oracle ??

Donc comme moogli, test inutile. et comme sirakawa, je vois ce test, le client sérieusement me pose la question:

1/ je rigole
2/ je lui demande si serieusement, c'est le test ? Quel est le rapport avec php et une bdd ?
3/ je le remercie de m'avoir fait perdre mon temps avec ses grandes certitudes, genre je recrute et je sais ce que je fais parce que c'est moi le patron
4/ je lui conseille de s'entourer des personnes compétentes pour la réalisation du test.

Par experience personnelle, faire faire des tests à des dev, il faut vraiment que la renumération en vaille le coup. Qui va passer 60 ou 90 minutes de test pour 2000 euros ? Je ne crois pas qu'il y aura beaucoup de postulant.

Généralement, les dev présentent leurs travaux réalisés avec leur CV. Cela suffit déjà pour faire un bon écrémage.

Les test se font beaucoup sur du php orienté objet. cela dure 15 min a la rigueur tu as 30 min pour le finir mais tu en mets 15 ou 20 pour le faire. Tu as 3 min par question par exemple, mais il ne s'agit pas décrire un programme. Il faut arreter de regarder les films, en recrutement ça ne se fait pas. CV, travaux réalisés, deux trois questions avec un techniciens expérimentés et puis voila, c'est fait.

Sinon, tu organises un hackday, et là tu vois les dev écrire des programmes.

Re: [Test Développeur] Test pour recruter un développeur

par sirakawa » 03 avr. 2014, 08:24

Ne recrutant pas, je n'ai pas de test tout prêt. Mais une longue pratique d'étudiants en fortran et en C++ et de ce forum montrent quelques constantes.
En vrac,
en s'inspirant de :
http://www.alsacreations.com/quiz/
ou en faisant débuguer un prog faux


Sur ton test (et mes idées) :
Faut-il que le prog soit écrit en procédural ou en approche objet ou peu importe?

En demandant des scripts incluant la manipulation entre autres des sructures PHP sur lesquelles sont posés souvent des questions ici:
POST, SESSION, date, encodage, tableaux (à plus d'une dimension), Boucles (au moins deux boucles imbriquées: récurrente question sur foreach; maritris
e de la condition d'arrêt complexe d'un while ; pas while( $a != $b) mais while (($a < $limite) and($resultat_trouve == false))
inclure un problème sur les limites avec les réels:
$point_fixe = 3.126;
$approx = 0.001;
$res = function_x($var)
while (
($res < ($point_fixe -$approx))
or
($res > ($point_fixe +$approx))
)
{
$res = function_x ($var + 0.2):
}

Je crois qu'il faudrait inclure une manip de base de données (entre autres pour vérifier qu'on n'emploie pas mysql mais mysqli)
Une manip de passage html <-> php (types text, radio, checkbox, select)
Quid de javascript?
Inclure la présentation (comme tu fais je crois) dans l'évaluation.

Pas forcément le tout dans le même problème.

Re: [Test Développeur] Test pour recruter un développeur

par technopro » 03 avr. 2014, 07:15

Merci à tous pour vos réponses.

@moogli, merci pour tes remarques, je retiens au final qu'à priori le test reste plutôt bon pour avoir un aperçu des compétences d'une personne qui code en PHP, à vrai dire j'ai pris quasiment toute la base d'une grande boite américaine qui recrute des dèv pour leur besoins perso mais je voulais avoir un retour de votre part.

@sam12, Courbevoie en ile de France

@sirakawa, avec l'esprit si tranché tu dois forcément avoir un test bien mieux que celui ci ! Je serais ravis de le découvrir !

Re: [Test Développeur] Test pour recruter un développeur

par sirakawa » 02 avr. 2014, 20:52

Ce que je ne vois pas, c'est l'intérêt de la question :
quel développeur s'ennuierait, surtout en PHP, à réécrire une gestion sommaire de base de données en mémoire qui plus est, donc volatile, donc inutilisable, quand il dispose de gestion sophistiquées.
Si j'étais candidat, devant une telle question j'éclaterais de rire et je plierais mes chapeaux claques en forme de cliques avant de faire clic-clac kodak du gentil farfelu qui me pose une question si grenue.

J'ai connu, du temps de Basic, des gens qui, ne sachant pas programmer des fichiers en accès direct, programmaient en séquentiel la gestion de leurs clients, quand on faisait la même chose en mieux, plus rapide et plus simple avec le défunt DBASE III.

Re: [Test Développeur] Test pour recruter un développeur

par sam12 » 02 avr. 2014, 19:19

Salut,

Tu es dans quel coin de la France?

Re: [Test Développeur] Test pour recruter un développeur

par moogli » 02 avr. 2014, 17:06

salut,

Désolé mais le texte est peu compréhensible.

Pour être franc je ne vois ce qui peux motiver dans un soft en ligne de commande.

Ce qui est demandé n'a rien d’innovant ou motivant et je pense qu'il y a aura des question en plus de ce qui est mis la.

je ne parle pas de l'ergonomie de ce qui est demandé :)

Ce n'est que mon avis mais il y a des chances que d'autre le pense.

Accessoirement si tu cherche de la perf extrême faut pas ce tourner vers php le dev pourras pas gérer l'occupation mémoire comme il le ferais en C en allant lui même la mémoire.

Comment compte tu vérifier les données mémoire ?
avec xdebug et un profile ? (sachant que l'outils de mesure risque de plus ralentir la chose que le soft lui même ?)

bref a mon avis c'est un un bon test pour vérifier les connaissances d'un dev php ;)

@+

[Test Développeur] Test pour recruter un développeur

par technopro » 02 avr. 2014, 13:07

Bonjour à tous,

J'ai construit un test PHP (ci-dessous) que je vous soumets pour savoir si vous pensez que ce dernier serait suffisant pour avoir une bonne idée du niveau du développeur.

Etant à la recherche d'un développeur passionné en PHP pour un projet super innovant, ce test aurait pour but de pouvoir filtrer dans un premier temps les personnes intéressées.

Qu'en pensez-vous ? Auriez-vous d'autres idées plus pertinentes ?

Merci encore pour votre retour.

===================================================================================================

Base de données simple
----------------------

Dans ce problème, vous allez implémenter une base de données avec stockage en mémoire.
À des fins de simplicité, plutôt que de traiter les requêtes de différents clients à travers le réseau,
votre programme recevra des commandes via l'entrée standard (stdin), et écrira ses réponses sur la sortie standard (stdout).

Ce problème devrait vous prendre entre 30 et 90 minutes. Utilisez PHP.
Ce qui nous intéresse : du code propre et un algorithme performant !


Les commandes
-------------

Votre base de données doit accepter les commandes suivantes :

SET nom valeur – Assigner "valeur" à la variable "nom". Ni les noms de variables ni les valeurs ne contiendront d'espaces.

GET nom – Afficher la valeur de la variable "nom", ou NULL si la variable n'a pas été valorisée.

UNSET nom – Libérer la variable "nom", comme si aucune valeur ne lui avait été assignée.

VARS valeur – Afficher le nombre de variables qui contiennent actuellement cette valeur. Si aucune variable ne contient cette valeur, afficher 0.

END – Quitter le programme. Ce sera toujours la dernière commande que votre programme recevra.

Votre programme recevra les commandes une par une, avec chaque commande sur sa propre ligne.
Chaque sortie produite par votre programme devra se terminer par un caractère de fin de ligne.
Voici quelques exemples de séquences de commandes :

INPUT OUTPUT
SET ex 10
GET ex 10
UNSET ex
GET ex NULL
END


INPUT OUTPUT
SET a 10
SET b 10
VARS 10 2
VARS 20 0
SET b 30
VARS 10 1
END


De plus, votre programme devra permettre l'utilisation de transactions en implémentant les commandes suivantes :

BEGIN – Ouvrir un nouveau bloc de transaction. Les blocs peuvent être imbriqués (un BEGIN peut être appelé à l'intérieur d'un bloc existant)

ROLLBACK – Annuler toutes les commandes appelées dans le bloc de transaction le plus récent, et fermer le bloc.
Ne rien afficher en cas de succès, afficher NO TRANSACTION si aucune transaction n'est en cours.

COMMIT – Fermer tous les blocs de transaction ouverts, en appliquant les changements effectués dans chacun d'entre eux.
Ne rien afficher en cas de succès, afficher NO TRANSACTION si aucune transaction n'est en cours.

Toute commande effectuée en dehors d'un bloc doit être appliquée immédiatement.
Voici quelques exemples :

INPUT OUTPUT
BEGIN
SET a 10
GET a 10
BEGIN
SET a 20
GET a 20
ROLLBACK
GET a 10
ROLLBACK
GET a NULL
END


INPUT OUTPUT
BEGIN
SET a 30
BEGIN
SET a 40
COMMIT
GET a 40
ROLLBACK NO TRANSACTION
END


INPUT OUTPUT
SET a 50
BEGIN
GET a 50
SET a 60
BEGIN
UNSET a
GET a NULL
ROLLBACK
GET a 60
COMMIT
GET a 60
END


INPUT OUTPUT
SET a 10
BEGIN
VARS 10 1
BEGIN
UNSET a
VARS 10 0
ROLLBACK
VARS 10 1
COMMIT
END


Performance
-----------

Les opérations les plus courantes sont GET, SET, UNSET, et VARS.
Toutes ces commandes devront avoir un temps d'exécution pire-cas de O(log N) ou mieux, où N est le nombre total de variables stockées dans la base de données.
La majorité des transactions ne mettront à jour que quelques variables. Votre solution devra donc être efficace en termes de mémoire utilisée par les transactions.