Как программировать без интернета
Мы живём в тяжёлое время, когда очень велика вероятность остаться без связи со всемирной сетью. Какие-то страны вводят туда доступ по паспорту, другие ограничивают интернет полностью, прикрываясь липовыми предлогами. Но, как бы то ни было, такая шиза происходит везде. А если не происходит, то это не имеет значения, потому что скоро мы все умрём от ядерного взрыва.
Но если вы не умерли и вам нечем заняться в своём бункере или землянке глубоко в лесу, то специально для вас я придумал отличное занятие — программирование.
Прелесть в том, что вам никогда не будет скучно. Хочешь поиграть во что-нибудь новенькое? Создай игру сам. Она будет ровно такая, как ты хочешь, до последней детали. И плевать, что скорее умрёшь от старости, чем закончишь — процесс создания игры может быть интереснее игрового процесса.
Часть 0. Предупреждение
Сразу предупрежу, что мои советы вам не помогут, если у вас клоунская ОС вроде Windows — живите в проклятом мире, который сами и создали.
Здесь мы будем пользоваться Linux.
Часть 1. Лишения
Давайте начнём с того, что оценим ситуацию и определим, на какие интернет-сервисы мы сильно опираемся. Дальше подумаем, как обзавестись этими сервисами локально или как вообще от них отказаться.
Итак, что мы используем регулярно:
- Пакетные менеджеры;
- Поисковые системы;
- Документация;
- Обучающие материалы;
- Форумы (StackOverflow, Reddit);
- Нейросети;
- GitHub / GitLab.
Ничего из этого не будет, если вы самостоятельно не позаботитесь об этом. Альтернатива — учиться жить без этого или…
Часть 2. Скачать весь интернет
Это может показаться шуткой, но если у вас есть лишние пару терабайт, то всё становится довольно реализуемым. Особенно, если чутка умерить свои аппетиты — ограничиться программами и текстом, и обойтись без видео с YouTube.
Пакеты
Скорее всего, стандартные библиотеки для ваших языков уже должны быть у вас на компьютере. Скачивать придётся всё нестандартное и необязательное (в большинстве случаев). И, хотя это возможно, сделайте ментальную пометку, что у вас впереди вся жизнь без интернета:
Если кусок софта недоступен, но критечески важен — напишите его сами.
Зеркало пакетов для линукса
Если вы пользовались Linux, то знаете, насколько удобно сделаны пакетные мендежеры. Особенно, если сравнивать с Windows.
Когда вам нужно установить какую-то программу, вы просто пишете в терминале команду для установки. Всё. Ну или делаете то же самое в графическом интерфейсе. Это как Microsoft store, но здорового человека.
И вот эти программы скачиваются со специальных серверов, которые называют зеркалами (mirrors). Прелесть в том, что вы можете скачать зеркало целиком. А ещё вы можете захостить своё зеркало. И делается это довольно просто.
Инструкцию можно почитать на ArchWiki.
Если у вас не Arch, то просто погуглите, как это делается для вашего дистрибутива.
Зеркало PyPi и NPM
Схожим образом вы можете сделать копию и других хранилищ пакетов. Например, PyPi для Python или NPM для JavaScript.
Тут ссылок на конкретные инструкции не будет, потому что чаще всего эти пакеты не стоят того. Особенно если речь про NPM. Но считайте, что про саму возможность я вас проинформировал.
Неплохой вариант: просто скачать исходники самых используемых вами библиотек и копировать их в ваши проекты. Программисты на Си живут так до сих пор.
Документация
В этом подразделе мы смотрим, где можно скачать информацию. Инструкции по использованию и поиску будут дальше.
Статические сайты
Некоторые сайты с документацией используют репозитории как базу данных.
Хороший пример — этот блог. Я просто пишу тексты в .md-файлах,
а потом генерирую на их основе страницы с помощью
@laranatech/electrostatic. Идея
не новая, есть куча движков, которые делают то же самое. И часто контент для
таких проектов просто выкладывают на GitHub.
Вот несколько хороших примеров:
- MDN. Хороший референс по веб-разработке.
- doka.guide. Сборник обучающих материалов.
- Vue
- larana.tech
- kucheriavyi.ru
Клонируйте эти репозитории локально (желательно shallow-копии, чтобы не тянуть мусор) и наслаждайтесь документацией, которая всегда под рукой.
А ещё вы можете самостоятельно погулять по вашим любимым документациям, найти там ссылку на GitHub и клонировать содержимое.
ArchWiki
Одна из самых популярных площадок по Linux. Велик шанс, что вы найдёте ответ на свой вопрос именно там, даже если у вас не Arch, btw. При этом скачать проект можно с помощью всего одной команды (на Arch-based системах):
1sudo pacman -Syu arch-wiki-docs
После установки файлы будут лежать по адресу: /usr/share/doc/arch-wiki.
Есть альтернативный вариант: скачать вики-движок и запускать через него. Но это уже сами разберётесь.
StackOverflow (веб-архив)
Некоторые проекты можно скачать через веб-архив. Разберёмся на примере StackOverflow. Перейдите по ссылке, там найдите в правом сайдбаре ссылку Show all. Вы заметите, что файлов очень много. Это потому что там есть форумы не только по программированию, но и по аниме и вегетарианству.

