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

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

Самый популярный сервис в области обучения программированию с нуля, получивший несколько значительных раундов финансирования. Известен тем, что абсолютно бесплатен и создан специально для тех, кто ничего в программировании не понимает. Учит базовым принципам работы с JavaScript, HTML and CSS, Python и Ruby. Обучение проходит в форме коротких упражнений с простыми заданиями и инструкциями. Пользователь пишет код и сразу видит результат своих действий.

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

Если Codecademy исповедует минималистичный подход к обучению, то в Code School любят фантазировать и экспериментировать. Самое интересное у них - не базовые уроки по Ruby, JavaScript, HTML/CSS и iOS, а курсы-продолжения, такие как Rails for Zombies . Кредо компании - Learn by Doing («Обучайся, действуя»). Вместо скучных абстрактных заданий они предлагают пользователям программировать то, что им интересно, например игры про зомби.

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

Treehouse делают акцент на обучающем видео. Даже если вы не готовы к полноценному курсу по созданию сайта, приложения для iPhone или Android, а просто хотите получить базовые знания о том, что такое интернет и как он работает, стоит подписаться на их канал на YouTube. Тех, кто решит начать изучать Ruby on Rails, PHP и другие языки программирования, на сайте ждёт более 1 000 видеоуроков. Они собраны в курсы, посвящённые веб-дизайну, программированию, технологическому предпринимательству и многому другому.

Видео постоянно обновляются, так что курсы морально не устаревают. После каждого видео даются практические задания, интерактивные квизы. В конце каждого курса у вас будет готов небольшой проект. После этого сервис подскажет, что стоит изучить дальше. На сайте есть хороший пользовательский форум, можно получить фидбэк от экспертов, поучаствовать в мастер-классах. Единственный недостаток - обучение стоит денег, от $250 до $490 в год. У Treehouse есть отличный бесплатный дочерний проект для тех, кто уже чему-то научился, - Code Racer . Там нужно кодить на скорость, соревнуясь с противником. В процессе ему можно всячески мешать: например, забрасывать его экран фотографиями кошек.

Если обучение в одиночку вам не подходит, можно пройти онлайн-курсы с другими начинающими на Coursera, Udacity и других профильных сайтах, о которых мы уже . Плюс таких курсов в том, что у вас есть хоть и удалённый, но учитель, и определённый темп обучения, который не позволяет расслабляться. Курс Introduction to Computer Science (на видео) очень популярен среди новичков. Udacity, созданный на базе Стэнфордского университа, хорош тем, что совершенно бесплатно предоставляет университетские курсы в адаптированной под удалённое обучение форме. Рядом с каждым курсом есть шкала сложности. Предполагается, что, пройдя курс с нулевой сложностью, вы будете готовы к прохождению остальных, где изучаются конкретные языки. На Coursera тоже немало курсов для начинающих программистов, например, этот , посвящённый Python, и этот ­- про создание креативных мобильных приложений.

Если подавить гордость и признать, что все вышеуказанные курсы всё равно слишком сложны, можно начать с тех, что созданы специально для детей. Например, приложение для iPad и iPhone Move the Turtle . Это игра, которая обучает программированию через небольшие задания, каждое из которых заставляет двигаться черепашку. Сервис Alice , созданный в Carnegie Mellon University, учит созданию движущихся 3D-героев, параллельно давая основы C++ и Java. Hackety Hack - приложение, обучающее азам Ruby. В отличие от предыдущих оно делает это не через картинки, а уже через конкретные языковые команды. Но, конечно, самое лучшее для детей - это роботы, запрограммированные выполнять простые команды, которые сначала нужно прописать в виде компьютерного кода. Один из таких - робот Sparki, собравший деньги на Kickstarter. Сделать предзаказ можно , и стоить он будет всего $100.

Фотография via Shutterstock

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

С чего начать

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

Если с вами ничего из вышеперечисленного не произошло, значит, у вас есть выбор из четырёх вариантов:

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

