Ist mobile Entwicklung einfach und langweilig? Yandex-Bericht


Es gibt einen Mythos, dass das Erstellen von Anwendungen für iOS oder Android einfacher ist als beispielsweise ein Backend-Entwickler. Dies ist natürlich nicht der Fall: Es gibt Schwierigkeiten bei der Arbeit mit einer Plattform, überall dort, wo nicht offensichtliche Probleme auftreten, die Fachkenntnisse und darüber hinaus erfordern. Roman Abuzyarov vom Yandex.Chats-Team erstellte einen Bericht über seine verschiedenen Aufgaben, aus dem hervorgeht, wie umfangreich das Wissen eines iOS-Spezialisten sein sollte. Der Bericht richtet sich an Anfänger und Nachwuchsentwickler.

- Hallo allerseits, mein Name ist Roma, ich bin iOS-Entwickler bei Yandex.Chats. Heute werde ich versuchen, darüber zu sprechen, dass die mobile Entwicklung sehr interessant und schwierig ist und es etwas zu tun gibt. Ich mache dies als Beispiel für die Aufgaben, die ich während meines Praktikums und als Junior Developer gelöst habe.

Ich absolvierte die Fakultät für Informatik an der HSE. Im dritten Jahr des FKN habe ich ein wenig an der iOS-Entwicklung gearbeitet, bin interessiert geworden, es hat mir gefallen. Ich dachte - du kannst irgendwohin gehen, um zu trainieren, ein Praktikum zu machen. Ich habe es geschafft, für ein Praktikum nach Yandex zu kommen, und als ich es beendet habe, bin ich zu den Mitarbeitern gewechselt und arbeite jetzt weiter im Yandex.Chats-Team.





Ein bisschen über Yandex.Chats. Wir kommunizieren über viele Yandex-Dienste. Wenn Sie mit jemandem in Yandex kommunizieren, dann höchstwahrscheinlich über Yandex.Chats. Es gibt zum Beispiel eine Yandex-Anwendung auf Mobilgeräten, in die Chats eingebaut sind. Es gibt Yandex.Rion, wo Sie über Yandex.Chats an jeden Benutzer schreiben können. Auf dem Markt können Sie mit Organisationen chatten, Fragen zu einem Produkt stellen und so weiter. Die Liste geht weiter. Es gibt einen mobilen Yandex.Browser, in dem es Chats gibt, die Sie auf den Maps öffnen können. In Yandex.Connect ist dies so eine Sache für Unternehmen, Chats werden auch als Bündel für Unternehmen geliefert. Es gibt auch Aura, dies ist ein solches soziales Netzwerk, in dem Sie Beiträge streichen und auch über Chatrooms mit Benutzern kommunizieren können.

Wir stellen ein, wenn Sie Lust auf Kommunikation haben, kommen Sie. Wir haben auch Praktika in Sotschi. Wir fahren alle paar Monate auf Geschäftsreise dorthin. Über Chats für jetzt.

Was und warum möchte ich dir sagen? Das erste, was mir während des Studiums am FKN auffiel, war, dass viele Menschen im Allgemeinen und Lehrer im Besonderen eine voreingenommene Einstellung zur mobilen Entwicklung haben. Sie alle denken - was ist dort zu tun? Er drückte den Knopf, alles ist einfach. Und eine besondere Herausforderung war es, ein Diplom für mobile Entwicklung zu machen, denn sie sagten: Nehmen Sie etwas Komplizierteres.

Heute möchte ich zeigen, dass in der Tat alles falsch ist, das ist ein schlechtes Stigma. Es gibt viele interessante und komplexe Dinge in der mobilen Entwicklung. Das zweite - als ich zum Praktikum kam, hatte ich keine Ahnung, welche Aufgaben Mobile Entwickler in Unternehmen haben. Im Gegenteil, die Teams möchten wissen, was Sie tun möchten und ob Sie Erfahrung in der industriellen Entwicklung haben.

