158.7K

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

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

Что нужно знать «чайнику»

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

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

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


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

После развала СССР все отечественные ВУЗы долгое время даже и не пытались перекроить свою систему обучения под потребности современного рынка. Не являлись исключением из этого правила и технические ВУЗы.

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

В странах бывшего СССР основным языком программирования, преподаваемым в технических ВУЗах, был Бейсик.

Ситуация кардинально не изменилась и через 10 лет. Лишь некоторые учебные заведения, учуяв веяния нового времени, в начале двухтысячных года начали перекраивать свое обучение под мировые стандарты. И только с этого момента программирование стало восприниматься как отдельная профессия и специализация обучения:


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

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

В некоторой мере такая тенденция сохраняется и по сей день. Хотя в наше время количество профессионалов, занимающихся преподаванием, заметно возросло.

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

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


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

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

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


Рассмотрим особенности этого языка, делающего его оптимальным для изучения:
  • Простая для понимания основа – часть встроенных возможностей языка для простоты вынесена в отдельно подключаемые библиотеки. К таким элементам относится большая часть математических функций и методов для работы с файловой системой;
  • Оптимально подогнанная система типов – благодаря простому набору типов данных и строгой типизации уменьшается риск допущения ошибок в процессе написания программного кода;
  • Направленность C на процедурный тип программирования, при котором соблюдается четкая иерархия всех элементов кода;
  • Доступ к памяти машины с помощью указателей;
  • Минимальное количество поддерживаемых ключевых слов;
  • Поддержка области действия имен;
  • Поддержка пользовательских типов данных (объединения и структуры ).

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

Программы (компиляторы) для программирования

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

Компилятор – специальная программа, переводящая программный код в форму, понятную для компьютера.

Вот несколько специализированных компиляторов с поддержкой языка C:

  • Microsoft Visual Studio – профессиональный инструмент, поддерживающий множество языков, в том числе и несколько серверных. Подойдет для новичков, если брать его «на вырост»:
  • Borland C++ — бесплатный компилятор, идеально подходящий для начинающего обучение. В отличие от предыдущего инструмента, отличается ясным и понятным интерфейсом. Поэтому его освоение не вызовет особых трудностей даже при самостоятельном освоении азов программирования:
  • Code::Blocks – бесплатная среда разработки, поддерживающая написание кода на нескольких языках. Средний по сложности освоения вариант:
Что касается специализированной литературы, то советовать книги определенных авторов мы не будем. Тут, как говорится, выбирайте, что душе угодно. Потому что в большинстве случаев подбор самоучителя по программированию – это индивидуальный процесс. Используйте тот источник, который больше подходит именно для вас.

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

Начало
С чего мне начать?
Какой язык программирования стоит выучить первым?
Где можно найти качественные образовательные ресурсы?
Как совершенствовать навыки
Как перейти с начального уровня на средний?
Где можно найти тренировочные упражнения и идеи для проектов?
Как улучшить навык реализовывать задачи/задания в программах (алгоритмическое мышление)?
Я не могу придумать классную идею для проекта. Мне просто не хватает креативности? Как другие программисты ищут вдохновение?
Где можно найти примеры хорошего кода и проектов для обучения?
Как выучить темы, которые рассматриваются в стандартных университетских программах по информатике?
Как начать крупный проект и не забросить его?
Распространённые страхи и опасения
Я уже слишком стар для программирования?
Есть что-то другое, чему мне сначала нужно научиться?
Нужно ли мне хорошо знать математику?
Я много гуглю или не знаю, как делать что-то, когда только собираюсь начать. Это плохо?
Программировать сложно?
Вопросы про обучение
Что значит «знать язык» или «уметь программировать»?
Я только что начал учить язык Х. Стоит ли мне начинать учить язык 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…)

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

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

Где можно найти качественные образовательные ресурсы?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • https://www.reddit.com/r/learnprogramming/comments/3yqhuk/why_do_i_feel_like_ive_hit_a_wall_learning/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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.

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

Программирование 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; которую именно использовать, в основном зависит от ваших личных предпочтений, но мы настоятельно советуем одну из них.

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

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

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

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

Частый вопрос, который возникает у многих новичков, - какую из операционных систем им лучше использовать: 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, а также понадобится постоянный доступ с интернет. Больше информации читайте по ссылкам:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разное

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

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

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

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

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

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

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

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

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

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

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

