Введение
Словарный запас наращивают двумя способами. Первый — заучивать слова поштучно, списками. Способ честный, медленный и на длинной дистанции почти бесполезный: через месяц от списка остаётся треть. Второй — научиться собирать слова из деталей.
Английское словообразование устроено на редкость регулярно. Знаешь корень deploy, понимаешь, что делают приставка re- и суффикс -ment, — и бесплатно получаешь redeploy, deployment, redeployment, undeployed и ещё десяток форм, которые всё равно встретишь в логах.
Разберём механику: продуктивные префиксы и суффиксы, регулярные пары «глагол → существительное», профессиональные сокращения (repo, config, env) и аббревиатуры. Отдельный блок — произношение. Термины, которые русскоязычные разработчики произносят мимо, и чтение символов вслух: просьба «продиктуй путь» на созвоне ставит в тупик надёжнее любого грамматического вопроса.
Финал главы — коллокации, устойчивые сочетания глагола с существительным. Тот слой языка, который отличает «правильно» от «естественно»: исключения не «делают», их throw или raise. Логикой не выводится. Запоминается парами.
Префиксы: меняем смысл корня
Префикс цепляется к началу слова и меняет значение, часть речи при этом обычно не трогает. В техническом английском в ходу примерно дюжина префиксов — вот они с примерами из живой практики.
| Префикс | Значение | Примеры |
|---|---|---|
| de- | обратное действие, снятие | deserialize, decompress, deprecate, debug, deallocate |
| re- | повтор, заново | retry, refactor, rebuild, replay, reconnect, rebase |
| un- | отрицание, отмена | unavailable, unsupported, unstage, unsubscribe, undo |
| non- | не относящийся к | non-blocking, non-nullable, non-deterministic, non-idempotent |
| over- | сверх меры, поверх | overwrite, overload, overhead, overprovision, overflow |
| under- | недостаточно, под | underutilized, underscore, underlying, underprovisioned |
| pre- | до, заранее | preprocess, precompute, prefetch, prerequisite, preflight |
| post- | после | post-deploy, postprocess, postmortem, post-mortem analysis |
| sub- | под, вложенный | subdomain, subquery, subprocess, subscription, subnet |
| multi- | много | multi-tenant, multithreaded, multipart, multi-region |
| inter- | между | interface, interoperability, intermediate, interleave |
| mis- | ошибочно, неправильно | misconfigure, misleading, mismatch, misuse, misspell |
Сбивает чаще всего пара un- и non-. Un- отрицает свойство или отменяет действие: unsupported — «не поддерживается», unstage — «убрать из индекса». Non- просто относит объект к другой категории, без всякой негативной окраски: non-blocking — это описание типа, а не жалоба.
De- означает обратную операцию, поэтому в коде эти слова ходят парами:
payload = serialize(order) # объект -> строка
order = deserialize(payload) # строка -> объект
blob = compress(data)
data = decompress(blob)
Отдельно про deprecate — «объявить нежелательным». Deprecated не значит ни «сломано», ни «удалено». Оно значит «пока работает, но помечено к удалению — начинай мигрировать». Существительное — deprecation, срок до удаления — deprecation period. Тот, кто прочитал deprecated как «неважно, ещё лет пять простоит», обычно узнаёт правду в день мажорного релиза.
Суффиксы: меняем часть речи
Суффикс садится на конец слова и обычно переводит его в другую часть речи. Это готовый ключ к незнакомым словам: увидел -tion — перед тобой существительное-процесс, даже если корень встречаешь впервые в жизни.
| Суффикс | Что образует | Примеры |
|---|---|---|
| -able / -ible | прилагательное: «можно сделать» | readable, cacheable, serializable, reproducible, extensible |
| -less | прилагательное: «без чего-то» | stateless, serverless, seamless, endless, lossless |
| -ful | прилагательное: «полный чего-то» | stateful, successful, meaningful, useful |
| -er / -or | тот, кто выполняет действие | compiler, handler, listener, validator, executor, iterator |
| -tion / -sion | существительное: процесс или результат | migration, validation, execution, compression, revision |
| -ment | существительное: результат или состояние | deployment, assignment, requirement, environment, statement |
| -ize | глагол: привести к состоянию | serialize, normalize, initialize, optimize, containerize |
| -ify | глагол: сделать таким | verify, notify, minify, specify, stringify |
| -ness | существительное: свойство | readiness, liveness, correctness, uniqueness, robustness |
Пара stateless / stateful показывает экономию наглядно. Знаешь state, знаешь, что -less — «без», а -ful — «с»: два ключевых архитектурных термина достались даром. Так же с -ness: пробы liveness и readiness в оркестраторах — «живость» и «готовность» от alive и ready, и после такой расшифровки их уже не перепутаешь местами.
-able — самый продуктивный из всех, его вешают почти на любой глагол. Cacheable, retryable, observable, pluggable собраны по одной схеме. Работает и в обратную сторону: незнакомое throttleable ты расшифруешь без словаря — «то, что можно ограничивать по скорости».
А в связке префикс плюс суффикс слово раскладывается на три детали. Reproducible = re- (заново) + produce + -ible (можно) = воспроизводимый. Undeployable = un- + deploy + -able = то, что задеплоить нельзя.
Пары «глагол → существительное»
Задача, которая всплывает каждый день: глагол ты знаешь, а в предложение просится существительное. Или наоборот. Пары в английском регулярны, но угадываются не всегда.
| Глагол | Существительное | Пример употребления |
|---|---|---|
| deploy | deployment | The deployment failed; we deployed again. |
| deprecate | deprecation | Read the deprecation notice before you upgrade. |
| fail | failure | A single failure should not fail the whole batch. |
| retry | retry / a retry | The client retries; the third retry succeeded. |
| roll back | rollback | We rolled back; the rollback took two minutes. |
| configure | configuration | Configure the pool in the configuration file. |
| authenticate | authentication | Authentication failed; authenticate again. |
| maintain | maintenance | The service is under maintenance. |
| analyse / analyze | analysis | The root cause analysis is due tomorrow. |
| lose | loss | Packet loss above 1% breaks the stream. |
Орфографическая ловушка, в которую попадают все. Глагол roll back пишется в два слова, существительное rollback — в одно. То же с roll out / rollout, back up / backup, set up / setup, log in / login. Правило универсальное: глагол — два слова, существительное — одно.
We need to back up the database. (глагол)
The backup finished at 03:00. (существительное)
Log in with your SSO account. (глагол)
The login page is broken. (существительное)
Прилагательное от failure — failed: a failed request, failed jobs. Формы failured не существует, хотя по аналогии её изобретают регулярно.
Профессиональные сокращения
В рабочей речи и чатах длинные слова систематически обрубаются. Это не сленг и не небрежность: так говорят и пишут все, включая документацию инструментов. В полном виде ты их почти не услышишь — человек, который на созвоне произносит repository целиком, звучит как диктор новостей.
| Сокращение | Полная форма | Как употребляется |
|---|---|---|
| repo | repository | Clone the repo and check out the branch. |
| config | configuration | The config is mounted as a volume. |
| env | environment / environment variable | Set it as an env var in the staging env. |
| auth | authentication / authorization | The auth middleware rejects the request. |
| async | asynchronous | This handler is async. |
| deps | dependencies | Bump the deps and rerun the tests. |
| perf | performance | The perf regression came from the new join. |
| prod | production | Do not test on prod. |
| spec | specification | The spec says the header is optional. |
| docs | documentation | Update the docs in the same PR. |
| e2e | end-to-end | The e2e suite runs nightly. |
| regex | regular expression | This regex is too greedy. |
Два замечания. Auth двусмысленно: оно накрывает и аутентификацию (кто ты), и авторизацию (что тебе можно). Когда разница существенна, говорят полностью или пишут authn и authz. Полчаса обсуждения «проблемы с auth», где один участник имел в виду токены, а другой — права доступа, — сцена, которую я видел не раз. А e2e произносится «и-ту-и»: цифра 2 заменяет предлог to. Тот же приём в i18n (18 — число пропущенных букв) и k8s.
git clone git@github.com:acme/billing-api.git
cd billing-api
cp .env.example .env # env vars for local dev
make deps # install dependencies
make e2e # run the end-to-end suite
Аббревиатуры и как их читают вслух
Аббревиатуры бывают двух типов, и от этого зависит произношение. Инициализмы читаются по буквам (API — «эй-пи-ай»), акронимы — как слово (SLO — «эс-эл-оу», а вот SOAP — «соуп»). Ошибиться не страшно, никто не засмеётся, но знать заранее приятнее.
| Аббревиатура | Расшифровка | Как произносят |
|---|---|---|
| API | application programming interface | по буквам: эй-пи-ай |
| CRUD | create, read, update, delete | как слово: «крад» |
| ORM | object-relational mapping | по буквам |
| CI/CD | continuous integration / continuous delivery | по буквам, с «слэш» посередине |
| SLA | service level agreement | по буквам |
| SLO | service level objective | по буквам |
| RFC | request for comments | по буквам |
| TTL | time to live | по буквам |
| IdP | identity provider | по буквам: ай-ди-пи |
| MR / PR | merge request / pull request | по буквам |
| RCA | root cause analysis | по буквам |
| WIP | work in progress | чаще по буквам, иногда «уип» |
| YAGNI | you aren't gonna need it | как слово: «ягни» |
Троицу SLA, SLO, SLI путают даже носители. SLI — измеряемый показатель, скажем доля успешных запросов. SLO — цель команды по этому показателю, те самые 99,9%. SLA — юридический договор с клиентом, где за пробитую цель предусмотрены последствия, обычно денежные. Внутри команды говорят про SLO. В контракте — про SLA. Перепутать их на встрече с заказчиком — редкое по силе впечатление.
MR и PR — одно и то же, разница только в платформе: GitHub говорит pull request, GitLab — merge request.
Произношение проблемных терминов
Есть набор слов, которые русскоязычные разработчики произносят мимо почти поголовно. Трагедии в этом нет. Но на созвоне искажённое частотное слово заставляет собеседника переспрашивать, и разговор начинает буксовать на ровном месте.
| Термин | Как часто говорят | Как правильно |
|---|---|---|
| cache | «кэш» через долгое э, «каше» | ровно как cash — «кэш», один слог |
| queue | «кьюэ», «квеуе» | как буква Q — «кью» |
| char | «хар», «чар» | чаще «чар», реже «кар»; оба приняты |
| tuple | «тупл» | «тьюпл» или «тапл», оба варианта живут |
| null | «нулл» | «нал», с гласной как в but |
| schema | «схема» | «ски́ма», множественное — schemas или schemata |
| SQL | «эс-ку-эль» | «эс-кью-эл» по буквам или «сиквел» |
| JSON | «джейсон» с ударением на -сон | «джéйсон», ударение на первый слог |
| GUI | «гуи» | «гу́и» как слово или по буквам джи-ю-ай |
| nginx | «нжинкс», «энджинкс» | «энджин-экс» (engine X) |
| kubectl | «кубектл» | «кьюб-контрол» или «кьюб-си-ти-эл» |
| Kubernetes | «кубернетес» | «кубернэ́тис», ударение на третий слог |
| Linux | «ла́йнукс» | «ли́накс» |
| facade | «фасад» по-русски | «фасáд» с мягким c: фэ-сад |
| deque | «дэкуэ» | «дэк», как deck |
Признаюсь честно: я года три говорил «каше» вместо «кэш» и «схема» вместо «скима», и меня ни разу не поправили — просто пару раз переспросили. Поправился я сам, случайно услышав слово в подкасте. Мораль простая: никто тебя исправлять не будет, это твоя работа.
Самые частотные здесь cache и queue — их ты произносишь по нескольку раз за созвон. Cache звучит ровно как cash, деньги. Queue — ровно как название буквы Q; всё остальное в этом слове не произносится вообще, что и сбивает с толку. У kubectl канонического варианта нет вовсе: «кьюб-контрол», «кьюб-си-ти-эл» и «кьюб-катл» мирно сосуществуют, спорить о них — занятие для скучающих.
Читаем символы вслух
Просьба «продиктуй мне путь» топит людей надёжнее любого грамматического вопроса. Названия символов не преподают нигде, а нужны они постоянно: на созвонах, в парном программировании, при диктовке команды в поддержку.
| Символ | Название | Символ | Название |
|---|---|---|---|
| _ | underscore | - | hyphen (в тексте), dash (в речи) |
| / | slash, forward slash | \ | backslash |
| * | asterisk, star | . | dot (в путях), period (в тексте) |
| { } | curly braces, curly brackets | [ ] | square brackets |
| ( ) | parentheses, round brackets | < > | angle brackets |
| # | hash, pound, number sign | ! | exclamation mark, bang |
| : | colon | ; | semicolon |
| ~ | tilde | ^ | caret |
| | | pipe, vertical bar | & | ampersand |
| @ | at sign, at | % | percent |
| " | double quote | ' | single quote, apostrophe |
| ` | backtick | = | equals |
Несколько тонкостей. В путях точка почти всегда dot: dot env, dot git, config dot yaml; в обычном тексте точка в конце предложения — period или full stop. Дефис в речи чаще зовут dash, хотя строго dash — это тире, а hyphen — дефис; --verbose произносят dash dash verbose. Bang — жаргонное имя восклицательного знака, отсюда shebang: строка #! буквально sharp плюс bang.
Потренируемся. Вот путь и команда — проговори их вслух, прежде чем смотреть расшифровку. Именно вслух: молча всё получается гораздо лучше, чем на созвоне.
~/projects/billing-api/.env.example
kubectl logs -f deploy/billing-api --since=1h | grep -i "timeout"
Расшифровка первой строки: tilde slash projects slash billing dash api slash dot env dot example.
Второй: kubectl logs dash f deploy slash billing dash api dash dash since equals one h, pipe, grep dash i, double quote timeout double quote. Заметь, что 1h читается как one h или one hour — в разговоре чаще расшифровывают.
Коллокации: какие глаголы идут с какими существительными
Коллокация — устойчивое сочетание слов, которое носители употребляют вместе просто потому, что так сложилось. Логики в этом почти нет, и калька с русского выдаёт неносителя мгновенно. Рабочий минимум:
| Сочетание | Значение |
|---|---|
| throw / raise an exception | выбросить исключение (throw в Java, JS, C#; raise в Python, Ruby) |
| catch / handle an exception | поймать, обработать исключение |
| run a query | выполнить запрос к БД |
| hit an endpoint | обратиться к эндпоинту |
| deploy to production | выкатить в прод (именно to, не on) |
| merge a branch into main | влить ветку (into, не to) |
| roll out a feature | постепенно выкатывать фичу |
| roll back a release | откатить релиз |
| ship a feature | довести фичу до пользователей |
| break the build | сломать сборку в CI |
| spin up a container | поднять контейнер |
| tear down the environment | снести окружение |
| address a comment | ответить на замечание на ревью |
| introduce a regression | внести регресс |
| reproduce a bug | воспроизвести баг |
| land a change | довести изменение до основной ветки |
Смотри на предлоги — в них ошибаются чаще, чем в самих глаголах: deploy to production, merge into main, push to a branch, subscribe to a topic, depend on a library, listen on a port, connect to a database. Запоминать их надо целиком, глагол вместе с предлогом, иначе не запомнятся никогда. Зато фраза, собранная из коллокаций, звучит естественно даже на самой простой грамматике:
I rolled back the release because the new query
introduced a regression on the checkout endpoint.
I'll ship a fix after we reproduce the bug locally.
Кейс из реального проекта: диктуем путь и команду на созвоне
Ситуация рядовая. Идёт инцидент, коллега из другой страны шарит экран и просит: Can you tell me the exact path? Надо продиктовать путь и команду так, чтобы человек набрал ровно то, что ты имеешь в виду, с первого раза.
Один такой созвон я помню в деталях. Коллега диктовал путь к конфигу, я набирал под его диктовку, и минут пять мы искали файл, которого нет. Оказалось, между двумя словами был underscore, а он сказал dash. Пять минут инцидента ушли на один символ, который никто не догадался назвать точно.
cat /etc/billing-api/config.d/50-rate-limit.yaml
docker compose -f docker-compose.prod.yml up -d --scale worker=3
Плохой вариант — читать слитно и быстро: собеседник отвалится на первом же дефисе. Хороший — с явными названиями символов и паузами на разделителях:
cat, space, slash etc slash billing dash api slash config dot d
slash five zero dash rate dash limit dot yaml
Понятной диктовку делают три приёма. Числа по цифрам: 50 лучше как five zero, а не fifty — fifty и fifteen на плохой связи неразличимы. Буквы через слова-подсказки: d as in delta, b as in bravo; учить формальный фонетический алфавит не обязательно, годится любое очевидное слово. Расширения целиком: dot yaml произносят «дот я́мл», а если не поняли — y a m l по буквам.
Вторая строка сложнее, потому что в ней флаги:
docker compose, dash f, docker dash compose dot prod dot yml,
up, dash d, dash dash scale, worker equals three
Здесь добавляется четвёртый приём: объясняй флаги, а не только диктуй. Фраза dash d, that is detached mode даёт собеседнику смысл — и шанс заметить, что он набрал не то.
Обратная задача — ошибку диктуют тебе, и её надо записать:
Error: connection to redis:6379 refused after 3 retries
caused by: dial tcp 10.0.4.17:6379: i/o timeout
Дальше — фразы для уточнения. Выучи их наизусть: они снимают почти все проблемы на созвоне, и стоят пяти минут заучивания.
- Sorry, could you spell that? — «продиктуй по буквам».
- Let me read it back to you. — «давай я повторю, что записал» (лучший приём вообще: ты проговариваешь, собеседник подтверждает).
- Is that one word or two? — «это одно слово или два?» (для rollback против roll back).
- Is it a hyphen or an underscore? — вопрос, который экономит десять минут отладки.
- Just to confirm: lowercase or uppercase? — про регистр.
- Can you paste it in the chat? — самый честный вариант. Для длинных путей он ещё и самый профессиональный: голосом такое передавать просто неэффективно.
Последний пункт важен психологически. Просьба скинуть в чат — не признак слабого английского, а нормальная инженерная практика. Во время инцидента точность важнее демонстрации навыков, и все за столом это понимают.
Типичные ошибки
1. Калька с русского в устойчивых сочетаниях
Русская фраза переводится по словам — и получается грамматически верное, но чужеродное предложение. Носитель поймёт и виду не подаст. Звучать при этом будет странно:
| Калька | Естественно |
|---|---|
| make a mistake in the code | there is a bug in the code / I made a typo |
| do a mistake | make a mistake (но в коде — bug, не mistake) |
| I have a question to you | I have a question for you / about the API |
| deploy on production | deploy to production |
| merge the branch to main | merge the branch into main |
| I am agree | I agree |
| please, fix it | please fix it (без запятой) |
| How do you think? | What do you think? |
| It is not working correct. | It is not working correctly. |
Отдельно про mistake. По-русски «ошибка» — слово-универсал, а в английском их три, и смыслы разные. Bug — дефект в программе. Error — ошибка выполнения или сообщение о ней. Mistake — ошибка человека. Одна фраза укладывает все три на свои места: The bug causes a 500 error; it was my mistake, I forgot the null check.
2. Произносить частотные термины неправильно
Разовая оговорка не значит ничего. А вот систематическое «кьюэ» вместо «кью» заставляет собеседника каждый раз достраивать смысл, и весь разговор идёт вязко. Чинится дёшево: возьми пять самых частотных лично для тебя терминов — почти наверняка там будут cache, queue, schema, null, tuple, — послушай их в онлайн-словаре и повтори вслух. Десять минут, а эффект слышно сразу.
3. Неправильные предлоги в частотных фразах
Плохо: I have a question to you about the rate limiter.
Хорошо: I have a question for you about the rate limiter.
Плохо: We depend from the auth service.
Хорошо: We depend on the auth service.
Плохо: The service listens the port 8080.
Хорошо: The service listens on port 8080.
Предлоги — самая механическая часть языка. Логики в них нет, вывести правильный предлог из смысла невозможно, он запоминается только вместе с глаголом. Отсюда приём: заводи в заметках не отдельные слова, а сочетания. Не depend, а depend on. Не listen, а listen on a port.
4. Переводить термины там, где нужен оригинал
Обратная крайность — старательно переводить на русский то, что в профессиональной речи давно живёт в оригинале. В смешанной команде «объединить ветку» и «толкнуть в удалённый репозиторий» вызывают больше непонимания, чем «смёржить» и «запушить». Термин — ярлык, а не описание. Когда ярлык знают все, менять его вредно.
Есть и зеркальная беда — не знать оригинала вовсе. Всю карьеру говорил «откат», ни разу не видел rollback — и на англоязычном созвоне слово просто не опознаётся на слух. Разумная стратегия: держать обе формы. Русскую для локальных коллег, английскую для документации и международных команд.
Итог
Технические слова собираются из деталей, и знание деталей выгоднее любых списков. Двенадцать префиксов (de-, re-, un-, non-, over-, under-, pre-, post-, sub-, multi-, inter-, mis-) и девять суффиксов (-able, -less, -ful, -er, -tion, -ment, -ize, -ify, -ness) закрывают большинство производных слов, которые тебе попадутся.
Пары «глагол → существительное» регулярны, но за орфографией нужен глаз: глагол в два слова (roll back, back up, set up), существительное в одно (rollback, backup, setup). Сокращения вроде repo, config, env, prod — норма рабочей речи, а не сленг. Произношение и умение читать символы вслух окупаются на первом же созвоне: cache как cash, queue как буква Q, путь — через slash, dot, dash и underscore, числа по цифрам.
Дальше в курсе из этих кирпичей начнём строить. Как писать коммиты и описания пулл-реквестов, которые читаются с первого раза. Как формулировать замечания на код-ревью так, чтобы их принимали, а не спорили. И как держаться в англоязычном чате и на созвоне, не теряя нити разговора.