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