J’ai répondu récemment à une question sur le niveau qu’on pouvait attendre d’un professionnel en Python. La réponse était en anglais, alors je me fends d’une petite traduction ici.
Cela dépend beaucoup du niveau Python dont la boîte a besoin, et s’ils accordent plus d’importance à celui-ci ou à ta capacité générale à résoudre des problèmes et tes connaissances générales informatiques.
Pour répondre à ta question, je vais ignorer ces deux points puisqu’ils ne sont pas particulièrement liés à Python. Il y a plein d’articles de blog sur ces sujets sur le Web.
En Python, un dev standard devrait :
- être capable d’écrire du code Pythonique (style idiomatique, syntaxe PEP8…).
- connaître la stdlib et l’écosystème de Python. Par exemple n’avoir aucun problème avec pip, virtualenv, datetime, os.path, hashlib, uuid, csv, pdb, json, et toutes les collections y compris celles qu’il y a dans le module éponyme ou les sets.
- connaître les bases de la POO. L’héritage, l’overloading, les propriétés, la composition, etc.
Un développeur Python avancé devrait être capable d’écrire des libs agréables, et donc :
- être à l’aise avec les générateurs et yield.
- pouvoir écrire son propre décorateur.
- pouvoir écrire son propre context manager.
- pouvoir écrire son propre descripteur.
- savoir gérer l’héritage multiple, l’injection de dépendance, etc.
- pouvoir faire une lib de A à Z, incluant un API flexible et extensible, le packaging et la documentation.
- savoir mettre en place des tests unitaires.
Un expert Python devrait :
- connaître la plupart des libs tierces parties et frameworks pour la plupart des tâches, leurs qualités et leurs défauts.
- pouvoir créer sa propre métaclasse.
- être à l’aise avec l’introspection.
- savoir contourner la plupart des faiblesses de Python : le GIL, les API bloquantes, créer soit-même un code non bloquant, créer un code compatible V2 et V3, etc.
- être capable de prendre un projet sans doc, lire le code source, trouver son problème, et le résoudre via monkey patch tout en proposant un patch propre upstream.
- savoir utiliser des modules difficiles ou peu connus comme heapq, inspect, nmap, etc.
Selon ton domaine, tu auras également peut-être besoin d’être capable :
- de gérer plusieurs implémentations de Python.
- d’écrire une extension C.
- de maîtriser des libs spécifiques comme numpy, scrapy, opencv, etc.
Vous noterez que je n’ai pas mis des évidences comme savoir faire une fonction ou une boucle for. Évidemment qu’il faut savoir écrire du code basique sinon on ne sert à rien.
Gardez aussi en tête que chaque entreprise est différente, et donc peut avoir des besoins qui se situent n’importe où dans l’échelle ci-dessus.
Mais surtout, les connaissances dans un langage, bien qu’importantes, ne sont pas la priorité. Un langage, ça s’apprend. Être une personne qui résout les problèmes, communique, travaille bien en équipe et satisfait les clients, c’est plus difficile à former.
Par ailleurs, il n’existe pas de job avec juste du Python. Un dev backend devrait sans doute aussi travailler avec une base de données, faire du sys admin ou du réseau. Un dev d’UI devra gérer des problématiques multi-plateformes, de l’ergonomie, du packaging avancé. Un dev scientifique devra peut-être écrire du C ou du Fortran. Un dev Web est tenu de gérer le JS/CSS/HTML. Et il y a aussi les outils autour : bug tracking, versioning, peer review, etc.
Bref, dire seulement “je suis bon en Python” ne suffit pas à convaincre quelqu’un qu’il doit vous embaucher.
ah ba je suis meme pas sur le premier barreau de l’échelle pour le coup :P sans la doc python je vais dans le mur. j’ai toujours un onlget ouvert sur la doc ;)
Ton niveau en Python n’est pas reflété par savoir quelque chose par cœur. J’ai moi aussi souvent la doc ouverte. Tu sais utiliser une module à partir du moment où tu l’utilise correctement pour ta tâche, doc ou pas doc.
aparté : j’ai trop kiffé la DeathNote ! Le sentiment du pouvoir absolu tout en évitant de se faire prendre la main sur le stylo à ecrire le nom des victimes :P Me demande qui n’a jamais songé à pondre le nom d’un *bip* de premiere en voyant cet anim :)
Me voilà rassuré, mon échantillonage des compétences ressemble à peu près à celui-là.
Maintenant, ça ne résoud pas le problème de trouver des gens qui rentrent dans ces catégories pour les recruter …
Le probleme reste que en france la premiere personne que tu rencontres est un mec des rhs qui va servir de premier filtre et qui ne connait rien a ton métier.
Une personne qui peut te gerter parce que sur ton cv tu as mis python / django mais pas programmation objet en toute lettre.
Bref
C’est pour cette raison qu’il faut tout faire pour bypasser les RH quand on cherche un emploi.
Un petit commentaire, premièrement pour vous dire que j’adddooooreee votre site, il est super ! Continuez comme ça :).
Et ensuite, car j’ai eu un débat assez … houleux avec un ami sur un sujet similaire, qui était des compétences acquises à l’obtention d’un diplôme en info et de l’orientation à faire pour quelqu’un qui veut faire du dev’ dans sa vie professionnelle.
Une école d’ingénieur (supelec, epita …) ?
Une école style 42 (le point de départ du débat), epitech ?
Un parcours style fac ?
On s’en branle, l’école n’a presqu’aucune importance (sauf pour le réseau). Les meilleurs dev que je connais n’ont pas le bac.
Il faut surtout bosser en parallèle à ses études, c’est le plus important.
Y a de la télépahie chez sam&max, à chaque fois que je me pose une question sur un sujet de dév ou un choix à faire je trouve toujours un article répondant à ma question chez vous ! Merci mille fois pour cette bonne dose d’endorphine chaque matin !!
Sinon je me demandais, par rapport à cet article, Yakapa a abordé en commentaire le facteur école, et le facteur âge ? il faut du temps pour arriver au niveau d’expertise python que vous décrivez. Un bon dév est censé arriver à ce niveau en combien de temps selon vous ?
@betpoilue AMHA c’est une question de motivation et de temps
C’est comme apprendre un instrument de musique : il faut beaucoup pratiquer, et travailler avec d’autre gens de divers milieux pour s’améliorer.
D’où cet article : http://sametmax.com/apprendre-le-python-en-10-ans/
Quand je dis que les meilleurs dev que je connais n’ont pas le bac, j’omet de dire qu’ils ont aussi commencé la prog à 14 ans.
Après, on peut être un dev productif sans être expert. Le profile dev standard peut s’atteindre en quelques années, ou même en quelques semaines si on est déjà bon dans un autre langage.
Developpeur est un métier dans lequel il est très facile de devenir bon en étant auto didacte. Mais c’est un métier. Ca demande du temps.
Comme je le dis dans l’article, connaître python, ce n’est qu’une part du métier. Un mec qui sait juste coder en Python ne sert pas à grande chose à une boîte.
Néanmoins, il n’y a pas besoin d’avoir un niveau pro pour se faire plaisir en tant qu’amateur et on peut produire des choses amusantes et utiles juste en bidouillant. Les contraintes en tant qu’amateur ne sont pas les mêmes que celles d’un pro.
Pour donner une idée, je dev depuis plus de 10 ans.
En revanche, il y a une grande disparité de niveaux obtenus, il y a des gens qui ont 40 ans de métier qui stagent, et d’autres qui au bout d’un an codent déjà des tas de trucs fun. La volonté et capacité d’apprendre ainsi que le temps de mise en pratique sont des facteurs primordiaux.
Merci pour vos réponses !! Bon ça veut dire qu’il faut que je continue à me bouger, feignasse que je suis.
Sam a écrit “Quand je dis que les meilleurs dev que je connais n’ont pas le bac, j’omets de dire qu’ils ont aussi commencé la prog à 14 ans.”
Vous vous souvenez peut-être qu’en octobre 2008, le nouveau Python release manager, la personne qui dit que Python 2.7.4 ou Python 3.3 peut sortir, avait 16 ans (Benjamin Peterson, http://pybites.blogspot.fr/2008/10/meet-your-release-manager.html). Il est l’auteur de 2to3, qui traduit du Python 2 en Python 3, entre autres choses.
Ce type à 18 ans était sans doute bien meilleur que bien des bac+2 ou bac+5 en informatique, mais en France les RH l’auraient refusé, car pas de diplôme, donc il est nul, et pas de bac+5, donc il ne peut (et ne pourra) être cadre.
@k3c : j’ai pas bac+5 et je suis cadre – par contre les échelons n’évoluront pas sans en passer par une validation des acquis pour obtenir une équivalence bac+n et donc + de pépètes
Je pense que la vision du lien entre compétences et niveau de diplôme est quelque chose d’assez français et qui concerne essentiellement les grosses boîtes, qui ne prennent vraiment plus le temps d’évaluer le niveau de compétence réel (malgré une multitude d’entretien avant l’embauche).
Par ailleurs, toujours sur nos grosses boîtes françaises, le métier de dev est rarement bien vu. Alors l’un dans l’autre, le diplôme… Prout.
Moi j’adapte mon niveau à la paye. Comme ils veulent tous des salariés mercenaires pas chers, si je suis mal payé, je leur produis de la merde, diplôme ou pas, bandes d’enculés de managers des mes 2 en carton.