Результати пошуку за запитом: начальный курс c
Створюємо Telegram бота на Python частина-1
Автор: Армен Маїлян
Существует множество различных статей и учебных пособий по созданию ботов для телеграмм, некоторые из них достаточно сложны, часть требует знания отдельных технологий и фреймворков. В данной статье мы рассмотрим создание чат бота в мессенджере Telegram с нуля. От нас не будет требоваться каких-то специальных знаний. Для начала достаточно будет начальных знаний языка Python в качестве языка программирования.
Часть 1: Регистрация нового Telegram Bot-а
Для начала вы должны быть зарегистрированы в Telegram- мессенджере. Далее, вы в мобильной, десктопной или web-версии мессенджера открываете общение с ботом @BotFather, либо по ссылке https://telegram.me/botfather.
После начала общения с этим ботом, нажав /start, вы получите ответ от бота с указанием его возможностей. Нас интересует создание нового бота - /newbot.
После того как мы введем /newbot нас попросят придумать имя для нашего нового бота. Пусть оно будет MyFirstTestBot.
Далее нам нужно придумать юзернэйм для нашего бота. В нашем случае это будет mft001_bot.
После этого BotFather высылает нам специальный токен:
Наш токен оказался: 851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM (В вашем случае токен будет другой.)
Этот токен понадобится нам при настройке нашего бота. Токен должен быть сохранён. Именно он является единственным ключем для взаимодействия с ботом.
Также мы получаем ссылку на нашего бота. В моем случае это t.me/mft001_bot.
Теперь наш Tekegram-бот создан. Мы можем начать настраивать своего бота, например, установить изображение для бота, изменить или добавить описание бота и тп.
С регистрацией бота мы закончили. Наш бот уже есть, но на данный момент он еще ничего не умеет. Теперь нам нужна его начинка – какой-то механизм, который будет обрабатывать наши запросы к этому боту и возвращать нам ответы.
Часть 2 Написание кода
Как и написано выше мы будем создавать нашего бота на языке Python. Установите его с официального сайта, если вы используете Windows или выполните команду в терминале на Linux:
sudo apt-get install python python-pip
Далее воспользуемся системой управления пакетами PIP, которая используется для установки и управления программными пакетами, и установим библиотеку PyTelegramBotAPI (Telebot):
pip install pytelegrambotapi –user
Создадим логику работы нашего бота. Используя полноценный IDE или простой текстовый редактор создадим файл ourbot.py и заполним его необходимой логикой.
Для начала нам нужно выполнить импорт библиотеки PyTelegramBotAPI (Telebot), написав в нашем файле:
import telebot
Далее подключим нашего бота, используя полученный ранее токен:
bot = telebot.TeleBot('851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM')
Теперь создадим метод, для получения сообщений.
Возможности PyTelegramBotAPI позволяют отправлять боту аудио (content_types=['audio'), видео (content_types=['video'), документы (content_types=['document'), текст (content_types=['text'), географический адрес (content_types=['location'), данные контакта (content_types=['contact') и стикеры (content_types=['sticker'). Мы, для простоты опыта, будем общаться с ботом только текстом:
@bot.message_handler(content_types=['text'])
def handle_text_messages(message):
Теперь рассмотрим логику обработки наших текстовых сообщений. Мы хотим захардкодить простое общение бота с пользователем: бот должен уметь здороваться, когда с ним здороваются, уметь отвечать на вопросы «Кто ты?», «Как тебя зовут?» и «Что ты умеешь?».
if message.text == "Привет":
bot.send_message(message.from_user.id, "Привет")
elif message.text == "Кто ты?":
bot.send_message(message.from_user.id, "Я тестовый чатбот для учебного примера.")
elif message.text == "Как тебя зовут?":
bot.send_message(message.from_user.id, "Меня зовут MyFirstTestBot.")
elif message.text == "Что ты умеешь?":
bot.send_message(message.from_user.id, "Я умею отвечать на несколько простых вопросов - кто я, как меня зовут и что я умею делать.")
else:
bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши что-то другое.")
После тела метода, обрабатывающего наши запросы к боту, добавим вызов метода:
bot.polling(none_stop=True, interval=0)
Задачей этого метода является создание потока, в котором бот отправляет запросы на сервер, уточняя таким способом, не писал ли ему кто-то сообщение. Параметр none_stop: False означает, что наша программа будет продолжать отправлять запросы на сервер после получения сообщения об ошибке от сервера Telegram.
Сохраним наш код:
Мы можем протестировать работу нашего бота, запустив его код в той IDE, в которой мы писали. И написав нашему боту в мессенджере.
Все работает.
Наш учебный Telegram-бот создан. Мы можем запустить наш файл локально, и он будет отрабатывать запросы к нему через мессенджер прямо на нашем компьютере, выступающим в роли сервера. Но это не очень удобная практика. Для нормальной работы код желательно залить на отдельный сервер и запустить его там.
Вопросы заливки нашего простого бота на сервер мы рассмотрим в следующей статье.
Резюме
Как мы увидели, создание работающего бота на Python для Telegram мессенджера достаточно просто. Для простых ботов не нужно использовать сложные решения - есть удобная библиотека PyTelegramBotAPI, позволяющая решить такие задачи. В нашем учебном примере мы рассмотрели только работу с текстом, но, благодаря этой библиотеке, бот может работать и с другими форматами данных. Попробуйте сами сделать своего бота, отвечающего на ваши вопросы.
С нашей стороны мы рекомендуем ознакомиться с курсом подготовки Python-разработчика. Знания, полученные после прохождения данного курса позволят вам не только создавать различные приложения, но и получить полноценную профессию разработчика программного обеспечения.
Уразливості в .NET платформі
Автор: Редакція ITVDN
Необходимо ли вам знать об уязвимостях в .NET? Возможно, вы по-новому взглянете на код, а может, и на свою жизнь. А вдруг вам захочется сменить квалификацию и уйти в research новых видов атак? Кто знает. Но если вы задались вопросом об уязвимости, то вы наверняка интересуетесь тем, как разрабатывать надёжные и защищённые приложения.
Итак, давайте поговорим об уязвимостях, которые находят в .NET Framework.
DoS (Denial of service) – атака на ASP .NET MVC приложение. Эта атака способна серьезно нарушить работу вашего сайта, например, замедлить его, а в отдельных случаях и вовсе его заблокировать.
Как работает
На сервер производятся запросы, которые он не может обработать, в результате чего сервер не успевает обрабатывать запросы обычных посетителей и выглядит для них как неработающий.
Как исправлять
Упростить регулярное выражение
Заменить регулярное выражение на custom алгоритм
Задать timeout для обработки любого регулярного выражения, используя конструктор, или для всех регулярных выражений, используя AppDomain.
Это отличные примитивные меры, когда вам не очень хочется разбираться в том, какие у вас регулярные выражения и насколько они сложные. Тем более, что такие решения вам ничего не стоят, но дают результат.
Атака повышения привилегий (ЕоР) на SQL-сервер. В данном случае это luring атака, которая может скомпрометировать все данные на сервере.
Атака повышения привилегий (ЕоР) в ASP .NET Core 1.0. Эта уязвимость была зафиксирована как ошибка бизнес-логики, но позже выяснилось, что она может привести к раскрытию данных и повышению привилегий пользователя.
Как работает
Атакующий «заманивает» более привилегированный компонент, чтобы что-то сделать от его имени. Самый простой способ осуществить такую атаку – убедить цель запустить код атакующего в более привилегированном контексте безопасности.
Как исправлять
Единого сюжета, как избежать этих уязвимостей, к сожалению, нет. Можно дать лишь общие рекомендации. Например:
Зарегистрировать request-сервис в контексте синглтона
Дважды проверять любой код, работающий с security sensitive, c sandboxing и с модификацией данных
Runtime check – ещё один хороший способ защиты от подобных вещей
Минимум привилегий везде
Раскрытие информации ХХЕ - это уязвимость к XML-инъекциям, которая приводит к чтению произвольных файлов на атакуемом сервере.
Как работает
Чтобы понять суть ХХЕ, давайте сначала разберёмся с ХМL форматом. ХМL формат может содержать описание своей структуры в теге DOCTYPE. В этом же теге могут содержаться и некоторые Entity. Если говорить по-простому, то это аналог константы, который дальше может использоваться в ХМL коде и, при парсинге этого кода, будет автоматически раскрываться. Уже это обстоятельство может привести к DoS атаке, если вы добавите Entity, которые рекурсивно раскрываются, и не зададите timeout. Парсер начнёт их раскрывать бесконечно долго.
Классическая ХХЕ атака проходит следующим образом. Атакующий отправляет скомпрометированный ХМL файл на сервер, где этот файл парсится, после чего из сервера возвращается ответ. Ответ может быть совершенно любого типа, хотя существует вероятность, что злоумышленник получит именно тот локальный файл, который ему нужен.
Как исправлять
Запретить использование DTD файлов и External Entity
Занулить resolver
Ввести ограничение на размер и установку timeout
Одной из причин появления уязвимостей может быть десериализация бинарных данных. Десериализация данных – это обратный процесс сериализации. То есть если при сериализации мы переводим какую-либо структуру данных в последовательность битов, то при десериализации мы восстанавливаем начальное состояние этой структуры.
Как при этом процессе может возникнуть уязвимость? Допустим, у вас есть класс, реализующий команду, который запускает какой-то конвертор. Вы через конструктор передаете ему параметры этого конвертора и они валидируются в конструкторе. При этом использовать можно не каждый, а только ваш локальный конструктор.
В чём же проблема? А проблема состоит в том, что при десериализации данных конструктор не будет запущен. То есть ваши данные будут десериализованы так, как они есть, включая приватные поля.
Как исправлять
Использовать кастомный сериализатор
Использовать минимум привилегий в процессе десериализации
О возможных способах десериализации вы можете узнать больше в статье Джеймса Форшав «Are you my Type? Breaking .NET Trough Serialization».
Вывод
К всеобщему сожалению, сейчас не существует ни одного полностью защищённого веб-приложения. Поэтому проблема уязвимостей остаётся актуальной. Злоумышленники находят всё новые и новые способы взлома серверов и нанесения всяческого вреда компаниям или обычным людям. Следовательно, для гарантии безопасности вашего приложения вам необходимо знать, как устранять уязвимости и препятствовать их появлению.
Материал подготовлен на основе выступления Михаила Щербакова, Independent Consultant, на конференции по .NET-технологиям DotNext 2016 Moscow.
Як вивчати програмування в умовах блекаутів 2023 року
Автор: Влад Сверчков
Добрий день!
Для українців одним із найбільш поширених слів останніми місяцями стало «блекаут» – це тотальне зникнення електропостачання. На жаль, навіть у 21 столітті ми потерпаємо від регулярного вимкнення електрики – внаслідок російських обстрілів. Але хіба це може зашкодити нам вчитися і працювати, щоб підтримувати економіку і допомагати нашим захисникам?
Багато українців у зв’язку з війною втратили роботу і змушені шукати нові можливості, які б дозволили працювати дистанційно з будь-якої точки України та світу. І саме ІТ-галузь якнайкраще задовольняє цим умовам.
Опанування певної ІТ-професії вимагає інтенсивного навчання та регулярної практики. Однак як вибудувати свій процес навчання в умовах блекауту? Які є варіанти навчання за умов відсутності світла та інтернету? Відповіді на ці та інші питання ви знайдете у даній статті.
Які є можливості навчання під час блекауту
Паперові книги з програмування. Це безпрограшний варіант, оскільки тут не задіяні ні електрика, ні інтернет. Хіба що додаткове джерело світла знадобиться у темну частину доби (ліхтарик, світло зі смартфону абощо). Придбайте для себе паперовий посібник з вивчення бажаної мови програмування або технології і опановуйте теорію, незважаючи на відсутність електрики. Але вам потрібен буде гаджет, на якому ви могли б практикуватися (наприклад ноутбук), інакше весь теоретичний матеріал не зможе осісти у вашій голові і ви дарма втратите час. А програмування – це на 80% практика.
Електронні книги. Вони більш дешеві за паперові аналоги, але потребують наявності гаджета (бажано з гарною батареєю) і, можливо, павербанку для оперативної підзарядки. У випадку, якщо вимкнення тривалі, а вам необхідно підзарядитися, можна скористатися кафе, торговим центром або Пунктом Незламності. Наявність того ж ноутбуку дозволяє практикуватися у написанні коду, вміщувати велику кількість книжок тощо.
Освітні веб-портали (якщо є мобільний інтернет). Можна читати теорію з різних спеціалізованих веб-ресурсів зі смартфону або ж роздати WiFi на інші портативні пристрої і читати там (а паралельно ще й займатися практикою).
Відео уроки, завантажені з ютубу або спеціальних ІТ-майданчиків на кшталт ITVDN. Гарний варіант для тих, кому подобається більша аудіо та візуальна інтерактивність – коли теорію подає професіонал – практикуючий розробник та/або ментор. Спікер викладає матеріал більш стисло, аніж у книзі, і зачіпає лише найважливіші теми. Такий підхід дозволяє прискорити вивчення мови/технології, а також отримати більш актуальні знання (з урахуванням дати записаного відео).
Як практикуватися?
Для практики потрібен ноутбук, оскільки він має портативність, відносну автономність, компактність. У більшості випадків підійде навіть слабкий ноут; головне – аби в ньому батарея була достатньо витривалою, інакше доведеться шукати місце для підзарядки і кодити звідти.
Практика передбачає виконання певних домашніх завдань та навчальних проєктів для закріплення знань після читання матеріалу.
Освітня платформа ITVDN пропонує досить ефективний спосіб поєднання теорії та практики під час відсутності світла та інтернету:
Ви переглядаєте попередньо завантажений відео урок, де автор – практикуючий розробник – викладає актуальний навчальний матеріал, використовуючи презентацію, код у середовищі розробки, а також свій особистий досвід і харизму.
Після перегляду ви виконуєте закріплене за кожним уроком д/з, повторюєте теорію, користуючись коротким конспектом, переглядаєте прикріплений вихідний код прикладів, розглянутих автором на уроці.
Коли з’явиться світло, у вас буде можливість скористатися ще більшими можливостями ITVDN:
Пройти невеликий тест після кожного уроку для перевірки своїх знань.
Додатково скористатися Інтерактивним практикумом для більшого відточення навичок написання коду з популярних мов програмування – C#, Java, JavaScript, C++, Python, SQL або мов верстання HTML & CSS.
Пройти підсумковий тест за всім відео курсом і отримати відповідний Сертифікат, що підтверджуватиме ваші знання.
Новий пакет підписки – спеціально на випадок блекауту
Аби отримати можливість скачувати відео уроки та вивчати ІТ в умовах вимкнень світла та інтернету, ми створили особливий пакет підписки – «Преміум Plus». Що до нього входить?
Доступ до всіх відео курсів, представлених у каталозі (понад 230)
Можливість навчання з усіх спеціальностей
Доступ до інтерактивних практикумів
Вихідний код навчальних проєктів
Презентації, опорний конспект, д/з із кожного уроку
Перевірка 20 виконаних завдань
Консультації з тренером – 120 хвилин
24 онлайн тестування та сертифікати за пройденими курсами
Доступ до нових курсів під час дії підписки
Можливість завантажувати відео уроки будь-яких курсів з каталогу ITVDN
Приклад
Розглянемо формат навчання, який отримують ті, хто придбав підписку «Преміум Plus» на ITVDN, на конкретному прикладі – курсі «C# 8.0 Стартовий».
Придбавши пакет і перейшовши на сторінку будь-якого курсу, ви побачите праворуч від відео плеєра список доступних уроків:
Під назвою кожного уроку є 4 опції.
Натиснувши на «Матеріали уроку», ваш браузер завантажить на комп’ютер матеріали до уроку – презентації, вихідний код, конспект. Після натискання на «Домашні завдання» буде завантажено тільки файл з коротким конспектом та д/з. Опція «Завантажити» запустить процес скачування запису відео уроку у форматі mp4.
При натисканні на «Тестування» ви побачите вікно з пропозицією пройти невеликий тест з даного уроку і перевірити ступінь засвоєння матеріалу:
Аби завантажити усі матеріали відео курсу разом (окрім відео уроків у .mp4), можете скористатися кнопкою «Завантажити матеріали курсу» під описом курсу:
Сподіваємося, наш гайд є корисним для вас і тепер ви знаєте, як зробити своє ІТ-навчання ефективним навіть в умовах вимкнень світла та інтернету.
Ознайомитися з «Преміум Plus»
Навчайтеся разом з ITVDN і нехай ніякі блекаути не стають на заваді вашого розвитку в ІТ!
Використання HTML Agility Pack та CSS Selectors
Автор: Редакція ITVDN
Введение
В следующих примерах используется HTML Agility Pack (НАР), чтобы загрузить HTML в объект модели документа (DOM) и разбить на узлы. Дополнительно есть случаи, когда приходилось анализировать документ об элементах, которые не являются действительно узлами, такие как комментарии.
В дополнение к наблюдениям около HAP в целом будут указаны методы расширения, предоставляемые пакетом HAP.CSSSelectors, что позволяет значительно проще выбирать.
Задний план
Был успешно использован Html Agility Pack для клиента, проанализированы HTML документы, чтобы извлечь необходимую информацию. Расширения CSSSelector будет добавлять новый мощный уровень абстракции, чтобы собрать необходимые данные.
Использование кода
Пакеты для примера нужно будет импортировать с помощью NuGet. Описания пакетов будут загружены в проекте, но нужно будет установить менеджер пакетов NuGet для восстановления библиотек.
В проект был включен очень простой HTML файл с примерами вопросов, которые необходимы для решения своих проектов.
Чтобы проверить без лишних изменений, необходимо скопировать файл HTML в следующем дисководе и каталоге - C: \ TestData.
HtmlAgility имеет ряд классов, доступных для его добавляемых классов и перечисления, которые представляют различные части DOM, эти классы включают HtmlAttribute, HtmlAttributeCollection, HtmlCommentNode и так далее.
Первый класс, который мы будем изучать, это HTMLDocument класс. Этот класс имеет методы для загрузки и анализа документа в его соответствующих частях.
В исходном коде вызывается каждая секция кода, использующая номенклатуру (часть X), где X представляет собой число.
Чтобы использовать, следующая строка должна быть реализована:
HtmlAgilityPack.agpack = new HtmlAgilityPack.HtmlDocument();
Следующий метод вызывает метод для загрузки документа. Вы можете загрузить его из строки:
agpack.LoadHtml(Html string)
//or from a resource –
agpack.Load(@"c:\testdata\testdat.htm");
Файл в себя включает недостающий закрывающийся тег шрифта и неуместный закрывающий тег. Он прекрасно работает в браузере, не выдает ошибку в HAP, но может быть проверенным на это.
var errors = agpack.ParseErrors;
ParseErrors будет возвращать коллекцию и подсчет ошибок. Достаточно интересная вкладка, закрытие шрифта не выдаст ошибку.
После того, как документ был загружен, двумя основными способами для поиска являются:
SelectNodes(string XPath) // from the DocumentNode
GetElementbyId(string Id) // from the HtmlDocument
Поскольку может быть только один ID, getElementById вернет один узел и SelectNodes вернет коллекцию узлов, потому что с помощью XPath он может соответствовать одному или нескольким элементам.
Находим приложение, где будет добавляться несколько файлов вместе, ограничивающее каждый документ с начальным и конечным комментариями. Ниже показано, как обрабатывать разделения этого документа обратно в его составную часть. Файл, который включен, имеет секцию, которая очерчена с комментариями:
HTML Body
Вы можете использовать следующую команду, чтобы получить комментарий:
var comment = agpack.DocumentNode.SelectNodes("//comment()[contains(., 'Start Table:')]");
Это говорит от всего документа ("//") выбор комментариев, что содержат от текущего местоположения (.) слово Начало табл.
Так как это является комментарием, то не имеет дочерних узлов и внутреннего текста, только текст самого комментария. Это полезно, если то, что вы хотите сделать - это разобрать комментарий, чтобы определить значение в комментарии (номер счета в данном случае), но на самом деле не поможет, если вы хотите видеть текст между комментариями. Чтобы достичь этого, возвращаемся обратно в регулярные выражения и группировки.
var html = Regex.Match(agpack.DocumentNode.InnerHtml,@"(?.*)",RegexOptions.Singleline).Groups[1];
Теперь в html.Value имеется текст между двумя тегами.
Переходим к нахождению элементов в DOM, первый пример находит узел, используя getElementById. Есть три таблицы, но только два идентификатора возложены на них. Одним из них является ID = "abc", другой ID = "table3".
Начнем с таблицы ID = "abc":
var node = agpack.GetElementbyId("abc");
Это вернет один узел, представляющий таблицу. InnerHtml будет содержать весь текст между тегами.
Он также будет содержать набор узлов, представляющих DOM структуру таблицы.
Один из подходов к получению узла строк заключается в использовании Linq, чтобы обнаружить их:
var rownodes = node.ChildNodes.Where(w => w.OriginalName == "tr");
Если проверить подсчет, вы увидите, что у вас есть три строки. Однако, на самом деле существует четыре ряда, первый записанный не будет найден.
Другой подход заключается в использовании SelectNodes на узле, чтобы обнаружить элементы tr.
rownodes = node.SelectNodes("tr");
Но это также проблема - найти все строки, проще найти элементы управления.
Как насчет node.SelectNodes ("/ tr")? Это ничего не возвращает.
Как насчет node.SelectNodes ("// tr")? Хорошая новость состоит в том, что он нашел недостающую строку вместе со всеми строками (12) в документе.
После небольшого углубления нашлись следующие два рабочих решения:
rownodes = node.SelectNodes(node.XPath + "//tr");
//or
// http://www.w3schools.com/xsl/xpath_axes.as
rownodes = node.SelectNodes("descendant::tr");
это возвращает все четыре. Возможно, HAP делал бы SelectNodes от текущего узла "//tr" и работал бы, увы "//" - говорит искать от корня документа. Но второй вариант работает, как потолок от выбранного узла.
Аналогичным образом мы можем найти все td элементы, используя те же процедуры. Отметим, что для таблицы нужно 3 вернуть двенадцать td элементов, даже если они являются дочерними.
node = null;
node = agpack.GetElementbyId("table3")
nodes = node.SelectNodes("descendant::td");
Переходим к HAP.CssSelectors.
Это находится на вершине HtmlAgility пакета и будет на самом деле обеспечивать установку в качестве части пакета NuGet.
Это позволяет выбрать элементы, используя CssSelectors, нежели XPath. Например:
rownodes = agpack.QuerySelectorAll("#abc tr");
В этом случае не нужно искать в узле, просто, выбрав из всего документа, он вернет ожидаемых 4 ряда.
listTDNodes = agpack.QuerySelectorAll("#table3 td");
Ниже приведен пример получения только s (три) во втором ряду.
listTDNodes = agpack.QuerySelectorAll("#table3 tr:nth-child(2) td");
Это вернуло двенадцать пунктов, четыре ряда из 3 колоноки. Одно замечание. Способ QuerySelectorAll возвращается, как список <узлов>, а не коллекция узлов. Это важно знать, если планировать смешивать и сочетать.
В дополнение к выбору по идентификатору (#) можно выбрать по классам (.), это гораздо проще, чем искать атрибут с классом, используя XPath.
listTDNodes = agpack.QuerySelectorAll(".table");
Возвращаем первую и третью таблицу с классом table.
Точки интереса
В заключении скажем, что продление CssSelectors - это еще один полезный инструмент для легкого выбора элементов, без необходимости копать вглубь XPath или перебирать коллекции.
Источник: http://www.codeproject.com/Articles/1038320/Using-HtmlAgility-pack-and-CssSelectors
Яку мову програмування варто вчити першою
Автор: Влад Сверчков
На що впливає вибір мови програмування?
Які мови обирають першими?
Рейтинги мов програмування.
Індекс TIOBE.
Індекс PYPL.
Stack Overflow Developer Survey 2022.
Рейтинг від GitHub.
Які мови найпопулярніші відповідно до цих рейтингів?
Які мови обирають українські розробники?
Кількість вакансій та відгуків в Україні.
Висновки.
Перша мова програмування (скорочено – МП) відкриває світ створення коду перед новачком. І від обраної мови дуже часто залежить те, яким буде цей «світ» – цікавим та захоплюючим, або ж недружнім та занадто складним. Якщо ви хочете з цього знайомства винести максимальну користь для себе, варто уважно підійти до вибору першої мови програмування – і наша стаття вам у цьому допоможе.
Ми розберемо мови програмування, які можуть бути чудовими у якості перших мов. Ви дізнаєтесь, в яких ІТ-професіях затребувана та чи інша мова – а також багато іншої корисної та цікавої інформації.
На що впливає вибір мови програмування?
Для новачка обрання першої мови – важливий крок, який може визначити його подальший шлях розвитку в якості розробника. Головні пункти, на які впливає МП:
Швидкість опанування бази. Мови програмування мають різну складність вивчення. Наприклад, JavaScript досить легко вивчається, в той час як C++ носить більш хардкорний характер, а мови сімейства Assembler можуть кинути виклик навіть тим, хто вже є розробником. Мови з динамічною типізацією (JavaScript, Python, Ruby тощо) вивчаються швидше за мови зі статичною (C#, Java, C/C++ та ін.).
Парадигма мислення. Мови мають різні парадигми, відповідно до яких ви створюватимете код: процедурна, імперативна, об’єктно-орієнтована, функціональна тощо. Від парадигми обраної вами мови залежить те, як ви будете підходити до вирішення задач. Наприклад, якщо ви вивчаєте ООП-мову, то при зіткненні з мовою з функціональною парадигмою ви витратите додатковий час, аби зрозуміти її і писати код по-іншому (наприклад перехід з Java на Scala).
Перспективи працевлаштування. Кожна мова має свої сфери використання – і ви маєте це враховувати, якщо плануєте після опанування МП шукати роботу. Інакше доведеться вчити нову, втрачаючи дорогоцінний час.
Напрямок розробки. Хоча найпопулярніші мови програмування є досить універсальними, все ж є напрямки, в яких вони цінуються найбільше. Наприклад, для Java – це Enterprise та мобільне розроблення, JavaScript – веб-розроблення, Python – BackEnd веб-розроблення, написання скриптів, нейронні мережі, C# - корпоративні додатки, бекенд та ігри на Unity, C/C++ - високонавантажені застосунки, Embedded розроблення тощо. Відповідно, якщо ви оберете JavaScript, то працювати за Embedded напрямком у вас не вийде – якісь бібліотеки для роботи з мікроконтролерами з використанням JavaScript ви, можливо, таки знайдете, але роботодавця – навряд чи. Навіщо забивати цвях монітором, якщо є молоток?
Пошук ментора та ком’юніті. У кожної МП своє ком’юніті та свої джедаї, що готові брати до себе юних падаванів. У популярних мов більша аудиторія, є гарні та детальні документації, легше знайти ментора – це дозволяє зручніше та швидше навчатися. У більш нішових МП ком’юніті скромніше, тому знайти практикуючого розробника, який візьме до себе учня, аби навчити його програмувати, а також знайти якісні гайди – ще ті задачі. Ментор важливий тим об’ємом знань та практичних навичок, які може вам передати: підказати, як правильніше робити, де ви помиляєтеся, на чому зосередити увагу. Ці поради пришвидшать ваше вивчення МП і дозволять швидше рухатися далі назустріч омріяній ІТ-спеціальності.
Стиль програмування. Пункт дуже схожий на 2-й, але якщо там справа стосувалася етики мови програмування, то тут мова більше про етику самого програміста. У різних мовах можуть бути різні правила написання коду, погоджені спільнотою програмістів. Тому опанувавши одну мову, ви можете зіштовхнутися з геть інакшою кодерською етикою при переході до іншої МП (як приклад – перехід із Go на Java).
Легкість пошуку відповідей. Чим популярніша мова, тим легше гуглити та шукати відповіді, оскільки багато інших розробників до вас цікавилися тими ж питаннями (високоймовірно). Однак якщо ви захочете використати мову в екстравагантних цілях – для яких вона не призначена – можуть виникнути проблеми з відповідями.
Перехід на іншу мову. Деякі технології та мови застарівають, і доводиться вчити новий стек. Наприклад, так сталося з мобільними iOS розробниками, котрі писали мовою Objective-C і були змушені перейти на Swift, оскільки компанія Apple так вирішила. Зважайте і на це при виборі мови.
Які мови обирають першими?
Раніше вивчення програмування починалося в школах з мов Pascal або Basic. Ці мови гарно підходять для знайомства з алгоритмічним підходом, структурами даних та фундаментальними концепціями програмування. Вони навчають грамотності та раціональному підходу до вирішення програмістських задач, але у комерційній розробці сьогодні майже не використовуються.
Наразі у школах дедалі більш розповсюдженими стають такі популярні мови, як Python та JavaScript (JS). Вони досить прості в опануванні і дозволяють швидко подолати відстань між початком навчання і отриманням справжнього кінцевого результату. Скрипт на JS взагалі можна написати за допомогою звичайного блокноту у Windows і запустити в будь-якому браузері – навіть встановлювати додаткове ПЗ не треба. Простіше кажучи, ці дві мови просто цікавіші та дають більше зручностей та можливостей, аніж Pascal або Basic.
Вивчення JavaScript та Python у школі має на меті зацікавити учнів програмуванням і показати, наскільки легко та просто це може бути, які можливості може дати вміння писати код.
Аби відчути силу тієї ж пайтон, можете глянути цікаву підбірку з 10 проєктів довжиною у 10 рядків коду за посиланням.
Таким чином, ці мови не тільки знайомлять з програмуванням, але й дозволяють максимально швидко влитися в ІТ і створювати сучасні застосунки.
Рейтинги мов програмування
Аби краще розуміти, які мови нині користуються попитом, розглянемо декілька відповідних рейтингів.
Індекс TIOBE
Перша десятка мов відповідно до індексу TIOBE (за січень 2023 року):
Python
C
C++
Java
C#
Visual Basic
JavaScript
SQL
Assembly language
PHP
Аналітика індексу TIOBE відштовхується від кількості кваліфікованих інженерів у всьому світі, а також від того, яка кількість курсів та сторонніх постачальників є наразі.
Індекс PYPL
Перша десятка мов відповідно до індексу PYPL (січень 2023 року):
Python
Java
JavaScript
C#
C/C++
PHP
R
TypeScript
Swift
Objective-C
Аналітика даного індексу вибудована навколо частоти пошуку туторіалів (навчальних матеріалів) з тієї чи іншої мови програмування у пошуковій системі Google.
Stack Overflow Developer Survey 2022
Тепер подивимось на опитування Stack Overflow Developer Survey 2022 (більше 70 000 опитаних з усього світу). На картинці нижче можна побачити, які мови найчастіше використовують ті, хто тільки вивчає програмування та ІТ (на двох картинках нижче продемонстровано не всі мови з рейтингу):
Найбільший попит серед новачків викликають мови верстання HTML & CSS (ними створюють візуальне оформлення веб-сайтів), а також мови програмування JavaScript та Python. Решта мов йде з відривом у більше 19%. Тобто, сучасні початківці все більше і більше відходять від класичних Java, C#, а також Pascal і Basic, обираючи більш прості мови, з якими швидше потрапиш в ІТ.
Наступна картинка показує, якими мовами найчастіше користуються професійні розробники:
На першому місці JavaScript – маст хев мова для створення клієнтської логіки веб-сайтів та веб-сервісів, далі йде HTML & CSS, мова запитів SQL для роботи з базами даних, вже відомий лаконічний Python, синтаксичний цукор для JavaScript – мова TypeScript (TS), класичні Java і C# та інші мови.
Рейтинг від GitHub
Аналітика нижче побудована на основі того, які мови найчастіше використовуються у проєктах, котрі публікуються на GitHub. Це найвідоміший ресурс для розробників, де вони розміщують свої проєкти, що дозволяє не тільки демонструвати свої розробки іншим, а ще й зручно вести командне розроблення.
В лідерах – JavaScript, Python та Java, за ними – строго типізована TypeScript, C#, C++ та інші.
Які мови найпопулярніші відповідно до цих рейтингів?
Дуже часто на перших позиціях стоїть Python. Це і не дивно – вона проста, лаконічна і має безліч бібліотек та модулів, які ще більше спрощують процеси створення застосунків і сприяють швидшому вирішенню задач. Основні сфери застосування: системне адміністрування, DevOps інженерія, оброблення даних, Big Data, Data Science (великі масиви даних), ML (машинне навчання), серверне веб-розроблення (BackEnd).
У зв’язку з припиненням підтримки пайтона версій 2.x (наразі підтримується лише 3.x), виникла потреба переписувати старий код (legacy) у відповідності до третьої версії – це створює додатковий попит на пайтон розробників.
JavaScript також вирізняється простотою та лаконічністю, але її основна сфера використання обмежена WEB-ом, хоча JS має достатньо засобів, аби нею вести зручне розроблення серверного ПЗ, мобільних та десктопних додатків тощо.
Рейтинг від Stack Overflow показав, що саме цим двом мовам програмування найчастіше віддають перевагу початківці.
TypeScript – це та сама JavaScript, але зі строгою типізацією та іншими фішками, котрі роблять код більш структурованим та зменшують кількість потенційних помилок.
Наступні позиції зазвичай займає Java – класична та універсальна мова, яка була створена наприкінці 20 століття, але яка при цьому досі популярна і затребувана. Найуспішніше себе зарекомендувала в кросплатформних застосунках, Enterprise (створення ПЗ для великого бізнесу), а також у мобільному розробленні, хоча її сфера застосування ними не обмежується. Також існує багато легасі коду на Java, який вимагає підтримки та оновлення, що створює додаткову затребуваність грамотних Java девелоперів.
Часто згадуються C/C++ - це корифеї серед сучасних мов програмування, часто вивчаються у ВНЗ. Складні в опануванні, але дуже потужні у використанні. Саме вони застосовуються у ресурсоємних застосунках, мікроконтролерах та інших додатках, яким важливо контролювати затрати пам’яті. Якщо хочете швидко потрапити в ІТ – C/C++ не варіант, але у якості мов для вивчення програмістської бази вони – те, що треба. Вивчивши «плюси», ви зможете з легкістю переходити на інші мови.
C# - популярна універсальна мова від компанії Microsoft, яка перш за все орієнтована на створення застосунків під ОС Windows, однак вихід платформи .NET Core дозволив створювати ПЗ і під інші популярні платформи. Найбільше застосовується у розробленні корпоративних застосунків, серверної сторони веб-додатків (BackEnd), ігор на Unity, десктопних додатків.
PHP – популярна мова для серверного веб-розроблення. Не дивлячись на її поважний вік, досі активно використовується у бекенді. Має своєрідний синтаксис і неоднозначне відношення зі сторони кодерської спільноти, хоча за своєю легкістю нагадує Python та JavaScript. Мовою PHP наразі написано багато legacy коду, тому окрім створення нових застосунків є потреба переписувати код іншими мовами.
SQL – класична мова запитів для маніпуляцій із даними. Використовується усіма розробниками, котрі працюють з реляційними базами даних, тому і має відносно високу популярність.
Bash/Shell – це командні оболонки для написання скриптів, котрі дозволяють автоматизувати виконання рутинних задач. Важливі інструменти в роботі системних адміністраторів та DevOps інженерів.
Які мови обирають українські розробники?
Також звернімося і до аналітики від DOU – спільноти професійних українських розробників, а саме – розглянемо зарплати українських девелоперів (зима 2023). Дізнаємось, які МП наші розробники використовують у якості основних:
Першими йдуть мови для створення фронтенду, оскільки майже весь веб FrontEnd створюється мовами JavaScript та/або TypeScript. За ними – універсальні мови C#, Java, Python та мова серверного розроблення PHP. Kotlin та Swift – це мобільне розроблення під Android та iOS відповідно. Далі йдуть менш популярні напрямки.
Таким чином, наразі більше 85% українських розробників-респондентів у якості основної МП використовують одну з восьми вищенаведених мов.
Тепер розглянемо медіанні зарплати українських розробників відповідно до МП, які вони використовують у якості основних:
Найбільш високооплачуваними для вітчизняних Junior розробників-респондентів є Ruby та C++. Але інші мови від них не сильно відстають. На рівень заробітньої плати також впливає навичка проходження співбесід, оскільки багато працедавців просто не вказують в оголошеннях конкретну суму, а отже, чим краще ви пройдете співбесіду, тим більшу суму вам зможуть запропонувати.
Динаміка зарплат для джунів за останні пів року:
JavaScript – не змінилася.
Java – на рівні грудня 2021.
C#/.NET – підвищилась на 50 USD.
PHP – знизилась на 50 USD.
Python – знизилась на 45 USD.
C++ - зросла на 100 USD.
Ruby/Rails – зросла на 125 USD (але кількість респондентів невелика, тому число може не відображати реальної ситуації).
Swift – підвищилась на 50 USD.
Kotlin – підвищилась на 100 USD.
TypeScript – підвищилась на 60 USD.
Кількість вакансій та відгуків в Україні
Розглянемо ще одну аналітику від DOU, яка стосується кількості вакансій та відгуків станом на грудень минулого року.
До деяких позицій наведемо мови програмування, котрі там використовуються:
Найбільше співвідношень відгуків до вакансій у FrontEnd (окрім JavaScript та TypeScript використовують ще мови верстання HTML & CSS) – конкуренція одна з найвищих на ринку ІТ.
Менше конкуренції у Java, Python, .NET – їхні сфери використання та мови вже розібрали вище.
Node.js – платформа для серверного розроблення мовою JavaScript або TypeScript.
Big Data та Data Science – у цих сферах найчастіше використовується Python.
iOS/macOS розроблення ведеться мовою Swift, рідше – Objective-C.
Flutter – це мобільне розроблення під Android та iOS мовою Dart.
Unity – створення ігор мовою C# на рушії Unity.
React Native – розроблення мобільних та десктопних застосунків мовами JavaScript & TypeScript.
Blockchain – розроблення за допомогою Java, Node.js, Golang, Rust та ін.
Android – створення мобільних додатків мовами Java & Kotlin (Kotlin – набагато затребуваніша тут).
DBA (Database Administrator) – розроблення ведеться мовою SQL, PL/SQL з використанням різноманітних СУБД (PostgreSQL, MySQL тощо).
Ruby – бекенд розроблення мовою Ruby.
DevOps – використовується мова Python, інструменти Bash/Shell.
Висновки
Тож яку мову програмування обрати у якості першої? Є три основні варіанти в залежності від того, яку мету ви перед собою ставите:
Якщо ви хочете опанувати програмістський фундамент, сформувати правильне алгоритмічне мислення, а вже потім орієнтуватися на більш прикладні речі – починайте свій шлях у програмуванні разом з Pascal, Basic або C++. Перші дві мови вивчаються ще в школі і закладають правильні кодерські звички, надійну базу, в той час як C++ - це значно складніша мова, котра зачасту розглядається в університетах, але вона також гарна у вивченні фундаменту. Варто відмітити, якщо ви будете успішні у C++, інші мови зможете дуже легко опановувати і швидко розвиватиметеся далі за конкретним напрямом розроблення. Цей варіант підійде тим, у кого є час (якщо йти шляхом Pascal, Basic) або ж тим, у кого є не тільки час, а й любов до викликів (C++).
Якщо ви хочете опанувати правильний програмістський фундамент, але прагнете вивчати мову, яка вже активно застосовується у розробленні і при цьому не потребує таких зусиль для вивчення, як більш складні C/C++ – обирайте між Java або C#. Це класичні мови, які навчать вас базі і при цьому будуть досить затребувані на ІТ-ринку ще довгий час, що дозволить відносно швидко знайти роботу. Це найкращий варіант з усіх трьох з точки зору компромісності між легкістю вивчення, швидкістю становлення в подальшому розробником і отриманням кодерської бази.
Якщо ви хочете максимально швидко потрапити в ІТ – зверніть увагу на JavaScript та Python. Вони легкі в опануванні, швидко вивчається синтаксис, ринок має досить багато вакансій під JavaScript. Також ці мови мають велике ком'юніті, тому матеріалів для вивчення ви знайдете вдосталь.
Багато хто хоче потрапити в ІТ саме через останній – третій варіант. Але в чому його недоліки? Почнемо з JS:
велика конкуренція (згадували під час розгляду аналітики);
надто велика варіативність – кожен розробник може писати код за своїми власними правилами і буде важко читати та розуміти логіку його роботи;
в інтернеті багато відповідей низької якості;
з джаваскрипту важче переходити на інші мови програмування, аніж навпаки;
значний шанс пропустити базові концепції програмування і високий ризик написання поганого коду.
У Python приблизно ті самі проблеми плюс наявність своєрідного синтаксису, який може плутати.
Це не означає, що дані мови – погані. Абсолютно кожна має як свої плюси, так і мінуси – і це нормально.
МП треба обирати, відштовхуючись від сфери, в якій ви збираєтеся себе реалізовувати. Тільки тоді цей вибір буде максимально вдалим і корисним для вас.
Коротенько резюмуючи: якщо вас цікавить розроблення веб-сайтів – всього того, що на стороні клієнта, ви хочете постійно бачити наочний результат своєї роботи, – обирайте JavaScript. Якщо цікавить кросплатформне ПЗ, Enterprise або мобільне розроблення під Android – вчіть Java (у мобільному розробленні потім довчите Kotlin). C# - гарний вибір для тих, хто хоче працювати з інструментами від Microsoft, створювати корпоративні застосунки, BackEnd веб-додатки, ігри, десктопні додатки під Windows. Python – незамінний у автоматизації рутинних задач, популярний у роботі з великими даними, BackEnd-ом, штучним інтелектом. Ці 4 мови покривають досить великий відсоток ІТ-спеціальностей, тому обравши одну з них ви не прогадаєте.
Де можна вивчити мови програмування? Наші курси допоможуть кожному, хто збирається вивчати популярні мови програмування та супутні технології. Портал ITVDN налічує понад 230 відео курсів та має власні програми навчання за 15 найпопулярнішими IT-професіями, серед яких:
Верстальник сайтів
FrontEnd Developer
Java Developer
Python Developer
C# / .NET Developer
Android Developer
Unity / Game Developer
PHP Developer
та інші.
Навчання відбувається у форматі записаних відео курсів – ви можете навчатися у той час, який є для вас комфортним. З усіма спеціальностями можна детально ознайомитись, перейшовши на сторінку спеціальностей ITVDN.
Якщо вас цікавить вивчення тільки мови програмування, відповідні курси ви знайдете у нашому каталозі.
Бажаємо успішного навчання та досягнення ваших амбіцій в ІТ!
Як вибрати свою першу мову програмування: інструкція від HR
Автор: Вікторія Чабан
Якщо ти плануєш увійти в ІТ і не знаєш, з чого почати — ця стаття для тебе. Вибір першої мови програмування схожий на вибір першого велосипеда: важливо, щоб підходив саме тобі, а не був «наймоднішим». У ролі кар'єрного консультанта та HR я спираюсь на реальні кейси студентів і запити компаній. Ось чіткий та короткий план, який допоможе обрати першу мову грамотно.
🎯 Крок 1. Визнач свою цільову сферу
Запитай себе: що саме я хочу створювати? Це головний орієнтир.
🧑💻 FrontEnd (веб-сайти, інтерфейси) → JavaScript, далі можна додати TypeScript, React
📱 Мобільні додатки → Kotlin (Android), Swift (iOS), або React Native
📊 Аналітика, машинне навчання, ШІ → Python
🏦 Корпоративні рішення, банківські системи → C# / .NET або Java
🧪 QA Automation (автотести) → Python, Java, JavaScript
💡 Порада: якщо не визначився — обирай універсальну мову для старту, наприклад, Python або JavaScript.
📊 Крок 2. Перевір актуальність на ринку
За даними DOU та Djinni (станом на 2025 рік), топ-5 мов за кількістю вакансій:
JavaScript / TypeScript
Python
C#
Java
PHP
JavaScript домінує завдяки своїй універсальності (веб, мобайл, backend).
Python — лідер у сфері ШІ, автоматизації та наукових обчислень.
C# / .NET — улюблене рішення для бізнесу в Україні та Східній Європі.
Java — база для багатьох міжнародних проєктів, особливо у банках та ентерпрайз-продуктах.
🔍 Працювати з мовою, яка має стабільний попит — логічний крок для першої роботи.
👶 Крок 3. Почни з доступної до навчання
Навіть найкрутіша мова нічого не дасть, якщо ти не зможеш її зрозуміти. Ось три мови, які найкраще підходять для старту:
Python — простий синтаксис, читається як англійська, популярний у всіх сферах.
JavaScript — швидкий результат (можна написати код і одразу побачити на екрані).
C# — добре структурований, допомагає швидко зрозуміти основи ООП.
🧠 Якщо тебе лякає синтаксис або ти сумніваєшся — подивись безкоштовний вступний курс. На ITVDN є 3 безкоштовних уроки, які допомагають обрати напрям без ризику.
🔮 Крок 4. Дивись на перспективу
Програміст не вчить лише одну мову на все життя. Але перша створює базу. Після неї буде легше вивчити інші.
Якщо мрієш стати FullStack-розробником — комбінуй JavaScript (FrontEnd) + Node.js або C# (BackEnd).
Хочеш піти в Data Science — починай з Python, а далі додай бібліотеки як Pandas, NumPy, TensorFlow.
💡 Висновок
Не існує «ідеальної» мови для всіх. Вибір має бути практичним:
✅ під твої задачі
✅ з урахуванням попиту
✅ з урахуванням складності на старті
🎓 Обирай шлях, який не лише приведе до першої роботи, а й зробить навчання цікавим. І пам’ятай: важлива не мова, а твоє бажання вчитися!
Швидко вчимося рахувати у двійковій та шістнадцятковій системі
Автор: Костянтин Чорний
Вступ
Іноді виникає потреба швидко прочитати чи записати числа у двійковій чи шістнадцятковій системі числення, наприклад, працюючи з різними байтовими редакторами, під час розрахунків формул з побітовими операціями чи роботі з кольором. Часто в таких ситуаціях немає можливості довго переводити числа за допомогою формул або калькулятора. Про швидкі способи переходу між системами числення йтиметься у цій статті.
Перехід від десяткової системи до двійкової
Перший випадок – рахуємо від десяткової системи до двійкової. Основне, що потрібно пам'ятати в даному випадку – це ряд ступенів двійки (1, 2, 4, 8, 16, 32, 64, 128 і т. д.). Навіть якщо його ви не знаєте, то можна просто кожне наступне число множити на двійку. Оскільки молодші розряди йдуть праворуч, а старші – ліворуч, то їх записуватимемо у зворотному порядку справа наліво.
Для прикладу будемо переводити число 115. Далі дивимося, якщо значення розряду вміщується в число, то віднімаємо від нього це значення і ставимо в цьому розряді 1, інакше ставимо 0.
Зворотний переклад ще простіше – треба підсумувати всі значення розрядів, які відзначені одиничками: 64+32+16+2+1=115.
Перехід до шістнадцяткової системи
Тепер давайте розберемося із шістнадцятковою системою. Маючи на увазі те, що кількість чисел, які кодуються тетрадою (4 біти) і одним шістнадцятковим символом співпадають, відповідно кожен символ кодує одну двійкову тетраду.
В результаті одержали число 0х73. Головне пам'ятати, що А=10, B=11, C=12, D=13, E=14, F=15.
Якщо є потреба перевести десяткове число в шістнадцяткове або навпаки, то тут найпростіше спочатку буде перевести число в двійкове уявлення, а потім тільки в шістнадцяткове або десяткове відповідно.
У результаті ми навчилися швидко переводити числа з однієї системи числення до іншої. Головне, що потрібно пам'ятати – ступені двійки і вміти гарно додавати та віднімати. Детальніше про машинну математику ви можете дізнатись у другому уроці курсу C# Стартовий.
Попрактикуйтеся самостійно і переведіть кілька чисел з однієї системи до іншої, звіряючись з калькулятором. Трохи практики – і ви всьому навчитеся.
Яку мову програмування варто вивчити першою?
Автор: Редакція ITVDN
Введение
«Новичку в сфере IT стоит знать одно простое правило программирования — это написание очень тонких инструкций для глупой, но послушной машины».
Среди массы различных языков программирования новичку в IT очень сложно выбрать направления для дальнейшего развития, потому что каждый язык занимает определенную ячейку. Наиболее популярные, языки в "современном программировании", это: Java, Python, Objective-C, PHP, C, C++, C#, JavaScript и Ruby. Форумы и специализированные сайты переполнены тематикой «Что выбрать?» и «Куда развиваться?». И мы нашли оптимальную схему выбора ветки развития юным программистам.
С чего начать изучение программирования?
Итак, с чего же стоит начать? В первую очередь ответьте предельно честно самому себе на главный вопрос: «Почему Вы хотите начать изучать программирование?». Ответов много, а предпосылок еще больше, но если провести анализ, то мотивов стать разработчиками несколько.
Деньги
Часто, наиболее распространенной причиной изучения программирования служит мнение о том, что программисты много зарабатывают. Да, это действительно так. Зарплаты хороших программистов могут заставить позавидовать даже некоторых менеджеров высшего звена. Но это достигается годами упорного труда, само мотивации и углубления в современные информационные технологии. Кроме того, дабы получать по-настоящему достойную зарплату, стоит сразу нацеливается на работу в хорошей крупной компании. Или же иметь идею на миллион и открывать свой start-up.
Перспективы
Казалось бы, относительно недавно стоило появится первом персональному компьютеру – и нате Вам! – программисты стали одними из наиболее востребованных работниками современного рынка. Действительно, наш век – это век информационных технологий, быстроразвивающийся и динамический. Сейчас спрос на специалистов IT-сферы растет как никогда, и вряд ли стоит ждать на него спад. Все больше и больше современных компаний готовы предложить «теплое местечко». Сколько их – Google, Microsoft, EPAM прочие.
Динамичность
Каждому человеку присуща толика любознательности. Но есть люди, у которых страсть изучать что-то новое просто в крови! Что же, в таком случае программирование – это именно то, что вам нужно. На данный момент существуют десятки различных направлений: мобильная разработка, настольные приложения, веб-программирование, игры, сколько их… А уж сколько для этих направлений было разработано технологий и программ – не счесть. Работая в сфере IT вы можете быть уверенным, что никогда не дадите себе заскучать!
Итак, раз мы разобрались с нашими мотивами и разложили все по «полочкам», приступим же непосредственно к выбору первого языка программирования!
Какой язык программирования выбрать?
Теперь, самый важный вопрос: так какой же язык программирования стоит выбрать новичку в сфере IT? Прежде всего, все зависит от того, что именно вы желаете изучать.
Вот график наиболее востребованных направлений области информационных технологий:
Как мы можем видеть, список внушительный. Но что из этого вас прельщает больше всего? Давайте попробуем разобраться.
Я бы хотел разрабатывать сайты
С этим направлением не все так просто. Есть Front-End разработка сайтов – это все, что вы видите на экране. Создание веб-страниц, программ для них, стилей и много чего прочего. В таком случае вам стоит обратить свое внимание на JavaScript и HTML & CSS. А есть Back-End – разработка непосредственно программ для серверов – тех алгоритмов, которые, собственно говоря, и будут управлять страницами, сайтом и прочим. Здесь все несколько сложнее, так как сразу же появляется хороший выбор из Python, Java, C#, и PHP. Каждый из этих языков обладает как серией достоинств, так и набором откровенных недостатков. В качестве этакого старта советуем рассмотреть Python.
Настольные приложения для домашних ПК
Тут бесспорными лидерами выступают такие популярные языки, как Java и C#. С одной стороны, обучение Java несколько проще и быстрее, чем C#, с другой, набор возможностей, которыми может похвалится C#, на порядок выше.
Работа с базами данных
Ну, тут все однозначно: следует начинать с SQL! Администрирование, работа с реляционными базами данными и прочее, что так необходимо в современно IT-мире. Здесь можно рассмотреть вступление в язык запросов.
Игры-игры-игры!
Геймерами не стают, ими рождаются. Наслаждаетесь современными продуктами игровой индустрии и сами бы хотели привнести что-то в этой увлекательный виртуальный мир? Тогда, определенно, вам стоит обратить свое внимание на С++.
Здесь можно посмотреть статистику языков программирования по популярности:
Статистика поиска соискателей по языкам и платформам:
Какой самый простой язык программирования?
Если начинать изучать, что начинать с простого, не так ли? Итак, вот небольшой даждест «для чайников» с чего, собственно, стоит начать обучение.
JavaScript
Один из наиболее легких языков программирования для веб-разработки. Динамическое наполнение web HTML страниц, целый комплекс технологий семейства React.JS, Node.JS и прочих, обилие библиотек и обучающих материалов + плюс, огромное комьюнити. Отличный старт для новичка в области IT! Вот вступление в видео-курс по JavaScript.
Python
Очень легкий и приятный в освоении интерпретируемый язык универсального назначения. Обширное количество довольных пользователей, огромное количество вакансий на мировом рынке, поддержка большинством сред разработки и наличие специализированных сред разработки. Ознакомится с данным языком можно здесь.
PHP
PHP – или Hypertext Preprocessor – достаточно мощный и, в то же время, легкий в освоении язык программирования для разработки серверной части веб-сайта. Имеет богатую историю и может похвалится хорошей базой различных библиотек. Ознакомится с ним вы можете здесь.
Самый сложный язык программирования
Быть может, вы уже имели определенный опыт, связанный с IT, и желаете попробовать себя в более «продвинутой» песочнице? Или вы не из тех, кто хочет изучать что-то простое, а сразу брать «быка за рога»? Что же, на этот случай мы можем предложить следующее:
Java
Отменный компилируемый язык программирования для решения целого спектра задач – от написания настольных приложений до создания серверных программ для веб-сайтов. Имеет мощную аудиторию поклонников, богатую историю, корни которой простираются в самые 90-стые и множество библиотек для практически любой задачи. Начать изучение этого языка можно здесь.
С#
Язык программирования от компании Microsoft универсального назначения. Java показалась простой? Тогда C# для вас! Имеет практически идентичный с Java синтаксис, но отличается расширенном набором функций и производимых операций. WPF для оконных приложений, ASP.NET для разработки сайтов и прочие высококачественные фреймворки для всех типов задач. Что может быть лучше, чем инструмент на все случаи жизни? Приступить к работе с этим языком можно здесь.
C++
Легенда программирования. Универсальный язык программирования, возможности которого воистину не имеют ограничений. Низкоуровневая работа с памятью, разработка систем рендеринга для игр, отличная производительность и неисчерпаемый набор библиотек… С++ - это наиболее быстрый и оптимизированный язык программирования из всех существующих. Но его изучение потребует особенной усидчивости и трудолюбия. Сумеете ли вы с ним совладать?
Языки программирования, какой самый оплачиваемый?
Один из самых востребованных и высокооплачиваемых на рынке языков программирования - это Java. Очень популярен на всех платформах, ОС и устройствах, благодаря своей кроссплатформенности. Используется в Gmail, Minecraft, большинстве Android приложений и в корпоративных приложениях.
С - это «лингва франка» среди всех языков программирования. Один из самых старых и самых широко используемых языков в мире. Отлично подходит для системного и аппаратного программирования. Он используется в ОС и оборудовании.
С# был создан на платформе Microsoft, но совсем недавно вышел на open source. С# - это популярный выбор предприятий для разработки разнообразных web-сайтов и Windows приложений, используя .NET framework. С# используют для создания web сайтов при помощи web фреймворка от Microsoft – ASP.NET. Своим синтаксисом и функционалом похож на Java. Используется в корпоративных и Windows приложениях.
Objective-C является основным языком, используемый Apple для Mac OS X и iOS. Его стоит изучать, если Вы собираетесь разрабатывать только под OS X и iOS. Стоит задуматься над изучением Swift, как о следующем языке. Objective-C используется в большинстве iOS приложений и в части Mac OS X.
C++ - это более сложная версия языка программирования С, с существенно расширенным набором возможностей. Широко используется при разработке игр, промышленных и высокопроизводительных приложений. Изучать С++ - все равно что изучать, как производить, собирать и водить машину. Этот язык не рекомендуется для самостоятельного изучения и требует наличие ментора. Он широко используется в ОС, оборудовании и браузерах.
На самом деле, абсолютно не важно, с чего именно Вы начнете Ваш путь в сфере IT. Нужно знать хотя бы несколько основных языков и технологий, чтобы познать все аспекты программирования. А самое главное - начать!
150+ питань з .NET для Junior, Middle та Senior
Автор: Редакція ITVDN
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 10 ноября 2020 года. Оригинальная версия на украинском языке доступна по ссылке.
На DOU размещено более 450 вакансий для .NET-разработчиков, что свидетельствует о популярности этой технологии. Редакция DOU собрала вопросы, которые .NET-разработчики задают своим коллегам на технических собеседованиях. Готовьтесь на здоровье :)
Вопросы для Junior
Общее
1. Назовите основные принципы ООП.
2. Что такое наследование, инкапсуляция, абстракция, полиморфизм: приведите примеры (желательно из собственного опыта). От какого класса неявно наследуются все классы в .NET? Разрешено ли множественное наследование в C#?
3. Что такое рекурсия?
4. Что такое лямбда-выражение?
5. Что такое параллельное программирование (многопоточность) и его назначение? Какие классы используются?
6. Что такое JSON?
7. Как вы понимаете REST?
8. Расскажите о SPA concept.
9. Какие GoF-паттерны использовали?
10. Какая разница между GET и POST HTTP методами?
11. Какую проблему решает Docker? Каковы его плюсы и минусы?
12. Чем принципиально отличаются unit-тесты от интеграционных тестов?
Обработка исключений
13. Что такое Exception?
14. Для чего служат try, catch, finally? В каком случае может не выполниться блок finally?
15. Что такое call stack? Какие ключевые слова вы знаете?
Платформа .NET
16. Что такое ASP.NET?
17. Какие существуют типы Action filters?
18. Что такое Web Service?
19. Что такое CLR?
20. Что такое сборщик мусора (Garbage Collector) на базовом уровне?
21. Что такое делегат?
22. Отличается ли Delegate от Action?
23. Что такое LINQ и для чего используется? Приведите несколько примеров применения LINQ.
24. Что такое пространство имен (namespace) и зачем это нужно?
Типы данных, коллекции и структуры данных
25. Какие типы данных вы знаете?
26. Какие примитивные типы знаете?
27. Что такое Nullable-тип?
28. Что такое тип значения, а что такое тип ссылки? Что из этого class, а что struct? В каком участке памяти они хранятся?
29. Чем отличаются value от reference type? String - это reference или value?
30.В чем отличие между string builder и string?
31. Что такое дженерики? Какие проблемы они решают?
32. Что такое boxing / unboxing?
33. Что такое Array, List, HashSet, Dictionary? Приведите примеры использования этих структур данных. Какая сложность операций с ними (поиск, вставка, удаление)?
34. Какие знаете коллекции?
35. Что делает оператор yield?
Классы, структуры и интерфейсы
36. Что такое класс?
37. Чем отличается класс от абстрактного класса?
38. Чем отличается абстрактный класс от интерфейса? Для чего нужны интерфейсы и какие задачи они выполняют?
39. Какие вы знаете модификаторы доступа?
40. В чем разница между обычным классом и статическим?
41. В чем разница переопределения метода между ключевыми словами new и override?
42. Какое различие между const и read only?
43. Разница между структурой и классом. Приведите примеры структур.
44. Может ли экземпляр структуры храниться в куче (heap)? Как это сделать?
Асинхронность
45. Что такое асинхронность и чем она отличается от многопоточности?
46. Какие есть ключевые слова для использования асинхронности в коде?
47. Что означают ключевые слова async / await?
Базы данных
48. Разница между реляционными и нереляционными базами, плюсы и минусы использования обоих вариантов.
49. Что такое индексы в RDBMS?
50. Какие типы JOIN существуют в SQL?
Тестирование
51. Для чего нужны unit-тесты?
52. Какие преимущества и недостатки использования unit-тестов?
53. Из каких трех логических блоков состоит unit-тест?
Вопросы для Middle
Общее
54. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время на HTTP-уровне?
55. Как работает HTTPS?
56. Как вы понимаете SOLID?
57. Какие протоколы сериализации вы знаете и где они применяются?
58. Что такое в вашем понимании чистая функция? Какие у нее преимущества?
59. Что такое dependency injection и зачем оно нужно?
60. Что такое cohesion и coupling (связанность и связность)?
61. Что такое IaaS, PaaS, SaaS и каковы различия между ними?
62. Какие способы отладки программы вы используете?
63. Какие знаете паттерны? Объясните суть перечисленных.
64. В чем суть паттерна Singleton? Почему его еще называют антипаттерном?
65. Для чего нужен паттерн Strategy?
66. Какие ключевые различия между распределенными системами и монолитными?
67. Какие паттерны проектирования распределенных систем вы знаете?
68. Какие есть принципы работы Message bus? Почему могут возникать дубликаты в очередях?
69. Какие принципы построения идемпотентных сервисов знаете?
70. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?
Платформа .NET
71. Какие исключения нельзя остановить в блоке catch?
72. Какая разница между .NET Standard Class Library и .NET Core Class Library?
73. Объясните разницу между отложенным и немедленным исполнением в LINQ. Приведите примеры.
74. Для чего нужен метод ConfigureServices в Startup.cs?
75. Какая разница между services.AddTransient и services.AddScope в ASP.NET Core?
76. Что такое Kestrel?
77. Опишите ASP.NET MVC request pipeline.
78. Как в ASP.NET WebAPI настроить кэширование ответов на HTTP-запросы?
Управление памятью
79. Что такое куча и стек? Различия, принцип работы.
80. Как работает сборщик мусора?
81. Зачем нам зарезервированное слово using в C#, если в .NET есть автоматическое управление памятью? Как с этим связан disposable-паттерн и зачем такой сложный паттерн для managed и unmanaged ресурсов?
82. Какие особенности работы с Large Object Heap?
Типы данных, коллекции и структуры данных
83. Когда генерируется дженерик-класс конкретного типа - при выполнении программы или во время компиляции?
84. Что такое рефлексия?
85. Расскажите о коллекции LinkedList <T>. Чем она отличается от других коллекций?
86. Что такое индексатор?
87. Что такое immutable object? Какие преимущества дает использование immutable object? Предложите способ реализации его в .NET.
88. Когда использовать StringBuilder, а когда string? Как работает StringBuilder?
89. Что такое балансирование деревьев?
90. Что такое Key-value структуры?
100. Что такое хэш-функция и зачем нужны хэш-таблицы?
101. Какими свойствами должна обладать идеальная хеш-функция?
102. Что такое коллизии и как с ними бороться?
103. В чем заключается сложность CRUD-операций в Dictionary <K, V> в .NET?
104. Где хранятся массивы? Массивы примитивных типов?
105. В чем отличие между массивом (T [ ]) и списком (List <T>)?
106. В чем разница между IList <T> и IEnumerable <T>?
107. Зачем нужны Enumerable, Observable, AsyncEnumerable и какие модели получения данных они реализуют?
108. В чем разница между IEnumerable и IQueryable?
109. Что такое enum flags?
Базы данных
110. Расскажите о нормальных формах в СУБД.
111. Что такое индекс в БД?
112. Когда следует использовать индексы? Преимущества и недостатки.
113. Какие типы индексов существуют? Чем они отличаются?
114. Что такое ACID?
115. Какие вы знаете уровни изоляции транзакций?
116. Что такое план выполнения запроса (execution plan) в MS SQL?
117. Проблема: запрос долго выполняется. Какие есть методы ее диагностики и решения?
118. Как ORM (Entity Framework или Entity Framework Core) транслируют C# код в язык запросов базы данных? Что для этого используется?
Параллелизм
119. Для чего использовать Task.ConfigureAwait?
120. Например, есть веб-сервер, который по HTTP-запросу делает выборку из базы данных. Всего на сервере 16 тредов (threads). Каждый HTTP-request выполняет запрос в базу и ожидает результатов, в этом случае тред блокируется. Можно ли оптимизировать эту работу средствами .NET?
121. Зачем нужен ThreadPool? Опишите механику работы: как поток выделяется и возвращается обратно в ThreadPool.
Вопросы для Senior
Общее
122. Какие ещё практики, кроме ООП, использовали (AOP, FP и т. д.)?
123. Назовите три самые сложные проблемы, которые вам приходилось решать. Как вы это сделали, как пришли к этому решению?
124. Что такое слабосвязанный код? Чем он лучше сильносвязанного кода? Как бы вы достигали более слабой связности кода?
125. Использование статических классов повышает или понижает связность кода?
126. Как можно измерить performance кода? Влияет ли факт замеров на производительность?
127. Для чего используются и как работают multi-stage билды в Docker?
128. Как понять, что какая-то часть кода утилизирует много памяти или долго выполняется? Что может быть ботлнеком в разных случаях? Какие есть способы уменьшения памяти и трафика памяти?
129. Как бы вы реализовали cross-cutting concern (например, логирование, валидация, транзакции)?
130. Расскажите о Rest Maturity Model.
131. Что такое CPU и IO-bound задачи?
132. Что такое маршалинг?
133. Как работает async / await (подробно)? Почему нельзя использовать async void методы?
Платформа .NET
134. Как работает lock? Можно ли использовать структуры внутри выражения lock?
135. Что такое Expression Tree?
136. Как работает сборщик мусора (подробно)? Почему в GC три поколения, а не, скажем, пять, десять или два?
137. Как бы вы организовали трассировки Web API сервисов?
138. Как в .NET Core можно настроить хранение секретов на компьютерах разработчиков и на рабочих средах?
139. Как бы вы организовали процесс CI/CD .NET Core сервисов для их деплоймента в облачную инфраструктуру?
140. Как включить CORS в AspNetCore?
Типы данных, коллекции и структуры данных
141. Как реализованы дженерики?
142. Как создать собственный immutable-тип?
143. Как работает IEnumerable <T> (подробно)?
144. Какой алгоритм использует коллекция STACK?
145. Какие структуры данных вы реализовывали сами для платформы .NET? Расскажите, чем они отличались от стандартных реализаций.
146. Чем отличается интерфейс от абстрактного класса? В каких случаях вы использовали бы и то, и другое?
147. Почему в структуре нет конструктора по умолчанию?
Базы данных
148. Как БД сохраняет данные?
149. Какие типы БД вы знаете?
150. Как и когда БД лучше использовать?
151. Что такое денормализации?
152. Когда и какие уровни изоляции транзакций можно использовать?
153. Как в популярных СУБД реализованы принципы ACID (SQL Server, PostgreSQL и т. д.)?
154. Приходилось ли вам оптимизировать запрос в БД? Если да, то как?
155. Опишите, какие вы знаете потенциальные проблемы, связанные с параллельными запросами к БД.
156. Какую базу данных вы бы использовали для реализации distributed lock механизма? Расскажите детали реализации.
Микросервисы
157. Какую проблему решают микросервисы?
158. Какие есть способы коммуникации микросервисов?
159. Расскажите варианты реализации распределенных транзакций в микросервисах.
160. Что такое circuit breaker?
161. Каким образом вы будете налаживать систему, состоящую из множества микросервисов, если нужно отследить полный путь обработки запроса?
162. Что такое брокеры сообщений? Что такое at-least-once, at-most-once семантика? Есть ли какие-то брокеры, которые гарантируют exactly-once семантику?
163. Как должен работать код клиента брокера в зависимости от выбранной семантики?
164. Какие инструменты для работы с очередями вам известны (как в .NET, так и отдельные продукты), какой инструмент/продукт вы бы выбрали и почему?
MS Azure
165. Какие виды сервисов бывают в Service Fabric?
166. Какие особенности и ограничения Azure Table Storage?
167. Как бороться с проблемой холодного старта в Azure Functions?
168. В чем отличие очередей и топиков в Azure Service Bus?
Практические задания
Junior only
Опишите, как бы вы реализовали калькулятор. Если понадобится добавить поддержку для римской системы счисления, что будете делать?
Напишите программу, чтобы проверить, является ли число простым или нет.
Найдите наименьший элемент в массиве.
Упорядочите структуры папок в файловой системе.
Напишите программу, которая симулирует fizz-buzz.
Расскажите, что делает этот код, и предложите, как его улучшить.
а)
public bool IsArrayEmpty(string[] array)
{
if (array.Length > 0)
return false;
else
return true;
}
б)
protected string GetClass(object url)
{
string result = string.Empty;
if (SiteMap.CurrentNode != null && SiteMap.CurrentNode.Url == url.ToString())
result = "class=\"active\"";
return result;
}
Middle
Напишите программу для тиражирования последовательности Фибоначчи для заданного числа.
Спроектируйте базу данных врачей и пациентов в SQL. Создайте stored procedure или запрос в SQL, который вернет врачей, имеющих больше, чем N пациентов.
Проверьте коллекцию на наличие дубликатов.
Спроектируйте thread-safe класс Singleton в C#.
Надо записать некую сущность в базу данных и отправить событие в брокер сообщений. Как это сделать с минимальным риском потери данных?
Имеются три сервиса. Выполняется HTTP-запрос на первый. Первый должен записать данные во второй, а второй - в третий. Как гарантировать, что данные при такой сложной коммуникации не потеряются? Как предотвратить записи дубликатов данных?
Будет ли работать этот код и почему?
a)
SomeClass myClass = null;
myClass.SomeMethod();
б)
var table = GetTable();
table.Draw();
…
private SomeClass GetTable()
{
using(var table = new SomeClass())
{
table.ID = "www";
table.Width = "95%";
table.Controls.Add(tr);
return table;
}
}
Расскажите, что делает этот код, и предложите, как его улучшить:
а)
Shape shape = GetNextShape();
if(shape is Circle)
Console.WriteLine(((Circle)shape).Radius);
б)
public int Quantity
{
get
{
try
{
return int.Parse(TxtQuantity.Text);
}
catch (Exception)
{
return 0;
}
}
}
Что не так с кодом?
try
{
SomeMethod();
}
catch(Exception e)
{
Log(e.Message);
throw e;
}
Senior
Как бы вы спроектировали FTP-сервер? Web-сервер? Хостинг картинок с разделением прав доступа? Систему, состоящую из front- и back-офисов? Создайте клон любой популярной социальной сети (Instagram, Facebook и т.д.)
Допустим, есть сущность сделки (Bid). И в сделке есть список партнеров, с которыми эта сделка заключается. Сами сделки хранятся в сервисе сделок (bidding service), а партнеры - в своем сервисе (partners service). И когда показывается список сделок, на начальном скрине нужно отразить количество партнеров. Как бы вы спроектировали хранение и изображение этого счетчика?
Задача на знание LINQ: с исходной коллекции данных необходимо получить новую коллекцию по определенным требованиям (например, отсортированную, без дубликатов и т. д.).
Напишите программу, которая проверяет, является ли поле судоку 9×9 правильно заполненным.
Реализуйте свой Select, Where, SelectMany со всеми характеристиками LINQ (отложенное исполнение, одномоментная (eager) проверка входных данных).
С помощью LINQ напишите метод, который вернет такие элементы коллекции, которые делятся на N без остатка, отсортированные от наибольшего значения к наименьшему. Сигнатура метода: List <int> Filter (IEnumerable <int> collection, int n) ;.
Напишите функцию, которая вернет сумму всех четных элементов массива, который передается в функцию (JavaScript).
Выражаем благодарность за подготовку статьи Алексею Краевому, Максиму Шнуренку, Андрею Ткаченку, Владу Медведовскому, Сергею Селецкому, Андрею Губскому, Сергею Мащуренку, Александру Скриннику, Андрею Соболю, Богдану Нановскому, Святославу Аксёнчикову, Ивану Корнелюку, Михаилу Пивоварову, Алексею Дерке, Евгению Гуреву, Михаилу Меркулову, Юрию Воронину.
Популярні мови програмування на 2019 рік
Автор: Армен Маїлян
Планируя новые вехи для своего образования, полезно оценить их полезность относительно запросов общества в целом и вашей сферы деятельности – в частности.
Для разработчиков программного обеспечения, как начинающих - выбирающих для себя первый язык программирования, так и опытных – выбирающих второй, третий (и тд.) язык для изучения, важно понимать востребованность этого языка на рынке. Владеть современным языком, поддерживающим большинство актуальных парадигм и технологий очень важно. Но важно и чтобы такой язык предоставлял достаточный выбор вакансий при поиске работы. Рассмотрим несколько авторитетных рейтингов, составленных для языков программирования по результатам 2018 года.
1) Популярные языки программирования на 2019 по рейтингу TIOBE
Индекс TIOBE (TIOBE programming community index) - это один из известных индексов, показывающий степень востребованности языка программирования, анализируя данные запросов в поисковых системах. Обновляется данный индекс каждый в месяц. Рейтинг учитывает как количество квалифицированных инженеров во всем мире, так и количество образовательных курсов по различным языкам. Для расчета индекса TIOBE используются данные результатов поиска в популярных поисковых системах, полученных в Google, YouTube, Wikipedia, Bing, Yahoo !, Baidu, и Amazon. Важно отметить, что индекс TIOBE не называет победителя рейтинга - лучшим языком программирования или языком, на котором написано большинство строк кода. Детальнее с методикой получения этого индекса можно ознакомиться тут.
На первом месте продолжает оставаться Java. Однако, несмотря на то, что в сравнении с декабрем 2017 его позиции поднялся на 2.66, из графика, представленного ниже, видно – показатели этого языка падают после пика популярности в октябре 2018.
Второе место занимает язык C, имея 14.282% в рейтинге. Третье место получил Python с 8.376%, сместив в этом рейтинге популярности С++. Позиция Python выросла по сравнению с декабрем 2017 и продолжает расти. Язык С++, в свою очередь, уступив третье место, занимает сейчас четвертое. Его популярность, как видно из графика, колеблется относительно 8%, имея на декабрь 2018 - 7.56%.
Интересной особенностью этого индекса оказывается то, что Visual Basic .NET в настоящее время находится на пятой позиции с рекордно высоким для данного языка уровнем. Это очень неожиданно, ведь профессиональные разработчики программного обеспечения крайне мало используют Visual Basic.
Стоит отметить, что язык SQL снова добавлен в индекс TIOBE с февраля 2018 года. Вследствие этого, для языка SQL нет недавней истории, и может показаться, что значимость SQL растет очень быстро.
2) Статистика GitHub по языкам программирования за 2018 год
Статистика использования языков программирования на площадке GitHub показывает, что лидером по применению продолжает быть язык JavaScript. Он остается бессменным лидером и в частных репозиториях, и в публичных, а также лидирует в репозиториях организаций всех размеров вне зависимости от региона расположения во всем мире.
На втором месте, также без изменений значимости, находится Java. Третье место занимает Python, чья популярность, благодаря применению его в системах машинного обучения, выросла в 1.5 раза. Четвертое и пятое место соответственно занимают, PHP и C++.
По сравнению с предыдущим годом можно отметить стремительный рост применения языка TypeScript – благодаря частоте его применения, в рейтинге он поднялся с 10 места на 7.
Заметным оказалось падение популярности языка С. В этом году он «провалился» сразу на два пункта, занимая сейчас 9 место.
Популярность Ruby падает. Начиная с 2015 года этот язык на GitHub последовательно «сползает» с 5 места на 10 в 2018 году.
Стоит также отметить существенный рост частоты применения языка Kotlin. Несмотря на то, что он пока не входит в десятку - за 2018 год частота его использования в проектах выросла в 2.6 раза.
3) Рейтинг языков программирования на Stackoverflow по результатам 2018 года
Согласно данным опроса Stack Overflow’s 2018 Developer Survey, проводимого уже восьмой год среди более чем 100 000 разработчиков, есть несколько тенденций, которые отмечают редакторы самого StackOverflow:
DevOps и машинное обучение являются сегодня важными тенденциями индустрии программного обеспечения. Языки и структуры, связанные с этими видами работ, находятся на подъеме, и разработчики, работающие в этих областях, получают самые высокие зарплаты.
Python поднялся в рейтинге языков программирования, превзойдя C# по популярности в этом году, так же как он превзошел PHP в прошлом году.
JavaScript, согласно данным StackOverflow, остается лидирующим языком среди использованых разработчиками. Следующим после JavaScript является SQL, занимающий второе место. Затем идут Java, Bash, Python, занимающие соответственно третье, четверное и пятое места.
Кроме этих, озвученных результатов опроса, мы можем увидеть и другие тенденции среди языков из первой десятки.
Из графика количества вопросов на StackOverflow по различным языкам программирования видно, что уровень интереса к Python не перестает расти, как это уже было сказано выше. Это происходит на фоне некоторого снижения количества вопросов по таким языкам как PHP, C++, Java, C#.
Имеет смысл рассмотреть также позиции языков Objective-C и Swift в контексте разработки под iOs. Заметно, что популярность Objective-C стабильно падает. Swift уже сейчас занимает 12 место среди языков, получив 8.1% в рейтинге. В то же время Objective-C находится на 15 месте, имея 7.0%.
Полезной для понимания рынка разработки будет и статистика зарплат специалистов, применяющих в разработке те или иные языки программирования:
Как мы видим, среди языков первой десятки снова выделяется Python - предоставляющий возможность получать высокую зарплату относительно молодым специалистам. Так разработчики Java, со сходным опытом, получают в среднем на 15% меньше, чем разработчики на Python, а разработчики на PHP – почти на 30% меньше.
Среди же наиболее оплачиваемых знаний языков мы можем наблюдать навыки вланения Clojure, F#, Go, Skala и ряда других языков программирования не входящий в первую десятку.
4) Рейтинг языков программирования IEEE Spectrum за 2018
Следующий рейтинг представлен IEEE Spectrum — ежемесячным периодическим изданием, представляющим Институт инженеров электротехники и электроники. Данный институт является международной некоммерческой организацией, объединяющей сотни тысяч технических специалистов со всего мира. Результаты этого анализа остаются актуальными, хотя они и были представлены в июле 2018.
Согласно этому рейтингу Python занимает первое место уже второй год подряд. Такую высокую популярность языка составители объясняют несколькими причинами:
Во-первых, Python стал все чаще применяться как язык embedded разработки. Все больше современных микроконтроллеров получают достаточно мощности и памяти для размещения интерпретатора Python.
Следующей причиной роста популярности Python составители рейтинга видят падение популярности языка R, применяемого в основном для обработки статистических данных. Данный язык последовательно терял очки популярности и опускался с 5 места в 2016 году до 6 места в 2017 году, и 7 места в 2018 году. Соответственно Python все чаще используется для обработки больших наборов данных в статистических исследованиях и задачах машинного обучения.
Заметен в рейтинге IEEE Spectrum рост востребованности PHP - он поднимается с 8-го на 6-е место. Также, согласно данным этого рейтинга, несколько снизилась доля применения JavaScript
5) Статистика W3Techs для языков WEB-разработки на 2019 году
Для понимания изменения трендов WEB-разработки полезным будет рассмотреть статистику, предоставляемую w3techs.com. Данная статистика показывает количество сайтов, применяющих для своей работы те или иные языки и платформы.
В WEB проектах, среди языков фронтенда, первое место по значимости стабильно удерживается JavaScript.
Рассмотрим языки бэкенда:
Тренды применения языков программирования в серверной части на 08.01.2019.
Для бэкенда все еще востребованным остается PHP. Несмотря на незначительные потери позиций, на фоне роста популярности других языков программирования - много кода уже написано на PHP. Около 80% всех сайтов Интернета написаны с применением PHP в серверной части. При выборе языка для изучения стоит учитывать, что на сегодняшний день PHP применяется такими популярными сайтами:
Facebook.com
Wikipedia.org
Vk.com
Sina.com.cn
360.cn
Aliexpress.com
Wordpress.com
Pinterest.com
Cobalten.com
Detik.com
Также мы видим, что несколько упала популярность платформы ASP.NET, хотя она и не утратила второе место по частоте использования.
Растет частота применения Java, Ruby, Scala и JavaScript (благодаря активному применению платформы Node.js). Отмечается уменьшение на общем числе сайтов процента применения Python.
6) Статистика вакансий ITJobsWatch
Статистика ITJobsWatch для вакансий постоянных сотрудников в Великобритании, отсортированная именно по языкам программирования, позволяет рассмотреть языки с точки зрения количества вакансий по ним за период в 6 последних месяцев.
Данный рейтинг начинается со значения 4, поскольку 1, 2 и 3 места занимают вакансии Agile Software Development, Developer и Finance.
Из представленной таблицы можно увидеть, что среди общего количества вакансий лидирует SQL, затем идут JavaScript, C# и Java. Количество вакансий со знанием указанных языков относительно прошлого полугодия практически не изменилось.
С другой стороны, их догоняют Python – уже находящийся на 5 месте и C++ - на 6 месте среди языков программирования в вакансиях разработчиков.
На фоне общего количества вакансий падает доля запросов на разработчиков, владеющих PHP – на 17 пунктов и владеющих T-SQL – на 7 пунктов.
Наибольшая медианная зарплата соответствует Python – 60 000 £
.
7) Данные для размышления
По данным крупнейшей социальной сети для профессионалов и поиска работы - LinkedIn, за 2018 год в ТОП 5 наиболее растущих по количеству вакансий входят: блокчейн-разработчик, инженер сферы машинного обучения, специалист по машинному обучению.
Стоит отметить, что, согласно данным LinkedIn, в ТОП 20 навыков, которыми должен владеть соискатель работы в Индии входят среди прочих, в порядке убывания важности: Java, SQL, HTML, JavaScript, C++. Также, в ТОП 10 навыков, наиболее часто отмечаемых у себя среди представителей молодежи Индии, Бразилии, Индонезии и Южной Африки входят: C/C++, WEB-разработка и Java-разработка.
Выводы
Легко заметить, что одни данные мировых рейтингов языков программирования несколько противоречат данным других рейтингов о тенденциях изменения популярности языков. Однако есть ряд трендов, которые можно четко выделить из всех предоставленных данных:
Все они отмечают заметный рост запросов на разработчиков, применяющих Python – как в уже относительно устоявшихся сферах статистической обработки, BigData и машинного обучения, так и в WEB, и в embedded разработке. Python – однозначно стоит рассмотреть в качестве языка для изучения на 2019 год.
JavaScript остается бессменным лидером фронтенда и постепенно набирает очки в бэкенде и мобильной разработке под Android и iOs.
Java продолжает лидировать как в разработке под Android, так и в сфере Enterprise разработки. Постепенно проникает Java и в WEB-backend.
C# несколько растерял свои позиции, однако он однозначно будет находиться среди первых мест, оставаясь главным языком экосистемы Microsoft с широчайшей поддержкой этой корпорации. Также не стоит забывать достаточно глубокое проникновение С# в WEB, относительную простоту изучения, а также активное применение этого языка в разработке игр (Unity, XBOX 360) и мобильных приложений (Xamarin).
Неоднозначна позиция у C++. Несмотря на то, что этот язык все еще полноценно присутствует в ТОП 10 языков и активно применяется для разработки игр, приложений для мобильных платформ, десктопных приложений и в embedded разработке – все больше заметно вытеснение его с занимаемых позиций другими языками. Кроме того, стоит учитывать, что большинство разработчиков не рекомендуют его как первый язык для изучения, из-за его сложности.
В разработке под iOs Swift уже обогнал Objective-C и разрыв все еще увеличивается.
Значительная часть разработчиков не считает PHP – языком «будущих разработок», при этом признавая его однозначным лидером «сегодняшних разработок» в сфере бэкенда. Падение же популярности его будет явно достаточно длительным.
Ряд языков, такие как Go, Kotlin, Ruby и др. имеет смысл рассмотреть в качестве второго или третьего языка для развития себя как разработчика программного обеспечения.
Возможно на основе представленных данных Вы придете к несколько иным для себя выводам. Со своей же стороны в новом 2019 году мы желаем, чтобы и наши, и Ваши выводы помогли Вам достигнуть успеха в изучении новых языков, и технологий.