Обучение программированию с нуля — как пройти путь от чайника до программиста-профессионала [8 ключевых шагов]

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

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

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

Постараемся охватить тему как можно шире, учесть побольше нюансов и коснуться проблем в обучении.

Содержание:

Цель

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

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

И нередко они подумывают переквалифицироваться из системного администратора, веб-дизайнера или «сетевика» в программиста.

Рис. 1 – Человек за компьютером

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

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

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

back to menu ↑

Плюсы и минусы

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

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

Плюсы:

  • Работа с разными людьми (как плюс, так и минус), порой большим количеством людей, с разным уровнем понимания в IT-сфере и предмете разговора: тяжести в поисках общего языка, конфликты, постоянные доделывания и переделывания проектов, потому что «не так понял», «не это имел ввиду», «ситуация изменилась» и т.д. Второй аспект – коллеги: конфликты, прессинг, зависимость один от другого в командной работе.
  • Относительно свободный график, если не работаете на полный рабочий день. Возможность работать дома – удалённо, выполнить свою часть проекта и отдохнуть или заняться фрилансом. Хотя есть компании, где не дадут передохнуть ни минуты.
  • Возможность работать удалённо из любой точки планеты. Освоив профессию, можно уехать в теплые страны, тихий городок или на природу, и делать всё то же самое.
  • Чаще всего, заработную плату программисты получают в иностранной валюте, так как работают на европейце, американцев, китайцев и т.д.
  • Работа будет всегда – ввиду востребованности профессии программиста, опытные люди всегда найдут себе занятие. И чем уровень и навыки выше, тем более интересными и высокооплачиваемыми будут работа или проекты и зарплата.

Минусы:

  • 7-11 часов в сутки 40-60 часов в неделю перед монитором на работе плюс парочку дома вечером сказываются на здоровье. Во-первых, садится зрение из-за постоянной работы с «текстом». Во-вторых, опорно-двигательная система – нагрузка на позвоночник, шею, малоподвижный образ жизни. В-третьих, нервы, особенно если с компанией или командой повезло не очень.
  • Зарплата в первые месяцы и даже год вряд ли будет больше, чем на предыдущем месте работы. В лучшем случае. А фрилансеры могут пару месяцев вообще за хлеб работать: опыта набраться, рейтинг заработать.
  • Постоянное обучение. Посвятив несколько месяцев книгам, форумам и практическим занятиям, будьте уверены, обучение только началось. И даже получение сертификата за прохождение курсов или диплома в ВУЗе – то же самое. Если вам не 15-20 лет, приготовьтесь к тому, что будете перенимать опыт и просить помощи у молодых ребят, которые могут и в сыновья годиться. А времени обучение и изучение технологий и «примочек», которые понадобятся для очередного проекта или решения задачи, занимают очень много. И знание английского языка будет востребованным.
  • На взлом банковских систем за 30 секунд и написание программ за полчаса надеяться не стоит. А на их отладку и доработку может уйти столько же времени, как на написание кода.

Программирование – не столь весёлая и лёгкая профессия, как рисуют фильмы. Постоянный набор кода – текста программы, соответствующего правилам языка программирования (ЯП), — обычно, дело скучное.  

back to menu ↑

Шаг 1. Думаем как программист

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

Программист обязан научиться думать как программист – научиться «алгоритмизации» — процесс создания алгоритма для решения задачи.

Сюда входит:

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

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

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

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

Алгоритм – это также правила обработки цифровой информации. И вся она заключается в математических и логических операциях.

Математические: сложение, вычитание, умножение, сравнение и т.д. Логические: логическое ИЛИ, И, НЕ и другие.

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

Рис. 2 – Пример алгоритма решения задачи

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

back to menu ↑

Шаг 2. Выбор направления и языка программирования

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

  • Веб-разработка – создание сайтов и веб-приложений – актуальными являются языки PHP, JavaScript, SQL, Python. По умолчанию к списку обязательно прибавляются знание CSS и HTML.
  • Пользовательские приложения – все C-подобные ЯП: C, C++, C#. Многие компании создают собственные модификации C для личных нужд, например, Nvidia.
  • Мобильные приложения – Java для Android и Swift для платформы iOS. В 2017 был презентован новый язык программирования – Kotlin, который стал вторым официальным для разработчиков под Android после Java.
  • Микроконтроллеры – низкоуровневое машинное программирование – для желающих подчинять машины человеку стоит заняться изучением низкоуровневого языка Assembler. Хотя большинство современных микроконтрроллеров и «дружат» с C, знание Ассемблера при работе с «железом» (робототехника, умные дома) обязательно.

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

Рис. 3 – Перечень наиболее популярных языков программирования в мире в 2018 году

Сначала выбираете платформу – операционную систему, под которую собираетесь писать. В последние годы новички чаще всего выбирают Android, реже – Windows, а потом все остальные.

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

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

Список популярных платформ на начало 2019 года. Всё больше компаний отдают предпочтение UNIX-подобным операционным системам, «отворачиваясь» от Windows (в первую очередь – последней её версии).

Программисты под Windows вместе с серверными версиями ОС занимают чуть более трети рынка. Среди мобильных платформ лидерство принадлежит Android.

Рис. 4 – Доля рынка разработчиков в операционных системах

А вот такие специалисты на рынке труда в 2018 году были в дефиците, естественно, опытные и со стажем работы.

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

Рис. 5 – Самые востребованные направления в области в 2018 году

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

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

Применяется:

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

Для Python существует огромная масса пакетов, библиотек и фреймворков, заточенных под определённые проекты: математические функции, анализ данных.

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

Go – имеет открытый код и создан для написания программного кода, оптимизированного под выполнение многоядерными процессорами.

C++ и C# — универсальные, но сложные в освоении новичками.

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

Какой бы язык и направление не выбрали, всегда начинайте из языка программирования высокого уровня – JavaScript, Python. Это скриптовые языки, где управление памятью осуществляется автоматически, а работа с указателями для новичка находится в недрах. После понимания каждой строчки кода, освоения работы с памятью и адресацией можно переходить на ЯП среднего уровня.back to menu ↑

Шаг 3. Первая программа

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

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

Код, написанный с их применением, интерпретатор правильно поймёт и выполнит.

Рис. 6 – Написание исходного кода

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

 В синтаксис входят:

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

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

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

back to menu ↑

Шаг 4. Выбор инструментов

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

Обычно это IDE – оболочка – среда разработчика, включающая в состав:

  • редактор кода – продвинутый текстовый редактор;
  • отладчик – позволяет искать и исправлять ошибки;
  • интерпретатор – выполняет код в реальном времени после вызова соответствующей команды;
  • компилятор – инструмент, который соберёт программу в исполняемый файл для выполнения без дополнительных средств.

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

В Python, например, программный код исполняется интерпретатором прямо в консоли, куда вводится. Компилятор для запуска приложения не требуется, но конечный пользователь должен запустить соответствующею среду. https://www.python.org/downloads/

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

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

Рис. 7 – IDE редактор

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

back to menu ↑

Шаг 5. Первый код и повышение квалификации

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

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

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

  • переход к иным книгам;
  • изучение официального руководства по языку программирования на сайте его поддержки (Python изучать рекомендуется именно из него);
  • прохождение онлайн-курсов;
  • использование открытых источников для повышения квалификации (бесплатные курсы, уроки, примеры);
  • решение простых реальных задач – ищем задания (заказы, работу) для новичков на тематических форумах, их ветках или в соответствующих разделах бирж фриланса и пытаемся выполнить их. Первые задачи можно решать для себя, даже не беря заказ в работу и не связываясь с заказчиком;
  • прохождение дальнейшего обучения на таких сервисах, как CodAcademy https://www.codecademy.com/tv https://reddit-marketing.pro/ и десятки им подобных;
  • поиск платных курсов или наставника;
  • изучение чужого кода, находящегося в открытом доступе его анализ и переписывание.

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

back to menu ↑

Шаг 6. Первые разочарования

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

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

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

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

Завтра можно вспомнить об этом, а через неделю или месяц – нет.

Рис. 8 – Сложности профессии

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

Шаг 7. Постоянное совершенствование

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

Без движения вперед покатитесь назад, а конкуренты преуспеют в первом.

Кроме того, улучшайте свои знания и понимания в области логики и математики.

Они быстро окупятся и принесут свои труды после решения сложной задачи в очередных проектах.

Рис. 9 – Перманентное совершенствование

back to menu ↑

Шаг 8. Онлайн-курсы

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

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

Увы, большинство из них на английском языке:

  • The AI Games проект, где необходимо создавать ботов, совершенствуя их ИИ с каждым уроком и соревнуясь при этом с другими начинающими разработчиками.
  • Codecademy ресурс для начинающих разработчиков, где собраны курсы по многим языкам программирования и инструментам для создания программного обеспечения. Занятия выполнены в виде задачек. Для их решения необходимо набрать код в интегрированном окне интерпретатора, а сервис проверит синтаксис и истинность результата его выполнения. В случае проблем отладчик даст рекомендации по их устранению. Есть подсказки и форум для поиска ответов.
  • Codecombat– локализованный сервис, что является его преимуществом для пользователей, не знающих или плохо владеющих английским языком. Проект рассчитан на изучения языков программирования в игровой форме: для прохождения левелов нужно писать миниатюрные программы, касающиеся как однопользовательского, так и сетевого режима игры.
  • Codeschool учебный процесс основан на просмотре видеороликов и выполнения заданий, материал для которых дан в видео. Доступно более 60 курсов, относящихся не только к программированию.
  • CodinGame – платформа для обучения кодингу, где выполнение кода визуализируется. Уровень сложности головоломок растёт с каждым уроком. Сервис поддерживает синтаксис 25 языков.
  • Codewars – образовательная площадка для программистов, где задания выполняются в IDE.
  • HTML Academy курсы для будущих верстальщиков и веб-дизайнеров. Рассчитаны на практиков, которые не только книги читают, но и закрепляют теорию на деле. Две десятка курсов доступны всем после прохождения регистрации. Этого хватает, чтобы понять, на своём ли вы месте и подходят ли занятия.

Рис. 10 – Codecademy

back to menu ↑

Советы и проблемы

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

  • Откладывайте деньги. От момента открытия руководства или книги до дня, когда получите первое предложение или вас выберут исполнителем на бирже фриланса, может пройти 2-3 месяца. На этот период необходимо обеспечить свою семью финансово. Лучше с небольшим запасом. Иначе придётся бросать книги и идти работать.
  • Согласуйте и обсудите решение с семьей, взвесьте все плюсы и минусы: изучение ЯП после работы, увольнения с текущего места работы, дополнительные расходы на самообразование. Весь процесс должен быть распланирован как можно подробнее, учтены все возможные последствия (мыслим как программист) и подготовлены альтернативные варианты развития событий (вдруг после месяца труда так и не получилось ничего понять).
  • Регулярные занятия. Чтобы добиться успеха, программированию необходимо уделять по пару часов в день без длительных перерывов. В процессе освоения ЯП перерывы нужно делать каждые 15-30 минут и несколько минут отдыхать.
  • Долго не мотайтесь от одного языка программирования до другого. Как показывает статистика, немногие разработчики кодят на том языке, который учили первым. Вскоре после обзаведения достаточным для дальнейшего прыжка в развитии опыта вы смените язык программирования на среднеуровневый (C). В процессе проникновения в код программ многое меняется, как и ситуация на рынке.
  • Общение и обмен опытом с единомышленниками в различных коммьюнити, чатах и на форумах.
  • Смена рода деятельности. Планируйте день таким образом, чтобы в нём находилось место всему, чем занимались до изучения программирования. Особенно спорту и связанными с движением видам деятельности.
  • Учите английский язык хотя бы на уровне понимания значения слов операторов. Его знание на высоком уровне будет плюсом при трудоустройстве, понадобится для чтения книг и интернет-ресурсов на английском.
  • Обзаведитесь наставником, который даст совет, подучит, подскажет, поделится опытом, подкорректирует «путь» и т.д. Таких людей можно найти через интернет и платить им за консультации (это не всегда), среди знакомых и их знакомых. Лучше всего обратиться к другу-программисту, если такой есть.
  • Неудачи и сила воли. Будут в процессе самообучения ситуации, когда после многих часов или даже нескольких дней решение какой-либо задачи так и не приблизится. Появится желание отдохнуть, забросить учебники вместе с программированием, включить игру или фильм и заняться чем-то иным, полегче. Отдых нужен, но не больше. После него с новыми силами возвращаемся к поиску решений. Порой они находятся спонтанно.
  • Пишите собственные программы, для себя. Пускай они будут простыми, но это опыт, плюс в портфолио.