Продвиньте свое понимание за пределы теории и абстракций с этими потрясающими проектами

Сегодняшнее программирование основано на огромном стеке абстракций и дружественных интерфейсов, которые скрывают внутреннюю работу технологии, которую мы используем ежедневно. Только подумайте, как бездумно мы используем IDE для написания нашего кода, а затем легко компилируем / запускаем его и получаем понятные сообщения об ошибках в случае, если что-то пошло не так. Однако всего несколько десятилетий назад все было по-другому. В то время программирование было непростой задачей, которую можно было решить за пару месяцев.

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

Вы определенно можете, но нужно ли? Знакомство с внутренней работой технологий, которые мы используем, - это первый шаг к овладению ими. Вот несколько причин, чтобы запачкать руки и расширить свои знания:

  • Улучшение навыков отладки. Сколько раз появлялась случайная ошибка, и вы не понимали, чем она могла быть вызвана? И нет, Stack Overflow не всегда дает четкий и прямой ответ. Изучение того, как все работает, поможет вам в процессе отладки.
  • Инстинкт оптимизации. Понимание того, как что-то работает, выявляет его слабые и сильные стороны. Вы, естественно, будете знать, что делать, а чего избегать. Ваш первый подход часто оказывается лучшим.
  • Участвуйте в проектах, которые важны для вас. Скажем, в используемом вами программном обеспечении есть функция, которую вы бы хотели. Почему бы не реализовать это самостоятельно и не помочь сообществу? Если вам это нужно, скорее всего, это сделает и кто-то другой.
  • Помощь сообществу. Stack Overflow - это то, что происходит из-за всех тех людей, которые глубоко копнули в стеке и освоили свой бизнес. Эти эксперты должны откуда-то приходить, и вы могли бы им стать.

Актуальные проекты

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

Собрать компилятор

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

Сборка компилятора будет включать:

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

Создайте интерпретатора

Интерпретаторы частично похожи на компиляторы. В них задействованы многие из тех же навыков:

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

Ожидайте, что этот проект будет несколько проще, чем компилятор, но все равно будет непростой задачей. Мне потребовалось несколько месяцев, чтобы изучить и создать полнофункциональный интерпретатор для нового языка.

Создайте сетевой прокси

Сетевое программирование и программирование сокетов никогда не пропадут даром.

Благодаря этому проекту вы узнаете о:

  • Программирование сокетов, а также такие понятия, как адреса и порты.
  • Сетевые протоколы, например HTTP или HTTPS. Вы изучите структуру запроса и ответа с их заголовками и параметрами.
  • Threading для обработки нескольких одновременных подключений.

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

Система управления базами данных (СУБД)

Базы данных повсюду вокруг нас. Мы регулярно используем их во многих приложениях. Но сколько разработчиков на самом деле знают, что стоит за API или инструментами, которые позволяют нам взаимодействовать с базами данных? Или что внутри файла базы данных?

Чтобы реализовать СУБД с нуля, вам необходимо знать:

  • SQL, конечно.
  • Интерпретаторы, если вы решите также реализовать синтаксический анализатор SQL и исполнитель запросов.
  • Файловая структура базы данных также обязательна для фактического хранения данных.

Этот проект может быть не очень сложным, но если вы решите реализовать синтаксический анализатор SQL самостоятельно, ожидайте, что это займет намного больше времени, так как вам придется кодировать функции, по крайней мере, пригодного для использования надмножества SQL. В этом случае это может занять до месяца.

Библиотека машинного обучения

Как и в случае с компиляторами, создание библиотеки машинного обучения с нуля может показаться очень пугающим. Это определенно непросто и требует больших математических знаний.

В ходе этого процесса вы узнаете о:

В данном случае мне не хочется указывать время, поскольку я когда-то начал создавать такую ​​библиотеку, но на самом деле так и не завершил ее и не достиг выдающейся вехи.

Процедурная генерация мира

Создайте игру, будь то 2d или 3d, мир которой основан на процедурной генерации. Возьмите Minecraft или Terraria в качестве примера и реализуйте различные биомы, структуры и все, что вам приходит в голову. Вы когда-нибудь задумывались, как это делается?

В этом путешествии вы узнаете:

  • Понятие шума и как он создается.
  • Как комбинировать карты шума для создания объектов мира.
  • Вам нужно будет создать некоторый алгоритм для обработки различных матриц параметров, таких как температура, влажность, высота и другие, а затем объединить их в окончательную матрицу карты мира.
  • Загрузка фрагментов и сохранение - еще один навык, который вам придется освоить, поскольку ресурсы ЦП и ОЗУ ограничены.

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

Базовые социальные сети

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

Это путешествие будет охватывать:

  • Работа с веб-сервером и, возможно, с некоторыми веб-фреймворками.
  • Создание и управление учетными записями пользователей и аутентификация.
  • Создание и использование какой-то базы данных.
  • Вы должны обрабатывать и отображать текстовые сообщения, изображения и видео.
  • Для этого требуется минимально удобный пользовательский интерфейс.
  • Вы можете использовать шифрование в приватных чатах.

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

Заключение

Не говорите о своем бизнесе поверхностно. Погрузитесь во внутреннее устройство технологии, с которой вы работаете, чтобы по-настоящему стать мастером своего дела. Программирование - это путешествие, а не пункт назначения. Всегда есть возможности для улучшения.

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

Такие проекты - это вложение, которое стоит вашего времени и усилий. Все, что нужно, - это выбрать один и просто начать: вы узнаете все необходимое на работе.

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

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

Спасибо за чтение!