Apakah pengembangan seluler mudah dan membosankan? Laporan Yandex


Ada mitos bahwa membuat aplikasi untuk iOS atau Android lebih mudah daripada menjadi, katakanlah, pengembang backend. Tentu saja, ini tidak benar: ada kesulitan dalam bekerja dengan platform apa pun, di mana-mana muncul masalah yang tidak jelas yang membutuhkan keterampilan di bidang subjek dan di luarnya. Roman Abuzyarov dari tim Yandex.Chats menyiapkan laporan tentang beberapa tugasnya, yang menunjukkan seberapa luas pengetahuan seorang spesialis iOS. Laporan ini ditujukan untuk pengembang pemula dan junior.

- Halo semuanya, nama saya Roma, saya adalah pengembang iOS di Yandex.Chats. Hari ini saya akan mencoba berbicara tentang fakta bahwa pengembangan seluler sangat menarik dan sulit, dan ada sesuatu yang harus dilakukan. Saya akan melakukan ini sebagai contoh tugas yang saya selesaikan selama magang dan ketika saya masih seorang pengembang junior.

Saya lulus dari Fakultas Ilmu Komputer di HSE. Pada tahun ketiga FKN, saya bekerja sedikit dalam pengembangan iOS, menjadi tertarik, saya menyukainya. Saya pikir - Anda bisa pergi ke suatu tempat untuk berolahraga, magang. Saya berhasil sampai ke Yandex untuk magang, dan ketika saya selesai, saya pindah ke staf dan sekarang saya terus bekerja di tim Yandex.Chats.





Sedikit tentang Yandex.Chats. Kami berkomunikasi pada banyak layanan Yandex. Jika Anda berkomunikasi dengan seseorang di Yandex, maka kemungkinan besar melalui Yandex.Chats. Ada, katakanlah, aplikasi Yandex di perangkat seluler, obrolan dibuat di sana. Ada Yandex.Rion, di mana Anda dapat menulis ke pengguna mana pun melalui Yandex.Chats. Di Pasar, Anda dapat mengobrol dengan organisasi, menanyakan sesuatu tentang produk dan semua itu. Daftarnya berlanjut. Ada Yandex.Browser seluler, di mana ada obrolan, Anda dapat membukanya di Maps. Di Yandex.Connect, ini adalah hal untuk bisnis, chatting juga dikirimkan sebagai bundel untuk bisnis. Ada juga Aura, ini adalah jejaring sosial tempat Anda dapat menggesek pos dan juga berkomunikasi dengan pengguna melalui ruang obrolan.

Kami merekrut, jika Anda memiliki keinginan untuk terlibat dalam komunikasi, datanglah. Kami juga memiliki magang di Sochi. Kami pergi ke sana untuk perjalanan bisnis setiap beberapa bulan. Tentang Obrolan untuk saat ini.

Apa dan mengapa saya ingin memberi tahu Anda? Hal pertama yang saya perhatikan ketika belajar di FKN adalah bahwa banyak orang pada umumnya dan guru khususnya memiliki sikap bias terhadap pengembangan ponsel. Mereka semua berpikir - apa yang harus dilakukan di sana? Dia menekan tombol, semuanya sederhana. Dan tantangan khusus adalah mengambil diploma pengembangan ponsel, karena mereka akan memberi tahu Anda: ambil sesuatu yang lebih rumit.

Hari ini saya ingin menunjukkan bahwa sebenarnya semuanya salah, ini adalah stigma buruk. Ada banyak hal menarik dan kompleks dalam pengembangan ponsel. Yang kedua - ketika saya datang ke magang, saya tidak tahu tugas apa yang dilakukan pengembang seluler di perusahaan. Dan tim, sebaliknya, ingin tahu apa yang ingin Anda lakukan dan apakah Anda memiliki pengalaman dalam pengembangan industri.

Hari ini saya akan mencoba menjelaskan semua ini, menunjukkan kepada Anda tugas-tugas khusus yang saya selesaikan sehingga Anda memiliki perkiraan tentang apa yang terjadi di sini dan apa yang dapat Anda lakukan.

Saya akan menunjukkan kepada Anda hari ini tiga tugas yang saya selesaikan. Mari kita langsung ke yang pertama.

Lubang-lubang dalam Sejarah


Tugas utama Obrolan dan, secara umum, pengirim pesan adalah mengirim pesan ke seseorang dan menerima pesan dari seseorang.



Misalkan saya bisa menggunakan obrolan untuk mengobrol dengan ibu saya. Tanda baca penulis, tidak ada koma di sini khusus. Dan saya bisa mengiriminya beberapa pesan, menunggu dia melihatnya dan semuanya akan baik-baik saja. Tetapi ibu kadang-kadang cenderung berada di tempat yang tidak bisa dijangkau oleh koneksi: misalnya, di kereta bawah tanah atau terowongan.