Какой язык, технологию и направление выбрать

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

  • Наличие на рынке вакансий . Конечная цель этого пути - найти работу программистом. А это будет трудно сделать, если на рынке вакансий никто не будет искать разработчиков на вашем языке программирования. Проверьте сайты с вакансиями, посмотрите, кого больше ищут, выпишите десяток языков. И переходите к следующему критерию.
  • Низкий уровень вхождения . Если вам придётся потратить длительное время на изучение языка, это может отбить у вас охоту к программированию вообще. Почитайте о тех языках, которые вы выбрали выше. Просмотрите литературу, которую нужно будет прочитать, чтобы изучить эти языки. И выберите те, о которых пишут, что они лёгкие, или которые вам показались лёгкими. Такими языками могут оказаться PHP, Ruby, Python.
  • Кайф от процесса . Если вам не нравится писать код на выбранном языке, вы не будете получать удовольствия от этого процесса, от работы и от жизни. А оно вам надо? Делайте правильный выбор.

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

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

Как получить начальный опыт

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

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

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

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

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

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

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

Почему стоит выбрать Python

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

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

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

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

Языки C и C# очень сложны для новичка. Ruby - хороший выбор в качестве второго языка, но не первого. JavaScript - очень простой язык, но ничему хорошему он вас не научит. А задача первого языка программирования всё-таки научить вас чему-то правильному, задать какую-то логику.

Важен ли английский язык

Важен! Не знаете? Учите. Знаете? Совершенствуйте. Учитесь читать, писать, слушать и говорить на английском. Делайте упор на техническую литературу. Слушайте англоязычные подкасты. Читайте англоязычные учебники по программированию.

Что нужно знать, кроме языка программирования

Конечно же, кроме языка программирования и английского, нужно знать что-то ещё. А вот что - зависит от направления, которое вы выберете. Веб-программист обязан знать HTML, CSS, JavaScript. Десктоп-программист учит API операционной системы и различные фреймворки. Разработчик мобильных приложений учит фреймворки Android, iOS или Windows Phone.

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

Последние шаги

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

Надеюсь, после прочтения этой статьи, вы найдете свой путь, ведь именно в этом мы с вами сейчас и разберемся!

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

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

Стоит отметить, что знание таких наук, как математика , и английский язык, не обязательны, и это вы очень быстро поймете, как только начнете писать свою первую программу. Конечно, если вы планируете работать над большими проектами, вроде GTAV , Cinema4D или Google.Maps , то такие науки лучше бы знать. Правда, здесь вам больше поможет опыт, который в быстрые сроки сформирует в вашем сознании огромное количество знаний точных наук. Однако не стану скрывать, существуют некоторые сферы деятельности, как, например, нейронные сети, в которых без предварительных знаний математики просто не обойтись. Но только не веб, игры, программы, дизайн и прочее в этом духе. По крайней мере, на первых парах об этом можно вообще не заморачиваться.

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

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

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

Веб программирование

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

Чтобы стать веб-программистом, необходимо знать такие языки программирования и разметки, как , (а вместе с ним и библиотеки , AngularJS и многие другие). Кроме того, необходимо уметь писать функционал сайта, который можно написать на языке . Необходимо также уметь работать с базами данных и языком SQL. Для связи сайт - база данных можете изучить . И последнее, что прибавит вам пару очков навыка, это . Он позволяет делать некоторые изменения на сайте, к примеру, отправлять данные в базу данных без перезагрузки самого сайта.

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

Самостоятельная разработка игр

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

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

К примеру, для разработки игры на Android вам потребуется знать язык и специальные библиотеки, служащие для создания игр на Android в Android Studio.

Для создания игр на ПК или консоль вам однозначно потребуется язык и всевозможные библиотеки, которые и помогут вам создать игру. Для разработки на IOS потребуется язык Objective С или Swift , а также понадобится программа XCode .

Разработка игр при помощи движков

Если вы решили заняться разработкой игр при помощи движков, то вы на верном пути. Большинство игр в наше время создаются при помощи всевозможных игровых движков, из которых можно отметить таких гигантов как , Cry Engine , Unreal Engine , Frostbite Engine , Dunia Engine , Source и так далее.


Дизайнер

В дизайне необходимо уметь хорошо рисовать в Фотошопе и в программах 3D-моделирования, вроде Cinema 4D. Двух недель обучения вполне достаточно, остальное сделает опыт.

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

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

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

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

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