Думаю, вы сможете самостоятельно определить, какие файлы вам нужны. Либо скачайте вообще всё. Так, на всякий случай. У вас же есть лишние 100 GB под всё это?
На момент написания статьи архивы были за 2024 год.
Wikipedia
Для этого инструкция есть прямо на сайте Wikipedia.
Офлайн-карты
До этого мы с вами скачали всяких приколов для работы на личном компьтере. Но, скорее всего, вам ещё придётся ездить на работу в офис. А вы думали, что сможете сидеть не удалёнке без интернета?
Чтобы успешно добраться до офиса, нужна карта. Тут я посоветую две вещи:
- Запоминайте дорогу перед выходом. Прям открывайте карту, изучайте названия улиц, количество поворотов и т. д. Это полезно и с ограниченным интернетом, а с отсутствующим и подавно.
- Скачайте офлайн-карту своего региона. Это можно сделать и в условной Яндекс.Карте, но лучше воспользоваться какой-нибудь открытой альтернативой.
Вот примеры:
Карта мира весит около 160 GB (или 80 GB в формате PBF).
Книги
Не забудьте скачать (легально, конечно же) все книги и спецификации (data sheet), которые вам нужны сейчас или могут понадобиться. Только не забудьте, что считается только файл на вашем компьтере. Если книга в каком-то сервисе или условной читалке от Amazon, то вы им не владеете.
Уже бывали случаи, когда у людей отзывали купленную книгу. Без интернета, конечно же, отобрать у вас что-то будет сложнее. Но некоторые приложения блокируют доступ, если вы давно не подключались к сети.
Многие авторы бесплатно выкладывают электронные версии своих книг на GitHub.
Инструменты разработки
Это не информация как таковая, но советую вам скачать все необходимые инструменты заранее. И тут могут быть некоторые приколы, потому что современные IDE могут превратиться в тыкву, если у вас нет подключения к интернету, потому что так теряется связь с LLM.
Я, конечно, утрирую, но мне кажется, скоро это перестанет быть шуткой.
Проверьте, будет ли работать ваш инструмент, если отрубить интернет. Нет? Тогда стоит подумать о замене. Попробуйте Neovim. Мне понравилось и я даже написал об этом отдельный пост.
Другой часто используемый инструмент — git. Его можно просто установить на два компьютера и использовать по SSH. Но если вы привыкли к графическим интерфейсам, попробуйте развернуть GitLab или аналог.
Часть 3. Интернета уже нет
Пакетные менеджеры
Если вы не успели ничего скачать, то поздравляю — шанс упущен, больше ничего не сделаешь. Если скачано, то советы по использованию были выше.
Всё, что вам остаётся, это изучить уже установленные пакеты и программы. Для этого
запустите команду ls /bin — так вы выведете в терминал все бинарные файлы.
Где-то смысл программы можно угадать по названию, а где-то придётся запускать
команду с флагом --help. В большинстве случаев вы получите справку про эту программу.
Например, так можно узнать, что:
- Просто
lsвыводит не все файлы, а только публичные. Названия скрытых начинаются с символа.(точка) и вывести их можно с помощьюls -a. ls -lвыведет файлы в формате таблицы, но размеры будут указаны в байтах.- Если хочется человеко-читаемый формат размеров, то нужно прописать
ls -lh.
Как же повезло, что исполняемых файлов в директории /bin у меня целых 4645.
Учитывая, что у меня теперь нет источников новой информации, у меня будет куча
времени, чтобы изучить их все.
Но если вдруг они закончатся, то всегда можно ввести комнаду echo $PATH — она
выведет все директории, где ваш терминал допольнительно будет искать исполняемые
файлы. Вот мой список:
1/home/evgenii/.local/bin
2/home/evgenii/.local/share/pnpm
3/home/evgenii/.nvm/versions/node/v22.14.0/bin
4/home/evgenii/.cargo/bin
5/usr/local/bin
6/usr/bin
7/usr/lib/jvm/java-11-openjdk
8/home/evgenii/Android/Sdk/emulator
9/home/evgenii/Android/Sdk/platform-tools
10/usr/bin/go
11/usr/lib/go
12/home/evgenii/go/bin
13/home/evgenii/bin
14/usr/local/sbin
15/var/lib/flatpak/exports/bin
16/usr/lib/jvm/default/bin
17/usr/bin/site_perl
18/usr/bin/vendor_perl
19/usr/bin/core_perl
20/usr/lib/rustup/bin
Да, обычно это единая строка, где адреса разделены двоеточиями (:), но я заменил
их на переносы строк для удобства чтения.
Офтоп: Сила Bash
Небольшое отступление, насколько удобным становится использование терминала, если
потратить немного времени на изучение Bash. Например, количество программ я
подсчитал с помощь команды ls /bin | wc.
Как это работает:
ls /bin, как вы уже могли догадаться, выводит на экран список файлов. Но разве у обычной CLI-программы есть прямой доступ к экрану? Разве она умеет работать со всеми видами экранов? Нет. Вместо этого она передаёт какие-то данные в стандартный вывод (stdout). Если мы этот вывод не перехватим, то оболочка терминала выведет его на экран.- С помощью символа
|(pipe) мы показываем, что хотим перенаправить вывод в следующую команду. В нашем случае —wc wc(word count) принимает вывод, считает количество слов и выводит результат на экран.
При желании, мы можем объединять в последовательность какое угодно количество команд.
Ещё один пример — как я отформатировал вывод переменной $PATH —
echo $PATH | tr ":" "\n".
Или можно отправить запрос с помощью curl, а потом вывести его в более читаемом
виде, если передать вывод в команду jq:
1> curl example.com/healthcheck
2{"alive": true, "uptime": 102931293}
3
4> curl example.com/healthcheck | jq
5{
6 "alive": true,
7 "uptime": 102931293
8}
Pipe — только один из примеров удобства Bash. Советую с остальными разобраться самостоятельно, потому что статья не об этом.
Документация
А вот с документацией ситуация поинтереснее, потому что велика вероятность, что у вас уже есть хоть что-то на компьютере, даже если вы ничего специально не скачивали.
Локальная документация
А помните, мы скачали ArchWiki и я сказал, что файлы лежат в директории
/usr/share/doc/arch-wiki/? Как вы могли догадаться, в родительской директории,
то есть в /usr/share/doc/ лежит и другая документация.
Вы можете открыть ссылку file:///usr/share/doc/ в браузере и убедиться в этом
самостоятельно.