Dan beberapa pesan mungkin tidak dikirimkan kepadanya karena alasan di luar kendali kami. Kesan percakapannya kurang tepat, dia mungkin mulai panik. Utusan seluler harus menangani situasi ini dengan benar.

Untuk melanjutkan, saya akan memberi tahu Anda beberapa informasi penting tentang pesan. Pertama, setiap pesan memiliki pengidentifikasi unik. Dalam hal ini, ini hanya angka secara berurutan. Bahkan, mereka terlihat sedikit berbeda, tetapi intinya adalah unik dan memungkinkan kita mengidentifikasi pesan-pesan ini. Itu disimpan tepat di dalam pesan bersama dengan teks, kami memilikinya.

Hal kedua dalam pesan adalah pengidentifikasi unik yang sama dari pesan sebelumnya. Itu disimpan di sana dan, mengetahui pengenal, kita dapat menarik kesimpulan tentang seberapa holistik sejarah kita.

Sekarang situasinya adalah ini. Ibu memiliki tiga pesan di teleponnya. Dia membaca semuanya dan tidak mengerti apa yang sedang terjadi, dia sangat panik.



Obrolan dapat segera mendeteksi situasi ini. Kami melihat pengidentifikasi ini dan melihat bahwa sebelum pesan keempat harus ada yang ketiga, tetapi untuk beberapa alasan kami tidak memilikinya, dan ada yang kedua. Kami menemukan hal ini dengan mudah. Kami menulis dengan huruf besar - pesan dimuat, kami menggambar semacam pemintal, dan saat ini kami pergi ke backend kami dan berkata kepadanya: kami memiliki pesan ini dan itu hilang di antara keduanya, dapatkah Anda memberikannya kepada kami?



Dia memberikannya kepada kami dengan cepat dan mudah, karena Anda hanya perlu memberikan satu pesan. Kami mengambilnya, membangunnya kembali dan semuanya terlihat baik-baik saja. Ibu mengerti situasi penuh dan tidak khawatir.



Apa yang harus Anda pikirkan ketika melakukan ini? Yang pertama adalah bahwa perangkat seluler cenderung sering offline, dan ini harus selalu diingat. Anda perlu memahami bahwa beberapa permintaan mungkin gagal, Anda perlu mencoba lagi. Mungkin perangkat Anda sedang offline selama satu jam dan kemudian Anda perlu memulihkan ketika jaringan muncul.

Yang kedua - Anda harus dapat berinteraksi dengan backend. Dalam banyak aplikasi, keterampilan yang berguna adalah mengirim permintaan dan mengurai respons. Ketiga, Anda perlu memahami struktur data dasar. Misalkan di sini kita dapat memahami bahwa pesan-pesan ini terkait, yaitu, mereka memiliki properti dari daftar yang ditautkan. Dan sifat-sifat ini, yaitu, hubungan antara pesan-pesan ini dapat digunakan untuk membuat klien kami bekerja lebih stabil. Kita bisa memperlakukan lubang dengan cara ini.

Stiker Terbaru


Mari kita beralih ke tugas selanjutnya. Ada banyak stiker di mana ada. Ini adalah gambar yang dapat Anda kirim dan Anda tidak perlu memuatnya terlebih dahulu. Hanya seseorang sebelum Anda, seseorang mengunggahnya ke backend dan Anda hanya perlu mengirimkan pengenalnya, dan semua pengguna lain akan dapat menemukannya dengan pengenal ini. Stiker Terkini adalah tempat khusus untuk mendapatkan stiker terakhir yang Anda kirim. Anda dapat menggunakan stiker yang Anda sukai, sering menggunakannya dan sangat mudah untuk mengaksesnya.



Misalkan saya ingin mengirim bintang. Saya kirim, itu menjadi tempat pertama ini di stiker saya baru-baru ini.



Semua stiker lainnya bergeser ke kanan. Dan ketika saya mengirim semua stiker berikutnya, semua yang sebelumnya juga bergeser ke kanan, yang baru menjadi yang pertama.

Di sini Anda dapat segera memahami bahwa ini mirip dengan struktur data yang disebut "antrian" atau antrian atau First In First Out. Artinya, elemen pertama yang sampai di sana di awal, itu adalah yang pertama di akhir dan akan putus. Burung yang pernah kita tambahkan akan jatuh ketika kita kehabisan ruang untuk stiker baru-baru ini.



