Le développement mobile est-il facile et ennuyeux? Rapport Yandex


Il existe un mythe selon lequel la création d'applications pour iOS ou Android est plus facile que d'être, disons, un développeur principal. Bien sûr, ce n'est pas le cas: il y a des difficultés à travailler avec n'importe quelle plate-forme, partout surgissent des problèmes non évidents qui nécessitent des compétences dans le domaine et au-delà. Roman Abuzyarov de l'équipe Yandex.Chats a préparé un rapport sur ses différentes tâches, qui montre à quel point les connaissances d'un spécialiste iOS devraient être étendues. Le rapport est destiné aux développeurs débutants et juniors.

- Bonjour à tous, je m'appelle Roma, je suis développeur iOS sur Yandex.Chats. Aujourd'hui, je vais essayer de parler du fait que le développement mobile est très intéressant et difficile, et il y a quelque chose à faire. Je vais le faire comme un exemple des tâches que j'ai résolues pendant mon stage et quand j'étais développeur junior.

Je suis diplômé de la Faculté d'Informatique du HSE. Dans la troisième année du FKN, j'ai un peu travaillé sur le développement iOS, je me suis intéressé, j'ai aimé. Je pensais - vous pouvez aller quelque part pour travailler, faire un stage. J'ai réussi à me rendre à Yandex pour un stage, et quand je l'ai terminé, j'ai été transféré au personnel et maintenant je continue de travailler dans l'équipe Yandex.Chats.





Un peu sur Yandex.Chats. Nous communiquons sur de nombreux services Yandex. Si vous communiquez avec quelqu'un dans Yandex, alors très probablement via Yandex.Chats. Il y a, par exemple, l'application Yandex sur les appareils mobiles, les chats y sont intégrés. Il y a Yandex.Rion, où vous pouvez écrire à n'importe quel utilisateur via Yandex.Chats. Sur le marché, vous pouvez discuter avec des organisations, poser des questions sur un produit et tout cela. La liste continue. Il y a un Yandex.Browser mobile, où il y a des chats, vous pouvez les ouvrir sur les cartes. Dans Yandex.Connect, c'est une telle chose pour les entreprises, les chats sont également livrés sous forme de bundles pour les entreprises. Il y a aussi Aura, c'est un tel réseau social où vous pouvez balayer les messages et également communiquer avec les utilisateurs via les salles de chat.

Nous engageons, si vous souhaitez vous engager dans la communication, venez. Nous proposons également des stages à Sotchi. Nous y allons en voyage d'affaires tous les quelques mois. À propos de Chats pour le moment.

Quoi et pourquoi je veux vous dire? La première chose que j'ai remarquée pendant mes études au FKN, c'est que beaucoup de gens en général et les enseignants en particulier ont une attitude partiale envers le développement mobile. Ils pensent tous - que faire là-bas? Il a poussé le bouton, tout est simple. Et un défi particulier était de prendre un diplôme en développement mobile, car ils vous diraient: prenez quelque chose de plus compliqué.

Aujourd'hui, je veux montrer qu'en fait, tout va mal, c'est une mauvaise stigmatisation. Il y a beaucoup de choses intéressantes et complexes dans le développement mobile. La seconde - quand je suis arrivée au stage, je n'avais aucune idée des tâches des développeurs mobiles dans les entreprises. Et les équipes, au contraire, veulent savoir ce que vous voulez faire et si vous avez de l'expérience en développement industriel.

Aujourd'hui, je vais essayer de faire la lumière sur tout cela, vous montrer les tâches spécifiques que j'ai résolues afin que vous ayez une idée approximative de ce qui se passe ici et de ce que vous pouvez faire.

Je vais vous montrer aujourd'hui trois tâches que j'ai résolues. Passons directement au premier.

Des trous dans l'histoire


La tâche principale de Chats et, en général, des messagers est d'envoyer des messages à quelqu'un et de recevoir des messages de quelqu'un.



Supposons que je puisse utiliser le chat pour discuter avec ma mère. Auteur ponctuation, il n'y a pas de virgule ici spécifiquement. Et je peux lui envoyer quelques messages, attendre qu'elle les voie et tout ira bien. Mais la mère a parfois tendance à être là où la connexion n'est pas prise: par exemple, dans le métro ou le tunnel.



