Перейти к содержимому

Как научиться программировать на javascript с нуля

  • автор:

Как обучиться программированию на любом языке

Как обучиться программированию на любом языке

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

Шаг 1. Понять, а нужно ли вам это вообще?

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

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

У этой мотивации есть и хорошая сторона, и плохая. Хорошая заключается в том, что отсутствие достаточного количества денег побуждает людей пробовать что-то новое и, возможно, находить дело своей мечты. А плохая заключается в том, что многие, побежавшие в программирование за «легкими» деньгами, в итоге либо вовсе не справляются с обучением (потому что это кропотливый процесс), либо становятся посредственным разработчиками, не получающими удовольствие от своей профессии и выполняющими работу недостаточно хорошо.

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

HTML-разметка

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей

Шаг 2. Выбрать язык

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

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

Чтобы выбрать язык, нужно проанализировать рынок и понять, что именно вы хотите создавать. Надо изучить список популярнейших в мире языков программирования, а также оценить количество доступных вакансий. Также стоит выяснить, какое из направлений разработки вас интересует больше всего. Хотите верстать сайты? Надо метить в сторону JavaScript и веб-фреймворков. Хотите создавать игры? Надо заняться изучением C# и связанных технологий в духе Unity.

Шаг 3. Выбрать правильное место обучения

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

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

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

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

Шаг 4. Начинать практиковаться

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

Компьютерный сетап для разработки ПО

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

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

Шаг 5. Искать работу

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

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

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

Шаг 6. Изучать новые технологии

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

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

Ноутбук с приложением для написания кода

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

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

Шаг 7. Читать книги

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

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

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

Шаг 8. Помогать другим

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

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

Программист за работой

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

Вместо заключения

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

Как научиться программировать на C++ и стать разработчиком с нуля

Здравствуйте! В статье расскажем, где можно обучиться программированию на языке «Си плюс плюс». Разберемся, стоит ли заниматься самостоятельно, как найти онлайн-курсы для начинающих, сколько нужно учиться и как стать востребованным разработчиком на C++.

Сложно ли «войти» в разработку на C++

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

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

Кроме того, потребуются следующие «мягкие» навыки и личные качества:

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

Как научиться программированию на C++ с нуля

Если вы хотите научиться разработке C++, то у вас есть 3 пути:

  • Заниматься самостоятельно, например, по учебникам или урокам из интернета.
  • Учиться в вузе на факультете информатики или программирования.
  • Освоить профессию с нуля на онлайн-курсе для начинающих программистов.

Самостоятельно

Несколько рекомендаций, как изучать разработку на C++ самостоятельно:

  • Выберите учебную литературу. Новичкам будут полезны следующие книги: «С++ для чайников» от Д. Стефана, «Язык программирования С. Лекции и упражнения» от С. Прата, «Полное руководство по С++» от Г. Шилдта.
  • Найдите дополнительные материалы для самообучения: самоучители, видеоуроки на Youtube, скринкасты от опытных программистов C++, онлайн-тренажеры для отработки навыков, форумы разработчиков, где можно задавать вопросы и пр.
  • Научитесь работать в операционной системе Linux, поскольку вам будет проще настроить ее под свои задачи, когда вы начнете программировать.
  • Начинайте с основ – узнайте, что такое компиляция, сборка проекта, переменные, функции, циклы и массивы, базовый синтаксис C++.

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

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

В вузе

В институтах и университетах нет отдельной специальности по C++, на есть факультеты, на которых подробно изучают разные языки программирования: «Прикладная информатика», «Информационные технологии», «Программная инженерия». Вы получите фундаментальные знания в IT, высшей математике, логике, вычислительных системах и пр.

Обучение в вузе имеет не только плюсы, но и минусы:

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

На онлайн-курсах

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

Кратко расскажем о главных преимуществах online-курсов:

  • Свободный график. У вас не будет жесткого расписания – если вы не сможете подключиться к видеоконференции, то посмотрите запись лекции в удобное время. Видеоуроки хранятся в личном кабинете и остаются после окончания курса.
  • В школе преподают разработчики с большим опытом. Они доступно, простым языком, с примерами объясняют сложные темы, дают рекомендации по коду, делятся лайфхаками. Если у вас останутся вопросы после урока, то на них ответит куратор.
  • Теорию сразу же закрепляют на практике. У вас будут домашние задания с проверкой, практика на тренажерах, опыт командной разработки. К концу обучения вы подготовите собственные проекты, например, онлайн-сервис, игру или сервер.

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

Подборка курсов Все онлайн-курсы по разработке на C++ в 2024 году
Посмотреть подборку

Сколько длится обучение

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

Если вы будете заниматься интенсивно по 3-4 раза в неделю, то посмотрите все вебинары за 1-1,5 месяца. За этот срок вы не сможете стать разработчиком, но узнаете основы программирования и языка C++.

В среднем, базовый онлайн-курс для начинающих длится не менее 9-12 месяцев, углубленный, на котором можно достичь уровня junior-специалиста – около полутора лет. За это время вы изучите основные возможности C++ и получите практические навыки.

Что нужно знать, чтобы стать программистом на C++

Кратко перечислим, какие темы нужно выучить, чтобы стать разработчиком на «Си плюс плюс»:

  • Базовый синтаксис C++ стандартные алгоритмы, структуры данных, циклы, массивы.
  • Операционную систему Linux.
  • Среду разработки Visual Studio или Qt Creator.
  • Основы работы с базами данных и язык запросов SQL.
  • Принципы объектно-ориентированного программирования.
  • Компьютерные сети.
  • Паттерны проектирования.
  • Разработку микросервисов.
  • Систему управления версиями Git.
  • Популярные игровые движки – Unity или Unreal Engine.

Все перечисленные темы входят в программу стандартного курса по С++ для новичков.

Где получить опыт

Начинающий программист может выбрать 3 пути и набраться опыта:

  • Фриланс-биржи – брать недорогие заказы можно еще в процессе обучения, например, писать простые программы за 1000-1500 руб.
  • Должность младшего разработчика – некоторые работодатели готовы нанимать новичков и обучать за свой счет.
  • Стажировка в крупной IT-компании, например, в Яндекс, Mail Group, Google – они часто набирают стажеров.

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

Советы начинающим — как стать востребованным

ТОП-3 рекомендации новичкам в разработке:

  • Постоянно повышайте свой уровень, не переставайте учиться, изучать возможности C++, осваивать новые технологии. Удобнее всего заниматься на онлайн-курсах – вы получите ценную информацию от экспертов отрасли в свободное от работы время.
  • Общайтесь с единомышленниками, посещайте конференции и митапы, участвуйте в хакатонах, соревнованиях – на таких встречах вы обменяетесь опытом и заведете полезные связи.
  • Работайте над качеством своего кода, смотрите open source проекты опытных разработчиков и изучайте стандарты программирования.

Как научиться программировать с нуля и найти первую работу. Большой FAQ от Reddit

Сайт dev.by опубликовал самые часто задаваемые вопросы по теме обучения программированию с нуля и поиска первой работы, собранные /r/learnprogramming.

Как научиться программировать с нуля

Список вопросов, на которые отвечает гайд

Начало
С чего мне начать?
Какой язык программирования стоит выучить первым?
Где можно найти качественные образовательные ресурсы?
Как совершенствовать навыки
Как перейти с начального уровня на средний?
Где можно найти тренировочные упражнения и идеи для проектов?
Как улучшить навык реализовывать задачи/задания в программах (алгоритмическое мышление)?
Я не могу придумать классную идею для проекта. Мне просто не хватает креативности? Как другие программисты ищут вдохновение?
Где можно найти примеры хорошего кода и проектов для обучения?
Как выучить темы, которые рассматриваются в стандартных университетских программах по информатике?
Как начать крупный проект и не забросить его?
Распространённые страхи и опасения
Я уже слишком стар для программирования?
Есть что-то другое, чему мне сначала нужно научиться?
Нужно ли мне хорошо знать математику?
Я много гуглю или не знаю, как делать что-то, когда только собираюсь начать. Это плохо?
Программировать сложно?
Вопросы про обучение
Что значит «знать язык» или «уметь программировать»?
Я только что начал учить язык Х. Стоит ли мне начинать учить язык Y?
Стоит ли учить более одного языка программирования одновременно?
Это плохо, что у новичков иногда возникают проблемы с задачами и упражнениями?
Как найти/поддерживать мотивацию, чтобы учиться программировать?
С чего мне начать Х?
С чего начать делать видеоигры?
С чего начать делать веб-сайты/веб-приложения/веб-разработку?
С чего начать делать мобильные приложения/приложения для Android/приложения для iOS/приложения для Windows Phone?
Как автоматизировать что угодно?
Терминология и словарь
В чём разница между информатикой (computer science, CS), компьютерной инженерией (computer engineering, CE), программной инженерией (software engineering, SE), программированием и кодированием?
С чём разница между Cи, C++, Objective-C и C#?
В чём разница между Java и JavaScript?
Инструменты и управление версиями
Что такое управление версиями/контроль версий? Стоит ли мне его использовать?
С чего начать использовать управление версиями?
Что такое IDE? Стоит ли мне её использовать?
Компьютеры и операционные системы
Какую операционную систему мне следует использовать?
Какой компьютер/ноутбук мне следует купить?
Карьера и работа
Можно ли заработать много денег на программировании?
Можно ли получить работу в программировании, не имея диплома по информатике? Или вообще без высшего образования?
Как войти в эту отрасль и получить стартовую должность?
Что делать дальше?
Больше не новичок
Программирование — лишь инструмент
Как улучшить навыки программирования
Разное
Как обучить программированию ребёнка?
Как делать вклад в open source-проекты?
У меня вопрос по Си/Python/другому языку.
Там нет моего вопроса. Что мне делать?
Да, мой вопрос есть в ЧаВо, но я хочу получить ответ от реального человека.
Как редактировать вики /r/learnprogramming (включая эти ЧаВо)?

