“Техническая база” для менеджеров продукта — часть 1 — общие понятия

Oleksii Hryshko
6 min readJun 15, 2021

Записи из курса по 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; настройка и расширение, позвоялет находить ошибки в типах;

Дополнительные материалы

  • [1] Что происходит, когда … много вещей о технических штуках;
  • Что происходит, когда пользователь вбивает в браузер адрес google.com: хабр;
  • Курс CS-50 на Курсере;
  • 2 книги: Cracking the PM Interview, Cracking the Coding Interview;

--

--

Oleksii Hryshko

Product manager at Fozzy (ex. Appflame) — — Product management, Personal Finance, Investment, Psychology, PM Mentorship, Fencing, Other Notes.