Для хардкорных разработчиков и тех, кто не боится изобретать что-то новое

Прежде чем продолжить, добавьте этот сайт в закладки:



Иметь много идей для программных проектов - это плохо, еще хуже не поделиться ими с вами. Итак, это задача на год (то, что дети в Instagram обожают в наши дни), помеченная как # 42SkillsChallenge. Вот как принять участие в этой безумно сложной задаче для каждого из 42 проектов:

  1. Выберите проект из списка.
  2. Создайте репозиторий GitHub для проекта.
  3. Начни работать, попробуй реализовать все с нуля, изобретать велосипед где возможно (иногда приходится).
  4. Когда закончите, протестируйте его, опубликуйте тег # 42SkillsChallenge где-нибудь в репозитории (README или где-нибудь в видимом месте).
  5. Поделитесь своим репо со всем миром.

О проектах

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

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

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

Список проектов

1. Веб-сервер

Разработайте и внедрите легкий веб-сервер, который обрабатывает входящие сетевые запросы по протоколу HTTP. Веб-сервер обрабатывает и доставляет веб-страницы клиентам (обычно браузерам). Страницы представляют собой HTTP-документы. Хотя основная функция заключается в обслуживании контента, полная реализация HTTP также включает способы получения контента от клиентов. Эта функция используется для отправки веб-форм, включая загрузку файлов (источник). Для вдохновения попробуйте имитировать веб-сервер Nginx.

2. Анализатор пакетов

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

3. Анализатор статического кода

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

Разработайте и внедрите собственный статический анализатор для любого языка по вашему выбору.

4. Детектор спама

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

5. Шахматный движок

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

6. Система веб-поиска

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

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

7. Терминал командной строки

Это легко описать. Реализуйте терминальное приложение, которое реплицирует все основные команды Linux. Постарайтесь сделать интерфейс как можно более красивым.

8. Веб-браузер

Звучит просто, но это не так. Во-первых, это приложение с графическим интерфейсом. Затем он понимает документы HTTP и, конечно же, понимает и правильно отображает HTML и CSS. И да, он также выполняет JavaScript (по крайней мере, базовые вещи).

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

9. База данных в памяти

Еще один из моих любимых. Проект по сути является повторной реализацией Redis. База данных в памяти хранит все в памяти. Если вы добавите к нему язык запросов, вас обязательно наймет какая-нибудь серьезная компания.

10. Минималистичная ОС

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

Вы можете сделать это простым, но, по крайней мере, реализовать несколько важных функций для ОС. И сделайте это с нуля, но вы можете взглянуть на ядро ​​Linux. В конце концов, Линус в некотором роде взглянул на Minix.

11. Генератор видео субтитров

Внедрите программу, которая принимает видео в качестве входных данных, анализирует контент, выполняет некоторую обработку голоса и создает субтитры для видео. Допускается ограничение на длину видео (1 или 2 минуты было бы хорошо).

12. Пользовательский шифр

Помните те фильмы о хакерах? Вы когда-нибудь мечтали им стать? Это ваш шанс сделать шаг навстречу детской мечте.

Разработайте шифр. Реализуйте приложение, которое кодирует и декодирует информацию на основе вашего шифра.

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

13. Приложение для обмена сообщениями P2P

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

14. Машинный перевод

Что-то вроде Google Translate. Разработайте и внедрите службу (если у вас есть свободное время, внедрите также и приложение), которая переводит кучу текста с одного языка на другой.

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

15. Автоматизированный ведущий новостей

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

Разработайте и внедрите программное обеспечение, которое собирает новости (обычно подписывается на RSS-каналы, установленные пользователем) и читает их вслух в качестве анимированного ведущего новостей.

16. Платежная система

Вы, наверное, слышали о PayPal, Stripe или любой другой платежной системе. Теперь разработайте новую (или следующее поколение?) Платежную систему, аналогичную одной из них. Смоделируйте финансовые транзакции и докажите, что система неуязвима для атак. Этого сложно достичь.

17. Система управления реляционными базами данных.

Вы когда-нибудь задумывались, как работают базы данных под капотом? Теперь у вас есть шанс построить такой. Разработайте и внедрите реляционную СУБД, подобную MySQL или PostgreSQL (не обязательно поддерживающую SQL). Не забывайте об индексировании. Было бы здорово проводить транзакции, но это не обязательно.

18. Виртуальный помощник

Что-то вроде Siri, но без голосового управления. Просто введите текст, создайте напоминания, задайте вопросы и т. Д. Набор функций зависит от вас, но пользователь должен ощущать его как надежное приложение виртуального помощника.