С чего мне начать?

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

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

  1. Найти небольшую задачу или проект, который вам будет интересно решить. Можете попробовать создать инструмент для решения небольшой жизненной задачи или с нуля реализовать программу, которая вам кажется интересной. Такой проект мотивирует вас продолжать учиться кодить и даст возможность применить полученные знания на практике.
  2. Почитайте информацию о разных языках программирования, чтобы выбрать наиболее подходящий для вашего проекта. (См. рекомендации ниже).
  3. Найдите один качественный ресурс для новичков по этому языку и руководствуйтесь им. (Также см. ниже).
  4. Помимо этого ресурса, гуглите и задавайте вопросы.
  5. Выполните несколько оригинальных проектов на этом языке.

Вот эти вещи мы советуем не делать:

  1. Нельзя просто пассивно штудировать выбранный ресурс: делайте упражнения и домашние задания; практика – это незаменимая часть обучения программированию.
  2. Не переключайтесь без необходимости с одного языка на другой. Выберите один и придерживайтесь его, потому что главное в программировании — решать задачи, а не выучить языки. Научиться решать проблемы сложно, и этот навык можно отточить, только если постоянно тренироваться. Каждый раз, когда вы переключаетесь на другой язык, то теряете время, в которое могли бы тренироваться применять полученные знания, чтобы развить навыки решения задач.
  3. Не прекращайте учиться после того, как закончили какой-либо курс. Программирование — одна из тех областей, где всегда есть, чему учиться.

И наконец, помните, что обучение программированию — долгий и трудный процесс. Если вам тяжело, не расстраивайтесь! Это абсолютно нормально, и многие люди годами учатся и тренируются, пока не почувствуют себя достаточно компетентными, чтобы искать работу или сделать вклад в серьёзный проект. К счастью, просто начинать учиться совсем не так сложно.

Какой язык программирования стоит выучить первым?

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

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

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

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

Я хочу научиться…
  • …разрабатывать приложения для iPhone — Swift (ещё)
  • …разрабатывать приложения для Android — Java (ещё)
  • …создавать веб-сайты — JavaScript, CSS, HTML5 (ещё)
  • …писать десктопные приложения для Windows — C#
  • …создавать 2D/3D-игры — JavaScript, C# или C++ (ещё)
  • …программировать Arduino/микроконтроллеры/роботов — Си
  • …заниматься научными/математическими вычислениями или анализом данных — Julia, Python, R или Matlab
  • …заниматься автоматизацией и разработкой скриптов — многие языки (Python, Ruby, Bash, Powershell, AutoHotKey…)

Если в списке нет того, что вам нужно, поищите другие варианты на этих ресурсах:

  • http://www.bestprogramminglanguagefor.me
  • http://choosing-a-language.techboss.co

Если вы всё ещё не можете определиться с выбором, изучайте Python. Это хороший, доступный для начинающих программистов язык с огромным сообществом и множеством библиотек, с помощью которых можно сделать практически всё что угодно, начиная созданием игр, и заканчивая автоматизацией процессов дома или на работе и анализом данных для построения веб-сайта. Постарайтесь найти обучающий ресурс, в котором разобраны ключевые принципы и основы, прежде чем погрузиться в разработку более сложных приложений. Инструкции о том, как начинать изучение любого языка, можно найти на странице reddit getting started.

Где можно найти качественные образовательные ресурсы?
  • Книги
  • Онлайн-ресурсы
  • Курируемые ресурсы по программированию

Как совершенствовать навыки

Как перейти с начального уровня на средний?

Типичный вопрос, который мы получаем от многих новичков, — «что дальше?» В частности, когда они пытались проработать какие-то уроки, пособия, курсы, но в итоге всё равно не смогли заполнить пробел между пониманием, как работает оператор if или цикл for, и как именно применять то, что они изучили, чтобы создать сложные и интересные программы.

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

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

Вот несколько советов, как не сдаваться и что делать дальше.

Перейдите с пассивного обучения на активное

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

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

Постоянно практикуйтесь

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

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

(См. также ЧаВо: Где можно найти тренировочные упражнения и идеи для проектов и ЧаВо: Я не могу придумать классную идею для проекта. Мне просто не хватает креативности? Как другие программисты ищут вдохновение?)

Научитесь декомпозировать задачу

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

Допустим, вы хотите создать игру «камень-ножницы-бумага». Её можно разделить её на несколько подзадач: как получить вводные данные от пользователя, как заставить компьютер сделать случайный выбор, как определить победителя и как повторить игру (если вы хотите играть несколько раз подряд).

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

Если вы совсем не знаете, как сделать что-то (например, как заставить компьютер выбрать случайное значение), погуглите. В данном примере поиск «Х выбрать случайное значение» (где Х — используемый язык программирования) покажет несколько различных способов, которые вы сможете использовать. Иногда задачу получается разбить на множество частей без поисковика, а иногда без него не обойтись.

Так, если вы учите Java и хотите научиться писать игры, но понятия не имеете, с чего начать или как разбить задачу на составляющие, загуглите «java игры уроки». Поиск даст несколько хороших источников, которые научат вас писать игры и (обычно автоматически) разбивать процесс написания игры на подзадачи поменьше.

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

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

Больше советов смотрите в ЧаВо: Как улучшить навык реализовывать задачи/задания в программах (алгоритмическое мышление).

Будьте систематичны

Когда вы пишите и отлаживаете код, ни в коем случае не привыкайте просто пробовать сделать что-то, рассчитывая, что это случайно сработает. Будьте максимально чётки и последовательны — метод «проб и ошибок» здесь не подойдёт.

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

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

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

Не делайте что попало, пока что-нибудь не сработает — будьте последовательны.

Не расстраивайтесь, если приходится исправлять баги или гуглить

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

Отладка (и трудности!) — неотъемлемая часть программирования. Если получится, постарайтесь не отчаиваться и не злиться. Отнеситесь к этому как к занимательному квесту или головоломке.

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

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

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

Не бойтесь попросить помощи

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

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

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

Больше информации читайте в руководстве о том, как задавать вопросы на reddit.

Пройдите более интенсивный вводный курс

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

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

Ещё больше подходов, рекомендаций и советов о том, как осуществить этот прорыв, читайте в следующих постах:

Где можно найти тренировочные упражнения и идеи для проектов?

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

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

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

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

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

Если вы ищете что-то посложнее, попробуйте переписать программы, которыми пользуетесь каждый день. Например, попробуйте сами написать…

  • утилиты командной строки (ls, wget, curl и т.д.)
  • текстовый редактор
  • IDE
  • программу для просмотра изображений
  • пакет офисных приложений (например, Microsoft Office или Libreoffice)
  • язык программирования (интерпретатор или компилятор)
  • веб-браузер
  • базу данных (реляционную или нереляционную)
  • веб-сервер
  • систему управления версиями

Если хотите сделать что-то потруднее, но с детальным объяснением, попробуйте реализовать одну из программ 500 Lines or Less — это open source-книга, в которой пошагово описано, как создавать относительно сложные программы, занимающие не более чем 500 строчек кода (3D-моделлеры, статистические анализаторы и т.д.). В нагрузку попробуйте реализовать эти программы на другом языке, адаптируйте их под немного другую задачу или добавьте им новые интересные возможности. Исходный код книги содержит полные реализации каждой включённой в неё программы.

