Изучение новых навыков и улучшение существующих - это краеугольный камень карьеры разработчика.

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

В начале этого года я так и поступил. Ранее в этом году я написал статью о том, какие языки, по моему мнению, являются лучшими для изучения в 2021 году. С их помощью я почувствовал, что существует хорошее сочетание для разработчиков любого уровня и области интересов. Однако это были не те языки, которые мне нужно было учить. Уже работая с Python, Typescript, C # и BASH, я думал о том, что я могу сделать, чтобы улучшить свои навыки в других областях. После долгих размышлений я придумал несколько навыков программирования, которые, как мне кажется, стоит изучить в 2021 году.

1. Функциональное программирование

Это большой вопрос. Функциональное программирование - это парадигма программирования, которая вращается вокруг идеи перемещения данных, ну, в общем, функционально! Вместо того, чтобы создавать объекты и вызывать методы для этих объектов, ваши данные можно рассматривать как поток, перемещающийся от функции к функции. Это требует другого образа мыслей о ваших программах. Это намного проще показать, чем объяснить.

Давайте посмотрим на этот Java-код. Это должно быть хорошо знакомо любому, кто работал с языком ООП.

String words= "Here,are,some,words";
words = words.replace(",", " ");
words = words.trim();
words = words.toUpperCase();

Здесь мы заменяем запятые на пробелы, убираем пробелы в конце, а затем устанавливаем все в верхнем регистре.

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

words = "Here,are,some,words"
	|> String.replace(",", " ")
	|> String.trim
	|> String.upcase

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

Тем, кто хочет начать заниматься функциональным программированием, есть из чего выбрать! Если вы используете JVM, у вас есть выбор из Scala или Clojure. Scala может быть проще, поскольку он поддерживает парадигмы ООП и функционального программирования. Для тех, кто работает с .NET, F # - фантастический язык. Также существует версия Clojure, которая также работает на платформе .NET. Лично я предпочитаю Elixir, так как его синтаксис аналогичен синтаксису Ruby, но дает вам возможности BEAM, виртуальной машины Erlang.

Дополнительную информацию об Elixir можно найти на сайте https://elixir-lang.org/.

2. Swift, Kotlin и мобильная разработка

Некоторым это может показаться странным. Однако я считаю, что Swift не ограничивается написанием приложений для iOS. В 2015 году Swift был опубликован под лицензией Apache 2.0, что сделало его открытым. На данный момент он может работать на Mac и Linux и может работать в Windows с помощью Docker.

Учитывая это, Swift теперь можно использовать для создания не только приложений для iPhone. С его помощью вы можете создавать API-интерфейсы, приложения для командной строки и даже выполнять машинное обучение. К сожалению, iOS по-прежнему доступна только для Mac, но это только начало.

Прелесть в том, насколько легко на этом языке писать и использовать. Он определенно вдохновлен Си, но ощущается как современный язык. Он далеко не такой громоздкий или многословный, как Java. Тот же аргумент можно привести в отношении Kotlin, который, по сути, стремится исправить проблемы Java, будучи современным языком. Kotlin разработан JetBrains, поэтому вы знаете, что на их платформе IntelliJ к нему относятся как к первоклассному гражданину. Kotlin можно использовать для создания приложений для Android, которые отлично подходят для создания веб-приложений с использованием инфраструктуры Spring. Его можно использовать вместе с Java в существующих проектах, поэтому добавить его очень просто. Оба этих языка почти во всех отношениях обогнали своих предшественников.

Так почему эти навыки важны? Во-первых, мобильная разработка никуда не денется. На самом деле, я считаю, что его потребность будет продолжать расти из-за постоянно растущего числа систем, которые теперь могут взаимодействовать с телефонами. Теперь приложения позволяют вам управлять своей машиной, домом, позволяют совершать платежи и многое другое. Помимо этого, оба этих языка теперь можно использовать для создания большего количества приложений. По сути, теперь вы можете создать свой мобильный телефон и серверную часть на одном языке. Если вы изучаете Kotlin, вы даже можете скомпилировать его в JavaScript и использовать его в Интернете. И это даже не входит в число выпускаемых других умных устройств. Часы, дверные звонки и даже стиральные машины становятся умнее. И Swift, и Kotlin отлично подходят для создания приложений для этих устройств или для создания мобильных приложений для взаимодействия с ними. Это быстрые, современные и универсальные языки, которые могут многое предложить.

Кстати, Apple Silicon уже зарекомендовал себя как зверь, и оба этих языка показали себя очень хорошо на нем. Я считаю, что в конечном итоге мы увидим более широкую реализацию чипов ARM от всех поставщиков, поэтому знание этих языков было бы отличным способом погрузиться в процессоры следующего поколения.

Вы можете начать со Swift на https://swift.org/ и на Kotlin на https://kotlinlang.org/

3. Блокчейн и криптовалюта

Технология блокчейн никуда не денется в ближайшее время. Мы видели разрушения, которые создали Биткойн, Эфириум и даже Догикоин. Криптовалюта устремилась вперед, в то время как традиционные банковские и инвестиционные учреждения боролись с ней изо всех сил. Я не собираюсь объяснять тонкости работы блокчейна, но считаю, что знание того, как программировать приложения для использования преимуществ этой технологии, является чрезвычайно ценным навыком.

Криптовалюта по сути устраняет посредников в финансах. Биткойн и Эфириум не контролируются, не принадлежат централизованному банку и не печатаются государством. Из-за этого они рассматриваются как более частные и способ защитить себя от инфляции и любых изменений стоимости доллара в будущем. Это абсолютно необходимо. Биткойн стоит одинаково во всем мире.