Этот проект предназначен для спартфонов, то есть вы должны писать его либо для Android, либо для iOS, либо для того и другого, используя какие-то React Native / Flutter-подобные вещи.

19. Сборщик мусора

Быстрый вопрос: в чем разница между C ++ и C #? Одно из отличий в том, что у последнего есть сборщик мусора. Теперь реализуйте сборщик мусора, который можно использовать как отдельную службу или как интегрированный модуль. Вы выбираете язык и цель.

20. Клон Dropbox

Dropbox - это приложение для обмена файлами. Состоит из клиентов практически для всех операционных систем, включая Android и iOS. Он также имеет огромный бэкэнд. Разработайте и внедрите свою собственную версию приложения для обмена файлами, которая работает как минимум для 10 пользователей и предоставляет каждому из них 100 Мб дискового пространства. Реализуйте и сервер, и клиент (хотя бы для одной ОС).

21. Система управления контейнерами

Приведу описание Докера.

Docker - это набор продуктов «платформа как услуга» (PaaS), которые используют виртуализацию на уровне ОС для доставки программного обеспечения в пакетах, называемых контейнерами. Контейнеры изолированы друг от друга и объединяют собственное программное обеспечение, библиотеки и файлы конфигурации; они могут общаться друг с другом через четко определенные каналы. Все контейнеры управляются одним ядром операционной системы и, таким образом, легче виртуальных машин.

Внедрите свой собственный Docker.

22. Контейнерный оркестратор

Становится все труднее и труднее. После того, как вы закончите с Docker, спроектируйте и внедрите оркестратор.

Для вдохновения взгляните на Docker Swarm или Kubernetes.

23. Антивирусное программное обеспечение

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

24. Брандмауэр

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

25. Система контроля версий

Скорее всего, вы используете Git. Вы могли использовать SVN или даже CVS. В любом случае идея проста. Внедрить новую систему контроля версий. Стремитесь к чему-то лучшему, чем Git.

Также помните, что Линус написал первую версию Git примерно за две недели. Примите вызов и напишите свой VCS менее чем за 13 дней. В твоё лицо, Торвальдс!

26. Генератор диаграмм UML

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

27. База данных временных рядов

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

28. Свободные от блокировок структуры данных.

Программирование без блокировок сложно понять. Я пробовал, просто понял.

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

29. Уведомление о трафике

Внедрите приложение (или сервис), которое уведомляет пользователя о пробке.

Более того, он предлагает лучший маршрут к некоторому пункту назначения (установленному пользователем).

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

30. Музыкальное слияние

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

31. Генератор рецептов

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

32. Плагин браузера для флеш-карт

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

33. Приложение для видеозвонков

Есть несколько приложений для видеозвонков, Zoom, Skype, Google Hangouts.

Но все же они плохо работают, если подключение к Интернету плохое. Может быть, вам стоит изобрести новый алгоритм сжатия (см. Ниже) и объединить его с этим приложением, чтобы реализовать новое превосходное приложение для видеозвонков? Не уверен. По сути, этот проект представляет собой PiperChat, дизайн и реализацию лучшего качественного приложения для видеочата.

34. Тестер случайности

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

35. Платформа микросервисов

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

Чем больше функций вы добавите в свой фреймворк, тем больше шансов выиграть испытание.

Выберите любой язык программирования, который вам нравится.

36. Функциональный язык программирования.

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

37. Стратегический игровой движок.

Один из лучших способов изучать ООП - создавать игры. Игры обычно основаны на движках.

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

38. Симулятор Мира

Приближается мир Дикого Запада.

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

39. Система рекомендаций по фильмам

Это ложь, система рекомендаций Netflix - отстой. Кроме тщательно подобранных списков фильмов, я нигде не видел надежной системы рекомендаций.

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

(Для сбора данных о фильмах может потребоваться очистка большого количества баз данных.)

40. Крысолов

Кто-то должен это сделать. Разработайте и реализуйте алгоритм сжатия, который сжимает большие файлы в маленькие. Это правда, что добиться идеального результата очень сложно, но постарайтесь не ограничивать себя этими мыслями. Стремитесь к невозможному, https://en.wikipedia.org/wiki/Weissman_score

41. Потоковое видео с телефона

Приложение и сервис, позволяющий передавать видео с одного телефона на другой. Мгновенно поделитесь видео с другом. Выберите видеофайл, выберите устройство друга в приложении и нажмите кнопку «Трансляция». Вот и все, смартфон вашего друга сразу же воспроизведет видео.

42. Конструктор приложений

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

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