OK, merci.
Déjà, il faut savoir que Java est présent dans beaucoup de domaines et types d’entreprises très différents, mais surtout dans les axes suivants :
- Back-offices de sites web et d’applications,
- Domaine bancaire (traitements, etc.),
- Applications mobiles Android (même si sur ce point c’est surtout du Kotlin aujourd’hui, ou des frameworks hors natif Android).
Le développement de GUI en Java (via JavaFX, Swing, etc), dans le monde pro, est assez rare.
Les projets sont de toutes tailles et de toutes sortes, ça va du microservice REST ou gRPC avec une poignée d’endpoints en cours de création jusqu’au monolithe avec des classes Java créées au millénaire dernier, qui génèrent le HTML (et même parfois le JS et le CSS…) directement. Les entreprises sont de tailles et de fonctionnement divers aussi : de la TPE au gigantesque groupe bancaire en passant par tous les intermédiaires, en emploi direct ou via des sociétés de service… tu devrais trouver quelque chose dans tes critères.
Une conséquence, c’est que la pile logicielle exacte va totalement dépendre du projet, donc l’employeur ne peut pas recruter quelqu’un exactement sur des compétences et s’attends à ce qu’il y ait un minimum de formation et de montée en compétences au début du projet. Un corollaire, c’est que si tu vois un emploi qui t’intéresse très fort, tu peux t’auto-former sur les technologies mentionnées dans l’offre. Par contre, il faut savoir que ces listes n’ont que peu de pertinence, c’est plus des séries de mots-clés pour que les recruteurs filtrent les candidats.
Avec 5 ans d’expérience, on va s’attendre quand même à ce que tu aies un minimum de connaissances dans le langage ou les grands frameworks. Voici quelques pistes à creuser selon ce que tu cherches à faire :
Dans tous les cas :
- Git
- Java (évidemment). Ne fonce pas sur la dernière version, il y a encore beaucoup d’historique. En 2024, je dirais de savoir faire fonctionner surtout Java 8 (encore supporté, on en trouve beaucoup) et Java 21 (pour être au courant des dernières nouveautés) (seules les versions LTS comptent vraiment : 8, 11, 17 et 21). Regarde en particulier : toute l’API des collections, toute l’API fonctionnelle (lambda & cie).
- Un outil de build : Maven ou Gradle (Maven est davantage utilisé, sauf dans le monde Android).
- Un framework de tests. J’ai surtout vu JUnit, et Mockito pour les mocks.
- Les bases en SQL (natif !). Sans déconner, on a beaucoup trop de devs qui n’ont aucune idée du fonctionnement du SQL ne connaissent que l’ORM de leur framework, c’est un vrai plus sur un CV (et c’est triste à dire).
Si tu veux t’orienter vers du dev web ce qui serait le plus logique vu ton bagage, tu peux postuler à du full stack (quoi que ça veuille dire…) :
- Un framework web : Spring Boot ou Quarkus.
- Tu peux t’intéresser à la programmation réactive dans l’un de ces frameworks. C’est une marche haute à franchir en auto-formation, mais un gros plus, parce que ça t’ouvre les portes de plein d’entreprises qui ont un besoin de performances, et c’est pas facile de développer correctement là-dedans.
- Hibernate / JPA (en plus de SQL, pas en remplacement).
- Frameworks web modernes si tu veux faire du dev full stack (au moins un réactif : ReactJS, Angular ou VueJS).
Si tu veux t’orienter vers du développement mobile : Android, j’ai rien de plus à dire
Si tu veux t’orienter vers des gros projets : parce que mine de rien il y en a, souvent anciens niveau code mais avec des vrais challenges techniques et du fonctionnel très intéressant :
- Java EE / Jakarta EE (c’est la même chose).
- Les JSP.
Si tu veux travailler dans le bancaire : Honnêtement, aucune idée. J’ai vu passer des offres qui ressemblaient à du développement web avec beaucoup de process et de sécurité, mais je sais que ça n’est qu’une petite partie de l’iceberg.
Maintenant, en réalité, tant que tu as les bases générales, c’est pas sur les éléments techniques que tu vas te différencier, surtout si tu es honnête et que tu ne promets pas « 5 ans d’XP en Java ». Si tu veux absolument décrocher un travail de développement intéressant dans une entreprise intéressante, à ton niveau, la différence ne va pas se faire sur l’expertise technique, mais plutôt sur tout ce qu’il y a à côté, parfois appelés soft skills :
- Capacité à prendre en compte les aspects « annexes » du développement dans tes solutions et leurs implémentations : performances, efficacité, maintenabilité, adaptation de la solution aux contraintes spécifiques du projet et du problème. Ce point est un énorme plus, on a beaucoup trop de développeurs qui se contentent de développer la première solution qui leur passe par la tête.
- Capacité à t’adapter au problème à résoudre et au fonctionnement de l’entreprise et du projet (et, très honnêtement, l’impression que tu laisses dans tes interventions ici me laisse penser que tu peux travailler ce point en particulier).
- Capacité à comprendre un problème rapidement et à le résoudre.
- Capacité de communication pour aller chercher les informations manquantes (directement au client ou à d’autres équipes, selon le cas).
- Proactivité, force de proposition.
- Capacité à apprendre rapidement.
- Curiosité sur la technique et le fonctionnement des choses (à relier avec le premier point de la liste).
- Capacité à travailler en équipe, d’autant plus importante que tu te diriges vers de grosses équipes.
C’est ces points qui sont recherchés en priorités par les entreprises sérieuses. Si un candidat est bien câblé à ce niveau, il montera facilement en compétences sur la pile technique et le projet. J’ai même vu des candidats très bons sur ces points recrutés alors qu’ils n’avaient aucune des cases techniques cochées (ex : dev C++ pour faire du Java), et sont très vite montés en compétences et devenus efficaces. C’est assez rare pour une entreprise de chercher un développeur expert technique sur un point très précis (ça concernera plutôt les langages rares, les frameworks ou outils rares, ou certains domaines comme les bases de données – on manque de DBA). Inversement, un développeur très bon techniquement mais incapable de comprendre un besoin ou travailler en équipe peut être un vrai boulet et inembauchable par la plupart des entreprises.
Moi j’aimerais juste pouvoir mettre au profit mes compétences techniques et de réflexion, mais dans un cadre professionnel où on n’est pas souvent obligés de réécrire entièrement ou en grande partie le code qu’on a écrit parce que les besoins produits ont mal été définis en amont. C’est bête mais il faut aussi que l’entreprise soit apte à augmenter ses salariés d’année en année et/ou de le former et/ou de le coacher pour qu’il progresse (ce que je n’ai pas dans ma startup actuelle beurk). L’entreprise doit pouvoir être flexible au niveau des horaires de début/fin de journée (je ne sais pas si c’est important de l’indiquer).
Sur ce point particulier, de ce que je connais de l’état du marché, tu te retrouves avec des points contradictoires. Les entreprises que j’ai pu croiser avec des besoins très cadrés et du développement à long terme, c’est surtout de grosses entreprises avec de gros progiciels souvent assez anciens. Si tu aimes le code moderne c’est rarement bon plan, mais comme dit plus haut, si tu acceptes de travailler avec du vieux code et des méthodes anciennes, il peut y avoir de beaux challenges techniques (notamment de performances), du fonctionnel intéressant, c’est par nature pas des startups, et souvent des entreprises qui ont des augmentations plus ou moins automatiques… mais avec une hiérarchie à l’ancienne, donc peu de télétravail et de souplesse horaire.
J’espère que ça te donne une meilleure idée de ce qu’on peut faire professionnellement en Java en 2024. Ce n’est que ma vision des choses, j’ai pu passer à côté de pans entiers du métier. Et j’ai aussi occulté le côté « ouvrier » de la chose : si tu veux trouver un emploi de développeur pas chiant dans lequel tu n’as pas envie de t’investir, c’est aussi possible en Java, y’a même un peu trop d’offres en ce sens (non pas que ça soit un défaut, hein : il y a plein de tâches qui ne nécessitent pas d’investissement, et c’est un choix de carrière tout à fait valable ; mon propos est qu’on trouve trop de projets et d’équipes sans tête pensante, entièrement déléguée à des personnes non investies. C’est un problème de management et de direction, pas d’employés).
PS : concernant la recherche d’emploi dans l’informatique :
- Les listes de compétences détaillées ne servent qu’à déclencher les recherches par mot-clés des recruteurs, pour le meilleur et pour le pire (n’y mettez pas les technologies avec lesquelles vous ne voulez pas travailler !)
- Il y a toujours moyen de s’arranger sur les questions d’expérience.
- Il y a toujours moyen de s’arranger sur le salaire, mais mettez très clairement la question sur la table très vite, pour éviter de passer de longs entretiens qui finiront sur un bête désaccord financier.
- C’est plus facile de progresser sur les technologies que sur les soft skills (cf plus haut). Mettez ces derniers en avant.
- Enfin et surtout : beaucoup d’offres ne sont pas publiques. N’hésitez pas à postuler en candidat libre (si une entreprise en particulier vous intéresse) ou à contacter des entreprises de recrutement (ils seront ravis d’avoir un candidat qui frappe à la porte, souvent ils galèrent pour en trouver).
- Si vous n’avez pas un bac+5 mais de l’expérience, regardez pour une validation des acquis. C’est surtout important pour les sociétés de service et les grosses entreprises (ou les grosses sociétés de service ^^) qui ont des grilles de salaire que le diplome impacte encore même avec 20 ans d’expérience…