«Je peux vous parler de la douleur que chaque développeur iOS a dans le cul» - 10 questions à un développeur, épisode 2



On dirait que tout le monde a apprécié l'épisode pilote , et nous sommes toujours sûrs que les gens «en coulisses» peuvent être aussi excitants que les célébrités de l'informatique que nous connaissons et aimons tous. Et peut-être même plus, car ils parlent de vrais problèmes et de vraies solutions. Cette semaine, nous avons posé 10 questions à une personne derrière le développement de Yandex.Maps pour iOS.


Nikolay Likhogrud ( likhogrud ) de Moscou. A commencé la programmation en 9e année à partir de HTML et de base. Ensuite, il a appris lui-même le C #, est diplômé de l'Université d'État de Moscou avec un diplôme en informatique et a rejoint l'équipe Any Void. Avec eux, il a déménagé à Yandex, où il a passé les 2,5 dernières années en tant que chef d'équipe pour le développement iOS de Yandex.Maps.

1. Parlez-moi d'une fonctionnalité que vous avez déployée et qui vous rend vraiment fier.


- Nous devons faire la différence entre les fonctionnalités de l'équipe et mes fonctionnalités personnelles. Celui dont je me souviens le plus est qu'il y a 1,5 an, j'ai personnellement réduit de moitié le temps de lancement de l'application et en ai parlé à mes collègues. Corrigez quelques fonctionnalités iOS qui n'étaient documentées nulle part. Étant donné que Swift (le langage de programmation utilisé par iOS) entraîne de nombreuses bibliothèques dynamiques avec lui, il y avait un petit problème. Chaque bibliothèque avait besoin que sa signature numérique soit vérifiée au lancement, ce qui ralentit tout. Mon travail a donc vraiment aidé les utilisateurs. J'ai même prononcé un discours à Mobius à ce sujet.

En ce qui concerne le développement d'équipe, "Maps" est un énorme projet avec beaucoup de fonctionnalités différentes. Je n'ai jamais rien vu de tel auparavant. Si vous vous asseyez vraiment et que vous y creusez, je peux montrer certaines fonctionnalités que personne ne connaît probablement - il y a beaucoup de choses là-dedans! Chaque nouvelle version, nous faisons quelque chose de très cool, et je suis très fier de tout cela. Actuellement, nous avons terminé de peaufiner les données historiques pour la recherche et la planification d'itinéraire et de nous concentrer sur les fonctionnalités qui vous indiquent où vous êtes. Nous l'appelons un «guide touristique de la ville». C'est moins un outil utile et plus juste des choses de divertissement. L'une des grandes fonctionnalités est la réalité augmentée dans Maps. Nous l'avons fait exceptionnellement rapidement: cela a fonctionné à peu près dès le départ, du premier coup. Même réussi à respecter le délai avant le lancement d'iOS 11, devant les autres équipes. C'était vraiment cool.

Rien de spécial - juste un beignet roulant le long de la rivière

2. Maintenant, parlez-moi de votre pire putain.


- Oh, il y en avait un. C'était au tout début, quand je venais de rejoindre l'équipe Maps: c'était une inconnue pour moi, l'équipe précédente était complètement hors de contrôle et personne n'était là pour me vérifier. Et une fois, j'ai accidentellement DDoSed les serveurs de géocodage parce que j'ai oublié de mettre un test quelque part. Après qu'un utilisateur a fait quelque chose avec l'application, le téléphone a envoyé une demande au serveur à chaque mise à jour de sa géolocalisation, et le serveur a renvoyé des données sur l'emplacement de l'utilisateur. Au rythme maximum de 10 fois par seconde. Et, compte tenu du nombre d'utilisateurs que nous avons, même si chaque 100e ou 1000e utilisateur interagissait avec cette fonctionnalité, le serveur avait vraiment du mal à y faire face.

C'était le moment rare qui est sorti de l'équipe Maps, des gens d'autres équipes m'ont demandé: «qu'as-tu fait!». Mais, heureusement, nous avons résolu le problème assez rapidement - le serveur a été sauvegardé en très peu de temps. Nous avons trouvé le gros, corrigé très rapidement et envoyé un correctif à Apple (bien que la revue de l'App Store ait pris environ une semaine). C'est maintenant beaucoup plus facile à détecter là-bas, et à l'époque j'étais plus en colère contre moi-même: comment pouvais-je me foutre si mal après avoir simplement rejoint l'équipe? Mais tout le monde comprenait que le projet était grand et qu'il n'y avait personne à consulter ...

3. Décrivez votre lieu de travail: de votre chaise et moniteur de bureau aux environnements de développement préférés et aux utilitaires préférés.


- Chaise et bureau que je n'ai pas choisis: ce que l'entreprise m'a donné, je l'ai pris. Il y a un moniteur Thunderbolt et un MacBook, ainsi qu'un clavier et une souris sans fil pour que je puisse mettre l'ordinateur portable de côté.



Le bureau est jonché de papiers avec mes pensées et mes plans. Je ne peux toujours pas me résoudre à passer à quelque chose de progressif: Trello ou Dapulse, peu importe. Rien de tout cela n'existait lorsque je suis entré, et je préfère toujours le papier. Bien sûr, je prends également des notes sur l'ordinateur portable, mais c'est toujours agréable d'écrire quelque chose et de le rayer plus tard. Il y a aussi beaucoup d'autres choses sur le bureau que je nettoie régulièrement. Il y a aussi des briques Lego pour plus de confort. J'essaie consciemment de faire en sorte que mon espace de travail soit comme à la maison, et je regarde parfois les tables de mes collègues, où il n'y a rien d'autre qu'un ordinateur portable et un moniteur, et je pense que je ne peux pas vivre comme ça.

4. Comment choisissez-vous un travail? Pile, produit, conditions de vie, argent?


- Je répondrais probablement si la question était "si je choisissais ...". Je n'ai pour l'essentiel pas encore changé d'emploi. Je suis dans ma 6e année chez Yandex et je ne peux pas m'imaginer ailleurs. J'ai une excellente position, une équipe, des responsabilités, beaucoup de perspectives de carrière.

Donc, si je choisissais où travailler, je regarderais probablement l'équipe en premier. J'ai besoin de savoir avec quelles personnes je vais travailler avant de prendre ce genre de décision. Si vous les connaissez, vous savez probablement aussi sur quel projet vous allez travailler. Si la personne est accomplie, vous pouvez être sûr qu'elle a aussi de grands projets. Il est important de connaître d'autres personnes et de vous faire connaître. Vous ne pouvez pas vous isoler et aller dans l'inconnu. Même les tâches dépendent grandement des personnes. Si l'entreprise égarait sa nouvelle embauche, il se désintéresserait rapidement.

La question de l'argent est également importante, mais elle est plus ou moins la même partout. J'ai fait beaucoup d'entretiens et je sais ce qui est généralement proposé dans d'autres entreprises.

5. Que voudriez-vous corriger dans les technologies et les langues que vous utilisez?


- Je peux vous parler de la douleur que chaque développeur iOS a dans le cul. Le compilateur de Swift n'est horriblement pas optimisé, l'environnement de développement n'est pas aussi soigné. Nos projets de 400 mille lignes traînent comme des fous. L'indexation est lente comme la mélasse, chaque fichier s'ouvre plusieurs minutes, un projet peut s'initialiser pendant une heure. La compilation n'est pas plus rapide et consomme également beaucoup de puissance de traitement.

Notre travail dépend de la vitesse de compilation de Xcode. Cela fonctionne très bien avec Objective-C, mais il y a quelque chose qui ne va pas avec Swift. Si cela fonctionnait un peu plus vite, nous n'aurions pas eu à découper le projet en modules, mais nous avons dû y investir. Actuellement, nous développons davantage dans des projets de test et non dans l'application principale elle-même, puis la transférons. Même si cela a finalement bien fonctionné pour notre projet, il a fallu de l'argent et du temps pour apprendre à travailler de cette façon.