Heute werde ich versuchen, Licht in all das zu bringen und Ihnen die spezifischen Aufgaben zu zeigen, die ich gelöst habe, damit Sie eine ungefähre Vorstellung davon haben, was hier passiert und was Sie tun können.

Ich werde Ihnen heute drei Aufgaben zeigen, die ich gelöst habe. Kommen wir gleich zum ersten.

Löcher in der Geschichte


Die Hauptaufgabe von Chats und im Allgemeinen von Boten besteht darin, Nachrichten an jemanden zu senden und Nachrichten von jemandem zu empfangen.



Angenommen, ich kann mit meiner Mutter chatten. Interpunktion des Autors, hier gibt es keine Kommas. Und ich kann ihr ein paar Nachrichten schicken, darauf warten, dass sie sie sieht und alles wird gut. Aber Mutter ist manchmal dort, wo die Verbindung nicht funktioniert: zum Beispiel in der U-Bahn oder im Tunnel.



Und einige Nachrichten werden ihr möglicherweise aus Gründen, die außerhalb unserer Kontrolle liegen, nicht zugestellt. Der Eindruck des Gesprächs ist nicht ganz richtig, sie könnte in Panik geraten. Der mobile Messenger muss mit dieser Situation richtig umgehen.

Um fortzufahren, werde ich Ihnen einige wichtige Informationen zu Nachrichten mitteilen. Erstens hat jede Nachricht eine eindeutige Kennung. In diesem Fall sind dies nur Zahlen in Reihenfolge. Tatsächlich sehen sie ein wenig anders aus, aber das Wichtigste ist, dass sie einzigartig sind und es uns ermöglichen, diese Botschaften zu identifizieren. Es ist direkt in der Nachricht zusammen mit dem Text gespeichert, wir haben es.

Das zweite Element in der Nachricht ist derselbe eindeutige Bezeichner der vorherigen Nachricht. Dort wird es gespeichert, und wenn wir die Identifikatoren kennen, können wir Rückschlüsse darauf ziehen, wie ganzheitlich unsere Geschichte ist.

Jetzt ist die Situation so. Mama hat drei Nachrichten auf ihrem Handy. Sie liest sie alle und versteht nicht, was passiert, sie gerät sehr in Panik.



Chats können diese Situation sofort erkennen. Wir sehen uns diese Bezeichner an und stellen fest, dass es vor der vierten Nachricht eine dritte geben sollte, aber aus irgendeinem Grund haben wir sie nicht und es gibt eine zweite. Wir finden das Ding leicht. Wir schreiben in Großbuchstaben - Nachrichten werden geladen, wir zeichnen eine Art Spinner, und jetzt gehen wir zu unserem Backend und sagen zu ihm: Wir haben die eine oder andere Nachricht verloren, können Sie sie uns bitte geben?



Er gibt es uns schnell und einfach, weil Sie nur eine Nachricht geben müssen. Wir nehmen es, bauen es wieder ein und alles sieht gut aus. Mama versteht die ganze Situation und ist nicht besorgt.



Woran mussten Sie dabei denken? Erstens sind mobile Geräte in der Regel sehr häufig offline, und dies sollte immer beachtet werden. Sie müssen verstehen, dass einige Anforderungen möglicherweise fehlschlagen. Sie müssen es erneut versuchen. Möglicherweise war Ihr Gerät eine Stunde lang offline und Sie müssen sich dann erholen, wenn das Netzwerk angezeigt wird.

Zum anderen müssen Sie in der Lage sein, mit dem Backend zu interagieren. In vielen Anwendungen besteht eine nützliche Fähigkeit darin, Anforderungen zu senden und Antworten zu analysieren. Drittens müssen Sie die grundlegenden Datenstrukturen verstehen. Angenommen, wir können hier verstehen, dass diese Nachrichten verwandt sind, das heißt, sie haben Eigenschaften einer verknüpften Liste. Und diese Eigenschaften, dh diese Verbindung zwischen Nachrichten, können verwendet werden, um die Stabilität unserer Client-Arbeit zu erhöhen. Wir können Löcher auf diese Weise behandeln.

