iTechArt logo

Мобильная разработка: что важно усвоить новичку

Development & QA Company News

iTechArt является постоянным партнером многих профориентирующих и обучающих событий. Среди них – бесплатная конференция для начинающих айтишников OPEN IT, которая проходит по всей Беларуси, а в сентябре состоялась в Минске. 

Сразу несколько наших спикеров поделились накопленным опытом с теми, кто делает первые робкие шаги в IT или только задумывается о технологической карьере. Никита Пацкевич, iOS Lead iTechArt на мероприятии представил обзор языков мобильной разработки и навыки, необходимые новичкам-мобильщикам. Подготовили текстовую версию его выступления.
 

Пацкевич Никита-1 (1).jpg

Никита Пацкевич

iOS Lead iTechArt

Акцентирует внимание на том, что, изучив один или несколько языков мобильной разработки, можно не ограничиваться разработкой приложений для смартфонов.

Сравнение технологий мобильной разработки

Итак, ты решил стать мобильным разработчиком. Первое, с чем ты столкнешься  изобилие платформ и фреймворков. Как выбрать, на чем остановиться? Попробуем решить с помощью овервью, и начнем с понятий «нативная разработка» и «кросс-платформенная разработка».

«Нативная» означает, что разработка будет идти на языке, разработанном специально для конкретной платформы. В эту категорию мы относим iOS и Android. При кросс-платформенной разработке (React Native и Flutter) имеется возможность разрабатывать приложение сразу на несколько платформ. 

Здесь стоит упомянуть еще и понятие «гибридное приложение». Раньше под этим словосочетанием обозначали веб-приложение, обернутое в нативное, т.е.то, которое распространялось как приложение для платформы. Сейчас это понятие несколько изменилось. В то время как при кросс-платформенной разработке вся бизнес-логика и весь UI реализуется с помощью кросс-платформенного фреймворка и взаимодействия через обертки с hardware-частью (камера, push-нотификации и др), гибридные приложения частично написаны на кросс-платформенном решении и частично  на нативном языке, нативная часть в них взаимодействует непосредственно с hardware-частью. 

Примеры гибридных приложений всем широко известны: Instagram, Twitter, Uber, Netflix, Gmail и даже AppStore.

Для iOS-разработки применяются 2 языка – Objective-C (более старый) и Swift (поновее). На Swift можно разрабатывать всю инфраструктуру Apple – iOS, MacOS, tvOS, WatchOS и iPadOS. 

Для Android используются языки Kotlin и Java, для React – JavaScript и TypeScript. Для Flutter рабочий язык – Dart.

JavaScript и TypeScript позволяют разрабатывать решения как под мобильные, так и под ТВ-платформы, аналогично Dart. Эти языки поддерживаются компаниями Apple, JetBrains, Facebook и Google. Они же поддерживают комьюнити разработчиков.  

С точки зрения порога вхождения и наличия информации, необходимой для обучения, эти технологии находятся примерно на одном уровне. 

Упомянутые языки имеют ряд схожих параметров и принципиальных различий. 

Сходство между языками и подходами:

  • Все актуальные языки open source, т.е. поддерживаются не только компаниями, но и комьюнити разработчиков. 
  • Эта группа языков имеет схожий синтаксис и набор функций, т.е., изучив один язык, можно достаточно быстро  освоить другой. 
  • Все упомянутые языки дают возможность разрабатывать под другие платформы
  • Современные фреймворки  SwiftUI, Android Jetpack Compose, React Native и Flutter  используют декларативный подход к построению UI, соответственно, вам будет достаточно легко менять платформы.
  • Flutter и React Native взаимодействуют с нативными библиотеками через обертки для вызова методов и отображения различных экранов.

Основные различия языков мобильной разработки

  • В первую очередь точка различия  это среда, синхронная и асинхронная. В синхронной среде все функции приложения выполняются последовательно, при асинхронной  параллельно. 
  • UI для нативных платформ, естественно, нативный. React Native использует нативные компоненты, у Flutter же свой набор компонентов, поэтому, чтобы в нем приложение выглядело как нативное, требуются некоторые дополнительные изменения.
  • В Swift и Kotlin многие фреймворки произведены непосредственно под платформу, для React Native и Flutter тоже много фреймворков, но большинство из них разрабатываются сторонними разработчиками. 
  • У нативных языков самая высокая производительность, у React Native производительность по сравнению с другими решениями более низкая ввиду довольно сложного устройства (обертки под нативными классами). Dart и Flutter в большинстве своем не зависят от нативной части, соответственно, у них производительность, близкая к нативной. 
  • У нативных языков нет зависимости от нативной части. Т.е. если вышло обновление системы, предполагается, что все изменения подсвечиваются ворнингами, и мы можем все оперативно исправить. У React Native большая зависимость от нативной части, т.к. это сложный фреймворк, т.е. понадобится время для адаптации новых фичей. Flutter полностью самостоятельно реализует свой функционал.

Изучив один или несколько языков мобильной разработки, ты не ограничишь себя разработкой приложений для смартфонов.

На Swift, например, можно разрабатывать серверную часть (с помощью фреймворков Vapor и Kitura), а также решения для Windows, Linux, вскоре и для Android.

На Kotlin  опять же серверную часть (есть фреймворк Ktor), Kotlin Multiplatform (iOS), Windows, Linux.

На JavaScript построена половина интернета: это и веб-разработка, и серверная разработка (node.js). Сейчас набирает популярность serverless разработка (node.js)  когда часть функционала приложения реализуется с помощью cloud-платформы; Windows, Linux, MacOS.

Dart, хоть и появился относительно недавно в сравнении с другими языками, предоставляет возможность разрабатывать веб-приложения, серверную часть, решения для Windows, Linux, MacOS.

Где можно обучиться на мобильного разработчика

Существует несколько способов получить специализированные знание. Основные из них:

  • Очные курсы. Их предоставляют различные образовательные компании и площадки, например, IT Academy.
  • Стажировки. Такую опцию предлагают различные компании и iTechArt в частности. Но важно помнить о том, что стажировки, как правило, предполагают наличие некоторого уровня знаний по технологиям и английский язык. 
  • Полностью самостоятельно изучение с поиском информации на специализированных площадках. Вероятно, самый долгий и непонятный способ, который, тем не менее, позволяет получить очень много важного контекста. 

Какие навыки важны мобильному разработчику и как их развивать 

  • Общая база знаний computer science: не только структуры и алгоритмы, но и работа операционной системы, работа памяти и т.п. Для этого, на мой взгляд есть пара хороших образовательных платформ  udemy.com и coursera.org.
  • Навыки алгоритмизации. Есть несколько платформ, которые позволяют приучать себя к решению задач  codewars.com, exercism.org, hackerrank.com, codecademy.com. Кстати, некоторые компании используют такие платформы для найма.
  • Английский. Стоит уделить особое внимание курсам и приложениям, позволяющим общаться с native speakers.
  • Командная коммуникация. Никто не ждет, что вы всегда будете улыбаться  здесь речь, скорее, про создание атмосферы, которая в команде зависит от каждого. Приобрести эти навыки моментально нельзя, но, на мой взгляд,  помогают настольные игры и всякие ивенты, где можно пообщаться с людьми. 

Полезные ресурсы: 

Swift
https://swift.org
https://developer.apple.com
https://www.hackingwithswift.com

Kotlin
https://kotlinlang.org
https://developer.android.com/kotlin

React Native
https://reactnative.dev 

Flutter
https://flutter.dev