Перевод статьи «10 Advanced Projects to Build in 2021».
Собрали список из 10 сложных проектов, которыми опытному разработчику можно заняться в 2021 году. Говоря, что проекты сложные, мы имеем в виду именно то, что они сложные и по силам только опытным программистам.
1. Язык программирования
В этом проекте мы предлагаем вам спроектировать и реализовать интерпретируемый или компилируемый язык программирования. Создание нового языка с нуля — непростая задача. Подумайте о тех проблемах, с которыми вы сталкиваетесь при использовании других языков программирования, и о том, как их исправить.
Например, Rust — прекрасный язык, быстрый и с безопасным доступом к памяти. Его отрицательная сторона — слишком крутая кривая обучения. Можно попробовать создать собственный язык, который был бы таким же быстрым и с безопасным доступом к памяти, но более простым в изучении.
Руководства (на случай, если застрянете):
- Golang: книга «Writing An Interpreter In Go»
- Rust: серия статей «Make A Language»
- Python: плейлист на YouTube
- Общее: онлайн-курс по компиляторам
2. Игрушечная база данных (или хранилище ключей и значений)
Создайте игрушечную базу данных или хранилище для пар ключ-значение. Если перед созданием собственной базы данных вы хотите попрактиковаться и получше разобраться в работе баз данных, попробуйте начать с создания хранилища для пар ключ-значение. Это может быть клон Redis или Memcached. Поскольку эти проекты меньше, чем полноценная NoSQL/SQL база данных, их вполне можно использовать как проекты по проектированию систем среднего уровня. Когда почувствуете, что уже готовы двигаться дальше, создайте игрушечную базу данных. Она может быть любой: SQL или NoSQL, реляционной или нереляционной и т. д.
Руководства (на случай, если застрянете):
- Python (подходит для начинающих): статья «How to write a simple toy database in Python within minutes»
- Общее: специализация на Coursera «Database systems Specialization»
3. Реализуйте TCP-протокол
Попробуйте реализовать TCP-протокол с нуля. Если вы не знаете, что это такое, почитать можно здесь. Вообще TCP-протокол довольно сложный. При желании можно начать с чего-то попроще. Например, можно сначала реализовать FTP-протокол.
Руководства (на случай, если застрянете):
- Rust: плейлист на YouTube
- C++: плейлист на YouTube
- Python (FTP): туториал «Python — FTP»
- Node: статья «How To Develop a Node.js TCP Server Application using PM2 and Nginx on Ubuntu 16.04»
4. Реализуйте биометрическую аутентификацию
При биометрической аутентификации для подтверждения личности пользователя используются его уникальные биологические характеристики. Это могут быть отпечатки пальцев, распознавание лица, распознавание глаза и т. д.
Чтобы создать такой проект, вам нужно разбираться в теме искусственного интеллекта и машинного обучения. Проект можно и расширить. Например, вы можете реализовать биометрическую аутентификацию на посещаемой платформе, систему голосования с аутентификацией по отпечатку пальца и т. д.
Руководства (на случай, если застрянете):
- Python (распознавание лиц): видео на YouTube «Facial Recognition with Python and the face_recognition library»
- Node (отпечатки пальцев): плейлист на YouTube
5. Конкурентная структура данных
Если вы понятия не имеете, с какого конца за это взяться, поищите старые исследования по конкурентным структурам данных (обычно в них есть какой-то псевдокод). Для создания такого проекта вы должны разбираться в конкурентности и иметь общие знания по структурам данных.
Руководства (на случай, если застрянете):
- Rust (конкурентная hashmap): плейлист на YouTube
- Общее http://www.cs.tau.ac.il/~afek/ConcurrentDS-MS04.pdf
6. Создайте операционную систему
Создание собственной операционной системы с нуля. Вот это интересно!
Для работы над этим проектом используйте высокопроизводительный язык, например Rust, C или C++, потому что создание ОС может немного замедлить ваш компьютер. Ваша ОС может быть сложной настолько, насколько вы сами захотите. Можно добавить дополнительные фичи в виде встроенных приложений (блокнот, плейер, текстовый редактор и т. п.).
Руководства (на случай, если застрянете):
- Rust: серия статей «Writing an OS in Rust»
- C: os-tutorial
- C++: онлайн-книга «How to Make a Computer Operating System»
7. Шифрование изображений с использованием алгоритма AES
Крутой проект. Создайте инструмент для шифрования изображений с использованием алгоритма AES. Разобраться в сути AES вам поможет этот пост.
Проект можно расширить, используя уже готовый инструмент шифрования в каком-нибудь веб-приложении (например, в клоне Instagram).
Общее руководство: статья «An image encryption method based on chaos system and AES algorithm».
8. Создайте текстовый редактор
Ваша цель — создать полнофункциональный текстовый редактор. Вы можете создать редактор кода с подсветкой синтаксиса, сочетаниями клавиш и т. п. (пример — Sublime Text) или что-то попроще, вроде Notepad++.
Руководства (на случай, если застрянете):
- Rust: серия статей «Hecto: Build your own text editor in Rust».
- Java: статья «Create a simple text editor»
- C: набор инструкций «Build Your Own Text Editor»
- Python: статья «Create a Text Editor in Python»
- C#: видео на YouTube «Make a GUI text editor in just 15minutes C#»
9. Создайте веб-браузер
Ваш браузерный движок должен обрабатывать HTML, CSS и JS-файлы. Проект может быть сколь угодно сложным. При его создании нужно обратить особое внимание на дизайн, потому что для пользователей это очень важный фактор при выборе браузера.
Руководства (на случай, если застрянете):
- Rust: плейлист на YouTube
- Java: видео «Creating a Simple Web Browser»
10. Создайте криптовалюту
Примеры криптовалют — Bitcoin, Ethereum, Dash и т. п. Как и впредыдущих проектах, вы можете сами выбирать уровень сложности. При желании можно добавить более продвинутый функционал: смарт-контракты, майнинг и т. д.
Руководства (на случай, если застрянете):
- Rust: плейлист на YouTube
- Python: статья «How to Create Your Own Cryptocurrency Using Python»
- Elixir: статья «Writing a Simple Blockchain in Elixir»
- Typescript: туториал «Naivecoin: a tutorial for building a cryptocurrency»
Успехов в работе над проектами!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]