Aktuelle Aufkleber


Fahren wir mit der nächsten Aufgabe fort. Es gibt viele Aufkleber, wo es gibt. Dies ist ein Bild, das Sie senden können und das Sie nicht vorab laden müssen. Nur jemand vor Ihnen, jemand hat es in das Backend hochgeladen und Sie müssen ihm nur seine Kennung senden, und alle anderen Benutzer können es anhand dieser Kennung finden. Recent Stickers ist ein besonderer Ort, um die letzten von Ihnen gesendeten Aufkleber zu erhalten. Sie können Aufkleber verwenden, die Sie mögen, häufig verwenden und es ist sehr bequem, darauf zuzugreifen.



Angenommen, ich möchte einen Stern senden. Ich sende es, es wird dieser erste Platz in meinen letzten Aufklebern.



Alle anderen Aufkleber werden um eins nach rechts verschoben. Und wenn ich alle nachfolgenden Aufkleber sende, werden auch alle vorherigen um eins nach rechts verschoben, der neue wird der erste.

Hier können Sie sofort verstehen, dass dies einer Datenstruktur ähnlich ist, die als "Warteschlange" oder "Warteschlange" oder "First In First Out" bezeichnet wird. Das heißt, das erste Element, das am Anfang ankommt, ist das erste am Ende und fällt aus. Der Vogel, den wir einmal hinzugefügt haben, fällt heraus, wenn wir keinen Platz mehr für diese neuen Aufkleber haben.



Was passiert jedoch, wenn wir einen Aufkleber hinzufügen möchten, der sich bereits in unserer Warteschlange befindet? Nehmen wir an, das ist ein Kätzchen mit einer Münze. Lebensmittelgeschäft verstehen wir, was wir bekommen wollen. Damit die alte Katze an der Stelle verschwand, wo sie ist, und die neue wurde die erste.

Aber da wir alle Entwickler sind, wissen wir, dass Sie auf der einen Seite in eine Warteschlange einfügen und auf der anderen Seite abrufen können, und etwas, das es Ihnen nicht erlaubt, etwas in der Mitte zu ändern, oder es wird sehr ineffizient sein. Was können Sie damit versuchen?

Ich habe eine andere Datenstruktur namens Hash Map eingeführt. Nur für den Fall, ich werde klären. Dies ist grob gesagt eine solche Entsprechungstabelle einiger Mengen zu anderen. In diesem Fall ist der Schlüssel in unserer Tabelle ein Aufkleber oder eine eindeutige Kennung. Und der Wert wird die Anzahl der Einträge in unseren letzten Aufklebern sein.

Hier habe ich sofort angedeutet, dass bis auf den Vogel alle auf einmal reingegangen sind. Warum werden wir das benutzen? Angenommen, wir möchten, dass unsere Daten aus dieser Folge von Aufklebern entfernt werden. Speichern Sie sie beispielsweise in einer Datenbank, damit der Benutzer die Anwendung neu startet und sie in der richtigen Reihenfolge wiederherstellt. Wir werden den Aufkleber auf der anderen Seite wie aus der Warteschlange erhalten, aber wir werden sie nur ausgeben, wenn die Anzahl der Vorkommen dieses Aufklebers gleich eins ist. Wenn es mehr als einen gab, ignorierten wir ihn einfach und warfen ihn weg.



Wie funktioniert es Nehmen wir an, wir fügen ein Kätzchen hinzu. Sie ist an der Reihe. Die Zahl in der Nähe der Katze ist 2 geworden. Das heißt, jetzt sind zwei Katzen an der Reihe.

Angenommen, wir möchten jetzt die gesamte Abfolge von Aufklebern speichern und beginnen, sie abzurufen. Wir schauen uns den Kalender an, den er nur einmal eingegeben hat.



