JavaRush /Blog Java /Random-FR /Comment un vieil humaniste s'est lancé dans l'informatiqu...
PieIsLie
Niveau 35
Санкт-Петербург

Comment un vieil humaniste s'est lancé dans l'informatique

Publié dans le groupe Random-FR
Feu d'artifice! En fait, j'ai longtemps réfléchi à ce que j'écrirais exactement dans cet article et si j'allais l'écrire du tout. Il se trouve qu'à différentes périodes au cours des deux dernières années, j'ai évalué mes chances d'obtenir un poste de développeur Java de différentes manières : de « tôt ou tard - définitivement » à « je n'ai aucune chance en informatique ». Comment un vieil humaniste s'est lancé dans l'informatique - 1Cependant, presque exactement deux ans se sont écoulés depuis mon inscription sur JavaRush. Il y a quelques mois, j'ai reçu ma première offre, un peu plus tard j'ai reçu ma deuxième, puis j'ai commencé un nouvel emploi. Les histoires de réussite m'ont beaucoup aidé pendant le cours, j'ai donc décidé de publier les miennes. Le cours ayant eu lieu en 2018, certaines informations peuvent ne pas être à jour. Je dirai tout de suite qu'il y aura beaucoup de texte, parce que... J'essaierai de vous parler des formations et des recherches d'emploi (exigences, réponses, spécifications techniques, entretiens, etc.). J'écrirai également quelques conseils généraux qui m'ont aidé personnellement et qui pourraient aider d'autres. En bref sur moi : 32 ans, 10 ans d'expérience en gestion et vente, formation en arts libéraux et absolument aucune formation technique. Il y a plusieurs années, j'ai essayé de me lancer dans le C++, puis dans Python - je n'ai eu qu'un mal de tête. Il est donc difficile de me qualifier de développeur talentueux : bien au contraire.

ÉTAPE 1. Formation

Je suis venu à JavaRush en toute conscience : une liste de prix mensuelle adéquate, une structure claire du matériel, beaucoup de pratique et la présence de ma propre communauté. Le premier point est tout à fait clair, mais apprendre un langage sans structure est assez difficile, et une telle formation laissera certainement à une personne de sérieuses lacunes en Java Core. L'expérience des entretiens et des spécifications techniques montre que les questions sur le « noyau » peuvent être utilisées pour tout : du décalage au niveau des bits et du casting de génériques aux IO et à la sérialisation. La pratique est indispensable ; Je ne peux encore comprendre et me souvenir que de la moitié des choses si je les ai écrites moi-même. Eh bien, la communauté : vous avez résolu le problème - vantez-vous-en dans les commentaires ; Si vous n’avez pas encore décidé, vous pouvez poser des questions, mais il est fort probable que personne ne vous proposera de solution toute faite. Et je suis revenu aux articles personnalisés sur des sujets gratuits même après avoir terminé le cours, il y a beaucoup de bonnes choses pour commencer (surtout la première expérience avec des frameworks utilisant des exemples pas à pas + des questions d'entretien). En général, je suis reconnaissant envers ce projet pour la base que j'ai reçue, mais je ne compterais pas uniquement sur JavaRush - le même Shildt va surtout « chevaucher » sur le sujet étudié et révèle souvent certains points. Beaucoup de choses ont déjà été dites dans les critiques sur des tâches qui dépassent parfois la théorie et vous obligent à utiliser Google. Pour moi, c'est plus un plus qu'un moins - et ce n'est pas un fait que maintenant la situation est la même que lorsque j'étudiais. Conseil immédiat à ceux qui, comme moi, se lancent dans Java « à partir de zéro » : à un moment donné, vous risquez de vous ennuyer ou d'avoir des difficultés :
  1. C’est difficile pour tout le monde de repartir de zéro ; Dieu nous en préserve, seulement 5 % des personnes arrivent à la fin du cours. Votre tâche est de devenir l'un d'entre eux.

  2. Je me suis intéressé au bout d'un mois ou deux, lorsque les tâches sont devenues plus difficiles et plus intéressantes. Sois patient.

  3. L'essentiel est la progression hebdomadaire. Après deux semaines de repos, c’est déjà difficile de rentrer, et tout le monde ne peut pas écrire tous les jours plusieurs mois d’affilée. Donnez-vous une limite d'heures pour la semaine - par exemple, 15. Vous pouvez coder pendant 1,5 heure chaque jour de la semaine et 3 à 4 heures supplémentaires les deux week-ends, ou vous pouvez prendre quelques soirées de congé, mais la « limite du week-end » sera augmenter. De cette façon, l’horaire sera flexible, mais régulier. Bien sûr, il sera alors possible de mesurer le travail par tâches et par projets, mais au niveau de la syntaxe et du noyau, des heures suffiront.