Namun, apa yang akan terjadi ketika kita ingin menambahkan stiker yang sudah ada dalam antrian kita? Katakanlah ini adalah kucing dengan koin. Bahan makanan kita mengerti apa yang ingin kita dapatkan. Sehingga kucing tua itu menghilang di tempat dia berada, dan yang baru menjadi yang pertama.

Tetapi karena kita semua adalah pengembang, kami memahami bahwa Anda dapat memasukkan ke dalam antrian di satu sisi, mendapatkannya di sisi lain, dan sesuatu tidak memungkinkan Anda untuk mengubah sesuatu di tengah, atau itu akan sangat tidak efisien. Apa yang bisa Anda coba lakukan dengan ini?

Saya memperkenalkan struktur data lain yang disebut Peta Hash. Untuk jaga-jaga, saya akan mengklarifikasi. Ini adalah tabel korespondensi beberapa jumlah dengan yang lain, secara kasar. Dalam hal ini, kunci di meja kami akan menjadi stiker atau pengenal uniknya. Dan nilainya akan menjadi jumlah entri di stiker terbaru kami.

Di sini saya segera menunjukkan bahwa mereka semua masuk sekali, kecuali burung itu. Mengapa kita menggunakan ini? Misalkan kita menginginkan data kita, tarik urutan stiker ini - katakan, simpan ke database sehingga pengguna kemudian me-restart aplikasi dan mereka memulihkannya dalam urutan yang benar. Kami akan mendapatkan stiker di sisi lain, seperti dari antrian, tetapi kami akan mengeluarkannya hanya jika jumlah kemunculan stiker ini sama dengan satu. Jika ada lebih dari satu, kita abaikan saja dan buanglah.



Bagaimana cara kerjanya? Katakanlah kita menambahkan kucing. Dia mendapat giliran kita. Jumlah di dekat kucing telah menjadi 2. Artinya, sekarang ada dua kucing di giliran kami.

Misalkan sekarang kita ingin menyimpan seluruh urutan stiker, kita mulai mendapatkannya. Kami melihat kalender, ia masuk hanya sekali.



Kami mendapatkannya tanpa masalah. Selanjutnya kita lihat anak kucing itu. Kucing itu masuk dua kali, jadi pada saat ini kami tidak membawanya, kami hanya membuangnya, mengabaikannya, dan mengurangi nomor dua menjadi satu.



Semua stiker berikutnya yang pernah kami miliki, kami dengan tenang mendapatkannya.



Semuanya beres, kami berhasil. Kucing saat ini juga hanya bertemu sekali, jadi kami juga mendapatkannya dengan tenang dan semuanya teratur.



Mari kita lihat tanda centang hijau ini. Urutan stiker apa yang kami dapatkan?



Kami akan mengerti bahwa kami mendapatkan apa yang kami butuhkan, dan semuanya berjalan sesuai dengan yang ditetapkan dalam tugas.



Apa yang harus Anda pikirkan dalam tugas ini? Di sini Anda sudah perlu mengetahui struktur data sedikit lebih banyak - untuk mengetahui apa itu antrian dan Peta Hash, operasi apa yang telah mereka tetapkan dan apa yang dapat Anda lakukan dengan mereka sama sekali. Anda juga perlu mengevaluasi kerumitannya. Secara umum, berguna untuk mengetahui kompleksitas operasi pada struktur data dasar, ini akan memungkinkan pembangunan struktur komposit yang lebih efisien atau implementasi algoritma. Hal ketiga yang sangat penting untuk dilakukan dalam pekerjaan dan dalam hidup adalah untuk beradaptasi dengan tugas, mengambil pengetahuan yang Anda miliki. Misalkan pengetahuan tentang struktur data yang sama. Letakkan dalam satu gambar, yang akan memecahkan masalah yang ada di depan Anda pada saat tertentu.

Gambar dalam Gambar


Sekarang mari kita beralih ke tugas ketiga dan terakhir. Ini adalah gambar dalam gambar. Saya akan mengklarifikasi. Ada panggilan dan panggilan video di Yandex.Chats.



Saat panggilan berlangsung, Anda dapat menciutkan aliran video lawan bicara Anda ke jendela kecil dan memindahkannya di sekitar layar, saat menggunakan messenger. Multitasking semacam itu ternyata, video menempel ke sudut layar ketika Anda menyeretnya. Untuk mencapai fungsi ini, Anda perlu melakukan beberapa langkah. Hal pertama dan utama yang perlu Anda lakukan adalah membuat aliran video persegi panjang ini kecil dan berada di tempat yang tepat untuk Anda. Tentang ini harus terjadi. Di sini kita mengingat geometri dasar - kita mengalikan sisi-sisi persegi panjang dengan beberapa faktor, memindahkan bagian tengahnya dan semuanya baik-baik saja, ini dia di tempat yang tepat.

