Результаты поиска по запросу: mvc 5*
Карьера в IT: кто такой Embedded-разработчик, задачи и обязанности
Автор: Влад Сверчков
Кто такой Embedded-разработчик?
Сферы применения Embedded-разработки.
Что должен знать Embedded-разработчик.
Как стать Embedded-разработчиком.
Где получить знания.
Мягкие навыки.
Ключевые тренды в Embedded.
Карьерные перспективы и зарплата Embedded Engineer.
Количество вакансий.
Конкуренция.
Заработная плата.
Карьерные возможности.
Выводы.
Подавляющее большинство новичков в Украине выбирают тестирование или разработку с привлечением C#./NET, Java, Python, JavaScript (фронтенд и Node.js). Эти направления имеют наибольшее количество вакансий в IT, низкие требования к высшему образованию, мощную распиаренность почти во всех учебных центрах, а также относительно простой переход в IT с любой не-айтишной профессии.
Специальность, которую мы будем сегодня рассматривать, не является столь популярной, трендовой. Однако она не менее важна, чем другие IT-направления. Герой нашей статьи занимается разработкой встроенных (embedded) систем, и его называют Embedded-разработчик.
Что это за специальность, насколько она важна и где используется, что нужно учить для её овладения, как выглядит день Embedded-ера, какие карьерные перспективы и зарплаты у специалистов этого направления – разбор этих и других интригующих вопросов читайте ниже.
Кто такой Embedded-разработчик?
Начнём с понятия “Embedded система”. Трактовка в разных источниках отличается, но если свести всё под один знаменатель – это компьютеризированная система, которая встроена в механическую или электронную систему и выполняет определенную функциональность. То есть это система, в которой компьютер (как правило микроконтроллер или микропроцессор) является неотъемлемой частью другой системы.
Как пример: микроконтроллер в вашей кофейной машине, микроволновке или стиральной машине; устройство, обеспечивающее срабатывание подушек безопасности в автомобиле, контроллер в самолете, который собирает определенные данные о полёте – даже Bluetooth-наушники содержат свою собственную встроенную систему.
Соответственно, Embedded-разработчик – это специалист, занимающийся разработкой подобных встроенных систем, используя программирование (software) и навыки работы с "железом" (hardware).
Жизненный цикл продукта очень тесно связан с разработчиком встроенных систем. Обязанности Embedded-разработчика могут различаться в зависимости от микроконтроллеров / микросхем / устройств и т. п., с которыми он работает, но основные фазы, где ощутима роль этого специалиста, следующие:
Анализ требований. Коммуникация с клиентами, дизайнерами и инженерными командами для определения функциональных и технических требований к встроенной системе.
Проектирование системы. Разработка архитектуры и дизайна встроенной системы, выбор аппаратных и программных компонентов.
Проверка базовой работоспособности. Перед началом работы Embedded разработчик должен проверить функционирование платы, обновить драйвера при необходимости и убедиться, что “железо” исправно.
Программирование. Написание программного кода, встроенных программ и системных протоколов.
Тестирование и отладка. Проведение тестов для проверки работоспособности embedded-системы.
Интеграция. Обеспечение взаимодействия встроенной системы с аппаратурой, внешними устройствами и другими составляющими системы.
Оптимизация производительности. Усовершенствование эффективности и производительности встроенной системы, учитывая ограниченные ресурсы.
Документация. Формирование диагностических отчётов, технических инструкций и документации по разработке ПО. Также чтение форумов, статей и инструкций к платам и компонентам, с которыми ведется работа.
Сотрудничество с другими командами. Взаимодействие с hardware и software разработчиками, участие в различных митингах, обсуждениях, коммуникациях с заказчиком и т. д.
Безопасность и надежность. Обеспечение высокого уровня безопасности, надежности и работоспособности встроенной системы.
Типичный рабочий день разработчика Embedded состоит из всего понемногу:
написание и отладка кода, поиск багов;
работа с аппаратной начинкой – иногда приходится и паяльником поколдовать, и что-то мультиметром измерить, и осциллограф применить и т.п.;
чтение документации, поиск информации на форумах;
тестирование встроенных систем и их составляющих;
код-ревью;
рефакторинг;
взаимодействие с командой, руководством: митинги, деловая переписка, созвоны по определенным вопросам (или живое общение) и т. д.
Сферы применения Embedded-разработки
Embedded в XXI веке имеет хороший прирост востребованности в связи с развитием IT-индустрии, в особенности сетевых технологий, операционных систем, языков программирования и в результате модернизации “железа”. В настоящее время область применения встроенных систем достаточно объемна:
Бытовая электроника. Встроенные системы являются неотъемлемыми атрибутами уютного жилья: это смарт-телевизоры, холодильники, мультиварки и другая кухонная электроника, устройства безопасности, смарт-девайсы для дома.
Машиностроительная промышленность. Embedded технологии являются ключевыми для современных транспортных средств, начиная от гражданского автопрома и заканчивая мощными строительными гулливерами. Они входят в состав двигателей, навигационных систем, климат-контроля, развлекательных блоков и т. д.
Медицина. Современная медицина невозможна без комплексного цифрового оборудования, включая устройства мониторинга пациентов, системы визуализации, диагностические инструменты и т. д.
Промышленная автоматизация. Встроенные системы используются в промышленных системах управления, программируемых логических контроллерах (PLC) и робототехнике для автоматизации и управления процессами.
Телекоммуникации. Встроенные системы – неотъемлемая часть сетевого оборудования, маршрутизаторов, коммутаторов и коммуникационных устройств для эффективной передачи данных.
Аэрокосмическая промышленность. Современная авионика использует эмбеддед для управления функциями самолета, системами навигации и связи. Если кто-то хочет терраформировать Марс – без Embedded будет очень трудно.
Военное дело. Встроенные системы играют решающую роль в оборонных программах как в мирное время (наблюдение, анализ, прогнозирование, наведение и т. д.), так и во время войны (вспомните те же джавелины, дроны, хаймарсы, пэтриоты и т. д. – там очень много электроники).
Умные сети. Развитие интеллектуальных сетей (smart grid) увеличивает эффективность и надежность распределения электроэнергии.
IoT (Интернет вещей). Устройства IoT в значительной степени зависят от встроенных систем сбора, обработки и передачи данных для различных программ. Примеры: умный дом, автоматизированные системы полива, умные города и т. д.
Что должен знать Embedded-разработчик
В Embedded-е целая палитра специальностей. Например, приставки “Software”, “Firmware” указывают на фокус именно на создании ПО, а “Hardware” и “Hardware Design” – на аппаратной части. Тайтл вроде "Embedded Systems Engineer" говорит о необходимости иметь одинаково хорошие hardware и software знания. Также надо понимать, что в разных компаниях один и тот же тайтл может иметь под капотом совершенно разные технологии в зависимости от аппаратной начинки, разновидности встроенной системы и т. д.
Наше описание необходимых технологий будет охватывать и аппаратное, и программное крыло требований, что делает его более близким к тайтлу "Embedded Systems Engineer". Если вы хотите больше в software, изучайте глубже технологии, направленные на разработку софта; если же в hardware – больше внимания уделяйте аппаратным навыкам.
Итак, мы проанализировали тематические статьи, мнения популяризаторов эмбеддеда и вакансии украинского рынка, а на выходе получили следующий технологический стек Embedded девелопера.
Математика, физика, электроника
Прежде всего, эмбеддед-разработчики должны хорошо знать математику и физику – особенно темы, связанные с электротехническим направлением, чтобы хорошо понимать принципы функционирования hardware: разбираться в начинке плат, уметь правильно разводить все сигналы на плате, правильно считать все дорожки, перекрытия сигналов, их целостность и т. д. Эти знания важны как при разработке, так и на момент проектирования, тестирования, коммуникации с другими коллегами и не только.
Какие разделы нужно знать:
базовая математика и вычисления;
дискретная математика;
электрические цепи;
основы электроники;
цифровая и аналоговая микросхемотехника;
цифровые и логические схемы;
компьютерная архитектура.
Тестовое оборудование
Следующее оборудование вы будете широко использовать для проверки работоспособности микросхем, поиска неисправностей и прочего. Вам понадобятся следующие инструменты:
мультиметр;
логический анализатор;
осциллограф.
Мультиметр является довольно известным прибором среди “электротехнарей” – им измеряют ряд физических величин, таких как сила тока, сопротивление, напряжение и другие.
Логический анализатор используется для работы с цифровыми сигналами в электронных системах, а осциллограф – для визуализации и исследования электрических сигналов, а также отображения их параметров в режиме реального времени.
Микроконтроллеры
Одни из главных объектов заинтересованности разработчиков Embedded. Под них и пишется код на языках C/C++ и не только. МК представляет собой небольшое электронное устройство с большим количеством "ножек", которыми отправляются/принимаются соответствующие электрические сигналы.
Что важно знать по этой теме:
GPIO
ADC
DAC
Таймеры
PWM
Прерывания
Сторожевой таймер (watchdog)
Управление тактовой системой (clock management)
Каждая модель МК имеет свои особенности, с которыми вам придется знакомиться через соответствующую документацию. Также вам нужно знать периферию выбранного вами микроконтроллера и библиотеки для управления ею.
Самым популярным семейством МК является STM32. Опыт работы с Arduino также приветствуется.
RTOS
Real Time OS – операционная система настоящего времени. Предоставляет среду выполнения для программ, имеющих строгий график выполнения задач. Embedded-разработчики используют RTOS для обработки задач с высокой точностью и низкими задержками.
Linux
Если вы планируете работать со встроенными устройствами на базе Linux (а их сейчас очень много), вам следует знать и эту операционную систему. Она имеет открытый исходный код и является бесплатной.
Примеры проектов – если говорить о них, линукс использует большое количество систем IoT, промышленный, сетевой, автомобильный, медицинский Embedded и т. д.
Паяльник
Да, в данной профессии необходимо иногда и паяльником поработать. Какие-то компоненты могут нуждаться в пайке – где-то удалить/добавить/заменить, поэкспериментировать с макетом, собрать проект и прочее. Может возникнуть любая ситуация на “железе”, и эмбеддед-специалист должен быть готов к этому.
Основы программирования
Фундамент, который сделает ваш процесс программирования эффективным. Сюда отнесём следующие темы:
алгоритмы и структуры данных – эмбеддерам нужны сильные знания по алгоритмике;
шаблоны проектирования – да, в эмбеддеде есть свои паттерны, облегчающие жизнь девелоперам, например Opaque Pointer pattern;
UML (диаграмма состояния, state machine) – для моделирования и анализа поведения системы.
Программирование на C/C++
C/C++ – это мощные мастодонты в мире программирования. По сравнению с другими языками сложнее в изучении, дают возможность писать низкоуровневый код с высокой степенью контроля “железа”.
Также C/C++ позволяют напрямую управлять памятью (а это очень важно при работе с hard-элементами, имеющими достаточно ограниченный ресурс), контролировать большое количество low-level процессов, а также подходят для программирования широкого спектра “железа”. Обязательный инструмент в копилке Embedded-девелопера – можно выучить либо C, либо C++, либо оба языка.
Интерфейсы и протоколы
Обмен информацией между Embedded-элементами и их составляющими осуществляется через специальные интерфейсы и протоколы:
UART, I2C, SPI – базовые, их нужно знать обязательно;
Ethernet, USB – для работы на высоких скоростях;
Bluetooth – очень известная беспроводная технология;
TCP/IP, UDP – для работы с сетью;
CAN – система, используемая в транспортных средствах;
Modbus – для работы в промышленных объектах.
Git
Git – система управления версиями проекта, очень популярный инструмент при написании любого кода, поскольку позволяет отслеживать изменения в коде, создавать ветки для работы над разными функциями, делиться своим кодом с другими коллегами и наоборот.
Agile/Scrum
Agile – это семейство гибких методологий разработки ПО, которое способствует выпуску продукта порциями, шаг за шагом расширяя и улучшая его. Как результат – команда осуществляет разработку относительно небольшими интервалами, сам продукт постоянно улучшается, качество кода – повышается. Познакомиться с Agile вам поможет подходящий манифест с подробным описанием основных принципов.
Scrum является одной из самых популярных реализаций данного подхода, часто используемого во многих IT-командах, в том числе и во время работы со встроенными устройствами.
Английский язык
English на уровне свободного чтения документации должен быть у каждого Embedder-а, поскольку львиная доля работы приходится именно на считывание материалов к тем или иным микроконтроллерам и сопутствующим устройствам. Если же вы будете работать в команде с иностранцами, нужно подтянуть ещё и разговорный английский.
Как стать Embedded-разработчиком
Где получить знания
Есть несколько опций для изучения разработки встроенных устройств:
Можно учиться самостоятельно с помощью бесплатных ресурсов в свободном доступе: YouTube, roadmap со ссылками на GitHub, статьи, тематические форумы, бесплатные курсы и материалы (MIT OpenCourseWare, embedded.com) и т.д. На платы Arduino, паяльник, мультиметр и т.д., конечно, придется раскошелиться.
Прохождение видео курсов (платно) на Udemy, Coursera, edX, Pluralsight и других платформах, покупка специализированных книг.
Менторинг со стороны действующего разработчика – самый эффективный способ обучения, поскольку у вас всегда будет помощь, наставничество, советы, четкое направление движения и необходимые учебные материалы.
Прохождение онлайн/офлайн обучения при компаниях. Такой формат предлагают, например, GlobalLogic, Ajax Systems и другие. Минусы: нужна база знаний перед стартом обучения, а главный плюс – возможность стажировки и полноценного трудоустройства в компании.
Высшее образование в этой специальности не помешает, хотя и не есть обязательным. Нужную базу вы можете получить в школе и высших учебных заведениях на соответствующих технических специальностях – там же есть возможность попасть на стажировку, если кафедра такое практикует или имеет соответствующие связи с компаниями.
Soft skills
Требования к Embedded-разработчикам могут различаться в плане стека, но что 100% понадобится каждому, это следующие “мягкие” навыки:
критическое, алгоритмическое, аналитическое мышление;
навыки problem-solving;
коммуникативность, умение работать в команде;
организованность, собранность, умение эффективно распоряжаться временем;
самомотивация;
внимание к деталям;
терпение и адаптивность;
страсть к Embedded;
желание постоянно развиваться и совершенствоваться.
Последние три пункта очень важны в профессии, поскольку эмбеддед – это непростая отрасль, и за 3-6 месяцев "войти в IT" не получится. Требуется больше усилий, времени и выдержки.
Ключевые тренды в Embedded
IT-индустрия двигается вперед, и эмбеддед не отстает. Проанализировав ряд ресурсов, мы определили следующие тренды:
Интеграция искусственного интеллекта и машинного обучения в Embedded-системах становится всё более привлекательней, что способствует использованию встроенными системами интеллектуальных алгоритмов и ML. Эта синергия позволяет системам адаптироваться к изменениям в реальном времени, повышая их эффективность.
Развитие беспроводных технологий открывает новые перспективы для встроенных систем, особенно в областях интернета вещей (IoT) и беспилотных систем, управляемых удалённо или с помощью AI.
System-on-chip решения. Интеграция всех ключевых компонентов системы на одном чипе (SoC) продолжает набирать обороты и использоваться различными бизнесами. Их компактность в совокупности с высокой производительностью, дешевизной, энергоэффективностью и интегральными микросхемами специального назначения (ASIC), например, уже успешно применяется в гаджетах, собирающих и анализирующих различные параметры здоровья.
Больше внимания безопасности. Рост количества встроенных систем, имеющих выход в Интернет, приводит к увеличению количества киберугроз, что подчеркивает важность совершенствования мер безопасности для эмбеддед-устройств.
Оптимизация потребления энергии embedded-системами становится актуальнее – на это влияют идеи устойчивого развития, что способствует распространению более энергоэффективных решений.
Развитие AR и VR (дополненная и виртуальная реальности). Интеграция встроенных систем в AR и VR открывает новые горизонты для интерактивных интерфейсов и развлекательных приложений. Embedded-разработчики активно работают над этими технологиями для создания поразительного опыта и визуальных эффектов.
Отдельно отметим и развитие встроенных устройств в военной сфере. В настоящее время растет спрос на эмбеддеров, способных работать с дронами (воздушными и морскими), БПЛА и т. д. Сегодня именно эти роботизированные системы позволяют эффективно выявлять и ликвидировать врага, разведывать, наводить и корректировать огонь и – что самое важное – беречь жизнь и здоровье личного состава. Сегодня это одно из трендовых направлений именно в нашем государстве.
Карьерные возможности в IT и заработная плата Embedded Engineer
Количество вакансий
Для определения этого параметра используем данные из самых известных украинских ресурсов для поиска работы в IT – DOU и Djinni – и сравним результаты по самым популярным специальностям.
Начнем с DOU:
Embedded – 44 вакансии;
QA – 167;
FrontEnd – 160;
DevOps – 158;
PHP – 140;
Python – 138;
Java – 108;
.NET – 104;
Node.js – 101.
В Djinni поиск работы кандидатами осуществляется анонимно. Количество вакансий следующее:
C / C++ / Embedded – 170 вакансий;
JavaScript / FrontEnd – 354;
PHP – 295;
DevOps – 273;
Python – 208;
Node.js – 191;
C#/.NET – 166;
Java – 161;
QA Automation – 139;
QA Manual – 128.
Конкуренция
Для определения конкуренции эмбеддеров на нашем рынке IT воспользуемся соотношением количества отзывов к количеству вакансий на DOU за ноябрь 2023 года (берем наиболее известные специальности). Вот что имеем:
Конкуренция у эмбеддеров (от новичков до профессионалов) очень низкая: на 1 вакансию приходится примерно 5 претендентов, что является хорошим результатом во время нынешней ситуации на рынке IT.
Настоящие "голодные игры" традиционно у QA и FrontEnd: за 1 вакансией охотятся в среднем 120.9 и 100.5 кандидатов соответственно.
Согласно рыночной статистике Djinni, для новичков конкуренция усиливается:
Отметим, что здесь демонстрируется количество кандидатов на вакансию, которые сейчас находятся в "онлайне". На Джине так называются те кандидаты, которые находятся в активном поиске работы.
Видим, что в категории "C / C++ / Embedded" без опыта 27.75 соискателей на вакансию (отдельной категории для Embedded нет). Много, но посмотрите на аналогичную ситуацию в более популярных направлениях:
JavaScript / FrontEnd – 426.55
C#/.NET – 200.5
Python – 185.6
Manual QA – 132.83
Node.js – 98
DevOps и FullStack – 83.5
Заработная плата
Сначала рассмотрим зарплатную статистику на Djinni для “C / C++ / Embedded” (за последние 6 месяцев). Картина следующая:
Зарплатные вилки достаточно высоки – 2300-4700 USD. При этом зарплатные ожидания кандидатов скромнее – от 700 USD до 4500 USD.
А сколько получают Embedded за пределами Украины? Обратимся к аналитике Stack Overflow Developer Survey 2023 (более 90 000 респондентов из США, Индии, Германии, Соединенного Королевства, Канады и других стран).
Некоторые несущественные для нашей статьи специальности были убраны из диаграммы для большей компактности изображения.
Итак, медианная зарплата Embedded-специалистов из разных стран составляет 77 104 USD в год, а это примерно 6425 USD в месяц. Что интересно, разработчики веба (FrontEnd, BackEnd, FullStack), игр, мобильных и десктопных приложений получают меньшую ЗП, хотя эти специальности более распространены, а веб вообще является самым популярным в IT.
Более высокое вознаграждение получают те, кто специализируется на базах данных, DevOps-процессах, больших данных, аппаратной части, блокчейне, безопасности и т. д.
Карьерные перспективы
Embedded разработчик – понятие достаточно размытое и обширное, поскольку девелопер этой специализации может работать над:
созданием робототехнических систем;
медицинской аппаратурой;
автомобильными системами;
аэрокосмическими аппаратами;
IoT-экосистемой;
AR и VR индустрией;
сетевыми системами;
гаджетами для гражданских нужд;
безопасностью embedded-устройств;
промышленными системами;
военными разработками;
и т. д.
В каждой из этих сфер будут свои технологические стеки, микроконтроллеры, платы, интерфейсы, протоколы и т. д.
Ещё не забывайте об эмбеддерском "фронтенде", "бэкенде" и "фулстеке" - в каждой отрасли вы можете концентрироваться больше на программной части, аппаратной, или же на обоих сразу.
Конечно, каждое направление может иметь собственную “кухню”, и чтобы “отведать блюдо” в каждом из этих “ресторанов” целой жизни может не хватить, но согласитесь – список для самореализации скромным не назвать.
Также вы можете в любой момент углубиться в Software разработку и заниматься написанием программного кода (самые популярные стеки в Embedded – C/C++, Java, Python, Go), а можете пойти в Hardware и больше внимания уделять “железу”. Если немного подкачать знания, можно переквалифицироваться и в тестировщики, и в специалиста по безопасности, сетевого специалиста и т. д. Возможности очень широкие и разнообразные.
Если же говорить о вертикальном потенциале профессии, разработчик встроенных систем стартует со стандартной Intern/Trainee/Junior позиции. Далее – с увеличением опыта, навыков и знаний – получает повышение до Middle и Senior, а выше – руководящие позиции вроде Team/Tech Lead, архитектор и т. д.
Выводы
Embedded – очень интересная, необычная и многогранная IT специализация. Она позволяет почувствовать себя Архитектором, вдыхающим жизнь в устройства, даёт им всё необходимое для их движения, мышления, анализа окружающей среды, общения друг с другом и не только. Да, для этого нужно иметь много знаний, но кто сказал, что быть Творцом – это так просто?)
Это направление даёт очень важный фундамент для других IT-отраслей, которые сегодня в зените популярности. Благодаря встроенным системам мы можем наслаждаться множеством автоматизированных процессов, начиная утренним свежемолотым кофе и осмотром нашего сна в health-трекере, и заканчивая автомобильной и медицинской аппаратурой.
Эмбеддед создан для истинных любителей “железа” и его программирования. При этом он имеет много нишевых разветвлений и ежегодно растущий спрос. Сегодня в Украине разработчики встроенных устройств имеют большие возможности для реализации, а в остальном мире – тем более.
Профессия непростая, но она щедро вознаграждает смелых, терпеливых и целеустремленных, которые не боятся сложностей и препятствий, а также готовы на всё, чтобы добиться желаемого.
Желаем удачи и вдохновения всем, кто стремится к развитию в направлении Embedded!
Кто такой DevOps инженер? Обязанности, инструменты и ЗП
Автор: Влад Сверчков
Кто такой DevOps Engineer?
Краткая история возникновения DevOps
Что такое DevOps? Какие обязанности DevOps специалиста?
Что должен знать DevOps инженер?
Развитие профессиональных навыков
Карьерные перспективы и заработная плата DevOps Engineer
Количество вакансий
Конкуренция
Зарплаты
Карьерные пути DevOps
Ключевые тренды в DevOps и технологии
Выводы
DevOps инженер – это профессия, которая очень часто присутствует в рейтингах самых высоких зарплат в IT. При этом спектр обязанностей достаточно неочевидный: разработчики – программируют и создают ПО, системные администраторы – администрируют компьютерные системы, тестировщики – тестируют, рекрутеры – рекрутят… А что делают DevOps специалисты? Каков спектр их обязанностей? Какие инструменты они используют и почему их труд столь высоко оценивается в денежном эквиваленте? С этими и другими вопросами разбираемся в данной статье.
Кто такой DevOps Engineer?
Краткая история возникновения DevOps
DevOps является относительно молодым направлением в IT, которое возникло примерно в 2007-2008 гг. во время объединения усилий двух сообществ: разработчиков ПО (ответственных за Development – разработку) и специалистов по поддержке и управлению IT-инфраструктурой (Operations – операционная сторона или сторона, ответственная за эксплуатацию, операционную поддержку).
Главная проблема заключалась во взаимной изолированности команды разработчиков и команды эксплуатации. Страсти достигали пика на момент выпуска проекта в продакшн: девелоперы считали, что если ПО работает у них локально, его можно релизить, а ответственность за любые последующие проявления нетрудоспособности продукта приписывалась команде операционной поддержки. Последние, в свою очередь, совершали абсолютно зеркальное действие, обвиняя в неисправностях разработчиков.
Именно объединение усилий специалистов обоих направлений дало жизнь новой специальности, которая находится на стыке двух IT-стихий – DevOps Engineer.
Что такое DevOps? Какие обязанности DevOps специалиста?
DevOps (Development and Operations) – это философия и набор практик, призванных объединить разработку и эксплуатацию в единую и координированную цепочку поставки программного обеспечения. Использование данного подхода способствует:
сокращению цикла разработки;
автоматизации и оптимизации процессов;
ускорению ответа на потребности пользователей;
повышению защищенности ПО;
улучшению качества программных продуктов;
лучшей коммуникации внутри команды.
Жизненный цикл DevOps. Источник: статья на GitLab под названием "What is DevOps?"
Соответственно, DevOps Engineer – это инженер, использующий навыки как из области разработки, так и из сферы эксплуатации и операционной поддержки. По сути он поддерживает разработку, деплоит продукт (запускает на сервере, хостинге) и тестирует его работоспособность, а также поддерживает среды, где расположен задеплоенный продукт.
Обязанности DevOps специалиста включают:
Управление CI/CD. DevOps Engineer строит, настраивает, управляет и поддерживает процессы непрерывной интеграции (CI) и непрерывной доставки (CD), обеспечивая быстрые и надежные поставки продукта пользователям.
Автоматизация инфраструктуры. Он создает и поддерживает инфраструктуру, способствующую эффективному масштабированию и управлению ресурсами, а также автоматизирует процессы жизненного цикла продукта.
Обеспечение безопасности. Девопс инженер работает над обеспечением безопасности программ и инфраструктуры, применяя практики DevSecOps.
Мониторинг, логирование и обслуживание. Он устанавливает системы мониторинга для отслеживания производительности приложений и инфраструктуры для быстрого реагирования на проблемы в работе системы.
Настройка облачных сервисов. Девопс специалисты активно работают с cloud-платформами для разработки, развертывания и управления приложениями.
Оптимизация функционирования инфраструктуры. Правило системных администраторов "работает – не трогай" в случае с девопсами неактуально. Специалист наблюдает за работой системы и на основе фидбека может вносить определенные коррективы. Иногда это позволяет существенно уменьшить затраты на инфраструктуру.
Коммуникация. Поскольку специалист находится одновременно между Dev и Ops, он обязательно должен иметь хорошие коммуникативные навыки, чтобы эффективно взаимодействовать с коллегами, быстро включаться в процессы и быть на острие производительности.
Также некоторые DevOps инженеры могут выбирать себе более конкретный круг обязанностей, например:
DevSecOps – специалист, больше сосредоточенный на безопасности;
Release Engineer – внимание в большей степени направлено на DevOps-процессы, ассоциированные с релизом;
Build Engineer – обязанности больше связаны с этапом билда приложения, когда нужно собрать код, разобраться в конфликтах и подключить необходимые зависимости;
Cloud Engineer – сосредоточен на работе с облачной инфраструктурой;
Automation Engineer – занят процессами автоматизации инфраструктуры;
SRE (Site Reliability Engineer) – фокусируется на масштабируемости, надежности и доступности онлайн-сервисов;
и т. д.
Что должен знать DevOps инженер
Ответ мы составим, отталкиваясь от трех источников:
путеводители по специальности (roadmaps);
советы от DevOps инженеров;
требования в вакансиях на украинских сайтах по поиску работы.
Компьютерные сети
Компьютерные сети – это база как для сисадминов, так и девопсов. Вам понадобятся следующие знания: понимание различных архитектур сети, а также их структур, знание сетевых моделей OSI и TCP/IP, основные протоколы этих моделей (IP, HTTP, HTTPS, TCP, UDP и т. д.), маршрутизация, фаерволы и брандмауэры, мониторинг и безопасность сети, DNS, VPN и т. д.
Linux
Linux – семейство операционных систем с открытым исходным кодом. DevOps инженеры тесно работают с данной разновидностью ОС, например она важна при конфигурации CI/CD контейнеров, автоматизации сборки, выполнения билдов, работе с артефактами и т. п. Вам нужно знать основы линукс, включая установку, настройку и поддержку данной ОС. Чаще всего в вакансиях встречаются Ubuntu, CentOS и Red Hat.
CI/CD
CI/CD (Continuous Integration / Continuous Delivery) – это подход к разработке ПО, ориентированный на автоматизацию процессов разработки, тестирования и развертывания программных изменений. Этот подход способствует снижению риска ошибок и улучшению качества программного обеспечения, а также быстрому внедрению нового функционала.
Также CI/CD помогает облегчить сотрудничество разработчиков и других команд, например, взаимодействие между тестировщиками и специалистами по инфраструктуре. В результате этот подход способствует постоянному улучшению ПО и быстрому реагированию на изменения рыночных и бизнес-условий.
Это фундаментальная тема в работе всех, кто причастен к девопсу, поэтому хорошие знания CI/CD процессов обязательны.
Скриптовые языки (Bash, PowerShell), Python
Также нужно уметь писать bash-скрипты для автоматизации различных процессов – от резервного копирования данных до настройки среды разработки.
Bash – это командная оболочка, в которой можно писать команды в Linux и Unix системах – их будет выполнять ваша ОС (в Windows используется PowerShell). А для того, чтобы можно было запустить сразу несколько команд, можно написать специальный скрипт с последовательными инструкциями и просто запускать его через командную оболочку тогда, когда вам нужно.
Для этого лучше всего подходит язык программирования Python, и его нужно будет изучить, чтобы упростить скриптинг и наладить автоматизацию задач.
Навыки работы с Bash и Python (PowerShell реже применяется) пригодятся DevOps Specialist и всем другим специалистам, которые связаны с конфигурацией ОС, а также помогут понимать код, написанный разработчиками.
Веб-серверы
Веб-серверы играют ключевую роль в развертывании и поддержке веб-приложений и услуг. Одними из самых популярных являются Nginx, Apache Tomcat, IIS. Девопс специалистам нужно уметь правильно их настраивать и траблшутить (находить и оперативно решать проблемы).
Docker, Docker Hub
С Docker вы можете автоматизировать процесс развертывания и управления программами в контейнеризированных средах. Эта технология способствует более быстрому деплою программ, облегчает тестирование и сокращает интервал между написанием кода и запуском программных приложений. Обязательный инструмент в арсенале DevOps.
Docker Hub – репозиторий (веб-хранилище), где расположены docker-контейнеры. С его помощью разработчики могут загружать свои и скачивать контейнеры других девелоперов, чтобы потом использовать в своих целях.
Одно из важных преимуществ докера – он позволяет создать одну среду для разработки, на которую не будут влиять ОС и личные программно-аппаратные настройки разработчиков. Это облегчает не только разработку, но и процесс выпуска продукта, поскольку на релизе ПО будет иметь значительно меньше конфликтов и проблемных ситуаций.
Облачная инфраструктура: AWS, Azure, GCP
Облачные сервисы позволяют использовать мощности сторонних компаний (в данном случае – Amazon, Microsoft, Google) для выполнения вычислений, хранения данных, развертывания и масштабирования инфраструктуры, автоматизации, мониторинга и проведения аналитики, использования API и т. д. Они сейчас супер востребованы, поэтому один клауд-сервис из перечисленных (AWS, Azure, GCP) нужно знать обязательно.
Больше всего вакансий сейчас именно на AWS.
Git, GitHub / GitLab
Git – распределенная система контроля версий, которую используют разработчики для фиксирования своего прогресса и более простого ведения совместной разработки. Это фундаментальный инструмент, который вы должны знать, чтобы отслеживать и управлять каждым изменением исходного кода и других файлов.
GitHub, GitLab и Bitbucket – это хранилища, в которых хранится код вашего проекта, над которым работает команда. Также они имеют ряд встроенных функций, которые будут важны в том числе и в работе девопс специалиста. Идеальным вариантом будет, если вы изучите работу и с GitHub, и с GitLab.
Jenkins / GitLab CI / Circle CI / GitHub Actions
Это CI/CD системы, которые помогают в работе с непрерывной интеграцией нового кода и непрерывной доставкой новой версии продукта пользователям.
Jenkins позволяет настраивать различные шаги CI/CD, например сборку, тестирование, развертывание и даже интеграцию с облачными сервисами. Он помогает снизить время между написанием кода и его внедрением.
GitHub Actions – интегрированная с GitHub служба автоматизации. Девопс разработчики используют её для создания и настройки CI/CD. Она позволяет выполнять действия после доставки кода в GitHub-репозиторий, например компиляцию, тестирование и развертывание.
Circle CI и GitLab CI можно наделить такими же характеристиками – они позволяют настраивать CI/CD. Все инструменты имеют ряд отличий, а выбрать стоит тот, который лучше подходит под ваши задачи и имеет лучшую совместимость с системами, которые вы используете.
Agile: Scrum / Kanban
Методологии разработки ПО, которые являются фундаментальными в работе девопс специалистов, поскольку они определяют основы, на которых базируются все процессы в команде.
Scrum – методология разработки ПО, которая относится к гибким (Agile). Её главная задача – создать промежуточный продукт, который теоретически можно представить пользователям, а с каждой последующей итерацией – спринтом в 2-4 недели – добавлять всё больше и больше изменений, двигаясь итеративно к конечному виду.
Kanban – ещё одна Agile-реализация, которая делает акцент на скорости разработки проекта от начала и до конца, а также на визуализации задач – для этого команда использует Kanban-доску и непрерывно совершенствует процесс разработки.
Английский язык
DevOps инженерам нужен английский (желательно Intermediate и выше) для хорошего понимания технологий, с которыми они будут работать, чтения мануалов и т. д., ведь большинство документаций и полезных статей идут именно на языке Туманного Альбиона. Также English нужен для успешной коммуникации с иностранными заказчиками / членами команды и т. д.
Дополнительные технологии
Кроме основных вышеперечисленных технологий, в вакансиях довольно часто встречаются следующие:
системы мониторинга и логирования: Zabbix, Grafana, ELK (Elasticsearch, Logstash, Kibana), Prometheus;
системы управления конфигурациями: Ansible и Terraform;
Kubernetes – технология оркестрации контейнеров;
понимание БД – как реляционных, так и нереляционных.
Развитие профессиональных навыков
Как получить образование по направлению DevOps? В университетах таких специальностей не существует – по крайней мере в украинских, – есть только общие направления, в которых преподаются фрагменты того, что требуется девопс инженерам, например компьютерные сети, операционные системы, программирование, теория информации и кодирования, криптография и т. д. Поэтому новичкам нужно обращаться к другим источникам. Перечислим их:
Бесплатные интернет источники / самостоятельное обучение. Сюда можно отнести YouTube, разные социальные сети с соответствующими группами, где собираются девопс специалисты, блоги и статьи в открытом доступе, ChatGPT и прочее. Преимущества очевидны – вы никому ничего не платите, однако вам нужно самостоятельно подбирать учебные материалы (которые могут быть устаревшие), самостоятельно искать ответы на вопросы, поддерживать дисциплину, учебную мотивацию и т. д.
Курсы. Вы можете записаться на очные/онлайн курсы и учиться с тренером и другими одногруппниками, или же выбрать формат записанных видео курсов (Udemy, edX, ITVDN и др.). Выбор в пользу очного или онлайн обучения с тренером позволяет лучше овладеть материалом, поскольку вам есть к кому обратиться, конкуренция подогревается одногруппниками, а также вы имеете постоянную мотивацию, ведь д/з и курсовые проекты должны быть выполнены вовремя. Минус – для качественных курсов нужно доставать кошелёк, но оно того стоит. Сюда же можно отнести конференции DevOps, на которых вы можете знакомиться с единомышленниками и прокачивать ваши знания и навыки.
Курсы от крупных компаний. Вариант, позволяющий попасть на качественные курсы и учиться в достаточно интенсивном темпе с перспективой получить приглашение на позицию Intern/Trainee в этой же компании. Очень классный вариант, однако есть два но: 1) нужно самостоятельно получить некоторые знания по DevOps и пройти отбор; 2) такие курсы бывают платными. Данный формат обучения может предоставляться компаниями EPAM, SoftServe, Sigma Software, PortaOne и т. д.
Менторство. Вы также можете найти знакомого или DevOps-филантропа, который возьмёт вас под свое крыло и будет обучать, выдавать д/з, отвечать на вопросы, направлять, следить за прогрессом и т. д. Тоже хороший вариант, однако найти таких добродушных джедаев весьма тяжело.
Образовательные ресурсы дадут вам знание инструментов. А как насчет личных скиллов – так называемых soft (мягких) навыков? Чтобы стать хорошим DevOps Specialist, важно иметь следующие качества:
коммуникабельность, ассертивность и умение играть в команде;
умение продуктивно распоряжаться временем (time management);
проактивность;
внимательность;
хорошо развитая смекалка, смышленость;
хорошо развитые критическое и системное мышления;
умение быстро учиться;
умение хорошо слушать и слышать;
жажда постоянного развития;
хорошие навыки problem solving / траблшутинг;
стрессоустойчивость;
умение брать на себя ответственность;
эмпатия.
Карьерные перспективы и заработная плата DevOps Engineer
Количество вакансий
Начнём с того, насколько востребованы DevOps Engineers. Для этого просмотрим количество открытых вакансий на DOU.ua – крупнейшем сообществе украинских девелоперов – и сравним с другими популярными направлениями (на начало ноября):
DevOps – 156 вакансий;
QA – 160;
Front End – 150;
Python – 108;
Java – 107;
.NET – 100;
Node.js – 102;
Data Engineer – 46;
Data Science – 45;
Android – 27.
На украинском Djinni, где айтишники Украины анонимно ищут работу, ситуация следующая:
DevOps – 283 вакансии;
JavaScript / Front-End – 534;
Java – 168;
C#/.NET – 161;
Python – 193;
Node.js – 222;
QA Manual – 136;
QA Automation – 88.
Конкуренция
Воспользуемся соотношением количества отзывов к количеству вакансий на DOU (октябрь 2023), чтобы понять, насколько конкурентен IT-рынок у специалистов по направлению DevOps. Видим следующее:
В среднем на 1 вакансию приходится 11 претендентов. Это достаточно хороший результат как для текущего состояния украинского IT. Например, для QA эта цифра составляет 109.6, FrontEnd – 109.1, Java – 46.3, Node.js – 33.9, .NET – 32.2, Python – 26.4.
Вы абсолютно справедливо подметите, что это статистика для всех специалистов – как новичков, так и специалистов с опытом. А какое соотношение отзывов-вакансий у тех, кто имеет меньше 1 года опыта?
По состоянию на октябрь 2023: DevOps – 24.5, FrontEnd – 458, Node.js – 443, Java – 198, .NET – 178, QA – 139.7, Python – 72.5. Всё равно девопс имеет гораздо меньше конкуренции, чем наиболее популярные направления.
Зарплаты
Касательно ЗП на украинском IT-рынке обратимся к летнему зарплатному опросу от DOU.
DevOps специалисты имеют одну из самых высоких медианных зарплат – 3500 USD, уступая SRE (одна из ветвей DevOps), менеджерским и высшим руководящим должностям.
Медианная ЗП в соответствии с городами:
Киев – 3675 USD;
Харьков – 3000 USD;
Львов – 2800 USD;
Одесса – 4212 USD;
Днепр – 4000 USD;
Ивано-Франковск – 3875 USD.
Карьерные пути DevOps
Карьерные перспективы достаточно обширны и зависят от того, чем занимается DevOps специалист, поскольку это неоднородная отрасль. Следовательно, вы можете выбрать для себя что-то более нишевое и развиваться именно там, например:
хотите фокусироваться на облачных процессах – Cloud Engineer;
нравится автоматизация инфраструктуры – вам в Automation Engineer;
делаете ставку на кибербезопасность и защиту на всех этапах жизненного цикла разработки – DevSecOps будет отличным выбором;
Site Reliability Engineer – отличный выбор, если хотите зарабатывать ещё больше денег и заниматься качеством уже готовых систем;
и так далее.
Если говорить о росте вверх, то сначала вас ожидает стандартная девелоперская лестница – Junior, Middle, Senior, а с увеличением объема вашего опыта вы можете претендовать на руководящие должности, такие как Head of DevOps, Lead, Architect.
Также у вас есть возможность отойти от DevOps ремесла как такового и:
углубиться в программирование, перейдя в разработчики;
стать автоматизированным тестировщиком (Automation QA);
строить карьеру в области кибербезопасности в качестве аналитика, белого хакера, специалиста по безопасности и т. п.;
пойти в системное администрирование и сконцентрироваться на работе с инфраструктурой;
заниматься менеджерской деятельностью и управлять командами разработчиков/тестировщиков и прочее.
Здесь действует и обратное правило: так же вы можете попасть в DevOps и через разработку, и через QA, и через CyberSecurity либо другое направление. Просто надо будет доучить недостающую часть стека.
Ключевые тренды в DevOps и технологии
DevOps постоянно развивается, и существует несколько ключевых тенденций и технологий, которые определяют текущее направление развития:
DevSecOps (Development, Security, Operations). Безопасность выходит на первый план: наблюдается устойчивая тенденция ко всё большей интеграции парадигм безопасности и практик в DevOps процессы, чтобы программное обеспечение было как можно менее уязвимым и более надежным.
Интеграция искусственного интеллекта. В конце 2022 и начале 2023 года возник большой ажиотаж вокруг ChatGPT, созданный на базе ИИ. Конечно, это не первый случай, когда используются нейронные сети, однако событие было резонансным. Поэтому логично, что по всему IT катится ИИ-тренд, поскольку это несёт упрощение работы, повышение скорости реагирования и производительности.
Infrastructure as Code (IaC). Всё больше популяризируется подход к инфраструктуре как к системе, на которую человеческий фактор должен оказывать минимальное влияние. Взамен как можно больше процессов должны автоматизироваться за счет использования программного кода (скрипты, шаблоны, конфигурационные файлы и прочее) в противовес ручной/интерактивной настройке.
Сюда же можно добавить serverless-вычисления, микросервисы, Chaos Engineering, контейнеризацию и оркестрирование, тренд на Site Reliability Engineering, усиление мониторинга и cloud-технологии.
А из трендовых инструментов можно отметить следующие основные:
eBPF – технология, позволяющая программировать и выполнять код прямо в ядре операционной системы Linux. Эта технология расширяет возможности фильтрации сетевых пакетов и обеспечивает высокий уровень мониторинга и анализа сетевого трафика.
WebAssembly (он же Wasm) – бинарный формат веб-приложений, который может выполняться в браузерах. Для DevOps дает возможность развертывания и мониторинга веб-приложений, которые работают на разных языках программирования и могут запускаться в браузере без дополнительных ограничений.
OpenTelemetry – это open-source проект, который помогает собирать данные о производительности, мониторинге и трассировке приложений.
Argo Rollouts – инструмент, направленный на автоматизацию процесса развертывания приложений и микросервисов. Он расширяет возможности Kubernetes по управлению релизами и развертыванию приложений, предоставляя дополнительные функции и контроль над процессом обновления.
Инструменты от OpenAI. Год назад именно эта компания выпустила знаменитый ChatGPT, однако им её достижения не ограничиваются. Эта компания активно занимается разработками на базе ИИ, и также приложила усилия к GitHub Copilot, который значительно упрощает написание кода.
Выводы
DevOps – довольно интересное и разностороннее направление, в котором найти себя может каждый, кто умеет траблшутить и играть как с кодом, так и с инфраструктурой. Требования могут быть достаточно размазаны в зависимости от сфокусированности конкретной вакансии, плюс нужно учитывать, что многие работодатели ищут себе как можно более декорированных специалистов, поскольку дешевле нанять одного "универсала", чем 2-3 нишевых. Однако именно поэтому и зарплаты у девопсов одни из самых больших на IT-рынке, если не принимать во внимание руководящие должности.
Для тех, кто хочет узнать мнение опытного System Engineer и DevOps специалиста касательно DevOps карьеры, советуем просмотреть запись вебинара от Николая Прокопенка. Автор имеет 6 лет опыта в аутсорсе и аутстафе в крупных компаниях (Luxoft, Ciklum, DataArt), а также является сертифицированным экспертом Microsoft Azure.
Желаем удачи на вашем пути в IT!
Какой язык программирования стоит учить первым
Автор: Влад Сверчков
На что влияет выбор языка программирования?
Какие языки выбирают первыми?
Рейтинги языков программирования.
Индекс TIOBE.
Индекс PYPL.
Stack Overflow Developer Survey 2022.
Рейтинг от GitHub.
Какие языки наиболее популярны в соответствии с этими рейтингами?
Какие языки выбирают украинские разработчики?
Количество вакансий и отзывов в Украине.
Выводы.
Первый язык программирования (сокращенно – ЯП) открывает мир создания кода перед новичком. И от выбранного языка очень часто зависит то, каким будет этот «мир» – интересным и увлекательным, или же недружественным и слишком сложным. Если вы хотите из этого знакомства извлечь максимальную пользу для себя, стоит внимательно подойти к выбору первого языка программирования – и наша статья вам в этом поможет.
Мы разберем языки программирования, которые могут быть отличными в качестве первых языков. Вы узнаете, в каких IT-профессиях востребован тот или иной язык – а также много другой полезной и интересной информации.
На что влияет выбор языка программирования?
Для новичка выбор первого языка – важный шаг, который может определить его дальнейший путь развития в качестве разработчика. Главные пункты, на которые влияет ЯП:
Скорость овладения базой. Языки программирования имеют различную сложность изучения. К примеру, 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 вы, возможно, найдете, но работодателя – вряд ли. Зачем забивать гвоздь монитором, если есть молоток?
Поиск ментора и комьюнити. У каждого ЯП свое комьюнити и свои джедаи, которые готовы брать к себе юных падаванов на обучение. У популярных языков больше аудитория, есть хорошие и подробные документации, легче найти ментора – это позволяет удобнее и быстрее учиться. В более нишевых ЯП комьюнити скромнее, поэтому найти практикующего разработчика, который возьмет к себе ученика, чтобы научить его программировать, а также найти качественные гайды – ещё те задачи. Ментор важен тем объемом знаний и практических навыков, которые может передать: подсказать, как правильнее делать, где вы ошибаетесь, на чем сосредоточить внимание. Эти советы ускорят ваше изучение ЯП и позволят быстрее двигаться дальше навстречу желанной IT-специальности.
Стиль программирования. Пункт очень похож на 2-й, но если там дело касалось этики языка программирования, то здесь речь больше об этике самого программиста. В разных языках могут быть разные правила написания кода, согласованные сообществом программистов. Поэтому овладев одним языком, вы можете столкнуться с совершенно другой кодерской этикой при переходе к другому ЯП (в качестве примера – переход с Go на Java).
Легкость поиска ответов. Чем популярнее язык, тем легче гуглить и искать ответы, поскольку множество других разработчиков до вас интересовались теми же вопросами (высоковероятно). Однако если вы хотите использовать язык в экстравагантных целях – для которых он не предназначен – могут возникнуть проблемы с ответами.
Переход на другой язык. Некоторые технологии и языки устаревают и приходится учить новый стек. Например, так произошло с мобильными iOS разработчиками, которые писали на языке Objective-C и были вынуждены перейти на Swift, поскольку компания Apple так решила. Учитывайте и это при выборе языка.
Какие языки выбирают первыми?
Ранее изучение программирования начиналось в школах с языков Pascal либо Basic. Эти языки хорошо подходят для знакомства с алгоритмическим подходом, структурами данных и фундаментальными концепциями программирования. Они учат грамотности и рациональному подходу к решению программистских задач, но в коммерческой разработке сегодня почти не используются.
В школах всё более распространенными становятся такие популярные языки, как Python и JavaScript (JS). Они достаточно просты в овладении и позволяют быстро преодолеть расстояние между началом обучения и получением настоящего конечного результата. Скрипт на JS вообще можно написать с помощью обычного блокнота в Windows и запустить в любом браузере – даже устанавливать дополнительное ПО не нужно. Проще говоря, эти два языка просто более интересны и дают больше удобств и возможностей, чем Pascal или Basic.
Изучение JavaScript и Python в школе имеет целью заинтересовать учащихся программированием и показать, насколько легко и просто это может быть, какие возможности может дать умение писать код.
Чтобы почувствовать силу того же пайтона, можете посмотреть интересную подборку из 10 проектов длиной в 10 строк кода по ссылке.
Таким образом, эти языки не только знакомят с программированием, но и позволяют максимально быстро влиться в IT и создавать современные приложения.
Рейтинги языков программирования
Чтобы лучше понимать, какие языки сегодня пользуются спросом, рассмотрим несколько соответствующих рейтингов.
Индекс 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 опрошенных со всего мира). На картинке ниже можно увидеть, какие языки чаще всего используют те, кто только изучает программирование и IT (на двух картинках ниже продемонстрированы не все языки из рейтинга):
Наибольший спрос среди новичков вызывают языки верстки HTML & CSS (ими создают визуальное оформление веб-сайтов), а также языки программирования JavaScript и Python. Остальные языки идут с отрывом в более 19%. То есть, современные начинающие всё больше и больше отходят от классических Java, C#, а также Pascal и Basic, выбирая более простые языки, с которыми быстрее попадешь в IT.
Следующая картинка показывает, какими языками чаще всего пользуются профессиональные разработчики:
На первом месте 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) в соответствии с третьей версией – это создает дополнительный спрос на Python разработчиков.
JavaScript также отличается простотой и лаконичностью, но ее основная область использования ограничена WEB-ом, хотя JS имеет достаточно средств, чтобы на ней вести удобную разработку серверного ПО, мобильных и десктопных приложений и т. д.
Рейтинг от Stack Overflow показал, что именно эти два языка программирования чаще всего предпочитают начинающие.
TypeScript – это тот же JavaScript, но со строгой типизацией и другими фишками, которые делают код более структурированным и уменьшают количество потенциальных ошибок.
Следующие позиции обычно занимает Java – классический и универсальный язык, созданный в конце 20 века, но при этом до сих пор популярный и востребованный. Успешнее всего себя зарекомендовал в кроссплатформенных приложениях, Enterprise (создание ПО для крупного бизнеса), а также в мобильной разработке, хотя его сфера применения ими не ограничивается. Также существует много легаси кода на Java, который требует поддержки и обновления, что создает дополнительную востребованность грамотных Java девелоперов.
Часто упоминаются C/C++ - это корифеи среди современных языков программирования, зачастую изучаются в ВУЗах. Сложны в овладении, но очень мощны в использовании. Именно они применяются в ресурсоемких приложениях, микроконтроллерах и других приложениях, которым важно контролировать затраты памяти. Если вы хотите быстро попасть в IT – C/C++ не вариант, но в качестве языков для изучения программистской базы они – то, что нужно. Изучив «плюсы», вы сможете с легкостью переходить на другие языки.
C# – популярный универсальный язык от компании Microsoft, который прежде всего ориентирован на создание приложений под ОС Windows, однако выход платформы .NET Core позволил создавать ПО и под другие популярные платформы. Больше всего применяется в разработке корпоративных приложений, серверной стороны веб-приложений, игр на 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) – конкуренция одна из самых высоких на рынке IT.
Меньше конкуренции в 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#. Это классические языки, которые научат вас базе и при этом будут достаточно востребованы на IT-рынке еще долгое время, что позволит относительно быстро найти работу. Это лучший вариант из всех трех с точки зрения компромисса между легкостью изучения, быстротой становления в дальнейшем разработчиком и получением кодерской базы.
Если вы хотите максимально быстро попасть в IT – обратите внимание на JavaScript и Python. Они легки в овладении, быстро изучается синтаксис, у рынка достаточно много вакансий под JavaScript. Также эти языки имеют большое комьюнити, поэтому материалов для изучения вы найдете в изобилии.
Многие хотят попасть в IT именно через последний – третий вариант. Но в чем его недостатки? Начнем с JS:
большая конкуренция (упоминали при рассмотрении аналитики);
слишком большая вариативность – каждый разработчик может писать код по своим собственным правилам и будет трудно читать и понимать логику его работы;
в интернете много ответов низкого качества;
из джаваскрипта труднее переходить на другие языки программирования, чем наоборот;
значительный шанс упустить базовые концепции программирования и высокий риск написания плохого кода.
В Python примерно те же проблемы плюс наличие своеобразного синтаксиса, который может путать.
Это не значит, что данные языки – плохие. Абсолютно у каждого есть как свои плюсы, так и минусы – и это нормально.
ЯП нужно выбирать, отталкиваясь от сферы, в которой вы собираетесь себя реализовывать. Только тогда этот выбор будет максимально удачным и полезным вам.
Вкратце резюмируя: если вас интересует разработка веб-сайтов – всего того, что на стороне клиента, вы хотите постоянно видеть наглядный результат своей работы – выбирайте JavaScript. Если интересует кроссплатформенное ПО, Enterprise или мобильная разработка под Android – учите Java (в мобильной разработке затем доучите Kotlin). C# – хороший выбор для тех, кто хочет работать с инструментами от Microsoft, создавать корпоративные приложения, BackEnd веб-приложения, игры, десктопные приложения под Windows. Python – незаменимый в автоматизации рутинных задач, популярный в работе с большими данными, BackEnd-ом, искусственным интеллектом. Эти 4 языка покрывают достаточно большой процент IT-специальностей, поэтому выбрав один из них вы не прогадаете.
Где можно выучить языки программирования? Наши курсы помогут каждому, кто собирается учить популярные языки программирования и сопутствующие технологии. Портал ITVDN насчитывает более 230 видео курсов и имеет собственные программы обучения по 15 популярнейшим IT-профессиям, среди которых:
Верстальщик сайтов
FrontEnd Developer
Java Developer
Python Developer
C#/.NET Developer
Android Developer
Unity/Game Developer
PHP Developer
и другие.
Обучение происходит в формате записанных видео курсов – вы можете учиться в то время, которое для вас комфортно. Со всеми специальностями можно подробно ознакомиться, перейдя на страницу специальностей ITVDN.
Если вас интересует изучение только языка программирования, соответствующие курсы вы найдете в нашем каталоге.
Желаем успешного обучения и достижения ваших амбиций в IT!
Как правильно заключить договор на разработку сайта: советы для фрилансеров
Автор: Богдана Гайворонская
Фрилансеры не всегда заключают договор на разработку сайта с заказчиками, полагаясь на договоренности, озвученные устно или сформулированные в переписке. Ведь сам процесс согласования и подписания документов занимает определенное время и требует усилий. Впрочем, сотрудничество на доверии достаточно рискованно для обеих сторон. Кроме того, что один из участников может безнаказанно отказаться от выполнения своих обязанностей, есть немало нюансов, которые затрудняют сотрудничество в случае отсутствия документально заверенных алгоритмов работы. Даже когда обе стороны намерены добросовестно выполнить все договоренности, их может подвести банальное недоразумение.
Договор не только гарантирует защиту как исполнителя, так и заказчика. Он представляет собой определенную дорожную карту, которая описывает каждый этап работ, каждую возможную ситуацию, действия партнеров в случае форсмажоров и алгоритм урегулирования спорных вопросов.
Даже подписание типового договора частично уменьшает риски, но мы все же рекомендуем создавать отдельный контракт для каждого заказчика.
Хостинг-провайдер и регистратор доменных имен Cityhost.ua предлагает читателям нашего блога материал, созданный совместно с IT-юристами, чтобы разобраться во всех аспектах создания договора на разработку сайта.
Этапы согласования и заключения договора
Заключение договора начинается в момент, когда заказчик и исполнитель обсуждают и согласовывают все детали проекта. Поэтому этот этап также должен быть задокументирован в виде брифа. Кроме того, нужно составить детальное ТЗ и сформировать сам договор. Давайте рассмотрим каждый шаг по этому пути.
Заполнение брифа
Заказчики очень не любят заполнять бриф и пытаются пропустить этот этап, обсудив все детали по телефону или в чате. Часто случаются ситуации, когда заказчик говорит: «Вы профессионал, посмотрите сами, что там нужно сделать и изложите свои предложения». Такая позиция нередко выливается в результат: «Нет, это не то, что нужно, предложите что-нибудь другое».
На самом же деле бриф необходим для сотрудничества, потому что в нем содержатся ответы на важные для исполнителя вопросы. Каждый разработчик заключает свой бриф, который может выглядеть подобным образом:
Название и отрасль работы компании.
Целевая аудитория.
Локация (местная, всеукраинская, международная).
Ценности, миссия.
Корпоративный стиль — слоган, корпоративные цвета, стиль промо-материалов (желательно отправить эти материалы на почту).
Тип сайта, который хотите заказать (визитка, интернет-магазин, корпоративный сайт, наличие/отсутствие блога и т.п.).
Ориентировочная структура сайта, названия разделов.
Пожелания по оформлению сайта.
Примеры сайтов, на которые вы хотели бы ориентироваться.
Можно создать типичный бриф, но все же стоит вносить в него дополнительные вопросы, предназначенные для конкретного заказчика.
Составление технического задания
После заполнения брифа заказчик уточняет вопросы и вносит предложения, каким он видит будущий сайт — основную концепцию, количество разделов, визуальный стиль. На основе этих переговоров составляется техническое задание и одновременно начинается разработка договора.
В техзадании прописывается конкретный результат и все услуги, предоставляемые разработчиком. Это очень важно, поскольку «сделать сайт» довольно размытое понятие. Может случиться, что владельцы фирмы обратились к фрилансеру, который только пишет код, и не занимается дизайном и контентом. Он будет ждать от заказчика макет, тексты и фото. Другие фрилансеры могут сделать сайт «под ключ» и имеют разветвленную сеть субподрядчиков — дизайнеров, копирайтеров, фотографов и т.д.
Техзадание прописывается максимально подробно и включает в себя измеряемые параметры, например: «Сайт должен состоять из 5 разделов: главная страница, страница «О нас», страница контактов, страница для представления товара, раздел для блога».
Если у сайта есть блог или раздел новостей, в ТЗ также пишется, должен ли исполнитель заполнить этот раздел 2-3 новостями или делает только структуру блога.
Чем подробнее будет описан каждый аспект разработки сайта, тем меньше остается места для недоразумений.
Обсуждение и согласование текста договора
Для начала нужно определиться с типом договора. Есть два типа — договор на оказание услуги и договор подряда. Они отличаются тем, что в первом случае ключевым является сам процесс работы, а во втором — результат. К примеру, SEO-продвижение не имеет конечного результата и продолжается всегда, пока существует сайт — тогда заключается договор на сотрудничество. Для разработки сайта больше подходит договор подряда, поскольку заказчику нужен сайт, его интересует завершенная работа и его плоды.
Далее нужно поочередно прописать все главные этапы сотрудничества:
Предоставление заказчиком материалов разработчику. Это могут быть тексты, фото, видео, логотип и т.д.
Создание и утверждение макета.
Создание сайта.
Внесение поправок.
Проверка и приём работы.
Подписание актов о выполнении работ.
Оплата проделанной работы.
Это ориентировочный список, потому что у каждого сайта могут быть свои этапы. Например, исполнитель не только разрабатывает сайт, но и проводит маркетинговые исследования, анализирует конкурентов и на основе полученной информации дает рекомендации заказчику насчет концепции сайта — это отдельный этап, который также требует усилий и влияет на формирование стоимости заказа.
Основные правила составления договора
Есть элементы договора, без которых он не сможет стать четким документом, дисциплинирующим стороны в процессе работы.
Сроки
Обязательно нужно прописать сроки выполнения каждого этапа. Если внимательно присмотреться к порядку действий, вы увидите, что часть работы зависит от исполнителя (создание сайта, внесение правок), а вторая часть — от заказчика (предоставление материалов, проверка, прием работы). Если в договоре прописана только финальная дата, когда разработчик должен сдать сайт, он может попасть во временную ловушку — сроки затянуты, но не по его вине.
Также следует прописать действия сторон в случае, если кто-то из партнеров выполняет свои обязанности ненадлежащим образом. К примеру, если заказчик не осуществил прием работы в течение семи дней, она автоматически считается принятой.
Прописывайте не конкретные даты, а время между этапами, например: «Разработчик обязуется предоставить начальный макет сайта в течение 4 дней с момента получения материалов».
Измеримость
Все пункты в договоре должны быть описаны таким образом, чтобы их можно было измерить каким-либо конкретным параметром — временем, действием, результатом. Например, обсуждение и внесение правок происходит в течение недели после того, как разработчик пришлет по электронной почте ссылку на готовый сайт на такой-то адрес (конкретный). Таким образом снижается вероятность путаницы, когда одна сторона ждет результата в Вайбере, другая пишет сообщение в Фейсбуке, а время истекает.
Конкретика
Очень важно прописывать четкие формулировки. К примеру, «предоставить макет сайта» — это нечеткая формулировка. А вот «предоставить макет сайта в виде проекта в Figma с доступом редактора» — это уже нечто конкретное. Также нужно прописывать, какие материалы ожидает разработчик — фотографии в формате .png с разрешением не менее 600 пикселей по ширине, тексты в формате Google Docs с открытым комментированием.
Далеко не все заказчики ориентируются в компьютерных технологиях. Если ваш клиент — небольшое строительное предприятие или ФЛП, ремонтирующий велосипеды, для него не существует никаких опций по умолчанию. Поэтому конкретное и детальное описание всех требований и этапов — это скорее необходимость, иначе клиента и разработчика может ожидать много сюрпризов.
Сбалансированность
В договоре должны быть равномерно соблюдены права и обязанности обеих сторон. Не должно быть такого, что во всем виноват заказчик или вся ответственность лежит на исполнителе. Если какой-то этап работы зависит от действий определенной стороны — она несет ответственность за его реализацию или уплачивает неустойку (или подпадает под другие санкции) в случае невыполнения обязанностей по собственной вине.
Пункты договора, требующие внимания
В этот раздел вынесем те аспекты сотрудничества, о которых начинающие фрилансеры могут не знать или не уметь правильно их урегулировать.
1) Количество и порядок поправок, внесение изменений в ТЗ
Важен вопрос количества возможных правок и внесения изменений в техническое задание.
Лучший и проверенный метод — когда заказчик отправляет все правки в одном документе, а исполнитель вносит их сразу. Оптимально делать три круга правок; если у клиента появляются дополнительные правки, это должно оплачиваться. Такая политика в первую очередь защищает исполнителя от десятков переделок и дисциплинирует заказчика, который более продуманно решает, нужна ли эта правка.
Правки должны быть конкретными и аргументированными, без формулировок наподобие «сделайте как-то иначе, но не так, как есть».
Насчет ТЗ — все изменения, которые заказчик хочет внести в него уже во время работы, должны также дополнительно оплачиваться. В случае необходимости можно прописать, какие изменения и какого масштаба можно вносить, сколько стоит каждое из них. Одно дело поменять фотографию, и совсем другое, когда заказчик на финальной стадии решает заменить CMS (по факту это значит делать все заново).
2) Авторские и имущественные права
Вопрос авторских прав касается как материалов, используемых на сайте при разработке, так и использования материалов сайта после завершения работ.
Важно отслеживать, уникален ли контент, который предоставляет заказчик или предлагает исполнитель. Для обеспечения обеих сторон нужно прописать порядок действий по предотвращению ситуаций, когда могут быть нарушены авторские права третьих лиц или одного из участников проекта. К примеру, сторона, предоставляющая материалы, должна приобщить документы, подтверждающие право собственности на них — квитанции на приобретение фото- и видеоматериалов или другой контент. Или для упрощения процедуры можно просто отметить, что ответственность за нарушение авторского права несет сторона, предоставившая материалы.
К объектам авторского права относятся название сайта, тексты, фото, видео, дизайн и код. В договоре должно быть указано, кому принадлежат имущественные и авторские права на все элементы проекта после его завершения и может ли разработчик использовать какие-либо материалы для дальнейшей работы.
Для ориентира используйте Закон об авторском праве и смежных правах.
3) Сотрудничество с другими подрядчиками
Сайт состоит из многих компонентов, и не все работы подрядчик может выполнить самостоятельно. Если он обращается к субподрядчикам для создания дизайна или текстов, это также должно быть зафиксировано в договоре. Но в любом случае за качество конечного результата отвечает исполнитель.
4) Ответственные лица за коммуникацию с исполнителем
Этот момент особенно стоит внимания, если компания-заказчик большая, в ней есть много разных отделов и работников. Скорее всего, исполнитель не будет работать напрямую с директором, а будет общаться с кем-то из менеджеров. В таком случае договор должен содержать ФИО, должность и контакты лица, ответственного за коммуникацию. Не мешает указать, какие каналы общения считаются официальными — ими могут быть не только почта, но и аккаунт в Телеграме или страница в Facebook.
В случае, если разные аспекты будут согласовываться с разными людьми, это также должно быть указано. Например, за финансовые вопросы отвечает бухгалтер, за согласование макета — дизайнер компании, все остальные вопросы — к менеджеру. Но все же лучше, когда проект курирует один конкретный человек и несет ответственность за своевременную и эффективную коммуникацию.
5) Форсмажерные обстоятельства
Бывают ситуации, когда кто-то не может выполнить свои обязанности по не зависящим от него причинам. На этот случай следует вынести отдельным пунктом преодоления форсмажорных обстоятельств: что можно считать такими обстоятельствами и порядок действий в случае их возникновения (например, отсрочка для исполнителя для завершения работ или отсрочка оплаты для заказчика). Обычно в этот список входят пожары, стихийные бедствия, боевые действия, забастовки, введение карантина и другие обстоятельства, которые нельзя предусмотреть и подготовиться к ним.
6) Финансовые вопросы
В эту категорию входит не только порядок оплаты за проделанную работу (аванс, гонорар), но и сопутствующие расходы. Сюда можно отнести оплату домена и хостинга, заказы текстов, дизайна, фотосъемки и т.д. Исполнитель может эти расходы включить в сумму гонорара, но можно положить их и на заказчика. Это все обсуждается и прописывается. Также в договоре должны быть зафиксированы такие моменты, как порядок налогообложения, расчетная валюта, счета для получения средств, порядок перечисления и способ подтверждения получения средств исполнителем.
7) Прием работы или отказ от него
На проверку и прием работы выделяется определенный срок, в течение которого заказчик может выдвинуть обоснованные замечания и требования по доработке сайта или отказаться принять работу, предоставив четкие аргументы. Отказаться от приема работы можно только в случае, если сайт не отвечает технической задаче, выполнен с нарушением законов или имеет другие объективные недостатки, которые делают невозможным его использование и которые можно доказать. Не могут быть учтены субъективные аргументы, когда сайт исполнен по всем договоренностям, но разработчик представлял себе его как-то иначе. Если разработчик выполнил все пункты ТЗ и договор, клиент не может отказаться от подписания акта.
В случае, если речь идет о масштабных проектах с большой суммой оплаты, советуем обратиться за консультацией к юристу, который поможет прописать договор максимально четко и избежать «лазеек» для двойной трактовки.
Что должен знать FrontEnd разработчик в 2023 году
Автор: Влад Сверчков
Основные технологии
HTML5 & CSS3
Flex и Grid CSS
CSS препроцессоры
Git & GitHub
Знание о веб-технологиях и сети интернет
JavaScript
JavaScript Core (DOM, AJAX, JSON)
REST API
Алгоритмы и структуры данных
Фреймворки JavaScript
Инструменты управления состоянием программы (State Management)
TypeScript
Основы Figma
Английский язык
Необязательные технологии
Паттерны проектирования JavaScript
Линтеры
Тестирование
Webpack
Gulp/Grunt
SOLID принципы
Зарплаты FrontEnd разработчиков
Итоги
FrontEnd – одна из самых легких профессий разработчика в IT. Она выгодно отличается тем, что сочетает в себе программирование и творчество, поскольку девелопер работает над оживлением дизайнерского макета и созданием соответствующей пользовательской логики. Также преимуществом фронтенда является то, что увидеть результат работы можно почти сразу – в любом браузере.
Относительная легкость фронтенда рождает большую популярность среди желающих попасть в IT, а учитывая последствия открытой агрессии по отношению к Украине – особенно большую популярность, ведь это возможность работать удаленно (на IT-компанию или на фрилансе) и получать хорошую зарплату. Соответственно, конкуренция среди Trainee/Junior FrontEnd разработчиков весьма высока, поэтому работодатели вынуждены закручивать гайки и повышать требования к кандидатам, чтобы отобрать лучших.
Так как стать фронтенд разработчиком? Какими технологиями необходимо владеть, чтобы стать Intern/Junior FrontEnd разработчиком в 2023 году? Проанализировав вакансии на украинском рынке айти, мы составили список актуальных инструментов, которые обычно требуют работодатели от кандидатов. Их перечень – ниже в статье.
Frontend developer roadmap. Основные технологии
HTML5 & CSS3
HTML5 и CSS3 — это фундаментальные технологии, без знания которых не обойтись ни одному веб-разработчику. С помощью языка гипертекстовой разметки HTML создается разметка (каркас) каждой интернет-страницы. Затем язык стилей CSS преображает сайт и придает ему привлекательный и эффектный внешний вид. Помимо этого, необходимо владеть:
кроссбраузерной адаптивной версткой, чтобы уметь создавать сайты под мобильные устройства, планшеты и широкоформатные экраны и для различных браузеров;
семантической версткой для повышения качества разметки и улучшения поисковой индексации сайта;
валидной версткой, которая предполагает полное соответствие кода разработчика всем стандартам W3C — организации, которая создает и внедряет технологические стандарты для World Wide Web.
Уделите особое внимание верстке под мобильные устройства, так как современный веб-потребитель очень много времени проводит в смартфоне. Существует даже специальный подход, при котором сначала верстается веб-сайт под мобильные устройства, а только потом под десктопы — называется Mobile First.
Это общие требования по верстке. Теперь же рассмотрим более детально требования конкретно по языку стилей. Здесь вы должны знать основные свойства CSS3: фоны, градиенты, тени, анимации, трансформации, переходы, а также технологии Flex и Grid, о которых мы еще поговорим.
Хорошее владение HTML и CSS уже позволяет заниматься версткой сайтов и зарабатывать деньги. Именно с этих двух базовых технологий начинается путь к профессии FrontEnd разработчика.
Качественно изучить HTML и CSS вы сможете при помощи следующих наших курсов:
HTML5 & CSS3 Стартовый;
HTML5 & CSS3 Базовый;
HTML5 & CSS3 Углубленный.
Flex и Grid CSS
Технологии верстки надежных адаптивных веб-страниц, которые позволяют легче создавать динамические сайты и удобнее структурировать их содержимое. Лучше всего Flex-верстку в действии показывает интерактивный сайт flexboxfroggy.com, а Grid-верстку - cssgridgarden.com.
На нашем ресурсе также есть курсы, которые хорошо объясняют темы Flex и Grid верстки: “Верстка сайта на CSS Grid”, “Верстка сайта на FlexBox CSS”.
CSS препроцессоры
CSS препроцессор — это программа, которая имеет свой собственный синтаксис, но может сгенерировать из него CSS код. Самыми популярными считаются SASS, Stylus, LESS и PostCSS, однако, наибольшее комьюнити имеет именно SASS. Препроцессоры предназначены для:
ускорения процесса написания кода;
упрощения чтения кода и дальнейшей его поддержки;
минимизации рутинной работы при написании кода.
Для повышения эффективности написания CSS кода вполне достаточным будет изучение лишь одного препроцессора.
Git & GitHub
Git — наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии.
Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.
Git & GitHub — очень важные инструменты для любого IT-разработчика, изучением которых следует заняться как можно раньше.
Мы рекомендуем изучать Git на ITVDN при помощи курса “Основы работы с Git”.
Знания о веб-технологиях и сети интернет
Чтобы качественно выполнять свою работу, фронтенд разработчик должен разбираться в вебе и понимать принципы его функционирования. Таким образом, необходимо знать:
как работает интернет;
протоколы HTTP/HTTPS, веб-сокеты;
как работают браузеры;
что такое DNS и как он работает;
что такое доменное имя;
что такое хостинг.
Также будет неплохо, если вы попробуете настроить сайт на каком-нибудь бесплатном хостинге, привяжете домен к этому хостингу.
JavaScript
Язык программирования, который используется как при разработке клиентской стороны веб-приложения, так и серверной. При помощи JavaScript (сокращенно — JS) можно писать даже настольные и мобильные приложения, используя определенные программные платформы и библиотеки. Этот язык позволяет:
динамически изменять разметку;
осуществлять интерактивное взаимодействие с пользователем;
анимировать изображения;
совершать валидацию форм;
управлять мультимедиа и т. д.
Другими словами, JavaScript “оживляет” страницу и добавляет ей функциональности. Хорошее владение данным языком программирования является обязательным для каждого FrontEnd разработчика.
JavaScript использует официальный стандарт ECMAScript (сокращенно - ES), который подразумевает определенное формальное описание синтаксиса, базовых объектов и алгоритмов. На данный момент существует множество различных версий ES. Работодатели чаще всего требуют знание ES6+.
Однако, вначале необходимо изучить чистый JavaScript (vanilla JavaScript) и лишь потом вникать в новые стандарты. Как ни крути, а классику надо знать. Благодаря хорошему владению JS можно быстро разобраться в любой версии ES и затем освоить любой фреймворк или библиотеку.
ITVDN предоставляет возможность изучить JavaScript с нуля до продвинутого уровня при помощи курсов:
JavaScript Стартовый;
JavaScript Базовый;
JavaScript: Расширенные возможности.
JavaScript Core (DOM, AJAX, JSON)
DOM (Document Object Model) - объектное представление исходного HTML-документа. Ключевым является понятие DOM-дерева, которое описывает структуру страницы. С помощью объектной модели JavaScript получает полную власть над HTML-документом: возможность редактировать, удалять и добавлять элементы и атрибуты HTML, менять CSS код и т. д.
AJAX (Asynchronous JavaScript And XML) - это синтез технологий JavaScript и XML, который фактически представляет собой комбинацию:
встроенного в браузер XMLHttpRequest-объекта (чтоб запрашивать данные с веб-сервера);
JavaScript и HTML DOM (чтобы отображать или использовать данные).
AJAX позволяет веб-страницам совершать асинхронное обновление, обмениваясь данными с веб-сервером. Благодаря этой технологии страница не нуждается в перезагрузке - обновляется лишь конкретная ее часть (вспомните ленту новостей в социальных сетях).
JSON (JavaScript Object Notation) - это общий формат обмена данными. Позволяет совершать обмен информацией между программными продуктами, написанными на разных языках. Таким образом, клиент, использующий JavaScript, может легко передавать данные на сервер, который реализован с помощью Ruby/Java/PHP.
Все три технологии являют особую ценность для каждого веб-разработчика и раскрывают организацию работы интернет-приложения.
REST API
API – Application Programming Interface – это набор правил, при соблюдении которых программы могут взаимодействовать между собой. Разработчик создает API на сервере и позволяет клиентам обращаться к нему.
Красноречивым примером будет API от Google Maps, позволяющий веб-разработчику указать на гугл карте расположение определенного здания (точку выдачи интернет-заказов, офис компании и т. д.) на своем сайте. Таким образом, программист лишает себя необходимости самому разрабатывать собственную карту и пользуется уже готовым решением от Google, используя набор правил от API.
REST – Representational State Transfer – это архитектурный подход, регламентирующий, как именно API должны выглядеть. Этому набору правил должен следовать девелопер при создании собственного приложения. Простыми словами, REST – это обычный запрос вида «клиент-сервер» с использованием HTTP-протокола.
Фронтенд разработчику необходимо разбираться в REST API, поскольку эта технология используется везде, где необходимо работать с данными от сервера.
Алгоритмы и структуры данных
Понимание алгоритмов и структур данных — обязательные знания для любого программиста.
К структурам данных относятся: стеки, очереди, связанные списки, графы и т. д. Изучив их, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные программы, которые будут эффективно работать с памятью.
Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач. Когда говорят об алгоритмах, обычно имеют ввиду алгоритмы сортировки и поиска: сортировки прямым включением, прямым выбором, слиянием, пирамидальная, прямой поиск, бинарный, индексно-последовательный и другие.
Важно разбираться и в нотации Big O, которая описывает сложность каждого алгоритма. Данный механизм помогает определить, при каких условиях выгоднее использовать тот или иной алгоритм.
Отметим, что как новичку, вам не надо нырять вглубь этих тем. Будет достаточно теоретического владения, а также умения написать несколько алгоритмов. В разработке сайтов это не очень нужно, но практически ни одно собеседование не обходит стороной тему алгоритмов и структур данных.
Фреймворки JavaScript
Это инструменты, с помощью которых создаются динамические веб/мобильные/десктопные приложения на языке JavaScript. Они ускоряют разработку веб-приложений и предусматривают четко структурированную организацию кода, повышая его качество и чистоту.
Самыми популярными фреймворками для фронтенд-разработки можно назвать Vue.js, Angular, а также библиотеку React. Каждый из них предназначен для решения своего спектра задач и имеет различную степень сложности: Vue.js - самый легкий (но и с наименьшим сообществом), React - средней сложности, Angular - высокой сложности. Стоит сконцентрироваться на глубоком изучении одного фреймворка, но в то же время очень рекомендуется знать особенности и сферу применения всех вышеперечисленных технологий.
Какой фреймворк все же выбрать? Мнения на этот счет расходятся. Инструментарий выбирается индивидуально под проект и трудно предугадать, какие задачи вам нужно будет решать. На данный момент наибольшей популярностью пользуется React, поскольку он сбалансирован как с точки зрения сложности, так и с точки зрения богатства функционала. К тому же, наибольшее количество вакансий припадает именно на этот фреймворк, а значит, что он интересен не только разработчикам, но и бизнесу.
Каждый из фреймворков доступен для изучения на платформе ITVDN. По направлению Angular:
Angular 11.0 Базовый;
Angular Углубленный.
По направлению React:
React Базовый;
React Углубленный.
По направлению Vue.js:
Vue.js Стартовый;
Vue.js Базовый.
Инструменты управления состоянием программы (State Management)
Большие веб-приложения постоянно растут в сложности, а потому хранить данные, которые могут использоваться в разных местах становится все сложнее. Для решения этой проблемы были придуманы отдельные библиотеки, идущие параллельно с фреймворками — они служат для управления глобальным хранилищем данных всего веб-приложения и называются менеджерами состояний. Их применение уже стало стандартом во FrontEnd разработке. Для девелоперов, которые используют Vue.js, это VueX, для React-разработчиков — Redux и MobX, для Angular-девов — RxJS, NgRx.
TypeScript
Кроссплатформенный строго типизированный язык, который является расширением JavaScript. Строгая типизация позволяет уменьшить количество потенциальных ошибок в исходном коде, написанном на TypeScript. Также, этот язык реализует концепции, которые близки объектно-ориентированным языкам, таким как C#, Java и подобным. TypeScript повышает скорость и удобство написания сложных комплексных программ, вследствии чего их становится легче поддерживать, масштабировать и тестировать.
В вакансиях этот язык встречается довольно часто вне зависимости от целевого фреймворка. При этом для Angular разработчиков знание TypeScript обязательно. Из-за высокой востребованности данного языка мы поместили его в список обязательных для изучения.
Основы Figma
Figma является популярным дизайнерским инструментом для создания интерактивных прототипов приложений или веб-сайтов. С его помощью дизайнер создает дизайн, который фронтенд разработчик затем верстает с помощью HTML/CSS и добавляет интерактивность при участии JavaScript.
Знание основ фигмы позволяет девелоперу удобно взаимодействовать с дизайнерским прототипом: быстро узнавать необходимые размеры тех или иных элементов, производить экспорт картинок и иконок и т. д. Дополнительный плюс – возможность использования браузерной версии Figma.
Английский язык
План обучения Front-end должен обязательно включать в себя подтягивание English. Знание английского является одним из основных требований к фронтенду-разработчику, поскольку большое количество полезной информации находится именно на англоязычных сайтах. Уровень чтения технической документации будет достаточным для комфортного использования иностранных ресурсов (Intermediate).
Однако чем выше уровень вашего английского, тем больше шансов получить job-оффер. Инглиш используется не только при работе с документацией, но и при коммуникации с командой и клиентами. Среди программистов бытует выражение: «Какой язык программирования следует учить первым? Учи английский!». Поэтому не пожалейте ваше время и хорошенько подтяните английский – вполне вероятно, что именно хорошее владение им станет решающим при рассмотрении вашей кандидатуры.
Необязательные технологии
Паттерны проектирования JavaScript
Это лучшие практики, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Знание шаблонов проектирования позволяет писать более чистый, понятный и читаемый код, а также избегать “изобретения велосипеда”. Более того, владение паттернами показывает вашу грамотность, как разработчика, и повышает вашу ценность в глазах работодателя, что поможет выделиться на фоне конкурентов.
Чтобы вы могли хорошенько разобраться с темой шаблонов в JavaScript, рекомендуем курс “JavaScript Шаблоны”.
Линтеры
Инструменты, позволяющие анализировать качество JavaScript-кода в соответствии со стандартом ES. Они встраиваются в среду разработки и указывают на наличие несоответствий стандарту кода, если таковые имеются. Данный механизм полезен как для единоличной разработки (для самоконтроля), так и для командной, когда каждый разработчик должен следовать тем же языковым конструкциям, чтобы на выходе получить единый, целостный проект. Один из самых известных линтеров – ESLint.
Это необязательный инструмент для работодателя, но он очень полезен для веб-разработчиков из-за его возможностей по контролю качества кода.
Тестирование
Jest и Cypress — главные инструменты модульного тестирования, которое возлагается на плечи разработчика. Но что это такое?
Unit тестирование (оно же — модульное тестирование) — процесс, который заключается в создании тестов для проверки работоспособности отдельных участков написанного программистом кода. Выполняется непосредственно автором кода.
Какую пользу приносит Unit тестирование:
существенное сокращение багов в коде;
упрощение рефакторинга кода;
обеспечение качественного отделения интерфейса от реализации;
лучшее понимание написанного кода;
возможность протестировать мельчайшие участки кода.
Все инструменты учить не надо — достаточно научиться управляться лишь с одним из них.
Webpack
Мощный сборщик модулей, позволяющий скомпилировать в один файл несколько разных модулей. Используется для работы над объемными проектами. Успешно используется как во фронтенд-разработке, так и при создании бэкенда.
Gulp / Grunt
Системы сборки, автоматизирующие рутинные задачи разработчиков: минификацию кода, оптимизацию изображений, тестирование, анализ качества кода и прочее. Подходят для разработки небольших проектов.
SOLID принципы
SOLID – это принципы, являющиеся своеобразным ремнем безопасности для тех, кто работает в соответствии с парадигмами объектно-ориентированного программирования. Они были созданы с целью обезопасить ООП-ориентированного разработчика от непонятного, запутанного спагетти-кода, который также очень трудно поддерживать.
SOLID – это акроним, состоящий из пяти букв, которые кодируют пять основных принципов:
S – Single Responsibility Principle (принцип единой ответственности)
O – Open-Closed Principle (принцип открытости-закрытости)
L – Liskov Substitution Principle (принцип подстановки Барбары Лисков)
I – Interface Segregation Principle (принцип разделения интерфейса)
D – Dependency Inversion Principle (принцип инверсии зависимостей)
Владение этими принципами позволяет грамотно проектировать и разрабатывать такие программные системы, которые с большой вероятностью смогут длительное время развиваться, расширяться и поддерживаться.
Хотя SOLID принципы написаны преимущественно для ООП, их идеи вполне применимы и к современной JavaScript-разработке, что поможет фронтенд разработчикам создавать более чистый и лаконичный код.
Зарплаты FrontEnd разработчиков
Обратимся к статистике, опубликованной на странице украинского IT-сообщества DOU, а именно – к зарплатной аналитике украинских разработчиков за лето 2023 года. Медианная зарплата всех украинских разработчиков, принявших участие в опросе (а их 6605), следующая:
Intern Software Engineer – 450 USD;
Junior Software Engineer – 1000 USD;
Middle Software Engineer – 2600 USD;
Senior Software Engineer – 4900 USD.
Теперь взглянем на медианную ЗП FrontEnd разработчиков:
Junior – 950 USD;
Middle – 2500 USD;
Senior – 4750 USD.
Выходит, медиана фронтендщиков на всех тайтлах немного меньше, чем общая медиана, однако разрыв весьма небольшой.
Давайте взглянем, сколько зарабатывает этот специалист за пределами Украины. В этом нам помогут результаты опроса Stack Overflow Developer Survey 2023 (свыше 90 000 респондентов из США, Индии, Германии, Канады, Великобритании и других стран). Эта цифра – 59 970 USD в год (примерно 5000 USD на месяц).
При этом будет важно сказать, что фронтендщики из данного опроса имеют в среднем 8 лет профессионального кодинга – и это один из самых низких показателей. Ниже них располагаются лишь Data Scientist / ML Specialist – 7.9 лет опыта, а также студенты, которые имеют чуть больше 2.8 лет опыта в профессиональном создании кода.
Итоги
FrontEnd разработчик – достаточно универсальный боец в мире веб-разработки. Он должен уметь и верстать, и создавать логику работы клиентской части, и понимать работу серверной части веб-приложения. Для овладения таким большим инструментарием стоит запастись временем, терпением и упорством. Указанные в статье средства разработки сайтов также имеют аналоги, поскольку для решения различных задач подходят разные веб-инструменты. Однако мы выбрали самые популярные и эффективные из них.
Если у вас есть желание осваивать эту профессию и вы хотите самостоятельно “пощупать”, чем занимается фронтенд разработчик, на ITVDN создана комплексная программа обучения в формате видео обучения, которая включает 44 видео курса. Чтобы получить доступ ко всем видео курсам на ITVDN сроком на 12 месяцев с возможностью скачивать на ваше устройство видеоматериалы (что очень актуально во время блэкаутов), советуем рассмотреть пакет подписки «Премиум Plus».
Если вам больше нравится живое онлайн обучение с тренером и в группе с другими учениками, предлагаем формат Live Online для изучения специальности FrontEnd (Angular или React направления).
Желаем вам успехов в достижении ваших целей!
Оставайтесь с ITVDN!
Какую IT-специальность выбрать в 2023 году?
Автор: Влад Сверчков
Кратко об украинском IT в 2022 году.
Украинский IT-специалист в 2022 году.
Аналитические обзоры современного IT.
Какие IT-специальности будут востребованы в 2023 году?
Кому нужно хорошее владение английским языком?
Выводы.
Приветствуем наших читателей!
Украинское IT демонстрирует отличную прочность и адаптивность даже в условиях полномасштабной войны. Да, многим айтишникам пришлось осуществить вынужденное переселение в другие регионы страны или даже в другие государства, чтобы находиться в относительной безопасности. Однако большинство сохранило за собой работу и доходы, позволяющие не только обеспечивать себя и свои семьи необходимыми условиями и средствами для жизни, но еще и активно донатить на армию и разнообразные волонтёрские проекты – средний донат по состоянию на июнь 2022 года составил $270 в месяц (в соответствии с результатами опроса на DOU).
Стабильность и хорошие условия труда, возможность удалённой работы из любой точки мира, где есть интернет, большое количество IT-направлений на выбор – эти и другие особенности стали очень востребованными у многих украинцев. Появилось большое количество желающих попробовать свои силы в IT и вместе с тем созрели главные вопросы: “С чего начать? Какую IT специальность выбрать в 2023 году?”.
А ведь действительно – как грамотно оценить ситуацию на рынке IT и выбрать себе специальность, которая будет:
нравиться;
иметь хорошие карьерные перспективы;
обеспечивать удовлетворительные условия труда и ЗП?
Будем разбираться с этим в данной статье. Мы рассмотрим самые главные специальности, которые будут оптимальными для новичков и будут пользоваться спросом на рынке IT ещё долгое время.
Кратко об украинском IT в 2022 году
Не успел мир оправиться от кризиса, вызванного коронавирусом, как сразу появился новый в результате полномасштабного вторжения россии на территорию Украины.
Согласно аналитике Opendatabot – украинского ресурса, который предоставляет доступ к государственным данным и анализирует открытые данные, – IT-услуги стали единственным направлением бизнеса, которое показало прирост в 2022 году по сравнению с 2021 – на 27% (январь-май 2022). А второе исследование показывает, что за 8 месяцев этого года произошел рост экспорта IT-услуг на 16% по сравнению с соответствующим периодом в 2021 году. В августе 48% всех экспортируемых Украиной услуг принадлежали именно IT-отрасли.
Красноречива и статистика Джина – украинского ресурса по анонимному поиску вакансий.
Спрос на Djinni превышает количество предложений почти в три раза. В сентябре – 18 779 открытых вакансий и 52 405 кандидатов.
Из поста в телеграм-канале Джина легко видеть, что в августе 2022 было более 250 тысяч отзывов на вакансии – это при том, что с августа 2021 по февраль 2022 количество отзывов каждый месяц колебалось в пределах от 77 до почти 111 тысяч.
Еще один августовский пост демонстрирует зависимость среднего количества отзывов на вакансию от требования к опыту кандидата. Таким образом:
кандидаты без опыта – 75.25 отзывов на вакансию;
1 год опыта – 31.36 отзывов;
2 года – 12.39;
3 года – 5.76;
5 лет – 4.1.
У новичков сезон настоящих "голодных игр".
Тем не менее, IT-сектор демонстрирует хорошую стойкость и положительную динамику, несмотря на проблемы, принесенные войной. Это перспективная отрасль, которая не только дает массу преимуществ украинцам-айтишникам, но и хорошо подпитывает экономику.
Следует не забывать, что такая успеваемость во многом зависит от зарубежных заказчиков, ведь большинство украинских IT-продуктов и IT-услуг экспортируются за границу – примерно 95% (по материалам “Экономической правды”).
Украинский IT-специалист в 2022 году
Обратимся также и к свежему портрету украинского IT-специалиста от DOU за 2022 год (15 135 респондентов).
Наибольшее количество мужчин по направлениям:
DevOps, SRE (97.3%);
системное администрирование (95.8%);
CTO, высшие руководящие должности (92.9%);
разработка ПО, Software Engineering (91.3%);
разработка игр (89.5%);
Data Science (80.3%);
техническая служба поддержки (70%);
тестирование (65.8%);
менеджерские должности (64,9%).
Наибольшее количество женщин в HR/Recruiting (90%), маркетинге (64%) и техническом писательстве (62%). За ними следует дизайн (45.6%), сфера продаж (44%) и аналитика (42.5%).
Согласно картинке выше, наибольшее количество опрошенных украинских айтишников работает в качестве разработчиков. Далее следует профессия тестировщика, менеджера, HR/рекрутера и т. д.
Из картинки выше видно, что чаще всего респонденты имеют тайтл Middle (1-5 лет опыта) и Senior (3-9 лет). Разработчики уровня Junior составляют 16.2% (до 2-х лет опыта), а интерны – всего 1.3% (без опыта).
Наибольшее количество начинающих (Junior и Intern) среди:
HTML Coder (45%);
Data Science (27%);
Game Developers (25%);
аналитики (24%);
тестировщики (23%).
При этом IT Украины насчитывает большое количество начинающих. 6% опрошенных находятся в IT менее года, 59% трудоустроены в IT 5 лет или менее, а 71% имеют до 6 лет опыта по своей текущей специализации.
87% респондентов имеют высшее образование, а 8% из них – даже два. Еще 5% являются студентами и только на пути к получению диплома. Научной степенью владеет около 2% опрошенных. Чаще всего это те, кто разрабатывает ПО под различную электронику (Hardware Engineers – 9%), Data Science специалисты (7%) и представители высших руководящих должностей – CTO/CEO (6%).
Касательно английского: в этом году 53% респондентов оценили свой уровень как Upper Intermediate (выше среднего) или Advanced (углубленный). 33% определяют свой уровень как Intermediate (средний).
На изображении мы видим, что наиболее интересная работа у руководителей высшего звена (а кто бы сомневался?), специалистов в сфере маркетинга и HR/рекрутеров (критерии "цікава" (интересная) и “дуже цікава” (очень интересная)).
Наиболее недовольными оказались сисадмины, Support и специалисты по продажам. Специалисты первых двух направлений специализируются на решении технических проблем, поэтому частые дергания во время работы, необходимость быстро все починить и аффилированные с этими процессами стрессы для них не редкость. Еще можно добавить относительно невысокую медианную ЗП – $1000-$1045 – чуть выше Junior разработчика. А недовольство специалистов по продажам можно связать с большой ответственностью и последствиями частого общения с различными клиентами: Sales Manager должны всегда демонстрировать уверенность, знать все о своей компании и своем продукте, действовать так, чтобы не запятнать их имидж, быстро находить ответы на вопросы клиентов и выполнять другие профессиональные обязанности.
Аналитические обзоры современного IT
Воспользуемся аналитикой всемирно известного ресурса Stack Overflow, которым пользуется абсолютно каждый программист современности. Сравним последние на сегодняшний день опросы, проведенные данным ресурсом – Stack Overflow Developer Survey 2022 (70 000 респондентов) и Stack Overflow Developer Survey 2021 (80 000 респондентов). В опросах принимали участие специалисты из различных уголков мира.
Из иллюстрации выше видно, что наиболее популярными направлениями, в которых работают IT-специалисты, являются:
Электронная коммерция – интернет-магазины, финансовые и торговые сделки и транзакции, проведенные через интернет и т. д.
Финансовые технологии – оптимизация и усовершенствование финансовых услуг, оказываемых тем или иным бизнесом, компанией, корпорацией и т. д.
Разработка мобильных приложений под Android и iOS.
Медиасфера.
Медицинские технологии – улучшение качества и безопасности медицинских услуг различного характера.
Разработка игр под различные платформы.
Далее следуют направления, которые в этом году не пересекли 5-процентный барьер.
Из изображения выше видно, что наибольшее количество специалистов относится к следующим IT-направлениям:
FullStack – разработка серверной + клиентской части веб-приложений;
BackEnd – серверная сторона веб-приложений;
FrontEnd – клиентская сторона веб-приложений;
Desktop or enterprise – разработка настольных приложений (Desktop приложений), разработка приложений для нужд бизнеса (Enterprise).
На следующих позициях идут:
разработчики мобильных приложений – как под Android, так и под iOS;
DevOps специалисты – синхронизируют все этапы разработки ПО: от создания кода до тестирования и релиза;
инженеры облачных технологий – занимаются облачной (cloud) инфраструктурой;
администраторы баз данных;
системные администраторы.
Просмотрим первые позиции этого же рейтинга, но за 2021 год.
Наблюдаем аналогичную картину: первые позиции заняты направлениями FullStack, BackEnd, FrontEnd, Desktop, Enterprise, Mobile Development, DevOps.
Обратимся и к рейтингам языков программирования. Опрос Stack Overflow 2022:
Опрос Stack Overflow 2021:
Первое место в обоих рейтингах занимает язык программирования JavaScript, широко применяемый в web девелопменте (и во FrontEnd, и в BackEnd областях). Далее следуют языки верстки – HTML & CSS – инструменты, которые используют при создании визуальной составляющей веб-сайтов и веб-приложений (FrontEnd). На третье место попадает SQL – язык запросов для работы с реляционными базами данных (БД), который обязательно используют разработчики серверной части веб-приложений, администраторы БД и другие специалисты.
Python, Java и C# – очень востребованные среди работодателей и популярные среди разработчиков языки программирования, отличающиеся широким спектром применения, понятностью синтаксиса, относительной простотой. Они попадают в каждый ТОП-10 различных языковых опросов уже много лет; их перспективность и актуальность обещает удерживаться еще долгое время. Особой популярностью пользуется Python, поскольку его синтаксис максимально прост и лаконичен.
TypeScript – это тот же JavaScript, только с несколькими нововведениями и строгой типизацией для увеличения читаемости кода, а также уменьшения количества возможных ошибок. Используется в веб-разработке вместе с соответствующими фреймворками и платформами.
Node.js – платформа, которая расширяет возможности и область применения JavaScript (бэкенд, настольные приложения, микроконтроллеры).
Bash/Shell/PowerShell – инструменты, которые чаще всего пригождаются системным администраторам и DevOps инженерам, потому что позволяют автоматизировать различные рутинные процессы, благодаря чему они и получили высокие позиции в рейтинге.
C/C++ – это современные корифеи от мира IT-разработки. Непростые в изучении языки, которые имеют очень большие возможности и мощности. Незаменимы при создании ресурсоемкого ПО, игр, микроконтроллеров и т. д.
PHP – классический язык серверной разработки. Несмотря на возраст, до сих пор популярен и востребован.
Рассмотрим также и рейтинг языков в соответствии с индексом TIOBE. Он ежемесячно оценивает популярность языков программирования и считается респектабельным источником – масса аналитиков ссылается на него в ходе своих исследований.
Рейтинг TIOBE отличается от опроса Stack Overflow – это связано с разницей опорных точек этих аналитик. Стек оверфлоу опирается на опрос, статистика TIOBE основывается на количестве квалифицированных инженеров во всем мире, а также на количестве курсов и сторонних поставщиков. Такие известные поисковые движки и сервисы, как Google, Yahoo!, Wikipedia, Amazon, Bing, YouTube и Baidu используются в расчете рейтингов. Следует отметить, что TIOBE не указывает, какой язык является наилучшим, или на каком написано наибольшее количество кода. Он может быть использован, чтобы обнаружить, соответствуют ли ваши навыки запросам современности, или чтобы принять стратегическое решение относительно того, какой язык следует использовать для создания нового приложения или программной системы. Больше информации о методах определения индекса по ссылке.
Рейтинг языков в соответствии с индексом PYPL выглядит следующим образом:
PYPL создан за счет анализа того, насколько часто люди ищут в поисковике Google туториалы (инструкции, документации) по языкам программирования. Проще говоря, чем больше гуглят туториалы к тому или иному языку, тем выше его позиция в рейтинге.
Рассмотрим список популярных веб-технологий в соответствии с опросом Stack Overflow за 2022 и 2021 годы соответственно:
Как видно из диаграмм, главные позиции принадлежат FrontEnd библиотекам и фреймворкам – jQuery, React.js, Vue.js, Angular, BackEnd-технологиям (Node.js, Express), а также технологиям .NET платформы – ASP.NET и ASP.NET Core. После них идут фреймворки Django и Flask (Python).
Список других фреймворков, библиотек и инструментов разработки:
Первое место сейчас занимает платформа .NET от компании Майкрософт. Затем следуют технологии направления Python: NumPy (дает доступ к ряду математических конструкций), Pandas (манипулирование данными и их анализ). За ними – фреймворк Spring (Java), предназначенный для веб-разработки. Менее популярны инструменты Python для работы с данными и ML – TensorFlow, Scikit-learn, а также платформы для мобильной разработки – Flutter и React Native.
Полученные сведения уже дают достаточное представление о том, что сейчас происходит на рынке IT-услуг и позволяют делать определенные прогнозы относительно востребованности IT-профессий.
Какие IT-специальности будут востребованы в 2023 году?
FrontEnd Developer
FrontEnd – это ответвление в разработке, направленное на создание клиентской стороны веб-приложений, веб-сайтов или другого ПО и информационных систем: внешний вид приложений, пользовательская логика, анимации – все, с чем пользователь может взаимодействовать напрямую.
Когда говорят о FrontEnd или BackEnd, чаще всего подразумевают именно Web стихию. На самом же деле, фронтенд и бэкенд бывают не только в вебе, но и в десктопных и мобильных приложениях. Однако исторически сложилось так, что под этими двумя терминами понимают именно веб составляющую, поэтому и в этой статье мы будем придерживаться этих традиций.
Согласно анализу Stack Overflow Developer Survey 2022 и 2021 годов, а также анализу индексов TIOBE и PYPL, ядро фронтенда – HTML, CSS и JavaScript – до сих пор востребовано и используется многими разработчиками.
Кроме того, ресурсы поиска работы в IT содержат большое количество вакансий FrontEnd Developer. Например, на уже упомянутом Djinni на момент написания статьи было опубликовано 1399 предложений по направлению JavaScript / FrontEnd, тогда как на C# / .NET, Java и Python специальности приходилось 678, 884 и 514 вакансий соответственно.
IT-индустрия имеет большой спрос на FrontEnd разработчиков, поэтому нет никаких сомнений, что это направление будет актуально и в 2023 году.
BackEnd Developer (Python, Java, C#, PHP)
BackEnd – это ответвление в разработке, направленное на создание серверной стороны веб-приложений или веб-сайтов: взаимодействие приложения с БД, работа с данными пользователя, серверная и вычислительная логика, программно-аппаратная часть сервиса – всё, что скрыто от пользователя и находится “под капотом”.
На вооружении BackEnd девелопер держит один из популярных языков программирования: C# / PHP / Python / Java / JavaScript (Node.js) / Ruby и т. д. Также данный специалист знает множество сопутствующих технологий и инструментов серверной разработки.
BackEnd развивается параллельно с FrontEnd-ом, айти-рынок имеет много соответствующих предложений с хорошими условиями труда, поэтому перспективность изучения данного направления очевидна.
Full Stack Developer
Синтез двух вышеописанных специальностей. Не секрет, что любой работодатель ценит сотрудника, который может успешно выполнять несколько задач, совмещая в себе обязанности других специалистов. Так же и в IT – особенно ценны разработчики, которые способны своими знаниями и навыками покрыть несколько профессий, а в данном случае – FrontEnd и BackEnd.
Подробный разбор специальности Full Stack Developer вы найдете в нашей статье. Там мы объясняем специфику данного направления, необходимые для изучения технологии, преимущества и недостатки профессии, а также даем важные советы по овладению этой профессией.
Mobile Developer (Android / iOS)
Мобильная разработка является относительно молодой, поскольку зародилась чуть более двух десятков лет назад. За это время она претерпела многие изменения и сегодня возглавляет одну из главных позиций в IT. При этом наработками специалистов этой сферы пользуется почти каждый человек — это не только смартфоны и планшеты, но и фитнес-браслеты, смарт часы, электронные книги, составляющие «интернета вещей» и другие гаджеты.
Наиболее популярные языки мобильной разработки: Java / Kotlin под Android разработку и Objective-C / Swift под iOS.
DevOps инженер
DevOps – это методология, являющаяся симбиозом разработки (Development) и системного администрирования (Operations). Её главная цель – увеличение частоты выпуска релизов. Специалисты данного направления также должны разбираться в использовании облачных технологий и обладать навыками автоматизации инфраструктуры.
DevOps Engineers выбирают Python в качестве основного языка программирования за его лаконичность, многозадачность и поддержку большого разнообразия специальных пакетов, созданных для повышения эффективности этого языка программирования, а также за другие преимущества. Python в основном используют вместе с командной оболочкой Bash с целью упростить процессы развертывания ПО и автоматизировать различные задачи системного администрирования (написание скриптов).
Фактически, DevOps специалисты – это программисты-сисадмины. Бизнес очень любит специалистов-мультитулов, поэтому эта профессия очень актуальна, престижна и одна из самых высокооплачиваемых в IT.
CyberSecurity
IT-индустрия наращивает свои объемы и мощности, следовательно, растет востребованность и тех, кто должен её защищать. На это и направлена деятельность специалиста по кибербезопасности. Данное направление имеет несколько ответвлений, и вы можете как защищать инфраструктуру от проникновения и выстраивать надежную оборону (направление "защиты"), так и выявлять уязвимости путем всевозможных хакерских методов – такие специалисты называются пентестерами (направление "атаки").
Можете погрузиться в анализ и риски (должность Security Analyst и Risk Compliance Specialist соответственно), заниматься защитой инфраструктуры и поиском компьютерных вирусов (Malware Researcher), а также испытать себя во многих других “кибербезопасных” специальностях – эта сфера дает много возможностей для реализации людям с сильными аналитическими способностями, внимательностью, рассудительностью и стрессоустойчивостью.
Database Administrator, DBA
Комфортная жизнедеятельность в современном мире зависит от баз данных: картотека пациентов больницы, учёт студентов и их успеваемости, учётные записи пользователей различных сервисов, банковские счета, разнообразный контент в интернете и т. д. Существует реальная потребность в специалистах, умеющих грамотно обслуживать эти БД и сопутствующую инфраструктуру.
Кроме того, DBA берет на себя такие функции, как выработка требований к базам данных, их проектирование, реализация, эффективное использование и поддержание целостности БД, включая управление учетными записями пользователей БД и защиту от несанкционированного доступа.
Здесь важно владеть языком запросов SQL, одной из СУБД (PostgreSQL, например), а также различными технологиями и приемами системного администрирования.
PM (Project Manager)
Современное IT имеет острый дефицит хороших, талантливых проектных менеджеров – управленцев, которые руководят IT-проектом в целом. Часто это бывшие программисты или тестировщики. Однако чтобы стать проджект менеджером, необязательно иметь айтишное прошлое.
Ключевые обязанности PM: проектирование и расстановка приоритетов, планирование выполнения задач, контроль, коммуникации, а также оперативное решение проблем внутри проекта. Самая главная задача – сделать так, чтобы идея заказчика была реализована в пределах заданных сроков с учетом ограниченности ресурсов.
Конечно, данный список обязанностей выполнен широкими мазками. На самом деле PM-ы часто работают сверхурочно и их рабочее состояние можно описать как "белка в колесе". Но трудно что-то противопоставить послевкусию успешно выполненного проекта.
Нюанс этой профессии состоит в том, что должность PM-а предполагает значительную конкуренцию. Согласно данным, в сентябре 2022 года на сайте DOU на одну вакансию PM-а откликнулось более 34 кандидатов (всего 184 вакансии). Большее количество отзывов только у FrontEnd, HR, QA и Legal (право). Поэтому, чтобы получить желаемый job-оффер, необходимо иметь не только опыт и знания, но и хорошие организаторские способности, а также другие важные для этой профессии личностные качества.
QA Engineer, тестировщик
Специалист по обеспечению качества, он же – тестировщик. И хотя QA и тестировщик – это немного не одно и то же, но мы приравняем их друг к другу, потому что это не играет значительной роли в данной статье.
Сфера ответственности тестировщика – выявление неисправностей, багов ПО, допущенных разработчиками. Востребованность этих специалистов трудно обжаловать, ведь каждый программный продукт перед появлением может пройти не одну итерацию тестирования, где выявляется большое количество багов. Выходит, без QA мы имели бы очень недоработанное ПО, а производитель — провал продукта на рынке, падение репутации и, возможно, даже банкротство.
Тестировщиков делят на два вида – Manual QA Engineer и Automation QA Engineer. Первые выполняют всю работу вручную, а вторые используют инструменты автоматизации, в том числе языки программирования (например, Java, Python), что повышает ценность такого сотрудника, и, соответственно, его зарплату. Конкуренция за место тестировщика в украинских реалиях чрезвычайно высока, поэтому для получения первого job-оффера нужно будет приложить много усилий.
Data Scientist
Ученый-эксперт, главными задачами которого является извлечение из большого массива данных полезной информации, которая затем может использоваться в различных областях; в основном, это бизнес и наука.
Данный специалист должен иметь отличное аналитическое мышление, владеть математическим аппаратом (включая мат. статистику и мат. моделирование), знать программирование (Python, R) и базы данных (как реляционные, так и нереляционные). С начала 2010-х годов профессия Data Scientist считается одной из самых привлекательных, высокооплачиваемых и перспективных в IT.
Data Analyst
Если Data Scientist ориентируется на предиктивную аналитику, то Data Analyst работает с информацией постфактум. У этого специалиста менее техническая роль — он работает с уже готовыми данными: проводит дескриптивный анализ, интерпретирует и визуализирует результаты, а также презентует отчет своим заказчикам.
При этом с БД, языками Python и SQL и другими инструментами сбора и обработки информации аналитик должен быть хорошо знаком, чтобы эффективно выполнять возложенные на него задачи.
Кому нужно хорошее владение английским языком?
Согласно уже упомянутому портрету IT-специалиста, высокий уровень английского у тех, кто общается с иностранными заказчиками и клиентами или занимается продвижением продуктов: Customer Success Manager, Project Manager, высшее звено руководства, специалисты по продажам, архитекторы, техлиды.
Также английский на уровне Upper Intermediate+ у технических писателей и специалистов по работе с данными (Data Scientists, аналитики).
Разработчикам будет достаточно уровня Intermediate, чтобы читать техническую документацию без лишних проблем. Однако желательно иметь Upper Intermediate и выше, поскольку это не только способствует более комфортному взаимодействию с англоязычными ресурсами и иностранными коллегами, но и подталкивает вас вверх по карьерной лестнице, а также положительно влияет на ЗП (согласно зарплатному опросу от DOU за лето 2022).
Выводы
В этой статье мы постарались дать исчерпывающий ответ на вопрос: "Какую IT-специальность следует выбрать в 2023 году?" В наших суждениях и выводах мы опирались на такие авторитетные ресурсы (международные и украинские), как Stack Overflow, Djinni, DOU, индексы TIOBE и PYPL. Также была проведена корреляция с прошлым годом, чтобы продемонстрировать стабильность рынка IT-профессий и показать, что вложенные вами силы и время в обучение не будут напрасными, а выбранное вами направление никуда не исчезнет.
На лидерских позициях, как и в прошлые годы, остаются Web, Enterprise и Mobile разработка. Тестировщики также востребованы, хотя и имеют чрезвычайно большую конкуренцию среди начинающих, поскольку это один из самых легких способов попасть в IT, а с началом полномасштабного вторжения интерес к IT возрос так же стремительно, как и во время ковида.
Высокая востребованность также и у DevOps инженеров при относительно невысокой конкуренции – 3.7 отзыва на одну вакансию в сентябре 2022 года (всего вакансий – 243, источник).
Безусловно, полномасштабная война наложила свой отпечаток на IT в виде миграции бизнесов и айтишников на запад Украины, резкого притока новичков, увеличения "дистанционных" вакансий и проблем с электроэнергией из-за обстрелов россиянами нашей энергетической инфраструктуры, но зарплаты остались высокими – где-то даже повысились, – да и в целом IT стоит и обеспечивает как айтишников, так и нашу армию.
Так зачем же ждать подходящего момента? Берите момент и делайте его подходящим! ITVDN – это образовательная платформа для онлайн обучения программированию и информационным технологиям.
Наш портал насчитывает более 230 видео курсов и имеет собственные программы обучения по 15 популярнейшим IT-профессиям, среди которых:
Верстальщик сайтов
FrontEnd Developer
Java Developer
Python Developer
C# / .NET Developer
Android Developer
Unity / Game Developer
PHP Developer
и другие.
Формат обучения – записанные видео курсы, по которым можно учиться в любое удобное время. Таким образом, вы сможете овладеть IT-профессией не выходя из дома. Со всеми специальностями можно подробно ознакомиться, перейдя на страницу специальностей ITVDN.
Кроме записанных видео курсов наша образовательная платформа предоставляет обучение в новом формате – Live Online. Он предусматривает регулярные онлайн занятия с ментором в небольших группах из 6-25 человек, на которых объясняется новый материал, обсуждаются нюансы выполнения практических задач, есть проверка ДЗ и чат для общения с одногруппниками, а также доступ к видео курсам ITVDN. В процессе обучения учащиеся также разрабатывают собственный курсовой проект, который в конце защищают и добавляют в своё портфолио.
На данный момент Live Online обучение проводится по четырем самым популярным IT-специальностям:
C#/.NET Developer
Frontend Developer
Java Developer
Python Developer
Если вас заинтересовал формат Live Online, переходите по ссылкам и ознакомьтесь с подробностями предложений по каждой из четырех специальностей.
Также предлагаем вашему вниманию подборку вебинаров, которые помогут вам разобраться в главных моментах того или иного языка программирования или специальности:
Стоит ли учить Ruby в 2023 году?
Как стать Java разработчиком в 2023 году?
Какой язык программирования учить в 2023 году?
Обзор полезных ресурсов для изучения C# и .NET с нуля
Как быстро выучить Python. Пошаговый план с нуля
Как стать PHP разработчиком и получить оффер от IT-компании
Старт карьеры в Java разработке. Личный опыт, актуальные тренды и подводные камни
Что такое DevOps
и другие полезные вебинары – в нашем каталоге.
Надеемся, что наша статья была полезна для вас. С радостью примем любые пожелания и с пониманием и уважением – любые замечания. Выбирайте IT-профессию вашей мечты и пусть ничто не останавливает вас на пути к ней!
Изучайте IT-специальности на ITVDN!
Собеседование с QA. 250+ вопросов для Junior, Middle, Senior
Автор: Влад Сверчков
Junior
1.1 Теория тестирования.
1.2 AQA
1.2.1 Программирование и Selenium
1.2.2 TestNG/JUnit, Git, CI
1.3 Web
1.4 Mobile
1.5 Практические задания
Middle
2.1 Теория
2.2 AQA
2.2.1 Selenium
2.2.2 Тестовая инфраструктура
2.3 Web
2.4 Mobile
2.5 Практические задания
Senior
3.1 Теория
3.2 Практические задания
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 12 января 2022 года. Оригинальная версия на украинском языке доступна по ссылке.
Эту подборку вопросов, которые ставят кандидатам разных уровней на технических собеседованиях на позицию QA, составили совместными усилиями практики. Список – лишь ориентир. Кандидатам советуем пробежаться по вопросам и отметить неизвестные слова, погуглить и заодно повысить шансы пройти собеседование.
Интервьюерам – пополнить свой запас интересных вопросов. Но не переборщите :)
Если вы не претендуете на позицию QA, просмотрите переводы подборок вопросов по другим популярным IT-специальностям.
Junior
Теория тестирования
1. Что такое тестирование?
2. Зачем тестировать ПО?
3. Какие существуют этапы тестирования?
4. Какие типы тестирования можете назвать?
5. Какие уровни тестирования знаете?
6. Какие техники тест-дизайна знаете?
7. Что такое техника анализа классов эквивалентности?
8. Что такое техника анализа предельных значений? В чем ценность этой техники?
9. Что такое Regression и Confirmation тестирование, какая между ними разница?
10. Как часто следует проводить регрессионное тестирование продукта?
11. Какие бывают виды интеграционного тестирования?
12. Что такое Configuration Testing?
13. Что такое Exploratory Testing?
14. Какие существуют UI-стандарты?
15. Что такое Black/Grey/White Box Testing?
16. Что такое Performance Testing?
17. Что такое Smoke и Sanity тестирование и какая между ними разница?
18. Что такое Traceability Matrix?
19. Что такое Sanity Testing?
20. Что такое End-to-End тест?
21. Что такое тестирование безопасности?
22. Что такое испытание на основе рисков?
23. Что такое динамическое тестирование?
24. Что такое «парадокс пестицида»?
25. Опишите основные фазы STLC? Дайте определение Entry и Exit Criteria.
26. Что такое Bug, Error, Failure, Fault?
27. Какие есть атрибуты баг-репорта? Какие основные поля для заполнения?
28. Какова разница между приоритетом и серьезностью?
29. Приведите примеры серьезного, но не приоритетного бага.
30. В чем разница между валидацией и верификацией?
31. Зачем нужна тестовая документация? Какие её виды?
32. Что такое тест-план? Какие элементы у него есть?
33. Какую обязательную информацию должен содержать тест-план? Как правильно его использовать, поддерживать и нужен ли он вообще для большинства проектов?
34. Какая разница между чеклистом и тест-кейсами?
35. Приведите пример хорошего тест-кейса.
Ответы на некоторые из этих вопросов вы можете найти в видео курсе QA Стартовый (урок 1, урок 3, урок 4, урок 5), Основы тестирования (урок 6), Основы тестирования ПО (урок 1-5), а также в вебинаре “QA практикум. Техники тест дизайна” (часть 1 и часть 2).
AQA (Automation QA)
Программирование
36. Что такое ООП? Назовите его принципы с примерами?
37. Что такое интерфейс? Что такое абстрактный класс? Чем они отличаются?
38. Что такое SOLID? Приведите примеры.
39. Что такое DRY, KISS, YAGNI?
40. Какие паттерны GOF вам известны? Приведите примеры их использования.
41. Что такое PageObject и PageFactory?
42. Какая иерархия Collections?
43. Какая разница между Thread class и Runnable interface?
44. Какая разница между String, Stringbuffer и Stringbuilder?
45. Разница между final, finally и finalize?
Selenium
46. Что такое Selenium и зачем его используют?
47. Что такое драйвер браузера?
48. Какие виды локаторов страницы существуют? Каковы их преимущества и недостатки?
49. Что такое Selenium Waits? Какие есть и чем отличаются?
50. Какие exceptions может бросить Selenium? Что они означают и как их обрабатывать?
51. Для чего используют JavaScriptExecutor? Приведите примеры.
52. Что такое Selenium Grid?
53. Какие способы click и send keys Selenium?
54. Как вы запускаете параллельное выполнение тестов? Что такое ThreadLocal?
55. Какая разница между Action и Actions?
56. Как написать метод isElementPresent?
57. Как вычитать данные из динамической веб-таблицы?
58. Можете ли вы назвать 10 интерфейсов в Selenium?
59. Назовите два способа, позволяющих автоматизировать капчу.
60. Вспомните типы навигационных команд Selenium.
61. Как найти поврежденные ссылки в Selenium WebDriver?
62. Какую технику следует рассмотреть, используя весь сценарий, если «нет ни frame id, ни frame name»?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Web Testing Automation on Java (урок 1), Автоматизация тестирования мобильных приложений (урок 5), а также в вебинаре “Selenoid или Selenium Grid — что лучше?”.
TestNG/JUnit
63. Для чего нужны TestNG/JUnit?
64. Какие инструкции используются в TestNG/JUnit?
65. Какие assertions есть в TestNG/JUnit?
66. Как выполнять тесты параллельно TestNG/JUnit?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Web Testing Automation on Java (урок 4).
Git
67. Для чего используют системы контроля версий?
68. Что такое Git? Каков принцип его работы?
69. Что такое commits, branches в Git?
70. Для чего нужны GitHub, GitLab и другие, базирующиеся на Git, вебхостинги проектов?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Основы работы с Git.
CI
71. Что такое CI?
72. Как автоматическое тестирование интегрируется в CI?
73. Как настроить Job или Pipeline на знакомом вам CI-инструменте?
74. Какие инструменты для генерации репорта после выполнения автоматических тестов вы знаете?
75. Какую информацию должен содержать отчет о выполнении автоматических тестов?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Web Testing (урок 4).
Web
76. Что такое клиент-серверная архитектура?
77. Что может выступать в роли клиента?
78. Что такое REST API, SOAP? В чем разница?
79. Какие протоколы передачи данных знаете?
80. Какие способы взаимодействия с API существуют? В чем разница между ними?
81. Как можно протестировать API, что там нужно проверять?
82. Как расшифровывается CRUD?
83. Чем отличается GET от POST?
84. Какие отличия между XML и JSON?
85. Какие знаете форматы передачи данных?
86. Как происходит шифрование?
87. Какие бывают виды баз данных?
88. Охарактеризуйте каждый класс status code (1хх; 2xx; 3xx; 4xx; 5xx).
89. Какие есть HTTP-методы?
90. Какие знаете Web elements?
91. Какие браузеры знаете? В чем их отличие?
92. Для чего необходимы инструменты разработчика в браузере (Chrome DevTools) и как они помогают в тестировании.
93. Что такое кэш?
94. Что такое сессия?
95. Зачем нужны cookies?
96. Что такое фрейм?
97. Что такое HTML/CSS/JavaScript?
98. Какую структуру имеет веб-страница?
99. Зачем чистить кэш?
100. Какие виды тестирования можно применить только к Web?
101. Для чего в веб-страницах используют JavaScript?
102. Что такое REST?
103. Что такое AJAX?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах QA Стартовый (урок 6), Web Testing, SQL Базовый.
Mobile
104. Какие мобильные платформы существуют?
105. Какие версии Android и iOS используются на рынке (минимальные и максимальные)?
106. Какие версии Android нужно тестировать, если заказчик сказал поддерживать с версии 5.0?
107. Назовите типы мобильных приложений.
108. Каков формат файлов сборок приложений для Android и iOS?
109. Что такое ADB?
110. Как снять логи с AOS/IOS?
111. Что нужно проверять при использовании сканера отпечатка/Face ID?
112. Как я могу запускать тесты Android без Appium?
113. Объясните концепцию дизайна Appium.
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Автоматизация тестирования мобильных приложений.
Практические задания
114. Написать чеклист для функционала корзины в интернет-магазине.
115. Написать тестовые наборы данных для поля ввода даты, которое отсеивает пользователей в возрасте до 18 лет.
116. Написать чеклист тестирования формы ввода данных платежной карты.
117. Протестовать «предмет» относительно различных видов тестирования. (Предмет - лифт, карандаш, калькулятор и т. д.)
118. Есть Input поле, принимающее целые значения от 18 до 99 включительно. Надо протестировать с помощью техники тест-дизайна Boundary Values Analysis и Equivalence Partitioning.
119. Есть веб-страница с полями: e-mail, password и кнопкой submit. Необходимо привести примеры отрицательных тест-кейсов, которыми можно проверить эту страницу.
120. Привести примеры тест-кейсов для функционала, находящегося на нескольких страницах проекта (например, поле поиска).
121. Как протестировать процесс оплаты в интернет-магазине?
122. Как протестировать сломанный тостер?
123. Объясните для 7-летнего ребенка, что такое база данных.
124. Определите необходимое количество функциональных тест-кейсов, чтобы проверить Log in форму.
125. Есть форма регистрации в веб-приложении с полями (first name, last name, username, password, repeat password) и кнопкой Register. Какие проверки нужно провести?
126. Поле username должно быть обязательным, но оно не является обязательным. Приведите пример баг-репорта, созданного для этой ошибки.
127. Как бы вы провели smoke-testing для приложения типа Telegram?
133. Как будет выглядеть баг-репорт, если, к примеру, не работает электрический чайник?
128. Есть таблица books с полями: name, price, page_count. Следует выбрать все имена книг, в которых price более 10 единиц и количество страниц от 20 до 100.
129. У вас есть функционал калькулятора, который доступен через веб-браузер по ссылке. Он имеет только функцию делить, так сказать, MVP-версию. Диапазоны для вписывания в числитель и делитель от 0,1 до 99,9. Вывод значения происходит автоматически, потому что front-end реализован на React JS. Как вы будете тестировать этот функционал? Какие виды тестирования примените? Какие техники тест-дизайна используете?
130. Задание на работу с SQL.
извлечь номер телефона и адрес пользователя Muzik.
Извлечь данные о пользователях, имеющих сумму заказа более 2000 грн.
Подсчитать количество заказов в таблице и общую сумму сделанных заказов.
131. Ваша компания разрабатывает программное обеспечение для медицинских систем, и вы тестируете компонент, управляющий дефибриллятором сердца. Вы заметили, что одно решение в тестовом модуле состоит из 34 независимых атомарных условий. Какой метод тестирования белого ящика следует выбрать для этого и почему?
132. Оздоровительная программа для сотрудников совмещена с оплатой медицинского страхования и имеет следующие правила:
сотрудники, потребляющие 17 единиц или менее алкоголя в неделю, получают $28 скидки на оплату.
Для сотрудников, которые заполнят «Оценку риска для здоровья», оплата уменьшается на $23.
Сотрудники, участвующие в ежегодном контроле за состоянием здоровья в компании: получат скидку на $50 за то, что имеют индекс массы тела (ИМТ) 25,5 или менее, и $19 скидки при ИМТ ниже 30. Некурящие получают дополнительную скидку на $46. Курильщики, присоединившиеся к курсу отказа от курения, получают скидку в $24. Курильщики, не присоединившиеся к курсу отказа от курения, оплачивают дополнительно $75.
133. Используя технику классов эквивалентности, сколько тестов нужно написать, чтобы покрыть вышеупомянутые условия на 100%?
134. Какое минимальное количество тестов необходимо для покрытия следующих условий автогражданки:
лица до 18 лет не застраховываются.
Для мужчин на красном авто прибавляется +15% к стоимости полиса.
Для женщин от 18 до 64 лет страховая премия 1000 грн.
Для мужчин от 18 до 64 лет страховая премия 1200 грн.
Для лиц старше 64 лет страховая премия 1800 грн.
135. Напишите сценарии автоматического тестирования для сортировки по цене и добавлению товара в корзину на сайте. К вашим тестам добавьте документацию с настройками и разместите ваше решение на GitHub.
Middle
Теория
1. Назовите обязанности QA?
2. Что знаете о тестировании нагрузки? В каком случае следует проводить такое тестирование? На каком этапе готовности продукта?
3. Что такое таблица решений/decision table и как её можно использовать?
4. Что может быть критериями запуска и завершения тестирования?
5. Расскажите о вариантах интегрирования тестовой документации в проект, инструментах для работы с ней.
6. Как организовать сквозное тестирование (e2e)?
7. Какие тест-кейсы можно сдать для тестирования баз данных?
8. Приведите примеры подходов для тестирования локализации.
9. Что такое A/B тестирование?
10. Что такое mock/stub? Какие знаете инструменты для работы с ними?
11. Когда нужно использовать технику Pairwise?
12. Что такое fuzz-тестирование и где его используют?
13. Что такое REgexp?
14. Как меняется стоимость дефекта при тестировании программного обеспечения?
15. Каковы пути анализа бизнеса клиента? Как определить целесообразность того или иного функционала?
16. Назовите последовательность выполнения CI/CD процесса на проекте.
17. Какое должно быть процентное соотношение между положительным и отрицательным тестированием на проекте?
18. Какой вид тестирования целесообразнее проводить до релиза?
19. Есть ли разница между bug leakage и bug release?
20. Может ли быть ситуация, когда критерии завершения (exit criteria) не выполнены? Что должно происходить в этом случае?
21. Что мы действительно должны покрывать тест-кейсами, а что считается избыточным расходом времени и денег? Когда нецелесообразно писать тест-кейсы?
22. Для какого функционала труднее всего написать тест-кейсы?
23. Как посчитать Cyclomatic complexity?
24. В чем основная разница между defect detection percentage и defect removal efficiency?
25. Какие модели risk-based testing вы знаете?
26. Что такое тестирование API? Какими инструментами пользуются для его выполнения?
27. Что такое performance testing? Какими инструментами пользуются для его выполнения?
28. Что такое load и stress testing? Какими инструментами пользуются для их выполнения?
29. Что такое contract testing?
30. Какая разница между Scrum и Kanban?
31. Расскажите о ритуалах, ценностях и ролях в Scrum.
32. Как выбор методологии может повлиять на качество разработки?
33. Нулевой спринт в Scrum. Для тестирования есть задание под названием «Настройка среды». Что здесь нужно выполнять?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Web Testing, QA Стартовый, “Методология управления проектами. Вступление в SCRUM”.
AQA
Selenium
34. Расскажите, как вы будете строить и внедрять стратегию по автоматизации тестирования.
35. Как взаимодействуют клиентская библиотека Selenium, драйвер браузера и сам браузер?
36. Для чего используют browser capabilities, arguments и options?
37. Что такое iframe и как с ним работать в Selenium?
38. Как обрабатывать браузерные сообщения (alerts)?
39. Что такое Appium?
40. Что такое Electron-based applications? Как использовать Selenium и Appium для их тестирования?
41. Как взаимодействовать с запросами, отправляемыми из браузера?
42. Как взаимодействовать с cookies, LocalStorage и SessionStorage?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Web Testing Automation on Java (урок 1) и Автоматизация тестирования мобильных приложений.
Тестовая инфраструктура
43. Что такое и чем отличаются виртуальная машина, симулятор и эмулятор?
44. Что такое контейнер и чем он отличается от виртуальной машины?
45. Как используют виртуальные машины и контейнеры в автоматизации?
46. Что такое IaaS и PaaS? Приведите примеры.
47. Что такое Configuration Management?
48. Что такое Provisioning?
49. Какие команды Linux Shell вам известны? Как с помощью команд Linux Shell найти лог-файл и строчку с ошибкой в файле?
50. Какие команды Windows CMD вам известны? Как с помощью команд Windows CMD найти IP-адрес машины?
51. Что такое SSH и как им пользоваться?
52. Что такое bash и batch скрипты? Зачем их используют?
Web
53. Какая разница между авторизацией и аутентификацией?
54. Как происходит авторизация на сервере?
55. Какие статус-коды ошибок бывают? Может ли сервер отправить код 400, если проблема на его стороне?
56. Как выполнить Debug страницы в браузере?
57. Как протестировать адаптивную верстку?
58. Что такое WebSocket и как проверить обрыв соединения?
59. Каковы есть основные виды уязвимости веб-приложений?
60. Какие инструменты для тестирования Web performance client-side знаете?
61. Какова разница между методами GET и POST?
62. Какая разница между методами PUT и PATCH?
63. Какие знаете сниферы?
64. Какова разница между DROP и TRUNCATE?
65. Что такое case function?
66. Что такое collation?
67. Что такое схема GraphQL?
68. Объясните разницу между OLTP и OLAP.
69. Вспомните разные типы репликации в SQL Server?
70. Что вы понимаете под Self Join? Приведите примеры.
71. Что такое cursor и как им пользоваться?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Web Testing Automation on Java, SQL Базовый.
Mobile
72. Что основное нужно проверить при тестировании мобильного приложения?
73. Что такое Manifest.xml в .apk файле и какие данные там указывают?
74. Что такое режим разработчика Do not keep activities?
75. Как происходит перехват трафика http/https для мобильных устройств?
76. В каком виде хранятся данные в мобильных приложениях локально?
77. Как тестировать миграцию локальных данных?
78. Каковы основные компоненты Android-приложений (активити / фрагмент / сервис / интент-фильтр)?
79. Опишите жизненный цикл активити.
80. Что такое утечки памяти? Как найти?
81. Как протестировать билд на Android?
82. Что такое Testflight? Как тестировать с его помощью?
83. Как работает Android? Какая у него архитектура?
84. Как происходит деплой программ IOS/AOS?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Автоматизация тестирования мобильных приложений.
Практические задания
85. Что делать, если разработчик не соглашается, что указанный баг действительно является багом? А если в требованиях использована неоднозначная формулировка? Если бизнес-аналитик, PM и представитель клиента сейчас недоступны, чтобы подсказать? Как можно предотвратить такую ситуацию?
86. Сложилась ситуация, когда команда тестирования не успевает закончить свою работу в дедлайн. Как правильно действовать в этом случае? А если релиз передвинуть нельзя? А если никакие фичи из релиза забрать нельзя?
87. Что делать, если проект уже начался, а QA-инженер там начал работать только когда начали разрабатываться бизнес-фичи? Какие этапы тестирования теперь нужно наверстать и нужно ли это? Как это сделать максимально грамотно без ущерба для загрузки по тестированию новых фич? Какие риски имеет позднее вовлечение QA-инженера в разработку?
88. Веб-страница с полями e-mail, password и кнопкой submit. Назовите отрицательные тест-кейсы, по которым можно проверить эту страницу.
89. Предположим, что после нажатия кнопки submit страница перезагружается и ранее введенные данные исчезают. Как проверить, что информация отправлена в базу данных?
90. Как проверить, что данные отправились на сервер, если у нас нет доступа к бэкенду?
91. Приведите примеры улучшений для приведенной веб-страницы (любая на выбор).
92. Составить Smoke Test Suite для DOU.ua.
93. Протестовать функционал банкомата с помощью техники State Transition Diagram.
95. Написать предельные значения для ввода в форму оплаты товара на сайте.
96. Есть метод POST, который регистрирует нового пользователя на сайте, есть тело запроса, содержащее данные о почте, телефоне, имени пользователя и адресе проживания. Какие кейсы для проверки можете привести?
97. На что следует акцентировать внимание при автоматизации методов API? Что следует проверять?
98. Вы тестируете логин-форму, вводите логин и пароль, нажимаете кнопку логин и ничего не происходит. Ваши действия?
99. В течение 5 минут найдите и опишите дефекты, которые вы видите:
100. Вам нужно сделать Regression Testing за два дня. Как вы это сделаете, если Regression Run охватывает 1000 тест-кейсов?
101. Вы тестируете интернет-магазин, который продаёт карандаши. В заказе нужно указать количество карандашей (максимум для заказа – 1000 штук). В зависимости от заказанного количества карандашей отличается цена:
1–100 – 10 грн за шт.
101-200 – 9 грн за шт.
201-300 – 8 грн за шт.
С каждой новой сотней цена уменьшается на 1 гривну. Задание: используя тест-дизайн, опишите все необходимые тест-кейсы, которые будут максимально покрывать описанную функциональность.
102. Есть приложение типа мессенджера, пользователь заходит в чат и отсылает файл (видит сообщение Failed to send...) Когда это может быть баг, а когда нет?
103. Есть веб-приложение интернет-магазина (регистрация, логин, поиск товаров, корзина и покупки). Программу поддерживают следующие браузеры: Chrome, Safari, Edge. У нас есть ограниченное время на тестирование. Расскажите, как вы будете проверять приложение?
104. Напишите автоматические тестовые сценарии для проверки API операций создания и просмотра GitHub Gists. Интегрируйте ваш проект с известной вам CI-системой.
Senior
Теория
1. Как вы преодолеете трудности из-за отсутствия надлежащей документации для тестирования?
2. Какой подход является наилучшим для старта QA в проекте?
3. Какие препятствия могут возникнуть в обеспечении качества для Agile Tester?
4. Что такое Definition of Done?
5. Когда можно считать, что тестирование окончено?
6. Что такое RCA в тестировании? Нужно ли его проводить?
7. Какой подход вы используете для Test Cases Review?
8. Какие виды рисков существуют? Что такое Mitigation Plan?
9. На основе чего нужно составлять стратегию для проведения тестирования нагрузки?
10. Как часто следует ревьюировать тестовую документацию?
11. Как можно быстро сделать выборку необходимых проверок для смоук-тестирования?
12. Как запланировать загруженность команды тестировщиков?
13. Какую ценность несет анализ результатов тестирования команде и проекту в целом?
14. Как можно подкорректировать флоу разработки, чтобы получать более чистые результаты на выходе и уменьшить количество багов на проде?
15. Расскажите о метриках качества, которые вы применяли. Зачем они нужны?
16. Как провести эстимейт задачи? Каковы техники оценки объема тестирования существуют?
17. Как можно посчитать покрытие тестами функционала?
18. Какое оптимальное количество шагов в тестовом сценарии?
19. Как избежать появления регрессивных дефектов?
20. Что такое тестирование со смещением влево (Shift left testing)?
21. Как будете тестировать программу, если для продукта нет документации?
22. В чем смысл юнит-тестов?
23. Какие минусы полной автоматизации тестирования?
24. Что такое ROI и как его считать?
25. Что такое CI/CD? Какие плюсы и минусы этого подхода?
26. TOP OWASP: какие знаете уязвимости и методы защиты?
27. Что вы думаете по поводу BDD? Когда следует использовать, а когда будет только хуже? Если все же следует использовать, то для UI или API автоматизированного тестирования?
28. Что такое сокеты и как их тестировать, вручную и автоматизировано? Зачем их используют?
29. Когда следует делать стресс-тестирование на проектах? От чего отталкиваться, когда строите сценарий для такого тестирования? Что учесть при выборе инструмента?
30. Расскажите об алгоритмах шифрования трафика.
31. Что такое NIC?
32. Для чего нужен протокол RTP?
33. Что, по вашему мнению, лучше – SIP или PRI?
34. Что такое NAT?
Практические задания
35. Сформулируйте негативные сценарии для POST-запроса, который создаёт нового пользователя.
36. Как вы регулируете конфликтные ситуации между QA и разработчиками?
37. Есть проект, на котором нет тестовой документации, но проекту уже год. Мануальным QA не хватает времени на тестирование, они очень устали, есть желание уволиться. Какое решение по команде можно принять?
38. Продайте мне тестирование как клиенту, не желающему его покупать. Кратко и структурированно опишите вашу работу на каждом из этапов разработки ПО, используя профессиональные термины (не лить воду).
39. У вас есть онлайн-калькулятор. Вы вводите 1+1 и получаете 3. Расскажите, как вы будете искать причину проблемы.
40. Могут ли быть такие виды архитектур? Чего может быть недостаточно для правильной работы архитектур, приведенных ниже?
Пример 1
Пример 2
Пример 3
Пример 4
Вопросы при выполнении этого задания:
какие запросы выполняются по форме авторизации?
Какой запрос выполняется, когда мы сохраняем данные в базе данных?
Можно ли авторизоваться с помощью GET-запроса и нормально ли так делать?
Какой код ответа мы получаем при падении ошибки на сервере, код при ошибочных credentials на форме авторизации?
Можно ли заменить SSL-сертификат шифрованием данных в пакете от клиента к серверу для протокола HTTP или это будет равноценной заменой?
41. Есть веб-страница с полями e-mail, password и кнопкой submit. Предположим, что после нажатия кнопки submit страница перезагружается и ранее введенные данные исчезают. Как проверить, что данные отправлены в базу данных?
42. Какое минимальное количество тест-кейсов необходимо, чтобы убедиться в корректной работе этой веб-страницы?
43. Как проверить безопасность на веб-странице (на выбор)?
Редакция DOU.ua выражает благодарность за вопросы и рецензию: Роману Поботину, Андрею Заблоцкому, Виктору Максименко, Марьяне Батюк, Ирине Литвин, Сергею Могилевскому, Святославу Логину, Роману Маринскому, Олегу Заревичу, Олесе Паславской, Тарасу Лирке, Максиму Богуну, Вадиму Гуличу, Виталию Кашубе, Юрию Суравскому, Светлане Франковой, Владимиру Арутину, Станиславу Жупинасу, Людмиле Федчук, Иванне Черухе, Юлии Левченко, Владиславу Куличенко, Юрию Бояру.
Собеседование с DevOps. 300+ вопросов для Junior, Middle, Senior
Автор: Влад Сверчков
Junior
1.1 Общие вопросы и Linux.
1.2 Networks, Clouds.
1.3 Automation, Information Security.
1.4 Виртуализация, CI/CD, Development.
1.5 Monitoring/Logging.
1.6 Практические задания.
Middle
2.1 Linux.
2.2 Networks.
2.3 Container orchestration.
2.4 Виртуализация и контейнеризация.
2.5 CI/CD, Clouds and Automation.
2.6 Monitoring/Logging.
2.7 Information Security.
2.8 Development, Databases.
2.9 Практические задания.
Senior
3.1 Linux.
3.2 Networking, Разное.
3.3 Container orchestration, Clouds and Automation.
3.4 CI/CD, Information Security.
3.5 Observability, Databases.
3.6 Практические задания.
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 7 декабря 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Можно спорить о популярности DevOps, а можно просто готовиться к собеседованию и получить желанные 9K :) Чтобы помочь вам сориентироваться в вопросах, которые задают на интервью, мы поговорили с теми, кто их проводит, и составили список возможных вопросов.
Junior
Общие
1. Что такое DevOps?
2. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время?
3. Как работает HTTPS?
4. Объясните концепцию Infrastructure as Code, зачем это нужно и какие проблемы решает?
Linux
5. Опишите общую архитектуру операционной системы.
6. Опишите основное предназначение операционной системы.
7. Зачем нужны файловые системы? Какие существуют?
8. В чем разница между виртуализацией и контейнеризацией?
9. В чем преимущества контейнеров?
10. Какова файловая структура в Linux (UNIX) системах, расположенных в /etc, /dev, /proc, /sys, /lib, /var (несколько директорий на выбор)?
11. Что такое Load Average?
12. В чем разница между soft и hard symlink?
13. Как работают file permissions, зачем директории права исполнения (+x)?
14. Что такое zombie process?
15. С помощью чего можно собрать информацию о текущем состоянии процессора, памяти, диска, сети?
16. Что такое swappiness?
17. Как посмотреть свободное место на диске?
18. Что такое inode?
19. Расскажите поэтапно процесс загрузки Linux с момента включения питания компьютера.
20. Что произойдет при выполнении команд:
1. cat file1 > file2
2. cat file1 >> file2
21. В чем разница между Ctrl+C и Ctrl+Z?
22. Как перенаправить одновременно stderr и stdin?
23. Как убить процесс? Какие есть типы сигналов?
24. Что делает команда grep?
25. Что такое скрипт bash?
26. Какие типы переменных используются в bash?
27. Что выведут команды:
1. echo ${hostname};
2. echo $(hostname);
Networks
28. Что такое модель OSI, TCP/IP?
29. Для чего нужны network masks?
30. Структура IP-пакета. Из чего состоит? Что такое фрагментация и почему она происходит?
31. Что такое коллизия? Почему возникает?
32. Что такое прокси?
33. Что такое firewalls и зачем они нужны?
34. Что такое NAT и для чего он нужен?
35. Какие типы IP-адресов вы знаете?
36. По какому порту и протоколу работают Ping и Traceroute?
Clouds
37. В чем разница между IaaS, PaaS и SaaS?
38. Что такое VPC и из каких компонентов должно состоять?
39. Что такое cloud-init? init/systemd/upstart configs?
Automation
40. Что такое IaaC и зачем он нужен?
41. Что такое Terraform?
42. Какие инструменты автоматизации вы знаете?
Information Security
43. В чем разница между аутентификацией и авторизацией?
44. Сертификаты. Как работает HTTPS? Что такое certificate ciphers?
45. Как безопасно передать данные своему коллеге?
46. Что такое MFA, TOTP?
Виртуализация
47. В чем разница между виртуализацией и контейнеризацией? В чем плюсы и минусы?
48. Как при запуске Docker-контейнера «повесить» его из 80-го порта в контейнере на 8081 на хост?
49. Как передать в виртуальную машину USB device?
50. Docker-контейнер потребляет многие SWAP. Что делать?
CI/CD
51. Что такое Continuous Integration и Continuous Deployment? В чем разница между Continuous Deployment и Continuous Delivery?
52. Опишите основные этапы CI/CD.
53. Опишите пример процесса CI (и/или CD), который начинается с момента, когда разработчик запушил изменения/PR в Git?
54. Расскажите о разновидностях тестов, которые мы можем использовать в CI пайплайне.
55. Какие инструменты CI вы использовали? Есть ли опыт работы с Jenkinsfile?
56. Какие виды тестов вы знаете и зачем они нужны?
Development
57. Git. Как решить merge conflict? Что такое rebase, cherry-pick?
58. В чем разница между git merge и git rebase?
59. Какие UI использовали?
60. Какая разница между GitLab/GitHub/Bitbucket?
61. Какая разница между Git pull/Git fetch?
62. Что такое Git-Flow?
63. Версионирование. Какая разница между SemVer и CalVer?
64. Тестирование. Какие существуют виды? Как писать тесты, TDD?
65. В чем разница между компилируемыми и интерпретационными языками программирования?
Monitoring/Logging
66. Какие метрики нужно собирать? Разница между infrastructure и application monitoring.
67. Какая разница между pull и push model в системах мониторинга?
68. Какая разница между Black box и White box monitoring?
69. Расскажите о подходах к сбору application логов.
Практические задания
71. Напишите простую программу на ваш выбор. Программа должна получать сообщения из сервиса очередей и печатать его в stdout. Сервис очередей — по вашему усмотрению.
72. Разберите структуру сервиса (на примере Docker-Compose).
73. Практическая сессия работы с Git (Git command line: fetch, push, pull, rebase, checkout, submodules).
Middle
Linux
1. Опишите архитектуру ядра Linux.
2. Что такое ядро и каково его предназначение?
3. Опишите общие части файловой системы Unix/Linux, архитектуру файловой системы.
4. В чем разница между RedHat и Debian?
5. В чем разница между /proc и /sys?
6. Ситуация: указывает, что на диске занято 50% места, а сделать файл даже под root юзером не можем. В чем проблема?
7. Мы удалили файл, открывший приложение. Как нам его восстановить?
8. Как найти PID процесса, его стартовые параметры?
9. Как проверить, открыт ли порт на удаленном хосте, локальном хосте?
10. Как искать файл по его содержимому?
11. Что такое SSH, как организовать доступ на сервер без пароля или с определенных хостов? Как ограничить доступные для выполнения команды?
12. Как проверить потреблённые ресурсы во время сеанса SSH?
13. Что означает разрешение на файл 755?
14. Что такое SELinux и зачем он нужен?
15. Как определить PCI-устройство в системе, например, RAID controller?
16. Как переименовать устройство, например, сетевую карту или диск?
17. Что такое LVM? Какие знаете примеры использования?
18. Что такое root reserved space?
19. Что такое exit code и как его узнать?
20. Почему вывод df -h указывает, что на диске занято мало места, но система не дает записать файл с сообщением “no space left on device”?
21. В чем разница между command1 & command2 и command1 && command2, а также command1 && command2 || command3?
22. Из сети резко вырос исходящий трафик на 25-й порт. Как, имея доступ на гейтвей, обнаружить вредителя из внутренней сети?
23. Как затюнить параметры Linux Kernel?
24. Что такое ulimits?
25. В чем разница между символическими и hard links?
26. Что такое фрагментация ext3 и ext4?
27. Зачем файловые системы ext* резервируют 5% места?
28. Как увеличить размер файловой системы?
29. Можем ли мы уменьшить размер файловой системы?
30. Что такое chroot и для чего он нужен?
31. У нас есть Linux box с 2 Гб оперативной памяти и Java-приложение, которое пытается выделить 4 Гб во время запуска. Удастся ли это?
32. Есть приложение, которое читает файл, который пользователь пытается удалить. Что случится? Можно ли удалить этот файл? Можно ли восстановить этот файл?
33. Какие механизмы создания процессов в Linux вы знаете?
34. Сравните systemd и init system.
35. У вас есть папка с большим количеством файлов, и вы хотите удалить все файлы с именами, начинающимися на A (прописная буква). Но команда rm –f A* выдает Argument list too long. Как удалить эти файлы?
36. Вы начинаете удалять файлы первым методом из предыдущего вопроса, но каждый rm запрашивает подтверждение. Это очень долго. Как можно ускорить эту операцию?
Networks
37. Расскажите о модели OSI. Опишите функции и назначение каждого уровня.
38. Какие сетевые топологии вы знаете? Опишите разницу между ними.
39. Зачем нужен IP-адрес, если MAC-адрес уникален? Разве мы не можем общаться только по MAC-адресу?
40. В чем разница между концентратором и коммутатором L2 в сетях Ethernet?
41. Что такое VLAN и для чего существует разделение на виртуальные локальные сети?
42. Какой номер порта используется для PING-коммуникации?
43. Что такое сеанс связи? Какой алгоритм использует TCP для доставки?
44. В чем основное отличие между TCP и UDP?
45. Зачем нам маршрутизатор по умолчанию?
46. Как хост решает DNS по умолчанию?
47. Компьютер начал получать IP-адрес из другой сети (есть подозрение, что в сети работает другой DHCP-сервер): как его найти и отключить? Какие методы защиты от такой проблемы?
48. Мы будем мигрировать сайт на новый IP-адрес. Как сделать, чтобы пользователи этого практически не заметили?
49. Что такое socket?
50. Как узнать, какие удаленные хосты подключаются к хосту через порт 8888? (с помощью команд и не используя /proc или /sys).
51. У нас есть несколько сетевых карт. Как увеличить пропускную способность сервера?
52. Как проверить открытые порты на удаленном сервере без команд Netcat или Nmap Linux?
Container orchestration
53. В чем преимущества Kubernetes как платформы?
54. Что такое control plane и из каких компонентов состоит?
55. Какие CNI вы использовали и чем они отличаются?
56. Чем отличается managed Kubernetes от self-deployed?
57. Как можно контролировать размещение подов в кластере? (taints/tolerations, affinities, topologies etc.)
58. Скейлинг кластера. Cluster autoscaler vs HPA vs VPA? Как сделать zero-downtime node decommission/cluster upgrade? PDB? Lifecycle hooks?
59. Какие способы для внешнего доступа к кластеру? ingress, node port, port-forward и т. д.
60. С каким PID запускается процесс в контейнере?
61. Что лучше использовать для изоляции окружения – Vagrant или Docker?
62. Какой инструмент оркестрирования контейнеров использовали? (Swarm, Kubernetes, Openshift, Rancher и т. д.)
63. Что происходит в Kubernetes после запуска kubectl (API, ReplicaSet Controller, storage back-end, scheduler, kubelet, worker node, pod)?
64. Какая разница между pod и контейнером в K8s?
65. Как мы можем сделать любой микросервис, работающий на K8s, доступным из внешней среды?
Виртуализация и контейнеризация
66. Какие типы виртуализации вы знаете?
67. Как работает Docker на macOS/Windows?
68. Что такое Docker-image и Docker-контейнер? Как они между собой связаны?
69. Каковы основные отличия между контейнерами докеров и виртуальными машинами?
70. Что такое image layer? Какое максимальное количество layers возможно? Почему нужно пытаться иметь малое количество layers? Какое оптимальное количество?
71. Как в виртуальной машине изменить размер диска после создания? Что нужно сделать с гостевой ОС?
72. Как в Docker реализовано ограничение ресурсов?
73. Существует виртуальная машина, к которой потерян доступ. Как, имея доступ к диску, восстановить root пароль/SSH-ключ?
74. Оптимизировать Dockerfile, объяснить, что и почему так:
FROM golang
RUN apt install -y pkg1 pkg2 pkgN # Dependencies for app
COPY. .
RUN go build -o app main.go
CMD ./app
75. Что такое IPVS и какой у него функционал?
76. Какова структура API в Kubernetes?
77. Что такое operators и зачем они нужны?
CI/CD
78. Какие стадии должны быть в любом пайплайне (lint, test, build, deploy etc.)?
79. Как и где хранить build artifacts?
80. Что такое артефакт?
81. Есть два бренча: dev и stage. Мы забросили Dockerfile в dev, а затем сбилдили в dev и stage. Это будет одним артефактом или разными?
82. Что вы использовали для автоматизации настройки Jenkins и GitLab CI?
83. Сравните CI инструментов: Jenkins, GitLab CI, AWS Code Pipeline, GCP cloudbuild, GitHub actions, Circle CI.
84. Deployment strategies. Какие существуют и чем отличаются (recreate, blue-green, canary etc.)?
85. Как реализовать СI/CD для программы, которая зависит от нескольких других программ?
86. GitOps. В чем его преимущества и недостатки?
Clouds and Automation
87. Какова роль и преимущества облачных сервисов для DevOps?
88. Что такое immutable infrastructure? Как достичь? В чем преимущества и недостатки? Packer, AMI и т. д.
89. Структура Terraform. Как организовать multi-environment project? Terraform workspaces?
90. Лучшие практики по использованию многих Terraform states.
91. Как организовать доступ команде разработчиков к AWS/GCP/Azure? Role-based access, assume role, SSO.
92. Что такое Terraform provider, module?
93. Как версионировать Terraform modules?
94. Когда нужно использовать local-exec и remote-exec?
95. Что такое golden image и как его создать?
Monitoring/Logging
96. Как мониторинг помогает поддерживать всю архитектуру системы?
97. Какие инструменты мониторинга вы использовали?
98. Что такое медиана и процентиль?
99. Что такое SLI, SLO, SLA? Зачем это нужно?
100. Архитектура системы для сбора логов, ELK, EFK etc. Как сохранить логи при отказе хранилища? Нужно ли использовать для этого брокер сообщений? Нужно ли делать throttling/rate limits?
101. Prometheus long-term storage. Какие варианты?
102. Как работает Prometheus?
103. В чем принципиальное отличие между Grafana и Kibana?
104. В чем главное отличие между Ansible and Terraform?
105. Что такое SAAS monitoring и какие виды знаете?
106. Если вы используете Datadog/NewRelic, то как нам отслеживать падение инструментов мониторинга?
107. Что такое distributed tracing и error tracking systems? Как вы думаете, когда следует их использовать?
Information Security
108. В чем разница между RBAC и ABAC?
109. В чем заключается XSS атака? SQL injection? Что такое CSP?
110. Какие базовые меры можно предпринять для защиты SSH-соединения?
111. Root-пароль неизвестен или потерян. Какова процедура восстановления?
112. Как управлять правами на файловой системе в Linux?
113. Что такое Firewall?
114. Чем отличается stateless от stateful фаерволов?
115. Сколько таблиц в iptables?
116. Можно ли настроить трансляцию NAT с помощью iptables? Какую таблицу следует использовать?
117. Какую таблицу используют для смены заголовков пакетов?
118. Если вам ломают Linux-сервер, то как более эффективно блокировать трафик с IP-адресов?
119. Принцип работы GCP Firewall: можем ли мы профильтровать трафик на Load Balancer?
120. Что такое SELinux?
121. Можно ли полностью отключить SELinux на лету?
122. С какими secrets management systems вы работали?
123. У нас есть сервер NAT, и мы хотим обеспечить доступ по IP к серверу снаружи. Как нам это реализовать?
123. Чтобы попасть на сервер клиента, нужно залогиниться на 4+ jump хоста. Как автоматизировать? Где мы будем хранить наш SSH-ключ?
Development
125. Что такое cookies? Зачем нужны? JWT?
126. Что такое feature toggles и зачем они?
127. Что такое TDD (Test Driven Development) и BDD (Behaviour Driven Development)?
Databases
128. Что такое индекс и что такое ключ?
129. Каковы преимущества и недостатки индексов?
130. Представьте, что вы разрабатываете систему биллинга, которая должна обрабатывать тысячи счетов. Какую стратегию обновления данных вы бы выбрали?
131. Какие методы чаще всего используют для масштабирования реляционных баз данных?
132. Опишите механизм транзакций БД.
133. Как мы можем удалить таблицу или базу данных?
134. Как найти медленные запросы в MySQL/PostgreSQL?
135. Какие SQL-операторы манипулирования данными вы знаете?
136. Можно ли вывести список баз данных/таблиц через CLI? Как мы можем переключаться между базами данных MySQL/PostgreSQL?
137. Какие storage engines в MySQL вы знаете? Какие отличия?
138. Как реализована репликация MySQL master-master? Сколько серверов MySQL может быть задействовано в таком взаимодействии?
139. Как работает репликация MySQL/PostgreSQL? Какие параметры должны быть настроены для репликации?
140. Сравните SQL и NoSQL.
141. Sharding vs replication?
142. Какие есть виды индексов? Когда и зачем использовать?
143. Требования к схеме БД. Character sets, collations, default, not null и т. д.
144. Мы мигрируем MySQL/PostgreSQL из on-prem в облако. Как нам это сделать с минимальным даунтаймом?
145. Зачем и как тестировать перформанс баз данных?
Практические задания
146. Напишите Terraform module для инфраструктуры тестового сервиса в AWS.
147. Напишите hello-world программу на ваш выбор и сформируйте для нее helm chart/kustomize.
148. Как организовать деплой без downtime?
149. Опишите способы troubleshooting для Docker-контейнера.
150. Разобрать и объяснить структуру CI/CD pipeline (на примере gitlab.yml).
151. Продемонстрируйте навыки работы с GitOps, опишите деплоймент простенькой программы.
152. Как организовать деплой веб-приложения, запущенный на нескольких серверах без (или с минимальным) downtime?
153. Как с помощью Ansible узнать default gateway для пула серверов, и, если он отличается от желаемого, записать строчку «hostname: gateway» в файл на локальной машине?
Senior
Linux
1. Что может создавать высокую нагрузку на CPU (процессы приложений потребляют очень мало ресурсов CPU)?
2. У нас нет команд ifconfig, ip, и поставить мы их не можем. Как нам узнать ip address, mask, network, routes?
3. Что такое suid, sgid и sticky?
4. Что тюнилось с системой для нагрузки трафика 1GB, 10G, 40G+?
5. Что тюнилось с системой для высокой нагрузки на диск?
6. Что такое Linux namespaces?
7. Что такое Ceph, как работает?
8. Что нужно тюнить для Ceph?
9. Что произойдет, если /dev/sda1 перенесем в /root?
10. Мы удалили /dev/sda1. Как нам его восстановить? Что такое pseudo-devices?
11. Нам хакнули сервер, и в директории /var/www создали два миллиона файлов небольшого размера. Если использовать команду cd /var/www и затем rm -rf*, то у нас зависнет терминал. Как удалить файлы?
12. На каком уровне работает iptables?
13. Что такое eBPF и зачем нужен?
14. У вас есть файл, содержащий IP-адреса серверов (по одному в строке). Есть SSH доступ к этим машинам, и вам нужно выполнить задание (например, установить список пакетов на все узлы). Объясните, как можно это сделать.
Networking
15. В чем отличия между IPv4 и IPv6? Зачем мы мигрируем на IPv6?
16. Сосуществование IPv4 и IPv6: что это значит?
17. Действительно ли работают межсетевые экраны с поддержкой IPv6?
18. Как работает DHCPv6? Чем она отличается от DHCPv4?
19. Как фрагментируются пакеты IPv6 и чем это отличается от IPv4?
20. Нужно ли с IPv6 больше использовать NAT?
21. Что такое DPDK?
22. Что такое SR-IOV? В чем разница между DPDK и SR-IOV?
23. Что такое NetFlow и зачем нужен?
24. Что такое OpenFlow?
25.Что такое SDN и какие контроллеры вы знаете? Сравните контроллеры.
Разное
26. Что такое SDLC?
27. Расскажите о последнем опыте реализации архитектуры для сервиса.
28. Какой самый тяжелый скрипт писали?
29. Что такое configuration drift? Почему это происходит и как это усложняет жизнь инженерам\SRE\Ops?
30. Расскажите об архитектуре, за которую вы отвечаете, и укажите, как она масштабирована и отказоустойчива.
31. Назовите три важных KPI для DevOps-специалиста.
32. Как работает Kafka (clusters(brokers, controllers), topics, partitions)?
33. GitOps: Rancher Fleet vs Flux vs Argo?
34. Как использовать GitOps для обновления документации DevOps-приложений?
35. Расскажите об особенностях проектирования Kubernetes on-premise.
36. Как организовать On-call процесс для команды DevOps?
37. Опишите главные шаги загрузки операционной системы Linux.
Container orchestration
38. Service mesh. Что это такое и зачем нужно?
39. Cluster federation. Что это такое и зачем нужно?
40. Pod fine-grained access. Как реализовать? IRSA vs kube2iam vs kiam?
41. Как реализованы услуги в кубернетах?
42. Как дебажить трафик контейнера?
43. Что такое unikernel и зачем он нужен?
44. Почему коммьюнити переезжает из Docker containerd?
Clouds and Automation
45. Какие преимущества и недостатки cloud-провайдеров?
46. Cost оптимизация. Какие инструменты? Spot/preemptible instances, reservations?
47. Как организовать multi-account, multi-region cloud setup?
48. В чем разница между частными и публичными сетями в AWS?
49. AWS Lambda: имели ли опыт работы?
50. Когда следует переходить на AWS Lambda? Когда не стоит? Аналогичные решения в GCP или Kubernetes?
51. Когда лучше использовать CloudFormation, а когда Terraform?
CI/CD
52. Что такое state в контексте использования Terraform?
53. Какие существуют branching strategy? На что опираться при выборе?
54. Как реализовать feature/dynamic environments?
55. Как сделать эмуляцию ресурсов cloud-провайдера для локального тестирования и ускорения разработки?
56. Что такое MultiCloud?
57. Что такое Cloud-Agnostic и когда он потребуется?
58. Что такое Hybrid-Cloud и с какими решениями вы работали?
Information Security
59. Как должны храниться пароли в базах данных (Salt&Pepper, Rainbow Tables, Adaptive Hashing)?
60. Как передавать секреты в application (Secrets management)?
61. Сравните CI/CD SAST и DAST?
62. Какие вы знаете Kubernetes security practices? RBAC? OPA? Какие недостатки RBAC и какие кейсы знаете?
63. Расскажите о защите от DDOS атак, WAF.
64. Что такое Rootless containers и для чего он нужен?
65. Что такое AppArmor и Seccomp и зачем они нужны?
66. Приходилось ли работать с Falco? Если да, то что реализовывали?
67. HashiCorp Vault и как правильно передать нам секреты в контейнере и CI pipeline?
68. Что такое Admission Controllers и какие вы использовали?
69. Как хранятся секреты etcd? Как просмотреть ресурсы в etcd?
70. Чем проверяете на уязвимости ваш Kubernetes cluster?
71. Что такое Secure SDLC?
72. Что вы знаете о Cloud Infrastructure Attack via a Pull Request и как этого избежать?
Observability
73. Что такое observability и чем отличается от обычного мониторинга? Какие особенности необходимо учитывать в микросервисной архитектуре (tracing)?
74. Что такое SLI, SLO, SLA и зачем они нужны? Для чего используют error budget?
Databases
75. Что такое теорема CAP? Зачем это нужно?
76. Как работать с миграциями? Что делать в случае rollback? Как проверить, что миграция backward-compatible?
77. Опишите, как бы вы оптимизировали работу базы данных? (БД по выбору кандидата) Slow queries, buffers, thread pools?
78. Зачем нужно тестировать перформанс базы данных и какими инструментами?
Практические задания
79. Представьте, что вы CTO Booking или Airbnb. Какие бы вы принимали решения касательно:
языков программирования.
Infrastructure as a Code.
архитектуры инфраструктуры.
настройки CI/CD.
80. У вас есть файл, содержащий патчи в директории. Например:
/var/tmp/temp/file1.c
/var/tmp/file.ext
/var/tmp/temp/
etc... один путь в строке. Если путь заканчивается на '/' — это путь в каталог. Вам нужно восстановить это дерево каталогов с пустыми файлами в другой файловой системе. Напишите bash-скрипт.
81. Представьте, что вам нужно убедить Spotify, использующего AWS, перейти на GCP. Как вы будете мотивировать Spotify мигрировать на GCP?
82. Есть сервисная компания, предоставляющая сервис трекинга перевозок. Есть клиенты, которые не желают, чтобы их данные процессировались в AWS. Как нам реализовать multi-cloud solution?
Редакция DOU выражает благодарность за помощь в подготовке статьи: Владу Волошину, Павлу Петриченко, Виталию Гарбулинскому (BrightLocal), Евгению Думе, Сергею Яремчуку, Вадиму Шкилю, Александру Билюку, Александру Нежинскому, Владиславу Граму, Станиславу Коленкину, Олегу Миколайченку, Антону Гаврилову.
ТОП-10 лучших видео по .NET
Автор: Влад Сверчков
Здравствуйте!
Друзья, в этот раз мы подготовили для вас подборку лучших вебинаров от ITVDN по направлению .NET. В рейтинг вошли как познавательные вебинары с актуальной информацией, так и вебинары, ориентированные на прокачку ваших навыков создания кода. Давайте приступим к их рассмотрению.
Как стать C# разработчиком в 2021 году? .NET или .NET Core?
Автор — Дмитрий Охрименко, сертифицированный специалист Microsoft (MCTS, MCPD, MCT). Тренер-консультант, эксперт по построению распределенных и веб-ориентированных приложений. Автор курсов по .NET и FrontEnd разработке на ITVDN
C#/.NET разработка — это очень перспективное направление в IT, жизнь которому дала всемирно известная компания MIcrosoft. Если вам интересна данная сфера и вы хотите сделать в ней профессиональный старт, этот вебинар будет для вас как нельзя кстати!
Цель вебинара — помочь вам разобраться с главными аспектами данной специальности, опираясь на тенденции развития IT рынка, правильно расставить приоритеты и помочь спланировать ваше обучение и карьеру по направлению C# / .NET.
На мероприятии рассмотрены следующие важные вопросы:
Есть ли смысл начинать учить C# в 2021 году?
Что такое .NET Framework и что такое .NET Core?
Что учить и в какой последовательности? Карта специальности
Сравнение веб приложения на .NET и на .NET Core
Полезные ресурсы для обучения и развития
Вопросы и ответы
Как стать Full-Stack разработчиком?
Автор — Виталий Емец, FullStack Developer, Microsoft Certified Specialist
Full-stack разработчик (произносится “фулл стек”) — это мастер на все руки в мире веб-разработки. Ему под силу реализовать как клиентскую, так и серверную сторону приложения, которыми обычно занимаются FrontEnd и BackEnd разработчики раздельно друг от друга. Таким образом, в некоторых случаях Full-Stack специалист может даже в одиночку вести проект от начала до конца.
Какими навыками необходимо обладать, чтобы достичь такого уровня мастерства, и какой инструментарий должен быть у истинного Full-Stack разработчика? В чем преимущества данной профессии и какие у нее подводные камни? Каким образом Full-Stack разработка связана с технологиями C#/.NET? Все ответы на ваши вопросы вы получите на вебинаре Виталия Емца.
Что нового в C# 8, 9?
Автор — Алексей Никифоров, Software Engineer & Business Analyst at HYS-Enterprise
C# — это универсальный объектно-ориентированный язык, который является мощным инструментом создания программного обеспечения с широкой областью применения. При столь высокой функциональности он является достаточно несложным в изучении и отлично подходит тем, кто собирается сделать первый шаг навстречу программированию.
Данный вебинар предусматривает погружение в последние нововведения языка С#. Основной упор будет сделан на коммуникацию и обсуждение, предполагая, что участники вебинара — разработчики C#, которые следят за новинками данного языка. Автор пройдется по новым возможностям языка и обсудит, как эти изменения могут быть использованы с целью написания более выразительного и чистого кода.
Алгоритмы и структуры данных в .NET
Автор — Ярослав Кучук, .NET Developer
На вебинаре рассматривается вопрос фундаментальной алгоритмической подготовки – от математического обоснования мощности алгоритма до стандартных алгоритмов и структур данных. Базовые алгоритмы реализованы на C#; автор анализирует их с точки зрения их мощности.
На вебинаре рассматриваются следующие темы:
Понятие алгоритма
Сложность алгоритма и способы ее измерения
Основные структуры данных
Стек
Очередь
Связанный список
Хеш-таблица
Бинарные деревья поиска
Красно-черные деревья
Базовые сортировочные алгоритмы
Базовые поисковые алгоритмы
5. Безопасность .NET веб-приложений: частые ошибки и методы борьбы с ними
Автор — Алексей Голубев, Lead Software Engineer в компании SoftServe
Цель вебинара — обратить внимание разработчиков на проблемы в сфере безопасности веб приложений, которые можно устранить еще на этапе разработки. На вебинаре автор рассказывает о наиболее частых ошибках в приложениях, уязвимостях, связанных со сторонними библиотеками, и то, как их можно избежать.
Содержание вебинара:
Авторизация. Кражи сессий и стойкости паролей.
Человеческий фактор. Что разработчик может сделать не так и на что обращать внимание.
Инъекции. Какие встречаются чаще и чем опасны WYSIWYG редакторы.
Рандомизация. Случайности не случайны.
Вебинар подойдет .NET разработчикам — приветствуются специалисты любого уровня. Будет много практической информации которую можно применить как на этапе разработки, так и на этапе проектирования систем.
6. Техники тестирования для C# разработчиков. Уровень Advanced
Автор — Юрий Науринский, Senior Fullstack .NET Software Developer
На вебинаре будет рассмотрено 3 «продвинутые» техники тестирования, которыми должен владеть опытный разработчик. Будет немного теории, примеры и ответы на вопросы. Все примеры на языке С#. Ниже перечислены техники, которые рассматриваются на встрече.
Property based testing — техника тестирования, применяемая для проверки свойств функции, программы, системы. Ключевая идея в том, что описываются не заранее заданные ожидаемые значения, а свойства, которым должны удовлетворять тестовые примеры. Дальше, тестовые примеры генерируются случайным образом, постоянно проверяя, удовлетворяют ли они вышеописанным свойствам.
Performance testing — одна из самых важных техник тестирования, которую желательно знать каждому разработчику, применяемая для ответа на вопрос, насколько быстро работает функция, программа, система, а также отдельные её компоненты. Также, может отвечать на вопрос, сколько памяти потребляет функция, программа, система.
Load testing — техника тестирования, о которой желательно иметь представление каждому веб-разработчику; применяется для измерения поведения системы под различной нагрузкой, в частности нормальной и пиковой. Могут измеряться время ответа, пропускная способность, прочие бизнес-ориентированные метрики.
7. Docker для .NET разработчиков
Автор — Алексей Никифоров, Software Engineer & Business Analyst at HYS-Enterprise
Docker — это популярная платформа, которая используется при разработке, тестировании и развертывании программного обеспечения. Она позволяет сократить время между написанием кода и поставкой его на “production”. За последние годы популярность Docker’a сильно возросла и данная технология стала индустриальным стандартом в сфере контейнеризации программных решений.
Docker может быть полезен очень широкому спектру специалистов: разработчик, тестировщик, администратор, релиз-менеджер и т. д. Несмотря на то, что Docker написан на Go и использует особенности ядра Linux, .NET разработчики, которые традиционно ведут разработку под Windows, могут получить огромную пользу от использования Docker’a на самых разных уровнях. Знание данного инструмента повысит вашу продуктивность и даст конкурентное преимущество на рынке труда.
Вебинар будет полезен специалистам начального уровня, которые всегда хотели попробовать Docker. Ознакомление будет основано на .NET Core приложении. По завершению, вы смело будете ориентироваться в основных концепциях и инструментах и сможете успешно начать свою путь изучения Docker’а.
8. F# и функциональное программирование для C# разработчиков
Автор — Альберт Ташу, .NET Developer, тренер-консультант учебного центра CyberBionic Systematics, а также сертифицированный специалист Microsoft
С# — это мультипарадигменный язык, и с каждым релизом он приобретает всё больше возможностей, направленных на применение функционального программирования, которое является одной из самых востребованных парадигм в современной разработке программного обеспечения. Для того, чтобы легче было разобраться в этой парадигме, будет рассмотрен очень интересный язык платформы .NET — F#. Помимо этого, будут затронуты основные принципы функционального программирования и их применение при разработке на языке C#.
Содержание вебинара:
Введение в язык F#
Основы функционального программирования
Применение функциональных подходов при разработке на C#
Рефакторинг проекта на С#
9. Создание игры “Space Invaders” на C# с нуля
Автор — Армен Маилян, C#/.NET Developer, тренер-консультант CyberBionic Systematics
Какой самый лучший способ изучить что-то новое? Конечно же, превратить это в игру! Этот способ хорош и в обучении программированию. Начните изучение языка C# путем создания консольной компьютерной игры. Обещаем минимум скучной теории и максимум практики. Будет интересно!
Кому это будет полезно?
Новичкам. Никогда не программировали? Это не повод отказываться от нового крутого опыта. У вас есть шанс сделать свою собственную игру на C# и получить опыт практического применения данного языка программирования, а также попробовать себя в роли разработчика игр.
Начинающим C# разработчикам. Вы сможете углубить и применить на практике свои знания языка C# вместе с наставником.
Чему вы научитесь:
Разрабатывать простую игру на языке C#.
Разбивать большую задачу на отдельные этапы и последовательно их реализовывать.
Применять на практике процедурный и объектно-ориентированный подход для написания программ на С#.
Понимать и применять основы алгоритмирования.
Применять знания основ ООП для создания полноценной программы.
Использовать функционал .NET Framework.
10. Создание эволюционной игры Conway's Game Of Life на C# + WPF
Автор — Юрий Науринский, Senior Fullstack .NET Software Developer
На вебинаре будет рассмотрен Game Of Life — клеточный автомат, придуманный английским математиком Джоном Конвеем в 1970 году — и его реализация с помощью языка программирования C# и фреймворка WPF.
Прежде чем реализовывать игру, необходимо чётко определить задачу и постановку правил самой игры. Дальше будет рассмотрено, как реализовать саму логику игры без привязки к какому-либо фреймворку. Следующий логичный шаг после того, как была реализована основная логика игры — это рассмотрение привязки логики к фреймворку WPF и придание «жизни» игре. В конце вебинара автор расскажет, какие техники тестирования можно применить для гарантии корректности получаемого результата логики игры.
Данный вебинар будет интересен C# разработчикам, которые желают углубиться в разработку приложений с использованием технологии WPF, а также хотят рассмотреть с практической точки зрения достаточно интересную и известную математическую игру.
Изучайте .NET разработку на ITVDN!
400+ вопросов на собеседовании по С++
Автор: Влад Сверчков
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 5 апреля 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Junior
1.1 Общие вопросы
1.2 Метапрограммирование
1.3 Препроцессор и компиляция
1.4 Язык C
1.5 Язык С++ и ООП
1.6 STL / Algorithms
1.7 Многопоточность
1.8 Networking
1.9 OS/Linux
1.10 SCM / CI / CD
1.11 Практические задания
Middle
2.1 Общее
2.2 Препроцессор и компиляция
2.3 Язык С
2.4 Язык С++
2.5 Паттерны проектирования
2.6 Метапрограммирование
2.7 OOP/OOD
2.8 STL / Algorithms
2.9 Многопоточность
2.10 Networking
2.11 SCM / CI / CD
2.12 Практические задания
Senior
3.1 Общее
3.2 Препроцессор и компиляция
3.3 C/C++
3.4 OOP/OOD
3.5 STL / Algorithms
3.6 Многопоточность
3.7 SCM / CI / CD
3.8 Практические задания
Предлагаем список технических вопросов, которые, вероятно, вам поставят на собеседованиях по C++. Вопросы предоставили специалисты, принимающие участие в проведении технических интервью по этому языку. Учтите, что есть широкий спектр специализаций, поэтому выбирайте свое направление и готовьтесь.
Junior
Общие вопросы
1. В чем заключаются основные принципы ООП?
2. Что такое сложность алгоритма?
3. Код работает неправильно. Что делать?
4. Объясните такие структуры данных, как стек и очередь.
5. Какие книги, связанные с программированием, читали? Чему с них научились?
6. Что интересного нашли в новых стандартах С++17, С++20?
7. Что такое таблица ASCII?
8. Что такое Unicode?
9. Что такое паттерны проектирования и для чего их используют?
10. Патерны Singleton, Strategy, Template-Method, Decorator?
11. Для чего нужны модульные тесты?
12. Какая разница между модульными и интеграционными тестами?
13. Что такое TDD?
Метапрограммирование
14. Что такое шаблонный класс и шаблонная функция?
15. Что такое конструкторы? Какие типы знаете?
16. Может ли конструктор быть шаблонной функцией?
17. Может ли виртуальная функция быть шаблонной?
18. Что такое инстанциация шаблона?
19. Что такое специализация шаблона? Частичная специализация шаблона?
20. Расскажите об имплементации шаблонных классов в срр-файле?
Препроцессор и компиляция
21. Как проходит процесс компиляции срр-файлов в бинарный файл?
22. Что такое препроцессор?
23. Как работает препроцессор?
24. Какие знаете команды препроцессора?
25. Как работает директива include?
26. Как работает директива define?
27. Что именно линкует линкер?
28. Что такое оптимизация компилятора?
29. Что такое флажки компиляции?
30. Как защитить хедер от повторного включения?
31. Что делает директива include?
32. Как работают макросы?
Язык C
33. Как static влияет на глобальные/локальные переменные?
34. Как сonst влияет на переменную?
35. Какие варианты использования extern знаете?
36. Какие варианты использования volatile знаете?
37. Какие есть битовые операции?
38. Что такое булевая алгебра?
39. Расскажите об этапах разработки библиотеки или программы.
40. Что такое алгоритмы сортировки и какие вы знаете?
41. Какие алгоритмы работы со строками знаете?
42. Какие алгоритмы на графах знаете?
43. Где может храниться переменная?
44. Какая разница между calloc и malloc?
45. Для чего используют realloc?
46. Что такое указатель?
47. Каков размер указателя и от чего он зависит?
48. Какие есть операции с указателями?
49. Что такое struct?
50. Как определить размер структур?
51. Что такое выравнивание в структурах?
52. Что такое union?
53. Какой размер union?
C++/OOP
54. Что такое класс?
55. Какие есть основные типы данных в C++?
56. Что такое инкапсуляция? Как она реализуется в C++?
57. Какие есть встроенные типы в С++?
58. Что такое enum?
59. Как соотносится класс и объект?
60. Какая разница между структурой и классом?
61. Разница между private/protected/public и где они используются?
62. Какие методы класса являются стандартными для класса?
63. Что такое абстрактный класс и зачем он?
64. Сколько памяти занимает объект пустого класса class A {}; ?
65. Что случится с функцией, если к ней добавить ключевое слово static? В контексте члена класса? В контексте метода класса?
66. Какие особенности статических полей класса?
67. Какая особенность константных методов-членов класса?
68. Как изменить поле класса в константном методе класса?
69. Какие методы можно вызвать из константных объектов?
70. Что такое куча и стек? Различия, принцип работы.
71. В чем разница между указателем и ссылкой?
72. Для чего нужен указатель на функцию? Как его объявить?
73. Что будет, если забыть вызвать delete? Когда освободится эта память?
74. Что такое умный указатель? Какие умные указатели есть в стандартной библиотеке?
75. Как работает std::unique_ptr?
76. Как работает std::shared_ptr?
77. Расскажите о константности переменной, ссылки, указателя. Что такое константный указатель и указатель на константу? Размер указателя в памяти?
78. Расскажите о передаче аргументов по значению, по ссылке и по указателю.
79. Расскажите о порядке вычисления аргументов функции?
80. Что произойдет, если вернуть ссылку на временный объект?
81. Что такое перегрузки функции? Виды перегрузки.
82. Что такое явное и неявное приведение типов в С++? Расскажите о функциях явного приведения типов в C++.
83. Что такое инициализация переменной в if?
84. Что такое ленивые вычисления в С++?
85. Расскажите о циклах for и range-for.
86. Что делает ключевое слово auto? auto-определение return-типа, аргументов функции?
87. Чем отличаются delete и delete [ ] ? Что случится, если вызвать delete у объекта, созданного через new [ ] ?
88. Обработка ошибок в С++. Какие конструкции используют при обработке exception?
89. Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?
90. Что такое memory leak?
91. Можно ли выбрасывать exception из деструктора?
92. Как отловить деление на 0 в С++?
93. Как работают константные методы?
94. Что такое лямбда-функция в С++? Как получить доступ к переменным во внешней области видимости?
95. Для чего использовать namespace, anonymous namespace?
96. Как вызвать объект из nested namespace?
97. Как работают inline-функции? Может ли такая функция быть рекурсивной?
98. Что такое полиморфизм?
99. Для чего используется наследование?
100. Какие бывают типы наследования?
101. Для чего используют виртуальное наследование?
102. Как можно решить проблему ромбовидного наследования без использования виртуального наследования?
103. Что случится, если класс-наследник передать по значению в функцию, которая принимает базовый класс?
104. Что случится, если пронаследоваться от базового класса, который не имеет виртуального конструктора?
105. Что случится, если вызвать переопределенную virtual function из конструктора? Может ли конструктор быть виртуальным?
106. Может ли pure virtual function иметь имплементацию? Что случится, если вызвать pure virtual function из конструктора?
107. Какие методы генерируются для класса по умолчанию? В каком случае такие методы не будут генерироваться? Как заставить компилятор добавить/удалить эти методы?
108. Как запретить наследовать класс?
109. Какой порядок конструирования и разрушения классов в иерархии? Порядок инициализации полей класса?
110. Какие есть способы инициализации полей класса?
111. Может ли деструктор быть виртуальным?
112. Что делает ключевое слово virtual?
113. Для чего используют виртуальный деструктор?
114. Что такое глубокое копирование?
115. Что такое виртуальные функции и зачем они нужны?
116. Как защитить объект от копирования?
117. Что такое семантика перемещения?
STL / Algorithms
118. Из чего состоит STL?
119. Какие алгоритмы применяли с STL? В чем преимущество использования алгоритмов перед собственноручно написанными функциями?
120. Расскажите о контейнерах стандартной библиотеки vector, list, map, unordered_map.
121. Какие знаете типы итераторов? Чем они отличаются? В каких контейнерах используются?
122. Какая разница между std::set, std::map, std::unordered_multimap?
123. Что такое идиома remove-erase?
124. Как получить наименьшее значение типа?
125. Какая разница между std::map и std::hashmap?
126. Как подсчитать количество элементов в std::list?
127. Что такое сложность алгоритма и от чего она зависит?
128. В чем разница между vector и list и в каких случаях их лучше использовать?
Многопоточность
129. Что вам известно о многопоточности?
130. Что общего и различного в процессах и потоках?
131. Как синхронизировать передачи информации между потоками?
132. Какая разница между мьютексом и семафором?
133. Что такое deadlock?
134. Является ли С++ thread-safe?
135. Что такое race-condition?
136. Как избежать состояния гонки?
137. Что такое атомарная операция?
138. Как работать с std::mutex?
Networking
139. Что такое сокет?
140. Какие операции можно делать с сокетом?
141. Какая информация нужна, чтобы создать сокет?
142. Какие бывают модели сетей?
143. Расскажите об уровнях модели OSI.
144. Расскажите об уровнях модели TCP/IP.
145. Что такое IP-адрес?
146. Для чего используется маска подсети?
147. Какая разница между IPv4 и IPv6?
148. Сколько памяти необходимо для хранения IPv4?
149. Для чего нужен порт?
150. Сколько максимально может быть портов?
151. Какая разница между TCP и UDP?
152. Для чего такой ненадежный UDP-протокол?
OS/Linux
153. Что такое менеджер пакетов?
154. Какие бывают менеджеры пакетов?
155. Какие бывают дистрибутивы Linux?
156. Что такое PID?
157. Для чего используют файловые дескрипторы?
158. Расскажите о стандартных файловых дескрипторах процесса.
159. Что такое Pipe?
160. Что такое Named Pipe?
161. Что такое UID?
162. Расскажите о командах bash.
SCM / CI / CD
163. Какие есть виды SCM?
164. Для чего используют системы контроля версий?
165. Какие есть команды git?
166. Какие этапы во время комита изменений?
167. Разница между git fetch и git pull?
168. Какие есть этапы решения merge conflict?
Практические задания
169. Посчитайте количество единиц в произвольном числе.
170. Есть структура по типу «односвязный список». Напишите функцию, которая разворачивает список. То есть, первый элемент становится последним, а последний - первым.
171. Напишите реализацию функции int atoi (const char *str); преобразования строки в число.
172. Для структуры типа односвязный список напишите функцию вставки элемента.
173. Реализуйте класс vector.
174. Реализуйте бинарный поиск в массиве.
175. Реализуйте любую сортировку.
176. Реализуйте макрос для сравнения двух строк.
177. Реализуйте реверс строк.
178. Реализуйте перевода числа из строки в int.
179. Реализуйте подсчет слов в предложении.
180. Реализуйте подсчет чисел Фибоначчи.
181. Найдите такие элементы двух массивов, которые попадаются только в каждом из них. Желательно использовать STL.
182. Удалите из unordered_map элементы, которые делятся на 2 и выведите ключи этих элементов.
183. Напишите класс для логирования, который мог бы логировать к консоли или файлу.
184. Напишите функцию для определения, является ли определенный год високосным.
185. Напишите функцию для определения, является ли определенное слово палиндромом.
186. Напишите реализацию паттерна Singleton.
187. Напишите реализацию std::vector с операциями: push_back, push_front, pop_back, pop_front, size, clear.
188. Напишите рекурсивный поиск значения в дереве бинарного поиска.
189. Напишите функцию, которая проверяет, является ли дерево сбалансированным.
190. Напишить функцию для поиска уникального элемента в массиве.
Middle
Общее
1. Какие курсы прошли или книги прочитали за этот год? Чему научились?
2. Что нравится и не нравится в С++? Чего не хватает?
3. Что интересного нашли в новых стандартах С++17, С++20 (конкретные фичи)?
4. Расскажите о фичах, которые появились в разных версиях языка.
5. Расскажите о модели памяти, которая появилась в С++11 стандарте.
6. Что такое сериализация? Какие библиотеки знаете?
7. Какие знаете паттерны проектирования?
8. Что такое операционная система? Какие существуют типы по назначению?
9. Назвать основные составляющие и принципы работы ОС Linux в качестве примера системы общего назначения.
10. Что такое SFINAE и PIMPL?
11. Назовите порождающие, структурные и поведенческие паттерны программирования и приведите примеры их использования.
Препроцессор и компиляция
12. Расскажите о системах автоматизации билд-процесса.
13. Какая разница между статической и динамической библиотеками?
14. Какая разница между исполнительным файлом и динамической библиотекой?
15. Что такое DLL hell?
16. Что такое флажки компиляции (fPIC)?
17. В чем разница между дебаженной и релизной сборкой?
18. Что нужно для использования сторонней библиотеки?
19. Что такое internal linkage?
C
20. Что будет, если дважды вызвать free?
21. Как происходит вызов функции?
22. Как происходит передача параметров в функцию?
23. Как прорабатывается константа переменных?
24. Что означает ключевое слово inline?
25. Для чего используют выравнивания, можно ли его контролировать?
26. Расскажите о битовых полях.
27. Для чего нужен extern "C"?
28. Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка?
29. Как экспортировать/импортировать функции из динамической библиотеки?
30. Какая разница между С-style приведением типов и C++ приведением?
C++
31. Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?
32. Что такое Uniform initialization? Aggregate initialization?
33. Что такое Reference to temporary object? Как продлить время жизни временного объекта?
34. Что такое делегирующий конструктор?
35. Что такое список инициализации?
36. Какой порядок инициализации полей класса? Что случится, если конструктор инициализирует поля в другом порядке?
37. Что случится, если инициализировать поле другим полем?
38. Что такое copy elision? Сколько раз будет вызван конструктор/деструктор у объекта, которого возвращают по значению?
39. Что такое move-семантика?
40. В каких случаях не будет сгенерирован конструктор копирования?
41. Чем отличается конструктор копирования от оператора присваивания?
42. При каких условиях в конструкторе можно выбросить exception?
43. Что такое конструктор по умолчанию? Для чего нужны default и delete?
44. Чем отличается интерфейс от абстрактного класса?
45. Какие виды полиморфизма в С++?
46. Как реализовано наследование в большинстве компиляторов?
47. Множественное наследование: за и против?
48. Виртуальное наследование и порядок конструирования?
49. Зачем использовать override?
50. Какие есть правила вывода типа при использовании auto? В каких случаях auto может привести к нежелательному копированию объекта?
51. Расскажите обо всех возможных способах использования ключевого слова static в С++. Что такое static initialization order fiasco?
52. Что делает вызов throw; в блоке catch?
53. Чем отличается constexpr от const?
54. Что такое const correctness?
55. В каком случае можно использовать const_cast?
56. Что такое ключевое слово mutable и когда его нужно использовать?
57. Что такое ключевое слово friend и когда его нужно использовать?
58. Расскажите о лямбда-выражениях в С++ и доступ к переменным во внешней области видимости, захват this в лямбду и время жизни лямбды и захваченных переменных?
59. Что такое функтор? Напишите пример.
60. Что такое специализация шаблона?
61. Что такое dynamic_cast и run-time type identification?
62. Что такое exception? Как бросить и поймать?
63. Что будет, если бросить exception из конструктора? А из деструктора?
64. Что будет, если не поймать exception?
65. Что произойдет, если exception выйдет за пределы блока noexcept функции?
66. Для чего можно использовать приватное наследование?
67. Что такое контракт функции?
68. Что такое vptr и vtable?
69. Где содержится vptr?
70. Где содержится vtable?
71. Какая разница между overload and override?
72. Как компилятор различает члены класса и обычные переменные в функциях?
73. Зачем используют exceptions?
74. Что такое блоки try-throw-catch?
75. Расскажите о логике catch-блоков.
76. Что такое move constructor?
77. В чем разница между константным методом и неконстантным?
78. Что такое В-нотация и как определить сложность любого алгоритма?
79. Что такое таблица виртуальных методов?
80. Какие функции класса автоматически генерирует компилятор, если их не определить?
81. Что такое выравнивание данных?
82. Что такое exception?
83. Какие есть стандартные контейнеры и на основе каких структур они построены?
84. Что такое Undefined behavior? Приведите примеры.
85. Как определить, что в программе есть memory leak?
86. Для чего нужен std::make_shared? Чем он лучше создания std::shared_ptr через конструктор?
87. Что будет, если выделить один объем памяти, а записать больше?
88. Что такое переполнение stack?
Паттерны проектирования
89. Зачем нужны паттерны? Какие типы паттернов различают?
90. Недостатки паттерна Singleton? Когда он уместен?
91. Преимущества и недостатки PIMPL?
92. В чем разница между паттерн-фабрикой и фабричным методом? Когда использовать какой из них?
93. Что такое паттерн Observer?
94. Як контролировать состояние программы? Машину состояний? Паттерн состояние?
95. Что такое паттерн Visitor?
Метапрограммирование
96. Какие есть правила вывода типа в шаблоне?
97. Чем отличается using от typedef?
98. Сколько памяти занимает произвольная структура? Что такое выравнивание объекта?
99. Почему пустая структура занимает 1 байт? Какая минимальная единица адресации в С++?
OOP/OOD
100. Что такое SOLID? Что означает каждый из этих принципов?
101. Расскажите о паттернах проектирования.
102. Что такое Dependency Injection? Приведите пример.
103. Какие преимущества и недостатки функционального подхода?
104. Что такое принцип RAII?
105. Что такое принцип DRY?
106. Что такое принцип KISS?
107. Какие преимущества композиции перед наследованием?
STL / Algorithms
108. Какие алгоритмы с STL использовали? Каких не хватает?
109. Какими особенностями должен обладать класс, чтобы он был итератором?
110. Какие бывают итераторы?
111. Расскажите об инвалидации итераторов.
112. Как оптимизировать удаление элемента со средины вектора?
113. Как реализован vector?
114. Как реализован list?
115. Как расширить STL-контейнеры?
116. Какие есть алгоритмы в STL?
117. В чем разница между vector, deque, list, set e STL?
118. Когда надо использовать map? Когда - unordered_map? Какая сложность поиска и вставки в этих контейнерах?
119. Как проверить, есть ли в контейнере элементы? Почему вызов container.size() является плохой практикой?
120. Что такое exception safety guarantee? Какую exception safety guarantee имеют STL-контейнеры?
121. Расскажите о типах умных указателей и о подсчете ссылок в них.
Многопоточность
122. Является ли С++ thread-safe?
123. В чем разница между многопоточностью и асинхронностью?
124. Что такое многопоточность? Какую функциональность предоставляет С++ для разработки многопоточных приложений? Какие основные проблемы многопоточных приложений?
125. Как передать информацию между несколькими процессами?
126. Как синхронизировать между собой несколько процессов?
127. Какие есть особенности работы с shared memory?
128. Как работает spinlock?
129. Какие вы знаете особенности использования recursive mutex?
130. Расскажите о read-write mutex.
131. Что такое race-condition? Взаимная блокировка? Что такое критическая секция?
132. Как избежать состояния гонки?
133. Чем отличается мьютекс от семафора?
134. Какие примитивы синхронизации реализованы в C++? Преимущества lock_guard?
135. Что случится, если exception выйдет за пределы потока? Какие инструменты есть для безопасной асинхронности в С++?
136. Чем отличается std::launch::async от std::launch::deferred?
137. Что такое атомарная операция? std::atomic?
138. Как работать с std::conditional_variable?
139. Как создать поток с помощью std::thread?
140. На сколько потоков лучше разбить задачу? От чего это зависит?
141. Как работать с std::async?
142. Thread-safe гарантии контейнеров в С++? В чем недостаток интерфейса front() + pop_front()?
Networking
143. Что такое TCP handshake?
144. Какая разница между TCP и UDP?
145. Расскажите о протоколах верхнего уровня.
146. Какая разница между HTTP и HTTPS?
147. Расскажите об SSL/TLS handshake.
SCM / CI / CD
148. Расскажите о процессах CI.
149. Как отредактировать комит?
150. Расскажите об интерактивном rebase.
151. Какие могут быть способы дебаггинга кода?
152. Для чего нужны Unit test? Чем отличается от Functional Test?
153. Как тестировать код? Какой используете фреймворк?
154. Какие библиотеки знаете для написания тестов?
155. Что такое mock?
156. Сколько тестов нужно написать на одну функцию?
157. Что такое побочный эффект, идемпотентность и чистые функции?
158. Что такое контейнеризация и в чем преимущества и недостатки? Что такое Docker или иной инструмент контейнеризации?
159. Что такое CI/CD и какие преимущества приносит для разработчика?
160. Какие принципы итеративных методологий?
161. Какие преимущества и недостатки code-convention?
Практические задания
162. Напишите максимально корректную реализацию класса string с конструктором копирования и оператором присваивания.
163. Напишите реализацию очереди.
164. Реализуйте функцию, которая за один проход найдет уникальный элемент в контейнере.
165. Напишите thread-safe пул потоков.
166. Напишите игру жизни в ООП стиле.
167. Напишите класс, который достает из базы список товаров по фильтру и показывает на консоли. Напишите тесты для него.
168. Любая задача на написание кода, чтобы проверить умение проектировать интерфейсы и придерживаться принципов SOLID, DRY, KISS.
169. Напишите свою реализацию std::atomic.
170. Напишите программу для анализа графов: нахождение циклов, deadlock-состояний, циклов, недоступных состояний.
171. Напишите программу, которая бы проверяла, что в системе запущен только один ее экземпляр. Решение должно быть cross-platform.
172. Проанализируйте C++ код с точки зрения качества: выявить потенциальные memory leak, нерациональное использование STL-контейнеров, алгоритмов, неоптимальные конструкции и тому подобное.
173. Напишите код для решения судоку.
174. Напишите код, который найдет зацикливание в односвязном списке.
Senior
Общее
1. Как вы понимаете SOLID?
2. Как разработать систему плагинов на С++?
3. Что такое RPC? Какие библиотеки знаете?
4. На что обращать внимание при проведении code review?
5. Какие есть проблемы при написании кроссплатформенного кода? На что обращать внимание?
6. Что делать, если код работает медленно?
7. Какие есть способы и методологии измерения быстродействия кода? Как можно устранить/уменьшить влияние замеров на быстродействие?
8. Что такое SFINAE? Для чего используется?
9. Что такое метапрограммирование? С помощью чего реализуется на С++?
10. Как использовать variadic templates?
11. Как тестировать закрытые методы?
12. Как считать покрытие тестами? Нужно ли это делать?
13. Что такое cache miss и как это выявить?
14. Что такое SIMD-инструкции? Какие необходимые условия и способы их использования?
15. Что такое покрытие кода и как обеспечивается?
16. Опишите принципы lock-free структур данных и свой опыт работы с ними.
Препроцессор и компиляция
17. Расскажите о построении билд-системы.
18. Как работать с билд-системами: Make, CMake.
19. Как интегрировать third-party в проект?
20. Что такое барьеры памяти?
21. Расскажите о работе с сырыми указателями и о ручном управлении памятью.
22. Что такое статический анализатор кода? Какие знаете?
23. Что такое динамический анализатор кода? Какие знаете?
24. Проект медленно собирается. Как можно ускорить?
C/C++
25. Расскажите об использовании realloc в контейнерах.
26. Как работают шаблоны?
27. Расскажите о специализации шаблонов.
28. Как работает RTTI?
29. Можно ли использовать exception в конструкторе/деструкторе?
30. Что такое rvalue и lvalue?
31. В чем особенности контейнеров std::set, std::map, std::unordered_map, std::hash?
32. Что такое placement new? Для чего используют? Как сделать placement delete?
33. Как размещается в памяти класс со множественным наследованием и виртуальными функциями?
34. Как работают точки остановки?
35. Что такое уязвимости? Каков механизм их работы?
36. Как написать собственный std::shared_ptr?
37. Что такое curiously recurring template pattern?
38. Опишите назначение и принцип работы std::shared_ptr, std::unique_ptr и std::weak_ptr.
39. Какое назначение и отличия использования std::variant и std::any?
40. Какие улучшения получил std::search в С++17 ?
41. Что такое copy elision и когда он становится возможным? Какие особенности для разных стандартов?
42. Что такое Return Value Optimization?
OOP/OOD
43. Объясните принципы SOLID.
44. Объясните принципы KISS.
45. Объясните принципы YAGNI.
46. Какие есть подходы к оптимизации кода?
47. На что стоит обращать внимание при code review?
48. Какие есть паттерны проектирования? Почему не советуют использовать Singleton?
49. Что такое статический полиморфизм?
STL / Algorithms
50. Когда std::vector может использовать std::move?
51. Расскажите о своем любимом алгоритме поиска.
52. Что такое lock-free и wait-free алгоритмы? В чем их отличия и способы реализации?
53. Опишите назначение execution policy для параллельных алгоритмов.
Многопоточность
54. Расскажите о построении API, рассчитанных на многопоточное использование.
55. В чем разница между kernel-level и user-level потоками?
56. Что такое coroutine?
57. Что делает спецификатор thread_local?
58. Как реализовать синхронизацию в задаче producer-consumer?
59. Як синхронизироваться между различными процессами?
SCM / CI / CD
60. Расскажите о настройке процесса менеджмента ветвей репозитория.
61. Расскажите о стратегии разветвления (branching).
Практические задания
62. Напишите базовую реализацию std::shared_ptr.
63. Реализуйте алгоритм сортировки.
64. Реализуйте алгоритм хеширования.
65. Реализуйте shared_ptr с расширением для weak_ptr.
66. Реализуйте простейший producer-consumer, используя условные переменные.
67. Опишите как можно подробнее, что происходит в системе, когда приложение делает сетевой запрос.
68. Детально описать дизайн программного компонента, например, системы голосования; учесть при этом высокую нагрузку и сделать ее расширяемой и отказоустойчивой.
Выражаем благодарность за участие в статье Александру Жакуну, Ярославу Пушко, Назару Семенишину, Сергею Подоброму, Владимиру Кочуну, Владимиру Новикову, Сергею Кривоносу, Марку Цирульнику, Кириллу Пшеничному, Виктору Шуму, Сергею Братусю.