Что касается тренировочных упражнений, вот некоторые хорошие сайты/ресурсы для старта:

  • На reddit:
    • /r/dailyprogrammer — сабреддит с ежедневными трудностями программирования
    • /r/ProgrammingPrompts — небольшие простые проекты
    • /r/tinycode — сабреддит о том, как писать маленький код с большими возможностями
    • /r/programmingchallenges — сабреддит, посвящённый трудностям программирования (который не мешало бы оживить)
    • /r/programbattles — новый сабреддит, аналогичный /r/photoshopbattles, где пользователи соревнуются в решении задачек на написание кода
    • Общие упражнения:
      • Finxter — более 300 головоломок на Python, чтобы проверить и потренировать быстрое понимание кода.
      • Project Euler — предлагает около 500 математических задач (например, по теории чисел, простым числам, системам счисления), которые возможно решить с помощью программ (на любом языке).
      • CodeAbbey — более 200 задач по программированию, начиная с самых простых. Позволяет учиться на решениях других разработчиков.
      • Rosalind — аналогичный Project Euler сайт, который содержит более 200 задач по программированию, связанных (немного) с биоинформатикой.
      • CodeByMath — более 100 небольших задач по математическому программированию.
      • Codingbat.com — упражнения на Java и Python для новичков и программистов более продвинутого уровня.
      • codegolf.stackexchange.com — сайт, где можно постить и обсуждать вопросы по программированию.
      • Ruby Quiz — ряд заданий, в которых нужно создать небольшие программы разной степени сложности. Все решения пишутся на Ruby, но подсказки работают для любых языков, поэтому вы сможете использовать любой другой язык программирования, если справитесь без эталонного решения, в которое можно было бы подсмотреть.
      • OCS Prep Work — подготовительная работа для студентов компьютерных курсов в Омахе. В будущем она превратится в полноценную книгу, но сейчас это просто компиляция тренировочных задач. — Эндрю Эк.
      • UVA Online Judge — собрание сотен задач из конкурсов по программированию с системой онлайн-проверки решений.
      • TopCoder — содержит алгоритмические задачи, накопленные за годы соревнований, доступных на нескольких популярных языках. Также проводит онлайн-соревнования по программированию несколько раз в месяц.
      • CodeForces — аналогичен TopCoder, но даёт больше заданий на соревнованиях и имеет мало отличительных функций, включая «виртуальные конкурсы».
      • Timus — аналогичен UVA, предлагает задачи со многих прошедших соревнований (мирового и регионального масштаба).
      • SPOJ — аналогичный UVA ресурс с широчайшим выбором языков программирования для разработки решений.
      • CodeForces — содержит алгоритмические задачи, накопленные за годы соревнований, доступных на нескольких популярных языках.
      • USACO — содержит алгоритмические задачи вместе с руководствами.
      • По языкам:
        • Для Prolog, Lisp и схожих языков смотрите P-99 и L-99 — в подборках по 99 задач, которые помогут повысить уровень владения языками.
        • Python Challenge — объединяет загадки и вопросы по программированию, которые помогут продвинуться на новые ступени.
        • 4Clojure — подборка упражнений по программированию специально для Clojure — диалекта Lisp.

        Как улучшить навык реализовывать задачи/задания в программах (алгоритмическое мышление)?

        Это один из самых часто задаваемых вопросов.

        Обычно ответ такой: пишите как можно больше программ.

        Однако, есть простое упражнение, которое поможет вам улучшить этот навык:

        • Выберите действие, которое вы делаете каждый день, например, готовите завтрак или что-то в этом роде. Оно должно быть не слишком простым, но и не слишком сложным.
        • Запишите, какие шаги вы при этом предпринимаете, но сделайте это по памяти и не в то время, в которое обычно выполняете выбранное действие. (Запишите шаги, чтобы приготовить завтрак в середине дня.)
        • В следующий раз, когда будете выполнять это действие, возьмите этот план и попробуйте неотступно придерживаться его. Постарайтесь не отклоняться от записанных шагов, а если вам пришлось это сделать, то запишите, что вы сделали не по плану.
        • Улучшайте алгоритм, пока не будете довольны им.
        • Попробуйте повторить то же самое на различных действиях. С каждым разом задание будет даваться всё легче.

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

        Я не могу придумать классную идею для проекта. Мне просто не хватает креативности? Как другие программисты ищут вдохновение?

        Для начала, вот очень меткая цитата Чака Клоуза о том, что вдохновение нельзя просто ждать:

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

        У вас будут редко появляться идеи, если вы будете просто сидеть и ждать в ожидании искры вдохновения. Вы проведёте время с гораздо большей пользой, если просто возьмёте и попытаетесь создать что-то (что угодно!), даже если эта идея кажется вам немного глупой или обречённой.

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

        И всё же, вот несколько идей и приёмов, как придумать свой проект:

        Попробуйте заново реализовать существующий проект. Как музыканты начинают с того, что делают каверы на чужие песни, для начала можете переписать программы, созданные другими людьми. Например, часто выбирают аркадные 2D-игры, такие как «Pong» или «Космические захватчики»: они вполне под силу новичкам и многому их научат. В этом ЧаВо есть ссылки на ещё больше идей для проектов.

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

        Присмотритесь к вещам, которые вас раздражают. Если в вашей жизни есть что-то монотонное или что вы не любите делать, спросите себя, нельзя ли это действие автоматизировать. Чтобы получить представление о том, что можно автоматизировать с помощью компьютера, зайдите на Automate the Boring Stuff. Это руководство для Python, но все описанные в нём вещи можно сделать на любом языке программирования. Или попробуйте загуглить «как автоматизировать дом», чтобы найти больше прикладных решений.

        Где можно найти примеры хорошего кода и проектов для обучения?

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

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

        Посмотрите также серию бесплатных электронных книг The Architecture of Open Source Programs, в которых более детально разобрана структура популярных open source-программ. Хорошим отправной точкой может стать последняя книга серии «500 lines or less», так как программы в ней достаточно малы, чтобы вы точно могли выполнить их/с ними справиться самостоятельно и использовать в качестве стартовой площадки для запуска своего проекта.

        Как выучить темы, которые рассматриваются в стандартных университетских программах по информатике?

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

        What every computer science major should know — Matt Might (Что нужно знать каждому студенту, изучающему информатику — Мэтт Майт)

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

        Open source computer science degree — Open Source Society (Открытая программа по информатике от Open Source-сообщества)

        Предлагает последовательный учебный план со ссылками на курсы — преимущественно Coursera — в каждой теме.

        Teach yourself CS (Как самостоятельно изучить информатику)

        Аналог предыдущего ресурса с тем исключением, что рекомендует как книги, так и видеолекции. Более продвинутые рекомендуемые источники связаны с системами (например, операционными системами, базами данных…)

        A Self-Learning, Modern Computer Science Curriculum (Современная программа по информатике для самостоятельного изучения)

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

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

        Как начать крупный проект и не забросить его?

        Во-первых, досконально разберитесь в сути задачи.

        Часто на этом этапе помогает Rubber Duck Debugging. Объясняя задачу или идею кому-то (или чему-то) другому, кто о ней ничего не знает или ничего в ней не понимает, человек сам более глубоко вникает в неё: ведь ему приходится размышлять над задачей значительно больше, и это приводит к её лучшему пониманию.

        Во-вторых, не бросайтесь сразу же к компьютеру!

        Проводите много времени, обдумывая задачу/задание. Создавайте черновики, рисунки, какой-либо псевдокод, заготовки на упрощённом языке или что угодно, что может пригодиться, на бумаге. (Я подчёркиваю это здесь, потому что цифровые инструменты отвлекают от стоящей впереди задачи — используйте только карандаш и бумагу или доску). Тщательно проанализируйте задачу.

        Это приведёт нас к следующему.

        Помните кое-что, когда работаете над крупным проектом в одиночку:

        Всё в мире состоит из более мелких частей.

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

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

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

        Как только вы дойдёте до этого момента, начинайте программировать. Напишите одну небольшую часть и протестируйте. Напишите следующую, протестируйте и т.д.

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

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

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

        Как не забросить проект?

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

        • Подготовьте детальное описание проекта, так называемую «функциональную спецификацию проекта».
        • Обсудите эту функциональную спецификацию проекта с воображаемым клиентом (то есть объясните её любому неодушевлённому предмету или кому-то, кто готов вас выслушать).
        • Подкорректируйте функциональную спецификацию проекта: вернитесь к предыдущему шагу и повторяйте, пока не будете довольны.
        • Составьте план реализации проекта с жёстким (и реалистичным) конечным сроком.
        • Соблюдайте пункт выше (потому что иначе воображаемый клиент мог бы потребовать немалую комиссию за просрочку)
        Ещё несколько советов:
        • Для начала полностью забудьте о коде и взгляните на программу полностью с точки зрения пользователя.
        • Составьте список желаемых функций, которые программа должна выполнять.
        • Составьте список функций, которыми программа не будет обладать (Так вы сможете избежать соблазна добавить кучу «классных» и совершенно ненужных «улучшений». В основном, именно потому, что программы становится слишком раздутыми, разработчики бросают их через несколько недель.)
        • Сделайте несколько набросков экрана, который будет видеть пользователь, и как он будет с ним взаимодействовать. Это не должны быть точные прототипы — они, скорее, помогут представить, что будет изменяться на экране пользователя при переходе на другую страницу. Эти зарисовки помогут вам не забыть что-то важное.
        • Научитесь использовать git и заведите аккаунт на GitHub. Здесь можно получить хорошую поддержку и попросить оценку коду. (Игнорируйте комментарии по поводу стиля кода: 99% из них — бесполезные споры.)

        Распространённые страхи и опасения

        Я уже слишком стар для программирования?

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

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

        Есть что-то другое, чему мне сначала нужно научиться?

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

        Вот единственные действительно необходимые условия:

        • Вы должны уметь печатать (если только вы не используете язык на основе подхода «drag-and-drop» вроде Scratch).
        • У вас должен быть компьютер.
        • Вы должны уметь самостоятельно гуглить/искать ответы на вопросы.

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

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

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

        Нужно ли мне хорошо знать математику?

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

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

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

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

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

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

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

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

        Я много гуглю или не знаю, как делать что-то, когда только собираюсь начать. Это плохо?

        Нет. Вот ветка, в которой эта тема рассмотрена с разных сторон. Есть много других, аналогичных этой.

        Программировать сложно?

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

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

        Итак, программирование может быть сложным. Как и многие другие вещи, оно требует усилий, и эти усилия могут нелегко даваться. Не опускайте руки — получайте удовольствие, и все трудности будут того стоить.

        Вопросы про обучение

        Что значит «знать язык» или «уметь программировать»?

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

        • http://redd.it/vhccu
        • http://redd.it/iea3f
        • http://redd.it/s4n5o
        • http://redd.it/1nf8yd

        Я только что начал учить язык Х. Стоит ли мне начинать учить язык Y?

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

        Стоит ли учить более одного языка программирования одновременно?

        Если вы только начинаете, мы рекомендуем выбрать один язык (как сказано в предыдущем ответе, неважно, какой именно) и сосредоточиться на нём минимум на месяц. Опытные программисты могут понемногу учить несколько языков сразу, но новички скорее просто запутаются.

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

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

        Конечно, нет!

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

        Неудача — важная часть обучения. Очень важно знать, как не надо делать. Неудача — это просто приобретённый опыт.

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

        Как найти/поддерживать мотивацию, чтобы учиться программировать?

        Мы часто думаем: «если бы у меня было достаточно мотивации… тогда я мог бы…», хотя именно действие поддерживает мотивацию. Сначала идёт действие, потом — мотивация. Найдите небольшие конкретные программы, которые хотели бы создать. Избавьтесь от всего, что вас отвлекает. Установите расширения для браузера, блокирующие сайты вроде Reddit, Facebook и Twitter. На минуту представьте, насколько здорово будет ощущать, что вы стали более компетентным программистом.

        Вот несколько свежих веток по теме:

        • http://redd.it/uzt31
        • http://redd.it/1c1bnj
        • http://redd.it/2j6b7i
        • http://redd.it/1s347g
        • http://redd.it/javfv
        • http://redd.it/gy0xa
        • http://redd.it/1xvdte
        • http://redd.it/1hh76b

        С чего мне начать Х?

        С чего начать делать видеоигры?

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

        • Unity (C#): подходит для мобильных, десктопных, браузерных/онлайн и консольных 2D и 3D-игр
        • Construct2 (JavaScript): для мобильных, десктопных и браузерных/онлайн 2D-игр
        • Pygame (Python): движок для десктопных 2D-игр
        • LÖVE (LUA): подходит для десктопных 2D-игр

        Всегда помните, что ваша цель — разрабатывать игры, а не движки! Так что не нужно заново изобретать велосипед.

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

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

        • Угадай число
        • Блэкжек или крестики-нолики
        • Охота на Вампуса (правила)
        • игра в жанре choose-your-own-adventure на ваше усмотрение или клон Zork
        • Pong, Тетрис или клон Сапёра
        • Space Shooter с вертикальной или горизонтальной прокруткой
        • простой клон DOOM, Марио или Legend of Zelda

        Обязательно загляните в ЧаВо /r/gamedev, почитайте вводное руководство на /r/gamedev и поищите более старые ветки на /r/gamedev и /r/learnprogramming.

        С чего начать делать веб-сайты/веб-приложения/веб-разработку?

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

        Обычно большинство людей советует начинать с изучения HTML, CSS и Javascript (в таком порядке) — это три главных языка, которые поддерживают все веб-браузеры и на которых написаны все сайты.

        Больше информации можно найти в ЧаВо /r/webdev. Вот ещё один список онлайн-курсов, пособий и ресурсов для начинающих.

        С чего начать делать мобильные приложения/приложения для Android/приложения для iOS/приложения для Windows Phone?

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

        • Приложения для Android пишутся преимущественно на Java — больше информации читайте в ЧаВо /r/androiddev.
        • Приложения для iOS пишутся на Objective-C или Swift — больше информации ищите на боковой панели /r/iosprogramming и в их вики (на GitHub).
        • Приложения для Windows Phone пишут на C#, Visual Basic или Javascript — больше информации ищите на боковой панели /r/WPDev.

        Вы также можете создать приложения, которые будут запускаться на всех трёх крупнейших платформах, с помощью технологий Phonegap и Titanium — приложения пишутся один раз с использованием HTML, CSS и Javascript, а запускаются на любой платформе.

        Однако не забывайте, что многие, если не все из указанных инструментов рассчитаны на тех, кто уже имеет предыдущий опыт в программировании. Если вы прежде никогда не занимались разработкой, может быть, вам лучше начать с изучения языка, по которому есть больше ресурсов специально для новичков. Когда вы приобретёте некоторый опыт и усвоите лежащие в основе программирования принципы, то вам станет намного проще учить новые языки и начинать изучение мобильной разработки. Раздел «С чего мне начать?» в нашем ЧаВо содержит больше информации о том, с чего нужно начинать.

        Как автоматизировать что угодно?

        Для Windows есть пара специальных языков программирования, такие как Autohotkey and AutoIt.

        Другая подходящая кросс-платформенная альтернатива — это Python. Automate the Boring Stuff with Python (Как автоматизировать рутину с помощью Python) — потрясающий образовательный ресурс.

        Если вы хотите автоматизировать MS-Office, используйте встроенный язык программирования Visual Basic for Applications (VBA). Сабреддит /r/vba посвящён программированию на VBA.

        Какие лучшие…

        /u/thekodols сделал подборку из более чем 150 вопросов и ответов в стиле «какие лучшие» в этом посте, который охватывает различные языки, инструменты и темы.

        Терминология и словарь

        В чём разница между информатикой (computer science, CS), компьютерной инженерией (computer engineering, CE), программной инженерией (software engineering, SE), программированием и кодированием?

        Информатика/компьютерная инженерия/программная инженерия vs. программирование/кодирование

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

        Первое отличие, о котором вам следует понимать, это отличие между первыми тремя терминами и программированием/кодированием. Информатика, компьютерная инженерия и программная инженерия — это научные дисциплины. Сказать «я изучаю информатику» — то же самое, что сказать «я изучаю химию» или «я изучаю литературу». В противоположность этому программирование и написание кода — это виды активности, то есть их нужно делать. Образно говоря, изучение этих трёх дисциплин можно сравнить с изучением теории музыки, а программирование и кодирование подобно обучению игре на конкретном музыкальном инструменте.

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

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

        Информатика vs. компьютерная инженерия vs. программная инженерия

        Далее нужно разобраться, в чём разница между информатикой, компьютерной инженерией и программной инженерией. Если кратко, несмотря на многие их сходства, информатика, или «компьютерные науки», имеет мало общего как с компьютерами, так с науками, и, скорее, представляет собой область прикладной математики, которая изучает понятие вычислимости. Компьютерная инженерия схожа с информатикой, но сильнее концентрируется на аппаратном обеспечении нижнего уровня — это своего рода мост между информатикой и электротехникой. И наконец, программная инженерия больше связана с тем, как создавать большие и сложные, но при этом стабильно функционирующие программы. Это как информатика и компьютерная инженерия, только с меньшим количеством теории.

        Программирование vs. кодирование

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

        Напротив, если вы говорите «я кодер», то подчёркиваете, что занимаетесь исключительно разработкой кода, и в меньшей степени — остальными вещами.

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

        С чём разница между Cи, C++, Objective-C и C#?

        Cи, C++, Objective-C и C# — это не вариации одного и того же языка.

        Си — самый маленький и старый из этих языков. Изначально он создавался как системный язык программирования для операционной системы Unix и до сих пор широко используется в прикладном программировании.

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

        Objective-C — это строгое надмножество языка Си, поэтому любой рабочий код на Си также является рабочим кодом Objective-C. Этот язык далеко не так распространён, как Си или С++, и сегодня в основном используется в разработке для платформ OS X и iOS от Apple.

        C# не основан на Си ни в каком техническом плане. С# — это язык программирования общего назначения, созданный Microsoft и подобный Java. Он компилируется в промежуточную форму, которая запускается на виртуальной машине (CLR), в отличие от предыдущих трёх языков, которые компилируются в нативный машинный код. И хотя С# заимствует элементы синтаксиса из Си и С++ (как и Java), технически он с этими языками не связан.

        В чём разница между Java и JavaScript?

        Java и JavaScript связаны в той же степени, в которой связаны крем и крем-брюле.

        Аналогично предыдущему вопросу, с технической точки зрения Java и JavaScript никак не связаны. У них есть некоторые общие черты в синтаксисе, так как предком обоих был Си, но не более. В Википедии есть хорошее объяснение, откуда взялось это сходство в названиях: https://ru.wikipedia.org/wiki/JavaScript#JavaScript_%D0%B8_Java.

        Инструменты и управление версиями

        Что такое управление версиями/контроль версий? Стоит ли мне его использовать?

        Система управления версиями (Version Control System, VCS) — это инструмент, который отслеживает изменения в коде и даёт такие полезные возможности, как исправлять ошибки и просматривать, что в нём изменялось с течением времени. Современные распределённые системы также позволяют легко работать над одним и тем же кодом с другими программистами. И да, вам определённо стоит использовать систему управления версиями!

        Две самых популярных распределённых системы — это Git и Mercurial; которую именно использовать, в основном зависит от ваших личных предпочтений, но мы настоятельно советуем одну из них.

        С чего начать использовать управление версиями?

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

        Хорошее и краткое руководство по Mercurial — здесь.

        На странице reddit с инструментами есть ссылки на сайты, где можно скачать обе системы.

        Что такое IDE? Стоит ли мне её использовать?

        IDE (или интегрированная среда разработки) — это приложение графического интерфейса пользователя, обычно включающее текстовый редактор с автодополнением кода и подсветкой синтаксиса, некоторые функции управления проектами, компилятор или интерпретатор (настраиваемый или встроенный) и другие замечательные функции, которые упрощают написание, запуск и тестирование кода. Как вариант, можно вручную делать то, что IDE сделает за вас автоматически. Но для этого программисту придётся использовать отдельные инструменты и иметь более глубокое знание процесса разработки.

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

        • Если вы используете IDE, вам не нужно много знать о процессе разработки, использовать интерфейс командной строки и настраивать эти инструменты, чтобы они корректно работали вместе; IDE предлагает быстрый способ начать создавать код и даже может написать часть кода за вас!
        • С другой стороны, при работе из командной строки вам не нужно подстраиваться под образ мысли автора IDE, а так как вам открыта большая часть процесса разработки, вам удастся лучше познакомиться с процессом создания ПО.

        Выбор IDE или отдельных инструментов — обычно вопрос личного предпочтения (если, конечно, ваш начальник/вуз не требует использовать определённую среду разработки). Если вы никогда раньше не использовали IDE, скачайте какую-нибудь из самых популярных и повозитесь с ней. Если вы никогда не пользовались Vim или не компилировали код из командной строки, то попробуйте — может, вам понравится. Список часто используемых IDE и небольших по весу тестовых редакторов можно найти в разделе инструментов программирования.

        Компьютеры и операционные системы

        Какую операционную систему мне следует использовать?

        Частый вопрос, который возникает у многих новичков, — какую из операционных систем им лучше использовать: Windows, Mac или Linux.

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

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

        Из этого правила есть два основных исключения:

        • Если вы хотите заниматься разработкой для Windows, покупайте компьютер на Windows.
        • Если вы хотите заниматься разработкой для Mac или iOS, покупайте Mac.

        Есть несколько хороших возможностей запуска кода на C# на других платформах, но некоторые инструменты Microsoft и .NET преимущественно ориентированы на Windows.

        Хотя вы сможете разрабатывать приложения для Mac и iOS на любом компьютере, вам придётся использовать Xcode на машине Mac, чтобы скомпилировать и загрузить ваше приложение в App Store.

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

        Какой компьютер/ноутбук мне следует купить?

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

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

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

        • центральный процессор Intel i5 (3.0+ ГГц)
        • оперативная память 4+ Гбайт
        • жёсткий диск 200+ Гбайт
        • (опционально) твердотельный накопитель

        Если есть возможность, лучше отдайте приоритет устройству с более производительным процессором и большим объёмом оперативной памяти, чем жёсткого диска: лишняя мощность процессора никогда не помешает. И наоборот, в основном для программирования не требуется большое дисковое пространство — только если вы не собираетесь работать с изображениями и видео или обрабатывать огромные наборы данных для машинного обучения и тому подобных вещей. Впрочем, такие вещи можно хранить в облаке.

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

        • Чем шире экран, тем меньше время работы от батареи (но чем меньшую вы настроите яркость, тем больше будет её ресурс)
        • Чем меньше экран, тем меньше на нём будет помещаться и тем чаще вам придётся переключаться между окнами/рабочими столами. В идеале на нём должны удобно для работы размещаться два окна.
        • Чем шире ноутбук, тем он тяжелее и тем тяжелее носить его с собой.

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

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

        Дополнительную информацию и более подробную помощь можно найти в следующих сабреддитах — в них предложены более индивидуализированные советы:

        Также тщательно взвесьте покупку хромбуков: вам придётся или настраивать их, или использовать онлайн-редакторы и IDE, а также понадобится постоянный доступ с интернет. Больше информации читайте по ссылкам:

        • http://www.howtogeek.com/162120/how-to-install-ubuntu-linux-on-your-chromebook-with-crouton/
        • http://blog.codestarter.org/post/93985346780/how-we-turn-199-chromebooks-into-ubuntu-based
        • http://www.reddit.com/r/learnprogramming/comments/1ba1gd/programming_on_a_chromebook/
        • http://www.chromebookhq.com/five-best-online-ides-making-the-switch-to-a-chromebook/

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

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

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

        Если вас больше интересует машинное обучение или обработка естественного языка, имейте в виду, что можно арендовать машины с графическими процессорами в облаке с помощью сервисов вроде Web Services (AWS) или Google Compute Engine (GCE) по относительно низким ценам.

        Карьера и работа

        Можно ли заработать много денег на программировании?

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

        Можно ли получить работу в программировании, не имея диплома по информатике? Или вообще без высшего образования?

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

        Более развёрнутые ответы на различные вопросы по поводу карьеры можно получить, задав их в /r/cscareerquestions.

        Как войти в эту отрасль и получить стартовую должность?

        В этом сабреддите этот вопрос немного не по адресу: вопросы на тему карьеры лучше задавать в /r/cscareerquestions и искать на их исчерпывающей вики-странице.

        Но в общем, ответы большинства людей сводятся к следующему:

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

        Намного более подробную информацию и советы читайте в вики /r/cscareerquestions.

        Что делать дальше?

        Больше не новичок

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

        Программирование — лишь инструмент

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

        Как улучшить навыки программирования

        Многие люди, занимающиеся программированием, начинают бояться, что им недостаточно знаний. Поэтому многие стремятся усовершенствовать свои навыки. Но на данном этапе есть только один способ сделать это — практиковаться. Существует много сайтов и источников для тренировки, например, /r/dailyprogrammer, CodeWars, HackerRank, Project Euler и многие другие.

        Разное

        Как обучить программированию ребёнка?

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

        Scratch — просто потрясающий инструмент для детей 8-16 лет, разработанный Массачусетским технологическим институтом. Он запускается через браузер без установки дополнительного ПО.

        Также можете заглянуть на /r/ProgrammingForKids — сабреддит посвящён именно этому вопросу. Ресурсов множество.

        Как делать вклад в open source-проекты?

        Участвуйте в проектах группы /r/learnprogramming на GitHub! Её создал jfredett специально для размещения проектов, с помощью которых начинающие программисты смогут освоить отрытую разработку, взаимодействуя с опытными программистами и менторами.

        Группа сформирована недавно, несколько людей занимаются её продвижением.

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

        Вот несколько старых веток на тему работы с open source-проектами.

        • https://www.reddit.com/r/programming/comments/5bab3n/how_to_contribute_to_an_open_source_project_on/
        • http://www.reddit.com/r/learnprogramming/comments/t0fk4/how_do_i_actually_contribute_to_open_source/
        • http://www.reddit.com/r/learnprogramming/comments/swwbd/how_to_contribute_to_an_opensource_project/
        • http://www.reddit.com/r/learnprogramming/comments/sw209/question_about_contributing_to_open_source
        • http://www.reddit.com/r/learnprogramming/comments/ee6fq/opensource_projects_for_beginners/
        • http://www.reddit.com/r/learnprogramming/comments/cm8be/reddit_how_do_i_get_involved_in_open_source/

        У меня вопрос по Си/Python/другому языку.

        Поищите ваш вопрос в наших вики по конкретному языку:

        Там нет моего вопроса. Что мне делать?

        Посмотрите краткое руководство reddit по устранению неисправностей для начинающих и страницу ЧаВо используемого вами языка — возможно, ответ на ваш вопрос находится на одной из страниц. Если нет — можете постить!

        Поищите ваш вопрос в наших вики по конкретному языку:

        Вопросы, связанные с карьерой, также смотрите в /r/cscareerquestions.

        Да, мой вопрос есть в ЧаВо, но я хочу получить ответ от реального человека.

        Эти ЧаВо, как и другие страницы вики /r/learnprogramming, редактируется сообществом. Эти ответы — продукт сообщества, и их писали реальные люди. Если ваш вопрос уже есть в ЧаВо, значит, его уже неоднократно задавали до вас. В этих ЧаВо собраны ответы, которые обычно дают и принимают на эти вопросы. Пожалуйста, подумайте, действительно ли ваш вопрос существенно отличается от тех, которые присутствуют в этих ЧаВо, прежде чем просить людей тратить время, чтобы ответить персонально вам на вопрос, который задавали уже много раз.

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

        Как редактировать вики /r/learnprogramming (включая эти ЧаВо)?

        Мы приветствуем ваш вклад, но чтобы получить право редактирования, вам нужен аккаунт, зарегистрированный не менее 30 дней назад и коммент-карма не менее 200 в данном сабреддите (не в целом на reddit). Как только эти условия будут выполнены, в заголовке вики появится кнопка «редактировать». Если вам не хватает времени или кармы, просто создайте обычный пост на тему с текстом, который хотите добавить: если он будет хорошего качества, кто-то из тех, кто может редактировать, почти наверняка опубликует его за вас.

        [customscript]techrocks_custom_after_post_html[/customscript]
        [customscript]techrocks_custom_script[/customscript]

        Как научиться программировать на языке C++ с нуля в кратчайшие сроки
        и с максимальной эффективностью?

        Михаил Русаков

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

        Меня зовут Михаил Русаков

        На момент написания этих строк мне 30 лет. Имею высшее техническое образование. Программированием безумно увлёкся ещё в 10-м классе (это был 2006 год). И на протяжении всех этих многих-многих лет едва ли наберётся суммарно хотя бы пару десятков дней, когда я за целый день вообще ни разу не занимался программированием. Я всегда либо сам программирую просто для себя, что мне интересно, либо создаю что-то на заказ, либо смотрю видеоуроки, либо читаю книги. Разумеется, неудивительно, что именно программирование я решил сделать своей профессией.

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

        Неудивительно, что, повзрослев, я решил объединить 2 своих больших увлечения, и сделать их своей профессией.

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

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

        Что такое C++ и для чего нужен этот язык?

        C++ — это один из самых живучих языков программирования. Из всех более-менее известных (и при этом используемых) языков он наиболее старый. И это кажется весьма удивительным, ведь считается, что в мире программирования всё меняется очень быстро, и то, что было актуальным ещё вчера, сегодня признаётся устаревшим (на самом деле, вообще не так, но это совсем другая история). Так в чём же феномен C++? Почему уже есть такие замечательные языки как Java, C#, Python и многие другие, а C++ не просто живее всех живых, но ещё и пользуется огромным спросом на рынке труда?

        А всё дело в его неоспоримых преимуществах:

        1. Огромная скорость. Быстрее только язык C и Assembler, на которых на текущий момент программируют, в основном, микроконтроллеры. Ни Java, ни C# даже рядом не стоят по производительности в сравнении с C++.
        2. Объектно-ориентированность. Это означает, что на C++ можно писать такие же гибкие и качественные программы с чистым кодом, как на Java или C#.
        3. Отличные возможности по работе с памятью. По этой причине C++ является абсолютно незаменимым при системном программировании.
        4. Кроссплатформенность. Один и тот же код можно с использованием соответствующего компилятора запустить на любой платформе, и он будет отлично работать.
        5. Универсальность. Может использоваться реально везде. Мне, если честно, даже трудно представить область, где он не подойдёт.
        6. Огромное сообщество разработчиков. Поскольку C++ уже много лет, то найти ответ на любой возникший вопрос не составит труда.Бесплатные библиотеки с открытым исходным кодом, ускоряющих и упрощающих разработку.

        Если C++ такой замечательный и универсальный, зачем тогда используются и другие языки?

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

        1. Программирование идёт более медленно, так как в C++ надо быть и более внимательным (чтобы не допустить ту же утечку памяти), и кода для одной и той же задачи надо написать немного больше, чем на Java или C#.
        2. Относительно медленная компиляция. В очень крупных проектах она может достигать даже нескольких минут (особенно обидно, когда компиляция завершается ошибкой из-за забытой точки с запятой).
        3. C++ — это очень сложный язык программирования. На моем счету около пары десятков языков программирования. Некоторые можно сказать, что уже мертвы (по типу ActionScript для Flash), другими я пользуюсь практически каждый день (PHP, JavaScript). Так вот из всех этих языков, C++ не просто сложнее любого другого, он намного сложнее.

        Вывод отсюда очень простой. Язык C++ требуется там, где необходима высокая скорость работы программы, либо нужна активная работа с памятью. И таких задач великое множество, отсюда и его востребованность. Однако, там, где это неважно, уже используются другие языки программирования. Кстати, по этим же причинам крайне сложно найти крупный проект, где вообще не используется C++, или тот, где всё написано только на C++.

        Нужно ли знать C++?

        Освоение C++ — этого своего рода посвящение в стан программистов. Даже при устройстве на работу PHP-разработчиком, если есть знание ещё и C++, то это является огромным козырем при устройстве на работу. Это подчёркивает, что соискатель действительно грамотный и понимает основы, а не просто научился машинально HTML-формы обрабатывать.

        Так же есть огромное количество вакансий, где напрямую требуются C++ программисты. Кстати, конкуренция среди них достаточная низкая, а зарплата, как следствие, высокая, поскольку хороших C++ разработчиков найти сложно (в отличие от тех же PHP-программистов).

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

        Резюме: C++ обязан знать любой уважающий себя программист, хотя бы на уровне базовых вещей (как пример, отличать ссылки от указателей).

        Как выучить C++?

        Теперь поговорим о том, как освоить язык C++. Как я уже писал выше, этот язык очень сложный. Освоить его по книге можно только при условии, что у Вас за плечами большой опыт программирования на другом объектно-ориентированном языке (в идеале, C# или хотя бы Java). Если такого опыта нет, то освоить C++ по книге практически нереально. Возможно, это получится сделать, прочитав с десяток книг. Но боюсь желание отпадёт после первой книги, ошибочно подумав, что программирование слишком сложно для Вас.

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

        Бесплатные материалы из Интернета тоже никуда не годятся по тем же причинам, что и книги, но здесь все ещё хуже. Так как C++ постоянно меняется, то огромное количество материала по нему просто устарело, но ни один новичок не отличит устаревший материал от свежего. Так же большой вопрос вызывает компетенция авторов этих бесплатных материалов. Работают бесплатно обычно только увлечённые новички. Когда они набираются опыта, у них появляется возможность зарабатывать, поэтому очень часто (за очень редким исключением) они перестают выкладывать что-то бесплатно.

        Таким образом, обучение по бесплатным материалам в Интернете – это самый ужасный вариант даже для тех, кто знает тот же C#.

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

        Есть ещё репетиторы. И это хороший способ, но крайне дорогой. Час нормального репетитора в Москве не может стоить меньше 2000-3000 рублей в час. В противном случае, спокойнее, проще и прибыльнее ему будет просто устроиться на работу C++ программистом или брать какие-то заказы на дом.

        А чтобы освоить C++ потребуется не один десятков часов, поэтому сумма у репетитора получится существенной. Да и эта зависимость от другого человека (который может заболеть, который может поменять планы, который может перенести занятие и тому подобное), тоже сомнительная вещь.

        Остаётся только видеообучение. И тут есть 2 основных варианта: онлайн-школы и видеокурсы. Разберём сначала первый вариант.

        1. Видеоинформация усваивается гораздо проще текста, так как задействуется не только зрение, но и слух.
        2. У большинства онлайн-школ доступны записи лекций (правда, не всегда бесплатно). Поэтому если что-то прослушали или пропустили, можно потом посмотреть запись.
        3. Структурированный последовательный материал. Обычно, всё построено грамотно: от простого к сложному.

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

        1. Личный наставник. Это красивое словосочетание означает не более, чем самую обычную службу поддержки, которая имеется и у любого уважающего себя автора видеокурса. Личным наставником может считаться только репетитор, к которому Вы приходите лично (либо созваниваетесь по скайпу) и перед которым Вы отчитываетесь за каждую домашнюю работу и который прямо при Вас проверяет и комментирует её. Всё остальное – это самая обычная служба поддержки, замаскированная красивым словосочетанием.
        2. Гарантированное трудоустройство. Удивительно, сколько людей ведутся на эту очевидную ложь. Ни один работодатель не согласится платить зарплату человеку, который просто заплатил за какой-то курс. Это смешно даже обсуждать. Максимум, что может обеспечить онлайн-школа – это гарантированное собеседование. Но на собеседование можно прийти в любую компанию и бесплатно. А вот возьмут или нет – зависит от Ваших знаний, а не от того, сколько Вы заплатили онлайн-школе. Есть второй вариант развода на «гарантированное трудоустройство», когда просто предлагается трудоустроиться в эту же школу без официального трудоустройства и без зарплаты. Формально, обещание выполняется, на практике это выглядит как издевательство и рабство.
        3. Преподаватели – «ведущие программисты Google/Yandex/Mail/…». Думаю, не нужно объяснять, что проверить достоверность этих сведений не представляется возможным. Но можно поверить на слово (хотя после предыдущих двух пунктов не хочется). И даже в этом случае, компетенция не всегда очевидна. Объясняю. У меня много друзей, знакомых и моих учеников, работающих программистами. И реальная работа, по их словам, выглядит так. Если должность высокая (например, ведущий программист), то он вообще не программирует, он занимается архитектурой. И его главная специализация именно она. И когда архитектор много лет занимается только этим, он забывает вообще, как программировать. Он как бы мыслит на более высоком уровне абстракции. Таким образом, он не сможет обучить программированию хорошо, так как сам его уже не знает. Если должность средняя (middle-программист), то здесь, во-первых, в крупных компаниях (а только такие почему-то онлайн-школы указывают) человек занят очень-очень узкой задачей (например, только валидация форм на крупном сайте, или только искусственный интеллект нескольких боссов в какой-нибудь игре) и ею занимается на протяжении многих месяцев, а, порой, и лет. И количество кода, которое пишется, зачастую, измеряется, в среднем, 5-10 строчек в день. Так же исправляют свои же ошибки, допущенные ранее. Остальное время – это лясы с коллегами, чаепитие и игра в какой-нибудь бильярд (если у компании есть такой зал). В мелких компаниях ситуация совсем другая, но онлайн-школы считают, что непрестижно будет придумывать их, поэтому указывают только крупные компании.

        Теперь подходим к очевидным недостаткам онлайн-школ:

        1. Очень высокая цена. Ниже я приведу конкретные скриншоты с ценами. А здесь я отмечу причину этого. Любая онлайн-школа должна за короткое время успеть собрать группу, с которой будет выгодно работать. Если группа будет маленькая, то вести её будет нерентабельно и придётся возвращать деньги, а все потраченные средства на рекламу утекут, сами знаете куда. А собрать быстро группу можно только очень массированной дорогостоящей рекламой. Вам любой маркетолог скажет, что 1000 человек на сайте в течение дня – это в разы дороже, чем те же 1000 человек на сайте, но в течение месяца. Хотя доход от них будет таким же. Отсюда бесконечная реклама у блогеров с миллионами подписчиков, даже с явно нецелевой аудиторией, лишь бы она была огромной. Отсюда в Директе рекомендуемая цена за клик по некоторым целевым запросам по 300 рублей. За 1-го целевого посетителя они реально готовы платить по 300 рублей! И рекламу у Николая Соболева, и 300 рублей за 1-го посетителя, угадайте, кто оплачивает в итоге? Правильно, клиенты онлайн-школ. Отсюда и такие высокие цены. Так вот у меня вопрос. Вы хотели бы, чтобы деньги шли на дорогостоящую рекламу у блогеров или всё-таки на качество самих учебных материалов и уровень преподавателей? В онлайн-школах, увы, Ваши деньги идут именно на маркетинг, а не на качество. И теперь переходим плавно к следующему пункту.
        2. Компетенция авторов вызывает сомнения. Вы сами видите, что онлайн-школы несут огромные расходы на рекламу. Поэтому, чтобы у них осталась хоть какая-то прибыль, им нужно максимально сэкономить на всём остальном. А на чём можно сэкономить, если на рекламе это сделать невозможно? Правильно, на преподавателях. Зачем искать профессионалов, когда можно найти на фрилансе или даже в тематических пабликах? Они просто пишут в личку абсолютно неизвестным специалистам, но которые являются активными участниками какого-нибудь паблика, посвящённому конкретному языку программированию, и предлагают ему вот эту работу. Соответственно, кто-то да откликнется, потом они выбирают самого дешёвого и при этом не являющегося уж совсем дебилом, иначе даже новички заметят, что дело тут нечисто. После этого придумывают ему легенду (основатель Google, создатель компьютера, изобретатель первого языка программирования и тому подобное), и люди ведутся. При этом, ни один новичок никогда не поймёт (по крайней мере, во время обучения), что перед ним дилетант. Более того, ни один новичок не отличит дилетанта от профессионала. Это всё равно, что первоклассник будет пытаться понять, кто из двух старшеклассников лучше знает физику.
        3. Онлайн-формат крайне неудобен. Тут даже дело не в конкретной дате и времени, когда будет проводиться занятие. В конце концов, есть запись. Но проблема в том, что в прямом эфире невозможно всё делать без ошибок. Автор обязательно ошибётся, начнёт искать ошибку, при этом он будет этим очень сильно затягивать занятие, а также очень сильно запутывать учеников. Как правило, поиск ошибок понимают лишь единицы. Так же идёт очень много просто воды, которую потом не вырезать, бесконечные отвлечения на чат с абсолютно неинтересными вопросами, которые интересуют исключительно задающего, но все вынуждены ждать. Понятно, что в записи можно проматывать уже, но где гарантия, что Вы случайте не перемотаете что-то важное? Если Вы хоть раз смотрели любой стрим по программированию (а я посмотрел их на сотни и сотни часов из-за отсутствия нормальной альтернативы), то, наверняка, знаете, что стрим на 3 часа содержит полезной информации от силы минут на 20-30.

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

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

        Кто-то так же скажет, что я их ругаю, потому что являюсь заинтересованным лицом. И это так. Но постарайтесь абстрагироваться от этого, и проанализировать всё самостоятельно. Уверен, Вы придёте к тем же выводам, что и я. В конце концов, мне никто никогда не мешал открыть свою онлайн-школу (один мой знакомый даже предлагал мне это, взяв на себя максимум работы), и с моей огромной стартовой аудиторией, никаких проблем с раскруткой бы не возникло, особенно, учитывая мой многолетний опыт в сфере обучения. Нанял бы рабов-преподавателей за 3 копейки, и стал бы брать с каждого человека в 10-20 раз больше денег за «наставничество» и «гарантированное трудоустройство». Но я себе это не позволяю и позволять никогда не буду, каким бы прибыльным это не было.

        Теперь перейдём к видеокурсам.

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

        1. Видеоинформация усваивается гораздо проще текста, так как задействуется не только зрение, но и слух.
        2. Структурированный последовательный материал. Обычно, всё построено грамотно: от простого к сложному.
        3. Смотреть можно в любой момент, когда угодно и где угодно.
        4. Низкая цена.

        Как видите, преимущества уже отличные. Но это ещё не всё. Поговорим теперь о дополнительных преимуществах уже именно видеокурсов моего авторства:

        1. Наличие упражнений для закрепления материалов из уроков.
        2. Поддержка. Все вопросы по курсам/по заданиям/по проверке упражнений всегда можно задавать в мою службу поддержки.
        3. Ничего лишнего. Только сконцентрированная информация. Если где-то что-то лишнее, или где-то непонятный для большинства поиск ошибок, всё это вырезается из финального видео. Остаётся только сама ошибка, а следующим кадром уже объясняется, как она была решена (иногда показываю ход рассуждений), а не получасовой поиск ошибки, запутывающий любого ученика. Поскольку я сам часто смотрю видеоуроки, и, к сожалению, очень часто с этим сталкиваюсь у других.
        4. Выдаётся именной сертификат о прохождении курса.
        5. Достоверно высокая компетенция. С моими знаниями всё очевидно понятно хотя бы просто по следующим соображениям. Даже если в 2010-м году я пришёл с пустой головой (хотя это было совсем не так), то уже за полсотни записанных видеокурсов за столько-то лет уж явно знания хочешь не хочешь, но появятся весьма серьёзные. Проверить же, что я столько лет преподаю крайне легко (а webarchive поможет). Но добавлю так же то, что доказать будет уже сложнее, но всё же считаю нужным это написать. Программирование – это для меня не только работа, но и хобби. Мне в этом плане повезло. Я регулярно совершенствуюсь в этом направлении, прочитав уже огромное количество книг, просмотрев тысячи и тысячи часов видеоуроков на нескольких языках по самым разным языкам программирования. И не потому, что надо, а потому, что хочется. Мне не особо интересны туризм (хотя семья иногда заставляет), абсолютно безразличны (если не сказать хуже) всякие веселушки, дискотеки, вечеринки. И поэтому значительную часть своего свободного времени, а у меня его очень много за счёт грамотного тайм-менеджмента, я уделяю именно программированию. Поэтому в моей компетенции можете быть абсолютно уверены.

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

        Поэтому представляю Вашему вниманию свой новый Видеокурс «Программирование на C++ с Нуля до Гуру».

        ВИДЕОКУРС

        Программирование на с Нуля до Гуру

        Курс состоит из 6 разделов

        Введение

        В данном разделе Вы узнаете:

        1. Как наиболее эффективно проходить курс?
        2. Как работает язык C++ изнутри? Это очень важно понимать, поскольку такие базовые знания отличают дилетанта от профессионала.
        3. В какой среде разработки лучше писать код на C++? Как её скачать, установить (особенно важно, какие компоненты необходимы) и как настроить?

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

        Основы программирования на C++

        В этом разделе Вы узнаете:

        1. Как пишутся программы на C++?
        2. Как правильно использовать комментарии?
        3. Что такое переменные, как они создаются и используются?
        4. Какие типы переменных есть в C++ и чем они отличаются друг от друга?
        5. Что такое константы и как с ними работать?
        6. Какие арифметические, логические и побитовые операции есть в C++ и как их использовать?
        7. Как работать с консолью?
        8. Как решить проблемы с кодировкой в консоли (не только на вывод, но и на ввод)?
        9. Что такое условный оператор и как он работает?
        10. Что такое оператор switch-case и когда его использовать?
        11. Что такое циклы и какие они есть в C++?
        12. Что такое цикл for, while и do-while и какая между ними разница?
        13. Что такое массивы, какие они бывают и, как и когда их использовать?
        14. Как работать с многомерными массивами?
        15. Что такое ссылки и для чего они нужны?
        16. Как создавать функции, как они работают изнутри, как они взаимодействуют со ссылками и многое-многое другое?
        17. Что такое область видимости переменных?
        18. Что такое статические переменные
        19. Что такое пространства имён, для чего нужны и как применяются?
        20. Что такое макросы?
        21. Как правильно разбивать код на разные файлы?
        22. Как собрать проект?

        После прохождения этого раздела Вы уже сможете писать несложные программы на языке C++.

        Работа с указателями

        Указатели – это неотъемлемая часть языка C++. Мне трудно представить серьёзный и грамотно написанный проект, где не использовались бы указатели. Поэтому работать с ними надо уметь обязательно, и как раз в этом разделе этим мы и займёмся.

        Посмотрев данный раздел, Вы узнаете:

        1. Что такое указатели и чем они отличаются от ссылок?
        2. Как взаимодействуют между собой указатели и массивы?
        3. Как работают константы и указатели вместе?
        4. Как работать с массивами в параметрах функций?
        5. Что такое указатель на функцию, а также как и когда его использовать?
        6. Что такое динамические объекты?
        7. Как не допустить утечку памяти?

        Объектно-ориентированное программирование

        Объектно-ориентированное программирование (ООП) – это самая популярная методика программирования, без которой немыслимо подавляющее большинство проектов не то, что средних и крупных, а даже маленьких. И сам язык C++, если ООП не использовать, становится бессмысленным (уж лучше тогда язык C использовать). Поэтому ООП надо обязательно знать любому, кто работает с C++. И как раз в этом разделе Вы и освоите ООП.

        В этом разделе Вы узнаете:

        1. Что такое объектно-ориентированное программирование и какие парадигмы в нём есть?
        2. Как создаётся класс в C++?
        3. Что такое конструкторы и деструкторы?
        4. Что такое методы (функции класса) и их перегрузка?
        5. Как правильно использовать .h и .cpp файлы?
        6. Что такое модификаторы доступа и как правильно их применять?
        7. Что такое дружественные функции и классы?
        8. Что такое статические поля и методы?
        9. Что такое перечисления?
        10. Что такое структуры?
        11. Что такое наследование и как его использовать в C++?
        12. Что такое виртуальные методы?
        13. Как делать перегрузку операторов?
        14. Что такое абстрактные классы и методы?
        15. Что такое шаблоны и как они используются?

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

        Обработка исключений

        В этом разделе Вы узнаете:

        1. Что такое исключения и почему они так важны?
        2. Как обрабатываются исключения в C++?
        3. Как генерировать исключения?
        4. Как обрабатывать много исключений?
        5. Как создавать свои собственные исключения?

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

        Стандартные классы в C++

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

        В данном разделе Вы узнаете:

        1. Как выполнять самые различные строковые операции?
        2. Что такое регулярные выражения, как их создавать и как использовать?
        3. Как выполнять разнообразные математические операции?
        4. Как считывать данные из файла?
        5. Как записывать данные в файл?
        6. Как использовать контейнеры – важнейшие классы, без которых не обходится ни одна мало-мальски серьёзная программа?
        7. Как быстро и легко осваивать новые классы, которые могут понадобиться Вам в процессе программирования?

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

        Упражнения

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

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

        Программирование на C++ в Unreal Engine

        Одной из основных областей применения языка C++ являются игры. Безусловно, на C++ можно создавать игры с нуля, однако, это разумно только для совсем простых игр, либо уж очень необычных игр. Для 3D-игр, которые достаточно сложны, разумнее использовать игровой движок. И самым подходящим для подавляющего большинства задач (по моему мнению и не только) является Unreal Engine. А вот там как раз используется C++. И очень многие мои ученики, когда просили записать курс по C++, практически всегда просили разобрать его использование в Unreal Engine.

        Поэтому все, кто закажет основной курс, получат бесплатно и достаточно крупный Бонус «Программирование на C++ в Unreal Engine», который содержит 16 уроков общей продолжительностью около 6 часов. В рамках этих уроках Вы увидите создание игры на C++ в Unreal Engine. Вот что Вы узнаете, посмотрев данный Бонус (всё нижеописанное, разумеется, создаётся на C++):

        1. Как вообще происходит программирование в Unreal Engine?
        2. В чём особенность программирования на C++ в Unreal Engine?
        3. Как создать базового персонажа?
        4. Как создать игрока?
        5. Как программируется анимация?
        6. Как создаётся GameMode?
        7. Как делаются компоненты?
        8. Как создаются виджеты?
        9. Как делаются игровые интерактивные объекты?
        10. Как создаются противники?
        11. Как создаётся искусственный интеллект?
        12. Как работать со звуками?
        13. Как создаются интерфейсы и как применяются?
        14. Как правильно пользоваться официальной документацией для решения любых возникающих задач?
          Многое-многое другое.

        Это очень ценный Бонус для абсолютно всех, кто увлекается разработкой игр в Unreal Engine.

        Но даже это ещё не всё. Сам курс представляет из себя целую систему эффективного обучения.

        В чём заключается эта система?

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

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

        1. Весь курс разбит по дням: «День 1», «День 2», «День 3» и так далее.
        2. В каждый из дней Вам необходимо будет посмотреть всего несколько видеоуроков (иногда и вовсе только 1) и выполнить упражнения по ним.
        3. Проставив галочки о выполнении заданий, открывается следующий день. Вообще, проставление галочек для многих бывает чуть ли не единственное, ради чего задача выполняется, поэтому галочки очень мотивируют на завершение задачи.
        4. Кроссплатформенность. Один и тот же код можно с использованием Каждый из дней у Вас будет отнимать в среднем 1 час. Таким образом, у Вас ежедневно будет оставаться 23 часа на все Ваши другие дела, поэтому курс у Вас много времени не отнимет. компилятора запустить на любой платформе, и он будет отлично работать.
        5. За счёт малого объёма ежедневных задач у Вас не будет никакого информационного перегруза. Посмотрели пару видеоуроков, выполнили пару заданий и всё.
        6. Таким образом, получается, что, тратя совсем мало времени, не перегружая себя физически и эмоционально, Вы сможете легко дойти до конца курса и получить отличный результат.

        Посмотрите видео-демонстрацию этой системы

        Сертификат

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

        Вот так он выглядит в низком разрешении. Разумеется, в курсе Вы его получите в высоком разрешении (а именно, 2480 на 3508).

        Какие знания требуются для прохождения курса?

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

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

        Гарантия

        Я занимаюсь обучающей деятельностью с 2010-го года, за это время я записал больше полусотни как платных, так и бесплатных видеокурсов по самым различным темам, прямо или косвенно относящихся к программированию (https://blog.myrusakov.ru/courses.html).

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

        По моей статистике, клиентов, просящих у меня возврат, чуть больше 1%. Учитывая такое малое количество возвратов, мне нет смысла отказывать в них. Более того, я уже много лет даю безусловную гарантию. То есть независимо от причины, возврат Вам будет сделан.

        Срок действия гарантии составляет 30 суток с момента оплаты.

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

        Для получения возврата Вам необходимо написать запрос в отдел «Возврат» в моей службе поддержки: https://support.myrusakov.ru/ask

        Итоги

        Что Вы получаете, приобретя Видеокурс «Программирование на C++ с Нуля до Гуру»:

        • Сам Видеокурс, состоящий из 72 уроков общей продолжительностью более 16 часов.
        • Бонус «Программирование на C++ в Unreal Engine», состоящий суммарно из 16 уроков общей продолжительностью около 6 часов.
        • Массу упражнений и все исходники из уроков.
        • Поддержку от меня.
        • Очень удобную систему, благодаря которой пройти курс будет гораздо проще и интереснее.
        • 100% гарантию на возврат средств, если курс Вас не устроит.

        А после прохождения курса Вы сможете писать программы на C++ с любым по сложности функционалом.

        Теперь есть и DVD-версия курса!

        Программирование на с Нуля до Гуру

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

        Какова стоимость курса?

        Я всегда, когда назначаю цену курса, смотрю, сколько он в денежном эквиваленте может вернуть, если применять знания из него на практике.

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

        Вакансии

        С опытом работы резко растёт зарплата:

        Вакансии

        Как видите, уровень зарплат у опытных программистов весьма высокий. И, кстати, для тех, кто хочет переехать в другую страну, C++ – это очень хороший вариант. Так как очень много высокооплачиваемых вакансий есть и за границей.

        Поэтому ценность знаний по C++ крайне сложно переоценить. Объективно цену за курс можно было бы поставить и в 50 000 рублей. Ведь после прохождения курса Вы бы за месяц работы стажёром отбили бы его полную стоимость. И, кстати, многие мои «коллеги» так и делают. Вот некоторые скриншоты с ценами на обучение C++:

        Вакансии

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

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

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

        Поэтому цену и на этот курс я решил поставить доступную для каждого, а именно 4970 рублей (1 ночь в посредственном отеле в сезон на Чёрном море). Это абсолютно смешные деньги в сравнении с той ценностью, которую несёт сам курс «Программирование на C++ с Нуля до Гуру».

        Теперь есть и DVD-версия курса!

        Программирование на с Нуля до Гуру

        Цена за курс: 4970 ₽

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

        С Уважением, Михаил Русаков!

        Вопросы и ответы

        • 1. Какое разрешение у видео? 2K (2560×1440)
        • 2. Какова общая продолжительность курса? Общая продолжительность курса составляет 16 часов 14 минут 35 секунд.
        • 3. Актуальная ли информация в курсе? Да, информация актуальная. А когда она становится уже не совсем актуальной, то курс снимается с продаж и выпускается его новая версия.
        • 4. Выдаётся ли сертификат? Да, сертификат выдаётся.
        • 5. Есть ли упражнения в курсе? Да, упражнения идут практически к каждому уроку, за исключением нескольких чисто теоретических уроков.
        • 6. Как выдаётся доступ к системе? Ссылка на неё, логин и пароль выдаются сразу после оплаты.
        • 7. Есть ли защита у курса? Можно ли будет его посмотреть на разных компьютерах? Защита у курса есть. Активировать его можно будет на 3-х различных устройствах.
        • 8. Нужен ли доступ в Интернет для просмотра уроков? Да, Интернет обязательно нужен.
        • 9. А что, если пропускной способности канала сервера не хватит для онлайн-просмотра всех желающих? Канала гарантированно хватит, так как все видео находятся на отдельном облачном сервисе.
        • 10. Я не уверен, что мне хватит пропускной способности Интернета. Что мне делать? Для просмотра видео достаточно 4 Мбит/с. Но если вдруг Интернет совсем слабый, то Вы в любой момент сможете вернуть деньги.
        • 11. Оказывается ли поддержка по курсу? Да, безусловно. Все вопросы по прохождению курса Вы можете задавать в мою службу поддержки: https://support.myrusakov.ru/ask
        • 12. Можно ли заказать курс на дисках? Да, можно. Для этого при оформлении заказа надо указать способ доставки: «По почте». Однако, обратите внимание, что этот способ дороже, так как требует оплату изготовления бокса, дисков, а также стоимости самой доставки.
        • 13. Нужно ли знание английского языка? Для успешного прохождения курса точно не нужно. Однако, в будущем для решения каких-то проблем очень часто приходится искать информацию на англоязычных форумах, тут-то он и пригодится. Правда, я знаю, что многие используют онлайн-переводчики, и так же успешно находят ответ на свой вопрос на англоязычных сайтах без знаний английского языка.
        • 14. У меня остались ещё вопросы. Куда мне их написать? Любые вопросы можете задать в мою службу поддержки: https://support.myrusakov.ru/ask

        © Михаил Русаков. 2024 г. Все права защищены.

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

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