Comment recruter un développeur Python 7


Bonjour M. Gentil. Vous venez pour la position de stagiaire ingénieur senior en periode d’essai sur 3 ans ?

C’est bien, c’est bien.

Nous avons des perspectives de progression fascinantes dans notre SS3I au carré.

J’ai juste quelques tests à vous faire passer. Trois fois rien. Simple formalité administrative. Vous comprenez, on ne peut pas embaucher pas n’importe quel Bac + 5 et le payer SMIC, comme ça sur un coup de tête.

Ce n’est pas contre vous, non.

Pourriez-vous me dire ce qu’affiche ce snippet ? (mouahahahahaha, rire diabolique intérieur)

def test():
 
    try:
        return 1 + "1"
    except TypeError:
        return "exception"
    finally:
        return "finally"
 
print test()

Et celui-là, il affiche la stack trace ou pas ?

def test():
 
    try:
        print 1 + "1"
    except TypeError:
        raise ValueError('Test')
    finally:
        return "finally"
 
print test()

Bon ok, mais si on a un générateur alors ?

def test():
 
    try:
        yield 1 + "1"
    except TypeError:
        yield 'typerror'
        return
    finally:
        yield "finally"
        return
 
    yield "Out"
 
for value in test():
    print value

Quelle exception sera catchée, dans le bout de code suivant ? (tapoter son style de manière énervante sur la table)

def test():
 
    try:
        assert 1 + "1"
    except AssertionError:
        print "assertionerror"
    except Exception:
        print "exception"
    except TypeError:
        print "typerror"
 
test()

Je vois. Donc finally est exécuté dans tous les cas ?

def test():
 
    def foo():
        foo()
 
    try:
        foo()
    except RuntimeError:
        print 'runtimeerror'
    finally:
        print 'finally'
 
test()

Vous êtes sûr ? VRAIMENT dans tous les cas ? (regard appuyé bien stressant, travaillé durant un poste de manager chez Quick)

def test():
 
    try:
        PRINTEUH !
    except SyntaxError:
        print 'syntaxerror'
    finally:
        print 'finally'
 
test()

VRAIMENT, VRAIMENT, dans tous les cas ? Mais alors, VRAIMENT ? (prendre la voix d’Alain Chabat, parce qu’arrivé à ce stade là c’est juste plus rigolo)

def test():
 
    def foo(bar):
        print bar
        return foo, bar
 
    bar = 'bar'
 
    try:
        while True:
            foo, bar = foo(bar)
 
    except RuntimeError:
        print 'runtimeerror'
    finally:
        print 'finally'
 
test()

Ne vous inquiétez pas, nous ne vous JUgeons paaaaaaas. Détendez-vous. Allez. Une petite dernière. Je vous aide. sys.exit(1) retourne le code 1.

import sys
 
def test(l=[]):
 
    print l
    try:
        return 1 + "1"
    except TypeError:
        return l or l.append(sys.exit(1))
    finally:
        print "Je sais plus là, sérieux"
        if len(l) < 1:
            test()
 
test()
test()

Bon, je sens que vous êtes fatigué. On va arrêter là peut être. Vous êtes le genre à vous en tenir là, hein ? Non. Très bien, très bien. Voici un code sur lequel on planche en interne depuis une semaine pour comprendre combien de fois il affiche finally, mais on s’est dit que vous pourriez le résoudre gratuitement pour nous:

import sys
import time
 
import multiprocessing
from Queue import Empty
 
in_queue = multiprocessing.Queue()
out_queue = multiprocessing.Queue()
 
def worker():
 
    while True:
 
        try:
            res = in_queue.get(timeout=0.1)
            if res == 'stop':
                sys.exit(1)
            print res
        except (Empty, multiprocessing.TimeoutError):
            pass
        finally:
            print 'finally'
 
 
process = multiprocessing.Process(target=worker)
process.start()
 
 
in_queue.put('test')
in_queue.put('stop')
 
print 'afterstop'
 
time.sleep(1)
 
print 'done'

Merci, ce sera tout.

Bon WE, monsieur Gentil.

Nous gardons votre CV. On vous recontactera.

7 thoughts on “Comment recruter un développeur Python

  • Cédric

    Salut,
    Concrètement vous en pensez quoi, vous,
    de ces tests de recrutement ?
    Je n’ai jamais compris l’intérêt..mais je ne sais
    pas si c’est parce que je me plante toujours (c’est
    le but recherché en plus) et que je suis aigri.

    Notez bien qu’au final vous vous retrouvez quand même à gérer
    du code pourri, une vieille version de language, des tables à 300 colonnes, un vieux svn aux branches ingérables, et bien d’autres bad pratices sur lequels je ne m’étends pas au risque de m’énerver…

  • Sam Post author

    C’est pas issu d’un vrai test de recrutement hein. C’est juste des brain teaser Python que j’ai posté pour faire réfléchir, enrobé dans du texte pour faire rire.

    Le seul test valable pour embaucher un développeur, c’est de lui filer une tâche, de lui laisser l’après-midi dessus (quitte à le payer), et de regarder le résultat.

  • JeromeJ

    C’est vraiment salaud :o

    Pour moi y en a un qui va même pas être interprèté (SyntaxError) et un qui boucle à l’infini (foo, bar = foo(bar))

  • mdp

    Haha,

    d’habitude je lurke sur votre site comme une petite crotte, mais là je dois avouer que c’était tellement savoureux que fallait que je le dise. Je me suis retrouvé à bosser 2 mois en SSII y’a un bon moment. Un vrai accident de parcours, (si si j’vous le jure !!) … et ça me rappelle tellement de souvenirs. Surtout les tests bidon et le regard du manager de chez Quick.

    Bon sinon entièrement d’accord, la vrai façon d’évaluer un mec pour un poste aujourd’hui c’est deux choses : la discussion (avec une bière ça marche aussi) et un mini projet qui ressemble à quelque chose.

Leave a comment

Your email address will not be published. Required fields are marked *

Utilisez <pre lang='python'>VOTRE CODE</pre> pour insérer un block de code coloré

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.