JavaRush /Blog Java /Random-FR /Au début il y avait JavaRush
Марат Каджаев
Niveau 20
Санкт-Петербург

Au début il y avait JavaRush

Publié dans le groupe Random-FR
Ma première période probatoire s'est terminée il y a 3 ans, mais je n'ai que maintenant le temps d'écrire un article. A l'université j'ai passé 1 an dans différentes facultés : le premier semestre j'ai étudié pour devenir manager, au deuxième semestre je suis passé au génie logiciel. J'espérais qu'ils m'apprendraient à programmer, mais je me suis trompé, alors j'ai pris les documents et j'ai décidé de tout apprendre par moi-même. La seule chose pour laquelle je remercie le professeur, c'est qu'il m'a conseillé de commencer par le livre de Stephen Prat « The C Programming Language ». Très bon livre avec beaucoup de problèmes pratiques. Le livre a pris environ 2 mois, après quoi j’ai croisé JR dans les groupes d’amis et c’est parti. Au début, j'avais prévu de devenir développeur Android, mais pendant le processus d'apprentissage, le backend m'a semblé plus intéressant. D'ailleurs, la formation a duré 3 mois, durant lesquels j'ai atteint le niveau 20, après quoi j'ai décidé d'essayer de trouver un emploi. Tout d'abord, j'ai déménagé dans une autre ville, parce que... Il n'y avait aucun poste vacant pour un développeur Java junior chez moi. J'ai trouvé une entreprise, j'ai répondu, j'ai reçu une tâche de test, qui devait être complétée en une semaine. Il était nécessaire d'écrire une application web simple utilisant Hibernate, Servlet\JSP et MySQL. De tous ces mots, je savais seulement que MySQL est une base de données. Au début, j'étais très contrarié, j'ai même décidé de chercher des postes vacants dans un KFC pour le moment, mais j'ai finalement décidé d'essayer de remplir les spécifications techniques - j'aurai toujours le temps de trouver un emploi chez KFC. J'ai fait le test non-stop toute la semaine et j'ai réussi. J'ai envoyé la solution, mais elle était « moche », alors je l'ai refaite 4 fois de plus. La dernière décision s'est avérée correcte, mais il s'est avéré que les développeurs avaient déjà été recrutés et que le prochain recrutement aurait lieu dans 3 mois. Chut, d'accord. Au cours des 3 mois suivants, j'ai appris le HTML, le CSS, le JS, le SQL et le PHP. Que fait PHP ici ? J'avais besoin d'un langage côté serveur qui répondrait aux requêtes et tout ça - les servlets et jsp me semblaient trop compliqués à cette époque. Le résultat a été une application Web à part entière avec une interface épouvantable, dont j'ai publié le code sur github pour mon portfolio. À ce moment-là, 3 mois se sont écoulés et ils m'ont écrit de la même entreprise et m'ont appelé pour un entretien et m'ont confié une autre tâche de test simple pour la connaissance de SQL, que j'ai terminée en quelques heures. La personne avec qui j'ai parlé du poste a laissé entendre qu'elle poserait des questions sur les algorithmes et les structures de données - je n'avais pas encore maîtrisé ce sujet, mais il restait 15 jours avant l'entretien, au diable les coureurs. Le livre de Robert Laforet "Structures de données et algorithmes en Java" m'a aidé. Je n’ai pas eu le temps de tout lire et de tout comprendre en deux semaines, mais j’ai quand même appris beaucoup de nouvelles choses. Et puis le jour de l'entretien est arrivé, je suis arrivé à l'heure convenue, 2 hommes m'ont rencontré et l'entretien a commencé. Dire que j'étais inquiet est un euphémisme, ma voix tremblait même. Ils ont posé des questions sur tout sauf sur les algorithmes et les structures de données. Ils ont posé des questions sur Spring, DI, IoC, Hibernate, comment fonctionne la JVM, comment fonctionne le GC - je n'ai répondu à aucune de ces questions. Je n'ai répondu qu'à des questions sur Java Core (collections, exceptions, POO, etc.). Déjà lors de l'entretien, j'ai réalisé que j'avais échoué, mais c'était quand même décevant de ne recevoir aucun retour. Mais j’ai identifié des lacunes dans les connaissances et j’ai commencé à les combler avec diligence. J'ai trouvé un emploi un mois après l'échec de l'entretien. À propos, je suis tombé sur le poste vacant lors des discussions JavaRush. Il y a d'abord eu un entretien Skype avec un recruteur (d'une durée d'environ 2 heures). Ils ont posé des questions sur Java Core, GC (maintenant je savais comment ça marche), les bases de données, les structures de données. Ensuite, l'intervieweur m'a demandé de partager l'écran et d'écrire une calculatrice. J'ai presque crié de bonheur parce que j'avais écrit la calculatrice littéralement une semaine auparavant. Confiant en moi, j'ai commencé la tâche, mais soit par enthousiasme, soit pour une autre raison, j'ai oublié une partie de l'algorithme. L'écran est partagé - c'est effrayant d'aller sur Google. Heureusement, j'avais un téléphone portable qui m'a sauvé la mise. Le lendemain, ils m'ont appelé pour un entretien en personne et quelques jours plus tard, j'ai reçu une offre.
Au début il y avait JavaRush - 1
Le travail n'était pas officiel, j'étais dans le rôle d'un apprenti pour un entrepreneur individuel. Nous avons écrit un service pour créer des événements, vendre des billets et tout ça. Je me souviens de mon premier jour de travail : l'entrepreneur individuel a passé 15 minutes à expliquer ce qui devait être fait. - Eh bien, tout est clair ? - a demandé l'IP - Mmm, pas vraiment, pouvons-nous le faire encore une fois ? — Ai-je demandé très inquiet. L'IP a tout expliqué à nouveau. - C'est clair maintenant ? - Maintenant oui. En fait, je n'ai RIEN compris. Mais j'avais peur de demander à nouveau une explication - je pense que tous ceux qui ont trouvé un emploi me comprendront. L'essence de la tâche était de réécrire de thymeleaf vers AngularJS. Heureusement, j'ai trouvé une partie du code prêt à l'emploi, j'ai suivi l'exemple et j'ai fait de même. Je ne comprenais pas alors comment cela fonctionnait, mais j'ai réussi à faire face à la tâche. Viennent ensuite les tâches liées directement à la partie backend. Ce n'est qu'après une expérience pratique avec Spring que j'ai commencé à comprendre ce qui était écrit dans le livre « Spring for Professionals ». J'y ai travaillé pendant 8 mois, après quoi j'ai déménagé dans une autre ville, où j'ai rapidement trouvé un emploi officiel, travaillé pendant 2 ans et en même temps changé le titre de mon poste de « Junior » à « Moyen ». Maintenant, je suis confronté au fait que le travail est devenu une routine et n'apporte pas le moindre plaisir. Par conséquent, au moment où j'ai fait une pause, et afin d'éviter que mes doigts ne s'atrophient pendant la pause, j'ai décidé d'essayer un autre domaine : le développement de jeux. À savoir le développement de jeux mobiles, pour commencer, Android, car... Je connais Java. Je vais vous en parler maintenant en détail. À propos de nous En peu de temps, une petite équipe de 4 personnes (dont moi) s'est constituée : 2 développeurs, 1 game designer, 1 ingénieur du son. Parce que Personne dans l'équipe n'avait d'expérience dans le domaine du développement de jeux et mon temps libre était limité, nous avons décidé de mettre en œuvre un projet simple que nous irions certainement jusqu'au bout. Ils l'ont fait! Initialement, la date limite était le 15 novembre, mais comme vous le savez, terminer un projet dans les délais initiaux est un péché. Nous l'avons donc terminé deux semaines plus tard. D'après ceux La pile est : Java 8 et libGDX.

