Для кого эта статья?  В первую очередь для тех, кто интересуется программированием, но не знает как к нему подступиться.Ведь это неизвестность, которая всегда пугает. Ко мне периодически обращаются юноши, которые горят желанием программировать, но теряются. Действительно, есть много такого, что хочется создать своими руками. Много разного. Чаще всего молодёжь хочет написать крутейшую игру, которая будет работать на слаааабенькой видеокарте :) Мне приходится их разочаровывать. Дело в том, оптимизация программы не менее сложная работа, чем её написание. целые команды профессионалов работают над этим. И наивно полагать,сто один разработчик,который только начал изучать азы программирования окажется  более эффективным в этой задаче. Задача "крутая игра на слабом железе" возникает от невозможности позволить себе дорогую видеокарту. Обычно такую задачу ставят себе старшеклассники, либо студенты начальных курсов институтов. Один из моих студентов со временем понял, что заниматься WEB программированием (не путать с вёрсткой) намного интереснее. А крутую видеокарту можно купить на нормальную зарплату программиста, без особого  ущемления других своих потребностей.  Итак, первым шагом определяем, что именно хочется программировать. В какое именно устройство вложить свой мозг  и для чего это нужно именно Вам (может, просто для высокой зарплаты). Основных направлений не так уж много: Windows Linux MacOs WEB-приложения Мобильные приложения (Android, iOS) Виртуальная и дополненная реальность AR/VR Мультимедиа (Фото, видео и звук) Встроенные системы и IoT(типа, Arduino, STM32, AVR, ESP и т.п.) Наверняка есть ещё направления. Более экзотические. Или комбинации из перечисленных. Например, дополненная реальность в мобильных приложениях... Выбирайте, с какими устройствами Вы хотите работать и переходим к следующему шагу. Для каждой платформы есть свои инструменты разработки и отладки. Конечно же, все эти инструменты перечислять бессмысленно. С этим списком ничего невозможно сделать.Вам нужно выбрать инструмент по какому-то критерию. Лучше всего - по популярности. Дело в том, что в разработке всегда, возникают неожиданности. В лучшем случае, это Ваши ошибки, в худшем - ошибки самих инструментов и целевых платформ. Обычно, программист получает сообщение об ошибке. Затем гуглит это сообщение, чтобы решить проблему. Чем популярнее инструмент - тем больше вероятность, что решение будет найдено. Со временем Вы поймёте, что инструмент выбирается под конкретную задачу. Когда Вы только начинаете изучение - Вам лучше всего выбрать именно популярный инструмент. Он стал популярным не случайно. Например, в WEB программировании самый популярный инструмент это Node.js с его кучей готовых компонентов и библиотек. По сути, готовых решений.  Для того, чтобы новичку придать начальное ускорение  в каждом развитом технологическом решении (платформа + инструмент) есть примеры готовых приложений, которые можно просто собрать и запустить на выполнение. Посмотреть как оно работает. Поизучать какие изменение в тексте программы как влияет на исполнение приложения. Есть так же образцы кода, которые можно скопировать в своё приложение.  На жаргоне программистов это называется "скопипастить" от слов Copy + Paste Правда, они могут не всегда работать :) Примеры есть как в наборе инструментов, так и вообще на просторах интернета. Самая высокая плотность примеров и образцов - это GitHub.  Что такое GitHub и git - описывать не буду. Об этом достаточно написано статей, документации, видеороликов. Скажу только одно - использование системы управления версиями в работе - привычка профессионала. Это нужно для сохранения всей истории измений Вашего кода. Это сильно упрощает жизнь. Чем дольше и сложнее разработка - тем больше облегчается жизнь. Так что, если у Вас с программированием серьёзные отношения придётся изучить ещё и git. Именно git - по причине самой высокой популярности. На первых порах достаточно знать и понимать не больше десятка команд, так что на пугайтесь. Тем более, что для git существуют разные графические интерфейсы, с помощью которых можно работать с историей изменений более наглядно. Многие компании исторически используют другие системы управления версиями. имея опыт с git для Вас не составит большого труда изучить и другую систему. Итак, Вы определились с целевой платформой, задачей и технологией. Что дальше. Пришла пора практических шагов. Установка необходимого ПО. Тех самых инструментов. Как правило, на первых порах выбирают интегрированную среду разработки IDE, где редактор, отладчик, компилятор ( или интерпретатор )  находятся "в одном флаконе". Процесс разработки максимально упрощён. Но даже при этом упрощении на обойтись без инструкций, как этим пользоваться В самом комфортном варианте - это видеоинструкции. Обычно на youtube этих инструкций много и нужно подобрать ту, которая для Вас наиболее доходчива. И всё равно, готовьтесь к тому, что какие-то вопросы нужно будет задать живым людям. Либо в форумах, либо авторам видеоуроков, либо, просто, знакомым, которые в теме. Кстати.достаточно эффективный ресурс qna.habr.com Здесь вероятность найти компетентного человека очень высока. Сам пробовал. Правда, бывают такие вопросы, на которые может ответить только автор технологии. С этим вопросом мне пришлось обращаться в STM И несколько недель ждать ответа. Наконец-то первое приложение из примера собрано, запущено, протестировано. Однако, хочется, чтобы программа была своя и имела именно тот функционал, который хочется Вам, а не тот, который заложил автор примера. Вот тут придётся попотеть. Дело в том, что язык программирования - это ЯЗЫК. он предполагает некоторый набор смысловых конструкций. Если Вы программист - Вам нужно вникать в самые разные смыслы. Смысл переменных, объектов, функций, библиотек, ключевых слов, директив, примитивов, запросов. Вам нужно вникать в смысл того, что вы сейчас используете. Где это находится, как это работает? Я бы сказал, что работа - исследовательская. Контрольный вопрос: "Вы готовы заниматься исследовательской работой?" Почему так сложно? Потому, что современное программирование давно и далеко ушло от своих истоков. Наработано огромное количество технологий, библиотек, компонетов и прочего кода, который хочется использовать повторно. На жаргоне это называется Reuse (реюз) Встают практические задачи совместно использовать один компонент с другим, одновременно использовать разные компоненты, в одном приложении или системе использовать различные технологии одновременно. Такая задача называется интеграцией. Сборкой чего-то целого из частей. И программисты часто сталкиваются с проблемой совместимости этих самых частей. возникают ошибки, конфликты сборки и исполнения, различия систем понятий.  Чтобы разрешить проблемы нужно глубоко вникать в детали и подробности. Глубже и глубже. Делать предположения, проверять их. Затем тестировать. В общем, это целый мир. "Зазеркалье" Хотите туда? Интересно? Тогда дерзайте. Эта статья не претендует на введение в специальность. Она была написана постольку, поскольку вопросы задаются и я на них отвечаю. Embedded software