Вы находитесь на странице: 1из 142

Лекция 1

IT сфера:

1. Продуктовые компании

Разрабатывают свой собственный продукт, продают лицензию на пользование.


Преимущества: ориентация на результат, а не на процесс, близость к
заказчику и понимание бизнес-процессов, работа над одним продуктом в одной
команде, видно бизнес изнутри

2. Аутсорсинговые компании

Компания работает над проектом для другой компании


Ответственность за проект
Аутстаффинговые компании
Компания предоставляет своих сотрудников.

3. DIGITAL-АГЕНТСТВА/цифровое агентство

Компания, которая за счет своего штата и наработок готова предложить


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

● Создание сайта или другого проекта;


● Интеграция сайта (автоматический обмен данными между вашим сайтом
и другим сервисом);
● Продвижение сайта;
● Поддержка сайта.

4. Консалтинговые компании
Это компании, которые занимаются внедрением уже готового ПО.

Подбор персонала

Подбор персонала/рекрутинг - это бизнес-процесс, являющийся одной из


основных обязанностей hr-менеджеров или рекрутеров.

Recruitment - привлечение в компанию специалистов, обладающих


определенными компетенциями.
Варианты занятости рекрутера:

Штатный рекрутер
Плюсы: стабильность (ставка), расширение круга общения, нормированный
график, непрерывное обучение, перспективы карьерного роста
Минусы: нет возможности самостоятельно распределять рабочее время,
контроль, умение приспосабливаться к новым условиям.

Рекрутер в агентстве
Плюсы: стабильность, разнообразие вакансий, интересные проекты,
нормированный график.
Минусы: узкий круг общения, конкуренция

Фриланс
Плюсы: не нужен опыт работы, тайм-менеджмент, отсутствие контроля
(микроменеджмента), экономия финансовых средств, более быстрое закрытие
вакансий,
Минусы: нет стабильности, монотонность, ненормированный рабочий день и
загрузка.

Основные виды/технологии подбора персонала:

1. Стандартный скрининг - “быстрый контакт” с кандидатом.


2. Стандартный рекрутинг - первичная оценка вплоть до приема на работу.
3. Прямой поиск (exclusive (direct) search) - поиск по узкой специальности.
Требуется хорошее понимание сферы деятельности, рынка.
4. Хедхантинг - иногда входит в состав прямого поиска, переманивание.
5. Поиск по рекомендациям (referals) - поиск по знакомствам.

Этапы рекрутинга

1. Получение заявки и её анализ


2. Анализ рынка труда отрасли
3. Выбор методологов подбора (зависит от сферы деятельности)
4. Реализация выбранных методов подбора
5. Телефонное интервью
6. Представление кандидата заказчику

Двойная продажа: продать вакансию кандидату и продать кандидата заказчику.

7. Собеседование (интервью)
8. Получение фидбэка от кандидата и заказчика
9. Сообщение результата
10. Сопровождение в процессе принятия оффера

Управление персоналом

Управление персоналом/HRM - область менеджмента, отвечающая за всё, что


связано с трудовыми ресурсами компании.

Функции в HRM:

1. Подбор персонала
2. Мотивация и адаптация персонала
3. Психологические знания
4. Обучение и развитие персонала
5. Организация мероприятий
6. Кадровое делопроизводство

Лекция 2
Карьера в IT. Виды айтишников, роли, задачи, функции

1. Виды айтишников
2. Карьерный рост в IT

Production - непосредственно участвуют в процессе разработки ПО:


программисты, тестировщики.
Management - управленцы, различные виды менеджеров
Sales - специалисты по продажам, маркетологи
Support - поддерживающий персонал, обеспечивают бесперебойную и
корректную работу организации: hr, бухгалтерия, админ

Billable/ Non billable - приносит прибыль/сопровождающая роль, обеспечивает


соблюдение процессов, создание прототипов.
Роли в IT

1. Заказчик/Owner

2. Product Owner/Владелец продукта


Цель: позиционирование и продвижение продукта на рынке, достижение бизнес
целей.
● Определение концепции продукта;
● Сегментация и анализ рынка, определение ценности;
● Анализ конкурентов;
● Контроль статуса разработки, бэклогом
● Выбор продуктовой стратегии и методов монетизации;
● Генерация гипотез по улучшению бизнес показателей; оценка
достижения бизнес показателей;
● Построение процесса/цикла обратной связи от пользователей и оценки
качества продукта.
3. Project Manager (PjM)
Отвечает за треугольник: объем работы, время работы и бюджет.
«Getting things done»

Цель: разработка продукта в срок, не превышая выбранный бюджет и с


надлежащим качеством.

● Управление командой (формирование, мотивация, контроль);


● Управление проектом (планирование и измерение прогресса, работа с
рисками, бюджетом)
● Создание RoadMap (плана разработки);
● Оценка стоимости разработки (совместно с Team Leader);
● Создание и распределение задач, контроль выполнения;
● Организация командных активностей; решение организационных
вопросов;
● Проведение интервью и встреч с заказчиком;
● Участие в приемке продукта;
● Знание SDLC, методологий
● Английский
● Софт скиллы: емпатия, коммуникабельность, самоорганизация,
целеустремленность, умение быть стойким к конфликтам и умение их
решать.

3.1. Delivery Manager


Общее название роли, которая отвечает за доставку результата заказчику в рамках
всех ограничений (бюджет, срок, ресурсы, качество, риски).
Delivery Manager как должность предъявляет требования глубокого погружения в
технологии, архитектуру, продукты и управление.
Руководитель в должности Delivery Manager хорошо разбирается в архитектуре
программных продуктов и платформ, может даже разработать ее с нуля. Он знает
современные технологии, может предлагать заказчику подходящие для решения
бизнес-задач, влияет на стратегию развития продукта и помогает бизнесу,
менеджерам продуктов и владельцам продуктов разрабатывать планы и бэклоги
развития продуктов.

Что касается стратегии, Delivery Manager играет две роли:


— Consulted — с ним консультируются касательно возможности и
реалестичности изменений в стратегии в части Delivery
— Informed — Account/Project/Programme/Product Manager держат
Delivery Manager’а в курсе стратегии и изменений в ней.
Навыки и умения
Для успешной работы Delivery Manager первого типа должен обладать
следующими навыками:
— хороший опыт и понимание процесса разработки, ролей, их
взаимодействия;
— умение разрешать человеческие конфликты;
— умение быстро принимать решения;
— умение брать на себя ответственность;
— понимание концепции win-win и желание работать по ней;
— отличные коммуникационные навыки и навык аргументации;
— обладать навыками наставничества и менторинга.

Виды менеджеров
Product Manager формирует требования к продукту, который позволит клиенту
достичь целей.

Solution Architect проектирует решение, которое позволит разработать продукт,


соответствующий требованиям, атрибутам качества и ограничениям.

Resource Manager помогает сотрудникам развиваться, чтобы каждый член команды


смог максимально полно раскрыть свой потенциал.

Account Manager развивает бизнес, решает финансовые вопросы и выстраивает


долгосрочные отношения с заказчиком.

Delivery Manager отвечает за то, чтобы в рамках совместной работы всех


вышеперечисленных (и не только) ролей заказчик получил результат, который
позволяет ему достичь своих целей.
4. Team Leader

Team Leader обязан обладать аналитическими навыками и системным


взглядом; просто делать, чтобы всем было “хорошо” не достаточно, основная
задача — постоянное измерение внутренних метрик команды, как социальных,
так и производственных, изменение процессов для повышение
результативности.

Цель: создание и оптимизация бизнес процессов для достижения целей


бизнеса

● Разработка концепции программного продукта;


● Определение ролей пользователей и их потребностей;
● Описание предметной области (в т.ч. основных объектов и связей между
ними), создание и оптимизация бизнес процессов
● Управление требованиями к ПО;
● Проведение интервью с заказчиками и конечными пользователями;
● Анализ конкурентов;
● Консультация команды разработки;
● Участие в приемке продукта и анализ поведения
пользователей(совместно с PM);
● Оценка стоимости разработки (совместно с PM);
5. TechLead

Технический лидер
Координация технической команды.
● Ответственный выбор стороннего ПО для проекта;
● Рекомендация по выбору конкретного алгоритма или архитектурного
решения при производстве ПО;
● Определение технических особенностей в процессах производства.
● Создание и распределение технических задач, контроль выполнения;
● Консультация программистов по узкотехническим вопросам;
● Ревью кода;
● Прием решений о публикации новой версии системы (совместно с ПМ);
● Публикация системы в сторах;
● Оценка стоимости разработки (совместно с PM);
6. System Analyst

Системный аналитик
Обеспечение эффективной работы системы для успешного выполнения целей
пользователей.
● Определение ролей пользователей и их потребностей (если этого не
делает BA);
● Описание предметной области (в т.ч. основных объектов, их атрибутов,
связей между ними), бизнес процессов, потоков данных;
● Управление требованиями к ПО;
● Разработка прототипов и UX (совместно с дизайнером);
● Проведение интервью с заказчиками и конечными пользователями;
● Формирование стека задач (бэклога) (если этого не делает PM);
● Консультация команды разработки;
7. Data Developer

Аналитик данных
Выявление скрытых закономерностей в данных для оптимизации бизнес
процессов.
● Фиксация бизнес показателей;
● Организация сбора данных и мониторинга показателей;
● Построение моделей;
● Проверка гипотез по улучшению бизнес показателей;
● Составление отчетов.

Data architect.
One can be a part of a data science or data engineering team. The data architect’s
role is to project infrastructure that data engineers will develop.
Data engineer.
This is a specific type of software engineer who develops interfaces and the
ecosystem to gain access to the information.
Data analyst.
This team member is the one who defines data collection methods, data models,
types, and outlines the transformation process.
Database/Warehouse developer.
Data as any other information has to be stored somewhere. It can be a usual SQL
database, or a special type of storage, Data Warehouse. The DB/warehouse
developer is responsible for the modeling, development, and maintenance of data
storages.
DBA or Database Administrator.
This is a person in charge of database management if there are multiple databases,
or the structure of a DB/warehouse, as complex as rocket science.
Data scientists.
Projects dealing with machine learning also include a data science specialist or even
a dedicated department.
Business intelligence developer.
This is a software engineer that focuses on developing BI interfaces.
ETL developer is a software engineer that covers the Extract, Transform, and Load
stage of data processing by developing/managing the corresponding infrastructure.
8. System Architect

Системный архитектор
Проектирование архитектуры системы, удовлетворяющей требованиям (как к
функциям системы, так и нагрузкам на систему)
● Разработка архитектуры системы и выбор стека технологий;
● Контроль за соблюдением рекомендаций по архитектуре;
● Прием сложных технических решений;
● Консультация команды разработки;
9. Programmer
Разработка программной системы в соответствии с поставленными
требованиями.
● Разработка программной системы (написание кода, разработка
структуры базы данных и т.д.);
● Принятие решений о способе разработки;
● Контроль качества разработки и проведение ревью кода;
● Тестирование кода;
● Написание технической документации;
● Выпуск новой версии продукта.
10. QA
Минимизация ошибок в работе системы.
● Тестирование требований;
● Написание тест кейсов и тест планов;
● Тестирование системы (регрессионное, нагрузочное, функциональное и
т.д.);
● Разработка авто-тестов;
● Поиск багов на основе отзывов от пользователей.

Профессии тестировщиков можно разделить на 3 группы:


● QC Engineer
● Test manager
● QA Engineer

QC Engineer
QC Engineer — проверяет качество продукта и отвечают за то, чтоб
разработанный продукт соответствовал требованиям заказчика.
Как раз они работают следуя процессу тестирования и проверяют качество
продукта.

Специализации, которые относятся к контролю качества (QC):

● Тест аналитик (Test Analyst) — занимается анализом задач и требований


к продукту, продумывает стратегию тестирования.
● Тест дизайнер (Test Designer) — пишет тестовые проверки (тест-кейсы,
чек-листы) с применением различных техник тест дизайна, основываясь
на данных тест анализа.
● Тестировщик (Testers) — тестирует проект, исходя из тестовой
документации разработанной тест дизайнером. Также, готовит отчеты о
тестировании.
● Авто тестировщик / “автоматизатор” (Automation testers) — по сути это
программист, который автоматизирует тесты, разработанные тест
дизайнером.

Если сравнить процесс тестирования и описанные специализации, можно


заметить, что каждому этапу процесса существует “своя” специализация.
Например, Анализ -> Тест аналитик, Разработки тестовой документации ->
Тест дизайнер.

Test manager
Тест менеджер (Test Manager) — отвечает за выполнение задач по
тестированию и контролирует процесс. Разрабатывает тест-планы, может
помогать со стратегией тестирования. Его главная обязанность в процессе
тестирования — мониторинг и контроль.

QA Engineer
QA Engineer — обеспечивает качество продукта. Они занимаются описанием и
анализом процессов разработки, инструментами, аудитами процессов и
многими другими вещами, которые практически никогда напрямую не связаны с
тестированием
Тестирование и Обеспечение качества — это разные вещи!
Quality Assurance (QA)
занимается проверкой результата
не несёт ответственности за применение результата и по финансовым рискам;

Тестировщик, он же QC (Quality Control) Engineer — специалист, который


проверяет соответствие готового продукта к выдвинутым к нему требованиям.
11. UI/UX Designer
Разработка удобного и привлекательного интерфейса пользователя
программной системы.

User Experience Designer (UX)


занимается производством карт пользовательского опыта;

UX vs UI Designer отличаются не только предметной областью, но и


спецификой мышления. UX Designer больше про про аналитику и
систематизацию, чем про эргономику и эстетику.

User Interface Designer (UI)


занимается производством графической составляющей интерфейсов;

Эта роль разрабатывает визуальную часть пользовательского интерфейса.


Основными целями работы UI дизайнера являются: интуитивность восприятия,
простота, юзабильность и эстетика интерфейса ПО.

● Разработка дизайнов экранов;