Et certains messages peuvent ne pas lui être transmis pour des raisons indépendantes de notre volonté. L'impression de la conversation n'est pas tout à fait juste, elle peut commencer à paniquer. Le messager mobile doit gérer cette situation correctement.

Pour continuer, je vais vous donner quelques informations importantes sur les messages. Tout d'abord, chaque message a un identifiant unique. Dans ce cas, ce ne sont que des chiffres dans l'ordre. En fait, ils ont l'air un peu différents, mais l'essentiel est qu'il est unique et nous permet d'identifier ces messages. Il est stocké juste à l'intérieur du message avec le texte, nous l'avons.

La deuxième chose dans le message est le même identifiant unique du message précédent. Il y est stocké et, connaissant les identifiants, nous pouvons tirer des conclusions sur le caractère holistique de notre histoire.

Maintenant, la situation est la suivante. Maman a trois messages sur son téléphone. Elle les a tous lus et ne comprend pas ce qui se passe, elle panique beaucoup.



Les chats peuvent détecter immédiatement cette situation. Nous regardons ces identifiants et voyons qu'avant le quatrième message, il devrait y en avoir un troisième, mais pour une raison quelconque, nous ne l'avons pas, et il y en a un second. Nous trouvons cette chose facilement. Nous écrivons en majuscules - les messages se chargent, nous dessinons une sorte de fileur, et à ce moment nous nous rendons dans notre backend et lui disons: nous avons tel ou tel message perdu entre les deux, pouvez-vous s'il vous plaît nous le donner?



Il nous le donne rapidement et facilement, car vous ne devez donner qu'un seul message. Nous le prenons, le reconstruisons et tout va bien. Maman comprend toute la situation et n'est pas inquiète.



À quoi avez-vous dû penser en faisant cela? Le premier est que les appareils mobiles ont tendance à être très souvent hors ligne, et cela doit toujours être gardé à l'esprit. Vous devez comprendre que certaines demandes peuvent échouer, vous devez réessayer. Peut-être que votre appareil a été hors ligne pendant une heure, puis vous devez récupérer lorsque le réseau est apparu.

La seconde - vous devez être en mesure d'interagir avec le backend. Dans de nombreuses applications, une compétence utile consiste à envoyer des demandes et à analyser les réponses. Troisièmement, vous devez comprendre les structures de données de base. Supposons ici que nous pouvons comprendre que ces messages sont liés, c'est-à-dire qu'ils ont les propriétés d'une liste chaînée. Et ces propriétés, c'est-à-dire que cette connexion entre les messages peut être utilisée pour rendre notre client plus stable. Nous pouvons traiter les trous de cette façon.

Autocollants récents


Passons à la tâche suivante. Il y a beaucoup d'autocollants là où il y en a. Il s'agit d'une image que vous pouvez envoyer et vous n'avez pas besoin de la précharger. Juste quelqu'un avant vous, quelqu'un l'a téléchargé sur le backend et vous n'avez qu'à lui envoyer son identifiant, et tous les autres utilisateurs pourront le trouver grâce à cet identifiant. Les autocollants récents sont un endroit si spécial pour obtenir les derniers autocollants que vous avez envoyés. Vous pouvez utiliser des autocollants que vous aimez, les utiliser souvent et il est très pratique d'y accéder.



Supposons que je veuille envoyer une étoile. Je l'envoie, il devient cette première place dans mes récents stickers.



Tous les autres autocollants sont décalés d'un à droite. Et lorsque j'envoie tous les autocollants suivants, tous les autocollants précédents sont également décalés d'un vers la droite, le nouveau devient le premier.

Ici, vous pouvez immédiatement comprendre qu'il s'agit d'une structure de données appelée «file d'attente» ou file d'attente ou premier entré, premier sorti. C'est-à-dire que le premier élément qui y arrive au début, c'est le premier à la fin et disparaîtra. L'oiseau que nous avons ajouté une fois tombera lorsque nous manquerons d'espace pour ces autocollants récents.



