Результаты поиска
ITVDN: курсы программирования
Видеокурсы по
программированию
Подписка

300+ курсов по популярным IT-направлениям

Выбери свою IT специальность

Подписка
Подписка

300+ курсов по популярным IT-направлениям

Результаты поиска по запросу: mvc4 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!
Что должен знать C#/.NET разработчик в 2023 году

Автор: Влад Сверчков

Язык программирования C# ООП Алгоритмы и структуры данных Шаблоны проектирования Базы данных SQL Entity Framework Core LINQ ASP.NET ASP.NET Core Git Основы FrontEnd Английский язык Итоги На сегодняшний день .NET программист может применять свои навыки в различных сферах разработки программных продуктов: создание веб-приложений и веб-сервисов создание настольных приложений; создание облачных сервисов; создание игр; создание мобильных приложений. Когда говорят о .NET разработчиках, имеют в виду программистов, которые пишут на языке С#. Этот язык программирования, как и вся платформа .NET, был создан, развивается и поддерживается компанией Microsoft, которая стабильно уже несколько десятилетий входит в ТОП-10 компаний - мировых лидеров рынка информационных технологий. Все продукты компании Microsoft созданы на платформе .NET. Какие же технологии необходимо изучить, чтобы стать .NET программистом? Поскольку львиная доля .NET-вакансий приходится именно на веб-сегмент, данная статья будет охватывать как фундамент, которым обязаны владеть все разработчики этой платформы, так и основные технологии серверной стороны веб-девелопмента.   Язык программирования C# (“си шарп”) Любой .NET разработчик не может называться и быть таковым, если он не умеет хорошо программировать на языке C#. Это универсальный объектно-ориентированный язык, который является мощным инструментом создания программного обеспечения с широкой областью применения. При столь высокой функциональности он является достаточно несложным в изучении и отлично подойдет тем, кто собирается сделать первый шаг навстречу программированию. Благодаря широкому спектру применения, С# является очень востребованным языком. Различные ресурсы по поиску работы предлагают большое количество вакансий, причем, как на крупные проекты с четко определенным консервативным стеком технологий, так и в компании, которые создают новый программный продукт с применением наиболее современных инструментов. Компания Microsoft активно развивает свое детище - .NET направление, потому C# всегда актуален, идет расширение функционала, добавляются новые возможности. Тенденция последних лет - кроссплатформенность, реализуемая в .NET Core. Огромное количество учебных материалов, качественная официальная документация, видео курсы, образовательные вебинары, дружное комьюнити - всё это создает максимально комфортные условия для грамотного поэтапного изучения данного языка.   ООП Объектно-ориентированное программирование - это методология разработки программного обеспечения, в основе которой лежат четыре главных принципа: абстракция, инкапсуляция, наследование и полиморфизм. Поскольку C# является объектно-ориентированным языком, необходимость изучения и полного понимания ООП парадигм обязательно. Однако, есть и приятная новость: все принципы быстро и легко усваиваются во время изучения C#.    Алгоритмы и структуры данных Понимание алгоритмов и структур данных – также обязательно для любого программиста. Изучив структуры данных, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные программы, которые будут эффективно работать с памятью. Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач. Шаблоны проектирования Паттерны (они же шаблоны) представляют собой архитектурные конструкции, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Всего существует более двух десятков шаблонов, однако знать их все - это обязанность архитектора, а не разработчика платформы .NET. Обычно в одном проекте используется небольшое количество паттернов, поэтому вам достаточно помнить лишь самые популярные из них. Базы данных Каждое приложение оперирует данными – от интернет-магазинов и банковских систем до корпоративных приложений и социальных сетей. Регистрация, авторизация и аутентификация пользователя, прием, изменение и отправка данных на сервер или даже простое сохранение конфигурации приложения – все это данные, требующие отдельного места для их хранения. Этим хранилищем служат базы данных (БД), представляющие собой организованную структуру для приема, хранения и обработки данных различного формата – от ФИО и номеров телефона до изображений и видео контента. Именно поэтому знания БД очень важны в том числе и для .NET разработчиков. Необходимо владеть базовой теорией по БД: основные термины, реляционные и нереляционные базы данных (вы будете работать именно с реляционными – имеющими реляционную структуру), нормализация, отношение one-to-one, one-to-many и many-to-many, поиск и упорядочение информации, работа с таблицами и т.п. SQL Structured Query Language - декларативный язык структурированных запросов, который создан для взаимодействия с базами данных. Особенность SQL состоит в том, что он лишь описывает необходимые компоненты и желаемые результаты, не указывая, как именно эти результаты должны быть получены. Изучение языка запросов очень тесно связано с изучением теории баз данных, поэтому углубляясь в БД, вы непременно начнете практиковаться и набивать руку и с SQL. Entity Framework Core Entity Framework - специальная объектно-ориентированная технология на базе фреймворка .NET, которая позволяет разработчикам получать доступ к данным, используя концептуальную объектную модель, а не непосредственно реляционную базу данных. Это дает возможность абстрагироваться от самой БД и работать с данными на более высоком уровне абстракции, который более понятен и удобен для человека. Благодаря такому подходу уменьшается количество кода, необходимого для получения доступа к базе, растет производительность и уменьшается время на поддержку объектов в приложениях, которые работают с данными. В двух словах, эта технология позволяет программисту абстрагироваться от самой базы данных и работать с данными независимо от типа хранилища. LINQ Language Integrated Query (язык интегрированных запросов) - это простая и удобная .NET технология доступа к данным. Особенность данного языка запросов: возможность применения ко всем источникам данных (XML-документы, XML-потоки, наборы данных ADO.NET, базы данных SQL, массивы и коллекции .NET и т. д.) одного и того же самого подхода выборки данных. ASP.NET Active Server Pages для .NET - платформа, использующая среду выполнения .NET Framework и предоставляющая необходимые службы для создания серверных веб-приложений и веб-сервисов. Является развитием более ранней технологии Microsoft ASP. ASP.NET базируется на среде выполнения Common Language Runtime (CLR), которая является основой всех приложений Microsoft .NET. Также данная платформа имеет преимущество в скорости по сравнению со скриптовыми технологиями. ASP.NET MVC является расширением ASP.NET и представляет собой платформу для создания веб-сервисов при помощи паттерна MVC. Данный шаблон предусматривает разделение приложения на три компонента: Модель, Представление, Контроллер, благодаря чему реализуется концепция разделения и закрепления ответственности за каждым компонентом, что упрощает разработку проектов. ASP.NET Core Фреймворк от компании Microsoft, который использует среду выполнения .NET Core, предназначен для разработки качественных современных веб-приложений и является продолжением развития платформы ASP.NET. Однако, это не просто обновленная технология. Выход ASP.NET Core фактически обозначил качественное изменение всей платформы. Последняя версия 7.0 была выпущена не так давно – весной 2022 года. Главные особенности ASP.NET Core: наличие открытого исходного кода на GitHub; кроссплатформенность; модульность; расширяемость; возможность применения облачных технологий. Более подробную информацию обо всех нововведениях можно найти на официальном сайте Microsoft. Таким образом, платформа .NET Core существенно расширила области применения технологии ASP.NET и предоставила разработчикам большое количество возможностей по созданию программного продукта. Git Наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы. Не во всех вакансиях можно встретить среди требований владение системой контроля версий, однако, знание Git или ее аналогов даст вам дополнительное преимущество перед остальными кандидатами. Основы FrontEnd В большом количестве вакансий работодатели ожидают, что .NET разработчик серверной части также должен быть знаком и с фронтенд-технологиями, которые используются на клиентской стороне при создании веб-приложений: HTML & CSS – языки верстки веб-сайтов и веб-сервисов. HTML служит каркасом, определяющим основную архитектуру внешнего вида, а CSS – каскадные таблицы стилей, помогающие обогатить внешний вид приложения. Очень легкие языки верстки, которые изучаются быстро и без проблем. Основы JavaScript (JS) – это язык программирования, на котором создается программная логика клиентской стороны веб-приложений, а также различные анимации. JavaScript является одним из самых легких языков программирования, поэтому если вы будете хорошо знать C#, разобраться в JS для вас будет очень быстрым делом. Основы Angular или React. React – фронтенд-библиотека, которая имеет относительно невысокий порог вхождения и пользуется большой популярностью благодаря своей универсальности, в то время как Angular – мощный, более сложный фреймворк, но при этом лучше себя проявляет в массивных масштабируемых проектах. Знание FrontEnd-стека не во всех вакансиях является обязательным, но во многих они отмечены. Соответственно, владение основами этих инструментов дает большой бонус при рассмотрении резюме или на собеседовании. Английский язык Традиционное требование для каждого разработчика в IT. Знания языка на уровне чтения технической документации и комментирования кода вполне достаточно. Но чем выше уровень английского у вас будет, тем больше шансов получить job-офер, поскольку английский может использоваться как для коммуникации с другими членами команды, так и для взаимодействия с заказчиком. Подведем итоги В статье были перечислены основные технологии, которыми должен обладать каждый .NET-программист. Поскольку веб-разработка ныне является очень популярной и востребованной, мы также добавили в список .NET средства, которые используются во время создания соответствующих серверных веб-решений. Однако среди всех пунктов наиболее важным является знание языка С# - каждый “дотнетчик” обязан им владеть на высоком уровне.   В свою очередь, перечень можно дополнить такими технологиями, как TDD (разработка через тестирование), WCF, Unit тестирование, рефакторинг приложений. Их знание не является обязательным для джунов, однако выгодно выделяет вас среди других кандидатов и показывает, что вы уделяете особое внимание чистоте, опрятности и читабельности кода.  Также вы можете ознакомиться со списком всех необходимых для изучения технологий на странице специальности .NET Developer. Комплексная программа обучения состоит из 55 видео курсов общей продолжительностью более 410 часов. Перейдя на страницу, вы найдете много полезной информации как для новичка, так и разработчика, желающего углубить и дополнить свои знания. Если вас больше интересует живое онлайн обучение в группе с ментором и другими студентами, рекомендуем обратить внимание на формат Live Online обучения. Регулярные занятия в Zoom, выполнение и проверка д/з, разработка курсовых проектов, общение и поддержка в телеграм-группе с ментором и одногруппниками – это и многое другое способствует максимально качественному и быстрому овладению специальностью .NET Developer на ITVDN. Полезные ресурсы для изучения C# и .NET вы найдете в нашем вебинаре «Обзор полезных ресурсов для изучения C# и .NET с нуля». ITVDN желает вам достижения ваших целей и готов быть надежным помощником в вопросах обучения программированию. Оставайтесь с 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), Евгению Думе, Сергею Яремчуку, Вадиму Шкилю, Александру Билюку, Александру Нежинскому, Владиславу Граму, Станиславу Коленкину, Олегу Миколайченку, Антону Гаврилову.
Собеседование по Android. 250+ вопросов для Junior, Middle, Senior

