Концепции

Архитектура

Back-end

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

CI/CD

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

Front-end

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

Over-engineering

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

Кэширование

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

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

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

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

AST

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

Итерация

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

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

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

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

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

Циклы

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

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

CQRS

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

Fluid interface

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

MVC

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

Quine

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

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

DRY

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

KISS

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

YAGNI

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

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

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

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

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

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

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

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

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

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

Выгорание

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

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

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

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

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

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

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

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

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

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

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

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

Code smells

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

Cohesion

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

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

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

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

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

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

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

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

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

Рефакторинг

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

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

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

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

Массив

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

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

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

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

Обфускация

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

Роутинг

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

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

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