Wie konnen Sie Python Entwickler finden? Die besten Interview Fragen
Grobe Berechnungen zeigen, dass die weltweite Anzahl an Python Entwicklern zwischen 1,8 und 4,3 Millionen liegt.
Diese Zahl könnte Sie dazu verleiten zu glauben, dass es einfach ist Python Entwickler zu beschäftigen. Das ist es auch - solange Sie jemanden einstellen wollen, der Python salopp unter den fünfundzwanzig anderen Fähigkeiten in seinem Lebenslauf auflistet.
Aber was, wenn Sie einen wahren Python Entwickler suchen, der jede Nuance der Sprache versteht? - Sie werden überrascht sein.
Wir haben mit Pavel Yershov zusammengearbeitet - er ist ein richtiger Python Experte und arbeitet für einer unserer Kunden. Er hat uns geholfen dieses Handbuch mit Interview Tipps, Fragen und Code Aufgaben zusammenzustellen, das Ihnen hilft, einen A + Python-Entwickler einzustellen.
Der Anfang
Egal wie erfahren ein Python Programmierer ist, schadet es nie, mit den Grundlagen zu beginnen. Prüfen Sie ob der Kandidat allgemeine Konzepte der Softwareentwicklung und gemeinsame Datenstrukturen versteht. Fragen Sie welche Komponenten ein Graph hat und was ein Binärbaum ist. Falls Sie mit den Antworten zufrieden sind, können Sie mit einer Frage nach dem Unterschied zwischen Tiefensuche und eine Breitensuche fortfahren.
Achten Sie auf die Sprache, die ein Kandidat verwendet. Sie können so ziemlich einfach einen autodidaktischen Computerfreak von einem ausgebildeten Spezialisten mit langjähriger Erfahrung unterschieden.
Wenn ein Kandidat diese ersten Fragen erfolgreich gemeistert hat, können Sie in die Programmierparadigmen einsteigen, mit denen er vertraut ist. Fragen Sie über OOP und wie die OOP Prinzipen in Python implementiert sind. Achten Sie darauf, dass der Kandidat alle vier Prinzepen nennt - Kapselung, Abstraktion, Vererbung und Polymorphie. Falls der Kandidat alle nennt, können Sie eines der Prinzipen wählen (z.B. Kapselung) und eine Anschlussfrage über seine Besonderheiten in Python stellen, sowie über die Syntax zur Definition eines privaten Attributs oder einer Methode.
Während Sie noch beim Thema sind, fragen den Python Programmierer wie Vererbung in Python funktioniert und was abstrakte Klassen, Superklassen und statische Daten sind. Falls der Kandidat keine klare Antwort geben kann, besitzt er/sie nicht einmal genug Kenntnisse für eine sich für eine junior Python Entwickler Stelle.
Es geht ans Eingemachte
Fordern Sie den Kandidaten dazu auf Datentypen in Python aufzuzählen: dict, list, set, und tuple sollen unbedingt genannt worden. Verpassen Sie nicht die Gelegenheit um eine Erklärung zu bitten, was der Unterschied zwischen Liste und Tupel ist.
Ein paar andere Themen, die Sie vielleicht diskutieren möchten sind Pythons Generatoren und Iteratoren, magische Methoden, GIL und Multithreading, sowie Unterschiede zwischen Python 2 und 3.
Ein guter Weg zu verstehen, ob der Python Programmierer vor Ihnen schon nicht mehr als junior gelten kann, ist eine Frage über vertraute Designmuster zu stellen und welche von ihnen in Python eingebettet sind. Falls Ihnen ein einfaches, wie Factory-Methode oder Singleton, entgegnet wird, fragen Sie nach einer tiefergehenden Erklärung um was sich diese drehen. Dekorator ist ein Muster, das jedem guten Python-Entwickler bekannt sein sollte. Stellen Sie sicher, dass der Kandidat erklären kann wofür es gut ist.
Framework-Kenntnisse Testen
Falls die Aufgaben Arbeit mit Frameworks umfassen, macht es Sinn zu prüfen welche Kenntnisse der Kandidat in diesem Thema besitzt. Fragen Sie zuerst, welche Frameworks der Kandidat zuvor verwendet hat. Neun von zehn Python Entwickler, sogar jüngere, werden Django nennen, also sollten Sie auch deren Fähigkeiten mit diesem Werkzeug testen. Hier ist eine Auswahl an Fragen, die Sie einem Django Entwickler stellen könnten:
- Was ist MVC? Wie funktioniert es in Django?
- Wie ist deine übliche Vorgehensweise bei der Arbeit mit Datenbanken?
- Was sind die Unterschiede zwischen relationalen und nicht-relationalen Datenbanken?
- Was sind Normalisierung und Denormalisierung der Datenbankstruktur?
- Wie verknüpfst du eine Datenbanktransaktion mit der Verarbeitung einer HTTP-Anfrage? Wann würdest du so etwas benutzen?
- Welche Datentypen liefern Django ORM Methoden?
- Erklären Sie die Django ORM Funktion filter(). Welchen Datentyp ergibt die Funktion get()? Was passiert mit dem Ergebnis der get() Funktion wenn die Datenbank den erforderlichen Eintrag nicht enthält?
- Welche Standardklassen von Django-Middleware kennst du?
- Wie werden HTTP Anfragen und Antworten von Middleware verarbeitet?
- Was ist Celery? Was ist ein „worker“? Was kann als „broker“ verwendet werden?
Auswertung der Code-Qualität
Sie könnten hier entweder damit beginnen den Python Entwickler, den Sie interviewen, nach einer Liste der wichtigsten PEP8-Konventionen zu fragen oder sofort in die Evaluierung von Code-Beispielen einsteigen.
Ein genauer Blick auf den Code des Kandidaten ist entscheidend, da dies eine Reihe von Dinge verrät. Zuerst, erlaubt es Ihnen einschätzen, wie gut die Programmierer ihren eigenen Code optimieren. Zweitens, zeigt es Ihnen, ob PEP8 eingehalten wurde und Codequalität und Lesbarkeit ernst genommen werden. Drittens, liefern Objekt- und Variablennamen einen Hinweis auf eine Einschätzung welche Einstellungen der Kandidat gegenüber anderen Teammitgliedern hat, die seinen Code lesen, sowie dessen Englischkenntnisse, die natürlich wichtig sind, wenn der Kandidat aus einem anderen Land kommt.
Beispiele für Code Aufgaben
Kein Interview mit einem Softwareentwickler ist ohne ein paar praktischen Aufgaben komplett, also bitten Sie den Python-Entwickler einige Angaben für Sie durchzuführen. Es gibt ein paar Beispiele, die Sie vielleicht ausprobieren möchten:
print list[10:]
Diese Aufgabe hilft das Verständnis des Kandidaten von Datenstrukturen in Python zu bestimmen.
dangerous = 2
c1 = C()
c2 = C()
print c1.dangerous
c1.dangerous = 3
print c1.dangerous
print c2.dangerous
del c1.dangerous
print c1.dangerous
C.dangerous = 3
print c2.dangerous
Diese erlaubt Ihnen das Verständnis des Kandidaten von Objekten und Speicher in Python überprüfen.
print "%s/%s = %s" % (x, y, x/y)
def div2(x,y):
print "%s//%s = %s" % (x, y, x//y)
div1(5,2)
div1(5.,2)
div2(5,2)
div2(5.,2.)
Mit dieser Aufgabe können Sie überprüfen, ob der Kandidat die Besonderheiten von mathematischeren Operationen in Python versteht.
return [lambda x : i * x for i in range(4)]
print [m(2) for m in multipliers()]
Diese zeigt an, ob der Kandidat weiß, wie man Lambda-Funktionen verwendet.
smaller = x if x < y else y
print(smaller)
Diese hilft Ihnen, das Verständnis von logischen Operatoren in Python zu überprüfen.
def testgen(index):
weekdays = ['Sun', 'Mon',
'Tue', 'Wed',
'Thu', 'Fri',
'Sat']
yield weekdays[index]
yield weekdays[index+1]
day = testgen(0)
print next(day), next(day)
Mit dieser Aufgabe können Sie prüfen, ob Kandidaten die Funktionsweise von Generatoren verstehen.
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x
Mit dieser letzten Aufgabe können Sie testen, ob Kandidaten ein Verständnis von Vererbung in Python haben.
Schlussfolgerung
Beachten Sie, dass die oben genannten Fragen und Beispielaufgaben als Ratschläge gedacht sind, aber keine feste Vorgehensweise darstellen. Nicht jeder Python Entwickler, der eine Einstellung wert ist, wird alle Fragen beantworten können, und gleichzeitig bedeuten vollständige Antworten auf alle Fragen nicht, dass Sie einen Senior Python Programmierer mit herausragender Expertise vor sich sitzen haben. Ratsam ist es einige zusätzliche Fragen und Aufgaben hinzuzufügen, die für Ihr eigenes Projekt relevant sind.
Wir hoffen, dass Sie unsere Tipps an Ihre Bedürfnisse und Rekrutierungsstrategien anpassen können und dass die Ratschläge Ihnen helfen werden geeignete Python Entwickler für Ihr Unternehmen zu finden.