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

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

Какое требуется образование

Сразу успокою, что для того, чтоб достигнуть хорошего уровня в программировании, достаточно и 11 классов школы. Да, есть задачи, требующие высшей математики, но в 90% случаев этого не требуется. Вы спокойно научитесь и без математики программировать пользовательские интерфейсы, да и стандартную серверную часть. Подтверждением этой возможности является то, что, например, компания EPAM набирала в вечернюю школу людей в том числе с гуманитарным образованием; правда, уже отошла от этой практики.

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

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

  • Эндрю Таненбаум, Компьютерные сети
  • Эндрю Таненбаум, Архитектура компьютера
  • Эндрю Таненбаум, Операционные системы
  • Кнут, Искусство программирования

Особенности отрасли

Второе, что нужно знать — если вы даже изучили все эти толстые учебники, для работы их недостаточно. Надо еще хорошо изучить конкретный язык программирования, на котором вы будете писать, а это огромный объем информации, причем эта информация очень быстро меняется. Например, Java 5, на которой писали в 2010 году уже не та, что Java 8, на которой пишут в 2018. Поменялось много всего, и даже опытный программист вынужден переучиваться.

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

В чем состоит работа

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

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

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

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

  • Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес, Паттерны проектирования

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

Тут сотрудник Google рассказывает о своей работе

Где и как научиться программированию с нуля

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

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

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

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

Какой язык учить

Например, если вы выберете Java, то придется освоить огромные объемы — базовый Java, непосредственно на котором мало кто работает.  Для реальной работы придется изучить какие-то конкретные библиотеки, либо фреймворк Spring (который тоже в свою очередь состоит из базовой части и десятков модулей), либо Java EE (а он тоже необъятен).

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

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

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

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

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

Как ранжируются программисты

Обычно это Junior — Middle — Senior — Team lead. Нужно понимать, что Junior — это не тот, кто ничего не знает, а тот, кто не имеет опыта (но знает базовый уровень языка — например, выучил самостоятельно).

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

 

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

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