Обложка статьи «Введение в мобильную разработку для Android: с каких языков начать изучение?»

Введение в мобильную разработку для Android: с каких языков начать изучение?

Дмитрий Гордин

Дмитрий Гордин, преподаватель курса «Android-разработчик с нуля» в Нетологии, Android developer в RoadAR

Сфера мобильной разработки развивается очень быстро. Смартфоны лидируют на рынке технологических товаров в мире, их доля среди всей бытовой техники и электроники — 44 %. А по данным аналитической компании Gartner в 2018 году потребителями был куплен 1,56 млрд смартфонов.

При этом операционная система Android из года в год остаётся самой популярной. В том же 2018 году более 80 % всех смартфонов в мире были выпущены на Android. А если представить, какое количество устройств существует помимо смартфонов — часы, планшеты, телевизоры, терминалы и даже холодильники, то доля Android будет ещё выше.

Но с учётом такой растущей популярности операционной системы, запросы пользователей также постоянно меняются и увеличиваются. Современному человеку нужно приложение под любую задачу — заплатить за услуги в банке, заказать еду, пообщаться с друзьями или скоротать время в игре. Такие приложения постоянно появляются в Play Store.

Именно поэтому и профессия мобильного разработчика на Android имеет огромный потенциал для развития, вы можете работать в крупнейших компаниях и создавать полезные приложения, которыми будут пользоваться тысячи людей. По данным Superjob, средняя зарплата разработчика на Android — 100 000 рублей, а Headhunter публикует более 500 вакансий разработчиков каждый месяц. Невостребованным специалист точно не останется.

В этой статье мы расскажем, с чего нужно начать изучение мобильной разработки, если вы решили стать Android-разработчиком. Какие языки изучить в первую очередь? На какие этапы стоит разбить обучение? А также ответим на вопрос, нужно ли современному специалисту знать несколько языков программирования одновременно.

С чего начать?

Языков мобильной разработки много, но мы советуем начинать изучение с самого базового и традиционного — Java. Он стабильно является 1-м или 2-м языком по популярности у программистов с 2002 года (согласно индексу языков программирования TIOBE).

Источник: TIOBE

После того, как вы освоите основы программирования на нём, все остальные языки вам будут даваться легко. При этом мы советуем не учить сразу несколько языков. Лучше сначала полностью разобраться с одним, а уже потом переходить к другому.

Почему Java?

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

Какие плюсы Java мы можем сразу же отметить:

  • Код на Java многословный и длинный. С одной стороны это может сразу же отпугнуть, но в этом и есть плюс. В процессе написания кода всё настолько чётко и ясно, что у вас меньше шансов ошибиться или получить неожиданное поведение.
  • У Java немного языковых конструкций, и большинство из них трактуются однозначно.
  • Он имеет обратную совместимость, то есть при выходе новой версии языка ничего не ломается в старом коде, в отличие от более специализированных языков, например Swift’а.
  • Для новичка есть много преимуществ популярности Java. Как минимум то, что у него огромное комьюнити. Это означает, что найти людей, которые разбираются в деталях и могут помочь в изучении, очень легко. Например среди знакомых, по сарафанному радио или просто в группах в соцсетях и каналах в мессенджерах.
  • В доступе также большое количество статей, видео и книг, которые постоянно актуализируются, поэтому найти помощь будет легче, чем с экзотическим языком.

Поэтому Java — тот язык, с которого стоит начать обучение программированию, освоить мобильную разработку и на котором стоит сделать своё первое приложение, а уже затем развиваться дальше и учить другие языки.

Как начать писать код на Java?

Если вы приступаете к изучению Java с нуля, то сразу ответьте себе на вопрос, сколько времени вы готовы уделять практике. Потому что любой язык программирования — это как английский: только на книжках и теории выучить не получится.

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

Важно уделить внимание ООП — объектно-ориентированному программированию. Это парадигма (подход, идея) описания вещей из реального мира в коде с помощью объединения свойств и методов. Например, у каждого автомобиля есть набор характеристик: марка, тип топлива, мощность, год выпуска — это свойства автомобиля. В свою очередь, каждый автомобиль обладает набором функций: он может ехать, тормозить, управлять светом фар и т. д. В ООП также важно, как знание функций и характеристик автомобиля для водителя.

На данном этапе этих базовых знаний вам будет достаточно, чтобы создать своё первое приложение, например простой калькулятор или игру.