К сожалению, не всегда там лежит что-то содержательное. Например, у меня там есть директория blender, в которой только общее описание ПО и файлы с лицензиями. Особой ценности это для меня не представляет: никаких обучающих материалов или референса API.
А ещё у вас наверняка могла закрасться мысль, что искать нужную информацию в
этом списке файлов будет сложно. Но эта проблема испаряется, если вы умеете
пользоваться командой grep.
Всё очень просто:
- Открываете директорую, в которой нужно искать.
- Вводите команду
grep -rn "search query", в которой флаг-rозначает, что мы будем искать рекурсивно, а флаг-n, что мы хотием видеть номера строк. - По желанию можно добавить флаг
-i, чтобы поиск был регистронезависимый. А ещё можно пользоваться регулярными выражениями.
В итоге мы получим вот такой вывод:
1> grep -rn "Почему я не люблю ИИ"
2posts/2026-03-02-ai-hate.html:6: <title>Почему я не люблю ИИ | Блог Жени Кучерявого</title>
3posts/2026-03-02-ai-hate.html:25: <h1 id="почему-я-не-люблю-ии">Почему я не люблю ИИ</h1>
4posts/index.html:52: <b>Почему я не люблю ИИ</b>
Дальше нужный файл просто можно открыть в браузере и всё. Хотя можно обойтись и силами терминала. Например:
cat filename.htmlвыводит файл целиком, но без подсветки кода и без удобного скроллинга.less filename.htmlпозволяет скроллить удобнее и пользоваться биндингами Vim.bat filename.htmlпочти какless, но ещё и с подсветкой синтаксиса. Хотя эту программу придётся установить отдельно.w3m filename.html— целый браузер в терминале, хотя не всё отображает корректно. И тоже придётся установить отдельно.
man
Немногим ранее я говорил, что многие команды поддерживают флаг --help. А ещё есть
ещё и отдельная команда man, которая выводит справку для других команд. Кроме того,
для man можно уточнить секцию, из которой мы хотим получить информацию:
- Executable programs or shell commands
- System calls (functions provided by the kernel)
- Library calls (functions within program libraries)
- Special files (usually found in /dev)
- File formats and conventions, e.g. /etc/passwd
- Games
- Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7), man-pages(7)
- System administration commands (usually only for root)
- Kernel routines [Non standard]
Например, man printf выведет информацию для команды, а man 3 printf — для
функции из стандартной библиотеки Си.
Чтобы посмотреть более подробную инструкцию, введите в терминале
man man.
Go
Как мы выяснили, документацию для языка Си можно читать через man. Но что если
язык чуть более хайповый, вроде го? Тут нам поможет команда go doc. Если ввести
её просто так, то она попробует построить документацию для текущей директории. А
если мы хотите узнать что-то про стандартную библиотеку, то просто нужно уточнить
название пакета:
1> go doc path
2
3package path // import "path"
4
5Package path implements utility routines for manipulating slash-separated paths.
6
7The path package should only be used for paths separated by forward slashes,
8such as the paths in URLs. This package does not deal with Windows paths with
9drive letters or backslashes; to manipulate operating system paths, use the
10path/filepath package.
11
12var ErrBadPattern = errors.New("syntax error in pattern")
13func Base(path string) string
14func Clean(path string) string
15func Dir(path string) string
16func Ext(path string) string
17func IsAbs(path string) bool
18func Join(elem ...string) string
19func Match(pattern, name string) (matched bool, err error)
20func Split(path string) (dir, file string)
Чтобы почитать инструкцию по конкретному методу из какой-либо библиотеки, нужно просто уточнить это в запросе:
1> go doc path.clean
2
3package path // import "path"
4
5func Clean(path string) string
6 Clean returns the shortest path name equivalent to path by purely lexical
7 processing. It applies the following rules iteratively until no further
8 processing can be done:
9
10 1. Replace multiple slashes with a single slash.
11 2. Eliminate each . path name element (the current directory).
12 3. Eliminate each inner .. path name element (the parent directory) along
13 with the non-.. element that precedes it.
14 4. Eliminate .. elements that begin a rooted path: that is, replace "/.."
15 by "/" at the beginning of a path.
16
17 The returned path ends in a slash only if it is the root "/".
18
19 If the result of this process is an empty string, Clean returns the string
20 ".".
21
22 See also Rob Pike, “Lexical File Names in Plan 9 or Getting Dot-Dot Right,”
23 https://9p.io/sys/doc/lexnames.html
Книги
Благо, часть информации всё ещё доступна в бумажных книгах. Согласен, звучит архаично, но в такие уж времена мы живём. У меня, например, постоянно лежит на столе карманный справочник по Linux.
Часть 4. Естественный интеллект
Финально хочется сказать, что сложные времена создают сильных котят. И хотя мы многого лишаемся и обрекаемся себя на тёмные века, это не убьёт любопытство и целеустремлённость, граничущую с безумием.
Перестану ли я быть вольнодумцем без интернета? Наоборот.
Перестану ли я быть суперзлодеем? Наоборот.
Перестану ли я стремиться к автономности? Наоборот.
Вся эта ситуациям — отличный повод для саморазвития, о котором никто не просил.
Часть 5. Конец?
Нет, не конец. Есть и альтернативные способы связи, которые сложнее ограничивать. Возможно, скоро будет текст и о них.
А ещё советую подумать про self-hosting. Так вы сможете запустить на отдельном компьютере нужные сервисы (зеркало пакетов, нейронку) и получать к ним доступ по сети. Да, сеть будет чисто локальная, но это уже хоть что-то.