Tugas kedua lebih rumit. Anda harus membuatnya sehingga terletak di sudut layar dan menempel padanya. Untuk ini, saya memutuskan untuk menggunakan kerangka kerja standar yang disebut UIKit Dynamics.



Ini adalah hal yang memungkinkan Anda memberi objek visual berbagai sifat fisik - gravitasi, kelembaman, hal-hal ini. Dari kerangka inilah saya menerapkan entitas seperti Spring Field. Musim semi berarti musim semi. Ini adalah bidang yang menarik objek ke titik di zona aksinya.



Di antarmuka messenger, terlihat seperti ini. Titik merah menunjukkan arah penggunaan kekuatan. Dan jika saya menarik pandangan ini dari tengah, itu menarik kembali.



Untuk kesederhanaan, saya telah menetapkan persegi panjang seperti persegi panjang tersebut. Ini adalah zona kuning dengan titik kekuatan yang ditunjukkan oleh titik hitam.

Sekarang, mari kita kembali ke bagaimana tugas kita diatur. Kami memiliki layar utama pengguna, empat poin di atasnya, dan kami ingin aliran video kami tertarik kepada mereka. Bagaimana saya mulai menyelesaikannya? Kami hanya mengambil seluruh bidang kami, memahatnya di seluruh layar. Kami menunjuk empat titik daya tarik untuknya, dan kerangka kerja melakukan segalanya untuk kami.



Jadi, tentu saja, saya tidak berhasil melakukan apa pun, karena hanya satu titik tarik yang dapat ditetapkan untuk satu bidang, empat poin tidak dapat ditetapkan.

Saya berpikir: oke, tahap kedua. Kami mengambil empat bidang seperti itu, mengaturnya sehingga memenuhi seluruh layar, dan menempatkan titik-titik di mana kita perlu tertarik.



Tetapi ini juga tidak berhasil bagi saya, karena nilai-nilai yang dapat diubah di lapangan adalah ukuran dan titik pusatnya. Dan dia tertarik hanya di tengah. Sangat mudah, terima kasih, Apple, tetapi gagal.

Kemana saya datang? Kami mengambil bidang kami, mengaturnya sehingga memenuhi seluruh layar dan tidak berpotongan, tidak bertentangan, dan titik tengahnya berada di sudut kanan. Fields keluar dari layar, tetapi sama sekali tidak mengganggu kita sama sekali, sepertinya ini:



Ada bidang yang divisualisasikan, dan tampilan ini tertarik ke tempat pengguna menyeretnya dengan jarinya.





Untuk mengatasi masalah ini, perlu mengetahui hal-hal berikut. Yang pertama adalah geometri dasar. Secara umum, ketika Anda terlibat dalam beberapa jenis visual mobile atau pengembangan front-end, Anda harus dapat menghitung persegi panjang ini, memindahkan frame, sehingga untuk berbicara. Ini adalah keterampilan yang berguna, dapat diperoleh di sekolah.

Kedua, Anda harus dapat bekerja dengan gerakan pengguna sehingga Anda dapat membaca gerakan yang dibuat pengguna, misalnya, gesek, dan agar pengguna dapat bekerja dengan aplikasi Anda lancar dan menarik. Ini juga bisa dilakukan dengan cara standar, maka saya akan menunjukkan tautannya.

Dan ketiga, penting: Anda perlu tahu kerangka kerja sistem. Tidak perlu tahu cara bekerja dengan mereka, tetapi hanya untuk mengetahui tentang keberadaan mereka dan apa yang dapat mereka bantu untuk Anda capai. Karena ketika Anda diatur dengan beberapa tugas - lakukan ini, Anda dapat mengingat: ya, ada kerangka kerja seperti itu, saya sekarang akan mencari di internet bagaimana menggunakannya dan melakukan tugas itu. Dan jika Anda tidak mengetahuinya, Anda hanya akan berpikir bahwa Anda seharusnya tidak mengambil tugas seperti itu, karena Anda tidak tahu apa yang harus dilakukan dengan itu.



Saya menunjukkan kepada Anda hanya tiga tugas, tetapi sebenarnya sudah ada beberapa hal yang perlu Anda pikirkan, keahlian yang perlu Anda ketahui, kembangkan. Ada banyak tugas lagi, dan semuanya sangat beragam dan menarik. Dan jika Anda ingin produk Anda berkembang, Anda harus terus menyelesaikannya. Saya juga menjanjikan beberapa referensi:

- Antrian di dua tumpukan
- HashTable di Swift
- Kompleksitas algoritma dengan contoh-contoh
- Pengakuan gerakan pengguna
- Pengantar Dinamika UIKit

Itu saja untuk saya, terima kasih.

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


All Articles