Эта история изначально была опубликована на sazak.io.

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

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

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

вы только начали изучать программирование…

…и ищем идеи для проектов. Вероятно, вы немного знаете Python или JavaScript, или, может быть, C/Go, и хотите погрузиться в интересные вещи из реальной жизни.

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

  1. Вероятно, у вас нет технического образования, необходимого для создания сложной системы. Будь то создание браузера, поисковой системы, приложения для социальных сетей…. Эти проекты кажутся простыми со стороны. «Я имею в виду, вы просто вводите текст для поиска, и он перечисляет несколько веб-сайтов», да, но на заднем плане слишком много движущихся частей и некоторые довольно сложные алгоритмы для новичка. Для браузера вам необходимо написать парсер JavaScript; для поисковой системы нужно как минимум разбираться в графиках и так далее.
  2. Возможно, у вас нет возможности читать чужой код. Создание сложных вещей требует умения (да, это своего рода навык) читать длинные строки производственного кода, чтобы увидеть, как другие инженеры решали аналогичные проблемы. Кроме того, вы не всегда можете найти сообщения в блогах, видео или документы, объясняющие «как сделать X» после определенного уровня сложности задачи.

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

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

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

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

Идеальный! Теперь вы готовы немного активизировать свою игру и начать изучать и применять основы CS в своих программах, чтобы достичь более высокого уровня сложности:

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

На этом этапе вы можете добавить больше функциональности к программам, которые вы создали до сих пор, добавив динамизма, реализовав:

  • Обновление данных программы во время выполнения
  • Не строго определенные взаимодействия с пользователем

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

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

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

вы свободно владеете языком программирования и знаете основы теории cs

Это время, когда вам нужно начать изучать более сложные вещи. Такой как:

  • Хранение и получение данных приложения. Как и когда использовать файлы JSON/CSV, базы данных SQL, кеши, очереди сообщений, алгоритмы сериализации данных и т. д.
  • Межпроцессное взаимодействие. Именно здесь практически начинаются распределенные системы. По мере увеличения сложности вам понадобится, чтобы ваши программы разговаривали друг с другом.
  • Не только базовые структуры данных и алгоритмы. В эту категорию можно помещать графики, попытки, B+-деревья и фильтры Блума. Эти структуры данных используются внутри браузеров, баз данных, поисковых систем и многих более сложных систем.

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

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

Вот некоторые практические ресурсы и идеи проектов:

  • Попробуйте прочитать исходный код Python. Официальная реализация выполнена на C, и это хорошее упражнение, чтобы попытаться понять, как реализованы собственные типы данных (int, list, dict и т. д.), как они управляют памятью и т. д.
  • Если вы свободно владеете Python и можете хотя бы немного программировать на C, попробуйте написать расширение Python
  • Попробуйте разработать и реализовать свой собственный язык программирования. Это интересный проект, потому что до сих пор вы были на стороне потребителя языков (если вы не участвовали в разработке языка программирования), а теперь вы будете на стороне создателя! Интерпретаторы и компиляторы — это сложные темы информатики, но вам не нужно знать их подробно, чтобы реализовать простой языковой процессор.
  • Создайте механизм блога. Вы можете разработать собственный генератор статических сайтов 3 и начать вести блог, используя собственный движок блога. Проверка некоторых популярных генераторов статических сайтов, таких как Hugo и Zola, может помочь определить, какие функции следует реализовать в вашем движке.

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

вот и все!

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