6. Où est le meilleur endroit pour partager une expérience de travail - est-ce un collège, des conférences, des Habr? Autre part que ça?


- Le moyen le plus efficace est d'avoir un problème spécifique et de chercher une solution. «Acquérir de l'expérience» est un terme très large, mais «chercher une solution» est plus approprié. Vous tapez simplement votre question dans Google et regardez ce qu'elle vous donne.

Je vais habituellement aux conventions non pas pour acquérir de l'expérience, mais pour partager la mienne. J'ai une certaine expérience sur le maintien d'un grand projet, et cela intéresse les gens. Il y a très, très peu de projets comme le nôtre en Russie, notre expérience est donc plutôt unique. On me demande comment avez-vous divisé l'application en modules, à quoi ressemble votre examen de code, comment fonctionne votre CI .

7. Compte tenu des ressources illimitées (temps, argent, personnes), sur quel projet aimeriez-vous travailler?


- J'ai une liste assez longue de «je veux faire, je n'ai pas le temps» sur ce que j'ai l'intention de faire dans Maps. Il y a des choses à améliorer.

Mais dans l'ensemble, je voudrais entrer dans l'industrie spatiale. Je suis fasciné par l'idée d'un homme en dehors de la Terre, explorant l'univers. Chaque fois qu'il y a des nouvelles sur les progrès scientifiques dans ce domaine, je suis excité. Bien que le développement iOS ne soit probablement pas nécessaire là-bas, mais je peux m'intégrer quelque part avec mes compétences en gestion d'équipe. Enfer, je donnerais même du café aux gens si l'idée est bonne.

8. Comment vous détendez-vous? Que faites-vous dans la vie, à part le travail?


- Tout le monde doit parfois «redémarrer». Le programme 5 + 2 a été inventé par des gens très intelligents. Si vous êtes vraiment impliqué dans un projet, si intéressé par son succès que vous êtes prêt à y travailler le week-end, cela ne se terminera pas bien. Vous perdrez votre étincelle, et elle devrait être maintenue à tout prix si vous voulez travailler pendant des mois ou des années.

Le week-end, je fais généralement quelque chose de simple: marcher, regarder la télévision, rien de trop extrême. Bien que j'aurais probablement aimé le faire, je n'ai personne avec qui le faire. Quelques fois, notre équipe a fait du kayak sur la rivière Vyazma, c'était plutôt cool. Parfois, nous allons au paintball. Mais ce n'est pas quelque chose que nous allons régulièrement, car cela vous vide assez rapidement. Bien sûr, vous échangez cela contre des émotions, mais ... Travaillez pendant cinq jours, puis passez deux jours à faire quelque chose d'intensif physiquement, puis travaillez à nouveau pendant cinq jours? Je ne réussirais probablement pas.

J'aime aussi passer du temps à restaurer ma maison. Certaines réparations sont effectuées rapidement, d'autres durent indéfiniment. C'est son propre petit monde avec ses propres technologies et expériences.

9. Parlez-moi de vos 3 livres préférés: éducatif, science populaire et fiction.


- Je n'ai pas eu d'expérience positive avec des livres éducatifs - Je n'en ai probablement pas lu un seul sur mon travail. Peut-être qu'au tout début, j'ai étudié le C ++ sur les livres. Je me souviens être allé à un camp en plein air pour enfants, tout le monde autour de moi avait des livres normaux et j'avais du C ++. J'ai fini par ne pas trop lire parce que je n'avais pas d'ordinateur avec moi. Je l'ai lu et je comprends surtout, mais maintenant pour tout appliquer à mes besoins? Comment acquérir de l'expérience? Je suis plus un pratiquant qu'un théoricien. Peut-être que je ne connais pas certains des termes sympas que mes collègues utilisent régulièrement, mais au moins je sais comment faire avancer les choses. J'ai appris cela simplement en résolvant des problèmes complexes et en recherchant des solutions sur Internet.

