Что написать начинающему программисту
Где новичку в программировании найти упражнения и идеи для проектов?
Авторизуйтесь
Где новичку в программировании найти упражнения и идеи для проектов?
Обучение программированию начинается с маленьких шагов. Понятно, что для начала нужно изучить синтаксис и концепцию выбранного языка. Но не менее важным является и оттачивание мастерства в составлении алгоритмов и решении программистских задач. В этой статье перечислены ресурсы, на которых собраны всевозможные задачи и идеи для собственных проектов.
Здесь можно найти список из более чем 100 идей для проектов, которые вы можете реализовать. Список предназначен для Python, но идеи можно выполнить и в других языках. В нём есть и не совсем серьёзные проекты, и хорошие упражнения для практики. Список крайне рекомендуется к ознакомлению и выполнению новичкам.
А здесь вы найдёте список из 49 клонов игр, которые вы можете написать. Выбор зависит от уровня сложности.
Хотите создать что-то новое? Посмотрите Idea Machine и The Internet Wishlist, где люди публикуют свои пожелания по программам, которые они хотели бы увидеть.
Если хотите практических упражнений, то пройдитесь по данному списку сайтов/ресурсов:
Общие упражнения:
Задачи из олимпиад по программированию:
Под определённые языки:
Итак, вам на выбор дан список ресурсов для оттачивания своих навыков программирования. Для начала этого более чем достаточно. Если вы серьёзно проработаете хотя бы один из них, то это уже сделает из вас если не матёрого, то вполне крепкого разработчика, способного уверенно принимать серьёзные вызовы в программировании.
10 лучших идей C++ проекта для начинающих
Самая популярная IDE для C++, Visual Studio используется практических во всех проектах. Вы также можете писать свои программы и в текстовом редакторе, например в блокноте, и компилировать проект с помощью компилятора GCC.
Некоторые характерные особенности C++:
Как вам помогут эти проекты?
Чтобы попрактиковаться в изучении C++, вы можете выполнять множество проектов от простого до продвинутого. Каждый из этих проектов научит вас чему-то новому, чтобы вы были знакомы с наиболее важными темами, которые всегда будут вам полезны при создании реальных проектов.
1. Система входа и регистрации
Это один из самых простых проектов, с которого можно начать изучение файловых систем на C++. Проект включает в себя процесс регистрации пользователя путем запроса имени пользователя и пароля. После успешной регистрации создается пользовательский файл с учетными данными.
Если пользователя не существует, при входе в систему будет показана ошибка. Вы также узнаете, как использовать Visual Studio для создания простого проекта.
2. Система аренды автомобилей
Это популярный проект, который очень полезен для изучения событий клавиатуры, функций даты и времени и реализации системы входа на C++. В программе есть отдельные меню для администратора и других пользователей.
Существуют также методы расчета стоимости проезда на основе времени и расстояния, включая отображение сведений об автомобиле, доступности и т.д.
Вы можете попробовать другие проекты, такие как управление музыкальным магазином, бронирование автобусов или система бронирования железнодорожных билетов, по тем же принципам, что и выше.
3. Система инвентаризации книжного магазина
Это простой проект, в котором система поддерживает хранение книг в книжном магазине. Если клиент покупает книгу, количество книг уменьшится; если добавляется книга, то же самое обновляется. Обратите внимание на использование указателей.
Вы можете изменить код, чтобы добавить идентификатор книги и выполнить поиск на основе идентификатора книги или выполнить поиск с использованием только одного параметра, дающего несколько результатов, и так далее.
4. Система управления отчетами студентов
Благодаря этому проекту мы можем многое узнать о потоках ввода / вывода и системе управления файлами C++. Программа собирает данные об учениках, такие как имя, номер списка, оценки по каждому предмету, и вычисляет их оценку. Это простое консольное приложение.
Обратите внимание, что в этом проекте мы фокусируемся только на правильных входных данных, и вы можете улучшить его для обработки неправильных входных данных.
5. Игра в угадывание номеров. Казино
Это интересный проект, в котором мы узнаем о библиотеке, используемой для случайных чисел: cstdlib. Программа запрашивает сумму ставки, а затем предлагает пользователю угадать число при выпадении. Если сгенерированное случайное число совпадает с вводом пользователя, он выигрывает, в противном случае вычитаются деньги.
Пользователь может продолжать играть до тех пор, пока не проиграет всю сумму, которую вложил изначально.
6. Судоку
Все мы знаем о популярной игре судоку, в которой нам нужно расположить числа от 1 до 9 так, чтобы они появлялись только один раз в строке и столбце сетки 9×9.
Программа использует концепцию поиска с возвратом. В этой программе мы жестко запрограммировали начальные значения, но вы также можете получить тот же ввод от пользователя.
Взгляните на программу, выполните и увидите результаты:
7. Валидатор кредитных карт
Это простой проект, который использует алгоритм Луна (Luhn algorithm) для проверки кредитной карты пользователя. Программа работает со всеми популярными картами, такими как Visa, Amex, MasterCard и т.д.
Алгоритм Луна делает основные проверки; например, карта Visa должна начинаться с 4, а затем переходить к сложным вычислениям с помощью цифр. Это хорошая программа для изучения, потому что большинство транзакций электронной коммерции требуют проверки кредитной карты.
8. Игра в «вертолетик»
Для всех детей 90-х это была одна из самых любимых игр, и ее очень легко было реализовать! В этом проекте мы будем использовать графику SDL.
Игра заключается в том, чтобы двигать вертолет вперед, не касаясь препятствий. Игрок должен управлять игрой с помощью клавиш, и, удерживая клавишу, вертолет перемещается, а при отпускании вертолет он сбивается.
9. Использование графики для рисования и перемещения фигур
В этой графической программе вы научитесь делать машину, а затем заставлять ее двигаться с помощью графики. Это простая программа, написанная с использованием Turbo C ++; однако эта же программа будет работать и в других IDE, например в Dev C++, Code::Blocks и Visual Studios. Для работы программы вам необходимо подключить файл graphics.h.
10. Простая анимация для гонки «с пьяным человеком» от начала до конца.
Это интерактивное консольное приложение для анимации, в котором выбранный вами персонаж (любая буква от a до z) будет забавно перемещаться от начала до финиша. Если он завершает гонку в пределах указанного счетчика (в нашем случае 1000000), то мы печатаем конкретное сообщение.
Заключение
В этой статье мы обсудили некоторые важные проекты начального и среднего уровня. Если вы правильно следовали коду, вы должны получить точные результаты.
Хотя Visual Studio предлагает множество функций, для ее загрузки требуется время.
Проекты будут работать на любой IDE. Сообщите нам, какие из проектов вы пробовали, в разделе комментариев!
Идеи проектов для начинающих программистов. Часть 1
Перевод первой части статьи «Starter Project Ideas for Developers».
Представляем вам список проектов для начинающих разработчиков. Хотя конечно, этими проектами вполне могут заняться и опытные программисты, осваивающие новый для себя язык.
Каждая идея в нашем списке будет сопровождаться подробным описанием, примерами и советами. Отталкиваясь от всего этого, вы сможете создать свой собственный, уникальный проект.
Примеры в статье будут ориентированы больше на JavaScript-разработчиков, но сами идеи вполне пригодны для любого языка программирования.
Засучиваем рукава
Изучаем основы программирования с фокусом на создание, чтение, модификацию и удаление данных (CRUD).
Генератор имен
Придумывать имена сложно. Кажется, что в наше время все варианты username уже использованы. Почему бы не сделать так, чтобы вместо нас имена генерировал компьютер? Идея такого генератора очень проста. Вам потребуются лишь базовые знания языка программирования.
Для начала, следует определиться с тем, какого рода имена вы хотите генерировать (username, имена фантастических героев, персонажей книг или обычные имена). Также нужно придумать, из каких частей будут составляться эти имена.
После того как придумаете, что за имена будет генерировать ваша программа, нужно обдумать, как вы будете хранить данные (имена собственные, имена существительные и прилагательные, титулы и т. п.). Все это можно прописать жестко и хранить в файловой системе, используя CSV или текстовый файл. Можно извлекать из API. Можно хранить в базе данных. Если вы начинающий программист, изучите, какие структуры данных поддерживает ваш язык (объекты, списки, массивы, hashmap) и поэкспериментируйте с ними.
Финальный шаг — рандомный выбор ключевых слов из ваших данных, комбинирование их каким-то заранее прописанным образом и вывод результата. Причем выводить результат можно в консоли, в браузере, в графическом интерфейсе или вообще записывать в текстовый файл.
В чем смысл такого проекта
Это более продвинутый проект, чем hello world, но попроще или равный по сложности списку задач. То есть, это хороший проект для начинающих.
Занимаясь этим проектом, вы будете осваивать:
Как можно усложнить проект
Примеры:
(От редакции. Как часто вам случалось в соцсетях читать комментарии типа «лучше бы ямы залатали», «лучше бы дороги отремонтировали», «лучше бы на детей внимание обратили»? Можно создать специальный «лучшебыгенератор», случайным образом выдающий «лучше бы» предложение. Реализация — веб-страница. Применение — отвечать советчикам в комментариях, давая ссылку на страницу. Пример можно посмотреть здесь).
Список кодов символов
Список эмодзи или других специальных символов для копипаста. Общую идею можно реализовать в совершенно разных приложениях. Например, это может быть справочник, а может — приложение, которое будет конвертировать в код введенный пользователем текст.
В чем смысл такого проекта
Этот проект — хорошая отправная точка, если вы хотите научиться принимать пользовательские данные, обрабатывать их и выводить результат.
Занимаясь этим проектом, вы будете осваивать:
Как можно усложнить проект
Примеры:
Конвертер текста и чисел
Конвертирует числа в двоичную или любую другую систему счисления, а текст видоизменяет (шифрует, переворачивает и т. п.).
В чем смысл такого проекта
Вы не только создадите полезный инструмент, но и научитесь работать с числами и текстом.
Занимаясь этим проектом, вы будете осваивать:
Как можно усложнить проект
Примеры:
Список задач и альтернативные полнофункциональные приложения
Наконец, список задач — идея, за которой вы все сюда и пришли. Шутка:) Но список задач, пожалуй, действительно один из самых распространенных видов проектов, так что без него наша статья была бы неполной. Впрочем, мы все же постараемся добавить несколько интересных альтернатив.
В чем смысл такого проекта
Создание списка задач — отличный способ изучить работу с данными (CRUD), какой-то язык или фреймворк.
Например, вы изучаете JavaScript. Вы можете построить список задач для применения в браузере, используя DOM браузера и LocalStorage APIs. Затем вы создаете API списка задач в бэкенде, используя NodeJS, чтобы изучить, как работает REST API. Наконец, вы обращаетесь к десктопу и создаете еще один список задач, используя Electron — чтобы изучить работу десктопных приложений.
Еще один вариант прокачать свои навыки, связанные с CRUD, — использовать разные языки программирования. Вот вы создали все варианты списков задач на JavaScript. А теперь создайте какой-нибудь из них на C#, Java или Haskell и посмотрите, насколько будут отличаться процесс и результаты. Это поможет вам получить хорошее представление о языках.
Занимаясь этим проектом, вы:
Как можно усложнить проект
Альтернативные варианты приложений для отработки навыков CRUD
Примеры:
Секундомер и таймер
Таймер может быть как простым, так и довольно сложным и интересным.
В чем смысл такого проекта
Это полезное приложение, которое вы в конечном итоге сможете использовать (или заново реализовать) в каком-то другом проекте.
Занимаясь этим проектом, вы будете осваивать:
Как можно усложнить проект
Примеры:
В следующей части статьи мы рассмотрим идеи более сложных приложений. Больше никаких списков задач!
Программирование для начинающих: как стартовать и куда двигаться?
Бывает, что человек, совсем не связанный с IT, проникается интригующей красотой этой сферы и ставит себе задачу постепенно освоить программирование с нуля. И тут он зачастую просто теряется, не понимая, с чего начать, и нуждаясь в хорошем фундаменте и системном подходе.
Я, будучи недавно в такой же ситуации, гуглила, искала мануалов на Хабре (кое-что нашла: Десять советов начинающим программистам, Начинающему программисту про стартапы и не только…), но в итоге всё же была вынуждена обратиться за советом к одному хорошему человеку, который составил для меня вот такой план. С разрешения этого человека размещаю данный план на Хабре – вдруг он пригодится и кому-то ещё. (Тем более, что перечисленные книги относятся к «золотому фонду» литературы в данной сфере и проверены временем.)
UPD: Новичкам советую обратить внимание на комментарии — там активно и аргументированно корректируется этот план.
Нортон «Программно-аппаратная организация IBM PC»
Эта книга, несмотря на свою давность, относятся к тем, что пока отнюдь не устарели. Как новичок подтверждаю – повествование вполне понятно и для почти полного чайника в IT.
Гук «Аппаратные средства IBM PC»
А эту книгу стоит прочитать «поверх» – она расскажет о том, как дела в данной сфере обстоят сейчас.
Морс, Алберт «Архитектура микропроцессора 80286»
Почему тут берётся за основу именно микропроцессор 80286 – станет понятно по изучении трудов первого этапа.
Гук «Аппаратные интерфейсы ПК»
Гук «Интерфейсы устройств хранения»
Этап III. Операционные системы
Таненбаум «Архитектура компьютера»
Колисниченко, Аллен «Linux: полное руководство»
От общей теории переходим к изучению конкретной операционной системы – на примере Linux.
Немет, Снайдер, Хейн «Руководство администратора Linux»
Этап IV. Собственно программирование
Керниган, Ричи «Язык программирования С»
Почему первым для освоения выбран именно язык Си? Как мне рассказали знающие товарищи, он поможет достичь правильного «программистского мышления», чего было бы сложно достичь, начиная изучение, скажем, с Паскаля. Кроме того, язык Си по-прежнему используется в наши дни и подходит как для прикладного, так и для системного программирования.
Кнут «Искусство программирования»:
Том 1. Основные алгоритмы
Том 2. Получисленные алгоритмы
Том 3. Сортировка и поиск
Бентли «Жемчужины программирования»
Зачем осваивать эти труды? Как уже отмечали на Хабре – «наверное, нигде больше, чем в айти, не изобретается такое огромное количество велосипедов». Данные книги помогут этого избежать – и попутно будут прививать умение писать не просто код, а хороший код.
Ну а для затравки можно прочесть небольшой цикл лекций «Культура программирования» (автор – А. Бабий). Он помогает начинающим программистам понять, что их деятельность не будет проходить в вакууме, а неизбежно включит взаимодействие с другими программистами, с заказчиками и пользователями (а также включит необходимость копаться потом в своих собственных или в чужих программах).
Закономерный вопрос новичка: сколько времени займёт изучение всего этого? По прогнозам моего советчика, у человека, который может тратить на изучение программирования только вечера и выходные, на прочтение и осмысление литературы первых трёх этапов уйдёт полгода-год. На четвёртый этап тоже даётся год – чтение должно сопровождаться практикой по самостоятельному составлению программ. Как получится на самом деле – время покажет.
Буду крайне благодарна за ваши советы и уточнения.
8 советов начинающим программистам или ретроспектива моей карьеры
Ровно 15 лет назад, в этот самый день, своими дрожащими коленками я переступил порог офиса небольшого провинциального интернет-провайдера. Моя первая настоящая работа в качестве программиста. Знаний почти нет. Тонкий испуганный голосок откуда-то из желудка советует развернуться и убежать подальше, пока окончательно не опозорился. Глубокий вдох-выдох, и вот генеральный директор уже ведет меня в небольшую комнатку-подвальчик, показывает на полуразобранный компьютер, видавший лучшие времена: «Это твое рабочее место. Устраивайся». Так началась моя карьера.
Но перенесемся в настоящее. Сейчас я пишу эти строки, сидя в удобном офисе престижного БЦ в центре Москвы. За плечами работа с крупными международными брендами и разработка сложных fintech приложений. Сотни книг прочитано и десятки статей написано. Мания величия давно вылечена. Менеджерские позиции опробованы и отвергнуты. Душевное равновесие найдено. Любовь к профессии сохранена. Однако это не статья из серии “Какой я молодец. Делай, как я и тоже будешь молодцом”. Эта статья о том, какие ошибки я совершал и что можно было сделать лучше. Эта статья — ретроспектива моей карьеры.
Меняйте компанию, если нет развития
Время от времени я застревал в компаниях, которые явно перерос по уровню. Вроде и деньги платят хорошие, и все тут знакомо и удобно. Приходишь утром, выбираешь привычный режим на кофемашине. Обмениваешься шутками с Катей из бухгалтерии. Садишься в свое кресло, которое давно приняло очертания твоего мягкого места. Открываешь ноут и погружаешься в ежедневную рутину из типичных хорошо знакомых тебе задач. Внимание! Это ловушка!
Работа не должна становиться рутиной. Должны быть вызовы. Не каждый день, может даже не каждый месяц, но если вам слишком легко — пора уходить. Не нужно бояться трудностей. Если на собеседовании вам показалось, что тут ребята решают слишком сложные задачи, и вы точно лажанетесь в первый же день — этот оффер для вас. Ищите максимально сложные задачи, только так вы сможете совершенствоваться, а не деградировать на кухне любимой компании по 4 часа в день
Будьте программистом, а не кодером
К сожалению, нам очень редко ставят прозрачные и понятные задачи. Перед тем, как открыть IDE, я должен быть на 100% уверен, что понимаю проблему, которую собираюсь решать. Хорошим маркером тут является декомпозиция. Если я могу расписать решение по шагам и знаю, к какому результату приведет каждый шаг — только тогда я открываю редактор и пишу код.
Помните: ваша ценность как программиста не в элегантном коде с экзотическими паттернами от “Банды четырех“. Ни одна компания еще не добивалась успеха благодаря красоте кода (во всяком случае я таких примеров не припомню). Всегда держите в уме конечный результат.
Не бойтесь экспериментировать
Каждый раз, начиная новый пет-проект, я либо начинал его на хорошо знакомых технологиях, либо переходил на них после нескольких недель. Ведь так гораздо быстрее. Какой смысл мучиться с Кафкой, если есть любимый Кролик? Зачем укладывать структуру данных в документы, если она сама легко укладывается в реляционную модель? Каждый раз мысль о том, что нужно побыстрее выйти в прод, мешала мне развиваться. В итоге большая часть моих проектов лежит мертвым грузом на гитхабе, не принеся мне не только мировой известности, но даже новых знаний. Пытаясь угнаться за сроками, которые я сам себе ставил, я просто терял время.
Экспериментируйте. Спешить некуда. Развивайте кругозор. Если вы эксперт в какой-то технологии — используйте эти знания на работе, но вне работы пользуйтесь инструментами, с которыми вы не знакомы. Это сложно психологически, ведь вы будете понимать, что используя хорошо знакомый язык программирования, уже пожинали бы плоды славы от вашего проекта на Мальдивах. А приходится разбираться, почему преобразование чара в инт отдает код символа, а не цифру.
Запускайте пет-проекты
Я давно понял: чтобы быть успешным программистом, мало быть хорошим программистом. Нужно понимать разработку продукта гораздо шире своей специализации. Но как этого добиться? Я могу прочитать сотни книг по маркетингу и они будут бесполезны, если я не применяю эти знания на практике. Я могу подписаться на телеграм каналы лучших продуктологов страны, но что с того, если у меня нет продукта, на котором можно экспериментировать?
С тех пор, как я запустил свой первый пет-проект, мне стало гораздо проще находить общий язык с фронтами, qa, продактами, маркетологами и любыми другими членами команды. Ведь я стал понимать их работу намного лучше. Современное программирование — очень командное, и опыт работы над собственным проектом помогает мне находить точки соприкосновения с другими членами команды.
Учитесь декомпозировать
У меня всегда были проблемы с внимательностью. Я допускал в коде очень глупые ошибки. Не потому что я что-то не понимал или не знал как сделать. Просто я был невнимателен. Боролся с этой проблемой разными скучными способами (например, следил за минутной стрелкой), но ничего не помогало. Естественно, после каждой такой ошибки моя самооценка резко падала. О каком развитии может идти речь, если самооценка на нуле?
Решение пришло в виде декомпозиции. Меньше задача = меньше кода = меньше вероятность допустить ошибку. Я часто слышу фразу «эту задачу нельзя декомпозировать», но лично я считаю, что любую задачу можно декомпозировать до бесконечности. Если у вас не получается, скорее всего, вы просто не до конца понимаете задачу.
Изучайте инструменты
Долгое время я пользовался IDE как обычным редактором кода с удобной навигацией. А еще у меня был начальник, который программировал исключительно в mcedit и часто театрально вопрошал: «Кто ты без своего IDE?». Или у меня 24/7 был открыт терминал, но я совсем не умел с ним работать. Я долго жил без статических анализаторов и стайл-фиксеров. Игнорировал горячие клавиши. И не видел в этом никакой проблемы.
Сейчас я подписан на все официальные youtube-каналы своих инструментов. Удивительно, сколько полезного можно из них узнать. Я внимательно смотрю за процессом работы своих коллег и часто перенимаю то, что показалось мне интересным. Также некоторые инструменты показывают нам всплывающие окошки, где рассказывают, как можно улучшить процесс взаимодействия. Не стоит этим пренебрегать.
Участвуйте в opensource
Opensource — это больно. Каждый ваш PR будет рассмотрен под микроскопом. Каждая переменная, каждый символ. Каждый тест будет подвергнут сомнению. И это не ваш тимлид, который: «а, ну ладно, давай так смержим». С этими людьми не договоришься, на них не пожалуешься, их не задавишь авторитетом. И они вам даже не платят. Примерно на двадцать пятом комментарии очень хочется послать все нафиг.
Терпите! Opensource — это отличная возможность прокачать свой скилл, работая с лучшими программистами мира (хотя тут зависит от проекта). Начните с малого. Выберите какой-нибудь несложный инструмент или библиотеку. Зайдите в раздел issues и посмотрите, что можно пофиксить. Надо сказать, что обычно на гитхабе полностью отсутствует токсичность. Если ваш ПР разнесут в клочья, то сделают это очень конструктивно. Во всяком случае, по моему опыту.
Верьте в себя
Время от времени у меня возникали ситуации, когда хотелось все бросить и пойти работать на стройку. Таскать кирпичи. Этой ситуацией могла быть задача, которая никак не заканчивалась. У которой ежедневно менялись требования. Или технология, которую я не хотел изучать. Или интеграция стороннего сервиса, у которого полностью отсутствовала документация. Или просто функциональность, для понимания которой требовалось образование финансиста, а все продуктологи говорят исключительно на английском. Я психовал, прокрастинировал, увольнялся и срывал злость на котейке.
Есть один прием, который сейчас сильно помогает мне с такими задачами. Просто я всегда помню, что в итоге я справлюсь. Всегда справлялся. И всегда буду. Нужно просто сесть, поизучать, подумать, разложить по полочкам, задать правильные вопросы правильным людям. Главное, верить в себя и оставаться спокойным. Вообще, пожалуй, это самый главный совет, которым я и закончу статью. Keep calm and believe in yourself. Вы справитесь.