Wir bekommen es ohne Probleme. Als nächstes schauen wir uns das Kätzchen an. Die Katze ist zweimal hereingekommen. In diesem Moment nehmen wir sie nicht mit, sondern werfen sie einfach weg, ignorieren sie und reduzieren die Zahl zwei auf Einheit.



Alle nachfolgenden Aufkleber, die wir einmal hatten, bekommen wir ruhig.



Alles ist in Ordnung, wir haben Erfolg. Die Katze hat sich im Moment auch nur einmal getroffen, damit wir es auch ruhig bekommen und alles in Ordnung ist.



Schauen wir uns diese grünen Häkchen an. Welche Reihenfolge der Aufkleber haben wir bekommen?



Wir werden verstehen, dass wir genau das haben, was wir brauchen, und alles funktioniert so, wie es in der Aufgabe festgelegt wurde.



Was sollten Sie bei dieser Aufgabe beachten? Hier müssen Sie die Datenstrukturen bereits ein wenig kennen - um zu wissen, was eine Warteschlange und eine Hash-Map sind, welche Operationen sie definiert haben und was Sie überhaupt damit machen können. Sie müssen auch die Komplexität bewerten. Im Allgemeinen ist es hilfreich, die Komplexität von Operationen mit grundlegenden Datenstrukturen zu kennen. Dies ermöglicht eine effizientere Konstruktion von Verbundstrukturen oder die Implementierung von Algorithmen. Das dritte, was bei der Arbeit und im Leben sehr wichtig ist, ist, sich an die Aufgabe anzupassen und sich Wissen anzueignen. Angenommen, Sie kennen dieselben Datenstrukturen. Fügen Sie ein einzelnes Bild ein, das genau das Problem löst, das in einem bestimmten Moment vor Ihnen liegt.

Bild in Bild


Fahren wir nun mit der dritten und letzten Aufgabe fort. Dies ist ein Bild in Bild. Ich werde es klarstellen. Es gibt Anrufe und Videoanrufe in Yandex.Chats.



Während eines Anrufs können Sie Ihren Videostream des Gesprächspartners in ein kleines Fenster einklappen und mit dem Messenger auf dem Bildschirm bewegen. Bei einem solchen Multitasking bleibt das Video beim Ziehen an den Ecken des Bildschirms hängen. Um diese Funktionalität zu erreichen, müssen Sie einige Schritte ausführen. Das erste und wichtigste, was Sie tun müssen, ist, diesen großen rechteckigen Videostream klein zu machen und am richtigen Ort für Sie zu sein. Über dies sollte passieren. Hier erinnern wir uns an die grundlegende Geometrie - wir multiplizieren die Seiten des Rechtecks ​​mit einem gewissen Faktor, bewegen seine Mitte und alles ist in Ordnung, hier ist es an der richtigen Stelle.

Die zweite Aufgabe ist schwieriger. Sie müssen es so machen, dass es sich in den Ecken des Bildschirms befindet, und sich an sie halten. Dafür habe ich mich für ein Standardframework namens UIKit Dynamics entschieden.



Dies ermöglicht es Ihnen, visuellen Objekten eine Vielzahl von physikalischen Eigenschaften zu verleihen - Schwerkraft, Trägheit, diese Dinge. Aus diesem Rahmen heraus habe ich eine Entität wie Spring Field angewendet. Frühling bedeutet Frühling. Dies ist ein Feld, das Objekte an einen Punkt in der Aktionszone zieht.



In der Messenger-Oberfläche sieht es so aus. Rote Punkte zeigen die Richtung der Anwendung von Gewalt an. Und wenn ich diese Ansicht von der Mitte ziehe, zieht sie sich zurück.



Der Einfachheit halber habe ich ein solches Rechteck als solches Rechteck bezeichnet. Dies ist eine gelbe Zone mit einem durch einen schwarzen Punkt angezeigten Kraftpunkt.

Kommen wir nun zu unserer Aufgabenstellung zurück. Wir haben den Hauptbildschirm des Benutzers, vier Punkte darauf, und wir möchten, dass unser Videostream von ihnen angezogen wird. Wie habe ich angefangen, es zu lösen? Wir nehmen einfach unser gesamtes Feld und formen es auf dem gesamten Bildschirm. Wir bestimmen vier Anziehungspunkte für ihn, und der Rahmen tut alles für uns.



Es ist mir natürlich nicht gelungen, etwas zu tun, da nur ein Anziehungspunkt für ein Feld festgelegt werden kann und vier Punkte nicht festgelegt werden können.

Ich dachte: Okay, die zweite Stufe. Wir nehmen vier solcher Felder, ordnen sie so an, dass sie den gesamten Bildschirm ausfüllen, und platzieren die Punkte, an denen wir angezogen werden müssen.



Das hat aber auch bei mir nicht geklappt, denn die Werte, die im Feld geändert werden können, sind die Größe und deren Mittelpunkt. Und sie ist nur in der Mitte angezogen. Sehr praktisch, danke, Apple, aber gescheitert.

Wo bin ich hingekommen? Wir nehmen unsere Felder, ordnen sie so an, dass sie den gesamten Bildschirm ausfüllen und sich nicht überschneiden, nicht in Konflikt geraten und ihre Mittelpunkte im rechten Winkel liegen. Felder werden ausgeblendet, aber es stört uns überhaupt nicht, es sieht so aus:



Es gibt visualisierte Felder, und diese Ansicht wird von der Stelle angezogen, an der der Benutzer sie mit dem Finger zieht.





Um dieses Problem zu lösen, mussten die folgenden Dinge bekannt sein. Die erste ist die Grundgeometrie. Im Allgemeinen müssen Sie in der Lage sein, diese Rechtecke zu berechnen, die Frames sozusagen zu verschieben, wenn Sie sich mit einer Art visueller Mobil- oder Front-End-Entwicklung beschäftigen. Dies ist eine nützliche Fähigkeit, die in der Schule erworben werden kann.

Zweitens müssen Sie in der Lage sein, mit Benutzergesten zu arbeiten, damit Sie Gesten lesen können, die der Benutzer beispielsweise durch Streichen ausführt, und damit der Benutzer reibungslos und interessant mit Ihrer Anwendung arbeiten kann. Dies kann auch mit Standardmitteln geschehen, dann zeige ich den Link.

Und drittens wichtig: Sie müssen die System-Frameworks kennen. Es ist nicht notwendig zu wissen, wie man mit ihnen zusammenarbeitet, sondern einfach über ihre Existenz Bescheid zu wissen und was sie Ihnen dabei helfen können. Wenn Sie mit einer Aufgabe konfrontiert sind, können Sie sich daran erinnern: Ja, es gibt ein solches Framework. Ich werde jetzt im Internet nachschlagen, wie man es verwendet und die Aufgabe erledigt. Und wenn Sie nichts davon wissen, denken Sie einfach, dass Sie eine solche Aufgabe nicht einmal übernehmen müssen, weil Sie nicht wissen, was Sie damit tun sollen.



Ich habe Ihnen nur drei Aufgaben gezeigt, aber in der Tat gibt es bereits einige Dinge, über die Sie nachdenken müssen, deren Fachwissen Sie kennen und entwickeln müssen. Es gibt viel mehr Aufgaben, und sie sind alle sehr vielfältig und interessant. Und wenn Sie möchten, dass sich Ihr Produkt weiterentwickelt, müssen Sie es ständig lösen. Ich habe auch ein paar Referenzen versprochen:

- Warteschlange auf zwei Stapeln
- HashTable auf Swift
- Komplexität von Algorithmen mit Beispielen
- Erkennen von Benutzergesten
- Einführung in UIKit Dynamics

Das ist alles für mich, danke.

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


All Articles