Концепции

Архитектура

Back-end

Руботу в системе удобно разделять на часть, которая выполняется «где-то там» и часть, которая выолняется на устройстве, с которого пользователь обращается к сервису. Первую называют back-end, вторую front-end.

CI/CD

От «Continuous delivery». Подход к разработке, при котором обновления кода на продакшне публикуются как можно чаще: от нескольких десятков раз в день до нескольких раз в неделю

Front-end

Руботу в системе удобно разделять на часть, которая выполняется «где-то там» и часть, которая выолняется на устройстве, с которого пользователь обращается к сервису. Первую называют back-end, вторую front-end.

.gitignore

Файл, в котором можно перечислить всё, что не должно попасть в Git-репозиторий

Over-engineering

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

Software design

The goal of software design is to create chunks or slices that fit into a human mind. The software keeps growing but the human mind maxes out, so we have to keep chunking and slicing differently if we want to keep making changes.

Кэширование

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

Паттерны проектирования

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

Поток событий

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

Распределённая система

Система из нескольких компонентов, работающих асинхронно и общающихся посредством сообщений

Репликация

Дублирование информации для повышения скорости доступа к ней или надёжности её сохранения

Транзакция базы данных

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

Вычисляемость и computer science

PoW

От «Proof of work». Применяемый в блокчейнах способ подтвердить затраченные усилия

AST

От «Абстрактное синтаксическое дерево». Структурированное описание текста программы

Итерация

Итерация — процедура обхода всех элементов списка и выполнения блока кода на каждом «кругу»

Рекурсия

Рекурсия — вызывание функцией самой себя

Сложность вычисления

В информатике есть несколько разделов, посвящённых эффективности алгоритмов и программ. Потому что каким бы мощным ни был ваш MacBook Pro, лучше писать эффективные программы, чем неэффективные.

Формальное описание

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

Хэширование

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

Циклы

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

Паттерны проектирования

CQRS

От «Command Query Responsibility Segregation». Архитектурный паттерн о разделении моделей, управляющих чтением и записью данных

Fluid interface

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

MVC

От «Model-View-Controller». Архитектурный паттерн, суть которого в разделении кода, управляющего данными, взаимодействиями и отображением.

Quine

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

Асимметричное шифрование

В публичном доступе есть ключ для зашифровки сообщений, и только у адресата есть ключ для расшифровки этих сообщений

Псевдонимность

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

Симметричное шифрование

У обеих сторон есть одинаковый «ключ», используемый как для зашифровки так и для расшифровки сообщений

Стейт-машина

Тип поведения объекта, при котором значение какого-то его свойства может изменять только по определённым правилам, обычно в определённой последовательности

Принципы проектирования

Conceptual compression

Выделение важных и часто меняющихся участков и оборачивание остальных участков в обёртки (применительно к коду). То, что делают фреймворки.

DRY

От «Don’t repeat youself». Принцип, призывающий не копировать код, делающий одно и то же, а переиспользовать его

Good defaults

Если у инструмента есть настройки, нужно делать изначальное состояние этих настроек оптимальным

KISS

От «Keep it simple, stupid». Немного патерналистский принцип, свысока предостерегающий от овер-инжениринга

YAGNI

От «You ain’t gonna need it». Принцип, предостерегающий от раздувания функционала программы впрок, и предсказывающй, что тебе это не понадобится

Закон Деметера

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

Низкая связанность

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

Однозадачность

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

Удобочитаемость

Насколько удобно и легко будет читать код другому человеку или автору спустя некоторое количество времени

Психология и мотивация

Выгорание

Потеря интереса к работе, депрессивное состояние и апатия, возникающие при длительных переработках

Ментальное переключение

Переключение недооценённый и малоизвестный враг продуктивности. Если человек погружён в задачу, и его отвлечь незначительным вопросом, ему потребуется 10-15 минут, чтобы снова погрузиться в задачу.

Переработки

Кранчи — это длительные переработки, продолжающиеся неделями (а порой месяцами)

Работа с погружением

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

Синдром студента

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

Состояние потока

Понятие, введённое Михаем Чиксентмихайи. Когда за приятной работой часы пролетают незаметно.

Туннельный синдром

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

Структура кода

Code smells

Задокументированные анти-паттерны программирования

Cohesion

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

Инкапсуляция

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

Инкапсуляция

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

Исчерпанность

Описание кодом всех возможных вариантов развития событий.

Побочный эффект

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

Рефакторинг

Улучшение участков кода с плохой архитектурой на равнозначные по смыслу но с лучшей архитектурой

Уровень абстракции

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

Структуры данных

Blockchain

Тип распределённой базы данных с высокой защитой от изменения прошлых записей. Лежит в основе BitCoin, Etherium и пр.

Enum

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

Массив

Структура данных, состоящая из списка элементов

Трудоустройство

Soft skills

Умение хорошо общаться и в целом быть приятным человеком

Завышенные требования к опыту

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

Релокация

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

Синдром самозванца

New programmers are often uncertain if they will ever be good enough. As we grow more experienced, we learn to relax in the total certainty that we’ll never be good enough.

Управление проектами

TDD

От «Test-driven development». Методика написания кода, когда сначала пишутся тесты, проверяющие работу будущего кода, а потом сам код.

Технический долг

Количество кода с плохой архитектурой, написанного наспех, который впоследствии придётся переписывать

Человеческий фактор

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

Эмоциональный интеллект

Понятие, введённое Дэниелом Гоулманом. Упрощая, — насколько хорошо человек осознаёт и умеет обращаться со своими и чужими эмоциями.

Элементы языков программирования

API

От «API». Набор доступных комманд и их параметров, поддерживаемых сервисом

Shadowing

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

Компилятор

Программа, «собирающая» из кода на языке программирования высокого уровня исполняемый файл с байткодом или машинным языком

Линтер

Инструмент, проверяющий код (или в процессе написания или при отправке коммита) на синтаксический ошибки и соответствие стилю

Менеджер пакетов

Система (программа), управляющая установкой, обновлением, удалением, публикацией «пакетов» — готовых к переиспользованию программных модулей, запакованных стандартным образом

Миграции базы данных

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

Наследование

Свойство объектов одного типа приобретать поведение (методы) другого типа

OOP

От «Объектно-ориентированное программирование». Стиль программирования, в котором основным инструментом являются объекты классов, отправляющие друг другу сообщения

Перегрузка функции

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

Разметка

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

Типизация

Способность компилятора программного языка проверять соответствие значений переменных их объявленным типам

Шаблонизация

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

Прочее

CRUD

От «CRUD». Create, Read, Update, Delete

VPS

От «Виртуальный сервер». Виртуализированная операционная система и часть ресурсов реальной машины в дата-центре

Обфускация

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

Роутинг

Перенаправление запросов в разые функции / классы в зависимости от адреса, по которому запрос поступил

Система контроля версий

Программа / система, отслеживающая изменения в файлах вплоть до буквы в конкретной строке, и помогающая «сращивать» файлы, изменения в которых были произведены разными людьми одновременно