Cependant, que se passera-t-il lorsque nous voulons ajouter un autocollant qui est déjà dans notre file d'attente? Disons que c'est un minou avec une pièce. Épicerie nous comprenons ce que nous voulons obtenir. Alors que le vieux chat a disparu à l'endroit où elle est, et le nouveau est devenu le premier.

Mais puisque nous sommes tous des développeurs, nous comprenons que vous pouvez insérer dans une file d'attente d'une part, l'obtenir de l'autre, et quelque chose ne vous permet pas de changer quelque chose au milieu, ou ce sera super-inefficace. Que pouvez-vous essayer de faire avec ça?

J'ai introduit une autre structure de données appelée Hash Map. Juste au cas où, je vais clarifier. Il s'agit d'une telle table de correspondance de certaines quantités à d'autres, grosso modo. Dans ce cas, la clé de notre tableau sera un autocollant ou un identifiant unique de celui-ci. Et la valeur sera le nombre d'entrées dans nos autocollants récents.

Ici, j'ai immédiatement indiqué qu'ils étaient tous entrés une seule fois, à l'exception de l'oiseau. Pourquoi utiliserons-nous cela? Supposons que nous voulons nos données, retirez cette séquence d'autocollants - par exemple, enregistrez-la dans une base de données afin que l'utilisateur redémarre ensuite l'application et qu'il en récupère dans la séquence correcte. Nous obtiendrons l'autocollant d'autre part, à partir de la file d'attente, mais nous ne les émettrons que si le nombre d'occurrences de cet autocollant est égal à un. S'il y en avait plus d'un, nous l'ignorons simplement et le jetons.



Comment ça marche? Disons que nous ajoutons un minou. Elle se met à notre tour. Le nombre près du chat est devenu 2. C'est-à-dire qu'il y a maintenant deux chats à notre tour.

Supposons maintenant que nous voulons enregistrer la séquence entière d'autocollants, nous commençons à les obtenir. On regarde le calendrier, il n'est entré qu'une seule fois.



Nous l'obtenons sans aucun problème. Ensuite, nous regardons le chat. Le chat est entré deux fois, donc en ce moment nous ne la prenons pas, nous le jetons simplement, l’ignorons et réduisons le numéro deux à l’unité.



Tous les autocollants suivants que nous avions une fois, nous les obtenons calmement.



Tout est en ordre, nous réussissons. Pour le moment, le chat ne s'est rencontré qu'une seule fois, donc nous l'obtenons aussi calmement et tout est en ordre.



Regardons ces coches vertes. Quelle séquence d'autocollants avons-nous obtenue?



Nous comprendrons que nous avons exactement ce dont nous avons besoin, et tout fonctionne comme prévu dans la tâche.



À quoi devez-vous penser dans cette tâche? Ici, vous devez déjà connaître un peu plus les structures de données - pour savoir ce qu'est une file d'attente et une carte de hachage, quelles opérations elles ont définies et ce que vous pouvez en faire. Vous devez également évaluer la complexité. En général, il est utile de connaître la complexité des opérations sur les structures de données de base, cela permettra une construction plus efficace des structures composites ou la mise en œuvre d'algorithmes. La troisième chose qui est très importante à faire au travail et dans la vie est de s'adapter à la tâche, de prendre certaines connaissances que vous avez. Supposons une connaissance des mêmes structures de données. Mettez une seule image, ce qui résoudra exactement le problème qui se pose devant vous à un moment particulier.

Image dans l'image


Passons maintenant à la troisième et dernière tâche. Ceci est une image en image. Je vais clarifier. Il y a des appels et des appels vidéo dans Yandex.Chats.



Pendant un appel, vous pouvez réduire votre flux vidéo de l'interlocuteur dans une petite fenêtre et le déplacer sur l'écran, tout en utilisant le messager. Un tel multitâche s'avère, la vidéo colle aux coins de l'écran lorsque vous la faites glisser. Pour obtenir cette fonctionnalité, vous devez effectuer quelques étapes. La première et principale chose que vous devez faire est de rendre ce grand flux vidéo rectangulaire petit et d'être au bon endroit pour vous. À ce sujet, cela devrait arriver. Ici, nous rappelons la géométrie de base - nous multiplions les côtés du rectangle par un facteur, nous déplaçons son milieu et tout va bien, ici, il est au bon endroit.

La deuxième tâche est plus compliquée. Vous devez le faire en sorte qu'il soit situé dans les coins de l'écran et s'y tenir. Pour cela, j'ai décidé d'utiliser un framework standard appelé UIKit Dynamics.



C'est une telle chose qui vous permet de donner aux objets visuels une variété de propriétés physiques - la gravité, l'inertie, ces choses. C'est à partir de ce cadre que j'ai appliqué une entité telle que Spring Field. Le printemps se traduit par le printemps. Il s'agit d'un champ qui attire des objets vers un point de la zone de son action.



Dans l'interface messenger, cela ressemble à ceci. Les points rouges indiquent le sens du recours à la force. Et si je tire cette vue du milieu, elle recule.



Pour simplifier, j'ai désigné un tel rectangle comme un tel rectangle. Il s'agit d'une zone jaune avec un point de force indiqué par un point noir.

Maintenant, revenons à la façon dont notre tâche est définie. Nous avons l'écran principal de l'utilisateur, quatre points dessus, et nous voulons que notre flux vidéo y soit attiré. Comment ai-je commencé à le résoudre? Nous prenons tout notre champ, le sculptons sur tout l'écran. Nous lui désignons quatre points d'attraction, et le cadre fait tout pour nous.



Donc, bien sûr, je n'ai rien réussi à faire, car un seul point d'attraction peut être défini pour un champ, quatre points ne peuvent pas être définis.

J'ai pensé: d'accord, la deuxième étape. Nous prenons quatre de ces champs, les organisons pour qu'ils remplissent tout l'écran et plaçons les points où nous devons être attirés.



Mais cela n'a pas fonctionné non plus pour moi, car les valeurs qui peuvent être modifiées sur le terrain sont la taille et son point central. Et elle n'est attirée qu'au milieu. Très pratique, merci, Apple, mais a échoué.

Où suis-je venu? Nous prenons nos champs, les organisons de manière à ce qu'ils remplissent tout l'écran et ne se coupent pas, n'entrent pas en conflit et que leurs points médians soient à angle droit. Les champs sortent de l'écran, mais cela ne nous dérange absolument pas du tout, cela ressemble à ceci:



Il y a des champs visualisés, et cette vue est attirée par l'endroit où l'utilisateur la fait glisser avec son doigt.





Pour résoudre ce problème, il était nécessaire de connaître les choses suivantes. Le premier est la géométrie de base. En général, lorsque vous êtes engagé dans une sorte de développement visuel mobile ou frontal, vous devez être capable de calculer ces rectangles, de déplacer les cadres, pour ainsi dire. Il s'agit d'une compétence utile, qui peut être obtenue à l'école.

Deuxièmement, vous devez être en mesure de travailler avec les gestes de l'utilisateur afin de pouvoir lire les gestes que l'utilisateur effectue, par exemple, des balayages, et pour que l'utilisateur puisse travailler avec votre application est fluide et intéressant. Cela peut également être fait par des moyens standard, puis je montrerai le lien.

Et troisièmement, important: vous devez connaître les cadres du système. Il n'est pas nécessaire de savoir comment travailler avec eux, mais simplement de connaître leur existence et ce qu'ils peuvent vous aider à réaliser. Parce que lorsque vous êtes configuré avec une tâche - faites-le, vous vous souvenez: oui, il existe un tel cadre, je vais maintenant regarder sur Internet comment l'utiliser et faire la tâche. Et si vous ne le savez pas, vous penserez simplement que vous n’avez même pas besoin d’effectuer une telle tâche, car vous ne savez pas quoi en faire.



Je ne vous ai montré que trois tâches, mais en fait, il y a déjà pas mal de choses auxquelles vous devez penser, dont vous avez besoin de développer l'expertise. Il y a beaucoup plus de tâches, et elles sont toutes très diverses et intéressantes. Et si vous voulez que votre produit se développe, vous devez constamment les résoudre. J'ai également promis quelques références:

- File d'attente sur deux piles
- HashTable sur Swift
- Complexité des algorithmes avec des exemples
- Reconnaissance des gestes des utilisateurs
- Introduction à UIKit Dynamics

C'est tout pour moi, merci.

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


All Articles