Существует множество ресурсов, которые призваны помочь начать писать код, освоить азы или изучить новый язык или фреймворк. Но есть две проблемы: Как действительно взяться за обучение, а не просто испытывать желание? И как сделать это по-настоящему эффективно?

На деле нужно помнить всего три правила для успешной стратегии обучения:

  1. Идите к привычке, а не к цели
  2. Учёба в одиночку приносит страдания
  3. Создавайте

А теперь подробнее о каждом из пунктов.

1. Концентрируйтесь на построении привычек, а не на целях.

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

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

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

Ваша цель: не ставить цель, а постепенно развиваться .

2. Учёба в одиночку = боль и страдания.

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

Опытный наставник

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

Сообщество единомышленников

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

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

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

3. Создавайте!

В первый год своего обучения веб-разработке я создал несколько проектов:

Клон Digg;

Приложение интернет-магазина (на Rails 4, совместная разработка);

Приложение в стиле GeekSquad;

Онлайн-класс;

Приложение для изучения иностранных слов

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

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

4. Не вымирайте

Это секретный, четвёртый пункт, который доступен тем, кто дочитает пост до конца.

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

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

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

Читайте мой личный рейтинг 10 лучших онлайн-курсов для начинающих обучение базовым основам языков веб-программирования с нуля до первых стажировок и начального трудоустройства в известные российские IT-компании. Они доступны на русском языке, в том числе для школьников и подростков. Здесь курсы по самым востребованным языкам от HTML и CSS до 1С, PHP, Java, Python, Ruby и С#. Те, кто дочитают статью до конца, получат ссылки на бесплатные курсы и интенсивы по программированию:)

1. Python для веб-разработчиков от SkillFactory

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

SkillFactory вместе с Игорем Босягиным, R&D-программистом Lamoda помогут освоить основы программирования на Python, фреймворк Django и разработать первые приложения за 6 месяцев. Вас ждут тусовка с полезными знакомствами, экзамен в конце курса, сертификат, а также помощь со стажировкой и трудоустройством. Обучение на курсе доступно из любой точки мира.

Стоимость курса от 33900 до 48900 в зависимости от даты брони места на курсе и количества свободных мест. Как читатель блога сайт вы можете получить 10% скидку, сообщив менеджеру кодовое слово igaryoh после оформления заявки. Читайте подробности о программе и записывайтесь на курс по этой ссылке .

3. Профессия веб-разработчик от GeekBrains

GeekBrains – образовательный проект, который стал частью экосистемы Mail.ru Group и готовит кадры преимущественно для нужд этого IT-гиганта, зачастую силами его же специалистов. Профессия веб-разработчика с нуля здесь даётся через вебинары на протяжении 10 месяцев почти по 8 тысяч рублей в месяц.

Это самый дорогой вариант, но вместе с профессией в комплекте идут бонусом бесплатные курсы по английскому и базам данных. Если вам интересна работа в компании Mail.ru Group или её партнёрах, то записывайтесь в онлайн-университет GeekBrains .

Формат : вебинары + разборы домашних заданий.

Длительность : 10 месяцев.

Стоимость : 7997 рублей в месяц.

4. Профессия веб-разработчик от Нетологии

Веб-разработчик – самая востребованная и актуальная профессия, требующая освоения разных инструментов. Интернет-университеты дают эту профессию на протяжении 8-12 месяцев. Преподаватели – опытные практики из известных IT-компаний дают навыки, которые студенты отрабатывают на реальных проектах. В результате выпускники получают умения, опыт, дипломы, проекты в портфолио и возможное трудоустройство в компании-партнёры.

В Нетологии эту специализацию называют «full-stack-разработчик». Это значит, что выпускник этого курса сможет создать сайт или веб-приложение от начала и до конца, что называется «под ключ». Зарегистрироваться на программу можно .

Формат

Длительность : 8 месяцев.

Стоимость

Читайте также:

5. Профессия веб-разработчик от Skillbox

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

Формат : видеолекции + видеоразборы домашних работ.

Длительность : 12 месяцев.

Стоимость : 39 000 - 50 000 р. или годовая рассрочка по 3900 р. в месяц.

6. Профессия Frontend-разработчик от Нетологии

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