● Разработка ScreenFlow;
● Разработка дизайн-концепта и гайдлайнов;
● Разработка прототипов экранов;
● Оптимизация пользовательского взаимодействия (создание
рекомендаций);
● Консультация команды разработки.
12. TechWriter
Разработка пользовательской и технической документации.
● Разработка пользовательской документации;
● Разработка FAQ;
● Разработка описания API.
13. TechSupport
Минимизация недовольства пользователей ПО за счет помощи и ответов на
вопросы.
● Ответы на вопросы пользователей;
● Решение проблем пользователей;
● Сбор обратной связи от пользователей;
● Фиксация багов, найденных пользователями.
14. System Administrator
Минимизация технических ошибок при эксплуатации системы, аппаратно-
программная поддержка команды разработки
● Обслуживание и анализ загрузки серверов;
● Создания необходимых условий в инфраструктуре для нормального
функционирования ПО;
● Помощь в развертывании системы и настройка среды для быстрой
публикации новых версий;
● Контроль логов;
● Настройка инструментов для автоматизации процесса разработки и
тестирования.
15. Marketing Specialist
Продвижение продукта (программной системы) на рынке.
● Анализ рынка;
● Продвижение сайта продукта, SEO;
● Помощь в публикации программной системы в сторах
● Подготовка PR материалов;
● Продвижение в соц. сетях;
● Организация и проведение рекламных компаний.
16. DevOps инжинер
Цель: минимизировать взаимодействие между командами разработки и
эксплуатации.
● Подготовка среды разработки продукта.
● Подготовка и подключение инструментов анализа качества разработки,
включая инструменты автоматизации тестирований.
● Подготовка среды тестирования.
● Передача продукта из одной среды в другую.
● Мониторинг работоспособности всех сред и инструментов разработки
(включая инструменты контроля качества разработки или передачи
данных

Главная задача — максимально увеличить предсказуемость,


эффективность и безопасность разработки ПО.

Если рассматривать полный жизненный цикл ПО, то на этапе оценки


DevOps специалисты получают первичную информацию о
необходимости нового кодирования и внесения изменений в ИТ-
инфраструктуру.

На этапе проектирования — определяют требования к инфраструктуре.

На этапе разработки и тестирования — занимаются развертыванием продукта,


а также поддержкой средств для разработки, интеграционным и нагрузочным
тестированием ПО для проверки готовности операционной среды.
В обязанности DevOps engineer входит:
— Развертывание поставленного разработчиками релиза в производстве;
— Интеграция и углубление процессов разработки в поставку;
— Стандартизация окружения разработки;
— Настройка инфраструктуры на особенности разрабатываемого ПО;
— Подготовка продуктивной среды к частым внесениям изменений;
— Обнаружение и исправление проблем;
— Автоматизация процессов.
17. Scrum Master
отвечает за грамотный применения той или иной гибкой методологии (бывает,
что даже той, которая не касается Scrum вообще);
несёт частичную ответственность за результат, но не несёт ответственность по
финансовым рискам;

Scrum Master — это специалист, который помогает команде применять


методологию Scrum правильно, объясняет правила методологии, контролирует
их выполнение.
Важным моментом тут является то, что специалист не контролирует
выполнение проекта, он контролирует именно выполнение правильную работу
с методологией, делая команду “гибкой”. Лидер, который вовлекает участников
Скрам-команды в процесс работы, не имея формальной власти

Словарь:
Велосипед - первинный кол
Дерево - вложенность
Костыли - затычки
Пул - буфер

Роль в IT сегментируется по платформам, под которые ведётся разработка,


например:

1. Фронт
2. Бэк
3. Интеграции
4. Full-stack
5. Mobile
QA — Quality Assurance, Специалист по качеству
TW — Technical Writer, Технический писатель
BA — Business Analytic, Бизнес аналитик
CIO — Chief Information Officer, Директор по информационным технологиям
CTO — Chief Technology Officer, Технический Директор
CEO — Chief Executive Officer, Директор компании
HRBP Lead - Lead HR Business Partner
ЛЕКЦИЯ 3
Основные понятия в ИТ, языки программирования и породы
программистов

1. Разработка ПО
ПП/ПО/Софт - программа или совокупность программ + документация

Программа/Application - совокупность правил и инструкций к действию


аппаратного обеспечения
Приложения:
APP - мобильное приложение
Desktop app - настольные приложения, устанавливаются на комп
Web app - серверные!
«Толстый» клиент значит, что бизнес-логика находится на клиенте

Milestone(веха) - контрольная точка в разработке ПП.

Жизненный цикл “классического” проекта:

- инициация/initiation
- планирование/planning
- выполнения/execution
- закрытие и передача заказчику/closure

Процес работы над проектом:

- Discovery
Представители компании, бизнесу (ПМ) поддерживают конкретную идею. Они
находят проблему потенциальных покупателей и пытаются найти решение.

- Ingeneering

- Delivery
SDLC
Жизненный цикл разработки ПО (System/Software Development
Life Cycle, SDLC)
процесс, состоящий из конкретных этапов, который начинается в момент
принятия решения о необходимости создания ПО и заканчивается в момент
прекращения поддержки ПО разработчиками.
Применение SDLC позволяет:
● Визуализировать сложный процесс разработки

● Управлять проектом

● Предсказывать и планировать доставку рабочих продуктов в ходе всего


процесса разработки
● Управлять рисками выхода за рамки бюджета / превышения срока
реализации
● Быстро определять, на каком этапе находится разработка в данный
момент

Всего выделено 7 основных этапов разработки:

1. Идея
Этот процесс может быть формальным (например, brainstorming в компании)
или не формальным (например, за барной стойкой с друзьями).

2. Определение требований ВА + РМ + QA
Бизнес-аналитики (BA) прорабатывают полученную информацию,
детализируют ее и преобразовывают в технические требования к системе. Эти
требования называются Software Requirement Specification (SRS).
Кроме SRS на этом этапе:
● Определяются требования к качеству (SQA, Software Quality Attributes)
● Проводится анализ рисков (RA, Risk Analysis)
● Создаются планы валидации и верификации (V&V Plans, Test Plans)
● Определяются критерии приемки ПО (AC, Acceptance Criteria)

PRD (от англ. Product Requirements Document - документ с требованиями к


продукту) - описание, включающее все требования к определенному продукту и
отражающее, как продукт будет выглядеть, и как он будет работать .

3. Дизайн (архитектура) системы


На этапе дизайна системы архитекторы ПО создают “скелет” проекта
основываясь на требованиях. Они определяют используемые технологии,
инструменты, рабочие процессы, взаимосвязи между разными частями
проекта, структуры баз данных, потоки данных и т.п.

В итоге определяется спецификация по дизайну (Design Document Specification,


DDS) с описанием что и как нужно делать с технической точки зрения.

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

● Проектирование высокого уровня


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

4. Разработка
Разработчики получают требования (SRS), спецификацию по дизайну (DDS) и
создают требуемое ПО.

Качество требований напрямую влияет на стоимость и


продолжительность разработки. Чем хуже требования, тем больше ошибок
нужно будет исправить, следовательно, увеличиваются незапланированные
расходы.

JAD (Joint Application Development) — концепция совместной разработки


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

5. Тестирование
Тестировщики, основываясь на требованиях (SQA, SRS, DDS) и готовом
продукте производят проверку качества ПО (Quality Control).
Если находятся отклонения от требований / ошибки — они оформляются в
виде отчетов о дефектах, исправляются и перепроверяются.
Процесс продолжается до тех пор, пока качество продукта не будет доведено
до приемлемого уровня.

6. Развертывание
После успешного тестирования готовый продукт передается заказчику.
Кроме передачи может производится настройка рабочих окружений, установка,
конфигурация и запуск продукта.

7. Поддержка (Сбор требований от юзеров, bug fixing)


После запуска продукта он начинает развиваться, изменяться, дополняться
новыми функциями.
Поддержку можно представить как повторяющуюся цепочку шагов
“Определение новых требований” -> “Разработка” -> “Тестирование” ->
“Развертывание”.
Эта часть жизненного цикла является самым длительным и важным этапом
разработки ПО.
Без наличия процессов и стандартов разработки, рабочих процедур, порядка в
документации, налаженной коммуникации и регрессионных тестов, разработка
очень быстро превращается в кошмар с микро-менеджментом, постоянно не
закрывающимися задачами, кучей багов, огромным техническим долгом,
развалом команды или проекта.
Именно на этом этапе умирает большинство стартапов.
8. Закрытие
Закрытие — последний этап жизни ПО. На нем происходит вывод продукта из
эксплуатации, его замена на современные аналоги, либо новые версии.
Методологии разработки

Workflow — это система обеспечения выполнения задач, поставленных перед


исполнителями в рамках процессного управления. Т.е. workflow — система,
координирующая выполнение операций, составляющих бизнес-процессы.

Waterfall - каскадная модель разработки ПО. До завершения предыдущей


стадии разработки не начинается следующая.
Отсутствие возможности внесения изменений в проект до его окончания.

Инкрементирование – приращение результатов предыдущего этапа.

Инкремент — это конкретная ступенька к достижению

«Incremental Model» (инкрементная модель)

В инкрементной модели полные требования к системе делятся на различные


сборки. Терминология часто используется для описания поэтапной сборки ПО.

Имеют место несколько циклов разработки, и вместе они составляют


жизненный цикл «мульти-водопад». Цикл разделен на более мелкие легко
создаваемые модули. Каждый модуль проходит через фазы определения
требований, проектирования, кодирования, внедрения и тестирования.
Процедура разработки по инкрементной модели предполагает выпуск на
первом большом этапе продукта в базовой функциональности, а затем уже
последовательное добавление новых функций, так называемых
«инкрементов». Процесс продолжается до тех пор, пока не будет создана
полная система.

Используется:

● Когда основные требования к системе четко определены и понятны. В то


же время некоторые детали могут дорабатываться с течением времени.
● Требуется ранний вывод продукта на рынок.
● Есть несколько рисковых фич или целей.

Итеративность – повторение операций в целях переработки результатов


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

Итерация - это временной интервал, является элементом современных итерационно-


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

«Iterative Model» (итеративная или итерационная модель)

● Требования к конечной системе заранее четко определены и понятны.


● Проект большой или очень большой.
● Основная задача должна быть определена, но детали реализации могут
эволюционировать с течением времени.

RUP (Rational Unified Process) - рациональная итеративная модель -


модель разработки ПО
Основная цель: точно в срок и ограниченный бюджет; ранняя диагностика
правильности выбранных решений и минимизация рисков.
Процесс разработки делиться на итерации - этапы, в ходе которых происходит
реализация.
- Требования четко и жестко формализованы.
- Большая команда
- Важнее условия контракта, чем сотрудничество с заказчиком
«Spiral Model» (спиральная модель)
Спиральная модель — процесс разработки ПО, комбинирующий
проектирование и постадийное прототипирование (прототипирование —
создание прототипов для конкретизации требований заказчика)

Пример спиральной модели:


RAD (Rapid Application Development) - модель быстрой разработки
приложений, ключевыми для которой является скорость и удобство
программирования.
RAD — модель быстрой разработки приложений, ключевыми для которой
является скорость и удобство программирования.
Принципы RAD сосредоточены на том, чтобы обеспечить основные
преимущества методики быстрой разработки приложений:

- повышенная скорость разработки


- низкая стоимость
- высокое качество

Особенности:

- цикличность разработки — каждая новая версия продукта основывается


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

Гибкая методология / Agile development – это семейство процессов


разработки, а не единственный подход в разработке программного
обеспечения, который определяется Agile Manifesto.
Agile - гибкая методология. Разработка ведется параллельно.
Активное сотрудничество и взаимодействие, а правила мало формализованы.
● люди и взаимодействие важнее процессов и инструментов

● работающий продукт важнее исчерпывающей документации

● сотрудничество с заказчиком важнее согласования условий контракта

● готовность к изменениям важнее следования первоначальному плану


Особенности:
1. Необходим высокий уровень квалификации команды для максимального
эффекта
2. Отсутствие четкого плана, очень “поверхностное” описание требований к
системе
Scrum - одна из вариаций Agile. Управление списков требований заказчика и
расстановка приоритетов для достижения результатов в кратчайшие сроки.
Требования мало формализированы.
- Небольшие скрам команды
- Артефакты
объекты, которые создаются командой во время работы над проектом. К ним
относятся бэклог продукта, бэклог спринта и инкремент продукта, то есть
работающий кусок функционала, который команда демонстрирует в конце
спринта.
Product Backlog — список требований по проекту
Sprint Backlog — список требований, которые нужно выполнить в ближайший
спринт.
Sprint Goal — цель спринта
Sprint Burndown Chart — диаграмма, которая обновляется по мере завершения
задач. По ней легко понять динамику и уровень продвижения команды в
проекте.
- Фиксированные итерации (спринты)
Лучше всего подходит для длительных, долгоживущих проектов, в которых
очень важен ранний запуск и постоянное усовершенствование (например,
стартапы).

Скрам предполагает четыре формальных события:

● Планирование Спринта;
Первое собрание, которое начинает спринт. Выбранные задачи вносятся в
проект-спринт с дедлайном и исполнителем.

● Ежедневный Скрам; 15 минут по длительности


что я делал вчера, чтобы команда добилась цели?
что я буду делать сегодня, чтобы команда добилась цели?
что мешало мне выполнять работу?

● Обзор Спринта;
Проводится, когда работа по спринту завершена. Это показ заказчику и всем
заинтересованным лицам функционала, который команда создала за спринт.
На этом этапе заказчик высказывает свое мнение, вносит коррективы,
запрашивает дополнительный функционал и т.д.

● Ретроспектива Спринта
Обсуждение проблемы и поиск решения после каждого спринта. Полученный
план изменения внедряете на следующем спринте.

Канбан - гибкая методология разработки ПО.


Основной принцип - постоянный анализ и оптимизация процесса на всех
этапах. Минимум документации.
Канбан — это «вытягивающая» система. В ней создается баланс между
постоянным потоком, который устраняет затраты на ожидание, и минимальным
количеством работы в процессе (РВП), что снижает риски перепроизводства.
РВП регулируется с помощью карточек: их количество зафиксировано, а
инструкции в них направляют исполнителей нижнего потока.

Work in progress - ограниченное число задач на человека/команду.


Swimlanes - первая по приоритетности задача
Sub-columns - подколонки (In progress/Done)
Если это разработка нового продукта, то на старте разработки и до релиза
лучше использовать Scrum, так как он делает разработку более
контролируемой по срокам. Также в Scrum много коммуникаций в команде:
ребята обсуждают весь бэклог спринта перед стартом, задают вопросы
авторам задачи (UX, продакт-менеджерам, бизнес-аналитикам), оценивают
задачи сообща с помощью Planning poker. Scrum помогает детально погрузить
команду в суть продукта.

А после релиза продукта начинается совсем другая жизнь: начинает идти


обратная связь от пользователей продукта, нужно быстро на нее реагировать.
Вам нужно постоянно проверять различные гипотезы, где на гипотезу может
банально влиять цвет кнопки. Все увеличивает ваш цикл разработки, вы
начинаете делать много маленьких задач в непредсказуемой
последовательности. И для этого как раз идеально подходит Kanban.
XP eXtreme programming - гибкая методология, тесное общение команды с
закачиков, написание юнит тестов, быстрое планирование, максимальное
упрощение и автоматизация.
Цель: справиться с постоянно меняющимися требованиями к программному
продукту и повысить качество разработки.
Он применим исключительно в сфере разработки ПО, и строится вокруг 4
процессов:

1. кодирование — согласно единым в команде стандартам оформления;


2. тестирование — тесты пишутся самими программистами до написания
кода, который будут тестировать;
3. планирование — как финального билда, так и отдельных итераций.
4. слушание — как разработчиков, так и клиента, в ходе которого исчезают
неясности, определяются требования и ценности.
Бизнес модели

T&M Time and Materials/Время и материалы


модель, при которой цена формируется из затрат времени команды и
материалов на разработку проекта.
Заказчик оплачивает почасово/помесячно
● Универсальна для проектов, где не может быть четко определен объем
работ;
● Высокая степень гибкости на протяжении всего процесса разработки;
● Возможность изменения размера команды, задействованной на проекте.

Fixed price/Фиксированная цена


Чаще для краткосрочных проектов. Цена за готовый продукт
Точный объем требований, сроки и фиксированный бюджет (может быть
уже установлен компанией на определенные услуги).
● Фиксированный бюджет;
● Определен срок;
● Четкий план работ на протяжении всего проекта (документация);
● Риски. Метод Hourly rate(почасовая ставка)
● Отсутствие гибкость
● Жертва функционалом при дедлайне.

Fixed budget/Фиксированный бюджет


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

ODC, Dedicated team


Долгосрочные проекты.
Dedicated Team — это определение конкретной команды, которая будет
заниматься разработкой, и для ценообразования используют зарплату всех
участников команды, а также дополнительные административные расходы.

● Долгосрочная разработка ПО, когда текущий план развития


подразумевает привлечение дополнительных ресурсов и использование
новых технологий.
● Не определен конечный итог.
● Гибкость. Будут меняться требования к проекту или приоритеты задач.
● Контроль. Заказчик может осуществлять полный контроль и управление
командой, регулировать нагрузку работы каждого из них;
● Профессионализм. Индивидуальный подход к подбору специалистов, их
уровню знаний и опыту работы в конкретной сфере;
● Снижение затрат. Удаленная команда контролирует дедлайны и при
необходимости занимается дополнительным набором персонала.

Saas, Software as a Service


ПО, как услуга
SaaS — это модель предоставления лицензии на программное обеспечение по
подписке. SaaS расшифровывается как software as a service — программное
обеспечение как услуга, также встречается перевод «информация как сервис».
SaaS чаще всего — это облачное решение, т. е. находящееся на серверах в
интернете.
Пользователь получает доступ к сервису через браузер или по API. При этом
его поддержкой целиком занимается поставщик услуги. Mодель SaaS это когда
клиент работает с готовым решением онлайн. Оплачивает доступ и
максимально быстро получает на руки готовый инструмент.
Глоссарий айтишника
EInterprise APP - крупные системы автоматизации работы
предприятий/корпоративные приложения/системы.
- Большая и сложная кодовая база;
- Высокие требования по надёжности и производительности;
- Длительный срок эксплуатации.

web-сервис – это приложение работающее в World Wide Web и доступ к


которому предоставляется по HTTP-протоколу, а обмен информации идет с
помощью формата XML. Следовательно, формат данных передаваемых в теле
запроса будет всегда XML.

Язык программирования - знаковая система, для записи компьютерных


программ. Определяет набор лексических, синтаксических и семантических
правил, задающих фронт енд программы и действия, которые выполнит
компьютер под их управлением.

Язык программирования — совокупность основных символов (алфавит) и


правил составления из них смысловых конструкций. Он должен обеспечивать
взаимодействие человека с машиной и быть удобен и понятен им обоим.

Платформа — это набор повторно используемых компонентов, которые были


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

Фреймворк — это что-то похожее на библиотеку (возможно этот термин вам


более знаком), но есть один момент. Грубо говоря, используя библиотеку, вы
просто создаете объекты классов, которые в ней есть, вызываете нужные вам
методы, и таким образом получаете нужный вам результат. То есть, тут более
императивный подход: вы четко указываете в своей программе в какой
конкретный момент надо создать какой объект, в какой момент вызвать
конкретный метод, итд. С фреймворками дела обстоят слегка иначе. Вы просто
пишете какие-то свои классы, прописываете там какую-то часть логики, а
создает объекты ваших классов и вызывает методы за вас уже сам фреймворк.
Фреймворк - "золотая середина" между написанием сложного кода и
применением ограниченной по функционалу CMS. Вы получаете уже
готовый каркас для своего проекта, при этом не теряя гибкости в плане
функционала.

Фреймворк теперь можно определить как набор концепций, библиотек,


инструментов и практик, которые обеспечивают:

1. Стандартизированную концепцию компонента для использования внутри


платформы
2. Стандартизированную технологию коннекторов, которая обеспечивает
коммуникацию между компонентами в платформе и сохраняет
анонимность отдельных компонентов.

Фреймворк программной системы


Это каркас программной системы (или подсистемы). Может включать:
вспомогательные программы, библиотеки кода, язык сценариев и другое ПО,
облегчающее разработку и объединение разных компонентов большого
программного проекта. Обычно объединение происходит за счет
использования единого API.
● Высокая производительность. Скорость работы выше только у
приложений, написанных на чистом PHP, с индивидуальной разработкой
кодов.
● Хорошая защищенность кода. Фреймворки пишут опытные
программисты, код проходит тестирование сообществом разработчиков.
Недостатки и уязвимости своевременно устраняются. Возможность
применения нестандартных решений значительно снижает вероятность
взлома.
● Универсальность. Используя готовые классы и библиотеки Фреймворков
можно решить любую поставленную задачу.

CMS/Content Management System


Joomla!, Drupal; WordPress - WEB
Система управления контентом. CMS одновременно выполняет функции
информационной системы (сбор, хранение и обработка данных) и
функции компьютерной программы (организация создания,
редактирования и управления контентом или содержимым ресурса).
CMS это "движок" или "сердце" ресурса, платформа, которая дополнительно
помогает оптимизировать работу с сайтом:

● В ней хранится инструментарий для создания содержимого. Эта же


система позволяет формировать совместный рабочий процесс над
контентом.
● Работает с контентом: хранит его, осуществляет контроль версий,
управляет потоком документов и соблюдает режим доступа к
содержимому.
● Отвечает за публикацию контента.
● Демонстрирует информацию в том виде, который наиболее удобен
для поиска и навигации.
Преимущества:
1. Минимальное время, требующееся для разработки сайтов.
2. Множество готовых дополнений в виде легко устанавливаемых расширений.
3. Дают возможность создать свой сайт, даже если вы совершенно не владеете
языками программирования.
4. Схожесть устройства админ панели и функционала различных CMS
упрощают работу вебмастеров.

Минусы:
1. Ограниченность в возможностях. Встречаются системы с четко
очерченными задачами. Что касается монстров как WordPress или Joomla! –
здесь все решается путем установки расширений, в результате получаются
сайты с большими возможностями.
2. Более низкая производительность, чем у сайтов, созданных на
Фреймворках, требует больше ресурсов (не имеет значения, при мощном
серверном оборудовании).
3. Избыточные функции. Это издержки универсальных решений, с которыми
остается только смириться.
CMF, если говорить простым языком, — это что-то среднее между CMS и
фреймворком по возможностям. Обычно CMF используют для самых сложных
сайтов из этой категории. Этот подход позволяет избавиться от лишних частей
CMS, которые не нужны конкретному проекту.

Magento (владелец Adobe inc) - это специализированная CMS (система управления


контентом) или платформа с открытым исходным кодом (open-source) для создания
интернет-магазинов.
Существует бесплатная (community edition) и платная версия (enterprise edition),
отличающиеся функционалом.

К особенностям Magento стоит отнести:


● широкий набор функционала в базовой версии.
● многозадачность (ведение нескольких проектов одновременно)
● гибкую настройку прав пользователей административной части
ТЕРМИНОЛОГИЯ В РАЗРАБОТКЕ

Developing from scratch - разработка с самого начала


Source Developer - тим лид, который с самого начала всё начал
Grooming - обсуждение задач, планировка решений, Estimation
Estimation - назначить сторипоинт
Bind - привязывание к какому-то функционалу
Числа финабачи
Общая терминология

DevOps (Разработка + Операции): метод разработки ПО, делающий упор на


общение, сотрудничество, интеграцию, автоматизацию. Метод признает
взаимозависимость разработки программного обеспечения, обеспечения качества
(QA) и ИТ-операций и направлен на то, чтобы помочь организации быстро
производить программные продукты и услуги и повышать производительность
операций.

Управление конфигурацией: процесс системного проектирования для установления


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

Отказоустойчивость: отработка отказа - это резервный рабочий режим, в котором


функции системного компонента (процессора, сервера, сети или базы данных) берут
на себя вторичные системные компоненты, когда первичный компонент становится
недоступным.

Доступность (a11y): означает, что люди с ограниченными возможностями могут


использовать Интернет.

Компьютерный сценарий: это список команд, которые выполняются определенной


программой или обработчиком сценариев.

Архивный бит: это отдельный бит в файле, который указывает, было ли выполнено
резервное копирование файла

Git: это система контроля версий, которую разработчики используют для управления и
хранения кода в одном месте. Если программист знаете Git, он также можете
использовать GitHub, веб-репозиторий, который позволяет ему управлять файлами,
демонстрировать свои проекты и работать с командами.

Многопоточность: широко распространенная модель программирования и


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

Параллелизм: несколько вычислений выполняются одновременно и потенциально


взаимодействуют друг с другом.

Облачные вычисления: это технология распределенной обработки данных в которой


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

Кеширование (кэш): это совокупность временных копий файлов программ, а также


специально отведенное место их хранения для оперативного доступа
Термины архитектуры проекта

Архитектура: это термин, применяемый как к процессу, так и к результату


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

UML: унифицированный язык моделирования. Язык программирования, используемый


для проектирования и создания программных систем посредством объектно-
ориентированной разработки.

Рендеринг - визуализация

API - своеобразная созданная человеком архитектура, которая создается с помощью


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

API (Application programming interface) — это контракт, инструкция который


предоставляет программа. Пользователи работают с GUI — graphical user interface.
Программы работают с API — Application programming interface. Им не нужна графика,
только контракт.
Контракт включает в себя:
● саму операцию, которую мы можем выполнить,
● данные, которые поступают на вход,
● данные, которые оказываются на выходе (контент данных или сообщение об
ошибке)

GUI-тесты — честный тест, «как это делал бы пользователь».


API-тесты — опускаемся на уровень ниже, выкидывая лишнее.
Unit-тесты — тесты на отдельную функцию

Основные форматы передачи данных:


● XML — используется в SOAP (всегда) и REST-запросах (реже);
● JSON — используется в REST-запросах.

XML, в переводе с англ eXtensible Markup Language — расширяемый язык разметки.


Используется для хранения и передачи данных. Так что увидеть его можно не только
в API, но и в коде.
JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными,
основанный на JavaScript. Но при этом формат независим от JS и может
использоваться в любом языке программирования.
JSON используется в REST API - популярный архитектурный подход для
создания API.
В SOAP API возможен только формат XML, а вот REST API поддерживает как XML, так
и JSON. Разработчики предпочитают JSON — он легче читается человеком и меньше
весит.

Restful API - способ взаимодействия и обмена данными сервера, своеобразная


оболочка. В качестве пакета обычно отправляется JSON массив на указанный
конкретный URL. Там срабатывает так называемая функция, а в зависимости от уже
отправленных данных и текущего запроса начинается определенное действие. Они
могут не просто получать данные из одной сети, а способны вызывать и обращаться к
удаленным серверам, чтобы взять нужное у них.

Модуль Web-Socket, протокол WebSocket - это новый протокол HTML5. Он


реализует полнодуплексную связь между браузером и сервером, а Spring
поддерживает связь через webSocket.

ORM (Object-Relational Mapping, объектно-реляционное отображение) —


технология программирования, суть которой заключается в создании «виртуальной
объектной базы данных».
Благодаря этой технологии разработчики могут использовать язык
программирования, с которым им удобно работать с базой данных, вместо
написания операторов SQL или хранимых процедур. Это может значительно
ускорить разработку приложений, особенно на начальном этапе. ORM также
позволяет переключать приложение между различными реляционными базами
данных.
● ORM обрабатывает создание соединений с базой данных и выполнение
команд, а также результаты запросов и автоматическое предоставление этих
результатов в качестве объектов приложения.
● ORM также помогает отслеживать изменения объектов приложения и может
сохранять эти изменения в базе данных.

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

Причины создать форк:


● У программы исходный код находится под лицензией, которая разрешает
свободное использование и копирование этого кода, в том числе создание
форков.
● Есть разработчики, которые готовы вкладывать в этот проект время и силы.
● официальные разработчики долго не добавляют в софт те функции, которые
нужны пользователям;
● хочется выпустить свою версию.
● компания закрывается и официально перестаёт поддерживать какой-то софт;
● разработчики уходят из компании, чтобы развивать продукт так, как им хочется
Инструменты и программы

AWS: веб-сервисы Amazon. Платформа облачных сервисов с различными функциями,


которые помогают разработчикам развертывать веб-приложения.

Bootstrap: среда веб-разработки с открытым исходным кодом, используемая для


создания веб-сайтов, включающих HTML, CSS и JavaScript. Он был разработан
членами команды Twitter.

Kubernetes: платформа с открытым исходным кодом, которая автоматизирует


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

Apache: самое популярное программное обеспечение для веб-серверов, выпущенное


в 1995 году. Оно имеет открытый исходный код и позволяет компьютеру размещать
один или несколько веб-сайтов, к которым можно получить доступ через Интернет с
помощью веб-браузера.

Oracle: система управления реляционными базами данных, разработанная для


распределенных вычислений предприятия. Он помогает глобальным предприятиям
управлять и обрабатывать информацию в удаленных и локальных сетях экономичным
способом.

AI: искусственный интеллект. Область исследований, направленная на создание


компьютеров, которые работают и рассуждают как люди.

Машинное обучение: набор навыков искусственного интеллекта, включающий


алгоритмы, которые позволяют компьютеру учиться и адаптироваться с течением
времени, а не следовать набору статического кода.
Непрерывная интеграция (CI): объединение всех рабочих копий разработчика с общей
основной линией несколько раз в день.

Непрерывная интеграция (CI): объединение всех рабочих копий разработчика с


общей основной линией несколько раз в день.

TDD: процесс разработки программного обеспечения, основанный на повторении


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

BDD: вышел из TDD. Идея состоит в том, чтобы предоставить командам


разработчиков и менеджеров программного обеспечения общие инструменты и общий
процесс для совместной работы над разработкой программного обеспечения.
Прогрессивные веб-приложения (PWA) - технология в веб-разработке, которая
добавляет сайтам возможности приложений для мобильных устройств и
трансформирует сайт в приложение. На выходе получаем гибрид сайта и приложения
для мобильных устройств.
Crashlytics - бесплатный инструмент отслеживания и анализа багов в мобильных
приложениях на операционных системах iOS и Android. Сервис рассчитан на
неограниченное количество программ, пользователей и ошибок. Отчёты о сбоях
можно получать в режиме реального времени. Для работы необходимо завести
аккаунт в Fabric.
Платформа предназначена для разработчиков приложений, так как позволяет
отслеживать баги и жалобы пользователей на падение программы и анализировать,
что именно привело к сбою. Отсутствие платы за использование делают инструмент
доступным как для крупных, так и для небольших компаний.

Inversion of Control - переносит ответственность за выполнение действий с кода


приложения на фреймворк.

C++ Builder — программный продукт, инструмент быстрой разработки приложений,


интегрированная среда программирования, система, используемая программистами
для разработки программного обеспечения на языках программирования Си и C++
Шаблон проектирования/паттерн
В разработке программного обеспечения — повторяемая архитектурная
конструкция, представляющая собой решение проблемы проектирования в
рамках некоторого часто возникающего контекста.
MVC - Model View Controller

MVC: контроллер представления модели. Модель разработки программного


обеспечения / приложения, основанная на трех связанных частях: модель,
которая управляет данными, представление, также известное как
пользовательский интерфейс, и контроллер, который управляет изменением
модели.
Модель представляет данные компонента.
Представление представляет собой визуальное представление данных
компонента.
Контроллер принимает входные данные от пользователя в представлении и
отражает изменения в данных компонента/модели.

MVP - Model View Presenter, MVVM - Model View View Model (работа отдельно
над одним и тем же разделом приложения, используя один и тот же набор
данных)

SOA: сервис-ориентированная архитектура. Методология архитектуры,


призванная помочь бизнесу эффективно добавлять новые услуги. В SOA
компоненты приложения работают с другими компонентами через сеть.

Ваш код обращается к возможностям инфраструктуры через интерфейс


прикладного программирования (API - набор внешних функций, которые
обращаются ко внутренним функциям сервера/приложения/фреймворка),
который публикуется каркасом через его файлы заголовков. Поскольку
библиотека динамически (автоматически, имеется логика) распределена,
несколько приложений могут одновременно обращаться к коду инфраструктуры
и ресурсам. Система загружает код и ресурсы фреймворка в память по мере
необходимости и разделяет одну копию ресурса среди всех приложений.
API: интерфейс прикладного программирования. Набор команд и функций,
которые позволяют программистам взаимодействовать с внешней системой.
Это избавляет их от необходимости писать код, который уже существует, с
нуля. Windows API, например, дает разработчикам доступ к пользовательскому
интерфейсу и элементам, таким как окна и полосы прокрутки, поэтому им не
нужно создавать их независимо.
Интерпретация и компиляция
Работа всех трансляторов строится по одному из двух принципов:
интерпретация или компиляция.

Интерпретация — построчный анализ, обработка и выполнение исходного


кода программы или запроса (в отличие от компиляции, где весь текст
программы, перед запуском, анализируется и транслируется в машинный
или байт-код, без её выполнения)
- интерпретирующая программа занимает определенный объем памяти,
т.к. должна находиться в памяти ЭВМ в течение всего процесса
выполнения исходной программы, запускается сразу в редакторе.
- сниженная производительность работы программы (процесс трансляции
одного и того же оператора повторяется столько раз, сколько раз должна
исполняться эта команда в программе)
- удобны при разработке и отладке исходных программ.
Компиляция программы включает два действия:
- анализ - определение правильности записи исходной программы в
соответствии с правилами построения языковых конструкций входного
языка;
- синтез - генерирование эквивалентной программы в машинных кодах.

Виды компиляций:
- Компиляция в промежуточный код.
Основана на концепции виртуальной машины (VM), которая представляет
собой продвинутый интерпретатор.
- Just-in-time (JIT) компиляция.
JIT-компиляторы используют метод компиляции во время работы программы,
«на лету». Они существенно ускоряют цикл разработки, но программа может
притормаживать и выполняться медленнее. С JIT-компилятором она
запускается медленнее, потому что перед выполнением кода ему нужно
одновременно успеть проанализировать и скомпилировать его.
- Ahead-of-time (AOT) компиляция.
AOT-компиляторы замедляют цикл разработки — промежуток времени, через
который можно выполнить программу после внесения в неё изменений, чтобы
посмотреть результат изменений. Программа работает более предсказуемо,
без перерывов на анализ и компиляцию в рантайме. Метод АОТ не требует
выделения дополнительной памяти и АОТ-компиляция проходит с
минимальной нагрузкой на систему. Процесс компиляции полностью
выполняется перед выполнением программы.

Hot Reload/отладка кода/debug - редактирование кода.


IDE
IDE (Integrated Development Environment) – это интегрированная, единая
среда разработки, которая используется разработчиками для создания
различного программного обеспечения.
IDE представляет собой комплекс из нескольких инструментов, а именно:
текстового редактора, компилятора либо интерпретатора, средств
автоматизации сборки и отладчика.
Интегрированные среды разработки

● Visual Studio
С, С++, C#, ASP.NET Core.
Основной средой для разработки, рекомендуемой Microsoft, является Visual
Studio.
Microsoft Visual Studio — линейка продуктов компании Microsoft, включающих
интегрированную среду разработки программного обеспечения и ряд
других инструментальных средств.
Данные продукты позволяют разрабатывать как консольные приложения, так
и приложения с графическим интерфейсом, а также web-сайты, web-
приложения, web-службы как в родном, так и в управляемом кодах для
всех платформ, поддерживаемых Windows.

● Rider/JetBrains
C#+.Net
Кроссплатформенная IDE для .NET-разработчиков, основанная на платформе
IntelliJ и ReSharper. Поддерживает синтаксис ASP.NET Razor, JavaScript,
TypeScript, XAML, XML, HTML, CSS, SCSS, JSON и SQL.

● Visual Studio Code


HTML, CSS, JavaScript и PHP
Редактор кода. Использовать Visual Studio Code можно для создания веб-
проектов ASP.NET 5 или Node.js, использовать различные языки, такие как
JavaScript, TypeScript, C#, работать с пакетными менеджерами npm.

● Visual Studio для Mac


Выполняется только в macOS. Для разработки приложений и игр .NET для iOS,
Android и Интернета.

● Eclipse
Поддерживаемые языки: C, C++, Java, PHP, Python.
Eclipse — свободная IDE, отлично подходит в числе прочего и для веб-
разработки.
● WebStorm/JetBrains
JavaScript
Ее часто используют для создания самых современных веб-приложений.

● PyCharm/JetBrains
Python
Эта IDE — прекрасный выбор, если вам нужен бесплатный инструмент и если
вы занимаетесь разработкой бэкенда на Python. Основные особенности:
● облегчение интеграции с Git, Mercurial и SVN
● встроенные отладчики для Javascript, Python и Django

● PHPStorm/JetBrains
Поддерживаемые языки: PHP, JavaScript, HTML, CSS, SASS, LESS и т.д.
PHPStorm многие считают самой лучшей IDE для веб-разработки. Эта IDE
настоятельно рекомендуется разработчикам, работающим с WordPress, Drupal,
Magento.
Основные особенности:
● простая интеграция с фреймворками и CMS, такими как WordPress
● доступно юнит-тестирование на PHP или фреймворках на основе PHP

● IntelliJ IDEA/JetBrains
Java
Она имеет прекрасную поддержку плагинов и языков, применяющихся в веб-
разработке (HTML, CSS, Ruby, Python и т. д.).

● Xcode
Xcode — богатая функционалом IDE для веб-разработки и других целей,
доступная только для macOS. Xcode можно полностью интегрировать с Cocoa
и Cocoa Touch, что позволяет пользователям создавать инструменты
операционной системы.

● NetBeans/Apache
Java, C/C++, PHP, JavaScript, Ruby.
NetBeans — бесплатная IDE с поддержкой многих языков программирования.
NetBeans IDE является платформой для построения десктоп приложений с
функциональным пользовательским интерфейсом, т.к. представляет из себя
фреймворк к Java библиотеке Swing.

● Codeanywhere
JavaScript
Codeanywhere — облачная IDE, позволяющая разработчикам запускать
проекты веб-разработки и сразу же их редактировать. Codeanywhere написана
на JavaScript. Используя эту IDE, вы сможете запускать в ней код, находящийся
на вашей виртуальной машине, через SSH и FTP.

Веб-сервера
Apache Wicket HTTP-сервер, Apache Software Foundation — фреймворк с
открытым исходным кодом для создания веб-приложений. Программа,
которая запускается на сервере. Его задача установить соединение между
сервером и браузером посетителей при доставке файлов туда и обратно
между ними (клиент-серверная структура). Apache – это кроссплатформенное
программное обеспечение, что значит оно хорошо работает как на Unix, так и
на Windows серверах. Использует подход, основанный на использовании
компонентов. Состояние компонентов пользовательского интерфейса
сохраняется, когда пользователь запрашивает новую страницу, и затем
восстанавливается, если запрос повторяется.
У Apache есть модули безопасности, но они не настолько надежны, как
Nginx, кэширования, редактирования URL, аутентификации посредством
пароля и другие.
Apache совместим с разными CMS (Wordpress, Joomla, Drupal), веб-
фреймворками (Django, Laravel и др.) и языками программирования. Это
делает его уверенным решением для всех типов хостинг платформ, таких
как VPS или общий хостинг.

Apache Wicket - это фреймворк для веб-разработки на Java. Wicket очень


хорошо масштабируется. Wicket использует обычные HTML-страницы для
описания внешнего вида страниц и панелей.
Поддержка AJAX, предоставляемая Wicket, означает, что вам не нужно
писать собственный JS-код для наиболее распространенных задач. За
кулисами Wicket использует JQuery и автоматически генерирует JS-код на
веб-странице. Wicket - идеальное решение для создания сложных
интерфейсов со сложной бизнес-логикой.

Tomcat – это веб-сервер также разработанных Apache Software Foundation,


поэтому его официальное название Apache Tomcat. Это тоже HTTP-сервер,
однако он обрабатывает приложения Java вместо статических сайтов.
Tomcat может запускать несколько Java спецификаций,

Nginx HTTP-сервер 2002 г. Игорь Сысоев, для Rambler. 2011 г. серверное ПО


начала выпускать уже собственная фирма Игоря, которая спустя 2 года
запустила расширенную платную версию продукта (Nginx Plus). Весной 2019
года Nginx была выкуплена крупным американским девелопером F5
Networks. - был разработан специально для устранения ограничений
производительности веб-серверов Apache. Событийно ориентированная
архитектура не создаёт новый процесс для каждого запроса, вместо этого она
обрабатывает каждый входящий запрос в едином потоке . В Nginx каждый
рабочий процесс может одновременно обрабатывать тысячи HTTP-
соединений. Следовательно, Nginx - это легковесная, масштабируемая и
высокопроизводительная реализация. Эта архитектура делает обработку
больших и флуктуирующих нагрузок на данные гораздо более предсказуемой с
точки зрения использования ОЗУ, использования ЦП и задержки.

Nginx разделяет один поток под каждый запрос на меньшие однотипные


структуры, называемые рабочими соединениями. Каждое такое
соединение обрабатывается отдельным рабочим процессом, а после
выполнения они сливаются в единый блок, возвращающий результат в
основной процесс обработки данных. Одно рабочее соединение может
обрабатывать до 1024 запросов одного вида одновременно.

Веб-сервер Nginx по сравнению с Apache работает быстрее при отдаче


статики и потребляет меньше серверных ресурсов. Его использует вместо
или совместно с Apache для ускорения обработки запросов и
уменьшения нагрузки. Это обуславливается тем, что большая часть тех
возможностей, которые предлагает Apache, большинству обычных
пользователей не нужно.

Сильные и слабые стороны


● Оба серверы хорошо работают на системах типа Unix, но
производительность Nginx на Windows заметно ниже.
● При одновременной работе Nginx оказывается в два раза быстрее
Apache и использует меньше памяти. С динамическим контентом
скорость равна.
● Для получения пользовательской поддержки можно обратиться на
форум или почту компании, но у Apache Foundation есть с этим
проблемы.
● Apache хорошо справляется с хостингом нескольких сайтов сразу, но
Nginx показывает лучшую «гибкость» и эффективность работы с
динамическим контентом.
GIT
Гит — способ хранения файлов и их версий. Гит позволяет смотреть историю
изменений файлов, кто какие дополнения и когда вносил, как развивался
проект, кто что в него добавлял и почему.

На базе гита есть сервис «Гитхаб». Работает так:


● все рабочие файлы проекта синхронизируюся между облаком и вашим
компьютером;
● такая синхронизация происходит у каждого участника проекта;
● можно настроить автоматическую синхронизацию, а можно отправлять
изменения вручную;
● можно отправить на сервер изменения, которые сделали вы на своём
компьютере, а можно наоборот — скачать себе те, которые внесли в
проект другие программисты.

СЛОВАРЬ GIT
Гит-репозиторий — это облачное хранение вашего проекта на сервере
(например, на сервере Гитхаба, но можно и на другом).

В репозитории могут храниться:


● файлы с исходным кодом проекта;
● базы данных;
● картинки и графики;
● текстовые файлы;
● и всё остальное, что нужно проекту для работы.

Бранч/git branch — это ветка или копия проекта, в которую можно вносить
любые изменения и они не повлияют на основной проект.

В гит-репозитории всегда есть как минимум один бранч, который называется


master. Если не создавать других веток, то все изменения будут сразу идти в
главную ветку проекта, которая используется для выпуска новых версий
проекта, которые будут доступны всем. То, что добавляется в мастер-
бранч, сразу становится доступно пользователям.

смёржить бранчи - создать копию master ветки, сделать правки там, а потом
залить изменения в master

Что такое клонирование (git clone)


Клонирование/git clone — это когда вы копируете репозиторий себе на жёсткий
диск, вместе с файлами вашего проекта вы также тянете всю историю версий,
все ветки, всю историю работы. И если кто-то дальше будет вносить изменения
в проект, благодаря этим данным вы сможете тоже их получить. Простое
копирование переносит файлы на жесткий диск без синхронизации.

Смёржить/git merge — это когда мы отправляем всё, что сделали в одной


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

Коммит/git commit - внесение правок в репозиторий и с указанием, что


конкретно изменилось.

Чтобы отправить данные из своего проекта на сервер, используют gut push.


Для этого программист указывает имя ветки, в которую хочет отправить свой
код, а сервер их принимает, проверяет и добавляет к себе. Если кто-то внес
изменения раньше вас, гитхаб просит сначала обновить данные у себя на
комьютере с помощью git pull.
Пулл работает просто: он скачивает с сервера актуальную версию ветки и
добавляет код оттуда вам на компьютер. Иногда этот код вступает в
противоречие с тем, что уже успел сделать программист, и тогда возникает
конфликт — нужно принять решение, какая версия одинакового кода останется
в проекте, а что нужно будет убрать.

Коммит — это когда вы фиксируете изменения в проекте, как бы


подводите итог своей работе.
Пуш — это когда вы отправляете сделанную работу туда, где хранится
копия вашего кода.
Классификация языков программирования:

Парадигма Представление Исполнение Связь частей


программировани программ и программы программы между
я данных собой

Функциональное Базовым Вычисление значений Задача моделируется в


Perl, Scala, Python, элементом функций. виде функции, а, точнее,
является функция. чаще всего в виде их
композиции, если f(.) и g(.)
— это функции, то f(g(.))
— это их композиция.

ООП Данные и методы Последовательность Отдельные части


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

Логическое Данные и правила Преобразование Разбиение программы на


их обработки логического отдельные независимые
!= Prolog. объединены в образования в части затруднительно
Если доказал b, c, рамках единого соответствии с
d, докажешь и а логического логическими
Вывод информации структурного правилами
из заданных образования
фактов.

Структурное Программа Последовательное Основными элементами


представление разбивается на исполнение; управления являются
программы в виде блоки — Ветвление последовательность
иерархической (однократное
подпрограммы команд, ветвление и цикл.
структуры блоков выполнение одной из
(изолированные 2< операций, в
друг от друга) зависимости от
условия
Цикл (мног. исп одной
и той же операции
пока выполняется
условие продолжения
цикла)
Парадигма программирования - это набор принципов и методик по созданию
кода.
Они нужны, чтобы упорядочить программу и сделать её структурированной,
удобной и понятной другим программистам, работающим в той же парадигме.

Функциональное программирование — это стиль написания программ


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

Композиция функций — это подход функционального программирования,


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

В результате, с другим логическим порядком вызова чистых функций и тем же


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

ФП по простому - создание функций для работы с неизменяемыми


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

Компилируемые и Интерпретируемые:

Компилируемые: С, С++, Pascal


Интерпретируемые (компиляцию выполняет интерпретатор): Visual Basic
Script (VBScript), JavaScript, Python, PHP

Условно компилируемые: C# и остальные языки .Net, Java для Java-машины

Компиляция происходит в два этапа: в среде .Net программа на C# после


компиляции преобразуется в программу на еще одном промежуточном языке
CIL — Common Intermediate Language, которая для запуска передается на вход
Just-In-Time (JIT) компилятору.
● объектная ориентация и применение интерфейсов
● строгое различие между типами значений и типами ссылок
● строгая типизация данных
● обработка ошибок через использование исключений
● применение атрибутов

Универсальные и специализированные:

Универсальные: семейство Pascal/Delphi, C/C++, C#, Java


Специализированные:
Веб-разработка: Perl, PHP, JavaScript
Базы данных: SQL
Компьютерные игры: Lua, Unity, Godot, Twine
Компьютерная графика: MEL (Maya), MAX Script (3ds Max)

Алгоритмические и Языки описания данных:

Алгоритмические: Pascal, C++, Java, C#


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

Языки описания данных: XML, XAML, JSON, HTML, DDL SQL


Языки же описания данных предназначены только для описания данных для
разных типов приложений. В этих форматах сохраняются данные написанные
на алгоритмических языках.
В формате HTML теги определяют оформление данных — расположение
заголовков, начало абзаца и т. д. В формате XML теги определяют структуру и
смысл данных — то, чем они являются.

DLL - «Динамически Подключаемую Библиотеку», это компоненты библиотеки,


а нужна она для запуска программ, приложений и игр. Библиотека DLL файлов
«рассказывает» им, как работать с параметрами вашей системы.
Формат DLL является динамической библиотекой, которая отвечает за
получение доступа различными программными комплексами к общедоступному
системному функционалу.
Так как .dll файл могут содержать системные файлы, его изменение либо
полное удаление, может приводить к возникновению ошибок и неполадок не
только в работоспособности определенного программного обеспечения, но и
всей ОС.

Низкоуровневые и Высокоуровневые:

Низкоуровневые: Assembler, CIL, C++


осуществлять программирование практически на уровне машинных команд.

В настоящее время языки типа ассемблера обычно используют при написании


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

- ориентирован на конкретный тип процессора и учитывает его особенности


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

Высокоуровневые: любой объектно-ориентированный или поддерживающий


сложные типы данных язык
C++ и Python.
созданы с расчетом на то, что их должны понимать люди. Они независимы:
программистам не нужно знать, на каком оборудовании будет запускаться
программа.
- совместимы с различными платформами, для которых создан
транслятор для этого языка.
- понятные и мощные команды
- допускается меньше ошибок
- возможность описания программ решения задач в удобной форме
Объектно-Ориентированные и Структурные языки программирования:

Объектно-ориентированное программирование (в дальнейшем ООП) —


парадигма программирования, в которой основными концепциями являются
понятия объектов и классов.
В центре ООП находится понятие объекта.

Объект — это сущность, экземпляр класса, которой можно посылать


сообщения и которая может на них реагировать, используя свои данные.
Данные объекта скрыты от остальной программы. Сокрытие данных
называется инкапсуляцией.

Инкапсуляция — это свойство системы, позволяющее объединить данные и


методы, работающие с ними в классе, и скрыть детали реализации от
пользователя.
Цель инкапсуляции – уйти от зависимости внешнего интерфейса класса (то,
что могут использовать другие классы) от реализации. Чтобы малейшее
изменение в классе не влекло за собой изменение внешнего поведения класса.

Абстрагирование — это способ выделить набор значимых характеристик


объекта, исключая из рассмотрения не значимые. Соответственно,
абстракция — это набор всех таких характеристик.

Наследование — это подход к выражению общего поведения между типами


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

Полиморфизм — результат наследования - это свойство системы


использовать объекты с одинаковым интерфейсом без информации о типе и
внутренней структуре объекта

Основные преимущества ООП проявляются только в том случае, когда в языке


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

ООП: С++, Object Pascal, Java, С#, Delphi и Visual Basic.


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

Структурные языки программирования


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

Для небольших задач типа сортировки данных или нахождения кратчайшего


пути структурное программирование подходило идеально. Были найдены
решения для большинства сложных алгоритмических задач.

Сопутствующие Фреймворки (Frameworks), Библиотеки и Технологии


Языки программирования
С++
1985, С++ 20, Bjarne Stroustrup

● Масштабируемость - разработка программы для самых различных


платформ и систем;
● возможность работы на низком уровне с памятью, адресами, портами.
● имеет мощный препроцессор, унаследованный от С.
● возможность создания обобщенных алгоритмов для разных типов
данных.
● нет альтернативы из-за большого количества библиотек классов,
поддерживающих создание пользовательского интерфейса, клиент-
серверных приложений, работу с базами данных и т. д.
● замедляет компиляцию при подключении большого количества модулей
(подключение интерфейса внешнего модуля через препро-цессорную
вставку заголовочного файла (#include));
● недостаток информации о типах данных во время компиляции;
● сложность для изучения и компиляции

С#
2000 г., Microsoft, Андерс Хейлсберг и Скотт Вилтамут
C# 9.0 .NET 5
IDE: Visual Studio/Eclipse/NetBeans(Apache)/Rider (JetBrains)
(crossplatform)

C# поддерживает все три «столпа» объектно-ориентированного


программирования: инкапсуляцию, наследование и полиморфизм.
Кроме того, в нем была реализована автоматическая «сборка мусора»,
обработки исключений, динамическое связывание.

Особенности С#:

○ Полный и хорошо определенный набор основных типов.


○ Встроенная поддержка автоматической генерации XML-документации.
○ Полный доступ к библиотеке базовых классов .NET, а также легкий
доступ к Windows API (если это действительно необходимо).
○ Возможность использования С# для написания динамических web-
страниц ASP.NET.
● является проще и надежнее чем C++.
● учитывает все возможности Framework .Net, так как C# создавался
параллельно с данной средой;
Эффективность кода даже повышается, поскольку программы C# выполняются
поверх .NET Framework – встроенного компонента Windows, который включает
в себя виртуальную среду выполнения,CLR, и единый набор классовых
библиотек.

CLR (Common Language Runtimе) представляет собой компилятор


промежуточного языка,
Среда CLR управляет памятью, выполнением потоков, выполнением
кода, проверкой безопасности кода, компиляцией и другими системными
службами. Эти средства являются внутренними для управляемого кода,
который выполняется в среде CLR. Кроссплатформенный, не привязан к
процессору.
в то время как виртуальная Java-машина является интерпретатором байт-кода;
● мощная библиотека каркаса поддерживает удобство построения
различных типов приложений на С#, позволяя легко строить Web-
службы, другие виды компонентов, достаточно просто сохранять и
получать информацию из базы данных и других хранилищ данных;
Платформа
.NET представляет собой новую платформу, новый API для
программирования в Windows, а С# есть новый язык, созданный с нуля,
для работы с этой платформой

Главная идея ее создания заключалась в том, чтобы добавить специальную


программную «прослойку», которая располагалась бы между операционкой
и приложением. Именно на эту прослойку были возложены функции
сглаживания особенностей конкретной конфигурации ОС, тем самым упрощая
запуск программы в имеющейся среде.

Модель .NET активно применяется для разработки приложений следующих


видов:
● веб-API и микрослужбы;
● классические и мобильные приложения;
● web-приложения;
● службы «Виндоус»;
● консольные программы и т. д.
Что включает в себя .Net:
- CLR (общеязыковая исполняющая среда), CTS (общая система
типов), CLS (общая спецификация языков) - допускают кросс-
язычную интеграцию.
- Библиотека классов (Class Library)

Пакет SDK для .NET — это набор библиотек и средств, с помощью которых
разработчики могут создавать приложения и библиотеки .NET. Он содержит
следующие компоненты, которые используются для сборки и запуска
приложений:
● Интерфейс командной строки .NET.
● Библиотеки .NET и среда выполнения.
● Драйвер dotnet.

FCL (Framework Class Library) - это большая коллекция готовых к


использованию классов.
Сюда входят такие библиотеки:
● WPF — для работы с графическими приложениями
WPF - Windows Presentation Foundation (WPF) — это платформа
пользовательского интерфейса для создания клиентских приложений для
настольных систем. WPF использует расширяемый язык разметки для
приложений (XAML), чтобы предоставить декларативную модель для
программирования приложений.
● ASP.NET — для работы с web-приложениями
● WCF — для работы с сетью и создания распределенных (клиент-
серверных) приложений
● UWP
Универсальная платформа Windows (UWP) – это специальная платформа
для создания приложений на Windows 10. Вы можете разрабатывать
приложения для UWP с помощью всего одного набора API, одного пакета
приложений и одного магазина для доступа ко всем устройствам Windows
10. Легче поддерживать несколько размеров экрана, а также различные
модели взаимодействия

● Entity Framework — для работы с базой данных

Entity Framework
Microsoft, 2008 г.
Как основное средством взаимодействия между приложениями .NET и
реляционными базами данных. Entity Framework — это инструмент,
упрощающий сопоставление объектов в программном обеспечении с
таблицами и столбцами реляционной базы данных.
● Entity Framework (EF) — это ORM-фреймворк с открытым исходным
кодом для ADO.NET, который является частью .NET Framework.

Windows Forms

Это технология пользовательского интерфейса для .NET, представляющая


собой набор управляемых библиотек, которые упрощают выполнение
стандартных задач, таких как чтение из файловой системы и запись в нее.это
платформа пользовательского интерфейса для создания классических
приложений Windows. Она обеспечивает один из самых эффективных
способов создания классических приложений с помощью визуального
конструктора в Visual Studio. Такие функции, как размещение визуальных
элементов управления путем перетаскивания, упрощают создание
классических приложений.

В Windows Forms можно разрабатывать графически сложные приложения,


которые просто развертывать, обновлять, и с которыми удобно работать как в
автономном режиме, так и в сети
.NET Core

кроссплатформенный .NET

2014 г.
Платформа .NET Core имеет открытый исходный код на сайте GitHub и была
передана корпорацией Майкрософт в фонд .NET Foundation в 2014 году.

.NET Framework - это старая платформа, работающая только под


Windows. . .NET Core - это новая платформа, которая может работать как под
Windows, так и под Linux.

На .NET Core мы можем создать только консольное приложение (которое


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

.NET Core – это модульная платформа для разработки программного


обеспечения, с открытым исходным кодом. На основе .NET Core был создан
ASP.NET Core (кросс-платформенная реализация) – open source
платформа разработки веб-приложений.
- Razor pages
Razor Page — это страница, состоящая из стандартной разметки (View) и
бэкенд класса. В каком то смысле напоминает Web Forms только без
поддержки сохранения состояния. Бэкенд страницы является и
контроллером и моделью — классика ООП — инкапсуляция данных и
методов работы с ними в одном объекте. В конце концов модель страницы —
это просто класс, нет никаких причин почему этим классом не может быть
контроллер.

Иными словами, Razor Pages — более вменяемое решение для веба чем MVC,
теперь мы имеем дело с традиционным и логичным понятием «страница» а не
с контролерами и моделями разбросанными по всему проекту.

- ASP.net файлы .cshtml


- Улучшенная версия MVC
- Представлена только в .NET Core

Версия Core – это модульная кроссплатформенная open source реализация


стандарта .NET общего назначения. Она содержит множество API из .NET
Framework и включает среду выполнения, фреймворк, а также инструменты,
поддерживающие различные ОС и процессоры.

Основные характеристики .NET Core:


● Модульность (каждый его компонент обновляется через отдельный
менеджер пакетов. В итоге программа или приложение может работать с
отдельными модулями и не зависеть от обновления всей платформы.)
Повышенная безопасность, менее требовательное обслуживание, высокая
производительность и в сниженные затраты.
● Облачные технологии
● Кроссплатформенность: поддерживает Windows, Linux и macOS
● Open source (находится под управлением .NET Foundation и доступен на
GitHub. )

ADO.NET
ADO.NET (ActiveX Data Object для .NET) — собственная технология доступа к
данным; это набор классов, предоставляющих службы доступа к данным
программистам (SQL Server), которые используют платформу .NET Framework.

ADO.NET имеет набор компонентов для создания распределенных


приложений, совместно использующих данные. Это неотъемлемая часть
платформы .NET Framework, которая предоставляет доступ к реляционным
данным, XML-данным (структуру и смысл данных ) и данным приложений.
Особенность ADO.NET заключается в том, что эта технология позволяет
писать более-менее одинаковый код для доступа к данным — как в веб-
приложениях, так и в клиент-серверных настольных приложениях, и даже в
однопользовательских приложениях.

ASP.NET
ASP.NET 4.0 последняя версия
Обслуживается средой CLR
Цель: предоставляет коду полный доступ ко всем объектам и содержит все
концепции ООП (создавать пригодные для повторного использования классы,
стандартизировать код с помощью интерфейсов, расширять существующие
классы за счет наследования и объединять полезные функциональные
возможности в распространяемый скомпилированный компонент.)

ASP.NET - инструмент ориентированный на разработку веб-сайтов.

ASP.NET Web Forms - работа с страничкой с помощью HTML элемента.


- Быстро разработать сайт/прототип
- Схожи с Windows Forms
- Для бизнес-приложений
- Для работы с большим количеством данных
- Сложно проводить Unit тестирование
- Основной код связан с кодом интерфейса
ASP.NET MVC - программная среда для разработки гибких, динамичных веб-
приложений и сервисов
- Декларативный подход
- Привязка данных
- Разделение интерфейса и основного кода
- Небольшой размер страниц
- Интеграция библиотек JS: Angular, React, jQuery
- Трудно освоить декларативный подход
- Мало библиотек
Суть его состоит в разбиении приложения на три отдельных логических части.
Модель (Аналогия с Клиент-Серв. Арх - БД) включает весь бизнес-код
приложения, например, логику доступа к данным и правила верификации.
View (Клиент) создает для модели подходящее представление за счет ее
визуализации в HTML-страницы. Контроллер (Сервер) координирует весь этот
процесс за счет обработки операций взаимодействия с пользователем,
обновления модели и передачи информации в представление.

ASP.NET MVC и ASP.NET Web Forms являются двумя родственными


технологиями, в основании которых лежит одна платформа ASP.NET. И все
же ASP.NET MVC имеет ряд преимуществ перед ASP.NET Web Forms:
● разделение ответственности (отдельная разработка разных
компонентов — контроллера, моделей, представлений)
● улучшенная тестируемость
● повышенная гибкость и настраиваемость под собственные нужды

ASP.Net Web API - сайт + API, к которому может подключиться


др.сайт/мобильное/десктопное приложение

Дружественная к принципам Test-Driven Development (разработка через


тестирование
Благодаря четкому разделению частей в приложении ASP.NET MVC, можно
легко создать для него модульные тесты. В случае применения веб-форм
автоматизированное тестирование является утомительным и зачастую
невозможным.
Domain-Driven Design (проблемно-ориентированное программирование).

Domain-Driven Design — подход к разработке приложений, основанный на


выделении доменов (domain).
Использование подхода «Domain driven design» при проектировании
архитектуры сложных корпоративных информационных систем позволяет
сделать проще поддержание изменений в проекте и эффективнее тестировать
новые релизы. Главный принцип DDD — разработка не должна быть в
отрыве от бизнес-задач. DDD не является инструкцией или методологией, а
составляет набор правил и ориентиров
Xamarin
IDE: Visual Studio/Mono

Xamarin, Microsoft — платформа для создания мобильных приложений. Это


фреймворк с использованием языка C# + .Net для разработки
кроссплатформенных приложений (для iOS, Android, Windows Phone).

Преимущества использования Xamarin:


● В процессе разработки создается единый код для всех платформ
● Xamarin предоставляет прямой доступ к API каждой платформы
● При создании приложений мы можем использовать платформу .NET и
язык программирования C# (а также F#).

Xamarin позволяет разрабатывать на C#, используя библиотеки и рантайм,


которые работают на iOS, Android и Windows. При этом компилируются
встроенные (не интерпретированные) приложения с достаточной
производительностью для игр.

Xamarin совмещает все возможности встроенных платформ и добавляет


несколько мощных особенностей:
● Полная привязка к базовым SDK: Xamarin содержит привязки
практически ко всем базовым платформенным SDK от iOS и Android. Эти
привязки строго типизированы, входит строгая проверка типов во
время компиляции и разработки.
● Xamarin содержит средства для прямого вызова библиотек
Objective-C, Java, C, and C++. Таким образом, вы воспользуетесь
преимуществами существующих библиотек iOS и Android, написанных на
Objective-C, Java или C/C++.
● Библиотека базовых классов (BCL): приложения Xamarin
используют .NET BCL, (XML, базы данных, сериализацию, IO, строки и
поддержку сети)
● Современная IDE: Xamarin использует Visual Studio на macOS и
Windows.
● Поддержка мобильной кроссплатформенности.

Библиотека Xamarin.Mobile предлагает унифицированный API для доступа к


ресурсам всех платформ.

Xamarin позволяет вам писать UI вещей в C#.

MVVMCross (Mvx) позволяет использовать шаблон MVVM в кросс-


платформенной разработке, чтобы иметь общий уровень бизнес-логики
ViewModel . Таким образом, вы создаете разные представления на основе
платформы, но привязываетесь к одному и тому же ViewModel .

При этом вы имеете полный доступ ко всем возможностям SDK платформы


и родному механизму создания UI, получая на выходе приложение, которое,
строго говоря, ничем не отличается от нативных и (по крайней мере по
заверениям) не уступает им в производительности.

Xamarin.Forms - это платформа пользовательского интерфейса с открытым


кодом. С помощью Xamarin.Forms разработчики могут создавать приложения
для Xamarin.Android, Xamarin.iOS и Windows на основе общей базы кода.
Java
Oak (1991 г.)
1990 г., Джеймс Гослинг, Oracle Corporation (Sun Microsystems)
IDE: IntelliJ IDEA/Eclipse/NetBeans
Java является объектно-ориентированным языком, относится к языкам
программирования с сильной типизацией.

Главная идея технологии Java - это кросс-платформенность,


где установлена виртуальная машина Java (Java Virtual Machine).
В состав технологии Java входит Java API (Application Programming Interface) -
набор классов, который предлагается разработчику и отличается на разных
платформах.

Можно запустить на любой платформе, если на ней установлена среда


исполнения Java (JRE, Java Runtime Environment), благодаря компиляции
написанного на Java кода в байт-код. Этот формат исполняет JVM или
виртуальная машина Java.

JRE – Java Runtime Environment, среда исполнения Java. Это набор всего
необходимого чтобы запустить скомпилированную Java-программу.
Окружение состоит из виртуальной машины Java (JVM), библиотеки классов
(Java Class Library).

CLR - аналогия виртуальной машины Java, JRE

JVM — Java Virtual Machine - Runs/ Interprets/ переводит байт-код в


собственный машинный код. Виртуальная машина не зависит от
платформы.
JVM — процесс, запущенный на устройстве, который предоставляет и
контролирует использование ресурсов Java-приложения. Спецификация JVM
описывает требования для разработки программы, которая выполняет эти
задачи.

JDK – Java Development Kit, набор Java-разработчика. Это


полнофункциональный SDK для Java. JDK включает в себя JRE, но кроме того
содержит компилятор (javac). С помощью JDK можно создавать и
компилировать программы.
Где реализуется Java:

● Мобильная разработка, клиентские приложения, десктопный софт, игры.


● энтерпрайз app с Java EE (теперь Jakarta EE);
Java EE может работать в общем случае только в рамках Enterprise
Application Server’a. Java EE хорошо подходит для реализации
масштабируемого монолитного кластерного приложения.
● Spring (Framework) и все что построено за долгие годы вокруг него;
Приложение на Spring стеке может работать на чем угодно и без сервера.
Применяется для разработки небольших приложений с GUI на Front-end
или для микросервисной архитектуры. Но отказ от зависимости от
серверов приложений отрицательно сказался на масштабируемости
Spring-приложений.
● мобильная разработка под Android;
● веб-разработка с множеством готовых платформ;
● реактивное направление и т.д.

Редакции Java

Java SE (Java Platform Standard Edition) - это стандартная редакция Java,


которая используется для разработки простых Java приложений. Например,
можно создавать консольные приложения, апплеты, приложения с
графическим интерфейсом. До 6 версии Java эта редакция имела название
J2SE (Java 2 Platform Standard Edition).
Стабильная версия: Java SE 15 (2020г.)

Java EE (Java Platform Enterprise Edition) — это платформа, построенная на


основе Java SE, которая предоставляет API и среду времени выполнения для
разработки и запуска крупномасштабных, многоуровневых, масштабируемых,
надежных и безопасных сетевых приложений.
Стабильная версия: Jakarta EE 8 (Сентябрь 2019)

У Java EE приложений есть структура, которая обладает двумя ключевыми


качествами:
● Многоуровневость
- клиентский;
- средний уровень (web-уровень и уровень бизнес-логики)
- уровень доступа к данным.

JavaServer Faces (JSF) - это Java спецификация для построения компонентно-


ориентированных пользовательских интерфейсов для веб-приложений. Этот
MVC-фреймворк упрощает разработку пользовательских интерфейсов (Java
EE приложения) для веб-приложений.

В отличие от прочих MVC-фреймворков, которые управляются запросами,


подход JSF основывается на использовании компонентов. Состояние
компонентов пользовательского интерфейса сохраняется, когда пользователь
запрашивает новую страницу и затем восстанавливается, если запрос
повторяется.

Технология JavaServer Faces включает:


● Набор API для представления компонентов пользовательского
интерфейса (UI) и управления их состоянием, обработкой событий и
валидацией вводимой информации, определения навигации.
● Специальная библиотека JSP тегов для выражения интерфейса JSF на
JSP странице. В JSF 2.0 в качестве обработчика представления
используется технология Facelets которая пришла на замену JSP.

Созданная быть гибкой, технология JavaServer Faces усиливает


существующие стандартные концепции пользовательского интерфейса
(UI) и концепции Web-уровня без привязки разработчика к конкретному
языку разметки, протоколу или клиентскому устройству.

Java ME (Java Platform Micro Edition) - это редакция Java для разработки
приложений для микрокомпьютеров. До 6 версии Java эта редакция имела
название J2ME (Java 2 Platform Micro Edition).

Фреймворки Java

Spring
2003 г, Род Джонсон.
Актуальная версия: 5.3.9
Spring - представляет собой набор готовых решений для использования всех
основных Enterpise Java технологий, идеально подходит для создания
enterprise/корпоративных/веб приложений и моделей конфигурации на базе
Java.
Spring фокусируется на нескольких областях функционирования приложений и
предоставляет для них широкий спектр дополнительных функций. Имеет
шаблонную архитектуру.

Одной из основных особенностей Spring Framework является использование


паттерна Dependency Injection (DI, внедрение зависимости) и Inversion
Control (IoC).
DI помогает намного проще реализовывать необходимую приложениям
функциональность, а также позволяет разрабатывать слабо связанные
классы, делая их более универсальными.

Он позволяет разработчикам сосредоточиться на бизнес-логике приложения.


Близко связан с фреймворком Spring Boot. Имеет модульную структуру и
содержит такие модули: data access; web; core.

Особенности:

● Основное преимущество Spring'а - возможность разработки приложения


как набора слабосвязанных (loose-coupled) компонентов.
● Фреймворк обеспечивает мощную абстракцию для спецификаций
JavaEE;
● Поддерживает Kotlin

Spring Boot - комплексный фреймворк для создания и запуска приложений с


минимальными усилиями и настройками. Этот модуль делится на два стека:
основанный на API сервлетов Spring MVC и реактивный Spring WebFlux.

Spring WebFlux — веб-платформа, созданная, чтобы по максимуму


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

Spring MVC построен на API сервлетов и использует архитектуру синхронного


блокирующего ввода-вывода с моделью «один запрос на поток»

Фреймворк Spring Security предоставляет набор методов выполнения


аутентификации и авторизации в веб-приложении. Легко интегрируется в
любое веб-приложение без необходимости изменения конфигурации
Apache Struts — это среда Open Source для разработки Web-приложений с
помощью технологий Java Servlet and Java Server Pages (JSP). Struts
способствует разработке приложений с архитектурой, базирующейся на
парадигме MVC.
Struts позволяет более просто конструировать приложения на основе шаблона
модель-представление-контроллер. Он использует и расширяет API сервлетов
Java.

Hibernate — это библиотека, которая предназначена для задач объектно-


реляционного отображения. Hibernate позволяет разработчику работать с
базой данных не напрямую, а с помощью представления таблиц баз данных
в виде классов java, это сокращает объемы низкоуровневого
программирования при работе с реляционными базами данных.
Hibernate автоматизирует генерацию SQL-запросов и освобождает
разработчика от ручной обработки результирующего набора данных и
преобразования объектов, максимально облегчая перенос (портирование)
приложения на любые базы данных SQL.
JPA — Java Persistence API — спецификация, которая дает возможность
сохранять в удобном виде Java-объекты в базе данных.
Dropwizard — мощный Java-фреймворк, высоко оптимизированный под
разработку RESTful-сервисов. Он также идеален для написания
микросервисов на этом языке, предоставляет доступ к Jackson (библиотека)
для обработки JSON-файлов. JSON избавляет от необходимости писать код
для метрик и конфигураций, позволяя направить силы на функционал
приложения.
Dropwizard помогает достичь максимальной продуктивности при разработке.
Приятный бонус — понятная для новичков документация.

Grails - Java-фреймворк для веб-разработки. Совместим с технологиями Java,


такими как Hibernate и Spring.
○ Мощная и непротиворечивая поддержа персистенции
(сохранности данных).
○ Мощные и лёгкие в использовании шаблоны страниц (view),
использующие GSP (Groovy Server Pages).
○ Динамические библиотеки тегов для лёгкого создания
компонентов веб-страниц.
○ Хорошая поддержка Ajax, легко расширяемая и настраиваемая
под цели разработчика Grails — Ajax (библиотеки: jQuery (по
умолчанию), Rico, Prototype, Dojo и YUI — с помощью плагинов).

AJAX это Асинхронный JavaScript и XML. Это набор методов веб-разработки,


которые позволяют веб-приложениям работать асинхронно — обрабатывать
любые запросы к серверу в фоновом режиме, обеспечивают режим
разработки, включающий встроенный веб-сервер и автоматическую перегрузку
ресурсов.
HTML/CSS
IDE: Visual Studio Code /PHPStorm
HTML (Организация W3C, Tim Berners-Lee, 1991 г.)
Отвечает за структуру страницы. Основа всех сайтов. HTML помогает
обрисовать содержание вашего сайта, который затем стилизован с
использованием CSS и сделан динамичным с помощью Javascript.
Обязательно знать в современном мире.
Стандарт HTML5 позволяет создавать даже мобильные приложения (с
помощью отдельных фреймворков) также относится к разработке front-end. В
стандарте HTML5 разрешаются методы написания страниц, которые были
запрещены десять лет тому назад. В нем подробно изложены инструкции
браузерам, как обрабатывать ошибки в разметке страниц, чтобы попытаться
отобразить эти страницы, вместо того чтобы сразу же забраковывать их.

Он, наконец, позволяет воспроизводить видео, не прибегая к помощи модулей


расширения браузера

CSS
Организация W3C, 1996 г. , Håkon Wium Lie
Стабильная версия: CSS 4
Отвечает за оформление страницы. Для создания и детализации
визуального стиля вашего сайта. Такие технологии, как SASS, позволяют
использовать элементы программирования в вашем стиле, а CSS-фреймворки,
такие как Bootstrap 4, Foundation, Tailwind и другие, позволяют быстро
стилизовать веб-сайт.

Bootstrap: большое количество стилей, шаблонов, постраничный дизайн - это


существенно облегчает создание сайта.
Содержат код на JavaScript с использованием библиотеки jQuery JS/Jquery.
Semantic UI - используется для создания переносимых интерфейсов.
Foundation - улучшенным функционал для современных мобильных устройств.
Благодаря семантическому подходу, есть возможность использования SCSS,
написания более чистого кода в HTML. Данный фреймворк является
идеальным для ситуации, когда нужно быстрое прототипирование.
Pure by Yahoo! - в данном фреймворке есть несколько небольших CSS-
модулей, которые хорошо подойдут для любого современного проекта.
Uikit - фреймворк отличается модульной, легкой структурой. Есть несколько
особенностей, которые позволяют ему выделяться на фоне современных
фреймворков. Это markdown - возможность предварительно просмотреть
страницу сайта в режиме реального времени. Также можно отметить
синтаксическую подсветку для HTML
Javascript
1995 г., Brendan Eich, Netscape
Стабильная версия: ECMAScript 2021
IDE: WebStorm/VS Code/NetBeans/Codeanywhere
JavaScript — это мультипарадигмальный язык, который поддерживает типы
программирования, управляемые событиями, функциональные и обязательные
(в том числе объектно-ориентированные и основанные на прототипах).

Отвечает за взаимодействие страницы с пользователем. Javascript стал


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

NodeJS
2009 г. Стабильная версия: 14.8 (16.7) (BACKEND)
С открытым исходным кодом, созданная на основе Google Chrome
JavaScript Engine.
это серверная платформа для работы с JavaScript через движок V8. JavaScript
выполняет действие на стороне клиента, а Node — на сервере. С помощью
Node можно писать полноценные приложения. Node умеет работать с
внешними библиотеками, вызывать команды из кода на JavaScript и
выполнять роль веб-сервера.

Node.js — среда выполнения кода JavaScript вне браузера. Эта платформа


позволяет писать серверный код для динамических веб-страниц и веб-
приложений, а также для программ командной строки. С помощью Node.js
реализуется парадигма «JavaScript для всего».
Пакетная экосистема Node.js, npm, также является крупнейшей в мире
библиотечной экосистемой с открытым исходным кодом.

NPM - это менеджер пакетов, которые вы можете подключить в ваш проект.

NB: Реактивное программирование — вариант многопоточного, при котором


вместо системы «запрос — ожидание ответа — получение ответа —
обработка» работает принцип «запрос (послали и забыли) — ответ —
обработка ответа».

Такие фреймворки называются реактивными, потому что в них состояние


интерфейса автоматически реагирует на изменение данных. Реактивные
фреймворки незаменимы для реализации концепции Single Page Application,
когда всё происходит на одном экране.

Node.js легко обрабатывает большое количество запросов одновременно


и обеспечивает быстродействие приложения. Поэтому серверный JavaScript
часто используют для создания SPA — одностраничных веб-приложений, в
которых рендеринг выполняется на стороне клиента.

Express.js
Express.js - это быстрая и легкая платформа для Node.js, которая применяется
для создания web-приложений различного размера и сложности с
расширениями, которые предоставляют дополнительные функции,
добавляющие ценность.
Входит в стек MEAN (MongoDB, Express, Angular, Node.js), используемым
для создания веб-приложений.
Серверный компонент для отображения сайтов React.js. В него встроено
множество полезных возможностей, в частности, маршрутизация,
оформленные компоненты и многое другое. Серверный рендеринг
означает, что данные будут обновляться автоматически, как это делается на
сервере, но, перед выводом в окне браузера будут проходить этап рендеринга.
Надежный механизм маршрутизации на основе URL-адресов с
использованием методов HTTP
● Поддержка различных плагинов и расширений, улучшающих его
функциональность по умолчанию
● Простая интеграция с базой данных
● Подходит для работы с большими данными,
● Обеспечить высокую производительность и критическую
масштабируемость при потоковой передачи медиа или live stream.
Подходит для создания приложений корпоративного размера.
Nest.js
Самый важный и популярный фреймворк для создания серверных веб-
приложений Node.js. Это не только фреимворк для бэкенда, но и
возможность войти в мир передовых концепции, например таких как
DDD(Domain Driven Design), Event sourcing и микросервисной архитектуре.

Прогрессивный фреймворк - гибрид обычной веб-страницы и


приложения/Progressive Web App.

Имеет JavaScript-инфраструктуру для создания масштабируемых, надежных и


эффективных серверных приложений Node.js. Он выпущен в 2017 году.
Nest.js построен на основе TypeScript и JavaScript и вдохновлен Angular.
Еще один высокоуровневый фреймворк с четкой структурой и поддержкой DI
(Dependency injection, внешняя зависимость компонентов), обязательным
использованием TypeScript и ООП-подхода.

Поддержка DI/внедрение зависимостей гарантирует, что в случае изменения


одного компонента другие связанные с ним компоненты будут изменены
автоматически.
Фреймворк имеет прекрасный CLI (command-line interface), структуру, в которой
нет права на ошибку, хорошая документация, где можно найти примеры
большинства сценариев использования.

Next JS
среда JavaScript для интерфейса , созданная Vercel. Он позволяет
разработчикам создавать как статические, так и динамические веб-сайты
JAMStack и используется транснациональными корпорациями по всему миру.

Ключевая особенность:
● Автоматическая маршрутизация
● Серверный рендеринг
● Он хорошо взаимодействует с другими экосистемами, включая React
framework и Angular.
● Автоматически выбирает страницы

Минусы:

● Становится дорого настраивать


● Только минимальное количество плагинов
React
2013 г, Facebook. Стабильная версия: 17.02

React JS - это внешняя библиотека JavaScript для создания веб-и


мобильных пользовательских интерфейсов.

React - библиотека визуализации, если взять паттерн MVC (Model-View-


Controller), то React - это лишь часть View.

Библиотека для создания интерфейсов, которое изменяет отображение без


перезагрузки страницы, быстрый отклик. Решает проблему пользователем и
создает полноценный веб-функционал. Имеет инфраструктуру JavaScript UI.
React позволяет разработчикам создавать повторно используемые
компоненты пользовательского интерфейса. React основан на компоненте
многократного использования. Проще говоря, это блоки кода, которые
можно классифицировать как классы или функции. Каждый компонент
представляет определенную часть страницы, такую как логотип, кнопка или
поле ввода. Используемые ими параметры называются реквизитами, что
означает свойства.

JSX - это синтаксис, подобный HTML, который позволяет разработчикам писать


код стиля HTML на JavaScript. React использует JSX для повышения
эффективности кодирования. Вместо того, чтобы искусственно разделить
технологии, помещая разметку и логику в разные файлы, React разделяет
ответственность с помощью слабо связанных единиц, называемых
«компоненты», которые содержат и разметку, и логику.

DOM (document object model) — это структура HTML-страницы. Работа с


DOM — это поиск, добавление, изменение, перемещеие и удаление HTML-
тегов.

Использует Virtual DOM (Document Object Model) для оптимизации DOM


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

React имеет значительно более низкий порог входа, большую гибкость и


свободу, что является преимуществом для небольших проектов, но и не
менее мощный, чтобы использовать его для больших.
React Native
2015 г
NativeScript (JS) не имеет поддержки React. В результате появился React
Native.
Цель разработчиков была показать, что React можно применить для любого
двигателя рендеринга виртуального DOM-дерева, даже если это
мобильная платформа.

Сейчас это стандарт кроссплатформы на JS, который используют для


Enterprise-решений. Использует НАТИВНЫЕ UI элементы, которые пишутся
на стороне платформы (и могут быть расширены самими разработчиками
приложения). Улучшенная абстракция API.

React Native имеет широкий набор инструментов среди которых: CLI, дебаггер,
hot reloader, различные библиотеки компонентов (например, Material UI, Ant
Design), а также множество готовых решений, которые дает сам React.
Фреймворк для создания кроссплатформенных приложений на языке
JavaScript. Он позволяет писать приложения для IOS, Android и даже VR. Его
цель — сделать кроссплатформенные приложения такими же
производительными, как нативные.
React Native позволяет создавать мобильные приложения, используя при этом
только JavaScript с такой же структурой, что и у React. Это дает возможность
составлять многофункциональный мобильный UI с применением
декларативных компонентов.

Архитектура: в основе лежит взаимодействие JS с нативным UI и API с


помощью моста (bridge). JS часть работает на архитектуре React, что
делает разработку React.js и React Native очень схожей. Вторая часть
обрабатывает отображение элементов пользовательского интерфейса и жесты
пользователя. За общение между двумя потоками отвечает так называемый
мост (bridge) — это ядро React Native. Мост позволяет потокам общаться
наилучшим, оптимизированным способом. Он служит посредником, который
разруливает запросы и входящие данные от двух потоков. Такой подход
позволяет им общаться асинхронно, что приводит к стабильной работе, потому
что потоки никогда не смогут заблокировать друг-друга. Основной минус, что
все данные проходят конвертацию.

Также для построения интерфейсов используется библиотека Yoga —


разработка Facebook, которая упрощает взаимодействие с UI.
Язык программирования: JavaScript + библиотека React.js. Он даёт
возможность использовать топовую js-библиотеку для создания
пользовательского интерфейса нативных мобильных приложений.

React Native позволяет вам переиспользовать бизнес-логику приложения на


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

Для локального развертывания проекта вам потребуется:


● Node.js
● NPM или Yarn
● Xcode, Cocoapods
● Android Studio (с Android SDK, JDK)
● Сам React Native устанавливается как библиотека npm c зависимостями
iOS и Android

Angular
Angular — это переписаный AngularJS
Последняя стабильная версия: Angular 10, 2020 г. Google

Angular помогает запускать SPA, имеет компонентную архитектуру. Веб-


приложения на основе Angular обычно без проблем масштабируют
продукт.
Angular работает на основе TypeScript, что означает более легкое чтения кода,
меньше ошибок и функцию самодокументирования.

Angular, который использует эту платформу для разработки одностраничного


приложения (SPA). Эта среда разработки известна прежде всего потому, что
она предоставляет разработчикам лучшие условия для объединения
JavaScript с HTML и CSS.

Это также предпочтительная среда пользовательского интерфейса JavaScript


для разработчиков приложений Google. Angular имеет компонентную
структуру, как и React.

● двустороннее связывание данных


● MVC or MVVM architecture (sometimes called MVW architecture (Model-
View-Whatever)
● Внедрение зависимостей - Стало проще тестировать благодаря
имитации зависимостей.
● Напрямую к DOM обращается.

Использует Typescript, строгая типизация, структура, хорошая


документация.

Основной целью Angular было создание одностраничных веб-приложений,


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

Прогрессивные веб-приложения (PWA). Гибрид Google разработал PWA в


2015 году. К ним относятся приложения, в которых определенные технологии
обеспечивают надежность, быстроту и привлекательность. Angular позволяет
разработчикам легко превращать нативные веб-приложения в прогрессивные.
Больше подходит для Enterprise разработки, корпоративные веб-
приложения (TypeScript), приложения с динамическим контентом.
Похож на Java, если бекенд разработан на Java, лучше выбрать Angular.
● Идеальная синхронизация между моделью и видом
● Изменения мгновенно отображаются в представлении
● Возможность разделения данных и просмотра

VueJS
2013 г. VueJS 2/3
JavaScript-фреймворк с открытым исходным кодом для создания креативного
интерфейса. Разрабатывать на VueJS веб-приложения намного проще, чем
на React.
Vue.js также довольно прост в освоении: все что нужно, это JavaScript и HTML.
Другой сильной стороной Vue.js является его интерфейс командной строки
(CLI). Это базовый инструмент, который ускоряет разработку и содержит
различные функции, которые упрощают разработку.
NB! Используется с Laravel (PHP), Vue.js даст преимущество в построении
сложных интерактивных, реактивных форм, приложений-одностраничников.

Подходит для создания полноценных SPA (Single-Page-Application)


приложений, так как имеет полный набор функционала. Благодаря хорошей
документации, низкому уровню входа и небольшому размеру достаточно
активно завоевывает сердца разработчиков.
Из этого можно сделать вывод, что Vue.js круто подходит для разработки
большинства веб-приложений, но если надо делать слишком сложное
отражение, обратиться стоит в React.
Angular(Enterprise)/Vue/React
Frameworks Angular(Enterprise) Vue React
2009 г. 2013 г. Facebook, 2013 г.

Преимущества Angular используется Адаптивность Virtual DOM


вместе с Typescript.
Хорошая интеграция Адаптивность
MVVM (SPA, web-interfaces) распределения ресурсов(по
Идеальная приоритетам)
синхронизация между Масштабирование
моделью и видом
Занимает мало места Первоклассная поддержка
Изменения мгновенно
Progressive Web App (PWA)
отображаются в Virtual DOM -
представлении экономичный вариант Реализация концепции
Возможность функционального
разделения данных и программирования (FP)
просмотра
Большая Компонентный подход
масштабируемость.
Хорошая интеграция
(SPA, web-interfaces)

Недостатки Разнообразие Недостаток Самостоятельная сборка


различных структур необходимых плагинов компонентов(библиотек) для
(React и Vue.js, у которых Небольшое сообщество разработки.
есть только «Component) разработчиков.
Риск чрезмерной React отходит от
Обращается напрямую к гибкости. Проблемы при компонентов на основе
DOM интеграции в огромные классов, что может стать
проекты, и пока еще нет препятствием для
опыта возможных разработчиков, которым более
решений. комфортно работать с ООП.
Использует синтаксис на
основе шаблонов. При Смешивание шаблонов с
работе над логикой (JSX)
крупномасштабным
проектом шаблоны
сложно повторно
использовать.

Когда Масштабный и сложный Объем проекта невелик Вы согласны с


использовать проект Разработка компонентами многократного
Высокая высокопроизводительных использования
производительность и приложений Интерфейс не сложный
масштабируемость Знание JavaScript Высокая
Требует немного времени производительность и
для изучения масштабируемость
Очень сжатые сроки
Svelte
Svelte JS был выпущен в 2016 году и представляет собой бесплатный
интерфейсный JS FM. Вы можете создавать компоненты с помощью Svelte JS
на языках, которые вам удобны (JavaScript, HTML или CSS). Он компилирует кд
с использованием собственного синтаксиса.

Ключевая особенность:

● Нет виртуального DOM


● Это преобразует коды в чистый JavaScript.
● Очень реактивный

Плюсы
● Легкий и простой в использовании
● Меньший шаблон
● Очень легко учиться
● Поставляется со встроенным реактивным магазином
Минусы
● Не очень устоявшийся фреймворк
● Постоянная потребность в изучении и обновлении информации
● На данный момент в отрасли не так много инструментов Svelte
● Меньшая экосистема
Ionic
2013 г. Версия: 5.6.12

Можно создавать кроссплатформенные гибридные приложения. Он тесно


взаимодействует с фреймворком Apache Cordova (Java)/Capacitor, который
преобразовывает веб-приложения в мобильные программы.

Язык программирования: JavaScript + HTML, CSS.


Ionic завоевал признание среди разработчиков мобильных приложений, потому
что с ним просто работать. Фреймворк построен на ECMAScript 6 и TypeScript,
поэтому его можно использовать в любой IDE, поддерживающей эти языки,
например в Visual Studio Code, Atom или Angular IDE.
Ionic, как и React Native и Flutter, предлагает концепцию единого кода для
разных платформ, но на новом уровне. Все его компоненты автоматически
адаптируются к платформе, на которой запускается приложение — а значит,
разработка становится быстрее.
Также с Ionic вы можете свободно использовать API JavaScript, Angular, React
или Vue.
Для визуализации приложений Ionic использует веб-технологии и совсем
не применяет нативные компоненты. Такой подход значительно снижает
скорость.
Но со стороны разработки есть и плюсы: Ionic позволяет проводить быстрое
тестирование, которое можно запустить прямо в браузере.
jQuery(библиотека) - библиотека JavaScript с открытым исходным кодом.
Наборы готовых функций на JavaScript, выполняющие типовые операции с
HTML-кодом страницы; анимации и отзывчивость интерфейса.
Можно использовать API jQuery для обработки, анимации и манипулирования
событием в HTML-документе, также известном как DOM. Кроме того, jQuery
используется со строительными инструментами Angular и React App.
Одним словом, одна из самых важных библиотек JavaScript для веб-
разработки.
jQuery
Открытый код помогает веб-разработчикам легко добавлять функциональность
на свои веб-сайты, ссылаясь на файл jQuery JavaScript, а не писать код
самостоятельно.
PhoneGap
фреймворк, который позволяет использовать веб-технологии в мобильной
разработке. Он является дистрибутивом Apache Cordova. JavaScript + HTML,
CSS.
Приложение PhoneGap, по сути, представляет собой набор HTML-страниц,
обёрнутых в нативную оболочку. Страницы хранятся в локальном каталоге или
в облаке, а во время запуска на смартфоне они получают доступ к функциям
устройства через плагины. Это делает приложения PhoneGap довольно
лёгкими, но они выглядят менее естественно, а качество пользовательского
интерфейса будет в большей степени зависеть от веб-представления
конкретной ОС.
Ember.js Иегуда Кац, 2011 год - фреймворк с открытым исходным кодом.
Первоначально он назывался SproutCore 2.0, прежде чем стал называться
Ember.js. Отлично масштабируется и может использоваться для больших
проектов. В Ember есть отличный инструмент для сборки, заимствованный из
многих других сред SPA, называемый Ember CLI. Этот инструмент сборки
имеет все необходимое для начала работы. Для веб-версий, мобильных и
настольных версий. Многоразовый и простой в обслуживании.
Минимизирует DOM.

Meteor, 2011 - веб-фреймворк. Кроссплатформенность. Среда Meteor JS


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

Aurelia, Роб Айзенберг, 2016 — это интерфейсная среда с открытым исходным кодом.
Aurelia состоит из функционально-ориентированных модулей, таких как плагины,
маршрутизация, тестирование, внедрение зависимостей и многое другое. Можно
использовать среду Aurelia JS для разработки веб-приложений, приложений для
мобильных устройств и компьютеров. Модульность также позволяет создавать
приложения разных размеров. Aurelia поддерживает как Babel, так и TypeScript. Он
также полностью совместим с будущими версиями JavaScript.

jQuery
● CSS манипуляции
● HTML / DOM manipulation
● AJAX
● Утилиты
● Методы событий HTML
● Эффекты и анимация
Есть две функциональные обычно выполняемые JQuery:
1. Статические служебные функции
2. Методы объекта
PHP
1994 г., Rasmus Lerdorf, The PHP Development Team, Zend Technologies
Стабильная версия: 8.0.9
IDE: PHPStorm/Eclipse/NetBeans/VStudio
PhpStorm runs on the Java Virtual Machine (JVM)
Очень популярный скриптовый серверный веб-язык. Особенно популярен
из-за популярности WordPress, Joomla, Drupal, который работает на PHP.

PHP специально сконструирован для веб-разработок и его код может


внедряться непосредственно в HTML.

Изначально представлял собой набор скриптов на другом языке Perl. Позже


этот набор скриптов был переписан в интерпретатор на языке Си. И с самого
возникновения PHP (сокращение от PHP: Hypertext Preprocessor - PHP:
Препроцессор гипертекста) представлял удобный набор инструментов для
упрощенного создания веб-сайтов и веб-приложений.

PHP не работает сам по себе. Для работы с пользователем он должен быть


настроен в связке с веб-сервером, например, Nginx или Apache:
пользователь отправляет запрос к веб-серверу по протоколу HTTP. Веб-сервер
определяет, к какому типу файла было совершено обращение, и, если это файл с
расширением .php, то веб-сервер передаёт запрос на обработку интерпретатором
языка PHP, скрипт считывается, преобразуется в байт-код, выполняется и возвращает
ответ веб-серверу. Веб-сервер передает сформированный результат пользователю.
Этот результат, как правило, представляет собой динамически сгенерированную
HTML-страничку.

Существуют три основных области применения PHP.


● Создание скриптов для выполнения на стороне сервера.
Состоит из интерпретатора PHP (в виде программы CGI или серверного
модуля), веб-сервер и браузер.
● Создание скриптов для выполнения в командной строке.
Такой способ использования PHP идеально подходит для скриптов, которые
должны выполняться регулярно. Эти скрипты также могут быть использованы в
задачах простой обработки текстов.

Таким образом, выбирая PHP, вы получаете свободу выбора


операционной системы и веб-сервера. Более того, у вас появляется выбор
между использованием процедурного или объектно-ориентированного
программирования (ООП) или же их сочетания.
Symfony
Symfony представляет собой открытый набор PHP-компонентов, которые
подходят для повторного использования. Фреймворк позволяет делать
масштабируемые и производительные приложения. API Symfony
интегрируется со сторонними приложениями, а также с инструментами
для фронтенд-разработки, например, Angular JS.

Symfony используют многие популярные проекты, например, Drupal и phpBB.


Даже самый популярный PHP-фреймворк Laravel построен на основе
Symfony.

В Symfony есть стандартные компоненты, которые можно использовать для


создания приложений. То есть Symfony — отличный пример модульного
фреймворка.

● есть LTS (long term support) версии фреймворка;


● встроена широкая функциональность;
● это самый стабильный фреймворк;
● есть готовые компоненты, что позволяет использовать при создании
приложений модульный подход.
● Можно подключить ORM: инструмент для работы с БД (Doctrine та
Propel)
● Уменьшают нагрузку на сервер при помощи акселератора PHP
(кэширование)

Для тестирования используется дополнительный фреймворк PHP Unit, для


шаблонизации - Twig.

Laravel
2011 г. Тейлор Отвел. Актуальная версия: 8.3.5

Популярность Laravel подчеркивает следующий факт: многие хостеры


предлагают специальные решения для приложений, созданных с помощью
этого фреймворка.

Laravel уступает Symfony и Yii2 в возможности использовать модульный


подход для разработки приложений.

● есть встроенный пакетный менеджер Composer для управления


зависимостями;
● поддержка юнит-тестирования из коробки;
● большое количество пакетов для расширения функциональности.
Yii2
2008 г. Это безопасный, быстрый и производительный фреймворк для
разработки веб-приложений. Текущая версия — 2.0.43.

Объектно-ориентированный компонентный фреймворк, написанный на


PHP и реализующий парадигму MVC (Model-View-Controller).
Удобный функционал - кэширование, высокая производительность, полная
обработка ошибок, возможность переноса (миграции) существующих баз
данных, использование jQuery (библиотека JS) и другое.

В Yii2 используется пакетный менеджер Composer для управления


зависимостями.

В Yii2 реализован подход MVC. В этом фреймворке тоже есть компоненты,


однако модульность реализована не так хорошо, как в Symphony.

● поддерживает Ajax;
● легко расширяемый фреймворк;
● есть встроенный обработчик ошибок;
● подходит для разработки веб-сервисов, построенных с учётом REST
(RESTful web-service).

Zend Framework
Свободный объектно-ориентированный PHP фреймворк для разработки
веб-приложений, разработанный и поддерживаемый компанией Zend. Данный
фреймворк как правило больше всего используют при разработке крупных
коммерческих проектов. С открытым исходным кодом и основан на
программной архитектуре MVC.

Особенности:
- В качестве менеджера зависимостей пакетов Zend Framework
использует Composer.
- Поддержка множества БД.
- Гибкий механизм кэширования по памяти или файловой системы.
- Несвязанные компоненты для повторного использования в проектах.
- Не подходит для быстрой разработки проектов.
CodeIgniter (2.1.3) - популярный PHP фреймворк с открытым исходным кодом, позволяющий создавать многофункциональные и безопасные веб-приложения с MVC архитектурой. Хорошая документация, небольшой вес.
Phalcon PHP - отличается открытым кодом (языки программирования C, C++, PHP), поддержкой практически всех современных ОС. Производительность этого фреймворка находится на высоком уровне.
CakePHP (framework) - это программный каркас для создания веб-приложений, написанный на языке PHP и построенный на принципах открытого ПО. CakePHP реализует паттерн «Модель-Вид-Контроллер» (MVC).
Изначально создавался как клон популярного Ruby on Rails , и многие идеи были заимствованы именно оттуда.

● Своя файловая структура


● Поддержка множества плагинов
● Абстракция данных (PEAR::DB, ADOdb, и собственная разработка Cake)
● Поддержка множества СУБД (PostgreSQL, MySQL, SQLite).
CakePHP отличается от других своих собратьев (Symfony, PHPonTrax) тем, что он полностью совместим как с PHP4 так и с PHP5.
Python
1991 г., Python Software Foundation, Guido van Rossum
Стабильная версия: Python 3.9.7
IDE: PyCharm/Eclipse/MS VS Code

Python — высокоуровневый язык программирования общего назначения.


Относится к интерпретируемым языкам. Мультипарадигмальный язык
программирования. Он поддерживает объектно-ориентированный и
структурный подходы, функциональное и аспектно-ориентированное
программирование. В Python используется динамическая типизация. То
есть тип переменной определяется в момент присваивания значения. При
изменении значения может меняться тип данных.

Недостатки:

- Программы, написанные с помощью Python, считаются одними из самых


медленных. Данный язык программирования не подходит для тех задач,
которые требуют большого объема памяти.
- Зависим от системных библиотек.
- Интерпретатор не позволяет выполнять несколько потоков
одновременно.

В веб-разработке применяется для серверного программирования.


Питонисты работают с бэкендом веб-приложений, используя нативный Python
или популярные фреймворки, например, Django или Flask. «Пайтон» одинаково
удобно использовать как для создания прототипов или небольших
приложений, так и для больших и масштабируем проектов, например,
порталов, веб-сервисов, интернет-магазинов.

Django
Свободный фреймворк для веб-приложений на языке Python, использующий
шаблон проектирования MVC. Проект поддерживается организацией Django
Software Foundation.
Один из основных принципов фреймворка — DRY.

Реализован мощный движок шаблонов и собственный язык разметки. Шаблоны


представляют собой файлы с HTML-кодом, с помощью которого отображаются
данные. Содержимое файлов может быть статическим или динамическим.
Шаблоны не содержат бизнес-логики. Поэтому они только отображают
данные.
MVC в Django:
Django определяет модель (model) как «источник информации о данных, в
которых содержатся ключевые поля и поведение данных». Обычно одна
модель указывает на одну таблицу в базе данных. Django поддерживает базы
данных PostgreSQL, MySQL, SQLite и Oracle.

Модели содержат информацию о данных. Поскольку модель представляет


собой простой класс, она ничего не знает о других уровнях Django.
Взаимодействие между уровнями происходит через API.

Модель отвечает за бизнес-логику, методы, свойства и другие элементы,


связанные с манипуляцией данными.

Представление (view) решает три задачи: принимает HTTP-запросы,


реализует бизнес-логику, определённую методами и свойствами,
отправляет HTTP-ответ в ответ на запросы. То есть представление
получает данные от модели и предоставляет шаблонам (templates) доступ к
этим данным или предварительно обрабатывает данные и затем
предоставляет к ним доступ шаблонам.

Преимущества:

● Разделение бизнес-логики и визуальной части на уровне архитектуры.


● SEO-дружественность: Django генерирует семантические URL
● Развитая инфраструктура: большое количество библиотек и плагинов.
Расширяемость с помощью плагинов.
● Административная панель генерируется автоматически
● Реализация объектно-реляционного отображения (ORM), которое
обеспечивает взаимодействие приложения с базами данных (БД).
- ORM автоматически передаёт данные из БД, например, PostgreSQL
или MySQL, в объекты, которые используются в коде приложения.
- ORM ускоряет разработку прототипов и готовых веб-приложений на
Django.
- Также ORM позволяет быстро переключаться между базами данных
с минимальными изменениями кода.
● Встроенная автоматическая документация по тегам шаблонов и
моделям данных, доступная через административное приложение.

Недостатки:

- Не подходит для небольших проектов


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

- Монолитность
Некоторые модули Django, например, ORM или формы, сложно заменить.
Разработчикам приходится тратить много времени, чтобы изменить
внутреннюю структуру фреймворка и использовать альтернативные
инструменты.

- Непредсказуемость поведения некоторых компонентов


Поведением некоторых компонентов Django не всегда просто управлять.
Например, к таким компонентам относится административная консоль. Если вы
захотите добавить что-то, что не входит в экосистему Django, это может
потребовать серьёзных усилий и много времени.

Django Rest Framework (DRF) — это библиотека, которая работает со


стандартными моделями Django для создания гибкого и мощного API для
проекта.

Flask
Относится к категории так называемых микрофреймворков —
минималистичных каркасов веб-приложений, сознательно предоставляющих
лишь самые базовые возможности. Для работы со статическим контентом.

Фреймворк для создания веб-приложений на языке программирования Python,


использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2.
Flask зависит от некоторых внешних библиотек - таких, как Werkzeug и Jinja2.

Werkzeug - это инструментарий для WSGI - стандартного интерфейса Python между


веб-приложениями и различными серверами, предназначен как для разработки, так и
развёртывания.

Отличается минимальным количеством базового функционала, но является


расширяемым. Благодаря большому количеству расширений, не возникает
проблем с реализацией задумки.
Очень хорошо подходит для небольших проектов, работающих в основном со
статическим контентом. Также подходит для создания микросервисов. Из-
за отсутствия встроенного ORM позволяет выбрать подходящий под ваши
нужды. Де-факто используют SqlAlchemy.
Преимущества Flask:

● Сервер разработки и отладчик


● Интегрированная поддержка модульного тестирования
● Отправка запросов RESTful - стандарт запросов.
● Поддержка безопасных файлов cookie (сеансы на стороне клиента)
● 100% соответствие WSGI 1.0 - стандарт интерфейса между веб-
приложениями и серверами.
● На основе Unicode
● Обширная документация
● Совместимость с Google App Engine

FastAPI - это фреймворк, для создания лаконичных и довольно быстрых HTTP


API-серверов со встроенными валидацией, сериализацией и асинхронностью,
что называется, из коробки. Стоит он на плечах двух других фреймворков:
работой с web в FastAPI занимается Starlette, а за валидацию отвечает
Pydantic.

Преимущества Fast API:


1. Асинхронность
Асинхронное программирование — это потоковая обработка программного
обеспечения пользовательского пространства, где приложение, а не
процессор, управляет потоками и переключением контекста. В асинхронном
программировании контекст переключается только в заданных точках
переключения, а не с периодичностью, определенной CPU.
Когда вы запускаете что-то асинхронно, это означает, что оно не блокируется,
вы выполняете его, не дожидаясь завершения, и продолжаете выполнять
другие вещи.
Асинхронные запросы: это такой запрос, который выполняется в фоновом
режиме и не мешает пользователю взаимодействовать со страницей.

2. Типизированность
3. Встроенная документация (Swagger)
4. Применение websockets
Dart
2011 г. Текущая версия - 2.13.1, Google, Марк Миллер
IDE: Intelij IDEA/Android Studio

Dart - строго типизированный объектно-ориентированный язык, который


предназначен для разработки веб-приложений (как на стороне клиента, так и
на стороне сервера) и мобильных приложений.

Dart отлично подходит как для AOT-, так и для JIT-компиляции.

JIT — только для функционала Hot Reload. К JIT-компиляции обращаются


при разработке и используют самый быстрый компилятор. Затем, когда
приложение готово к выпуску, используют AOT-компиляцию. В результате
получаем чрезвычайно быстрый цикл разработки, быстрое выполнение и
запуск.

Dart можно компилировать в JavaScript (при помощи dart2js), если нужно


выполнить программу в браузере. В итоге получается переиспользовать код
для мобильного приложения в web и наоборот. Ещё Dart можно применять
для разработки серверных приложений: для этого потребуется
компилировать его в нативный код или в JavaScript и использовать с
node.js.
IDE: DartPad, IntelliJ IDEA, Android Studio, Visual Studio Code (VSCode)
Виртуальная машина — DartVM — которая использует язык Dart в качестве
промежуточного, по сути выступая в роли интерпретатора.

● подгрузка кода в приложение на лету в режиме отладки;


● синтаксис, понятный для людей с любых платформ;
● быстрый сборщик мусора;
● принадлежность к Google;
● открытость кода и общение с командой напрямую.

В Dart используется продвинутая схема сбора мусора и выделение памяти


на основе поколений объектов. Она особенно быстро выделяет память для
большого количества объектов с коротким жизненным циклом. Это
идеально для реактивных пользовательских интерфейсов вроде Flutter, где
неизменяемое дерево виджетов пересобирается для каждого кадра.
Flutter
Версия: 2.5, Google.

Flutter — open-source кроссплатформенный фреймворк для разработки


приложений. Платформа Flutter очень гибкая и настраиваемая, с несколькими
готовыми элементами пользовательского интерфейса, которые можно легко
внедрить в любое приложение. Разработчики также могут свободно создавать
свои элементы дизайна.

Высокая производительность приложения и скорость разработки


достигается за счет использования языка Dart, который компилируется в
нативный для платформы код. При этом вместо нативных компонентов
используется собственная библиотека виджетов, которые выглядят как
нативные.

Для построения UI во Flutter используется декларативный подход,


вдохновленный веб-фреймворком ReactJS, на основе виджетов (компонентов).
Интерфейс разбивается на отдельные модули и создается с помощью
кода, из-за чего грань между логикой и дизайном гораздо тоньше.

Для еще большего прироста в скорости работы интерфейса виджеты


перерисовываются по необходимости — только когда в них что-то изменилось
(подобно тому как это делает Virtual DOM в мире веб-фронтенда)
Flutter для Web хорошо подходит для разработки прогрессивных веб-
приложений (PWA), одностраничных приложений (SPA) и создания веб-
версий существующих мобильных приложений.

Конечный установочный пакет больше, так как в него добавляется


виртуальная машина Dart. В составе виртуальной машины есть
собственный графический движок, нет необходимости делать интерфейс
отдельно для Android и iOS.

Плюсы:
● Кроссплатформенный: возможность собирать версии приложения
под разные платформы из одного исходного кода;
● Быстрая разработка и вывод продукта на рынок.
● достаточно быстрый, за счет компиляции
● виджетный (компонентный) подход
● открытый исходный код: всегда можно разобраться, как это работает,
или почему не работает так, как хочется
● продукт, который развивает и продвигает Google и большое Open-source
community
● Hot-reload
Минусы:
● большой размер файла
● мало разработчиков/дорогие лиды/сеньоры
● относительно мало технической информации – stackoverflow и т.п.
● пока мало готовых (сложных) компонентов – стандартные/системные тут
не используются
● достаточно динамичный релизный цикл

Архитектуру Flutter можно разделить на 3 слоя:


● Embedder — часть, которая отвечает за интеграцию с ОС
● Engine — в ней реализованы основные API, которые отвечают за рендеринг,
сетевые и файловые I/O, Dart runtime.
● Flutter Framework использует Dart в качестве языка программирования, а
Framework имеет набор служебных функций, с помощью которых можно
добавлять элементы пользовательского интерфейса и виджеты в свое
приложение Flutter.
Для реализации асинхронности используется механизм Event Loop.
Для локального развертывания проекта вам потребуется:
● Flutter SDK
● Xcode/Android Studio (с Android SDK, JDK)

React Native/Flutter

Фреймворк React Native Flutter

Пользовательский Используются собственные Используются нативные


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

Родной внешний вид Меньше из-за наличия сторонних Улучшенный внешний вид из-
библиотек и API за отсутствия сторонних
библиотек

Производительность Приложения работают немного Лучшая производительность


медленнее из-за громоздкости за счет улучшенных
javascript, что приводит к задержке вычислительных
запуска. возможностей

Принятие в отрасли Более широкое распространение Набирает популярность.


благодаря долгому
существованию.

Конфигурация и Отсутствие возможностей Легко и понятно, с которым


настройка настройки и оптимизации. легко работать новичкам.

Структура кода Код упрощен и напрямую связан с Интерфейс разбит на отдельные


Javascript модули, тонкая грань между
логикой и дизайном.
Swift
IDE: Visual Studio для Mac/Xcode
Swift — это язык программирования, разработанный в компании Apple. На нем
можно писать приложения для десктопа, мобильных приложений, серверов. У
него есть среда Playground, в которой можно увидеть результат
программирования
Цель, к которой стремятся разработчики языка — сделать его быстрее, чем С+
+, который часто признаётся самым быстрым языком программирования. Также
сочетает в себе все лучшее от C и Objective-C
- Лаконичный синтаксис
- Видимый результат
- Безопасный код
Идеология языка такая: меньше уязвимостей и больше безопасности для
самого кода и системы.
Ещё он защищает от ошибок, связанных с неправильным управлением
железом и от несанкционированного доступа к участкам памяти, которые не
задействованы в программе.

Kotlin
IDE: IntelliJ IDEA/Eclipse
Kotlin — это относительно молодой язык от российской компании JetBrains.
2011 г. Kotlin получил официальную поддержку для разработки Android-
приложений.
Как и Java, C и C++, Kotlin — это статически типизированный язык. Он
поддерживает как объектно-ориентированное, так и процедурное
программирование.
Вот основные возможности и преимущества Kotlin:

● компилируется в байткод JVM или в JavaScript, Native (нативные


бинарные файлы, которые запускаются без виртуальной машины)
● программы могут использовать все существующие Java-
фреймворки и библиотеки;
● язык очень прост для изучения;
● исходный код открыт;
● в IntelliJ доступна автоматическая конвертация Java-кода в Kotlin
и наоборот;
● язык null-безопасен

Kotlin позволяет расширять функциональность существующих классов, не


прибегая к наследованию. Это делается при помощи функций-расширений.
Typescript
2012 г., Microsoft, Андерс Хейлсберг
Стабильная версия: 4.2.4
IDE: Visual Studio Code/WebStorm

TypeScript - язык программирования похожий на JavaScript.


TypeScript использует такой же синтаксис и семантику, как и JavaScript, но
имеет статическую типизацию.

TypeScript использует типы, классы, наследование.


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

Типы являются необязательными, и вывод типа позволяет нескольким


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

TypeScript с помощью компилятора tsc.exe преобразуется в JavaScript

TypeScript компилируется в чистый простой код JavaScript, который


выполняется в любом браузере, в Node.js или в любом механизме JavaScript,
который поддерживает ECMAScrip t(это стандарт для языка сценариев.) 3 (или
новее).

TypeScript предлагает поддержку новейших и развивающихся функций


JavaScript, в том числе из ECMAScript 2015 и будущих предложений, таких как
асинхронные функции и декораторы, для создания надежных компонентов.

Эти функции доступны во время разработки для высоконадежных приложений,


но они скомпилированы в простой JavaScript, предназначенный для сред
ECMAScript 3 (или новее).
Go
Google, 2009 г., Кен Томпсон
Стабильная версия: 1.16
Статически типизированный язык программирования. Open-source.
Язык Go предназначен для создания различного рода приложений, но прежде
всего это веб-сервисы и клиент-серверные приложения. Хотя также язык
обладает возможностями по работе с графикой, низкоуровневыми
возможностями и т.д.
Go является кроссплатформенным. Код обладает переносимостью:
программы, написанные для одной из этих операционных систем, могут быть
легко с перекомпиляцией перенесены на другую ОС.

Основные особенности языка Go:


● компилируемый - компилятор транслирует программу на Go в
машинный код, понятный для определенной платформы
● статически типизированный
● присутствует сборщик мусора, который автоматически очищает память
● поддержка многопоточности и параллельного программирования

Scala
2003 г. Мартин Одерски
Стабильная версия: Scala 3, 2021 г.

DOT/Dependent Object Types — это теоретические основы языка Scala 3,


разработанные его основателем Мартином Одерски.

Является «симбиозом» Java и C#. Комбинирует ООП с функциональным


подходом.
Язык Scala объединяет три вещи: статическую типизацию, объектно-
ориентированный и функциональный подход. Scala работает на
виртуальной машине Java. Возможность компиляции в JavaScript позволяет
разрабатывать веб-приложения на Scala.
- Умный компилятор
- JVM-экосистема
- Слабые гарантии обратной совместимости по сравнению с Java.
- Расширяемость
Ruby
1995 г., Юкихиро Мацумото (Matz)

Ruby — язык программирования общего назначения.

Характеристики Ruby:
● высокоуровневый — удобный для разработчиков, с сильной
абстракцией.
● динамичный — типы данных определяются на этапе выполнения
программы, это увеличивает скорость разработки;
● интерпретируемый — код на Ruby обрабатывается интерпретатором в
момент выполнения без предварительной компиляции, это обеспечивает
независимость от платформ и уменьшает размер исполняемых
программ.

Ruby стал популярным языком для создания веб-приложений благодаря


Ruby on Rails, 2005 г.
В «рельсах» реализованы инновационные возможности, включая бесшовную
интеграцию с базой данных, миграции, создание представлений для ускорения
разработки. Эти возможности позднее были внедрены в других фреймворках,
включая Django, Laravel.
В Ruby on Rails применяется архитектура MVC, а также известные
инженерные паттерны, включая DRY.
Data Base
База данных — это упорядоченный набор структурированной информации или
данных, которые обычно хранятся в электронном виде в компьютерной
системе. База данных обычно управляется системой управления базами
данных (СУБД). Данные вместе с СУБД, а также приложения, которые с ними
связаны, называются системой баз данных, или, для краткости, просто базой
данных. Этими данными можно легко управлять, изменять, обновлять,
контролировать и упорядочивать используя язык структурированных
запросов (SQL).

Основные различия между БД:


● Способ хранения и обработки данных
● Полномочия доступа к данным
По способу доступа к БД:

● Файл серверные.
● Клиент-серверные;
● Встраиваемые.

В файл серверных базы данных располагаются на сервере, а СУБД на клиенте. В клиент –


серверных базы данных и СУБД располагаются на сервере. Встраиваемые – мини СУБД,
обычно встроенные внутри приложения.

Типы баз данных


● Иерархические;
Иерархические БД – это деревья данных, где каждый вышерасположенный
объект имеет в подчинении несколько нижерасположенных. Доступ к данным
осуществляется посредством движения по объектам сверху-вниз.
● Сетевые;
Сетевые отличаются от иерархических тем, что каждый потомок в них может
иметь несколько предков (множественное наследование). Более зависимы друг
от друга.
● Реляционные;
● Объектно-ориентированные;
● Объектно-реляционные.

Определение ACID:
Предотвращает повреждение данных и сохраняет их целостность на
транзакционном уровне.

● Atomicity — транзакции атомарны, то есть либо все изменения


транзакции фиксируются (commit), либо все откатываются (rollback);
● Consistency — транзакции не нарушают согласованность данных, то
есть они переводят базу данных из одного корректного состояния в
другое. Тут можно упомянуть допустимые значения полей, внешние
ключи и более сложные ограничения целостности;
● Isolation — работающие одновременно транзакции не влияют друг на
друга, то есть многопоточная обработка транзакций производится
таким образом, чтобы результат их параллельного исполнения
соответствовал результату их последовательного исполнения;
● Durability — если транзакция была успешно завершена, никакое
внешнее событие не должно привести к потере совершенных ей
изменений, т.е. она должна быть сохранена.

MVCC (MultiVersion Concurrency Control), то есть контроль конкурентного


доступа к данным через создание множества “версий” изменяемых
данных. Все операции с данными можно условно разделить:
● Select — считываются валидные записи таблицы. Запись считается
валидной, если она создана транзакцией, которая была зафиксирована
(commit) до начала текущей транзакции;
● Insert — новая запись просто добавляется в свободное место таблицы;
● Delete — запись в таблице помечается как не валидная, при этом сама
запись не удаляется;
● Update — комбинация delete и insert. Сначала старая версия записи
помечается как не валидная, затем добавляется новая запись с
обновленными данными.

Масштабируемость - автоматическое распределение данных между


несколькими серверами.
Такие системы мы называем распределенные базы данных. Распределенная
база данных состоит из двух или более частей, расположенных на разных
серверах. Такая база данных может храниться на нескольких компьютерах.

Репликация - как процесс поддержания двух (или более) наборов данных в


согласованном состоянии.
Среди задач, решаемых репликацией, можно назвать как минимум
● поддержку резервной базы данных на случай потери основной;
● снижение нагрузки на базу за счёт переноса части запросов на реплики;
● перенос данных в архивные или аналитические системы.
Не/реляционные БД
● Реляционные базы данных
Данные в реляционной базе организованы в виде таблиц, состоящих из
столбцов и строк. Реляционная СУБД обеспечивает быстрый и
эффективный доступ к структурированной информации.

SQL подойдет, если нужна обработка большого количества сложных


запросов, или рутинного анализа данных. Выбирайте реляционную БД, если
нужна надежная обработка транзакций и ссылочная целостность.

● Базы данных NoSQL


База данных NoSQL, или нереляционная база данных, дает возможность
хранить и обрабатывать неструктурированные или
слабоструктурированные данные (в отличие от реляционной базы данных,
задающей структуру содержащихся в ней данных).

Нереляционные БД размещают информацию в коллекциях документов JSON.


Документ — это большой JSON объект без заранее определенного
формата и схемы.
JSON распространен повсеместно и может считаться де-факто форматом
для передачи объемных данных между веб-приложениями и конечными
точками.
Их главное преимущество — высокий уровень безопасности и возможность
обойти аппаратные ограничения (с помощью Sharding).

Если объем данных большой, лучше использовать NoSQL. Отсутствие


явных структурированных механизмов ускорит процесс обработки Big
Data.

Базы данных NoSQL можно разделить на четыре категории:

● Хранилище документов
● Базы данных с ключами-значениями
● Ширококолоночные хранилища
● Графовые базы данных

Базы данных NoSQL часто используются в agile проектах, поскольку они


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

SQL NoSQL

● основаны на таблицах, ● Динамичны (не/структурированы)


структурированый язык=запросы ● NoSQL масштабируются по
Элементы зависят друг от друга. горизонтали (больший трафик
● SQL можно масштабировать по обрабатывается путем разделения
вертикали (увеличивается или добавления большего количества
нагрузка на сервер) серверов)

Динамические схемы для


неструктурированных данных позволяют:

● Можно создавать документы, не


определяя их структуру заранее;
● Каждый документ может обладать
собственной уникальной структурой;
● Синтаксис может различаться в разных
базах данных;
● В процессе работы можно добавлять
новые поля.

Для базы данных обычно требуется комплексное программное обеспечение,


которое называется системой управления базами данных (СУБД). СУБД
служит интерфейсом между базой данных и пользователями или
программами, предоставляя пользователям возможность получать и
обновлять информацию, а также управлять ее упорядочением и оптимизацией.

Для работы с реляционными БД лучше всего подойдут:


● MySQL;
● Oracle;
● Microsoft SQL Server

Microsoft SQL Server


Microsoft, Эдгар Кодд, Кристофер Дейт, 1987 г. А текущей версией является
версия 2019.

SQL Server долгое время был исключительно системой управления базами


данных для Windows, однако начиная с версии 16 эта система доступна и на
Linux.

SQL Server характеризуется такими особенностями как:


● Производительность. SQL Server работает очень быстро.
● Надежность и безопасность. SQL Server предоставляет шифрование
данных.
● Простота. С данной СУБД относительно легко работать и вести
администрирование.

Microsoft SQL Server — система управления реляционными базами данных


(РСУБД), разработанная корпорацией Microsoft. Это отличный вариант для
малого и среднего бизнеса. Диалект T-SQL обрабатывает процедуры,
встроенные функции и переменные.

SQL Server — это основа платформы обработки данных Майкрософт, которая


предоставляет надежную и устойчивую производительность (в том числе
благодаря технологиям обработки данных в памяти) и помогает быстрее
извлечь ценную информацию из любых данных, расположенных как в
локальной среде, так и в облаке. Утилита включает скриптовый редактор и
графическую программу, которая работает с объектами и настройками
сервера.
Главным инструментом SQL Server Management Studio является Object
Explorer, который позволяет пользователю просматривать, извлекать объекты
сервера, а также полностью ими управлять.

Azure Data Studio


Azure Data Studio (бывший SQL Operations Studio) – это упрощенное
кроссплатформенное графическое средство управления и редактор кода.
Позволяет создавать запросы к реляционным и нереляционным базам
данных с поддержкой разных операционных систем и источников данных.
Azure Data Studio позволяет подключаться к SQL Server локально и в
облаке, в Windows, macOS и Linux

MySQL
1994 г., MySQL AB, Oracle (2010 г.)
MySQL — это популярная СУБД с моделью «клиент-сервер».
Кроссплатформенный. Бесплатный продукт с открытым исходным кодом.

MySQL лучше подходит для масштабируемых веб-сайтов, веб-


приложений и онлайн-транзакций. Эта СУБД входит в стандартный стек
LAMP — набор веб-приложений с открытым исходным кодом: Linux, Apache
HTTP Server, MySQL и PHP. Кроме того, на СУБД MySQL работают популярные
системы управления контентом сайтов, такие как Drupal, Joomla и WordPress.

● Скорость и надежность: скорость особенно очевидна, при выполнении


высокопараллельных операциях без записи в базе данных (только
чтение). Это отличный выбор для определенных приложений бизнес-
аналитики.
● Функции MVCC (multiversion concurrency control)
● Поддерживается компанией Oracle и сообществом разработчиков.
● Высокий уровень защиты данных благодаря системе выдачи прав и
продвинутой системе управления пользователями. Верификация на базе
хостинга и шифрование.
● поддерживает ACID-транзакции произвольного размера

Управление параллельным доступом посредством многоверсионности


(MVCC) и соответствие ACID с движком InnoDB: в текущих версиях MySQL
движок по умолчанию — это InnoDB. Он обеспечивает функциональность
MVCC и соответствие требованиям ACID.

PostgreSQL
1986 г. Майкл Стоунбрейкер, Global Group
В 1994 г. Эндрю Ю (Andrew Yu) и Джолли Чен (Jolly Chen) модифицировали
POSTGRES, добавив в него интерпретатор языка SQL.В 1996 г. проект был
переименован в PostgreSQL.
Стабильная версия: 13.4

Система управления базами данных (СУБД) с открытым исходным кодом.


PostgreSQL — расширяемая система, ее работа базируется на каталогах
(подход catalog-driven). Другими словами, она хранит информацию не только
о таблицах и столбцах, но и более детальную информацию.

Другие отличительные черты базы данных PostgreSQL — это объектно-


реляционная система, которая совместима с принципами ACID.
Методы доступа, которые являются общими для MySQL и PostgreSQL
включают в себя ADO.NET(С#), JDBC и ODBC. ADO.NET представляет из себя
набор интерфейсов приложений (API), который программисты используют
для доступа к данным на основе XML. JDBC является API для языка Java,
а ODBC — это стандартный API для доступа к базам данных PostgreSQL.

PostgreSQL — для больших и сложных аналитических процессов. Он также


добавит, что PostgreSQL поставляется с множеством функций, таких как
расширяемость и нативный функционал NoSQL, что помогает в
управлении сложной базой данных.

Это объектно-реляционная система, а ее программирование представляет


собой своеобразный мостик между объектно-ориентированным и
реляционным/процедурным программированием (как C++). Это позволяет
определять объекты и наследование таблиц, что порождает более сложные
структуры данных. ОРСУБД великолепно подходит для данных, которые не
вписываются в строго реляционную модель.

Отлично подходит для сложных запросов, когда нужно выполнить сложные


операции чтения-записи с одновременной валидацией данных. Однако
ОРСУБД не так хорошо справляется с операциями только чтения (вот где ее
превосходит MySQL). PostgreSQL быстрее при обработке массивных
наборов данных, сложных запросов и операций чтения-записи.

Сильными сторонами PostgreSQL считаются:

● Высокопроизводительные и надёжные механизмы транзакций и


репликации
● Встроенная поддержка слабоструктурированных данных в формате
JSON с возможностью их индексации;
● Расширяемость (возможность создавать новые типы данных, типы
индексов, языки программирования, модули расширения, подключать
любые внешние источники данных)
● Встроена достаточно простая масштабируемость
● Хорошая документация
● Функции MVCC: база данных PostgreSQL была первой СУБД, которая
реализовала функции MVCC.
● Поддержка NoSQL и большое разнообразие типов данных
● Спроектирована для управления очень большими базами данных:
функции PostgreSQL не ограничивают размер ваших баз данных.
● Управление параллельным доступом посредством многоверсионности
(MVCC)
● Point in time recovery - откат действий БД.

MVCC предоставляет одновременный доступ к базе данных множеству


агентов на чтение и запись. Это устраняет необходимость каждый раз
блокировать чтение-запись, когда кто-то взаимодействует с данными. Таким
образом, значительно повышается эффективность СУБД и ее
производительность..
● Соответствие ACID: База данных PostgreSQL предотвращает
повреждение данных и сохраняет их целостность на
транзакционном уровне.

Postgres Pro
Российская коммерческая СУБД, разработанная компанией Postgres Professional с
использованием свободно-распространяемой СУБД PostgreSQL, значительно
переработанная для соответствия требованиям корпоративных заказчиков.

СУБД Postgres Pro Standard придумана для того, чтобы доставлять наши разработки
пользователям быстрее, чем мы можем это сделать через PostgreSQL. Те фичи,
которые еще не вошли в PostgreSQL, но находятся на твердом пути туда, мы
включаем в Postgres Pro Standard. Также в Postgres Pro Standard входят некоторые
расширения, которые востребованы нашими клиентами, но отсутствуют в обычной
поставке PostgreSQL.

Postgres Prо Enterprise

Oracle
2021: Выпуск СУБД Oracle Database 21c
Oracle Database — это объектно-реляционная СУБД (система управления
базами данных), созданная компанией Oracle. ACID
Oracle очень мощеная база данных, позволяющая писать любые сложные
системы, как в банковской, ERP, страховой, финансовой сферах.

Экземпляр — это мост к базе данных, а сама БД – это остров. Когда экземпляр
запущен, мост работает, а данные способны попадать в базу данных Oracle и
покидать её.

Кроссплатформенный. Oracle Database часто используют крупные


корпорации. Oracle применяет свой собственный диалект SQL (PL/SQL). Это
дает возможность работать со встроенными функциями, процедурами и
переменными.

Особая организация СУБД — группировка объектов по схемам, которые


являются подмножеством объектов.

Еще одно важное преимущество Oracle — возможность восстановления


предыдущей версии БД. Oracle имеет различные типы резервных копий,
такие как облачное резервное копирование, горячее резервирование, экспорт,
импорт данных. Он предлагает самую популярную утилиту резервного
копирования под названием Recovery Manager (RMAN).

MongoDB

2009 г. MongoDB Inc

MongoDB — система управления базами данных, которая работает с


документоориентированной моделью данных.

MongoDB сохраняет данные в коллекциях, состоящих из документов. Документ


— это большой JSON объект без заранее определенного формата и схемы.
Разработчики приложений любят MongoDB за то, что они могут менять
модель данных на ходу. Также MongoDB фокусируется на очень быстрой
разработке, не нужно заботиться о строгом формате документа.

JSON распространен повсеместно и может считаться де-факто форматом


для передачи объемных данных между веб-приложениями и конечными
точками.
Особенности:

● Кроссплатформенность.
СУБД разработана на языке программирования С++, поэтому с легкостью
интегрируется под любую операционную систему (Windows, Linux, MacOS и
др.).
● Формат данных. MongoDB использует собственный формат хранения
информации — Binary JavaScript Object Notation (BSON), который
построен на основе языка JavaScript.
BSON - это двоичная кодировка JSON-подобных документов, которые
MongoDB использует при хранении документов в коллекциях. Он добавляет
поддержку типов данных, таких как Date и двоичные файлы, которые не
поддерживаются в JSON.
● Документ. Если реляционные БД используют строки, то MongoDB —
документы, которые хранят значения и ключи.
● Вместо таблиц MongoDB использует коллекции. Они содержат разные
типы наборов данных
● Репликация.
Система хранения данных в MongoDB представляет набор реплик. В этом
наборе есть основной узел, а также может быть набор вторичных узлов. Все
вторичные узлы сохраняют целостность и автоматически обновляются вместе
с обновлением главного узла. И если основной узел по каким-то причинам
выходит из строя, то один из вторичных узлов становится главным.
● Индексация. Технология применяется к любому полю в документе на
усмотрение пользователя. Проиндексированная информация
обрабатывается быстрее.
● СУБД осуществляет поиск по специальным запросам. Например,
пользователь может создать диапазонный запрос и мгновенно получить
ответ.
● Балансировщик нагрузки используется в СУБД не только для
распределения нагрузки между разными базами данных, но и для
горизонтального масштабирования. При этом базы данных,
расположенные на разных узлах, синхронизированы между собой и
обеспечивают целостность информации для клиента.
● MongoDB может поставляться для конечного клиента как облачное
решение.
● Динамичность
● Скорость: Эта БД показывает отличные результаты в работе с короткими
запросами;

Где используется:
Эту СУБД используют для хранения событий в системе (логирование), записи
информации с датчиков мониторинга на предприятии, а также в сфере
электронной коммерции и мобильных приложений. Часто MongoDB применяют
как хранилище в сфере машинного обучения и искусственного интеллекта.
MongoDB относится к классу NoSQL СУБД и работает с документами, а не с
записями. Это кроссплатформенный продукт, который легко внедряется в
любую операционную систему. Ряд уникальных особенностей позволяет
использовать СУБД под определённые задачи, в которых она обеспечивает
максимальную производительность и надежность.

Недостатки:

● По-умолчанию максимальный размер объекта — 4 мегабайта.

● На 32-битных машинах, максимальный размер одной базы данных — 2


гигабайта.

Redis

2009 г., Сальваторе Санфиллиппо, Redis 6

Redis (Remote Dictionary Server) — это не реляционная структура данных в


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

Redis позволяет нам хранить данные в высокоуровневых структурах данных,


такие как строки, хэши, списки, наборы. Это дает нам больше гибкости в
отношении типа и объема информации, которую мы можем хранить в
хранилище данных Redis.
Он также довольно дружелюбен для разработчиков, поскольку поддерживает
большинство языков высокого уровня, таких как Python, JavaScript, Java, C / C +
+ и PHP.

Особенности:

● Высокая производительность благодаря структуре данных in-


memory (+ написан на С)
● Кэширования данных, когда объем операций чтения и записи
превышает возможности традиционных баз данных.

Есть очень быстрые хранилища в памяти типа ключ-значение, например


memcached. Они очень быстрые за счет предельной простоты и отказа от
надежности.
Redis очень широко применяется в современной разработке ПО. Библиотеки
поддержки есть для любого языка программирования.
Его используют в:
● Кеширование данных
● Чаты и системы обмена сообщений
● Диспетчеризация любых данных
● Различные очереди задач
● Мониторинг различных данных
Часто используемые данные можно кэшировать и обслуживать с помощью
хранилищ ключевых значений в памяти и минимизировать чтение и запись в
более медленные дисковые системы, ориентированные на постоянное
хранение.

Redis - это база данных в памяти(IMDB), поскольку она опирается на основную


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

Кэш приложений часто используется для хранения копий таблиц поиска и


ответов на дорогостоящие запросы от СУБД, как для повышения
производительности приложения, так и для снижения нагрузки на
источник данных. Кэш выступает в качестве промежуточного носителя
для хранения повторяемых результатов между запросами.

Redis превратился из очень быстрого простого хранилища ключевых значений


в постоянное хранилище данных и используется в качестве посредника обмена
сообщениями и системы очередей.

● Он обеспечивает отсутствие статичности для процессов


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

На момент написания этой статьи Redis 6 является последней версией, с


новой, более сложной реализацией ACL на основе пользователя, встроенным
SSL-шифрованием трафика и многопоточным вводом-выводом, хотя процесс
Redis по-прежнему однопоточный.
Архитектура master- slave.
Apache Cassandra
Apache, 2008 г.
Это нереляционная отказоустойчивая распределенная СУБД, рассчитанная на
создание высокомасштабируемых и надёжных хранилищ огромных массивов
данных, представленных в виде хэша.
Эта СУБД относится к гибридным NoSQL-решениям, поскольку она сочетает
модель хранения данных на базе семейства столбцов (ColumnFamily) с
концепцией key-value (ключ-значение)
Рассчитана на работу с большими массивами данных.
Cassandra поддерживает свой собственный язык запросов — CQL. Он схож с
SQL, но поддерживает только простейшие запросы SELECT. Также в ней нет
команды INSERT — вместо нее и для добавления, и для обновления
используется UPDATE.
Плюсы:
1. Высокая скорость работы.
2. Отказоустойчивость и масштабирование.
Минусы:
1. Плохо подходит для проектов, где часто меняются или удаляются
данные.
2. Нет транзакций.

SQL
SQL – это стандартизированный язык, использующийся для взаимодействия с
базой данных. С помощью него, собственно, и получают доступ к информации,
хранящейся в таблицах

Язык делится на три части:


1. Синтаксис, помогающий решать семантические вопросы языка. То есть
идентифицировать отдельные компоненты базы данных.
2. Синтаксис для управления данными в базе, который помогает обновлять
и искать информацию.
3. Синтаксис, позволяющий выдавать пользователям права на отдельные
единицы данных в базе.

Язык SQL применяется:

● в качестве языка определения данных: он дает возможность независимо


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

Big data
Этим термином определяют массивы информации, которые невозможно
обработать или проанализировать при помощи традиционных методов с
использованием человеческого труда и настольных компьютеров.

Big data - различные подходы и методы как структурированных, так и не


структурированных данных для того, чтобы их использовать для конкретных
задач и целей.
Функция: хранение и обработка данных, позволяющие не перегружать
память устройства
Альтернатива традиционным СУБД
Используется Python, SQL, NoSQL
Frameworks: hadoop, Apache Spark

Особенность Big Data еще и в том, что мяфяяфассив данных со временем


продолжает экспоненциально расти, поэтому для оперативного анализа
собранных материалов необходимы вычислительные мощности
суперкомпьютеров. Соответственно, для обработки Big Data необходимы
экономичные, инновационные методы обработки информации и
предоставления выводов.

Аналитику Больших данных используют, чтобы понять привлекательность


товаров и услуг, спрогнозировать спрос на рынке и реакцию на рекламную
кампанию. Работа с Big Data помогает фирмам привлечь больше
потенциальных клиентов и увеличить доходы, использовать ресурсы
рационально и строить грамотную бизнес-стратегию.

Big data аналитика


- Обработка сразу всего массива доступных данных
- Данные обрабатываются в их исходном виде
- Поиск корреляций по всем данным до получения искомой информации
- Анализ и обработка больших данных в реальном времени, по мере
поступления
Big Data характеризует большой объем структурированных и
неструктурированных данных, которые ежеминутно образуется в цифровой
среде.

Но важен не объем информации, а возможности, которые даёт её анализ. Одно


из основных преимуществ Big Data — предиктивный анализ. Инструменты
аналитики Больших данных прогнозируют результаты стратегических решений,
что оптимизирует операционную эффективность и снижает риски компании.

Big Data объединяют релевантную и точную информацию из нескольких


источников, чтобы наиболее точно описать ситуацию на рынке. Анализируя
информацию из социальных сетей и поисковых запросов, компании
оптимизируют стратегии цифрового маркетинга и опыт потребителей.

Big Data – область, в которой рассматриваются различные способы анализа и


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

Специалисты по Big Data работают с неструктурированными данными,


результаты анализа которых используются для поддержки принятия решений в
бизнесе.
Одно из определений больших данных звучит следующим образом: «данные
можно назвать большими, когда их размер становится частью
проблемы». Такие объемы информации не могут быть сохранены и
обработаны с использованием традиционного вычислительного подхода в
течение заданного периода времени.

Классификация больших данных:


● Структурированные данные, имеющие связанную с ними структуру
таблиц и отношений.
● Полуструктурированные (слабоструктурированные) данные
Не соответствуют строгой структуре таблиц и отношений, но имеют другие
маркеры для отделения семантических элементов и обеспечения
иерархической структуры записей и полей.
● Неструктурированные данные вообще не имеют никакой связанной с
ними структуры, либо не организованы в установленном порядке.

Характеристики больших данных:


характеризуются четырьмя правилами (англ. 4 V’s of Big Data):

1. Volume/Объем: компании могут собирать огромное количество


информации, размер которой становится критическим фактором в
аналитике.
2. Velocity/Скорость, с которой генерируется информация.
3. Variety/Разнообразие: генерируемая информация неоднородна и
может быть представлена в различных форматах. Понимание типа
больших данных является ключевым фактором для раскрытия их
ценности.
4. Veracity/Достоверность: относится к качеству анализируемых
данных. С высокой степенью достоверности они содержат много
записей, которые ценны для анализа и которые вносят значимый вклад в
общие результаты. С другой стороны данные с низкой достоверностью
содержат высокий процент бессмысленной информации (шума).

Традиционный подход к хранению и обработке больших данных

При традиционном подходе данные, которые генерируются в организациях,


подаются в систему ETL (от англ. Extract, Transform and Load). Система ETL
извлекает информацию, преобразовывает и загружает в базу данных. Как
только этот процесс будет завершен, конечные пользователи смогут выполнять
различные операции, вроде создание отчетов и запуска аналитических
процедур.

ETL (Extract, Transform, Load) – это совокупность процессов управления


хранилищами данных, включая:
● извлечение данных из внешних источников (таблицы баз данных,
файлы);
● преобразование и очистка данных согласно бизнес-потребностям;
● загрузка обработанной информации в корпоративное хранилище
данных (КХД).

Прикладное назначение ETL состоит в том, чтобы организовать такую


структуру данных с помощью интеграции различных информационных систем.

Черный ящик (черный в смысле - не прозрачный) - это система (в т.ч. ПО),


внутреннее устройство которой в рассматриваемой ситуации не важно, т.е. мы
знаем что и из чего делает эта система, но не знаем/не хотим знать как она эта
делает (не знаем "механизм" работы).

Подходы для анализа данных:


1. Данные обрабатываются аналитиками с помощью известных им моделей
и личных предположений (2008-2015)
2. Data scientists создают алгоритм искусственного интеллекта, который
сам учится решать поставленные перед ним (настоящее время)
Недостатки Big Date

● Дорогостоящая система, которая требует больших инвестиций при


внедрении или модернизации, и которую малые и средние компании не
смогут себе позволить.
● По мере роста объема данных масштабирование системы становится
сложной задачей.
● Для обработки и извлечения ценной информации из данных требуется
много времени, поскольку инфраструктура разработана и построена на
основе устаревших вычислительных систем.

Где применяются большие данные

● Поставщикам медицинских услуг аналитика больших данных нужна для


отслеживания и оптимизации потока пациентов, отслеживания
использования оборудования и лекарств, организации информации о
пациентах и т. д.
● Туристические компании применяют методы анализа больших данных
для оптимизации опыта покупок по различным каналам. Они также
изучают потребительские предпочтения и желания, находят корреляцию
между текущими продажами и последующим просмотром, что позволяет
оптимизировать конверсии.
● Игровая индустрия использует BigData, чтобы получить информацию о
таких вещах, как симпатии, антипатии, отношения пользователей и т. Д.
● Компании, правительственные учреждения, финансовые и
академические учреждения.

Data science:
Программирует прогнозные модели, учит машину искать закономерности,
анализировать данные и делать предположения на основе этого. Другая
сторона работы заключается в программировании приложений, которые будут
собирать эти данные и передавать на сервер.

Языки, используемые в анализе Big Data – Python, Scala, R, SAS.


R – язык, который часто используется в науке для статистического анализа и
визуализации данных исследований.
В Python есть библиотеки для машинного обучения Scikit-learn и анализа
данных Pandas.
SAS менее производителен, чем R, плюс не востребован в РФ, но хорош для
аналитических и прогностических задач.
ТЕХНОЛОГИИ

Нативные языки

Инструменты и языки программирования мобильной ОС. В iOS


используются Objective-C, Swift, C и С++, и среда программирования
XCode. В Android: Android Studio и язык Java.
XCode и Android Studio содержат пакет утилит и инструментов, необходимых
для написания кода, отладки и тестирования приложений. Они заточены под
конкретную платформу, существенно упрощают процесс разработки, делают
его более гибким и быстрым.

Достоинства нативной разработки:

● максимальный срок жизни приложения;


● приложение более гибкое и масштабируемое, благодаря использованию
«родных» инструментов; меньше ограничений в архитектуре и функциях.
● высокое качество (чистый код) и высокое быстродействие
За счет лучшей оптимизации приложение использует все аппаратные ресурсы,
доступны многопоточность, загрузка файлов в фоне и др.;
● при создании используется самый новый функционал;
● 100% использование UX дизайна (поскольку интерфейс часть ОС)
● минимальный риск доработок от App Store и Google Play, поскольку
нативное приложение изначально отвечает стандартным требованиям
определенной платформы
● разнообразие инструментов для разработки и большое сообщество
разработчиков.

Когда используются нативные технологии:

● Долгосрочные проекты
● Если нужно выпустить приложение только под одну платформу.
● Если необходимо внедрить функционал специфичный для платформы,
например, in app.
● Если нужно постоянно обновлять приложение относительно платформы
(новый iOS или Android - сразу новое приложение). Часто обновления
движков запаздывают по отношению к обновлению платформ.
● Если обновление платформы содержит что-то, что полностью
несовместимо с движком.

Из недостатков нативной разработки является стоимость. Нативное


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

Кроссплатформенная разработка

Стремится сделать большую часть кода приложения не зависящей от


дальнейшего выбора платформы: разработка кроссплатформенных
приложений выполняется в независимой среде (фреймворках) на базе
JavaScript, C# (Xamarin) где создается единая структура и логика для разных
платформ. После проект преобразовывается и запускается в нативной среде
проектирования.

Достоинства метода:
— уходит меньше времени и ресурсов на реализацию проекта: приложение
пишется сразу для нескольких платформ;
— простые программы создаются при данном подходе гораздо быстрее;
— упрощенное обновление: изменение затрагивает все платформы;
— можно взять часть кода с мобильного сайта;
— единая логика мобильного приложения на разных платформах.
— для несложных корпоративных проектов, которые нужно быстро
запустить. При небольшом бюджете можно добиться хорошего результата.

Гибридные приложения
Гибрид использует веб-инструменты и языки. Комбинация Native с разработкой
веб-компонентов.

● Экономия в случае простого проекта.


● Выход на рынок сразу на 2 платформы.
● Непрактичность. Потребуется от 3 до 6 месяцев, чтобы изменить
фреймворк и добавить в него новый функционал. Только после этого
разработчики смогут усовершенствовать приложение. В нативных же
приложениях нововведения можно добавлять сразу после их
анонсирования.
● Низкая скорость. Зачастую гибридные приложения представляют собой
веб-страницы, которые не особо расторопны, например, в скроллинге
тяжелого контента: картинок, анимаций и т.д.Помимо этого, гибридная
разработка на базе веб-верстки претерпевает различные компиляции,
что также снижает скорость работы приложения и совсем не радует
пользователей.
● Трудности дизайна. iOS и Android приложения имеют свои собственные,
уникальные стандарты дизайна, а так как гибридное приложение не
отвечает им, его вид придется «подгонять» под соответствующие рамки.
● Незащищенность исходного кода. В то время как нативное приложение
может быть зашифровано перед выходом в официальный магазин,
гибридное приложение остается “голым”, поскольку в основе многих
гибридных приложений лежит HTML страница

Выбирайте гибридное приложение, если вы хотите получить:


● простое приложение
● приложение для двух платформ по бюджетной цене
● 1 приложение с возможностью быстрого выхода на два рынка
(ios/Android)

В гибридном приложении backend и frontend подходят для двух платформ


сразу. В нативном приложении нужно разрабатывать два отдельных frontend’а,
отвечающих общепринятым стандартам каждой из платформ.

Если логика приложения одинакова на всех платформах, а интерфейс простой,


гибридная разработка помогает быстрее вывести продукт на рынок. Мы
рекомендуем такие фреймворки, как React Native и Flutter, при следующих
условиях:

● если в сжатые сроки нужно написать прототип приложения для


нескольких платформ;
● если приложение берет всю информацию с сервера, логика реализована
на сервере, а анимация и интерфейс не имеют принципиального
значения;
● если используется минимальное количество нативных возможностей,
таких как push уведомления, встроенные покупки, геолокация и т.п.;
● если допустима скромная производительность, а контент подгружается
из интернета.
Web technologies
FRONTEND
● HTML, CSS — языки верстки
● JavaScript — для интерактивных элементов
● Опыт работы с одним из фреймворков: React / Angular / Vue
● NodeJS (Express.JS, Nest.js)
● ECMAScript / Typescript — расширения JavaScript, дающие больше
возможностей
AJAX/Асинхронный JavaScript и XML. Это набор методов веб-разработки,
которые позволяют веб-приложениям работать асинхронно — обрабатывать
любые запросы к серверу в фоновом режиме, БЕЗ ПЕРЕЗАГРУЗКИ.

BACKEND
● Java - Spring, Spring Boot
Работа с большими базами данных и сложными задачами.
● C# (ASP.Net Core)
● PHP - Laravel / Yii 2 / Symphony
● PHP CMS - Drupal, Joomla, WP (Word Press), Magenta
● Python - Django
● JS - Node.JS
Дополнительные фреймворки: Celery для асинхронных тасков, Django Rest
Framework для REST API и Python Social Auth для интеграции с соцсетями.

Обязательны навыки работы с базами данных MySql, PostgreSQL, MongoDB и


языками запросов.
MEAN:
MongoDB +Express.js, Angular, Node.js

Работа с API: Rest, JSON. Это нужно для работы с интеграциями с разного
рода внешними сервисами и обработкой запросов от фронтенда.
Также необходимо понимание принципов работы серверов Apache, NGINX, IIS
и инструменты для автоматизации развертывания, контейнеризации например
Docker.

Для любого программиста обязательно знать и уметь обращаться с системами


контроля версий - Git.

Single page application (SPA или одностраничное приложение)

● JS - Node.js Angular Vue.js


● Dart - Flutter
Мобильная разработка
iOS: Swift, Objective-C, Javascript(React Native/Ionic, NodeJS), C#
(Xamarin), Dart (Flutter).
Среда разработки для Swift: Xcode/AppCode.

Android: Java, Kotlin, Javascript (React Native, Ionic), C# (Xamarin), Dart


(Flutter).

Бэкенд мобильной разработки

Node JS - платформа для написания бэкенда с использованием JS.


PHP - Laravel, Yii2
Python - Django, Flask

Разработчики Android используют среду Android Studio (IDE) (Java, C#)


которая поставляется в пакете Android SDK. Для хранения и воспроизведения
данных нужны знания о базах данных.

Xamarin.Android и Xamarin.iOS наделяют приложение теми же возможностями и


интерфейсом, которые есть у нативных решений. В случае Xamarin.iOS
программа компилируется непосредственно в машинный код (AOT-
компиляция), тогда как в Xamarin.Android сначала происходит компиляция в
байт-код, который затем интерпретируется виртуальной машиной (JIT-
компиляция).

MERN MongoDB, Express, React, Node


MEAN MongoDB, Express, Angular, Node
Firebase
Firebase, Inc, 2011 г.
С 2014 г. Google

Firebase — это платформа для разработки веб-приложений и мобильных


приложений.

Firebase Storage — это хранилище, встроенное в платформу Firebase.


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

Архитектура Firebase:

● Облачное хранилище/Firebase Storage


Служба хранения объектов, предлагаемую на Google Cloud Platform. Когда
облачное хранилище Google включено в приложения Firebase, вы получаете
доступ к мерам безопасности Google и возможность защищать любые
загрузки или скачивания в своем приложении. С помощью SDK вы также
можете управлять медиафайлами и получать к ним доступ прямо из учетной
записи хранения.
Интеграция поддерживается для Android, C++, iOS, Unity и веб-приложений.

● Cloud Firestore
Масштабируемая и гибкая служба баз данных для серверной, веб- и
мобильной разработки. Он служит базой данных документов NoSQL.
Он поддерживается для Android, iOS и веб-приложений.

● Аутентификация
Включена в SDK в виде библиотек пользовательского интерфейса. Вы
можете использовать его в качестве внутренней службы для
аутентификации пользователей. Возможности объединения включают
Google, Twitter и Facebook.
Он поддерживается для Android, iOS и веб-приложений.

● Хостинг
Предоставляет хостинг производственного уровня для вашего веб-
контента. С помощью этого компонента вы можете развертывать
приложения и обслуживать динамический или статический контент через
глобальную сеть доставки контента (CDN). Вы также можете комбинировать
компонент хостинга с облачными функциями для разработки и
размещения микросервисов. Поддерживаются только веб-приложения.
● Облачные функции
Позволяют автоматизировать код в серверной части в ответ на триггеры
событий. События могут быть вызваны запросами HTTPS или функциями
Firebase.
Облачные функции поддерживаются для Android, C ++, Unity, iOS и веб-
приложений.
Desktop app

● C++
C++ используют для программ, требовательных к быстродействию
● C# - .NET Core
ADO.NET - доступ к данным.
● Java - Spring
Спецификации:
Java SE - разработка простых Java приложений
Java EE - разработка сложных Java приложений
● Python - PyQt, Tkinter, Kivy

Embedded приложения
Embedded systems - встраиваемые операционные системы для различных
устройств.
Embedded-разработка лежит на стыке инженерии и программирования, то есть
предполагает работу и с кодом, и с железом.

Embedded Developer хорошо знает физику и электронику, программирует на С


или С++.
Инженер встроенного ПО знает язык ассемблера и разбирается в электронных
схемах, микроконтроллерах, микропроцессорах.

Automation QA
Профессия на стыке программирования и тестирования.
Java – один из самых популярных языков для Automation QA. Но используется
и Python, JavaScript и другие языки.

DevOps
DevOps в целом – это методология, которая позволяет сделать разработку и
внедрение ПО максимально быстрой, эффективной и безопасной. Для этого
DevOps engineer: разворачивает программу на сервере; организовывает среду
разработки и тестирования ПО; стандартизирует окружение разработки;
контролирует работоспособность инструментов разработки; автоматизирует
процессы и создает своеобразный конвейер продакшена.
В качестве языка программирования чаще используется Python. Он довольно
простой в изучении и подходит для требований автоматизации и управления
инфраструктурой. Если принципиально он вам не подходит, можно изучить Go
или Ruby.
Также DevOps engineer знает:
● операционную систему, чаще Linux;
● один или несколько инструментов для управления конфигурацией
например Puppet, Chef, Ansible;
● Docker + облачный сервис для оркестрации контейнеров, например,
Amazon Web Services или Kubernetes;
● системы контроля версий и управления конфигурациями.

Game Developing

1. C
2. C++
Unreal Engine — PC, обычно используется для масштабных игр,
требовательных к быстродействию «железа»
3. Java
4. C#
Unity 3D — кроссплатформенный, возможность быстро портировать игру с
одной платформы на другую

Игровые движки: Unreal Engine, Cry Engine


Unity

Go - это язык низкого уровня, разработанный внутри компании Google, который


поможет стать системным программистом и разрабатывать качественные
консольные приложения.

Ruby - RoR (платформа) - Ruby on Rails


Производная Ruby, но сырой.
Редкие специалисты. Любят европейские клиенты.

Скриптовые языки для системного администрирования:

1. Perl
Automation
Для извлечения данных и составление отчетов. Работа с текстом.

2. Python - Django
Тестирование
Модульное тестирование, или юнит-тестирование
процесс в программировании,
позволяющий проверить на корректность
отдельные модули исходного кода программы.
Лекция 4
Рабочие инструменты рекрутера

github.com сервис хранения версий и опен сорс проектов, можно искать и


анализировать практический опыт кандидатов
stackoverflow.com — сервис вопрос — ответов, использовать для рекрутмента
сложнее, но можно, плюс есть решения с интегрированным поиском уже в
рекрутмент систему
recruitin.net инструмент для улучшения поисковой выдачи используемый Google
поисковик
djinni.co — анонимные соискатели открытые к оферам

glossarytech.com — ИТ терминология

amazinghiring.com — плагин для открытия контактов контактов не с первого


круга Linkedin и поиска кандидатов
Slack — это мессенджер для бизнеса, предоставляющий пользователям доступ
к необходимой информации.

Инструменты Для организации

Linkedin.com Google
Stackoverflow.com Canbanflow
Brainstorage.me
Github.com
Habrahabr.ru
Drupal.ua
Djinni.co
Turbohiring
Behance
Quora
Boolean Search, X-Ray
AngelList
UPWORK
Tproger

Художники:
BEHANCE
DRIBBLE
Поиск:
https://www.searchmy.bio/search?q=Frontend&hashtags=true

https://keywordtool.io/search/keywords/instagram
Лекция 5
Методы поиска и подбора. Первичная коммуникация и оценка.

Candidates screening flow

1. Продуктивность в работе/жизни 3. Мотивация


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

2. Личностные качества 4. Знания

Свободное внимание -
сосредоточенность
Уровень эмоционального тона
Контроль эмоций
Уверенность
Энергия
Настойчивость
Устойчивость к интроверсии
(восприятие манипуляций)
Уровень согласия (восприятие
плюсов и минусов человека)
Теплота (склонность любить)
Общение

Обмен важен для полноценного функционирования.

Причины по которым обмен нарушается:


- Ожидания не совпадают с реальностью.
- Ожидания не были озвучены.
- Нет результата.
- Неравноценный обмен. Человек обесценивает ту или иную вещь, если
не может дать что либо взамен.

Мы являемся причиной сбоя обмена.


Перформер Деятель

Продуктивный Непродуктивный

В чем отличие обязанностей от ответственности:

Ответственность - это способность исполнять обязательства и следовать


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

Обязанность - действия, которые я делаю для выполнения задачи или для


функционирования; круг действий, возложенных на кого-нибудь и
безусловных для выполнения

Модель компетенций рекрутера:


● Сорсинг
● Копирайтинг
● Продажи
● Оценка
Интервью по компетенциям
Star/Care интервью
● Проджект менеджер
● Аккаунт менеджмент

В тексте объявления обязательно нужно указать:

● точное название должности;


● четкие требования к квалификации и опыту работы;
● краткое описание функций, выполняемых на указанной должности;
● описание личных качеств (не общих пожеланий, а действительно
необходимых по должности: не следует требовать от рядового
бухгалтера коммуникабельности, а от охранника — креативности);
● форму занятости (полный рабочий день или частичная);
● прочие условия работы (командировки; наличие водительских прав и т.
п.);
● продолжительность испытательного срока;
● уровень оплаты (или «вилку» оплаты с обязательным пояснением, от
чего зависит сумма), в том числе — элементы компенсационного пакета;
● информация о компании;
● контактные данные рекрутера (Ф.И.О., электронный адрес, в редких
случаях — номер телефона).

Этапы рекрутинга

1. Получение заявки и её анализ


2. Анализ рынка труда отрасли
3. Выбор методологов подбора (зависит от сферы деятельности)
4. Реализация выбранных методов подбора
5. Телефонное интервью

Цель: Выяснение степени интереса соискателя к данной вакансии и


предоставление ему краткой информации о компании, о требованиях к
кандидату. Рекомендуется узнать, на какой уровень вознаграждения
рассчитывает человек (на время испытательного срока,
минимальная/максимальная зарплата, премирование).

6. Представление кандидата заказчику

Двойная продажа: продать вакансию кандидату и продать кандидата заказчику.

7. Собеседование (интервью)
8. Получение фидбэка от кандидата и заказчика
9. Сообщение результата
10. Сопровождение в процессе принятия оффера

Head Hunting
Фундамент успешной вербовки:
– знать потребности кандидата (какая мотивация, что он хочет);
– знать конкурентные преимущества своей компании по сравнению с
компанией кандидата (как обеспечить соблюдение этих двух правил мы
говорили выше);
– верить в себя и свою компанию.
Такой фундамент даст не только уверенность в своем предложении, но
поможет четко и уверенно сформулировать его кандидату.

Данные инструменты должны быть постоянной основой и непрерывной


деятельностью каждого хедхантера.
• Бизнес-связи, активный нетворкинг.
• Присутствие в соц. сетях, активное общение в группах, много контактов.
• Изучение бизнеса и тенденции сферы.
• Навыки продаж. Ситуация складывается таким образом, что либо вам
продадут отсутствие необходимости менять работу, либо вы продадите
кандидату эту необходимость. Развивайте навыки продаж, посещайте
тренинги, делайте отработки.
• Презентабельный внешний вид.
• Уверенность. Уверенности придает хорошо проработанный этап подготовки и
понимание,что вам есть чем цеплять и вы нашли почему это может быть
интересно специалисту (нашли потребность).
• Принцип win-win.

Статистика
https://www.npmtrends.com/react-vs-vue-vs-@angular/core
Мозговой штурм
мозговой штурм - обдумывание идей одним или несколькими людьми в попытке
придумать или найти решение проблемы

Преимущества мозгового штурма:


● способствует развитию творческого мышления.
● повышает эффективность совместной работы и сплоченность команды
● шанс быть услышанным

Основные правила проведения мозгового штурма


★ Генерировать как можно больше идей во время сеанса
★ Запрещено критиковать идеи (безоценочный подход)
★ Безумные и амбициозные идеи приветствуются.
★ Участникам рекомендуется развивать чужие идеи (принцип комбинирования)
Boolean search & Xray Search
X-ray поиск — это разновидность boolean search по конкретному сайту. Осуществлять
его можно как через Google (с помощью оператора site), так и внутри него.

X-ray в Google — наиболее базовое понятие булевой логики.


Можем искать по Должности и Компании, используя operator intitile;

Искать по Заголовкам с помощью специальных операторов в Custom Search Engines


(это такая поисковая строка в google, которую каждый может сделать под себя) и
Social List — единственно возможные пути для поиска по заголовку, включая Linkedin
Recruiter;

В поиске по Локации мы несем конкретные потери.


Во-первых, используя "location * * <location-name>" актуальных результатов вы не
получите (обратите на это особое внимание!). Во-вторых, запрашивать
местоположение с помощью CSEs вроде этого больше нельзя.

Полезные линки для булевого поиска:


Boolean String Bank | Search

https://wizardsourcer.com/boolean-strings-list/

https://turbohire.co/blog/step-by-step-guide-to-boolean-search-in-candidate-discovery-of-
hiring/

Table of Content

● Defining Boolean Search in Recruitment


● Boolean Search Operators Every Recruiter Should Know
○ AND
○ OR
○ NOT
● Boolean Search Modifiers in Recruitment
○ Parentheses ( )
○ Quotation Marks “ “
○ Asterisks *
● Additional Boolean Search Commands
○ Command 1 – inurl:
○ Command 2 – site:
○ Command 3 – filetype:
○ Command 4 – intitle:
● Why Use Boolean Search?
○ Exclude Unnecessary Candidate Profiles
○ Reduce Time Required to Search
○ Define Candidate Variables
○ Have Control of your Research
● TurboHire’s Advanced Boolean Search

Boolean operators to use in search strings

To begin using Boolean search strings to optimize your search for job candidates, read
about these five commonly used Boolean operators:

AND

The AND operator is used to combine two or more search criteria into one string. When you
use the AND operator, you narrow down your search results to include only results that
satisfy both of the criteria. For example, if you were looking for a financial analyst with
experience in both accounting and sales, your Boolean search string would include
"accounting AND sales" so that all results include both criteria.

OR

The OR operator is similar to the AND operator, but it expands search results to include one
criterion, another criterion or both. So, if you wanted a financial analyst with experience in
either accounting, sales or both, your Boolean search string would say "accounting OR
sales."

NOT (minus symbol)

The NOT operator, which is indicated by the minus symbol (-), excludes search results that
you are not looking for. For example, if you are conducting a search for writing portfolios
through a search engine, you may want to filter out results like articles on creating portfolios,
as these may clutter your search results. In this case, your Boolean search string could
include "NOT tips" or "-tips" to cut back on articles and keep your search focused on actual
writing portfolios. Be mindful that Google only recognizes the minus sign and not the NOT
operator.

Parentheses

Parentheses allow you to group multiple Boolean search strings into one complex candidate
search. For example, you could search "(accounting OR sales) AND analyst" to get results
that must contain "analyst" plus either accounting, sales or both.

Quotation marks

Finally, quotation marks allow you to get results containing an exact phrase. Place your
specific phrase, such as "graphic design," in quotation marks to narrow your search to only
results containing this specific phrase.
Searching for a CV:

1. Cover variances in search terms

A resume may also be referred to as a CV, so cover both search terms by using the Boolean
search string "resume OR CV." The OR operator will show results containing "resume," "CV"
or both. You may also want to include cover letters or other documents in your search.

2. Search for words included in resumes

Aside from searching for a resume or CV, you may want to consider searching for words
commonly included in resumes, such as "professional experience," "skills" or "education."

3. Include different titles for the same profession

Often, one profession may be referred to by multiple titles. To ensure that you don't miss any
great candidates, broaden your search to cover different titles for the same profession. For
example, you could use alternative titles like "developer" and "programmer" for a web
development role.

4. Exclude results you are not looking for

You can use the NOT operator to exclude criteria that you don't want to clog your search
results. For example, you could exclude terms like "templates" or "tips" to avoid resume-
related articles in your search results. This narrows your search and makes it easier to find
the actual resumes you are looking for.
5. Search for more information on specific candidates

To learn about specific candidates, search for your candidate's name in quotation marks and
use Boolean operators to find the exact information you are looking for, such as their email
address or social media profiles.

Вам также может понравиться