Приведём простой пример кода, который обычно разбирают новички в начале обучения. Наша задача — сделать простейший экран с одной карточкой для отображения поста из соцсети. Код на Java будет выглядеть так:

// Файл dto/Post.java
public class Post {
    private long id;
    private String author;
    private String content;
    private boolean likedByMe;

    public Post(long id, String author, String content) {
        this(id, author, content, false);
    }

    public Post(long id, String author, String content, boolean likedByMe) {
        this.id = id;
        this.author = author;
        this.content = content;
        this.likedByMe = likedByMe;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public boolean isLikedByMe() {
        return likedByMe;
    }

    public void setLikedByMe(boolean likedByMe) {
        this.likedByMe = likedByMe;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Post post = (Post) o;
        return id == post.id &&
                likedByMe == post.likedByMe &&
                Objects.equals(author, post.author) &&
                Objects.equals(content, post.content);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, author, content, likedByMe);
    }

    @Override
    public String toString() {
        return "Post{" +
                "id=" + id +
                ", author='" + author + '\'' +
                ", content='" + content + '\'' +
                ", likedByMe=" + likedByMe +
                '}';
    }
}

// Файл activity/MainActivity.java
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Post post = new Post(1, "Vasya", "First Post in our network!");

        final TextView authorTv = findViewById(R.id.authorTv);
        authorTv.setText(post.getAuthor());

        final TextView contentTv = findViewById(R.id.contentTv);
        contentTv.setText(post.getContent());

        final ImageButton likeBtn = findViewById(R.id.likeBtn);
        if (post.isLikedByMe()) {
            likeBtn.setImageResource(R.drawable.ic_favorite_active_24dp);
        }

        likeBtn.setOnClickListener(view -> {
            // Опущено для краткости
        });

        final ImageButton shareBtn = findViewById(R.id.shareBtn);
        shareBtn.setOnClickListener(view -> {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_SEND);
            intent.putExtra(Intent.EXTRA_TEXT, post.getAuthor() + "\n\n" + post.getContent());
            intent.setType("text/plain");
            startActivity(intent);
        });

    }

}

Отметим, что если вы уже знаете основы программирования, то за 2 недели можно начать писать на Java. А учитывая, что язык заставляет явно и однозначно прописывать каждое своё намерение, изучение проходит гладко. Если вы приступаете к изучению Java с нулевого уровня, лучше закладывать хотя бы 2 месяца на основы и практику.

Теперь затронем вопрос выбора наиболее удобного способа изучения Java. Предлагаем несколько вариантов. Первый: получение специальности программиста в университете. С одной стороны, это позволит узнать не только Java, но и другие языки и виды разработки, вы получите фундаментальные знания программирования. Но обучение в вузе — слишком долгий и сложный путь для тех, кто хочет начать разрабатывать на Android быстро.

Второй вариант: изучение основ самостоятельно по книгам, видео и статьям. Как мы писали выше, в сети множество актуальных материалов по мобильной разработке и в частности по Java. Такой путь обучения подойдёт тем, у кого много терпения и усидчивости. Всё придется выучить и понять самому. А если ваш уровень знаний — нулевой, то даже базовые понятия и конструкции могут показаться сперва слишком сложными и непонятными. К тому же теория без практики не сможет дать полной картины.

Есть третий способ: получение нужных знаний и навыков на дополнительных курсах, например онлайн. Сейчас курсы по Java предлагают разные школы, а вы сможете выбрать сложность и длительность программы под себя. Плюс такого подхода в том, что вы будете учиться вместе с ментором. Он проверяет домашние задания и показывает, какие пробелы в знаниях вам ещё нужно закрыть. Стандартная продолжительность подобной программы около 4–5 месяцев.

Но на знании Java останавливаться не стоит. После того, как вы закрепили основы, написали своё первое приложение, а лучше и не одно, мы советуем изучить ещё один язык, который сегодня набирает всё большую популярность и получает признание от крупных игроков рынка.

Следующий этап — Kotlin

Kotlin максимально совместим с Java, и поэтому процесс его изучения будет для вас гораздо проще и быстрее.

Язык Kotlin считается молодым. Хотя он и существует с 2011 года, только в мае 2019 года Google объявила его приоритетным языком программирования для платформы Android. А учитывая, что именно Google занимается разработкой Android, после этого события популярность Kotlin среди разработчиков стремительно растёт. Следуя тенденциям, многие работодатели также начинают требовать знания Kotlin.

