Что следует знать перед тем как «увлечься» программированием
Вступление
Этот хабратопик предназначается для всех тех, кто хочет с головой (или не очень) погрузиться в волшебный мир программирования, но пока не знает, с чего начать. Возможно, вы уже предпринимали попытки научиться программированию, однако безнадежно забуксовали.
Так получилось, что около четырех-пяти месяцев назад я решил слегка разнообразить свой досуг новым хобби и вплотную заняться веб-программированием. Как я докатился до жизни такой — это тема для совсем другой статьи, и речь сейчас пойдет не об этом. Речь пойдет о трудностях, с которыми я столкнулся, и к которым абсолютно не был готов. Возможно, этот топик поможет вам лучше подготовиться и не повторить моих ошибок.
Итак, после осознания навязчивого желания хотя бы немного да освоить это таинственное ремесло, каждый задает абсолютно логичный вопрос — «С чего же мне начать»? Ответов может быть множество — к услугам новичков скринкасты, книги, курсы, онлайн-обучение, форумы и прочее, и прочее. Учи-нехочу. И так как никакой общепринятой системы самообучения программированию не существует, можно смотреть и читать все без разбору, дни напролет. При желании, в чтении можно захлебнуться, однако для уверенного продвижения по лестнице знаний необходимо четко и эффективно расходовать свое время и силы, и если не знать с чего начать и куда двигаться — вы попросту забредете в дремучий лес, по которому можно блуждать неделями, пока, наконец, вы не выйдете на верную тропинку. Если выйдете вообще — велик шанс, что вам попросту все это дело быстро надоест.
Я и сам пошел по этому пути — скачивал тучи роликов, впридачу купил несколько книг, читал их и забрасывал, потому что мне все-равно не хватало знаний и подготовки, несмотря на то, что все материалы были предназначены для «новичков». Я постоянно гуглил разные мелочи, задавал нубские вопросы на форумах, хватая минусы, и это убивало во мне желание продолжать самообучение.
Да, любые знания и любой накопленный (нагугленный?) опыт вам, безусловно, поможет и пригодится, однако ваша цель научиться тому, чему вы хотите научиться, и увидеть мало-мальский результат в обозримом будущем ведь так?
Абсолютно все материалы, которые попадались мне на глаза, после краткого вступления немедленно бросались с места в карьер, предлагая читателю решения и примеры на заданную тему. Я чувствовал себя абсолютным двоечником в классе вундеркиндов, и постоянно сталкивался с одной и той же проблемой — авторы книг, впрочем как и любого другого образовательного материала, предполагали что я владею некоторой базой основ, которая, на первый взгляд, к непосредственному программированию не имеет никакого отношения.
Это как если вы пришли работать, скажем, крановщиком, вас в первый же день посадили в башню, и похлопали по плечу со словами «Ну, удачи!». А как же техника безопасности и базовое объяснение что делать, а чего делать не нужно? Как мне пользоваться инструментами? Что вообще у меня за инструменты в наличии? Что я должен знать перед тем как приступить к работе?
Статья носит сугубо рекомендательный характер, однако попадись мне подобный топик на глаза пол года назад, я бы значительно увеличил свою продуктивность, сэкономил уйму времени себе, а так же множеству людей с форумов, отвечавшим на мои абсолютно идиотские вопросы. К каждому пункту я добавил несколько ссылок, как отправных точек для начала обучения. Так как текст предназначается для абсолютных новичков (да и сам я еще таким себя считаю) — я буду изъясняться предельно просто и понятно, поэтому если вы — гуру, и вы нашли в моем тексте оплошность — судите, но не строго!
Итак, что же следует знать, перед тем как увлечься программированием?
1. Терминал
Для вашего дальнейшего успешного самообучения программированию вам необходимо научиться пользоваться терминалом. Помимо непосредственного взаимодействия с языками программирования, обучение пользованию терминалом поможет вам лучше, так скажем, понять язык компьютера и устройство файловой системы в целом, а это уже маленький шажок в нужную сторону. Более того вы скажете мне спасибо, после того как начнете обучаться по скринкастам, в которых терминал используется постоянно.
Самообучение
2. Регулярные выражения
Представьте себе, что вы решили выучить иностранный язык не вникая в его азбуку, алфавит или иероглифику. Конечно, это возможно. Но насколько это усложнит процесс и путь к пониманию сути вещей? Решение сомнительное, правда? Так вот, регулярные выражения (они же регексы, с ударением на первый слог) — это, объясняясь простым языком, в какой-то степени вспомогательная азбука любого программиста, или, выражаясь языком викисловаря — «формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов».
Выглядеть регекс может, например, так:
Задача регулярных выражений — помочь программисту с поиском чего-либо. Сейчас объясню.
Если я в своей программе захочу найти все слова, частью которых является слово car (car, carrot, cartoon), мой регекс будет выглядеть так:
Если же меня интересует только слово car, я напишу:
Дальше — веселее. Можно фильтровать поиск через слово, через букву, исключать слова перед или же после искомого результата… Список возможностей фильтрации результатов при помощи регулярных выражений по-настоящему захватывает, и в паре с терминалом, про который я вам уже рассказал выше, эта штука просто невероятно крута. Несмотря на различающийся синтаксис отдельно взятых представителей ООП, многие из них поддерживают регексы и экономят уйму времени людям их использующим.
«Ну поиск, кому оно надо? Я же буду учиться программировать, а не искать слова!» — наверняка подумаете вы. Я вас услышал и даже понял. Так что если вы все еще сомневаетесь в необходимости заморачиваться с регулярными выражениями, просто поверьте мне на слово — они вам пригодятся. Многие книги и скринкасты используют регексы в примерах, вообще не объясняя, что происходит — авторы думают, что вы уже владеете этими азами и особенно не акцентируют внимание на разжевывании написанного.
Зубрить их совсем не обязательно, но, согласитесь, просмотр пары-тройки скринкастов на данную тематику вас явно не убъет.
Самообучение
3. Софт для разработки — знай свое оружие
Правило номер один — вы должны по-максимуму знать и владеть своими инструментами. Грамотно выбранный и изученный редактор, в котором вы вскоре обязательно начнете творить чудеса, я легко могу сравнить с превосходно подобранным самурайским мечом. Солдаты собирают и разбирают свои автоматы с завязанными глазами — вот насколько хорошо вы должны владеть софтом, которым пользуетесь! Пока вы буква за буквой пишете простую функцию, ваш враг, используя весь потенциал своего редактора, напишет несколько.
Для веб-разработки существует огромное количество програм, от простых текстовых редакторов до сложных облачных решений. В этой статье я не буду сравнивать эти редакторы между собой, вам придется сделать это самостоятельно — ведь вам с этим редактором жить, работать и смотреть на него и в горе и в радости. Я остановил свой выбор на редакторе Sublime Text 2. Помимо тонны возможностей, которыми обладает Sublime, необходимо отметить, что он условно-бесплатный и по нему существует множество отличной документации. Возможно совсем скоро, познав все хитрости Sublime и научившись подключать к нему плагины, подобная строка будет для вас обычным делом:
div>(header>ul>li*2>a)+footer>p (используется плагин Emmet, если кому интересно)
Самообучение
4. Система контроля версий
«Ну а это еще что такое?» — спросите вы. О, система контроля версий это прекрасная вещь, без которой в наши дни не обходится ни один серьезный девелопер. Википедия гласит — «Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.» Систем контроля версий существует достаточно много, поэтому сразу скажу — ниже речь пойдет исключительно о GitHub, самом большом сервисе для совместной разработки проектов.
Резонный вопрос: «Зачем мне этот Гитхаб осваивать, ведь мне пока нечего выкладывать?» А причин на то несколько. Помимо содержания собственных репозиториев, GitHub, во-первых, поможет вам осознать себя частью огромного сообщества разработчиков (возможно, кто-то из читающих сейчас ухмыльнулся, но поверьте, это действительно важно, особенно на ранних стадиях обучения!). Кроме того, вы сможете взглянуть на чужой исходный код и научитесь правильно его скачивать и «форкать» (копировать). В дальнейшем GitHub частенько будет всплывать в различных онлайн-курсах и скринкастах, и, конечно же, их авторы будут уверены в том, что вы знаете, как Гитхабом пользоваться. Поэтому если у вас найдется немного времени на неделе, сделайте себе одолжение — попробуйте Git.
Самообучение
5. История и культура
Этот пункт, скорее, вспомогательный, но если программиста которым вы восхищаетесь зовут Стив Джобс, то прошу вас, продолжайте чтение. Программирование имеет богатую и интересную историю (говорю вам как историк по первому диплому), в которой следует поковыряться хотя бы для общего образования. Занимаясь чем-либо, всегда полезно знать, откуда у этого чего-либо растут ноги. Кроме того, я искрене считаю, что без знания истории предмета невозможно полностью понять его суть, и, следовательно, достичь предельных успехов в его освоении. Поэтому если по прошествии некоторого времени такие имена, как Линус Торвальдс или же Грейс Хоппер не будут для вас пустым звуком — уважение вам и респект!
Помните — тот, кто не изучает историю, повторяет ее ошибки.
Заключение
Надеюсь, данный текст вас ни в коем случае не испугал, а наоборот, направил в нужную сторону, или же поможет в будущем избежать затруднений, которые постоянно встречаются на пути ученика. Я буду рад получить отзывы и комментарии, или же ссылки на дополнительные ресурсы, которые помогут новичкам в самообучении.
Ну напридумывали… Ловите новые крутые фишки языков программирования
Неизменяемость, мультиметоды и все-все-все.
Альберто Блинчиков для Skillbox Media
Джереми Грифски
(Jeremy Grifski)
Программист-энтузиаст. Получает докторскую степень в области инженерных наук, хочет стать преподавателем. Любит писать о коде. Сайт автора: The Renegade Coder.
Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.
Продолжаем рассказывать о самых крутых возможностях языков программирования. Если пропустили первую часть статьи — она здесь. А сегодня самый сок: неизменяемость, множественная диспетчеризация и — о ужас! — ассемблер, встроенный ассемблер.
Неизменяемость
Одна из самых прикольных фишек языков программирования — это неизменяемость (immutability). Впервые я столкнулся с ней, когда проходил курс по языкам высокого уровня.
В одном из заданий нам нужно было оценить и сравнить возможности примерно десяти языков программирования. И среди них была передача по значению, которая подразумевает неизменяемость.
При передаче по значению значения параметров копируются и все действия с ними в подпрограмме выполняются уже над копией.
При передаче по ссылке в подпрограмму передаётся ссылка на исходную переменную, копия не создаётся. По ссылке можно получить доступ к переменной — и изменить её значение.
Неизменяемость описывает переменные, которые не меняются после создания (в частности, константы). Во многих языках этим свойством обладают и строки. Именно поэтому не рекомендуется склеивать строки в цикле:
По этой же причине я не использовал конкатенацию (склейку) в своей серии статей «Разворачиваю строку задом наперёд (на разных языках)».
Разработчики языков программирования, конечно, знают о подобных ловушках и тратят немало усилий, чтобы оградить от них кодеров.
Ловушка здесь в том, что для каждой новой строки, которую неопытный разработчик неявно создаёт при склейке строк, нужно выделить место в памяти. Если итераций много, а компьютер слабоват, его памяти может и не хватить.
Разработчики языков программирования всеми силами пытаются оптимизировать подобные операции. Например, в Java есть класс StringBuilder. В отличие от String, он не immutable. Так что места в памяти для той же склейки требуется меньше, а результат легко приводится к строковому типу.
Кроме того, в Java есть пул строк, в который попадают все литералы — явно объявленные строки. В примере ниже строка «string» при первом упоминании попадёт в этот пул, а при исполнении оператора присваивания для s2 новый объект типа String создан не будет — s2 просто укажет на уже существующий в пуле объект.
Я не видел языков, где неизменяемость распространялась бы на что-то кроме строк. А потом попробовал написать Hello World на Elm.
В языке Elm переменные неизменны, прямо как в математике. Так что вот такой код не скомпилируется:
Проблема тут в рекурсии. Сначала мы присваиваем переменной a значение. А потом пытаемся переопределить a как функцию самой себя. Программисты, которые привыкли к императивным языкам, не увидят в этом ничего криминального. А вот с точки зрения математика со вторым присваиванием явно что-то не так.
Прелесть неизменяемости в том, что значение после первой операции присваивания будет всегда одинаковым — а значит, оно точно не изменится без вашего ведома.
Мультиметоды
Как и лямбда-выражения (про них читайте в первой части. — Пер.), это не такая уж новая фича. Но всё равно одна из самых крутых. Мультиметоды (multimethods) и множественная диспетчеризация (multiple dispatch) позволяют делать забавные вещи. Например, прямо в рантайме выбирать конкретную реализацию метода, общего для объектов, связанных иерархией наследования.
Я вспомнил про эту фичу, когда писал статью «Hello World на Julia». Julia — это язык, разработанный для численного анализа. Он напоминает Python и R, но вполне тянет на язык программирования общего назначения. И, в отличие от Python, Julia поддерживает мультиметоды, или множественную диспетчеризацию.
И тут я, наверное, должен объяснить разницу между одиночной и множественной диспетчеризацией. Одиночная диспетчеризация (виртуальные методы) — это одновременно и свойство языка программирования, которое позволяет пользователю реализовать в иерархии объектов один и тот же метод по-разному, и механизм, выбирающий нужную реализацию на основе фактического типа объекта, для которого этот метод был вызван.
Рассмотрим пример на Java:
Предполагается, что у нас есть два объекта — экземпляры классов из семейства Pokemon: pikachu (Пикачу) и charmander (Чармандер). В классах для этих объектов переопределяется общий метод tackle (физическая атака, при которой покемон разгоняется и врезается в противника всем телом. — Пер.). Когда мы запускаем этот код, JVM способна разобраться и вызвать правильный метод tackle.
Но в языках программирования с одиночной диспетчеризацией всё не так хорошо, потому что динамически определяется только вызов метода, а для параметров всё ещё приходится полагаться на типы, выведенные статически на этапе компиляции.
То есть суть множественной диспетчеризации в том, что мы вызываем метод на основе реальных конкретных типов, которые переменные имеют к моменту вызова.
Давайте представим, что charmander был создан как экземпляр более общего класса Pokemon. В случае одиночной диспетчеризации pikachu будет использовать метод tackle для этого общего класса, а не специфическую реализацию, заточенную под charmander. В результате pikachu может промахнуться и провалить атаку.
При множественной диспетчеризации такого не случится, потому что метод выбирается во время выполнения программы. И раз будет выбран более специфический вариант метода, pikachu атакует успешно.
Чтобы лучше разобраться с множественной диспетчеризацией, советую прочитать статью Эли Бендерского (Eli Bendersky) «Множественная диспетчеризация для полиглотов».
Деструктуризация
Помните, я писал про сопоставление с образцом (pattern matching)? Так вот, деструктуризация (destructuring), или повторяющаяся распаковка (iterable unpacking), — это разновидность сравнения с образцом. С её помощью извлекают данные из коллекций.
Про сопоставление с образцом автор говорил в первой части статьи. Напомним, что сопоставление с образцом (англ. pattern matching) — это метод анализа и обработки структур данных в языках программирования. В зависимости от того, совпадает или нет переданный аргумент с образцом, выполняются какие-то действия. Образцом может быть константа, тип данных или другая конструкция, которую поддерживает язык.
Этот метод используется, например, в регулярных выражениях.
Вот пример на Python:
Здесь мы извлекаем первый элемент списка и игнорируем все остальные. То же самое легко проделать и для последнего элемента:
Таким образом, используя сопоставление с образцом, мы можем извлечь из набора нужные данные — достаточно знать их структуру:
Встроенное тестирование
Я не уверен, что правильно назвал эту фичу, — да и вообще не знаю, есть ли у неё общепринятое название. Тем не менее встроенное тестирование (inline testing) — одна из самых прикольных языковых фишек, которые я когда-либо видел.
Впервые я наткнулся на неё в Pyret. Этот язык создан для обучения программированию. В Pyret модульные тесты (unit tests) — часть базового синтаксиса языка. Другими словами, для запуска тестов не нужно импортировать сторонние библиотеки и создавать специальные обёртки.
Вместо этого в синтаксисе Pyret есть несколько конструкций для тестирования:
Мы видим замечательную функцию для суммирования списка. Для пустого списка она выдаст 0, в остальных случаях просуммирует все значения в списке и вернёт результат.
В большинстве языков программирования на этом всё и закончится, а о тестировании, возможно, задумаются позднее. В Pyret же всё не так. Для тестов нужно просто добавить секцию where. В ней мы проверим, что и для пустого списка, и для списка, сумма элементов которого равняется 6, функция вернёт корректные значения.
Когда исполняется код, запускаются и тесты. Но тесты вовсе не блокируют работу программы. Она продолжит работать, если не возникнет каких-то совсем уж катастрофических проблем.
По-моему, это отличная фишка. И с ней гораздо удобнее сопровождать код. По крайней мере, при программировании на Pyret вы никогда не забудете о тестировании.
Встроенный ассемблер
Как оказалось, встроенный ассемблер — это инструмент, который позволяет разработчику напрямую обращаться к архитектуре системы. Например, с ним заработает такой код:
Выглядит как смесь C/C++ и обычного ассемблера. И это действительно так! Мы написали код, который работает напрямую с базовой архитектурой, — и точно знаем, что происходит под капотом.
Мне эта фишка показалась интересной, потому что языки программирования стремятся к высокому уровню — абстракциям. А в языке D мы можем отказаться от встроенной функциональности и написать свою реализацию на самом низком уровне.
Соглашения об именах библиотек
Однажды в комментариях к моей статье кто-то упомянул ещё одну классную фичу Python:
Обожаю в Python соглашение о наименованиях при импорте: import itertools позволяет использовать функции пакета itertools, так что можно писать itertools.chain (…). А from itertools import chain означает, что chain можно будет применять без указания пакета. И коротко, и понятно, какой пакет вызывается.
Точно, хорошая штука. Мне тоже нравится, что можно давать свои обозначения библиотекам. Многие, например, пишут import numpy as np, а не указывают полный путь. Иногда это не совсем безопасно, зато не нужно писать многабукаф.
Я полностью согласен с вышесказанным! Мне и правда кажется, что дополнительные имена могут усложнить чтение кода.
Что дальше?
Это далеко не все крутые фишки языков программирования. Автор регулярно пополняет коллекцию — за свежей версией на английском приходите сюда. Ну а если хотите познакомиться поближе с какими-то языками, то предлагаем начать с Python и Java.
В императивном языке задаётся последовательность действий, которые обеспечивают получение результата. Этим он отличается от декларативного, в котором определяется спецификация решения, а не конкретный алгоритм.
JVM (Java Virtual Machine) — виртуальная машина Java. Это основная часть исполняющей системы Java. Позволяет запускать программы, написанные на этом языке, на разных устройствах под управлением разных операционных систем.
Ассемблер — машинно-ориентированный язык низкого уровня. По сути, это машинные команды, написанные так, чтобы их мог понять человек.
«Встроенный» означает, что для ассемблерных вставок не нужно подключать отдельный внешний компилятор.
10 ведущих технических трендов 2021 года, на которые стоит обратить внимание программистам
Для индустрии разработки программного обеспечения и для программистов 2020 год стал значительным годом больших прорывов во многих областях. Пандемия значительно ускорила перевод самых разных процессов в цифровую среду, в результате тренды, о которых мы сегодня поговорим, будут представлять собой более масштабные явления, чем нечто подобное в прошлом году.
Разработка традиционных приложений и веб-проектов стала жизненно важным аспектом современного бизнеса, а программисты стали неотъемлемой частью самых разных организаций, помогая бизнесу внедрять инновации, создавать новые направления деятельности и развиваться.
Уже прошли четыре месяца 2021 года и сейчас совершенно очевидно то, что программист, обладающий актуальными знаниями и навыками, как и прежде, будет находиться в верхней части списка специалистов, которых ценят компании.
Здесь мне хотелось бы рассмотреть технологические тренды 2021 года, на которые стоит обратить внимание программистам. Всё то, о чём я буду говорить, основано на фактах, цифрах и данных из надёжных источников.
1. Мультиоблачные среды
Если говорить о компаниях, поддерживающих облачные сервисы для публичного использования, то совершенно очевидно то, какие именно компании являются лидерами рынка. По данным Statista в четвёртом квартале 2020 года лидером рынка облачных услуг с долей в 32% стала платформа Amazon Web Services. Microsoft Azure досталось 20% рынка, а Google Cloud — 9%. В 2021 году, вероятно, эти три ведущих платформы сохранят свои позиции.
Ведущие облачные платформы в 4 квартале 2020 года
И, что интересно, набирают популярность мультиоблачные среды. Несколько компаний движутся в этом направлении. В частности, компания Amazon, ранее без особого энтузиазма относившаяся к мультиоблачным стратегиям, теперь вышла на этот рынок, предложив программистам инструменты для удобного развёртывания приложений в мультиоблачной инфраструктуре.
2. Блокчейн-технологии
Блокчейн-технологии появились сравнительно недавно. Уже сейчас понятно, что они способны изменить мир. Они используются, например, в криптовалютах. Но эти технологии могут серьёзно трансформировать всю IT-индустрию. Ресурс PR Newswire прогнозирует, что к 2027 году рынок блокчейн-технологий достигнет размеров в 30,7 миллиардов долларов при совокупном среднегодовом темпе роста в 43%. Весьма вероятно то, что в 2021 году эти технологии, в виде механизма смарт-контрактов, будут использоваться в самых разных областях.
3. Квантовые вычисления
Квантовые вычисления — это, без сомнения, самая реформистская технология нынешней эпохи. Эта технология, скорее всего, повлияет на все отрасли экономики. И, по сведениям, опубликованным в IBM Research Blog, в 2023 году компания выпустит процессор IBM Quantum Condor на 1121 кубита.
Для того чтобы понятнее описать перспективы квантовых компьютеров — приведу следующее сравнение. Если представить, что самый совершенный современный суперкомпьютер — это шахматист, или ученик математического класса, оканчивающий среднюю школу, то квантовый компьютер будет гениальным математиком, вроде Эйлера, или шахматистом, который может одновременно играть с полусотней других шахматистов.
Поэтому, учитывая огромные возможности квантовых компьютеров и сильнейший интерес, который испытывает к ним общественность, в 2021 году в сфере квантовых вычислений можно ожидать появления невероятных открытий и прорывных достижений.
4. Инструменты для глубокого обучения
Globe News Wire даёт прогноз, в соответствии с которым рынок технологий глубокого обучения достигнет в 2028 году 93,34 миллиарда долларов, при стабильном совокупном среднегодовом темпе роста в 39,1%. Наиболее заметными глобальными фигурами на этом рынке являются Facebook и Google. По данным исследования, проведённого Stack Overflow среди разработчиков, оказалось, что фреймворк Google TensorFlow 2.0 популярнее, чем Facebook PyTorch. Причиной этого является тот факт, что фреймворк TensorFlow обладает всеми возможностями PyTorch, но при этом отлично работает в среде Google Colab.
TensorFlow популярнее PyTorch
Но, с другой стороны, разработчикам комфортнее работать с PyTorch, так как этот фреймворк включает в себя функционал, ориентированный на удобство работы с ним.
С PyTorch работать комфортнее, чем с TensorFlow
Не стоит и говорить о том, что в 2021 году и PyTorch, и TensorFlow 2.0. станут теми самыми инструментами, которые, в зависимости от нужд конкретного проекта, чаще всего будут использоваться там, где нужны технологии глубокого обучения.
5. Вычисления, требующие переработки большого количества данных
Несколько лет назад в сфере распределённой пакетной обработки данных, или при проведении вычислений, требующих переработки большого количества данных, стандартным инструментом была платформа Hadoop. Но сейчас, с появлением платформы Apache Spark, её, в большинстве случаев, используют вместо Hadoop. В публикации из блога Towards Data Science сказано, что основное отличие двух этих платформ заключается в производительности. А именно, если речь идёт об обработке данных, хранящихся на дисках, то Spark стабильно показывает производительность, в 10 раз превышающую производительность Hadoop. Если же данные хранятся в памяти — речь идёт о 100-кратном повышении производительности. Более того — платформа Spark создавалась с прицелом на исправление недостатков Hadoop. В результате тренд отказа от Hadoop и перехода на Spark, весьма вероятно, продолжится и в этом году.
6. Быстрая разработка приложений
Недавняя публикация ресурса PR Newswire позволяет говорить о том, что к 2027 году рынок быстрой разработки приложений (Low Code/No-Code, LCNC) достигнет 65,15 миллиардов долларов, при этом совокупный среднегодовой темп роста превысит показатель в 26,1%. Low Code/No-Code-возможности в сфере веб-разработки поддерживает несколько платформ. Среди них — Microsoft Power Apps, Bubble, OutSystems и Appian.
В 2021 году развитие LCNC-платформ будет представлять собой один из наиболее мощных трендов. В этой сфере можно будет наблюдать множество инноваций и крупных сделок по приобретению одних компаний другими или по слиянию компаний.
7. JavaScript, Python и Java
Мир языков программирования претерпевает значительные изменения. Традиционные «тяжёлые» языки теряют позиции, а языки, больше ориентированные на удобство разработчика, вроде JavaScript, Python и Java, наоборот, остаются популярными.
Учитывая то, что индустрия разработки программного обеспечения бурно развивается, и то, что к ней постоянно присоединяются новые разработчики, языки, на которых проще и удобнее программировать, будут очень хорошо чувствовать себя в этом году.
8. React — популярная библиотека для разработки пользовательских интерфейсов
Если взглянуть на фреймворки и библиотеки, используемые в веб-разработке, то оказывается, что тут первое место всё ещё принадлежит jQuery, но эта библиотека довольно скоро может уступить первенство React и Angular. Кроме того, React — это, в соответствии с результатами исследования Stack Overflow, библиотека для фронтенд-разработки, которая опережает другие подобные инструменты по количеству загрузок и по уровню использования. Разработчики выбирают её для создания интерфейсов чаще других подобных средств.
Библиотеки и фреймворки для фронтенд-разработки
9. Контейнеризация
В IT-индустрии, изначально ориентированной на облачные среды, контейнеризацию можно признать одной из ключевых технологий. Платформа Kubernetes, по сведениям Globe Newswire, занимает 48% рынка. Эта платформа стала ведущим инструментом для оркестрации контейнеров и для управления ими. Причём, это относится и к частным, и к общедоступным облачным системам. Более того, все ведущие поставщики облачных услуг, такие, как Amazon, Microsoft и Google, предоставляют своим клиентам возможность пользоваться Kubernetes.
В этом году нас ждёт продолжение распространения Kubernetes, так как эта платформа является важнейшим ингредиентом мультиоблачных стратегий.
10. Пограничные вычисления
Пограничные вычисления представлены распределённой вычислительной инфраструктурой, расположенной как можно ближе к конечному пользователю, которая объединяет системы хранения данных и вычислительные мощности. По некоторым оценкам глобальный рынок пограничных вычислений к 2028 году может дорасти до 61,14 миллионов долларов. Учитывая рост использования IoT-устройств, транспортных средств с выходом в интернет, технологий искусственного интеллекта и машинного обучения, в этом и в следующих годах рынок пограничных вычислений будет бурно расти. Поэтому нам стоит быть готовыми к инновациям в этой области и к появлению в этой области новых стандартов.
Итоги
Индустрия разработки программного обеспечения куда больше, чем рассмотренные в этом материале её части, поэтому за один заход невозможно охватить все важные аспекты этой индустрии. Однако тут представлены несколько значительных трендов, которые способны сыграть очень важную роль в жизни любого программиста. Надеюсь, теперь у вас есть некоторое представление о том, на что стоит обратить внимание в 2021 году.
Как вы думаете, на что ещё программистам стоит обратить внимание в этом году?