Почему это важно для нас как разработчиков? Ну, недавно Tesla объявила, что они будут принимать биткойны в качестве оплаты, а не конвертировать их обратно в стабильную монету или в доллары США. Это огромный шаг вперед для криптовалюты. Если так будет продолжаться, наступит время, когда разработчикам нужно будет знать и понимать, как создавать приложения, которые могут интегрироваться с блокчейном. По мере того как все больше людей начинают инвестировать в криптовалюту и проявлять к ней интерес, потребность в возможности использовать ее для торговли на веб-сайтах и ​​в приложениях будет только расти.

Мой совет для начала - изучить Solidity, язык программирования, используемый для создания приложений, использующих Ethereum. Вам также потребуются знания таких языков, как Python и JavaScript, чтобы пользователи могли взаимодействовать с вашими приложениями. Ниже представлено простое приложение Hello, World, взятое с веб-сайта Solidity.

pragma solidity ^0.8.0;
contract MyContract {
    function helloWorld() public pure returns (string memory) {
        return "Hello, World!";
    }
}

Более подробную информацию можно найти на https://soliditylang.org/.

4. GraphQL

Уходя от более широких языковых категорий к большему количеству дизайна и архитектуры, GraphQL стремится решить несколько проблем REST API. Он был разработан Facebook, чтобы помочь им упростить получение данных со своих серверов в клиентские приложения.

Вместо объявления конечных точек для вашего API у вас есть одна конечная точка GraphQL, в которую вы передаете свои запросы и изменения. Запрос - это, по сути, определенный набор данных, которые вы хотите вернуть со своего сервера. Вы можете использовать запросы для определения структуры данных и того, сколько записей вы хотите вернуть с вашего сервера. Мутации можно рассматривать как традиционные команды создания, обновления или удаления. Вы отправляете данные на сервер, который создаете или обновляете, или все, что хотите с ними делать.

GraphQL стремится упростить поиск и управление между клиентами и серверами. Вы больше не получаете больше или меньше данных, чем вы ожидали, и вам действительно не нужно создавать группу DTO для управления запросами и ответами. Вы просто определяете свои типы объектов, а затем можете указать, какие поля из них вы хотите, чтобы ваш сервер возвращал.

Заменит ли GraphQL REST? Нет, я так не думаю. У каждого есть конкретный вариант использования. Иногда настройка REST API может лучше работать для вашего приложения. В других случаях вы можете захотеть использовать GraphQL. Почему я думаю, что GraphQL стоит изучить, потому что наши данные становятся все сложнее. Сложным моделям данных больше не нужна сложная логика для построения набора данных на вашем сервере. С GraphQL вы говорите серверу, что именно хотите вернуть.

Вы можете узнать больше о GraphQL на https://graphql.org/

5. Докер

Докер был инструментом, без которого я не могу жить. Docker - это инструмент, помогающий упростить кодовую среду. Вы извлекаете «образ» существующей среды, скажем, для Python или JavaScript, и, используя файл с именем Dockerfile, вы можете скопировать свой код в образ и запустить его там, а не на вашем компьютере.

С точки зрения разработчика, это дает ряд преимуществ. Вы, например, можете убрать свою среду разработки с локального компьютера. Все ваши зависимости и код изолированы на изображении. Это помогает предотвратить любые головные боли, с которыми вы можете столкнуться при локальном запуске своих сред. Это также упрощает совместное использование вашей среды с членами команды. Все, что вам нужно предоставить им, это ваш код и Dockerfile, и они могут использовать код именно так, как вы настроили его на вашем компьютере.

Вы также можете настроить более сложные среды с помощью Docker Compose, где вы можете создавать среды, используя несколько образов. Вы можете запускать базы данных, брокеров сообщений и многое другое, и все это без необходимости загружать и устанавливать эти части программного обеспечения в своей системе. Затем вы можете ссылаться на них в своем программном обеспечении, независимо от того, запускаете ли вы это в контейнере или нет. Это значительно упрощает процесс создания сред разработки и управления ими.

Это можно сделать еще дальше с помощью таких инструментов, как Docker Swarm и Kubernetes, которые значительно упрощают процесс установки и настройки производственных сред. Возможность упаковывать и развертывать программное обеспечение в таких контейнерах значительно снижает риск выхода из строя всей системы. Опять же, изоляция всех ваших конфигураций и приложений таким образом действительно помогает гарантировать, что ваш код будет работать точно так же, независимо от того, где он находится.

Как и GraphQL, технология Docker и контейнеров помогает решить сложную бизнес-инфраструктуру. Благодаря тому, что сейчас в приложениях все больше и больше компонентов, и они становятся все более ориентированными на микросервисы, Docker является важным инструментом для разработчиков, который нужно изучать и использовать. Мощность и гибкость, которые он дает вам для управления каждой частью вашего стека и его уверенного развертывания, неоценимы для любого рабочего процесса разработки.

Более подробную информацию о Docker можно найти на https://www.docker.com/

Заключение

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

Эти навыки и технологии, которые я обсуждал, - отличный способ добиться этого. Более распространенные языки вводят функциональные элементы в свой синтаксис. Наша бытовая техника и телефоны становятся не только умнее, но и доступнее, и сложнее. Swift и Kotlin - отличные языки для изучения в этом отношении. Технология блокчейн будет продолжать развиваться и получать более широкое распространение, поскольку спрос на криптовалюту и осведомленность о ней продолжают расти. GraphQL и Docker - это инструменты, которые помогают создавать приложения и получать для них данные. Они решают проблемы развертывания, API, зависимостей и многое другое. Обладая этими навыками, вы не только помогаете писать более качественное программное обеспечение, но и помогаете подготовиться к будущему.