En général, il m'a fallu environ 5 mois pour terminer le cours (avant d'accéder au stage) , malgré le fait que je pouvais me permettre à la fois des vacances et de courts séjours ; encore une fois, travailler une semaine de cinq jours ne laissait que les week-ends et les soirs de semaine libres de 22h à 00h. Ainsi, avec un horaire plus souple ou un régime d'entraînement plus rigide, vous pouvez vous en sortir beaucoup plus tôt. Ensuite, j’ai prévu de faire un stage, mais finalement ça n’a pas marché.

ÉTAPE 2. Auto-éducation

Donc, je n'ai pas eu de stage : je n'ai laissé que quelques jours sur les pré-requis techniques jusqu'à la fin du recrutement dans le groupe et je n'ai pas eu le temps de comprendre les pré-requis - il y avait trop de mots inconnus. Parce que Je ne voulais pas attendre encore trois mois, j’ai décidé de passer à autre chose. Heureusement, il existe des guides et des didacticiels vidéo pour tous les frameworks populaires. Au cours des mois suivants, j'ai traité Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS, maîtrisé SQL et essayé de tout rassembler en un seul tout. Six mois plus tard, j'avais des projets qui font peur à regarder maintenant, mais j'ai acquis une expérience pratique dans l'utilisation de frameworks « adultes » et d'un GitHub qui pouvait être montré à la demande d'un employeur potentiel. Conseils :
  1. Plus tôt vous découvrirez .gitignore, mieux ce sera. ;)

  2. De nombreux guides incluent plusieurs cadres à la fois ; utilisez-le et ajoutez le vôtre. Nous avons écrit une boutique en ligne en utilisant Maven + Spring Boot + Data - ajoutez une autorisation, des tests unitaires et une journalisation.

  3. Pour les projets Web, vous pouvez utiliser des modèles frontend gratuits sur Internet - ils sont plus agréables à travailler, ils sont plus beaux sous forme de captures d'écran dans le README sur Git. En même temps, vous pourrez mémoriser HTML et CSS - vous souhaiterez probablement corriger les styles et la mise en page.

Le moyen le plus simple de créer un tel plan de développement pour vous-même est de consulter les postes vacants de HH pour Junior\Middle Java Developer et de voir quelles technologies et frameworks sont indiqués le plus souvent. Notez-les, établissez-en des spécifications techniques, fixez-vous des délais de mise en œuvre. Mais peut-être que si je commençais par un stage local, je n'aurais pas à passer plusieurs mois sur des projets à domicile.

