Проекты — это лучший способ учиться.
Создайте что-нибудь сами, и вы узнаете намного больше, чем написано в книгах и руководствах. При выполнении проектов легче запоминаются концепции и приходит понимание, что делать, когда что-то идет не так.
В интернете есть много идей проектов для начинающих разработчиков. Опытным они тоже пригодятся!
Вот список из 20 проектов для развития навыков разработки ПО.
- Используйте библиотеку для создания сервера авторизации OAuth 2. Реализуйте потоки согласно спецификации OAuth.
- Извлеките данные со страниц веб-ресурсов, очистите и загрузите в инструмент анализа данных. Затем создайте визуализации, например облака́ слов из статей «Википедии».
- Создайте Dockerfile и docker-compose.yml для веб-приложения с базой данных, слоем кеширования, сервером nginx/Apache, API серверной части и клиентской частью JavaScript.
- Напишите скрипт bash/zsh для обзора каталогов, перебора файлов, выполнения команд в этих файлах и с возможностью принимать аргументы и флаги параметров.
- Разработайте клиентский компонент для открытия всплывающего окна, приема данных от пользователя и выдачи информации на главную страницу, а также
iframe
, встраиваемый на сайт для получения с него данных. - Установите куки защищенного сеанса (только для сервера) в качестве JWT с информацией о разрешенных действиях пользователя.
- Реализуйте передачу конфиденциальной информации между двумя API, используя для подписи данных HMAC.
- Сделайте решатель судоку, используя конкурентность/потоки для быстрого заполнения матрицы.
- Реализуйте очередь с возможностью удаления слева и справа, используя ручное выделение памяти на низкоуровневом языке.
- Запустите регрессионные модели по данным переписи для прогнозирования численности населения.
- Реализуйте на Raspberry Pi простой веб-сервер для включения/выключения света с помощью API-запроса.
- Напишите и оркестрируйте в Airflow задачи по извлечению новых твитов (используя расписание или команду) одновременно для разных дескрипторов Twitter. Сохраните твиты в хранилище данных. Бонус — добавление этапа анализа «отображение-свертка».
- Создайте базу данных временных рядов и API для приема и хранения логов из приложения. Обрабатывайте одновременные запросы чем-то вроде очереди. Для быстрого поиска реализуйте Elasticsearch.
- Напишите и установите собственную программу для командной строки. Добавьте ее в
$PATH
. Бонус — размещение программы в сети и поддержкаwget
,curl
или дажеbrew install
. - Разверните любой из этих проектов — или их все — у крупного облачного провайдера (AWS, GCP, Azure, Digital Ocean и др.) и узнайте о совместной работе различных облачных служб, предоставлении ими виртуальных вычислительных узлов и т. д. Настройте в облаке CI/CD. Но это может быть дорого, поэтому обязательно все изучите!
- Пишите тесты для приложений: модульные, интеграционные и сквозные. Используйте заглушки, параметризацию и запускайте небольшие, быстровыполняемые тесты на сервисах непрерывной интеграции CircleCI, TravisCI, Jenkins и др.
- Изучите PostGIS и запускайте SQL-команды с геопространственными данными. Формат возвращаемых данных — GeoJSON. Для отображения результатов подойдет MapboxJS.
- Используйте для набора данных GraphQL API. Или добавьте в проект клиентской части слой данных Apollo, чтобы помещать в буфер запросы к REST API.
- Создайте средство ИИ для беспроигрышной игры в крестики-нолики с простым алгоритмом минимакса. Протестируйте API программно со всеми вариантами пользовательского ввода, то есть пройдите все возможные варианты игры.
- Напишите программу поиска преобладающего цвета на изображении, заливки методом «наводнения» этого цвета другим и записи результата. Реализуйте возможность работы программы одновременно с несколькими изображениями.
Пробуйте свои силы. Возможностей — масса!
Читайте также:
- Как создать Chrome-расширение для приложения с прогнозом погоды
- Что делает невозможную фигуру невозможной?
- Как работает обратное распространение в нейронных сетях
Читайте нас в Telegram, VK и Дзен
Перевод статьи Bennett Garner: 20 advanced coding projects to expose you to complex concepts