Помимо признания компанией Google, популярность Kotlin в мобильной разработке обусловлена удобством в использовании.

  • Язык обладает полной совместимостью с Java. В принципе, можно даже половину проекта написать на одном языке, а потом перейти на другой. Из-за перехода не теряется доступ к существующему коду, библиотекам и Android SDK.
  • Код на Kotlin гораздо короче и выразительнее, чем на Java. Всё, что можно написать на Java в 4–5 строчек, уместится в одну на Kotlin. Иногда разработчикам хочется ускориться и не быть такими многословными, как с Java.
  • Даже несмотря на то, что новые версии Java постоянно выходят, это не затрагивает мир Android-разработки, где всё застряло на уровне Java 6. И хотя существуют обходные пути для использования новых фич, в Kotlin новые фичи появляются чаще и не требуют от разработчика танцев с бубном.
  • Kotlin является детищем компании JetBrains, создателями Intellij Idea — IDE, лежащей в основе Android Studio. Благодаря этому Kotlin имеет отличную поддержку со стороны IDE: умные подсказки, рефакторинг кода, навигация по файлам и т. д.

Изучить Kotlin просто

Kotlin можно назвать «сладкой» добавкой к Java, они действительно во многом похожи. Поэтому, тем, кто уже знаком с самим базовым языком, на изучение Kotlin понадобится максимум 1–2 недели. При этом не нужно сразу же использовать все фичи языка, можно начать писать в «Java-стиле» и, постепенно изучая новое, внедрять это в свой код.

Итак, для начала сами разработчики языка JetBrains советуют обратиться к официальным ресурсам о Kotlin. На них есть библиотеки материалов для начинающих, а также подробные описания истории языка и специфики конструкций. Единственная сложность — ресурс на английском, так что придётся подтянуть ещё и его. Но так как это технический язык и многие термины в принципе не имеют перевода на русский, проблем с этим возникнуть не должно.

Также предлагаем почитать гайд от Google, подробно описывающий, как перевести уже написанное на Java приложение на Kotlin. Статья рассказывает о том, как конвертировать файлы с расширением .java в расширение .kt, а также предлагает сравнение фрагментов кода на Java и Kotlin при работе с Android SDK.

Опишем на Kotlin тот же пример, который брали на Java. Просто сравните:

// Файл dto/Post.kt
data class Post(
    val id: Long,
    val author: String,
    val content: String,
    val likedByMe: Boolean = false
)


// Файл activity/MainActivity.kt
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Данные должны приходить по сети, но мы упростили пример
        val post = Post(1, "Netology", "First post in our network!")
        // Никаких findViewById за счёт Kotlin Android Extensions
        authorTv.text = post.author
        contentTv.text = post.content

        if (post.likedByMe) {
            likeBtn.setImageResource(R.drawable.ic_favorite_active_24dp)
        }

        // lambda
        likeBtn.setOnClickListener {
            // Опущено для краткости
        }

        shareBtn.setOnClickListener {
            val intent = Intent().apply {
                // lambda with receiver
                action = Intent.ACTION_SEND
                putExtra(Intent.EXTRA_TEXT, """
                    ${post.author}

                    ${post.content}
                """.trimIndent())
                type = "text/plain"
            }
            startActivity(intent)
        }
    }
} 

Отметим, что если вы знаете основы Java и уже пишите на нём приложения, пусть и самые простые, вам не нужно проходить тот же путь для изучения Kotlin. Вы знаете общепринятые конструкции, переменные и типы данных. Можно начать писать код, очень похожий на Java, а затем в процессе изучения Kotlin добавлять всё больше фишек из него.

Итого, мы предлагаем понятный и универсальный способ входа в сферу мобильной Android-разработки. Первым этапом становится изучение Java с его длинными, но традиционными и понятными синтаксическими конструкциями. А после их освоения можно приступать к «сахарному» Kotlin. Такой порядок будет для вас комфортным.

Знание двух самых популярных языков мобильной разработки — Java и Kotlin — даст вам преимущество среди других Android-разработчиков. Как уже было сказано, всё больше работодателей ищут разработчиков со знанием Kotlin, а так как знание Kotlin невозможно без Java, вы будете только в плюсе. В любом случае, вам стоит научиться писать мобильные приложения на разных языках, чтобы в конечном счёте выбрать тот, который понравится вам и вашей будущей команде.

Не смешно? А здесь смешно: @ithumor