Ce qui me manquait (plus tard, je me suis brûlé lors d'un entretien)

  1. Algorithmes. Pour éviter mes erreurs, je recommande immédiatement un petit livre en russe, « Grocking Algorithms ». Quelle est la complexité des algorithmes, en quoi consiste-t-elle, pourquoi le tri rapide ne suffit pas, une introduction à la théorie des graphes - tout est là et dans le langage le plus compréhensible.

  2. Collections "sous le capot". Je ne me souviens pas si c'était dans JavaRush, mais il est utile de savoir comment fonctionne HashMap.get() ou pourquoi un HashSet n'est pas garanti pour préserver l'ordre des éléments. Encore une fois, quelles collections sont thread-safe et pourquoi.

  3. SQL. Vous avez besoin d'au moins jusqu'à JOIN - ce qu'ils sont, comment ils fonctionnent, la possibilité d'écrire un SELECT sur deux tables sur papier à la volée. Je recommande www.sql-ex.ru : il vous amènera au niveau souhaité en un jour ou deux.

  4. Spring Core : quelles sont les annotations, qu'est-ce qu'un contexte, comment les beans sont créés, quel Bean Scope est thread-safe et comment résoudre l'injection mutuelle - toutes les questions d'entretien. Comment renvoyer une page, comment renvoyer du JSON, etc. Je lis actuellement « Spring 5 for Professionals » en russe, mais en général, ils recommandent « Spring in Action ».

ÉTAPE 3. Recherche d'emploi

En fait, au cours des premiers mois après avoir terminé mes projets personnels, j'ai envoyé environ 30 réponses à divers postes vacants de Junior/Trainee (via HH, LinkedIn, des agences de recrutement), avec des résultats proches de zéro. Je me suis concentré uniquement sur les postes vacants sans expérience, j'ai honnêtement indiqué une pile qui me était familière et j'ai écrit sur ma grande capacité d'apprentissage dans les lettres de motivation. Le résultat est deux appels (dont l'un s'est immédiatement terminé dans mon anglais pré-intermédiaire), deux autres entreprises ont envoyé des spécifications techniques, il n'y a eu qu'une seule « réunion », et puis j'étais là seul à résoudre des problèmes d'algorithmes sur un morceau de papier, après quoi les RH ont simplement emporté les papiers et "Nous vous appellerons". J'ai essayé d'obtenir quelques stages (non rémunérés et rémunérés sous conditions) : j'ai fait le cahier des charges technique, mais je ne suis pas allé au-delà de la sécurité sociale finale ; mais maintenant je peux dire que les stagiaires sont définitivement recrutés par T-Systems, CFT, Andersen et EPAM (ils ont des avis mitigés, décidez par vous-même). Quant à moi, c'est un bon moyen d'entrer dans le domaine si vous avez la possibilité de rester sans revenus pendant plusieurs mois et de ne pas mourir =) En général, après cette expérience, je suis devenu un peu déprimé, et j'ai mis toute l'histoire avec la recherche en pause pendant près de six mois - j'ai continué à travailler sur le profil précédent, j'ai écrit quelques applications juste pour m'amuser, mais je ne les ai même pas publiées sur Git. Jusqu'à ce que je rencontre une connaissance, à qui j'ai parlé avec désinvolture des échecs liés aux postes vacants : à cette époque, il travaillait déjà comme développeur intermédiaire, mais il a commencé de la même manière - par l'auto-apprentissage. Une connaissance m'a donné quelques recommandations , qu'il a utilisées lui-même et qui m'ont beaucoup aidé dans ma recherche d'emploi à l'avenir. Que vous les suiviez ou non, c'est à vous de décider, car... ils ne sont, d’une certaine manière, pas entièrement honnêtes. Alors, d'autres citations :
  • Quoi qu'il en soit, prévoyez plus de 6 mois d'expérience commerciale dans votre CV : stages, projets de fin d'études, travail indépendant, travail à distance - peu importe. Cela sera grandement utile au stade de la sélection initiale des CV par les RH ;

  • supprimez le mot Junior et salaire attendu de votre CV ; laissez-le simplement en tant que développeur Java et discutez de l'argent individuellement avec chaque entreprise ;

  • essayez de demander aux RH de nommer la « fourchette » du salaire proposé avant de nommer vos attentes. Si une entreprise propose 80 à 120 000 $ et que vous recherchez 40 000 $ ou plus, certains sélectionneurs vous traiteront avec dédain ;

  • Postulez à tous les postes vacants qui correspondent à votre stack, même s'ils nécessitent 1 à 3 ans d'expérience commerciale.

Après avoir suivi toutes ces recommandations, la situation de recherche s'est considérablement améliorée. Premièrement, sur environ 12 nouvelles réponses, la moitié se sont terminées presque immédiatement par une réunion, par Skype ou par TK (ce qui était déjà très différent du fait d'être ignoré les mois précédents). Deuxièmement, des responsables RH ont commencé à m'écrire, auxquels je n'ai pas répondu - par messagerie instantanée, par courrier, sur LinkedIn. Troisièmement, les exigences en matière d'expérience commerciale se sont avérées vraiment pas trop strictes - de nombreuses entreprises étaient prêtes à communiquer avec un candidat qui n'entrait pas dans la fourchette spécifiée de 1 à 3 ans de pratique en entreprise. En conséquence - une offre pour un junior, une pour un middle avec une période probatoire. Au total, les recherches ont duré deux mois. Conseils :
  1. Incluez dans votre CV l'ensemble des langages, technologies et frameworks avec lesquels vous avez travaillé.

  2. Inscrivez-vous sur LinkedIn - il y a vraiment beaucoup de RH de différentes entreprises. Remplissez soigneusement votre profil - en fait, il s'agit également de votre CV. Pour développer votre réseau de contacts, ajoutez des LION pertinents à votre profil ; ils acceptent les demandes de tous les utilisateurs.

  3. Essayez-vous aux tests Java gratuits - ils sont souvent donnés sur papier avant l'entretien Junior. Il vaut mieux se préparer à l'avance.