À propos du développement

Le début du développement peut être envisagé le 17 octobre. Au total nous avons passé 45 jours, durant lesquels :
  1. appris à travailler avec libGDX ;
  2. a écrit le code ;
  3. dessiné des graphiques ;
  4. fait de la musique;
Ceux qui ont déjà vu le jeu se posent peut-être une question : pourquoi cela prend-il autant de temps, le jeu est simple ? Oui, c'est vrai, et pour être tout à fait précis, le développement lui-même (l'écriture du code) a pris environ une semaine et demie. Le reste du temps peut être réparti entre :
  1. maîtriser le moteur ;
  2. dessiner des images puis les redessiner ;
  3. écrire de la musique;
  4. recherche de sons sur https://freesound.org ;
  5. lire un tas d'articles sur la façon de promouvoir les jeux
De plus, il y a eu des moments de « temps d'arrêt » pour diverses raisons : quelqu'un a passé un examen, quelqu'un a rattrapé, etc. Vous pouvez passer en toute sécurité une semaine et demie, voire plus, en « temps d'arrêt ». Une autre partie du temps était consacrée aux « débats » : des idées sur ce qu'il fallait ajouter au jeu arrivaient presque tous les jours, il y avait donc des disputes sur « ce serait superflu », « cela ne rentrerait pas dans l'ordre », etc. Ainsi, nous avons abandonné de nombreuses idées, par exemple ajouter des cafards qui courent que vous pouvez écraser et en obtenir un supplément. points : Au début il y avait JavaRush - 2En général, l'une des choses les plus difficiles, à mon avis, est de décider à l'avance de ce qui sera dans le jeu et de s'en tenir à ce plan sans essayer d'ajouter « une autre » fonctionnalité. C’est ainsi que nous avons accumulé ces 45 jours. Le prototype du jeu était prêt au bout d’une semaine et demie. Durant cette période, nous n’avions pas encore vraiment de graphismes, donc nous avons pris certaines choses du domaine public (par exemple, nous avons emprunté une feuille de papier de fond à Doodle Jump), et d’autres que nous avons créées nous-mêmes en peinture. Au début il y avait JavaRush - 3Le jeu est techniquement très simple : nous n'avons même pas eu besoin d'utiliser box2d (moteur physique), nous avons pu gérer les collisions et calculer nous-mêmes l'hypoténuse. Parmi les points les plus intéressants, je soulignerai les suivants.
  1. Initialement, tous les éléments du jeu étaient générés aléatoirement. Ceux. nous avons des fournisseurs de trous noirs, de ciseaux, de shurikens, de bâtonnets, de cœurs - nous les mettons dans un tableau, puis nous prenons un fournisseur aléatoire et obtenons un élément avec des coordonnées aléatoires. Assez vite, il est devenu clair que cette approche n'était « pas très bonne » ; nos amis qui ont participé aux tests nous ont dit la même chose et nous ont conseillé d'utiliser des modèles. C'est sûrement une solution évidente pour ceux qui sont impliqués dans le développement de jeux, mais... Nous sommes nouveaux dans ce domaine et cela a été de très bons conseils pour nous.

    Ainsi, plusieurs schémas ont émergé : vallée des ciseaux ; tiges diagonales - c'est assez amusant de les assembler à grande vitesse (swish-swish-swish avec le doigt) ; et un autre modèle, je ne sais pas comment l'appeler - je l'appellerai comme la classe s'appelle dans le code : StraightForwardPattern.

    Au début il y avait JavaRush - 4

    C'est devenu plus agréable avec les modèles, mais c'était trop prévisible ou quelque chose du genre. Par conséquent, le même hasard est devenu un autre modèle. Ceux. Nous avons maintenant des modèles « statiques » et un modèle aléatoire. (voici un mème sur l'équilibre parfait).

  2. Le principal problème que nous avons rencontré était le suivant. LibGDX appelle la méthode render(float delta) dans une boucle sans fin, dans laquelle tout le rendu des éléments se produit réellement. On trace un trait de crayon de la manière suivante : on prend les coordonnées du doigt et on y place la texture. Ainsi, si nous déplacions notre doigt sur l'écran très rapidement, des « trous » se formaient car nous nous retrouvions dans ces millisecondes où la méthode render(delta) avait déjà fonctionné et n'avait pas encore été appelée. Le problème a été résolu tout simplement - nous nous souvenons de la dernière coordonnée dans laquelle la texture a été dessinée, nous obtenons la suivante, et si la distance entre elles est supérieure à X et que le doigt n'a pas été relâché, nous comblons cet écart. Au début, nous pensions que cette option pourrait ne pas fonctionner - les lignes seraient angulaires, mais nos craintes étaient vaines - tout fonctionne comme il se doit.

    En fait, à propos du jeu

    Le gameplay ne prétend pas être unique, mais il est plutôt bon et peut créer une dépendance. Vous contrôlez un crayon, dessinez littéralement sur du papier, en évitant les obstacles - ciseaux, shurikens, trous noirs. Dans ce cas, le noyau du crayon se termine et vous devez ramasser des petits crayons. Si la tige arrive à son terme et qu'il n'y a toujours pas de crayons, vous pouvez ramasser un fragment de miroir. Cela aura un effet pendant quelques secondes - au lieu de gaspiller la tige, elle sera restaurée, mais en même temps le contrôle devient miroir - vous vous déplacez vers la gauche et le crayon dessine vers la droite. Vous pouvez également récupérer un cœur qui vous permettra de rencontrer une fois un obstacle et de rester en vie. Plus vous maintenez sans lever le doigt de l'écran, plus le combo sera élevé, ce qui augmente la vitesse de gain de points. De plus, la vitesse du jeu augmente progressivement. A moins que vous ne puissiez pas voler les Koroviens. Au début il y avait JavaRush - 5Au départ, nous avions prévu d'appeler le jeu Karan Dash (un crayon, ahaha, compris, n'est-ce pas ?), mais plus tard, nous avons changé d'avis et avons opté pour Pencil Dash. La motivation était que ce jeu de mots élégant (je dis bien) ne serait compréhensible que par un public russophone. Nous avons sorti le jeu il y a quelques jours et en faisons maintenant la promotion. Personne dans l'équipe n'a d'expérience dans ce domaine non plus, nous avons glané toutes les connaissances sur la promotion dans divers articles. Nous avons publié gratuitement des informations sur le jeu sur divers sites Web/forums. Quant aux chaînes payantes, nous avons commandé de la publicité sur 4PD, auprès d'un blogueur, plusieurs publications sur les pages publiques de VK et AdMob. À propos, cet article fait également partie de la promotion, donc avec l'autorisation de l'administration, je laisse ici un lien vers le jeu. Page de jeu sur Google Play : cliquez sur Je laisserai également un lien vers notre groupe VK, où vous pourrez laisser des avis/suggestions et ne manquer aucune mise à jour cliquez sur Je vous serai reconnaissant si vous l'installez (et si vous l'aimez ?), et pour un avis avec une note, je promets d'allumer une bougie pour votre santé ! Posez des questions, si vous en avez, je répondrai.Au début il y avait JavaRush - 6

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION