Техническая база для менеджеров продукта — часть 1 — общие понятия
Записи из курса по technical product manager; позиционируют как: “Говори с разработчиками на одном языка”.
Это 1я часть из серии, в ней собраны: общие понятия разработки, подходы, архитектура и платформы, API, словарь терминов (короткий). Старался писать просто/понятно, как для себя.
CRUD — методология определяет четыре базовые функции (операции) работы приложения: создание (create), чтение (read), модификация (update), удаление (delete).
Архитектура — это структура приложения; решение о том, что и как строить: элементы приложения, связи между ними, движение данных; например: mvc; model — view — presenter; клиент — сервер;
Архитектура MVC (model — view — controller):
model — view — controller
View — интрефейс приложения; то, что видит пользователь; ей не нужно знать ничего о данных, задача только показать;
Model — отвечает за взаимодейтсиве с данными; часть кода, которая описывает бизнес логику; ей не нужно знать, что за данные будут или как выглядит интерфейс;
Controller — прослойка между view и model; отвечает за ответ;
Архитектура CS (client — server):
client — server
В этой архитектуре клиент (приложение, сайт) общается с сервером (бэкенд) через протокол общения, как правило HTTP. Это нужно для того, чтобы снизить требования к клиенту.
Например: не обрабатывать видео Reface в телефоне, а быстро посчитать всё на сервере и отдать результат.
Платформы:
Mobile — есть 2 больших игрока на рынке(Google Android, Apple iOS), любой продукт должен пройти модерацию и есть правила; дает сильный направленный рост; релизы нужно планировать, версионность; частое использование с короткой сессией;
разработка дороже и дольше; использование нативынх API.
Web — нет глобальных игроков, больше свободы в решениях; очень легкие релизы (поменял — выктил); редкое использование с длительной сессией;
разработка быстрее и дешевле; ограничения на уровне браузеров;
Desktop — сильно похож на web (как правило адаптация web под платформу);
Процесс разработки
этапы разработки програмного продукта
Выбор технологий для проекта:
Web:
Front-E: JavaScript, TypeScript, HTML, CSS;
Back-E: PHP, C#, Java, Node.js;
Desktop & Mobile & Games:
Android: Java, Kotlin;
iOS: ObjectivC, Swift;
Desktop: C#, C++, Java, Delphi;
Games: C++, Lua, C#;
Тестирование:
Автотесты: JavaScript, Java, С#;
Системные скрипты: Bash, Python, Perl;
Как выбор фреймворка влияет на менеджмент?
Если стек не мейнстрим, то могут быть трудности с поиском команды (например React vs Angular vs Vue); так же есть вопросы по специфике задача; но, РМ редко выбирате стек разработки, так что не стоит волноватся.
Система управления пакетами (менеджер пакетов) — набор ПО, который управляет работой работой библиотек и фреймворков (управление, уудаление, установка и тд); привязан к языку (например npm y JS);
например: как курьер Глово — приносит еду по запросу.
Система контроля версиями — позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное
изменение, и многое другое;
например: GIT.
API (application programming interface)
API — это интерфейс для программиста. Определяет
функциональность, которую предоставляет программа без привязки к её реализации; сли программу (модуль, библиотеку) рассматривать как чёрный ящик, то API — это множество «ручек», которые доступны пользователю ящика и которые он может вертеть и дёргать;
например: управление машиной; можно не знать как она работает внутри (двигатель, коробка передач и тд), но всё равно водить разные автомобили через интерфейс (руль, педали и тд.).
Web API — используеться для общения клиента и сервера по протоколу HTTTP при помощи запросов — ответов;
Класификация:
- публичный: доступен для всех (погода, курс валют, етс);
- приватный: доступ по ключу (авторизация); как правило закрыт для использования в рамках проекта;
Методы для Web API:
- get — запрос содержимого;
- post — передача пользовательских данных на ресурс (body запроса);
- put — загрузка содержимого или обновление данных;
- delete — удаление ресурса;
REST
REST — Надстройка для API; архитектурный стиль взаимодействия
компонентов распределенного приложения в сети; набор соглашений и правил для построения и взаимодействия с Web API;
например: есть абстрактный магазин, у которого есть товары, цены, покупатели и тд; у кождой сущности, должен быть свой API, енд-поинты; market/goods, market/price и тд.
например: звонок к оператору в ПБ; дальше выбор 1–2–3–4 по разным категориям; это такие-себе енд-поинты.
JSON
JSON — текстовый формат обмена данными, основанный на JavaScripte; легко читается людьми.Чаще всего используется в веб приложениях для обмена данными между клиентом (браузером) и сервером.
Есть альтернативынй формат — XML, однако он более громосткий (содержит теги);
Авторизация
Token-BasedAuthentication — токены представляют собой средство авторизации для каждого запроса от клиента к серверу; генерируются на сервере основываясь на секретном ключе;
например: для приватного API, пользователь передает в body запроса токен авторизации; если он верный — получает ответ (не эррор).
Термины
Архитектура — это структура приложения; решение о том, что и как строить: элементы приложения, связи между ними, движение данных;
например: MVC.
Библиотека — точечное решение для решения конкретной задачи; например: добавлять вотер-марки, Google Maps Library, Apple Pay.
Фреймворк — совокпность библиотек для решения опредленного пула типовых задач со структурой; когда есть ряд типовых задач, фреймворку включает каркас готовых базовых наработок; уменшает риски на уровне архитектуры;
например: Android, iOS, Symfony (php), CodeIgniter.
SDK — набор решений для программирования.
SOLID — принципы (руководство, стандарт) для упрощения разработки и поддержки программ. Вколючает в себя:
- Принцип единственной ответственности: для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть собраны в этот класс и подчинены только этой задаче.
- Принцип открытости/закрытости: программные сущности должны быть открыты для расширения, но закрыты для модификации»
- Принцип подстановки Лисков: объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы;
- Принцип разделения интерфейса: много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения;
- Принцип инверсии зависимостей: нет зависимости на что-то конкретное; только на абстракциях.
Backend — черный ящик с запрограммированой бизнес логикой внутри; получает запрос, обрабатывает его и отдает результат.
Ip-адресс — уникальный сетевой идентификатор копьютера (сервера).
DNS — система доменных имён; компьютеры оперируют адресами в виде цифр, человеку легче запомнить название (google.com); DNS это сервис-таблица, которая их связывает (domain — ip); больше [1].
HTTP — протокол передачи данных, на котором работает Интернет; состоит из глагола (get, put, post, delete), ресура (endpoitn url, ссылка) и заголовка (accept); реализация методологии CRUD.
База данных — организованная структура для хранения, изминения и обработки данных.
Протокол — набор инструкций, который указывает системае как работать (общатся с дургими системами, обращатся с запросами);
например: OAuth для авторизации.
Токен — строка символов, в которой что-то зашифровано.
Load balancer — прослойка между клиентов и сервером с backend, который равномерно распределяет нагрузку на сервера.
Репликация БД — копия БД, нода, на которой хранится дубль данных с БД; нужна для увелечиния отказоустойчивости системы.
Язык программирования — формальный язык, предназначенный для записи компьютерных программ; набор правил, который определяет внешний вид и действия программы. Бывают:
+ низкоуровневые: общаются напрямую с железом (процессором);
+ высокоуровневые: имеют исполнительную прослойку;
+ компилируемые: переводит код из языка в байт-код (1 и 0) и запущен на исполнение как отдельная программа;
+ интерпритируемые: исходный код выполняется непосредственно, команда за командой на устройстве пользователя;
+ статическая типизации: тип данным нужно указывать явно самому; если нужна точность рассчёта;
+ динамическая типизация: сам опрелеляет тип данных; нужно самому отслеживать корректность типов;
Языки:
- Java — пишешь 1 раз, запускаешь везде; для разработки серверных, мобильных и десктоп приложения: Андроид, трейдинговые, банковские, веб и тд;
- C# — конкурент Java (очень похож); web, desktop, Xemarin, MS приложения, enterprise проекты (для крупных корпораций, т.к. большой рынок разработчиков);
- Java Script — сценарный язык для работы в браузере; используеться для Front, Back и мобильных приложений;
- Type Script — копия JS от MS; настройка и расширение, позвоялет находить ошибки в типах;