Зачастую статьи личного опыта имеют три категории от двух типов людей:
- история успеха / провала от новичков;
- крутые статьи про сложные штуки от крутых ребят;
- истории про разочарование от тех же крутых ребят (но это не точно
*
).
Гораздо реже можно встретить истории разработчиков с небольшим опытом, уже преодолевших порог слабенького джуна, но ещё не достигнувших каких-либо вершин. По моим ощущениям, именно на такой стадии можно начать стагнировать или углубляться в одну тему или, наоборот, начать расширять кругозор более осознанно, чем в начале пути.
Если визуализировать свой опыт погружения в IT, то получится примерно следующее:
Правда, по четвёртому сценарию мой опыт пока что в духе "рядом стоял / мимо крокодил".
Я решил описать сугубо личный опыт и взгляд на жизнь на его основании и поделиться с окружающими, возможно, оно изменит вашу жизнь… с понедельника.
Дисклеймер:
Текст получился не свойственный для меня — эмоциональный, в стиле пацанского цитатника, в процессе его написания я как бы мотивировал себя двухлетней давности, который жизни не нюхал, щенок :D Но раз уж полез в создание контента, то надо экспериментировать с форматами. Буду рад обратной связи в комментариях, особенно, если вам не понравилось.
1. Технологии — ничто, фундамент — всё
Рынок меняется очень быстро, агрессивно, и технология, которую ты учишь сегодня, уже завтра может быть выброшена, втоптана и обгажена всеми видными людьми, которые её восхваляли. Какой бы реактивный ангулярный светл завтра не появился, он будет манипулировать DOM-деревом, управлять состоянием, а ты по-прежнему будешь формошлёпом.
Фундаментальные знания о программировании сложно найти, тяжело понять и невозможно забыть, они позволяют трезво видеть картину мира и строить простые решения для простых задач. Понимание алгоритмов, принципов работы HTTP, Linux и прочие вещи, которых избегают новички — это именно то, с чего нужно начинать. И да, я никогда не достигну уровня университетских знаний (хороших универов, конечно же), но жизнь не раз показывала, что побеждает код, написанный со знанием дела, а не с последней киллерфичей библиотек.
2. Спрашивай у интервьюверов "что я должен изучить?"
Мне повезло поработать в нескольких местах и везде выполнялась абсолютно разная работа — где-то нужно было совмещать PHP с jQuery на легаси и одновременно актуализировать проект под новый фреймворк, в другом месте ежедневно требовалось писать голый SQL. Затем несколько месяцев только писал документацию. Теперь же и код пишу, и отстаиваю свои архитектурные решения перед бизнесом. Этот опыт дал понимание, что на рынке зачастую требуется быть частью этого самого рынка и жить в его ритме — двигаться быстро, меняться под новые условия, переключаться между задачами. И в каждой компании свой стек, который, вероятно, ты не будешь знать. И в каждом собеседовании тебе соврут про реальные задачи, даже если не преднамеренно. Пусть лучше скажут стек технологий и начинай изучать всё что с ними связано.
3. Карьерного роста не бывает без личностного
В прошлом мне казалось, что достаточно хорошо делать свою работу, вырабатывать стаж и тогда будет заслуженный рост по карьерной лестнице со всеми вытекающими плюшками. Работа в IT же показала, что здесь есть лишь два направления роста — становиться высококлассным специалистом в одной области (например, дизайн, UI / UX, все фронтовые фреймворки + вся фундаментальщина по своей теме и по программированию), или становиться фулл-стек разработчиком для решения широкого класса проблем и сведения разрозненных задач в единый проект. И у людей обоих направлений впереди непаханное поле новых знаний и опыта, которые нужно получать ежедневно, пробовать руками, внедрять и отвергать. На это не хватит и всей жизни. Тех же, кто закрепился в зоне комфорта ждёт в лучшем случае удачное стечение обстоятельств.
4. Чтобы сложное стало простым надо сесть и делать
Не знаю как это получается, но каждый раз когда я узнаю о какой-то немыслимой задаче к которой неизвестно как подступиться, всё оказывается очень просто в итоге. Или не так просто, но гораздо понятнее только после работы над ней. И наоборот, казалось бы, простая задача отнимает массу времени и оставляет ещё больше вопросов. Однако и по ней уже постафктум понимаешь что узнал много нового и стал лучше понимать некоторые моменты. Абсолютно чудесная тема конечных автоматов содержит в основе достаточно простую идею, реализуемую на простейших машинах и обладает при этом огромным потенциалом и возможностью создавать крайне сложные вещи для того, чтобы пользователю было просто. И крайне редко случается такое, что узнал про новую технологию, прочитал, понял, пошёл и сделал. Всё обучение давалось мне через попытки, перечитывания, углубление в тему. Если твой тимлид из тех людей кто схватывает на лету и с первого раза создаёт качественный код, решающий задачи бизнеса, то лучше там не работать, т.к. это киборг.
5. Инвестируй в жизнь, здоровье и инструменты
Нужно ходить к врачам, заниматься спортом, встречаться с друзьями, посещать митапы и жить так, чтобы было не стыдно. Нет смысла копить на новую машину, если она будет возить твоё больное одинокое жирное некоммуникабельное тело. Два-три года — это отличный срок чтобы испытать себя, понять что реально интересно и чётко обозначить границы своих возможностей, составить план на будущее и реализовывать его. И это хороший срок, чтобы попробовать что-то новое, если с IT не ладится. Также, стоит помнить, что удобное рабочее место, хороший монитор, мощное железо и прочее окружение помогают зарабатывать тебе на жизнь, сохранять здоровье, делать больше и лучше или просто быстрее и комфортнее.
Нам на работе купили классные компьютерные кресла и спустя полгода использования я решил рассказать о нём в формате видео (раз уж полез в создание контента, то надо экспериментировать с форматами), если интересно, заглядывайте: https://www.youtube.com/watch?v=0g9cuMpltyM
Ну и самое главное — не слушай каких-то чуваков из интернета, как нужно жить.
Котик
/????? \
xState_level80
Четко и по делу. Тоже около 2х лет в вебе.
Хотел только добавить, что хорошо бы ещё иметь здоровые амбиции как рости и делать/изучать больше чем просят на работе. Видал много ребят кто занимаются одним и тем же по много лет без роста по карьере и даже зп. Сначала удивлялся, но со временем все стало яснее.
Desiderio
Часто здесь на Хабре вижу в постах/комментариях точку зрения, что программисту нужно постоянно разносторонне развиваться в своей сфере. Поэтому хочу поподробнее узнать Ваше мнение о тех «многих ребятах», которых Вы видели много лет без роста.
Дело в том, что я сейчас нахожусь в раздумиях — стоит ли мне начать изучать программирование. Пока что смотрю на всё это издалека, так как не имею ни программисткого/математического образования, ни какого-либо представления о программировании (кроме нескольких примитивных попыток в HiAsm и в html — но ведь ни то, ни это, по сути программированием не является). У меня может назреть идея примерно на полгода-год уйти в абсолютно свободный отпуск и заниматься только изучением программирования. Такая идея появилась после того, как где-то прочитал статью о том как какой-то русский чувак полгода «посидел» на javarush.ru по 6 часов в день, и теперь зарабатывает по несколько сотен тысяч рублей в месяц. Хотелось бы попробовать точно так же. Проблемой для себя вижу то, что я по своему характеру вряд ли смогу быть тем идеальным кандидатом в программисты, который постоянно изучает что-то новое и совершенствуется. Мне было бы психологически комфортнее разово получить некий навык (хочу пройти весь курс на этом JavaRush.ru), и потом постоянно зарабатывать применением только этого навыка без какого-то особо активного роста и постоянного нового обучения.
Вот те ребята из Вашего примера — они точно так же живут и работают, как я планирую? Или они всё таки больше развиваются?
Heliki
Вам точно не хватит «разово полученного навыка», потому что, ну, язык-то вы выучите один раз, а вот экосистема, новые паттерны, подходы — это все постоянно изменяется. Соответственно, вам придется все время примерять эти новые практики на то, что уже известно, да и вообще быть в курсе этого нового, чтобы не плавать, когда это встретится в коде, написанном коллегами.
Desiderio
А эти экосистемы, паттерны, подходы — они будут изучаться просто в процессе работы с ними?
Или это всё потребуется изучать отдельно от работы? (ну, типа, как если кто-то работает и дополнительно проходит курсы повышения квалификации).
Heliki
Все зависит от компании, в которую вы устраиваетесь. На джуна, скорее всего, вас возьмут с базовыми знаниями, и вы всему научитесь в процессе. Но тут есть нюанс: если брать только рабочее время, то вы узнаете ровно про то, что уже используется в компании. Когда вы будете искать новую работу уровнем повыше, у вас уже кроме базовых знаний языка будут спрашивать что-то о работе конкретных технологий. Если вы ничего сверх работы не читали/учили, то вероятность того, что вас возьмут на совершенно новый стек, довольно мала. То есть, если вы начинали, например, с бэкенда на JEE+Hibernate, то перейти на какой-нибудь vert.x+noSQL будет сложнее.
Я сейчас говорю конкретно про java, но подозреваю, что для других языков (особенно в вебе и бэкенде) все более-менее так же.
Alex023
При определении куда двигаться, имейте ввиду картинку в топе этой статьи. И ранее опубликованную на Habr, тоже очень показательную статью. Это конечно не повод замереть и стоять камнем. Но просто это нужно знать и учитывать.
MaM
Достаточно прочитать знаменитый список «что нужно знать с++ программисту» или список классики CS и что бы ни случилось в этом мире, пока существуют классические языки программирования, ты будешь вкурсе как разобраться хоть с чем.
Так что разового получения навыка хватает, вопрос в том, что надо найти побырому лет 7 из загашника.
Неверите мне, берете и вспоминаете последний изученный вами паттерн/идеому/фреймверк, немного гуглите и оказывается, что все изобретенно давным давно.
LborV
Даже язык не выучит, по своему опыту работы преподователем заметил такое — чем яростнее и фанатичней человека интересует ИТ, тем больше успехов он делает. А те кто приходили с мыслью получить навык и тупо работать — не заканчивали курс даже
Reverlight
Как мне кажется в программировании большинство людей в обучении идут от общего к частному. Загуглилы Вы топ языков программирования для новичков к примеру, выбрали для себя python. Пошли в интернет, как выучить пайтон, нашли видео уроки по основам. Через неделю две (как у меня это было) перестанете понимать что вы учите и зачем, и интерес пропадает.
Представьте, если ваша цель в другом, например вы хотите сделать простого бота для получения цены криптовалюты, начинаете смотреть видосы читать документацию. Возникает вопрос, ага а как зарегать бота, а как получить текст сообщения от пользователя, о как неудобно это делать через getupdates может может есть способ удобнее? Ага оказывается есть вебхук, хм нужен сервер для получения данных от телеграмма, ага это значит ставим фреймвор для пайтона чтобы запустить сервер/сайт потом используем тунель чтобы телеграмм смог его увидеть и отправить. Ага а как обработать, а как спрасить данные о цене.
Может не самый хороший пример получился, но я думаю идею вы поняли. У вас есть задача и вы пытаетесь загуглить как её решить. И так идёте от одной задачи к другой пока не получится проект (например тот же бот, о котором я писал выше). Это конечно мнение любителя, но я так вижу обучение программированию.
Desiderio
melodyn Автор
Не пойму, это нативная интеграция рекламы в комментарий? Я отвечу схожим образом: я позанимался два месяца на hexlet.io и теперь зарабатывают несколько десятков тысяч рублей в месяц. В разработке есть разные люди, можно и будучи формошлёпом получать больше сотки, множество факторов решает. Но мотивация идти в творческую профессию ради денег — это ужасно.
Desiderio
Прошу прощения, если мой комментарий похож на рекламу. Возможно, я сам стал жертвой маркетинга этого сервиса, но я на самом деле планирую начать знакомство с миром разработки именно с него. Казалось, что он уже давно не нуждается в рекламе.
В целом — да, согласен. Так, в принципе, про любую профессию можно сказать: одни только деньги могут и не удержать там, если всё остальное естество человека будет против. Надеюсь, что финансовая мотивация будет соседствовать с интересом к этому занятию.И спасибо за Ваши примеры про десятки тысяч после 2-х месяцев, и про больше сотки для формошлёпа. Такие варианты выглядят привлекательными из моей глубокой провинции.
SpiderEkb
Не надо ориентироваться на чьи-то частные случаи. Реальность может оказаться куда более унылой.
Если вы твердо решили идти в программирование, то сразу настройтесь на то, что
— поначалу вы будете никем. с соотвествующей материальной составляющей
— чтобы стать кем-то нужно всегда копать чуть глубже чем требует задача и делать чуть больше чем от вас ждут. и делать это бы будете бесплатно в свое личное время
если вы к этому готовы, «значит вам туда дорога» (с) — вы готовы заниматься программированием потому что вам это действительно интересно. А, значит, вы будете свой интерес постоянно удовлетворять новыми знаниями и навыками и таким образом расти.
aPiks
Я сидел в банке 2.5 года и там никто никуда не растёт. Все сидят над одним проектом по 7-8 лет, допиливая новые фичи к нему. Естественно, набор технологий тоже не меняется. Там вполне себе можно после курсов java программиста сидеть на попе ровно и увеличивать процентов на 10-15 каждый год себе зарплату пока не упрешься в какой-то потолок. А потом также плавно перейти в менеджеры и расти дальше по карьере менеджера до пенсии. За пределами работы учить ничего не надо, а если что-то надо будет, то всему научат на курсах внутри компании и пошлют на оплаченные банком курсы.
И скажу даже больше, можно спокойно освоить достаточный уровень за 3-5 месяцев по 5 часов в неделю…
Desiderio
Спасибо за конкретные примеры. Значит мои предположения об этой профессии похожи на действительность.
SpiderEkb
Сильно зависит от. Как всегда, как везде.
Хотел бы я посмотреть на человека, пытающегося что-то написать под мейнфрейм «после курсов java».
Все интересное в банке происходит в бекенде. А на фронтах… Там по большому счету что банк что не банк — нужно сделать некий среднеудобный для всех фейс, дергающий предложенный беком набор вебсервисов. Естественно, особого роста в таких условиях трудно ожидать.
Krivitskiy_Anton
С таким подходом, лучше даже не пробовать, только время и деньги потратишь. Работая программистом, особенно без опыта, постоянно будешь сталкиваться с чем-то новым и непонятным. Соответственно, постоянно надо будет учиться. А тупо пройдя JavaRush скорее всего даже джуном не устроишься, без доп. подготовки.
Desiderio
Ну пока что мною движет только именно интерес познакомиться с миром разработки, поэтому если ничего не понравится, то потратится только время, так как в сети есть множество мест бесплатного обучения.
А как Вы думаете, если «тупо пройти JavaRush», то можно будет хотя бы если и не устроиться на фуллтайм джуном, то хотя бы фрилансить на каких-то простых заданиях?
SpiderEkb
Мир разработки очень многогранен. Одно дело вебразработка. Другое — разработка мобильных приложений. Третье — промавтоматизация (как встроенные системы, так и верхний уровень). Отдельная тема — мейнфреймы (большие коммерческие сервера на разных экзотических платформах типа той же IBM i (или z, хотя она ближе к общераспостраненным системам)
Или геймдев. Или еще что-то…
И в каждой сфере своя специфика. Где-то надо знать фреймворки (и уметь ими правильно пользоваться), а где-то надо вникать в тонкости платформенного API и архитектуры. Где-то придется всякими хитростями выживать максимум производительности из железяки и привыкать мыслить милли- и микросекундами и над каждым циклом думать «а нельзя ли его подсократить, а уложусь ли в таймаут, а что можно вынести за пределы отведенного таймаутом времени?»
А где-то голова болеть будет о том, а насколько вот эта операция нагружает систему? А нет ли тут лишнего переоткрытия файлов? А не закешировать ли прочитанные данные на всякий случай?
Ну и так далее. И все это «мир разработки».
SpiderEkb
Не надо идти в программирование за деньгами.
glestwid
Чегой-то так? Программирование что — корова священная, которую не касаются меркантильными руками?
SpiderEkb
Программирование — творческое занятие, требующее определенных навыков и определенного склада ума. Идти туда только за деньгами это как начать писать картины в надежде что они будут продаваться на аукционах сравнимо с картинами великих мастеров и за сравнимые деньги.
Идти в программирование стоит когда вы готовы постоянно заниматься самообразованием и в некотором смысле изобретательством (а не просто искать в гугле готовые шаблоны для решения типовых задач) и когда у вас есть склонность к алгоритмическому мышлению.
badstarosta
Я не согласен, что программирование — творческое занятие. Можно сказать, что в программировании иногда встречаются задачи, требующие творческого подхода, но не более. В остальном не сильно принципиально отличается от работы условного фрезеровщика)
SpiderEkb
К сожалению, отдельные направления в программировании действительно сейчас сводятся к ремеслу лепления стандартных форм из стандартных компонентов.
Но во многих областях разработка все еще остается достаточно творческим занятием, требующим осмысленного подхода, а не механического применения стандартных паттернов.