Автор: Влад Сверчков

Junior 1.1 Базовые вопросы 1.2 Алгоритмы, структуры данных, хранение данных 1.3 Работа с сетью 1.4 Многопоточность, Java Core, RxJava 1.5 Android SDK, Kotlin 1.6 Другое 1.7 Практические задачи   Middle 2.1 Базовые вопросы 2.2 Алгоритмы, структуры данных, хранение данных 2.3 Работа с сетью 2.4 Многопоточность, Java Core 2.5 Android SDK 2.6 Kotlin 2.7 RxJava 2.8 Тестирование 2.9 Другое   Senior 3.1 Базовые вопросы, архитектура 3.2 Многопоточность 3.3. Java Core, Android SDK, Kotlin Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 3 ноября 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Если вы готовитесь к собеседованию по Android — или проходить, или проводить — возможно, этот перечень вопросов пригодится вам. Редакция DOU поинтересовалась у разработчиков, проводящих технические интервью в компании в Украине, о чем они спрашивают кандидатов. Это уже десятая статья из рубрики «100+ технических вопросов»; ознакомиться с вопросами для других языков программирования на DOU.ua на украинском языке вы сможете, перейдя по ссылке.   Junior   Базовые вопросы 1. Назовите основные принципы ООП. 2. Что такое класс? Что такое интерфейс? Какая между ними разница? 3. Назовите базовые типы данных. 4. В чем отличие примитивных типов от объектов? 5. Какая разница между абстрактным классом и интерфейсом? 6. Что такое паттерны проектирования? Какие паттерны вы знаете? 7. Чем отличается Java от Kotlin?   Ответы на некоторые из этих вопросов вы можете найти в видео курсе Kotlin, а также статье Kotlin vs Java: что лучше для Android-разработки? и вебинаре Структуры данных в Java и Kotlin.   Алгоритмы 8. Что такое алгоритм и как выбрать правильный? 9. Что такое сложность алгоритма? Как и с помощью чего её можно вычислить? 10. Что такое нотация big-O? 11. Что такое рекурсия? 12. Какие алгоритмы сортировки вы знаете?   Структуры данных 13. Расскажите о таких структурах данных, как List, Set, Map? 14. Какая разница между ArrayList и LinkedList?   Ответы на эти вопросы вы найдёте в вебинаре Структуры данных в Java и Kotlin.   Хранение данных 15. Как можно хранить данные в Android? 16. Когда следует использовать SharedPreferences? 17. Из каких компонентов состоит библиотека Room? 18. Что такое @PrimaryKey, @Ignore, @Embedded, @TypeConverters в Room? 19. Для чего нужна миграция в базах данных?   Ответы на некоторые из этих вопросов вы найдете в видео курсе SQLite. Базы данных в Android приложениях (урок 2, урок 3).   Работа с сетью 20. Что такое JSON, XML? 21. Какие варианты реализации работы с сервером? 22. Что такое REST?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2), Android Углубленный (урок 9).   Многопоточность 23. Что такое процесс? 24. Что такое поток? 25. Для чего используют ключевое слово synchronized? 26. Зачем синхронизировать потоки? 27. Какая разница между синхронным и асинхронным исполнением? 28. Как мы можем создать поток в Java? 29. Что такое deadlock? 30. Какие варианты реализации многопоточности есть в Android? 31. Что такое main thread? Какие операции нужно выполнять на main thread, а какие нельзя делать?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).   Java Core 32. Что такое Exceptions? Зачем они нужны? 33. Зачем используют ключевые слова final, finally и finalize? 34. Что такое абстрактный класс? Что такое интерфейс? 35. Что такое анонимный класс? Использовали ли на практике? Для чего? 36. Что такое статический класс (static class)? 37. Что такое enum? Зачем его используют? 38. Можем ли мы сделать конструктор приватным? 39. Какая разница между ключевыми словами throw и throws? 40. Какая разница между Error и Exception? 41. Какая разница между checked и unchecked exception? 42. Что такое Object class и какие методы он имеет? 43. Какие существуют модификаторы доступа для классов? Какая разница между ними? 44. Что такое итератор? 45. Как безопасно удалить элемент из коллекции? 46. Зачем нам переопределять equals() и когда не нужно это делать? 47. Какой должен выполняться контракт при переопределении equals()?   Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Базовый (урок 2, урок 4, урок 6, урок 7, урок 8, урок 9).   RxJava 48. В чем разница между map() и flatMap() в RxJava? 49. Когда используете observeOn(), а когда subscribeOn()? 50. Как можно обработать ошибки в RxJava? 51. Какие schedulers знаете в RxJava? Назовите их отличия. 52. Что такое Disposable? Зачем его используют? 53. В чем разница между Hot и Cold Observables? Назовите примеры в RxJava.   Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).   Android SDK 54. Какие базовые Android-компоненты можете назвать? 55. Что такое ContentProvider? 56. Какие типы Service знаете? 57. Что такое BroadcastReceiver и какие типы существуют? 58. Для чего используют механизм фрагментов? 59. Опишите жизненный цикл Activity. 60. Опишите жизненный цикл Fragment. 61. Есть ли у Fragment контекст? Если да, то как его получить? 62. Чем отличается Fragment от Activity? Зачем выдумали Fragment? 63. Что такое изменение конфигурации? Что происходит с приложением на Android при этом? 64. Что такое Intent? Что такое explicit/implicit Intent? 65. Что такое SharedPreferences? 66. Что такое ANR? Как избегать таких ситуаций? 67. Что такое DataBinding? 68. Что такое LiveData? Какие виды знаете? 69. Как создать ViewModel? Почему создавать ViewModel нужно именно так? 70. Что такое Context и зачем он? 71. Что такое AndroidManifest.xml? Зачем его используют? Что мы можем там декларировать? 72. Перечислите layout, с которыми работали? Когда и какой нужно использовать? 73. Расскажите, что нужно реализовать, чтобы отобразить список строк в RecyclerView. 74. Объясните паттерн ViewHolder. Для чего он применяется? 75. Что такое DiffUtil? 76. Расскажите о ConstraintLayout. 77. Для чего используют Group, Guideline, Barriers, Chains в ConstraintLayout? 78. У вас есть Activity с двумя Fragment'ами, у одного есть кнопка, у другого TextView. При нажатии кнопки изменяется TextView. Как вы реализуете это? 79. Что такое WorkManager? Когда используем?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2, урок 4, урок 5, урок 7), Android Углубленный (урок 3, урок 6, урок 9), Android User Interface (урок 3), Создание пользовательских элементов управления в Android (урок 9).   Kotlin 80. Как вы понимаете термин Null safety? 81. Что такое nullable и non-nullable типы? Какая разница между val и var? 82. Как задекларировать getter/setter для property? 83. Почему классы Kotlin по умолчанию final? 84. Что такое sealed class? 85. Что такое data classes? 86. Какая разница между sealed class и enum? 87. Почему у Kotlin нет checked exceptions? 88. Что такое Extensions? Использовали ли вы их на практике? 89. Что такое перегрузка операторов (operator overloading)? Зачем нужен этот механизм? 90. Как работают примитивы в Kotlin? 91. Расскажите об объекте Unit в Kotlin. 92. Расскажите об объекте Any в Kotlin. 93. Как создать Singleton объект в Kotlin? 94. Что такое companion object? 95. Чем отличается const val от val? 96. Какие знаете модификаторы доступа? 97. Что означает модификатор lateinit? 98. Coroutines – что это за механизм? Использовали ли его на практике? 99. Зачем нужны Coroutines? Чем они лучше обычных тредов? 100. Что такое suspend-функция? 101. Что такое Job? 102. Что такое Dispatcher? Какие есть виды? 102. Что такое Scope? 103. Как писать Java compatible API в Kotlin?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.   Другое 104. Расскажите, что такое memory leak. Как избежать? 105. Как бы вы искали memory leak? 106. Расскажите о Dependency injection. Какие варианты реализации в Android? 107. Для чего нужна система контроля версий? 108. Что такое Git? 109. Для чего используем .gitignore-файл? 110. Расскажите о командах push, pull, fetch в Git? 111. Что такое merge и rebase? Какая разница? 112. Что такое CI? Зачем используем?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Dependency Injection в Android-разработке, Основы работы с Git.   Практические задачи 113. Разверните Linked List. Отпишите о зацикленности в LinkedList или ее отсутствии. 114. Напишите функцию, которая вернет n первых неотъемлемых чисел: un nMin(items: List<String>, n: Int): List<Int> { //return n minimal non negative items } Пример вызова функции: nMin(listOf("1","-11","-12","22","100","-30",”2”, “5”), 3) Ожидаемый результат: [1, 22, 100] 115. Что будет выведено в консоль? Объясните результат. var globalId = 0 data class User(val name: String) { val id = globalId++ } fun main(args: Array<String>) { val user1 = User("User") val user2 = User("User") println(user1) println(user2) println(user1 == user2) } 116. Исправьте все ошибки в коде: class Animal class Dog: Animal {} 117. Для коллекции items: val items = listOf(1, -2 ,-3 , 4, 5, 0, 2, -2) Подсчитайте количество отрицательных элементов. Вычислите среднее арифметическое значение отрицательных и неотрицательных чисел.   Middle   Базовые вопросы 1. Нужно ли придерживаться SOLID-принципов? Почему да/нет? 2. Какие паттерны использовали на практике? Приведите примеры. 3. Опишите паттерны MVP и MVVM. Какие из них использовали? Какой предпочитаете? Знаете ли/использовали другие паттерны? 4. Почему слой Model должен быть отделен от View или Presenter? 5. Что такое инверсия зависимости (dependency inversion)? 6. Объясните пример паттерна Singleton. Где его использовать в Android? 7. Объясните пример паттерна Observer. Где его использовать в Android? 8. Объясните пример паттерна Builder. Где его использовать в Android? 9. Как вы понимаете термин «архитектура приложения»? Зачем это вообще нужно? Почему инженеры пытаются усложнить процесс разработки и тратят время на проектирование архитектуры? Может, лучше сэкономить ресурсы и пойти по простому пути — держать весь код в одном файле? 10. Что такое иммутабельный объект? Для чего его используют? Как сделать иммутабельный объект в Java? 11. MVP vs MVVM – в чем основное отличие?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Архитектура Android приложений (урок 1-5), Создание пользовательских элементов управления в Android (урок 4), SOLID принципы в Java.   Алгоритмы 12. Есть много алгоритмов сортировки. Возможно ли выбрать один самый быстрый и использовать его повсюду? Почему да/нет? 13. В чем сложность поиска произвольного элемента в ArrayList? В LinkedList? 14. Какие алгоритмы используют в Android/Java коллекциях под капотом?   Структуры данных 15. HashMap. Используете ли вы на практике? Если да, то зачем? Как она работает изнутри? 16. Какая разница между HashMap и LinkedHashMap? 17. Что такое бинарное дерево?   Сохранение данных 18. Как бы вы реализовали сохранение зашифрованных данных в SharedPreferences? Базу данных? 19. Как реализовать миграцию таблицы, где нужно из non-nullable поля сделать nullable поле?   Работа с сетью 20. Расскажите, какие методы можно применить в REST API? Зачем какой нужен? 21. Что можно использовать, кроме REST API, для работы с сервером?   Многопоточность 22. Что такое Thread Pool? Каковы его особенности? 23. Что такое Executor/ExecutorService? Какую задачу выполняют и как использовать? 24. Какие есть виды Executor? 25. Какая разница между методами start() и run() в классе Thread? 26. На что указывает ключевое слово synchronized? Какова его основная функция? 27. Модификатор volatile. Приходилось ли использовать? Зачем нужен? 28. Знаете ли вы о таком понятии, как «эффект гонки» (race condition)? Как это предотвратить? Какие механизмы в Java для предотвращения этого? 29. Что такое атомарная операция? 30. Как остановить поток в Java? Можно ли продолжить выполнение потока после его остановки? 31. Знаете ли вы о потокобезопасных коллекциях в Java/Android? Приходилось ли их использовать? 32. Какие стратегии можно применить, чтобы добиться потокобезопасности? 33. Какие варианты реализации потокобезопасности кода есть у Kotlin? 34. Как сделать переменную потокобезопасной? 35. Что такое Mutex и Monitor? Кто может выступать в роли монитора? 36. Что такое атомарные операции? 37. Почему инкрементация и операции с long не являются атомарными? 38. Какие классы атомарных переменных? 39. Что такое устаревшие данные (stale data)? Как избежать этого эффекта?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).   Java Core 40. Механизм Generics. Какую проблему решает? 41. Что такое soft reference, weak reference? 42. Что такое сериализация объекта? Какую проблему она решает? Какие стандартные механизмы у Java? 43. Какой контракт существует между equals() и hashCode()? 44. По вашему мнению, почему строки в Java сделаны иммутабельными? 45. Можем ли мы задекларировать пустой интерфейс? Если да, то зачем? 46. ​​Что такое String pool? Зачем он нужен? 47. Что такое StringBuilder, какую проблему он решает? 48. Что такое Stack в JVM и какие данные там хранятся? 49. Что такое Heap в JVM и какие данные там хранятся? 50. Что такое garbage collector, как он вообще работает? Каковы реализации GC?   Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Углубленный (урок 5).   Android SDK 51. Назовите основные изменения в версиях Android. 52. Как реализовать IPC в системе Android? 53. Как реализовать отложенную задачу? 54. Что такое Doze Mode? 55. Что такое App Standby mode? 56. Что такое AIDL и зачем он нужен? Какие типы данных поддерживаются? 57. Что такое Multidex? 58. Что такое KeyStore API? 59. Что такое PendingIntent? 60. Как безопасно хранить user-sensitive данные? 61. Какие методы защиты приложения? 62. Что такое SSL/TLS Pinning? Как его реализовать в Android? 63. Что такое ViewBinding? 64. Для чего нужны методы onSaveInstanceState/onRestoreInstanceState? Что такое permissions? Как запросить permissions? 65. Что такое Intent? Что такое Explicit/Implicit Intent? Что такое Sticky Intent, Pending Intent? 66. Какие типы данных мы можем положить в Bundle? 67. В чем разница между Serializable и Parcelable? 68. Если фрагмент для работы нуждается во входных данных, каким образом будет правильно передать их фрагменту? 69. Что такое ViewModel? Какие ее свойства? 70. Объясните работу ViewModel с Jetpack. Что такое ViewModelProviders, ViewModelProvider.Factory? 71. Что такое LiveData? Зачем её используете? 72. Какая связь между LiveData и LifecycleOwner? 73. Приведите пример LifecycleOwner? 74. Что такое Looper? 75. Использовали ли HaMeR фреймворк (Handler/Message/Runnable)? Для чего он? 76. Какую информацию содержит контекст? Какие типы контекста знаете? 77. Для чего используют Content Provider? 78. Что такое Data Binding? Что такое View? 79. Преимущества Fragments против View? 80. Как работает Content Provider? 81. Какая разница между Single Activity и Multiple Activity? 82. Какие виды Context знаете? Где какой использовать? 83. Объясните работу BroadcastReciever и его реализацию. 84. Зачем LocalBroadcastManager? 85. Для чего нужен MotionLayout? 86. Опишите, как реализовать анимацию в MotionLayout. 87. Как можно обнаружить проблемы в скорости UI и устранить их? 88. Расскажите о вариантах реализации custom view. 89. Что делают методы onMeasure, onLayout, onDraw во View? 90. Как воплотить анимацию при переходе между Activity-фрагментами? 91. Когда необходимо использовать foreground service вместо service? 92. Когда использовать workmanager, а когда service? 93. Есть ли у workmanager лимиты для выполнения работы? 94. Расскажите о Jetpack Compose. Зачем придумали основной принцип работы, как устроено? 95. Что такое WakeLock? 96. Что такое AlarmManager? Какие особенности работы?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 4, урок 7), Android Углубленный (урок 6, урок 8), Создание пользовательских элементов управления в Android (урок 9).   Kotlin 97. Чем отличается работа с Exceptions в Kotlin и Java? 98. Что такое платформенные типы? 99. Что такое нелокальный return? 100. Для чего нужны reified generics? 101. Какая разница между Unit, Any, Nothing? 102. Расскажите о функциях высшего порядка, лямбда, функциях, которые могут использоваться в качестве аргумента. 103. Что такое inline-модификатор? Noinline? 104. Какая разница между crossinline и noinline? 105. Какие типы конструкторов вы знаете? 106. Что такое Flow? Что такое SharedFlow? 107. В чем разница методов run, let, apply, also, with, use? 108. Что произойдет, если в классе переопределить метод hashCode следующим образом: override fun hashCode(): Int = Random.nextInt()? А если так: override fun hashCode(): Int = 1? 109. Расскажите о Flow. В чем разница между Hot и Cold Flow? 110. Что такое деструктурирующее объявление? Что нужно сделать, чтобы иметь возможность использовать его для своего класса? Какие проблемы могут возникнуть с таким объявлением? 111. Для чего использовать data class? Почему нельзя работать с обычным классом? 112. Приведите пример делегатов в Kotlin? 113. Как реализовать кастомный делегат? 114. Объясните, как работает suspen-функция? Что такое continuation? 115. Как обрабатывать ошибки в Coroutines? 116. Что такое SupervisorJob и когда применяется? 117. Как остановить/отменить Coroutines?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.   RxJava 118. В чем разница между flatMap(), concatMap(), switchMap()? 119. Какие Subjects вы знаете в RxJava, чем отличаются от Observable? 120. Чем отличается Observable от Flowable? 121. Что такое backpreassure? Какие стратегии есть для решения? 122. Что такое Single, Maybe, Completable? 123. Какие варианты обработки ошибок есть, кроме onError?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).   Тестирование 124. На какие группы можно поделить тесты (Unit (JUnit) и Instrumental или UI Tests (espresso))? 125. Чем отличаются Unit и UI тесты (контекст)? 126. Расскажите, какие библиотеки использовали для mock? 127. Как тестировать DB? 128. Как “замокать” network layer в инструментальных тестах?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Unit тестирование для Android разработчиков.   Другое 129. Расскажите, с какими DI-фреймворками работали. 130. Расскажите о Dagger Hilt.   Senior   Базовые вопросы 1. Расскажите о функциях высшего порядка. Когда они нужны? 2. Опишите, как происходит процесс деплоя Android-приложения. 3. Расскажите о многомодульной архитектуре. Зачем используют и когда ее нет смысла использовать? 4. Вам нужно написать простое приложение для работы с рецептами (несложное, имеет экран списка, поиска и детали). Оно должно работать с определенным API для получения/модификации вашего списка рецептов и хранить его локально в БД для отображения, если интернета нет. Опишите, как бы вы создавали приложение такого типа? Из каких уровней оно бы состояло, каково предназначение каждого уровня? Представьте, что в этом приложении необходимо добавить возможность изменять основную картинку рецепта (т. е. получать новые данные из галереи/камеры и загружать их на сервер через API) и это реализовано на экране с подробным описанием рецепта. Вам пришел запрос сделать такой же функционал и на экране список рецептов. Как вы это сделаете?   Архитектура 5. Как организовать CI/CD для Android-проектов? 6. Различия архитектурных подходов в Android. Какие и когда лучше использовать? 7. Как вы понимаете Clean Architecture? 8. Опишите основные отличия между MVC/MVP и MVVM. Как MVVM стал одним из рекомендованных паттернов?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Архитектура Android приложений.   Многопоточность 9. Какие еще знаете механизмы синхронизации данных, кроме synchronized? 10. Что такое переключение контекста (context-switching), когда речь идет о многопоточности? 11. Что мы понимаем, когда говорим о «честной» блокировке (fair lock)?   Java Core 12. Если бы пришлось имплементировать иммутабельный класс на Java, как бы вы это сделали? 13. Что такое Java Memory Model? 14. Сравните принципы композиции и наследования (Composition vs Inheritance).   Android SDK 15. ViewModel сохраняет свое состояние при повороте экрана? Как это возможно? Можете ли предложить, как сделать такой механизм? 16. Android Architecture Components. Что из этого приходилось применять на практике? Какие задачи решали? 17. Приходилось ли исследовать «утечки» памяти? Какие инструменты использовали для этого? 18. Представьте, что у вас есть экран со списком товаров. Во время скроллинга вы замечаете, что рендеринг не плавный, в логах много фреймов скипается и вообще-то экран тормозит. Что будете делать, чтобы улучшить ситуацию? 19. Если бы была задача написать приложение для интернет-магазина с нуля, какие технологии/подходы выбрали бы? 20. Приведите пример применения GoF-паттернов в Android SDK.   Kotlin 21. Опишите взаимодействие кода Kotlin и Java. 22. Что изменилось в обработке ошибок в Kotlin, если сравнить с Java? 23. Что такое делегированные характеристики (Delegated properties)?   Благодарим за эту статью Виктора Чистякова, Михаила Дьяченко, Влада Тищенко, Александра Романишина, Андрея Люшенка, Дмитрия Пашко, Вячеслава Сергеева, Антона Козленка, Артема Грищука, Евгения Трощия, Романа Белоконя, Константина Красильникова, Сергея Харченка, Андрея Друка, Виктора Косенко.
Notification success