Идеи для проектов для практики навыков программирования. Создание проекта в VisualStudio

  • 28.06.2019

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

Здесь можно найти список из более чем 100 идей для проектов , которые вы можете реализовать. Список предназначен для Python, но идеи можно выполнить и в других языках. В нём есть и не совсем серьёзные проекты, и хорошие упражнения для практики. Список крайне рекомендуется к ознакомлению и выполнению новичкам.

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

Хотите создать что-то новое? Посмотрите Idea Machine и The Internet Wishlist , где люди публикуют свои пожелания по программам, которые они хотели бы увидеть.

Если хотите практических упражнений, то пройдитесь по данному списку сайтов/ресурсов:

Общие упражнения:

  • Project Euler содержит более 500 математических задач (на теорию чисел, числовых систем и пр.), которые нужно решить, используя программирование (на любом языке).
  • Code Abbey хранит более 200 задач по программированию. За решения 125 из них выдают сертификат, чем мотивируют многих студентов.
  • Rosalind – это ещё один сайт наподобие Project Euler, который предоставляет на выбор более 200 задач по биоинформатике.
  • Codingbat.com дарит упражнения по Java и Python, как для новичков, так и для продвинутых программистов.
  • codegolf.stackexchange.com – сайт, на котором публикуют и обсуждают программистские головоломки.
  • Ruby Quiz – серия головоломок, в которых вас просят написать короткие программы различной сложности. Исходные решения описаны на Ruby, но их можно реализовать на любом языке.
  • - подборка задач на логику и программирование, к каждой есть подробный разбор решения.

Задачи из олимпиад по программированию:

  • UVa Online Judge – коллекция из сотен задач с олимпиад по программированию, с онлайн-системой проверки решений.
  • TopCoder содержит сложные задачи на алгоритмы, собранные годами с разных соревнований. Также несколько раз в месяц проводит олимпиады по программированию.
  • CodeForces похож на TopCoder, но содержит больше задач на соревнованиях и несколько особых фишек, включая «виртуальные соревнования».
  • Timus – то же, что и UVA. Содержит задачи с последних соревнований (мирового и регионального уровня).
  • SPOJ – похож на UVA, с огромным числом языков программирования на выбор.
  • USACO содержит несколько задач на алгоритмы с руководством по их решению.

Под определённые языки:

  • Для Prolog, Lisp и подобных языков посетите P-99 и L-99 , наборы из 99 задач для повышения вашей эффективности в данных языках.

Я хочу попасть в команду С++ на работе. Их задача - писать CGI на С++ (главным образом, но не ограничиваясь ими). Я знаю базовый С++. Чтение списка в С++ book guide вопрос о том, что у меня есть три книги от друга (у меня на самом деле был первый).

  • Язык программирования С++ - Bjarne Stroustrup - для справки
  • С++ Шаблоны Полное руководство - Дэвид Вандевоорде/Николай М. Йосуттис
  • Современный дизайн С++ - Андрей Александреску

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

    Настройка, в которой я нуждаюсь. У меня есть Macbook и личная дрянная Ubuntu dev серверная машина. Я могу bootcamp установить любую ОС, если это необходимо.

    Можете ли вы также дать мне несколько советов о том, как начать писать CGI (или любой учебник)?

Большое спасибо.

5 ответов

Позвольте мне добавить к вашему списку материал для чтения; С++ FAQ Lite - это самый лучший ресурс для изучения входов и выходов С++. Это полезно как в качестве ссылки для старых таймеров, так и в качестве введения для новичков. Я бы настоятельно рекомендовал прочесть столько, сколько вы можете, и попробуйте небольшие примеры, демонстрирующие каждую функцию, упомянутую перед присоединением к реальному проекту.

Как только вы почувствуете себя немного комфортно на этом языке, я бы рекомендовал взглянуть на Github и посмотреть, есть ли проекты на С++ , которые нуждаются в некоторой помощи. Что касается образов, созданных компьютером или общего интерфейса шлюза, оба эти языка являются агностиками. Они могут быть написаны на любом языке программирования, хотя разные языки программирования будут иметь разные существующие библиотеки для их обработки. Я предлагаю вам прочитать по этому вопросу, чтобы лучше понять стандарт/алгоритмы (в зависимости от того, из какого из двух вы имели ввиду). После того, как вы более знакомы с предметом, вы должны лучше понять документацию соответствующих библиотек.

Что касается среды разработки, я нахожу, что Ubuntu является самым простым в настройке, потому что почти вся настройка может быть сведена к серии команд apt-get install . Например:

Sudo apt-get install build-essential

Независимо от того, какую ОС вы используете, вы, вероятно, захотите создать и запустить свой код в предсказуемой, воспроизводимой среде. Я должен также указать, что окружающая среда, которую вы разрабатываете, не обязательно должна быть такой же, как та, на которой вы действительно строите и запускаете свой код. Например, вы можете написать весь свой код в Mac OS X, но создайте и выполните свой код в контейнере Docker , который запускает Экземпляр Ubuntu с предустановленной, воспроизводимой конфигурацией сборки/запуска.

С точки зрения ресурсов для реализации CGI в С++ (и для другого кода), пожалуйста, просмотрите страницу

Лучший способ стать лучше на С++ - это писать код на С++. Начните с простого raytracer без каких-либо внешних зависимостей (просто напишите вывод в файл PPM).

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

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

Промыть, повторить.

ответьте на заголовок вопроса:), предполагая С++ 03

И да, у вас хороший рецензент на вашей стороне, если вам нужно изучить хороший С++. Сохраните копию соответствующего стандартного файла (open-std.org)

Программа находит простые числа до тех пор, пока пользователь перестанет спрашивать. Реализации: Python №1 , Haskell , JavaScript , Java , , Python №2

Калькулятор для ипотеки

Вычислить месячные выплаты фиксированного срока в течение заданных N сроков с заданной процентной ставкой. Реализации:

Обмен-возврат

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

Перевод из двоичной системы в десятичную и обратно

Калькулятор

Сначала простой с базовыми операциями, потом можно добавить фичи. Реализации: Python , Haskell

Конвертер температуры, валюты, масс и т.д.

Будильник

Простые часы, которые играют звук после некоторого числа минут или часов или в определенное время.
Python , Java

Расстояние между городами

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

Валидатор кредитной карты

Берет номер кредитной карты от производителя (Visa, MasterCard, American Express, Discover) и проверяет на правильность номер (разберитесь, как кредитные карты используют контрольную сумму). Реализации: Haskell , Python , Java ,

Факториал числа

Решить с помощью циклов и отдельно с помощью рекурсии. n! = n * (n-1) * … * 1, 0! = 1. Реализации: Haskell , Python ,

Алгебра комплексных чисел

Показать сумму, умножение, сопряжение, отрицание в отдельных функциях (разность и деление могут быть сделаны путем использования нескольких уже написанных функций). Реализация: Haskell

Счастливые числа

Счастливое число определено следующим процессом. Начиная с некоторого положительного целого числа, замените число суммой квадратов его цифр и повторяйте процесс до тех пор, пока число не будет равным одному(на чем все и остановится) или оно будет циклиться бесконечно. Если цикл конечен, то изначальное число называется счастливым. Найдите первые 8 счастливых чисел. Реализации: Python , Haskell , Java , C++

Названия чисел

Показать как читается число на английском. Вы можете использовать уже существующую реализацию или написать свою, она должна поддерживать значения до одного миллиона или до максимально возможного целого значения в данном языке программирования, если оно меньше миллиона. По желанию: поддержка отрицательных чисел, нуля, чисел с плавающей запятой Реализации: Haskell , Python , , C++

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

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

Классические алгоритмы

Гипотеза Коллатца

Найдите число шагов, за которые получится единица, используя следующий процесс: берём любое натуральное число n больше единицы. Если оно чётное, то делим его на 2, а если нечётное, то умножаем на 3 и прибавляем 1. Реализации:
Python №1 , Java , JavaScript , Java №2 , , Java №3 ,

Сортировка

Реализовать два типа сортировочных алгоритмов: сортировка слиянием и сортировка простыми обменами. Реализации: , Python , , C++

Задача ближайшей пары

Задача ближайшей пары точек или задача ближайшей пары — это задача вычислительной геометрии: дается n точек в метрическом пространстве, найти пару точек, расстояние между которыми наименьшее. Реализации: Python №1 , Python №2

Решето Эратосфена

Решето Эратосфена — один из самых эффективных способов нахождения всех небольших простых чисел (ниже 10 миллионов). Реализации:
Python №1 ,
JavaScript ,
Python №2 , , Java ,
C++

Графы

Граф из связей

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

Эйлеров путь

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

Соединенный граф

Напишите программу, ввод которой представляет из себя граф и вывод представляет из себя отчет, в котором указано соединена ли каждая вершина или нет. Реализация: Python

Алгоритм Дейкстры

Напишите программу, которая будет находить короткий путь в графе, используя его вершины. Реализации:
Python

Структуры данных

Инвертированный индекс

Текст

Перевернуть строку

Вводится строка, и программа ее переворачивает и распечатывает на экран. Реализации:
Python №1 ,
Python №2 , Java №1 ,
Haskell ,
Python №3 ,
Java №2 ,
,
JavaScript №1 ,
Java №3 ,
Python №4 ,
JavaScript №2

Поросячья латынь

Это «тайный язык», представляющий собой зашифрованный английский. Чтобы сделать поросяче-латинское слово из английского, нужно первые согласные звуки в слове переместить в конец и прибавить ay (Например: «banana» превращается в anana-bay). Подробнее о правилах читайте в Википедии. Реализации:
Python №1 ,
Python №2 ,
Java №1 ,
Java №2 ,
,
Java №3 ,
Python №3

Счетчик гласных

Вводится строка, и программа считает количество гласных в тексте. Для усложнения задачи можно генерировать отчет о том, сколько раз какая гласная была найдена. Реализации:
Python №1 ,
Python №2 ,
Haskell ,
Java №1 ,
,
Java №2 ,
Python №3

Проверка на палиндром

Программа проверяет на то, что введенная строка является палиндромом (то есть читается слева направо так же, как и справа налево). Реализации:
Python №1 ,
Python №2 , Java ,
Haskell ,
Python №3 ,
,
Java

Счетчик слов в строке

Посчитать число слов в строке. Для усложнения задачи считать эти строчки и сгенерировать отчет. Реализации:
Python №1 ,
Python №2 , Java ,
Haskell

Текстовый редактор

Приложение в стиле блокнота, способное открыть, редактировать и сохранять текстовые документы. По желанию: добавить подсветку синтаксиса и другие фичи. Реализации:
Python ,
С++/QT

Генератор RSS ленты

Дается ссыка на ленту RSS/atom, извлечь все посты и распечатать на экран. Реализация:
Python

Стикеры

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

Проверка показателей индексов фондовой биржи

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

Гостевая книга / журнал

Простое приложение, позволяющее людям добавлять комментарии или добавлять записи в журнал. В нем есть возможность добавлять или закрывать комментарии, а также время добавления записи. По желанию: запустите приложение на такой облачной платформе как Google App Engine или Heroku или любой другой(если возможно).

Гороскоп

Программа проверяет ваш гороскоп на разных сайтах, посвященных этому и соединяет все прогнозы воедино для каждого дня. Реализации:
Python

Шифр Винежера / Вернама / Цезаря

Функции для шифрования и расшифровывания сообщения с данными. Затем отправьте их другу. Реализации:
Python ,
Java

Предложения для любого подарка

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

Конвертер из языка разметки Markdown в HTML

Переводит текст, отформатированный с помощью Markdown в файл HTML. Реализовать базовые теги такие, как p , strong , em и так далее. По желанию: реализовать все теги из документации к синтаксису Markdown . Реализация:
Python

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

Программа позволяет пользователю вводить текстовую строку и затем в отдельном поле регулярное выражение. После запуска программа должна выдать все подходящие под регулярное выражение строчки или флаг ошибки. Реализация:
Python

Сети

Программа FTP

Программа, осуществляющая пересылку файлов туда и обратно из удаленного веб-сервера. Реализация:

Монитор трафика

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

Сканер портов

Введите IP адрес и диапазон портов, в которых программа попробует найти открытые порты на данном компьютеров путем соединения с каждым из ним. При успешном соединении программа должна пометить порт как открытый. Реализации:
Python №1 ,
Python №2, Python №3 ,
Python №4

Проверка электронной почты (POP3 / IMAP)

Пользователь вводит различную информацию своего аккаунта, включая веб-сервер и IP, тип протокола (POP3 или IMAP) и приложение будет автоматически проверять почту каждый заданный интервал времени. Реализация:
Java

Инструмент поиска для сетевого протокола Whois

Пользователь вводит IP и адрес хоста и программа просматривает информацию через сетевой протокол Whois и выводит регистрационные данные. Реализация:
Python

Проверка сайта в установленное время

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

Классы

Продуктовый инвентарь

Создайте приложение, которое позволяет вести учет инвентаря продуктов. Создайте класс Product, элементами класса будут цена, номер, количество. Затем создайте класс Inventory, ведущий учет различных продуктов и который считает общую стоимость инвентаря. Реализации:
Python №1 ,
Ruby ,
JavaScript ,
,
Python №2

Система бронирования отелей / авиабилетов

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

Bank Account Manager

Создайте класс Account, который будет абстрактным классом для трех классов CheckingAccount(контокоррентный счет), SavingsAccount (сберегательный вклад) и BusinessAccount (счет, возникающий при создании бизнеса). Управляйте кредитами и дебитами с этих счетов в стиле программы для банкомата. Реализация:
Python

Расписание приема врача

Создайте класс Patient и класс Doctor. Пусть доктор может принять несколько пациентов, установите расписание того, как доктор будет принимать 16 пациентов в течение 8 часового рабочего дня.

Менеджер рецептов

Создайте класс Recipe с ингридиентами и вставьте объекты данного типа в менеджер рецептов, которая их распределит по категориям(основные блюда и десерты) или по ингридиентам(курица, говядина и так далее)

Галерея изображений

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

Площадь и периметр фигуры

Создайте абстрактный класс Shape и затем создайте производные классы, такие как бриллиант, прямоугольник, круг, треугольник и так далее. Затем происходит перекрытие имен функций, ищущих площадь и периметр для каждого типа фигуры. Реализации:
Java ,
Python

Цветочный магазин с возможностью заказа

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

Создание древа семьи

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

Поточность

Создание индикатора процесса загрузки

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

Программа для массового создания эскизов для предварительного просмотра изображений

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

Веб

Индексатор веб-страницы

Создайте приложение, которое соединяется с веб-сайтом, забирает оттуда все ссылки или изображения и сохраняет их в качестве списка. *По желанию: Организуйте проиндексированную информацию, удалите дублирующиеся данные. Залейте результаты в индекс-файл. * Реализации:
Python

Веб-браузер с вкладками

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

Доска для рисования онлайн

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

Получить атомное время из интернет-часов

Эта программа будет получить сведения об атомном международном времени из интернета. Используйте любые атомные часы, которые найдёте в поиске Google. Реализации:
,
Java

Получить текущие данные о погоде

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

Авто-логин и автоматические действия по таймеру

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

Генератор электронных открыток

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

Система контент-менеджмента

Создайте собственную систему управления контентом (CMS) наподобие Joomla, Drupal, PHP Nuke и т.д. Начните с малого. По желанию: Разрешите добавление модулей/аддонов.

Доска объявлений (Форум)

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

CAPTCHA-генератор

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

Файлы

Создание викторины

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

Файловый проводник

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

Утилита для сортировки Excel/CSV файлов

Читает записи в файле, сортирует их и записывает их обратно в файл. Позволяет выбрать различные варианты сортировки и сортировку по конкретному полю. Реализация:
Python

Создайте Zip-архиватор

Пользователь добавляет файлы из различных директорий, а программа архивирует их в zip-файл. По желанию: применить Примените современные алгоритмы сжатия. Начните с кода Хаффмана. Реализация:
Java

Генератор PDF файлов

Приложение, которое может читать текстовый файл, файл HTML или какой-либо другой файл и генерировать из него PDF. Отлично подходит для онлайн конвертеров, где пользователь загружает файл и программа возвращает PDF файл По желанию: запустить приложение в облачных сервисах, таких как Google App Engine или Heroku, если возможно.

Программа для теггирования Mp3

Изменяет и добавляет ID3v1-теги в MP3-файлы. Можете попробовать добавить обложку альбома в хедер MP3-файла, или другие ID3v2-теги.

Менеджер кода

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

Базы данных

Анализатор SQL-запросов

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

Инструмент удалённого соединения с SQL-сервером

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

Генератор отчётов

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

Планировщик событий и календарь

Сделайте приложение, которое позволит пользователю заносить дату и время события, а также кое-какие заметки в календарь. Пользователь должен иметь возможность просмотреть календарь или найти определенное событие. По желанию: добавить возможность создавать повторяющиеся события (каждый день, неделю, месяц, год и т.д.)

Домашняя бухгалтерия

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

Адресная книга

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

Программа для отслеживания ТВ-серий

Не хотите пропустить любимый сериал? Нет записывающего устройства или хотите найти серию и записать её позднее? Создайте приложение, которое будет осуществлять поиск по сайтам телевизионных передач, определять названия/время/каналы и добавлять их в базу данных. База данных/веб-сайт затем могут посылать вам email-уведомления о начале сериала и о канале трансляции. Реализация:
Python

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

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

Графика и мультимедиа

Слайд-шоу

Создайте приложение, которое показывает картинки в формате слайд-шоу. По желанию: добавьте эффекты, например, различные переходы (в виде звезды, круга, жалюзи и т.д.)

Проигрыватель онлайн-видео

Попробуйте создать собственный проигрыватель онлайн-видеороликов.

Mp3 Плеер

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

Проигрыватель онлайн-музыки

Попробуйте создать собственный проигрыватель онлайн-музыкальных треков. Реализация:
PHP

Приложение для создания ватермарков

Хотите защитить авторские права на некоторые изображения? Добавьте своё лого или текст на изображение, чтобы никто не мог украсть графику с вашего сайта. Создайте программу, накладывающую ватермарк на изображение. *По желанию: Используйте многопоточность для одновременной обработки нескольких изображений. * Реализация:
Python

Черепашья графика

Стандартный проект, в котором вы создаёте плоскость из квадратов 20х20. С помощью различных команд вы управляете черепахой, которая рисует линию на плоскости. Вы можете двигать её вперёд, назад, двигать влево и вправо, поднимать и опускать перо и т.д. Подробную информацию ищите в Google по запросу “черепашья графика”. По желанию: добавьте в программу возможность считывать список команд из файла

Безопасность

Шифр Цезаря

Реализуйте шифр Цезаря, как шифрование, так и дешифрование. Ключом является целое число от 1 до 25. Этот ключ сдвигает буквы алфавита (от A до Z). При шифровании каждая буква алфавита заменяется буквой, находящейся на выбранное количество позиций дальше (алфавит закольцовывается). Таким образом, при использовании ключа 2 “HI” становится “JK”, а при использовании ключа 20 “HI” превращается в “BC”. Это простое моноалфавитное шифрование легко взламывается, поскольку злоумышленник, у которого на руках есть зашифрованное послание, может использовать частотный анализ, или просто попробовать все 25 ключей. Реализации.

Создание проекта в VisualStudio

После установки Visual Studio можно приступать к созданию первого проекта. В Visual Studio редко когда требуется начинать с пустого файла и добавления в него кода C#. (Разумеется, возможность создания пустого проекта приложения существует. Это нужно, если действительно возникла потребность в написании кода с нуля, либо при создании решения, которое должно содержать в себе несколько проектов.)

Вместо этого, необходимо просто указать Visual Studio, проект какого типа должен быть создан, и среда автоматически сгенерирует файлы и код C#, образующие соответствующий указанному типу проекта каркас. Далее останется добавить в этот каркас собственный код.

Давайте создадим консольное приложение, выбрав в меню File (Файл) пункт New --- Project (Создать --- Проект):

Как можно увидеть на рисунке, в Visual Studio поддерживается возможность выбора версии.NET Framework (2.0, 3.x или 4.0), для которой должно создаваться приложение, с помощью раскрывающегося списка, отображаемого в правом верхнем углу диалогового окна New Project (Новый проект).

Утилита Solution Explorer (Обозреватель решений) , доступная через меню View (Вид), позволяет просматривать набор всех файлов с содержимым и ссылаемых сборок, которые входят в состав текущего проекта:

Обратите внимание, что внутри папки References (Ссылки) в окне Solution Explorer отображается список всех сборок, на которые в проекте были добавлены ссылки. В зависимости от типа выбираемого проекта и целевой версии.NET Framework, этот список выглядит по-разному.

Добавление ссылок на внешние сборки

Если необходимо сослаться на дополнительные сборки, щелкните на папке References правой кнопкой мыши и выберите в контекстном меню пункт Add Reference (Добавить ссылку) . После этого откроется диалоговое окно, позволяющее выбрать желаемые сборки (в Visual Studio это аналог параметра /reference в компиляторе командной строки). На вкладке Assemblies этого окна, показанной на рисунке, отображается список наиболее часто используемых сборок.NET; на вкладке Browse (Обзор) предоставляется возможность найти сборки.NET, которые находятся на жестком диске; на вкладке Recent (Недавние) приводится перечень сборок, на которые часто добавлялись ссылки в других проектах:

Просмотр свойств проекта

И, наконец, напоследок важно обратить внимание на наличие в окне утилиты Solution Explorer пиктограммы Properties (Свойства). Двойной щелчок на ней приводит к открытию редактора конфигурации проекта, окно которого называется Project Properties (Свойства проекта):

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

Утилита Object Browser

В Visual Studio доступна еще одна утилита для изучения множества сборок, на которые имеются ссылки в текущем проекте. Называется эта утилита Object Browser (Браузер объектов) и получить к ней доступ можно через меню View. После открытия ее окна останется просто выбрать сборку, которую требуется изучить:

Отличие проектов от решений

Одной из важных вещей, которые необходимо понимать, является понимание разницы между проектом и решением:

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

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

Тэш Постоловски «40 Side Project Ideas for Software Engineers».

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

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

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

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

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

Сторонние проекты, связанные с информатикой

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

  1. FTP клиент (предлагаемая реализация: web, CLI или десктопное приложение). Постройте простой FTP-клиент. В качестве дополнительной задачи сделайте поддержку безопасной передачи файлов (secure file transfer).
  2. HTTP-сервер (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Для глубокого понимания HTTP постройте HTTP-сервер. Есть много доступных руководств , которые могут помочь вам в этом процессе.
  3. Постройте простую операционную систему (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Это технически сложный проект, который поможет углубить ваше понимание работы компьютера и операционных систем. Возможно, вы захотите начать с бесплатной книги с интересным названием: «Operating Systems: From 0 to 1 ».
  4. Постройте веб-скрапер (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Создайте инструмент, принимающий URL в качестве input и возвращающий контент в виде HTML или XML.
  5. Bandwidth monitor (предлагаемая реализация: инструмент обновления CLI в реальном времени). Создайте инструмент для отслеживания количества скачиваемых и загружаемых в интернет данных. Пускай ежемесячно присылает вам отчет на email. Для дополнительной нагрузки – прогноз пикового времени использования.
  6. Осуществление шифрования (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Создайте инструмент, принимающий текстовую строку в качестве input и зашифровывающий ее, например, с помощью шифра Цезаря .
  7. Создайте downtime-сигнализатор (предлагаемая реализация: приложение, подключенное к Twilio API для отправки текстовых сообщений). Создайте приложение, принимающее URL как input и отсылающее вам текстовое сообщение, когда запрос к URL возвращает другой код ответа, чем 200 (OK).

Сторонние проекты, связанные с личными финансами

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

  1. Калькулятор прибыли и трекер (предлагаемая реализация: CLI, веб или мобильное приложение). Создайте калькулятор, который сможете использовать для отслеживания ежемесячного роста и снижения своих доходов. Вы можете руководствоваться чем-то вроде net worth worksheet от Чральза Шваба. Возможное расширение: пусть он отсылает вам отчет за предыдущие 12 месяцев 01 января каждого года.
  2. П рогноз налогов (предлагаемая реализация: веб-приложение). Это будет особенно полезно, если вы занимаетесь программной инженерией на фрилансе. Создайте инструмент, принимающий в качестве входных данных ваши заработки и выдающий ожидаемую сумму налогов, которую нужно будет уплатить в конце финансового года. Сделайте его достаточно умным, чтобы он мог учитывать периоды большего или меньшего спроса на ваши услуги.
  3. Поиск сделок (предлагаемая реализация: веб-приложение с мобильными уведомлениями). Создайте простое веб-приложение, уведомляющее, когда желанный для вас товар будет выставлен на продажу по хорошей цене. Вы можете использовать веб-скрапер для извлечения страницы продукта и уведомления вас об изменении цены.
  4. Отслеживание расходов (предлагаемая реализация: веб- или мобильное приложение). Создайте простой интерфейс, который вы сможете использовать для добавления и разбивки своих расходов по категориям. Генерируйте ежемесячный отчет, основанный на входящих данных, и напишите пользовательские уведомления вроде «тратишь слишком много на кофе… как всегда».
  5. Калькулятор финансовой независимости (предлагаемая реализация: веб-приложение). По существу, финансовая независимость это как можно большее сохранение и вкладывание доходов (инвестиции), что позволяет не нуждаться в работе для получения денег. Хотя многие финансово независимые люди продолжают работать, они могут позволить себе работать над тем, чем им нравится заниматься, а не тем, за что больше платят. Постройте инструмент для подсчета того, насколько вы далеки от финансовой независимости, основанного на ваших текущих сбережениях, инвестициях, доходах, пенсионных счетах и расходах. Примеры: FIREcalc , cFIREsim .
  6. «Разбиватель» счетов (предлагаемая реализация: мобильное приложение). Постройте простой инструмент, который поможет вам и вашим друзьям делить счет, когда вы вместе обедаете.

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

  1. Генератор случайных имен (предлагаемая реализация: CLI, веб- или мобильное приложение). Постройте генератор случайных имен (пример), создающий уникальные названия на лету, основываясь на алгоритме. Используйте приемы машинного обучения чтобы помочь натренировать программу с примерным набором данных из имен, похожих на те, что вы хотите генерировать. Или создайте собственные лексические правила генерации имен. Например, алгоритм генерации имен, вдохновением для которого послужил «Рассказ служанки », может иметь условие, что имена Служанок должны начинаться с «Оф», а оканчиваться на случайное мужское имя, например, Офпитер.
  2. И гра «Жизнь» (Conway’s Game of Life) (предлагаемая реализация: любая платформа, способная на графический рендеринг в реальном времени). Игра «Жизнь» симулирует жизнь простых клеток, которые подчиняются алгоритмическим законам. Это видео поясняет, как работает игра, и включает пример возможного результата:
  3. Процедурно генерируемый создатель карт (предлагаемая реализация: приложение на основе браузера). Создайте браузерное приложение, позволяющее процедурную генерацию карты местности на основе случайного начального числа. Карта может быть такой простой или сложной, как вы хотите. Этот проект – хорошая возможность изучить процедурную генерацию .
  4. Генератор персонажей (предлагаемая реализация: браузерное, мобильное приложение, CLI). Создайте инструмент, позволяющий случайно генерировать подходящие персонажи для вашей любимой ролевой игры, как настольной (вроде Pathfinder), так и видео-игры (вроде «Divinity: Original Sin»).
  5. Interactive fiction (предлагаемая реализация: CLI). Интересный способ войти в разработку игр без необходимости волноваться о графических ресурсах. Interactive fiction создает мир для игрока с помощью текстовых описаний. Dreamhold – хороший пример Interactive fiction с полезной командой «help».

Сторонние проекты, связанные с искусственным интеллектом

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

  1. Идеальный движок для игры в крестики-нолики (предлагаемая реализация: программа CLI). В качестве прекрасного первого ИИ-проекта попробуйте написать движок, который нельзя победить в игре в крестики-нолики. Вы можете достичь такого результата, реализовав эту стратегию , которая делает ничью худшим исходом игры.
  2. Шахматный движок (предлагаемая реализация: ). Попробуйте написать движок, способный играть в шахматы с человеком, используя GUI, совместимый с Universal Chess Interface , например, Xboard. В качестве примера посмотрите Stockfish . Чтобы упростить задачу вы можете сфокусироваться на поведении только какой-то части, например, коней.
  3. Чат-бот (предлагаемая реализация: веб-приложение). Часть лучших умов человечества сейчас заняты реалистично отвечающими чат-ботами. Это ужасно сложная задача, но если сузить рамки для вашего чат-бота, у вас будет сторонний проект на вечера и выходные. Создайте чат-бот, выдающий реалистично звучащие ответы по теме, которой вы увлекаетесь: ваша любимая музыкальная группа, видеоигра, спортивная команда, ТВ-шоу. Используйте уже существующую библиотеку, такую как ChatterBot .
  4. Определитель спама (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать ). Постройте инструмент для определения, является ли письмо спамом, основываясь только на содержимом. Вы можете воспользоваться этим публичным набором данных из исследования Enron для тестирования вашего определителя спама.

Сторонние проекты, связанные с развлечениями

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

  1. Поиск времени показа фильмов (предлагаемая реализация: веб- или мобильное приложение с смс-уведомлениями или отправкой е-мэйлов). Постройте программу, которая будет уведомлять вас с помощью смс или email о времени показа потенциально интересных для вас фильмов в вашем любимом кинотеатре. Представление об «интересном фильме» может быть получено с помощью машинного обучения (если вы смотрите достаточно фильмов для получения хороших тренировочных данных) или написанного вручную алгоритма. Например, для построения программы, которая будет уведомлять вас о фильмах в жанре научной фантастики с рейтингом IMDB 7.0 и выше, или фильмах с Эми Адамс, фильмах со средним рейтингом 8.0 или выше, можно использовать Open Movie Database API вместе с HTML-парсером вроде BeautifulSoup .
  2. Б локировщик спойлеров (предлагаемая реализация: расширение браузера). В современном мире спойлеры ваших любимых фильмов, особенно таких популярных, как «Игра престолов», могут настигнуть вас повсюду (в социальных сетях/интернете/бачках с питьевой водой). Создайте расширение браузера, удаляющее все упоминания о вашем любимом шоу с загружаемых страниц или заменяющее их картинками с котятами.

З абавные сторонние проекты

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

  1. Pixel art генератор (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать ). Постройте инструмент, принимающий изображение в качестве входящих данных и преобразует его в pixel art на выходе. Если хотите улучшить свои навыки, касающиеся фронтенда, генерируйте конечный pixel art используя CSS.
  2. Инструмент, предлагающий музыку (предлагаемая реализация: постройте враппер для Spotify API). Создайте инструмент, отслеживающий музыку, которую вы слушаете, и генерирующий плейлист сходного качества, но из песен, которые вы прежде не слышали. Spotify API предоставляет все инструменты, необходимые для извлечения данных о прослушанных композициях и для создания плейлиста, а движок рекомендаций – за вами!
  3. Регистратор температуры (предлагаемая реализация: Raspberry Pi, датчик температуры, веб-приложение). Подключите ваш Raspberry Pi к датчику температуры и отсылайте температурные данные из вашего дома на веб-приложение, которое сохранит их в базе данных или обновит CSV-файл. Для получения бонусных очков сделайте еженедельный отчет по температуре, присылаемый вам на email. Другие проекты Raspberry Pi: домашняя автоматизация , домашняя безопасность .
  4. Приложение для «микрообучения» (предлагаемая реализация: мобильное или веб-приложение). Постройте приложение, высылающее вам ежедневно одну страницу по теме, которую вы хотите изучить. Это может быть случайная страница из Википедии, из документации по React, о букве кандзи или страница из CIA World Factbook .
  5. Slack-бот (предлагаемая реализация: Slack API). Если вы или ваша команда используете популярное чат-приложение Slack, постройте бот, облегчающий какие-то аспекты вашей жизни. Идеи: бот заказа кофе, бот, ежедневно докладывающий о числе коммитов, сделанных в репозиториях вашей команды, или напоминалка по какой-то теме.
  6. Обои рабочего стола (предлагаемая реализация: Unsplash API , язык сценариев для вашей ОС). Постройте приложение, которое будет ежедневно обновлять обои вашего рабстола.

З адачи на написание кода

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

  1. Advent of Code (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать ). Задания в Advent of Code появляются ежегодно в преддверии Рождества. Они включают множество занимательных задач, которые могут помочь вам подтянуть язык программирования, который вы изучаете или с которым хотите поработать. Задачи за 2015, 2016 и 2017 год все еще доступны.
  2. Kaggle’s Titanic Challenge (предлагаемая реализация: Python или R). Kaggle предлагает захватывающее задание, знакомящее вас с основами машинного обучения с помощью Python или R: использовать настоящий набор данных о регистрации пассажиров «Титаника» для предположений, кто из пассажиров скорее всего пережил катастрофу.
  3. Project Euler (предлагаемая реализация: любой язык программирования, в котором вы хотите попрактиковаться ). Задания в Project Euler посвящены изучению союза математики и программирования. Используйте инструменты программирования для решения разнообразных математических задач.

Сторонние проекты, связанные с обыденностью

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

  1. Выбор обеда (предлагаемая реализация: CLI, мобильное или веб-приложение). Если вы работающий программный инженер, вы, должно быть, сталкивались с самым сложным вопросом в разработке программ… «куда пойти поесть?». Ваш инструмент для выбора обеда призван дать ответ на этот вопрос. Он может быть супер-простым и делать случайный выбор из известного вам списка опций или более сложным – извлекать данные из Google Reviews и учитывать расположение, цены и тип кухни.
  2. Планировщи к свиданий (предлагаемая реализация: мобильное приложение). Самое сложное в том, что касается свиданий и длительных отношений, это решение, куда пойти на свидание. Постройте инструмент, просматривающий обзоры ресторанов, календари событий и собирающий другие данные для выдвижения идей.
  3. Инструмент для упрощения вашей электронной переписки (предлагаемая реализация: скрипты, подключенные к почтовому серверу). Если мы с вами похожи, вы еженедельно получаете слишком много писем и они накапливаются в вашем почтовом ящике. Вместо того чтобы отписываться от них от всех в припадке гнева, постройте инструмент, который будет компилировать их в одно письмо и отправлять вам его раз в неделю.
  4. Напоминалка «Возьми зонтик» (предлагаемая реализация: мобильное приложение). Постройте простое мобильное приложение, которое по утрам будет присылать вам на телефон уведомление о том, что нужно взять с собой на работу зонтик (например, если в вашей местности ожидается дождь).
  5. Отслеживатель коллекций (предлагаемая реализация: мобильное или веб-приложение). Постройте инструмент для отслеживания чего-то, что вы собираете. Вы можете следить за ценой предмета, годом изготовления, состоянием, местоположением.

Сторонние проекты, связанные с данными

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

  1. Создайте и автоматически обновляйте набор данных (предлагаемая реализация: веб-скраппер на входе и CSV на выходе). Постройте инструмент, автоматически создающий и обновляющий набор данных, касающихся чего-то, что вас интересует. Рекомендуемые наборы данных: статистика по вашей любимой спортивной команде, полеты в направлении, куда и вам бы хотелось отправиться, метеорологические данные региона, где вы живете. Самое главное, что этот набор данных должен нуждаться в регулярном обновлении по мере генерации новых данных, и это должно осуществляться автоматически. Например, когда результаты вашей спортивной команды публикуются на сайте, данные должны автоматически скрапиться и добавляться к вашему набору данных.
  2. Вступите в соревнование по науке о данных (предлагаемая реализация: R или Python). На Kaggle есть много соревнований по науке о данных, оперирующих наборами данных из реального мира и имеющих огромные денежные призы. Перед вами будут стоять реальные проблемы вроде того, как определить отравляющие онлайн-комментарии, предсказать посетителей в ресторане или распознавать объекты из космоса.

Поделитесь своим сторонним проектом

  • Что было сложнее всего в работе над этим проектом?
  • Что вы узнали, занимаясь этим проектом, чему научились?
  • Что бы вы посоветовали тем, кто хотел бы начать похожий проект?