Aux personnes qui se concentrent sur des blogs et de la littérature intelligents, je peux seulement dire que rien de ce que vous lisez ou voyez ne garantit que vous pouvez le reproduire vous-même. Gardez toujours vos objectifs à l'esprit et complétez la lecture par la pratique.

Wikipédia remplace la science populaire pour moi. J'ai lu tout. J'aime vraiment l'histoire et je peux de temps en temps lire sur toute la lignée dirigeante russe: de Rjurjik à Ivan le Terrible, du premier Romanov à la révolution d'octobre - puis sauter sur un lien à propos d'Alexandre le Grand. Je peux y passer 2-3 heures et je le remarque à peine. Il y a des articles intéressants sur les armes, la forge et autres. Malheureusement, je ne peux pas le reproduire, mais c'est cool d'imaginer comment les gens ont initialement proposé ces idées.

Je ne lis pas beaucoup de livres de fiction actuellement. Ils ont été presque entièrement remplacés par des films. Ils servent à peu près le même objectif, mais les films sont beaucoup plus compacts. Mais je mentionnerai un livre qui m'a vraiment collé: «Oblomov». Cela a touché mon nerf d'une manière qu'aucun autre livre n'a fait.

10. Si un système d'IA devenait soudainement conscient juste devant vous, que lui diriez-vous?


- Je demanderais d'abord: que signifie «conscient»? Si cela signifie simplement passer le test de Turing, ce n'est pas encore la conscience. Mais si nous n'entrons pas dans les détails, je lui demanderais probablement de résoudre un problème spécifique. Je suis une personne d'entraînement, après tout. Alors, "Comment rendre Xcode plus rapide?"

Mais vous devez toujours commencer par «Salut, comment allez-vous?». Une réponse à ce genre de question peut nous en dire beaucoup sur l'IA. Comment une machine évalue-t-elle sa propre humeur? Que fait-il?

Question d'un invité précédent: quelle technologie a été la plus amusante à apprendre?


- «Fun» en particulier? Je n'ai pas encore appris à m'amuser en apprenant ou en travaillant. J'ai appris à le prendre calmement et à bien le faire. Par exemple, je n'ai pas vraiment eu beaucoup de plaisir à apprendre le SDK iOS, car c'est assez simple si vous connaissez les bases.

Je me suis vraiment amusé à l'université, où j'ai travaillé sur un projet qui implémentait l'apprentissage automatique. C'était rafraîchissant de réaliser qu'il n'y a vraiment rien de si difficile à ML. Si vous connaissez les paramètres d'entrée, vous pouvez prédire le résultat avec une certaine précision. Peut-être que cela explique pourquoi je ne suis pas aussi passionné par l'IA que tout le monde semble l'être - je sais que ce ne sont que des algorithmes.

De plus, je me suis amusé à travailler avec des compilateurs dotés du multithreading automatique. C'est une technologie assez développée, elle a beaucoup de choses à apprendre. Ils sont vraiment intelligents et font beaucoup plus que vous ne pouvez l'imaginer. Par exemple, des transformations d'arbre de syntaxe incroyablement complexes. Ou optimiser la génération de code pour une configuration matérielle et CPU particulière.

C'est cool que nous ayons un framework open-source pour cela, LLVM , afin que vous puissiez créer votre propre compilateur. Vous pourriez même créer votre propre langue! Écrivez un parcellaire pour cela qui fait l'analyse de lexis et de syntaxe, puis utilisez la puissance d'un compilateur moderne pour le transformer en code machine.

Bonus: demandez à un autre développeur tout ce que vous aimez


- Souhaitez-vous rejoindre le premier vol habité vers Mars, sachant que vous ne reviendrez pas?

Source: https://habr.com/ru/post/fr438152/


All Articles