Недавно я отправился с семьей в поход, и мне стало очень скучно. Прогулки на свежем воздухе — это не совсем мое (поэтому я решил, что программирование и математика мне подходят больше, чем, скажем, работа инструктором в спортзале), поэтому, естественно, я взял с собой компьютер и телефон. Конечно, у меня не было ни сервиса, ни Wi-Fi, а это означало, что я был ограничен в своих возможностях. Единственным настоящим развлечением, которое у меня было, была загруженная музыка и текстовый редактор.

Много кода, написанного в настоящее время, требует подключения к Интернету. Создаете веб-сервер? Интернет. Разрабатываете обширную нейронную сеть? Интернет. Сделать приложение? Интернет. Создание веб-сайта? Интернет.

Многие из инструментов, которые делают обычные разработчики, требуют подключения к Интернету. Кроме того, я предполагаю, что есть некоторые разработчики, которые — такие как я   предпочли бы провести выходные дома, а не позволить солнцу коснуться своего лица, или просто хотели бы провести некоторое время, занимаясь чем-то продуктивным.

Если вы относитесь к такому типу людей, то эта статья (может) вас заинтересовать, если вы (можете) оказаться в такой ситуации. Если интернет-изоляция для вас не проблема, то, пожалуйста, не рекомендуйте мне больше выходить на улицу, потому что — и это может быть шоком — мне все равно. Вообще.

Без лишних слов, ниже приведены 5 проектов, когда вы работаете в автономном режиме.

Базовый калькулятор

Я смотрел на свой телефон, думая о том, что я мог бы сделать. Приложение-калькулятор — одно из немногих функциональных приложений на вашем телефоне. Я думал, что сделаю простой калькулятор на терминале (например, bc), который мог бы выполнять сложение, вычитание, умножение, деление и возведение в степень в соответствии с порядком операций. Кроме того, я хотел, чтобы он мог вычислять выражения в скобках. Немного подумав, я создал простейший калькулятор на C.

Программа поиска файлов

Поскольку я не могу получить доступ к каким-либо данным в облаке, мне нужно работать только с файлами на моей локальной машине. Так что, по логике вещей, создание программы для поиска файлов имеет смысл. Я хотел, чтобы это было просто, поэтому я решил игнорировать символьные файлы, символические ссылки и блочные устройства. Поскольку большинство мелочей файловой системы убрано, нам нужно рассмотреть только каталоги и обычные файлы. Если мы встречаем каталог, то ставим все содержимое каталога в очередь. В противном случае, если мы встречаем обычный файл, мы проверяем, соответствует ли имя обычного файла поисковому запросу пользователя. В небольшом коде Я сделал сырую программу для поиска файлов (опять же, на C).

Любой инструмент UNIX

Существует множество инструментов UNIX: less, grep, du, cat, rm, ld и ps, и это лишь некоторые из них. Если вы работаете в системе UNIX, выберите инструмент UNIX для воссоздания. Как правило, большая часть знаний, необходимых для воссоздания этих инструментов, может быть найдена в нескольких справочных страницах или с небольшим количеством базовых знаний в области программирования. Если вы работаете в Windows, то эта задача может быть особенно сложной. Я решил сделать базовую версию grep (с подсветкой).

Играйте с лабиринтами

Генерация случайных лабиринтов на удивление увлекательна и представляет собой настоящий алгоритмический вызов. Единственная причина, по которой я даже предлагаю это, — это книга Джеймиса Бака Лабиринты для программистов, захватывающая книга (которую мне следовало взять с собой, когда я был в походе) об алгоритмах лабиринта. Книга полностью написана на Ruby, но ее можно написать на любом языке. Я написал некоторый базовый код для создания лабиринта произвольного размера в соответствии с пользовательским вводом и вывода его на экран терминала с использованием алгоритма двоичного дерева (Отказ от ответственности: хорошо, поэтому я не писал этот код , автор книги сделал, но не в этом дело). Если вы когда-нибудь чувствуете себя нетворческим (как я, когда думал о проекте), то я бы порекомендовал просто прочитать эту книгу. До сих пор это было довольно занимательно.

Воссоздайте основные функции языка программирования

Другой проект заключается в воссоздании основных функций выбранного вами языка программирования на этом языке программирования. Я не воссоздавал malloc() и calloc() как таковые, но я реализовал простой, глупый вариант двух функций, который выделяет память из фиксированного пула памяти. Конечно, есть много других функций, которые вы можете воссоздать: срезы, векторы, списки, словари, даже циклы for и while. Выбор зависит только от того, что вам кажется интересным.

Вывод

Опять же, все проекты, которые я делал выше, доступны в этом репозитории. Некоторые из них, очевидно, можно улучшить. Например, калькулятор может иметь собственный графический интерфейс (может быть, не на C, а на другом языке) или обрабатывать более сложные функции, такие как sin и квадратный корень. Программа поиска файлов является однопоточной и синхронной. Может ли асинхронный/поточный подход быть быстрее? Программа alloc — действительно тупая реализация системы распределения памяти. Нет даже способа освободить память. Может быть, двоичная куча (или куча Фибоначчи) была бы лучше, чем линейный фиксированный пул памяти? Список улучшений бесконечен.

Конечно, есть еще много-много офлайн-проектов, которые вы можете реализовать. Pong, Chess, библиотека синтаксического анализа JSON или даже совершенно новый язык программирования — все это примеры автономных проектов, к которым вы можете приступить.

Занимались ли вы какими-нибудь интересными проектами в оффлайне? Есть какие-нибудь мысли? Мнения? Обеспокоенность? Идеи? Напишите комментарий ниже! 😁