Quelques mots sur les entretiens
  1. Ils posent toujours des questions sur les collections : lesquelles sont là, en quoi elles diffèrent, quel est le meilleur moment pour les utiliser.

  2. Toujours sur les classes et interfaces abstraites - peuvent-elles avoir des méthodes, des champs, lesquels, peuvent-elles être héritées, etc.

  3. Presque toujours en multithreading - ce que vous avez utilisé dans votre travail, les mots-clés, les méthodes, connaissez-vous util.concurrent.

  4. Souvent, lorsque l'on travaille avec la mémoire - le tas, la pile, et ces chaînes seront-elles égales, et ces objets, pourquoi.

  5. Parfois, à propos des algorithmes - lesquels connaissez-vous, quelle complexité, pourquoi, pouvez-vous écrire un algorithme maintenant.

  6. Parfois, sur la base de modèles - lesquels vous connaissez, lesquels vous utilisez, écrivez un singleton ou une usine.

  7. Parfois en SQL - types de JOIN, qu'est-ce qu'une transaction, comment la mener en JDBC, écrivez une courte requête.

En fait, tout dépend beaucoup de l'entreprise : quelqu'un ne pose pas une seule question sur Java Core, mais passe 40 minutes à parler de frameworks et de SQL ; Certaines personnes n’utilisent pas du tout les frameworks populaires et posent uniquement des questions sur les algorithmes, les types, les collections et la mémoire. Environ la moitié des réunions commençaient par des tests - parfois en russe, parfois en anglais (20 à 30 questions pendant 20 à 30 minutes) ; Généralement des questions au niveau de « voici le code, va-t-il fonctionner ou non, et sinon, alors sur quelle ligne » ou « voici plusieurs objets, seront-ils égaux après N opérations ». Quelques mots sur les spécifications techniques : 70% des entreprises commençant à communiquer m'ont envoyé des spécifications techniques avant ou après la réunion. Habituellement, l'achèvement est donné de quelques jours à une semaine, mais le plus souvent les délais peuvent être légèrement décalés. Tout peut être utilisé comme spécification technique. Voici les exemples que j'ai fait :
  • Page de contacts professionnels du profil Salesforce avec modification et ajout de nouveaux enregistrements ;

  • simulation d'un ascenseur dans un immeuble à plusieurs étages à l'aide de la Spring State Machine avec commande par console ;

  • Application Android basée sur la bibliothèque LibGDX avec sortie de texte caractère par caractère lorsqu'un bouton est enfoncé ;

  • Imitation REST du covoiturage, avec ajout de clients via requête HTTP et renvoi de JSON ;

  • problème du tri d'un graphe non orienté à travers une cellule libre ;

  • rechercher des triangles isocèles en utilisant les coordonnées d'un fichier ;

  • refactorisation du code fini à l'aide de l'API Stream ;

  • Calculateur d'interface utilisateur avec prise en charge des expressions ternaires ;

  • course de threads avec écriture des résultats dans un fichier.

Parfois, il est demandé aux méthodes de calcul d'être couvertes par des tests unitaires, et aux méthodes de requête d'être couvertes par des tests d'intégration. Conseils :
  1. Essayez non seulement de terminer la tâche, mais également de vous assurer que le code est conforme aux principes de la POO.

  2. Vérifiez l'efficacité de votre code - j'ai été rejeté une fois parce que, entre autres choses, j'avais utilisé PrintStream au lieu de BufferedWriter.

  3. Planifiez votre temps d'exécution avec une marge de 50 % - il est préférable de commencer et de terminer plus tôt que de faire un git push à huit heures du matin avant la date limite.

Eh bien, tout ce que je voulais, je pense l'avoir écrit. Le plus important est que l’eau use les pierres. Vous ne pouvez pas écrire beaucoup, beaucoup en Java, puis chercher un emploi pendant très, très longtemps et finalement ne rien trouver. Si un spécialiste des sciences humaines de 30 ans a réussi, vous pouvez le faire encore mieux. L'essentiel est de ne pas avoir peur des premiers appels, des missions techniques et des entretiens : après chaque échec, j'avais la garantie d'apprendre quelque chose par moi-même et de l'améliorer - plus on se sent longtemps, plus on se sent en confiance. Si quelque part cela s'avère chaotique ou s'il y a des erreurs, je m'excuse d'avance, écris, je le corrigerai. J'espère que mon expérience aidera au moins quelqu'un =)
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION