Уже не первый раз хочу запилить пост для желающих приобщиться к миру программирования и вот только сейчас у меня дошли руки, желание и осеннее настроение, чтобы его оформить.
Без долгих предисловий, обозначим проблему - У человека, в силу любых причин и жизненных ситуаций, появилась навязчивая мысль "Это всё не моё, мне всё надоело, надо сменить сферу деятельности. О, пойду в программисты".
Как люди себе это представляют - "Сейчас я пробегусь (*)> по Пикабу (и другим ресурсам), соберу с десяток отзывов, пойду на курсы "Как входить в отдел ITшников с двух ног", потом мне сразу предложат работу и я стану успешным, с повёрнутой жизнью (в нужное русло, конечно)".
Почему это не работает - Неправильная постановка задачи и, соответственно, неправильные шаги по ее решению.
Постараюсь объяснить своё видение программирования.
Программирование для отдельно взятого тебя - это решение бизнес-задач твоего заказчика с помощью построения информационной системы или написания ПО, автоматизации процессов или реорганизации их внутри компании, и внедрения их в бизнес для того, чтобы бизнес в дальнейшем получил прибыль или перестал терять деньги.
Чтоб было яснее, возьмем примеры и аналогии (без них никуда, сори).
Чтобы нарисовать двумерный домик с трубой, окошком, крылечком и яблоней с яблоками справа от домика много навыков не надо. НО есть нюансы:
- Надо понимать, что сейчас для бизнеса нужен именно этот рисунок и именно в таком исполнении, он будет полезен/ решит определенную проблему. Нужно обосновать эту позицию перед многими людьми (навыки анализа информации и взаимодействия с людьми).
- К рисунку должны быть составлены и выполнены требования (масштаб, какие объекты должны быть на нем, требования к каждому элементу рисунка - толщине линий, положение объектов относительно друг друга, цветам и тд).
- Рисунок должен быть выполнен с использованием определенной технологии, исходя из доступных бизнесу ресурсов.
- Потом уже на последнем этапе ты шлёпнешь свой кривой-косой рисунок домика (который перерисуешь 100500 раз, пока не получится настолько нормально, чтоб всех устроило).
Курсы учат "как рисовать домик".
Курсы не говорят зачем он нужен, курсы не расширяют кругозор в той сфере бизнеса, задачи которого человек будет потом выполнять. Они просто научат рисовать домик. Вы научитесь ставить карандаш на бумагу или "как правильно открыть фотошоп и выбрать кисточку для рисования домика". Окей, домик рисовать надо уметь, ведь, в конце концов, его нарисовать надо будет. Без умения рисовать домик (выполнять запросы к серверу, взаимодействовать с api, да даже просто писать классы, методы, объявлять переменные и функции, или использовать любую другую языковую конструкцию) вы вообще никому не нужны будете, т.к. это совсем БАЗА. Именно эту базу вам предложат курсы.
Чего они не предложат:
Как понять, что для "рисования домика для заказчика" нужен javascript, а не python или C#.
Не дадут знаний в предметной области бизнеса, где вы будете работать.
Не дадут гибкость мышления для поиска ошибок в вашем решении и его дальнейшем улучшении, чтобы решить поставленную задачу - "здесь нужен не домик, а трактор, не яблоня, а чистое поле, или вообще тут не рисунок нужен, а таблица с парой диаграмм и надпись на китайском".
Поэтому
Неправильно ставить себе задачу - "я хочу освоить python/ js/ java/ c#/ c++ и устроиться на работу".
Надо спросить - в какой сфере я хочу работать и какие языки используются для решения задач в ней. Правильно составленный вопрос, как мы помним, уже содержит в себе ответ.
"Я хочу участвовать в разработке фронтенда или серверной части интернет-магазина". Окей, изучаем какие инструменты используются для разработки сайтов, как работают сайты, как работает передача данных по сети от пользователя к серверу, как работает движок браузера, который твой сайт будет рисовать, как работает сервер, какие бывают базы данных и как с ними работать, и тд. Это малая часть того, что придётся узнать.
"Я хочу разрабатывать встроенное ПО для холодильного оборудования".
"Я хочу разрабатывать систему визуализации физических процессов".
"Я хочу разрабатывать игры для платформы андроид или ios".
И т.д. Ставим вопрос, содержащий ваше желание и область применения, изучаем требования к специалистам в этой области, идём подтягивать свои умения рисовать домики и определять места, где их не хватает.
Почему "вайтишников" много, а программистов мало?
Попробуйте ежедневно в течение года по +/- 5 часов (в основном) ежедневно анализировать самого себя и переписывать одно и то же на тему - почему домик перестал рисоваться, почему "ручка не пишет", почему "карандашом ведешь, а след не остаётся", почему нарисованный домик на ваших глазах начал разваливаться, почему при попадании на рисунок воздуха из кондиционера домик превращается в кактус, при попадании солнечного света превращается в арбуз, а будучи неосвещенным начинает мягко пульсировать пурпурным цветом, поедая бумагу вокруг себя и стол заодно. При этом тебе надо решить - нужно ли больше домиков в других местах и сколько именно, нужны ли около каждого домика яблони или стоит нарисовать заборы. При этом, например, вокруг тебя бегает начальник с криком "10 домиков на той улице нужны были вчера", дизайнер плачет, что на рисунке от прошлой недели расстояние между домиком и яблоней больше необходимого на 1.5 метра и яблоня, после обновлений, оказалась слева, а не справа от домика, а тимлид спрашивает чей домик не соответствует размеру и воткнулся посреди улицы, из-за чего другие домики кто попадал, а кто покосился. Если у тебя в подчинении есть и другие "художники", то еще и периодически контролировать соответствие их домиков необходимому качеству и количеству. До должностей, когда надо будет определять "что именно рисовать, чтобы бизнесу стало лучше/ принесло много денег", "что будет рисовать этот отдел", "принесло ли рисование желаемый результат" из рисовальщиков домиков переходят далеко не все. Так называемое "выгорание" наступает рано у большого числа людей. Помимо прочего - рисовать домики одновременно с вами учится оч много людей и надо быть конкурентным по отношению к ним. Знать не только как рисовать домики, а еще и, например, как рисовать здания в целом, животных, владеть знаниями анатомии человека и основами академического рисунка. Выделяться из общего числа соискателей, как и везде. И не отвлекаться на мысли о том, что ты вообще ничего не знаешь, домики рисуешь как неуклюжий первоклассник, а все вокруг кажутся умнее тебя, тк не о рисовании домиков разговаривают, а о какой-нибудь воронке продаж для сайта о каркасных дачных домах и необходимости переезда сервера в облако.
Программирование - больше про анализ информации, нахождение закономерностей между частями и построение/ настройка взаимодействия между ними по определенным алгоритмам. Как вы в детстве узнавали, что чтобы пойти в магазин надо:
Понять какие продукты (и не только съедобные вещи) нужны - Подготовить деньги в необходимом количестве - Добраться до магазина - Набрать предметов по списку (плюс непредвиденные, которые захотелось, т.е. в предыдущих пунктах надо было предусмотреть сумку побольше и денег побольше) - Провзаимодействовать с системой оплаты (поговорить с кассиром на нужном языке, оплатить определенным способом свои товары - налично или картой определенной платёжной системы) - Упаковать покупки определенным образом, чтобы их транспортировать до дома или места назначения - Переместить их домой, не потеряв и не сломав - Дома их распаковать, разложить в холодильнике или на полках, и соблюсти необходимые условия хранения для каждого отдельного продукта, чтобы он не отсырел и не просыпался, не подвергался огню.
Это тоже алгоритм. Их вы каждый день реализуете, не особо задумываясь, при чем в самых разных областях. Вот находить их и составлять, описывать - тоже часть работы программиста.
Сказать определенному браузеру(chrome, ff, edge, safari, ie), что вот в этом месте надо определенным образом нарисовать определенного размера и определенного стиля форму, используя определенным образом полученные с определенного сервера правильные данные с ее содержанием, а полученные от пользователя данные надо провалидировать, определенным образом отправить на тот же самый сервер и там определенным образом сохранить, чтобы потом их использовать в системе авторизации - тоже нужны навыки. Нужно описать каждый шаг, каждый нюанс, предусмотреть большое количество всяких "если" на каждый чих. Дать каждому исполнителю на каждом этапе всю информацию что и в какой последовательности ему надо сделать или где посмотреть как сделать, и при этом не дать лишней информации, не добавлять лишнего функционала, использовать эффективные инструменты для каждой задачи, видеть где есть шаблоны для упрощения работы, и крч еще много нюансов.
Поэтому у людей и возникают трудности с погружением в область IT. При этом мы еще не разбирались в том, что в IT есть не только программисты, но и менеджеры, системные администраторы, тестировщики всех видов, дизайнеры, сео-специалисты, тех поддержка, etс и не обязательно идти именно в программисты, чтобы "попасть в IT", но об это уже совсем другая история. =)
Всем желаю здоровья и не только делать то, что любишь, но и любить то, что делаешь, в какой бы области эта работа не была.