Формат : вебинары + обратная связь по домашним работам.

Длительность : 8 месяцев.

Стоимость : 48 900 — 62 900 р. или годовая рассрочка по 5 240 р. в месяц.

7. Профессия Frontend-разработчик от GeekBrains

За 7 месяцев можно стать фронтендером в GeekBrains. Стоить будет примерно также как и в Нетологии. Но зато рассрочка на 7, а не на 12 месяцев. Подробности и регистрация .

Формат : вебинары + разборы домашних заданий.

Длительность : 7 месяцев.

Стоимость : 7 141 р. в месяц.

8. PHP-разработчик с нуля до PRO от Skillbox

PHP-разработчики занимаются преимущественно тем, что находится «под капотом» большинства современных сайтов, включая сайт, который вы сейчас читаете. В Skillbox это направление преподают преимущественно специалисты из компании QSOFT - ведущего веб-интегратора в России. Обучают этому целый год, но за относительно доступную стоимость. Записаться на курс можно по этой ссылке .

Формат : видеолекции + видеоразборы домашних заданий.

Длительность : 12 месяцев.

Стоимость : 29 000 - 50 000 р. или годовая рассрочка 2 900 р. в месяц.

В GeekBrains этому же направлению готовы научить всего за полгода, но по стоимости может выйти дороже, чем в Skillbox. Подробности и регистрация . В Нетологии курс по PHP и базам данных длится 2 месяца и стоит 22 00 - 25 000 рублей, но эта информация для тех, кто внимательно читает статью. Ссылка вот .

Читайте также:

9. Pyton-разработчик от Нетологии

Более глубокая программа по изучению Питона у Нетологии - длится она почти год и включает в себя модули по направлениям HTML/CSS, JavaScript и Django. Подробности .

Формат : вебинары + обратная связь по домашним работам.

Длительность : 11 месяцев.

Стоимость : 48 900 — 62 900 р. или годовая рассрочка по 5 240 р. в месяц.

10. Мобильный разработчик с нуля от Skillbox

Люди всё чаще пользуются мобильными устройствами, отчего растёт фронт работ мобильной разработки и спрос на разработчиков мобильных приложений. Skillbox предлагает обширный годовой курс мобильной Java/iOs/Android-разработки для начинающих с нуля. Читайте подробности о нём и регистрируйтесь по этой, Java-программист . И в эту же компанию добавим курс Java-разработчик от Skillbox .

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

Бесплатные курсы по программированию

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

Другие платные курсы для программистов от Нетологии по этой ссылке , а от GeekBrains вот по этой .

P. S.: Всем, кто ищет курсы программирования в Москве, СПб, Екатеринбурге, Минске, Новосибирске, Нижнем Новгороде, Краснодаре и других городах России и СНГ настоятельно советую всё-таки сделать выбор в пользу онлайн-курсов, поскольку именно онлайн-технологии позволяют создавать самые качественные образовательные продукты по доступной цене (из-за отсутствия расходов на аренду), а также связывать лучших учителей и работодателей с учениками и будущими работниками из самых отдалённых от столиц регионов. К тому же, навык онлайн-обучения пригодится и для удалённого обучения в зарубежных школах.

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

П одписывайтесь на меня в Инстаграм , до бавляйтесь

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

10. Выясните, почему вы хотите программировать

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

9. Выберите правильный язык

7. Попробуйте приложения для детей

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

6. Воспользуйтесь бесплатными онлайн-тренингами

Бесплатные онлайн тренинги и проекты (Codecademy , Hour of Code и др.) могут помочь вам в написании первой программы. Учебные пособия от Khan Academy, Codecademy, Code.org и других познакомят с основами программирования и всем необходимым для создания игры, сайта или другого проекта. Найдите нужный источник в зависимости от языка программирования, воспользовавшись . Это хорошая отправная точка, однако дальнейшее обучение вам нужно взять на себя.

5. Пройдите онлайн-курс

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

4. Бесплатные книги по программированию

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

3. Изучайте, играя

Иногда лучшим способом обучения являются игры. В то время, как многие учебники по программированию обучают вас программировать простые либо сложные игры, некоторые обучающие сайты сами являются играми: Code Combat и CodinGame - инструменты, используя которые вы можете весело провести время.

2. Найдите наставника или станьте им

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

1. Разберите чужой код