Практика для начинающих программистов – Как найти свою первую работу программистом? От резюме до испытательного срока / Mail.ru Group corporate blog / Habr

Содержание

Страсть к программированию. Глава 15. Практика, практика, практика / Habr

О переводе

Это перевод 15 главы книги The Passionate Programmer: Creating a Remarkable Career in Software Development. Её автор — Chad Fowler — талантливый Ruby-разработчик, известный докладчик на конференциях, посвящённых Ruby и IT в целом. Бывший саксофонист, а сейчас — CTO 6Wunderkinder.


Краудсорсинговый перевод книги ведётся на github, присоединяйтесь.
Глава 15. Практика, практика, практика

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

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

В ИТ часто ищут разработчиков, которые максимально используют свои возможности. К сожалению, обычно это разработчик не достаточно квалифицированный для выполнения той работы, для которой его нанимают. Наша индустрия имеет склонность практиковаться во время работы. Можете представить профессионального музыканта, который бы выходил на сцену и повторял то, что я слышал в классах своего музыкального коллежда? Его бы не поняли. Музыкантам платят

за концерты, а не за практику. Что боец, что боксер, если они валятся с ног от усталости во время поединка, — они не смогут так развиваться в спорте.

Как индустрии, нам нужно время для практики. У нас на Западе местные программисты часто производят более высококачественный код, чем зарубежные компании. Если мы пытаемся соревноваться в качестве, мы должны прекратить использовать рабочее время для практики. Мы должны инвестировать время в наш проект.

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

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

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

Итак, откуда вам знать где практиковаться? Где ваши пределы возможностей? Что касается практики при разработке ПО, то это тема для отдельной книги. Для начала я бы снова позаимствовал свой опыт джазового музыканта. Я бы разбил практику на следующие категории (упрощенно для не-музыкантов среди нас):

— физика/координация
— чтение с листа
— импровизация

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

Физика/координация:

Музыканты должны практиковаться в технических аспектах своих музыкальных инструментов: извлечение звука, физическая координация (заставляя пальцы двигаться легко например), скорость и точность — все это важно при практике. Какой эквивалент есть у разработчиков программного обеспечения по сравнению этими основными положениями для музыки? Что есть такого в пыльных уголках вашего языка программирования, на что вы редко обращаете внимание? Например, поддерживает ли выбранный вами язык программирования регулярные выражения? Регулярные выражения это очень мощный и печально недостаточно используемый инструмент многих сред разработки. Очень часто разработчики не используют их, тогда когда есть такая возможность, из-за недостаточного уровня знаний для эффективного использования регулярных выражений. Как результат, создается множество ненужного кода по структурному анализу строк (needless string-parsing code), который в дальнейшем должен сопровождаться.

То же применимо к API вашего языка программирования или библиотекам функций. Если под вашими пальцами (как говорят музыканты) нет множества инструментов среды разработки, маловероятно, что вы начнете ими пользоваться, когда они действительно понадобятся. Попытайтесь понастоящему забуриться, например, в то как работает многопоточное программирование в выбранной вами среде разработки. Или как насчет поточных библиотек, сетевых программных APIs, или даже набора утилит доступных для работы со списками или коллекциями? Большинство современных языков программирования предлагают богатые и мощные библиотеки во всех этих областях, но разработчики ПО предпочитают изучать малую часть, с которой они могут менее эффективно писать тот же самый код, который могли бы писать, владея полным набором доступных им инструментов.

Чтение с листа:

Что касается музыкантов, возможность читать и исполнять музыку почти идеально с первого раза отличает профессионала. Я однажды играл на саксофоне для Blockbuster (компания видеопроката). Я играл и ведущую и вторую партию одновременно в быстром темпе. Я видел ноты первый раз, буквально как только лента начала вращаться. Мы играли попеременно ведущую и вторую партию. Любые ошибки, и вся группа должна была начинать сначала — и цена этого — студийное время.

Что касается разработчиков ПО, что может означать для них чтение с листа относительно кода? Или требований спецификации или дизайна? Замечательное место для поиска нового кода, с которым можно практиковаться, это сообщество открытого исходного кода. Есть у вас любимые примеры открытого программного обеспечения? Как насчет того, чтобы попробовать что-нибудь добавить? Идите посмотрите список дел (to-do list) для вашего открытого ПО и выделите себе ограниченное количество времени для добавления новых свойств (или как минимум определения того, что следует добавить).

После выбора скачайте исходный код ПО и начните исследование. Как знать куда смотреть? Какие уловки вы используете для нахождения своего пути в значительной части кода? Где ваша точка отсчета?

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

Импровизация:

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

Замечательный способ повысить навыки импровизации при написании кода это справляться с самостоятельно поставленными ограничениями. Выберите простую программу и попытайтесь написать ее с этими ограничениями. Мое любимое упражнение это писать программу, которая выводит текст старой песни «99 бутылок пива на стене» //Прим. перев.: cсылки на youtube — тут пива нет, а тут есть;)

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

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

Действуйте!

1. Top coder — topcoder.com это сайт для соревнований в программировании. Вы можете завести учетную запись и соревноваться за призы. Даже если вы не заинтересованы в соревновании с другими, TopCoder предлагает комнату для практики с большой коллекцией проблем, которые вы прекрасно можете использовать в качестве практических занятий. Идите зарегистрируйтесь и попробуйте!

2. Code Kata — Дэйв Томас, один из Прагматичных Программистов (Pragmatic Programmers) (наш любимый издатель), взял идею практики написания кода и сделал что-то… ну, прагматичное из этого. Он создал серию того, что называется Code Kata, маленькие провокационные упражнения, которые программисты решают на выбранном ими языке программирования. Каждая ката представляет собой особую технику или мыслительный процесс, заставляющий шевелить мозгами. Во время написания книги, Дэйв создал 21 такую ката и выложил их в свободном доступе на сайте (http://codecata.pragprog.com/

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

Топ 8 лучших ресурсов для практики программирования в 2018 / Habr

Привет, Хабр! Представляю вашему вниманию перевод статьи Top Coding Challenge Websites of 2018 автора Trey Huffine.

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

На чем бы вы не кодили: Python, Ruby, JavaScript, Golang, TypeScript, или еще какой-то язык, вы найдете здесь ресурс под ваши потребности. Чтобы научиться программировать — нужно программировать.

1. Codewars


www.codewars.com

Сodewars программирование — это сплошной фан. Зарабатывайте очки, повышайте свой рейтинг, создавайте кланы. Автор статьи предлагает присоединиться к своему клану (вы можете посмотреть к какому в оригинале статьи). Я же, призываю вас присоединяться к клану HTML Academy, конечно(прим. переводчика). Ресурс предлагает огромную подборку задач на более чем 20 языках программирования. На codewars вы сможете обсудить задачи с другими игроками, а также посмотреть альтернативные решения.

2. HackerRank


www.hackerrank.com

Уровень сложности задач на HackerRank чуть выше, попадаются задания, выходящие за рамки базового программирования. Можно развиваться в нескольких областях, включая алгоритмы, математику, SQL, функциональное программирование, AI и многое другое. Также платформа предоставляет функционал для корпоративного программирования.

3. Coderbyte


coderbyte.com

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

4. CodinGame


www.codingame.com

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

5. LeetCode


leetcode.com

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

6. Topcoder


www.topcoder.com

Topcoder, вероятно, лучше подходит для продвинутой аудитории. Это один из первых сайтов, посвященных кодированию, который вводит концепцию ранжирования. Вы можете посоревноваться в решении задач с другими разработчиками за денежный приз, а также принять участие в конкурсе «Single Round Match».

7. Project Euler


projecteuler.net

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

8. CodeFights


codefights.com

Много задачек + платформа для поиска работы/разработчиков. Кроме того, у них есть уникальная функция под названием «Company Bots», где разработчики состязаются с официальными ботами программирования от некоторых из самых больших игроков в IT сообщества.

Как найти свою первую работу программистом? От резюме до испытательного срока / Mail.ru Group corporate blog / Habr

Все знают, что сейчас программирование — это супервостребованная и супероплачиваемая профессия. Но немногие знают, что вакансий для начинающих очень мало. Все работодатели хотят, чтобы к ним пришёл человек, который уже что-то умеет. Напишет код, который не надо выкидывать. Джуниорских вакансий (не требующих опыта работы) мало, и конкуренция здесь очень большая. С одной стороны, существует огромная потребность в программистах. С другой — в начале карьеры вы можете столкнуться со сложностями. Работодатели обращают внимание в первую очередь на тех, у кого в резюме уже есть строчка о прошлом месте работы. Если у вас её нет, будет сложно.

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

Итак, как же новичку получить первую работу?


Оно должно как-то называться. Существуют два варианта.
  1. Допустим, вы программировали на разных языках. В школе наверняка писали на Pascal, а потом что-то делали на C++. Если вы постарше, то, возможно, знакомы с Delphi. Поэтому в названии резюме можно указать все языки, на которых вы писали. Авось какой-то заинтересует потенциального работодателя. Например, так: «Программист: delphi, python, php, html, java, c#, ruby, scala».
  2. Можно указать, что вы специализируетесь на чём-то одном, например на Python. Обычно, если в названии резюме перечислена куча языков, то понятно, что вы не умеете ничего. Всего коснулись поверхностно. В глазах работодателя вы будете человеком-оркестром, который пришёл на прослушивание в консерваторию. Не надо так делать. Зачёркиваем длинную простыню и оставляем просто «Программист на Python». Повышайте свою самооценку, не акцентируйте в резюме неуверенность в себе, связанную с нехваткой опыта.

Из этого следует правило: выберите один язык программирования и специализируйтесь на нём. В университете я писал на С++, потом понял, что связанные с ним вакансии меня не очень прельщают, поэтому надо двигаться в другом направлении. Я выбрал для себя C# и Java. Мне они оба очень понравились, и я долго не мог определиться, какой мне больше по душе: тут есть такая-то фича, здесь такая, казалось бы, одинаковые. Я купил две здоровенные толстые книжки — по C# Эндрю Троелсена и по Java Брюса Эккеля. На каждую я потратил по две недели и начал откликаться на вакансии по обоим языкам. Думал, куда раньше возьмут — в тот язык и буду углубляться. Сейчас я понимаю, что переложил ответственность за выбор языка с себя на мироздание, на судьбу, на работодателя.

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

Какой язык лучше всего указать в резюме? Языков много, но они очень часто друг друга взаимозаменяют. Не все из них живые. Основное правило — выбирайте популярные языки, не надо брать экзотику. Не нужно слушать, что какой-то Haskel очень крутой, классный, умеет делать всё и вся, а функциональные языки программирования такие волшебные… Каждый хвалит свой язык.


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

Так что при выборе языка обращайте внимание:

  • на его популярность;
  • на решение задач, которые вам интересны;
  • на простоту освоения: на начальном этапе лучше выбрать попроще.

Сейчас по количеству вакансий наиболее востребованы следующие языки: Javascript, PHP, Java, C++, Python, C#, Ruby, Swift, Objective-C. Выбрав какой-то язык, скорее всего, вы на нём и остановитесь. Может быть, через два года разочаруетесь или решите перепрофилироваться. Но это будет немножко больно. С другой стороны, свой опыт вы сможете легко применить в другой сфере деятельности.
  • Если речь пойдёт про frontend — то есть разработку визуальной части сайтов, — то здесь всё просто, нужны три языка: HTML, CSS, JavaScript.
  • А вот для разработки серверной части вариантов много. Самый популярный язык — РНР. Мне на каждом докладе говорят, что про РНР плохо отзываются, какой-то он не такой. Многие высказывают гипотезы, что он умрёт. Но ничего подобного, половина сайтов написана на РНР, половина вакансий — на РНР, ВКонтакте — на РНР, как и многие другие крупнейшие проекты. Никуда язык не денется. Если в нём будут критические проблемы, то их просто исправят. Появился Ruby on Rails, классный движок — ну, ничего страшного, на РНР стали появляться фреймворки, в которые внедрили аналогичные фичи. Всё хорошо. Отдельно скажу, что Python многих прельщает простотой и универсальностью.
  • С точки зрения мобильной разработки есть всего два варианта. Если хотите писать под Android — это Java. Если под iOS — Swift или Objective-C. И то и другое — хорошие решения.
  • Разработка под desktop и серверы: Python, Javaб С++ или C#. Здесь есть простор для метаний. Python попроще, чем остальные. На Java можно писать под Android. На C# — углубляться в разработку игр и сайтов. C++ больше подходит для тех задач, где требуется высокая скорость работы. В остальном у них возможности совпадают, просто на Java сайты пишут реже.

Возникает резонный вопрос: если начинаешь с нуля, то имеет ли смысл изучать сразу новый язык? Например, в Apple перешли с Objectivе-C на Swift, потом появился Swift 2 и 3. Обычно я консервативен и считаю, что новое не всегда оправданно и действительно выстреливает. Появляется новый язык, по нему нет вакансий, но где гарантия, что они появятся потом? Может, на нём так и напишут с пяток проектов.

Что касается Objectivе-С и Swift, я давно присматриваю за этими языками, и буквально на днях количество вакансий на Swift сравнялось с Objective-C. Мое мнение, это очень серьезный показатель, что Swift будет только набирать обороты и со временем может вытеснить Objective-C.


Итак, мы выбрали язык и указали его в резюме. Далее перечисляем технологии, которые мы знаем. Давайте снова разбираться, что круче. Допустим, вы программируете на PHP. Имеет ли смысл писать, что вы знаете С, С++, Pascal, C# и так далее? Не надо перечислять все технологии, которые напрямую не относятся к вашей компетенции. Надо назвать вакансию «программист: РНР». В таком случае работодателю неинтересно, что вы когда-то писали на С и Visual Basic. Весь этот длинный хвост можете не указывать.

Есть и другой вариант. Допустим, я программист на РНР, но знаю все эти технологии, потому что они относятся к веб-разработке: и РНР, и YII2, и HTML, разные фреймворки. Если будете искать вакансию веб-разработчика, то наверняка увидите здоровенную простыню дополнительных требований с кучей умных слов. И многие этого пугаются, особенно в веб-разработке, страшно, что надо столько знать… К этому надо стремиться: знать Webpack, работать с разными БД и так далее.

Многие для повышения авторитета сразу пишут, что я и это знаю, и это примерно знаю, но я новичок и готов получать пока 15—30 тысяч, и опыта работы у меня нет. Какое будет впечатление у работодателя? То же самое: человек-оркестр.

Есть и другая проблема. Допустим, работодатель поверит, что вы всё это знаете. Он же на собеседование придёт с этим списком, ткнёт в любую технологию и скажет: «Теперь мы говорим про React, что ты знаешь про него? А это что? А это? Ясно, React мы не знаем».

Вычёркиваем.

«Хорошо, поговорим про MySQL, напиши мне транзакцию, которая делает то-то и то-то».
«Ну, я в MySQL установил только среду разработки, два select-а сделал…»

MySQL тоже вычеркиваем. Всё остальное он даже смотреть не будет. Работодателю уже будет неинтересно, что вы полгода жарили РНР: он поймал вас на вранье. Так что зачеркиваем всё перечисленное.

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

Более того, даже не пытайтесь ознакомиться со всеми этими многочисленными технологиями. Если вы РНР-программист — так и напишите, что знаете РНР и немного HTML и CSS для верстки. Ещё знакомы с одним фреймворком — всё, работодателя это устроит. Он не будет вас гонять по YII, поскольку вы и не указали, что знаете его. Работодатель понимает, что вас можно гонять по РНР.

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


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

Когда я набирал в команду джуниоров по C#, мы опубликовали вакансию и в течение двух-трёх недель получили 50 откликов. У нас не было кадровика, поэтому мы пошли программерским путём: всем кандидатам выслали тестовое задание. Кто его сделал, проходил дальше. И мне как работодателю не были интересны сертификаты и диплом. Я даже на резюме не смотрел, пока человек не присылал мне решение тестового задания. Но для кадровика это может быть важно.


Очень важная вещь на этапе отбора. Если у вас есть портфолио, то работодатель-программист сможет понять, в состоянии ли вы решить задачу аналогичную той, которую вы уже решали.
Что можно написать в своём портфолио? Если вы хотите разрабатывать сайты, то просто придумайте себе задачку и решите её за необходимое время. Сделайте небольшой сайт и выложите его, лучше всего на Github. И напишите: я создал небольшой интернет-магазин, использовал такие-то технологии, вот код. Для работодателя это будет показателем, что вы ещё и про Git знаете. Он понимает: если я возьму этого новичка на работу, он мне за два дня сделает примерно то же самое, с чем сам разбирался месяц. И не надо будет ему платить за то, чтобы он выучил, что такое Bootstrap, познакомился со всякими нужными штуками. Он сам уже это изучил и теперь в состоянии решить задачу за пару дней. Поэтому не пренебрегайте портфолио. Вам оно очень сильно поможет.
Если он у вас есть, то опишите его. После этого вас будут отрывать с руками. После окончания университета я получил два отклика на своё резюме, а через год просто не знал, как его спрятать. Потому что всем нужны программисты, и кадровики видят: этого парня вытерпели год и не уволили, он не облажался, значит, толковый человек. Если я его возьму к себе на работу, то, скорее всего, я тоже смогу терпеть его как минимум год, его код не надо будет выбрасывать.
Резюме готово, что делать дальше? Прежде чем откликаться на вакансии, надо немного психологически настроиться, чтобы процесс пошёл правильно. Представьте свой идеальный рабочий день, что бы вам хотелось получить в итоге? Иначе мы просто будем белкой в колесе, станем бежать за какой-то мечтой, каким-то счастьем. Представьте, как выглядит ваш офис, ваши коллеги, какое у вас самоощущение, какими проектами вы занимаетесь. Просто настройтесь на то, какие эмоции вы будете испытывать, когда станете ходить на работу. Сделайте запрос мирозданию: «Хочу, чтобы было так, так и так». И успокойтесь, всё у вас будет хорошо.

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

Так выглядел мой разговор с генеральным директором GeekBrains.

Гендир: «А что ты умеешь делать? Ты на C# программируешь, а мне нужен Ruby».
Я: «Я не хочу программировать, я умею то, умею сё».

Через две недели я вышел на работу.

Наверно, вы представляете: «Я найду работу так: выложу резюме, на него откликнутся, я приду на собеседование, и всё получится». Но работа может найти вас совершенно другим способом. Например, вы зарегистрируетесь на фрилансерском сайте, выполните какой-то заказ, и у вас появятся постоянные клиенты. Или друг пригласит вас к себе работать. Не зацикливайтесь на способе достижения цели. Просто будьте открыты к предложениям, откуда бы они к вам ни пришли.

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

Не парьтесь, ребята. Отправьте 100, 200, 300 откликов, сколько найдёте. И законом больших чисел вы сообщите мирозданию, что реально хотите работу. Вас пригласят на пять собеседований, на одном из них вы устроитесь на работу — всё. Если вам посылают тестовое задание, не пренебрегайте им. По моему опыту, 90 % кандидатов отваливаются, когда получают тестовое задание.


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

Если вас взяли на испытательный срок, то не надо всех заваливать вопросами, иначе подумают, что вы дурак. Но не надо кидаться и в другую крайность, когда начинающему разработчику дают задачку, и он уходит в себя на три дня, потому что сам пытается во всём разобраться. А работодатель думает: неужели вам мало трёх дней на такую простую вещь? Так что не стесняйтесь задавать вопросы. Если вы больше часа занимаетесь какой-то задачкой и у вас не получается, подойдите к старшему, спросите, он вам поможет, всё будет хорошо.


Друзья, и напоследок напутствие: не бойтесь экспериментировать. Ищите себя, находите то, чем вам нравится заниматься. Нет ничего хуже, чем десять лет просидеть на нелюбимой работе из страха, что не сможете устроиться на другую. Если вам нравится программировать — начинайте обучаться этому ремеслу, совмещайте учёбу с основной работой. Если хотите — приходите к нам в GeekBrains, и мы вам обязательно в этом поможем. Удачи вам, и до новых встреч!

Изучение C# — Практический подход / Habr

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

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

Где начинающему программисту найти специалистов, которые смогут не только дать информацию, но и показать практический пример создания готовых игровых и прикладных программ, проконтролировать, кто станет идейным вдохновителем?

Есть такая партия система! Разрешите рассказать вам о проекте «Формула программиста», который сочетает в себе упомянутые преимущества. И студент, и инженер, и талантливый ребёнок сможет почерпнуть массу практического опыта и на выходе получить множество готовых игровых и прикладных программ, а также прокаченные навыки программирования на популярном языке программирования C# (Си Шарп).

Почему во главу проекта поставлена не теория, а опыт создания готовых программ на языке C#? Потому что самый эффективный способ запоминания — это не чтение, не просмотр, а конкретные действия, у которых есть конкретный ощутимый результат — созданная программа, которую не стыдно разместить в своё портфолио.

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

Вот только небольшой список игровых программ, которые создаются на видеокурсах «Формулы программиста»: Лабиринт, Арканоид, Карточки памяти, Змейка, Игра «Жизнь», Пятнашки, Игра 2048, Виселка, Крестики-нолики, Пасьянс-домино, Сокобан на двоих, Морской бой. Также есть уроки по созданию прикладных программ: Секундомер, Шахматные часы, Скорость на клавиатуре, Работа с Winapi, Попиксельная обработка изображений, Говорящие часы, Построение графиков, Клиент-сервер смены обоев, Архиватор, Книжка оценок и другие. Формулисты с удовольствием создают эти программы, о чём свидетельствует масса положительных отзывов и видеообзоров созданных программ.

Посмотрите на досуге 9-минутный видеообзор Андрея Полякова о созданных им игрушках по видеокурсу «Игры со спрайтами»:

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

Почему такой проект актуален сегодня?

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

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

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

Проект «Формула программиста» — прекрасная возможность наработать практику программирования за счет решения консольных задач и доведения результата до 100%.

Основные преимущества методики обучения

  • Прохождение видеокурсов строго последовательное, благодаря чему внимание программиста концентрируется на одной задаче. Для перехода к следующему уроку необходимо выполнить задание урока и отправить отчёт, который проверяют организаторы и другие участники проекта.
  • Каждая игровая и прикладная программа создаётся с нуля. Если вы — новичок, вам достаточно просто повторить все действия за лектором на экране. Если более опытный программист, для вас будут дополнительные творческие и технические задания.
  • Прокачка навыков происходит незаметно, как бы само-собой. Формулист просто переходит от одного урока к другому, а количество плавно переходит в качество.
  • Большинство видеоуроков имеют короткий 15-минутный формат, что благоприятно сказывается на усвоении материала и упрощает выполнение самостоятельного задания.
  • На проекте есть раздел Консоль — это интерактивный задачник, в котором робот Шарп компилирует и проверяет ваши программы по заранее заготовленным тестам, это происходит прямо на сайте.
  • У каждой задачи в разделе Консоль есть видеорешение, которое охватывает теоретический материал, необходимый для решения каждой задачи.
  • Тренеры проекта регулярно проводят обучающие и мотивационные вебинары по программированию.

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

Найдётся интересный проект для любого начинающего и продолжающего программиста, каждый сможет найти для себя что-либо полезное.

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

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

Что необходимо для участия в проекте?

  • Желание стать опытным программистом
  • Несколько часов в неделю для обучения
  • Установленный Microsoft VisualStudio C#
  • Финансы на платные пакеты
Объём учебного материала

  • 11 видеокурсов по созданию игровых программ
  • 11 видеокурсов по созданию прикладных программ
  • 11 профессиональных видеокурсов по различным технологиям
  • 300 консольных интерактивных задач
  • 3 года еженедельных вебинаров.
Статистика активности

  • 8200 участников
  • 27500 отчётов по видеоурокам
  • 82700 решений консольных задач
Авторы видеокурсов:

  • Волосатов Евгений (основатель проекта)
  • Вставская Елена
  • Шмойлов Кирилл
  • Жданов Валерий
  • Черный Константин
Миссия проекта

  • Погружение в язык Си шарп
  • Мотивация к изучению языка
  • Прокачивание навыков программирования

Добро пожаловать на «Формулу программиста», адрес проекта: VideoSharp.info.

5 идей проектов для практики программирования

Многим нравится писать код для себя, но иногда не хватает идей. Предлагаем 5 вариантов проектов для практики программирования.

GraphQL – это язык описания запросов для клиент-серверных приложений, он позиционируется как альтернатива REST API. Если вам часто приходится обрабатывать массивы данных, на его изучение точно стоит потратить время.

Этот курс поможет освоиться с GraphQL:

Механика работы приложения в терминале проста: вы даете входные данные и получаете данные на выходе. Начните с написания чего-то маленького, несколько идей для примера:

  • Запросить имя пользователя, обработать (например, развернуть) и вернуть результат.
  • Показывать математические выражения и получать от пользователя решение.

Здесь можно ознакомиться с основами написания приложений для терминала на JavaScript.

Electron позволяет создавать десктопные приложения на основе web-технологий. Вы используете для создания логики и интерфейса привычные инструменты, вроде HTML, CSS и JavaScript, а на выходе получаете программу, которую можно запустить как нативное приложение.

Некоторые известные ПО созданы на основе Electron, среди них Visual Studio Code, Slack и Webtorrent.io.

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

Инстаграм – не самое простое приложение, и воссоздание его архитектуры многому вас научит. Вот некоторые вещи, которые вы постигните в процессе:

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

D3 расшифровывается как Data-Driven-Documents, и сейчас это одна из самых используемых библиотек для построения графиков.

Попробуйте визуализировать набор данных с помощью D3. Для примера можно взять один из бесплатных датасетов с GitHub.

Как лечится кризис начинающего программиста? — Хабр Q&A

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

Возьмем, как пример, тот же бух.учет на предприятии. Как Вы думаете, почему 1С Бухгалтерия так широко распространилась в РФ и СНГ? Эта программа позволяет бухгалтеру в 2-3 клика мышки сформировать отчет для регулятора(ФНС, ПФР и т.д.), вместо того чтобы человеку сидеть руками искать платежные поручения, вычислять налоги и т.п. Софт просто подтягивает выписку из банка, анализирует ее и выдает готовую для печати бумажку, что экономит бухгалтеру сильно много времени. Расчет заплатанный налогов и отчеты в соц.фонды это вообще красота - 8 кликов мышкой и все готово 🙂

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

И вот, далее Вы для себя определитесь, какая Ваша основная цель? Какой Ваш основной посыл обществу?

Личной мой посыл - "Я помогаю людям экономить: время, деньги, нервы и т.д.".

Как я это делаю?
У меня сначала был маленький интернет-магазин по продаже катализаторов для бензина(в поиск "кондиционеры метала для а/м"). При соблюдении определенных условий, расход топлива на малометражках снижался от 20% до 45%
Вторым моим проектам было небольшое мобильное приложение для отслеживания хода исполнительного производства в ФССП(для взыскательней, уже сдохло). Мне и моим знакомым(не юристы) это экономило достаточно много времени на ругань с приставами, чего они должны делать и т.д. Кто сталкивался с этой службой должен знать эффективность и оперативность их работы, особенно в регионах...
Сейчас я пишу небольшой конструктор сайтов, который поможет одной дружественной мне веб-студии сильно оптимизировать процесс создания низкобюджетных сайтов визиток

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

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

Если говорить о чисто практических инструментах(функции стандартной библиотеки, фреймворки и т.д.)... Лично я могу считать себя профессионалом в какой бы то ни было технологии, ни когда я прочитал 1-2 книги и/или написал 1,5 задачи оттуда же. С таким уровнем я не могу сказать что я знаю язык/технологию в принципе, просто знаком - да, но я ее не знаю. Считать себя профессионалом я могу после того как решу не менее сотни задач, используя эту технологию и написал не менее 1 млн строк кода, именно написал, а не сгенерировал rake/gii/artisan или чем-то там еще.

Вам же я желаю не останавливаться, развивайтесь. Мастерство приходит с опытом.

P.S.: от холиваров на тему 1С прошу всех воздержаться

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

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

Найти число пи до n-й цифры после запятой

Введите число, и программа начнет генерировать число пи. Поставьте определенный предел, до которого программа должна дойти. Реализации:
Python №1, Python №2, Haskell, PHP, JavaScript, Go

Последовательность Фибоначчи

Введите число, и программа сгенерирует последовательность Фибоначчи до этого числа или до N-го числа. Реализации: Python №1, Python №2, Python №3, Bash, Haskell, PHP, JavaScript, Java, Go, Python №4, Python №6

Разложение на произведение простых чисел

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

Следующее простое число

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

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

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

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

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

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

Реализации: Python

Калькулятор

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

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

Реализации: Python

Будильник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сортировка

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

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

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

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

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

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

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

Эйлеров путь

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

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

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

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

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

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

Инвертированный индекс -- это структура данных, используемая для поиска во всем тексте. Дается ряд текстовых файлов, реализуйте программу для создания инвертированного индекса. Также создайте пользовательский интерфейс для поиска, использующего инвертированный индекс, который возвращает список файлов, содержащих выражения или выражения из запроса. Память может содержать поисковой индекс. Реализация: Java

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

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

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

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

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

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

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

Программа проверяет на то, что введенная строка является палиндромом (то есть читается слева направо так же, как и справа налево). Реализации:
Python №1,
Python №2, Java,
Haskell,
Python №3,
Go,
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

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

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

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

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

Введите 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,
Go,
Python №2

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

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

Bank Account Manager

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Эта программа будет получить сведения об атомном международном времени из интернета. Используйте любые атомные часы, которые найдёте в поиске Google. Реализации:
Go,
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 ключей. Реализации:
Python №1,
Python №2,
Java

Изучаем алгоритмы и структуры данных правильно

Источник: Github

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *