Код
#Мнения

Сезоны вайтишника. Лето и осень

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

Кадр: фильм «Красный цветок Луны»

Лев Кудряшов

об эксперте

Ведущий инженер-разработчик в «Билайне». Стек — Java, Python. Специализация — бэкенд. Есть публикации на «Хабре». Практикует переход сервисов с Java на Kotlin. Ненавидит Microsoft.


Прошло два года работы на Java. Все домашки в EPAM, все лабораторки и курсачи в универе я писал на нём. Никогда не забуду, как от нас требовали сдавать программную визуализацию всяких фигур, а я сидел и колупал всё это на Swing, пытаясь отрисовать линии на полотне.

Никогда не забуду и то, что курсач по проектированию СУБД надо было делать строго в MS SQL, а ещё через один курс к уже спроектированной БД нам сказали и бэк примонстрячить — без использования сторонних библиотек.

Преподаватель ожидал, что мы возьмём шарпы, которые из коробки поддерживают работу с MS SQL, и накидаем нужное приложение. Многие одногруппники пошли именно по такому пути: они быстренько сделали и WinForms, и даже WPF для десктопного интерфейса.

Первая часть статьи — «Сезоны вайтишника. Зима и весна».

Однако меня уже было не спасти — получив ТЗ, я открыл IntelliJ IDEA, размял пальцы и начал фигачить самопальные DAO-классы, писать к ним интерфейсы для этого MS-говна. Пользовательский UI я крутил на любимом Swing — и здорово приподнял своё ЧСВ, когда у одногруппников с нативным стеком на выходе получилось неработающее кривое нечто. «Ха, что с лицом, виндузятники?» — ух, к тому моменту я уже потихоньку принимал так называемую религию: Linux vs Windows, Билл Гейтс vs RMS.

Кадр: фильм «Весна, лето, осень, зима… и снова весна»

Лето

После стажировки я не захотел оставаться в EPAM — атмосфера в компании мне показалась токсичной, а сама компания — переоценённой. Как и разработчики из EPAM, которые любой код по умолчанию готовы окрестить говнокодом. А вот два моих одногруппника остались там писать проекты на шарпах. Один из них — Алексей, самый мощный разраб из нашей группы. Думаю, он принимал решение, руководствуясь прагматическими соображениями: удобная экосистема и тёплое местечко сразу после университета. Я же выбрал свой путь — не самый умный и не самый прагматичный, зато такой, на котором мне было хорошо.

А хорошо стало, когда я устроился в веб-студию SimpleCode, где весело сидели пердели чуваки с нашего потока — писали нативные мобильные приложения под iOS и Android. И я почувствовал, что меня окружают соратники. В SimpleCode я взял проект, по которому в итоге защищал диплом, — мобильное приложение под Android на Java (Kotlin тогда ещё не был популярен).

Так я окончил казахстанский бакалавриат, а потом в том же SimpleCode получил возможность пописать OpenCV-штуки на Java — распознавал лица с помощью алгоритмов Хаара (это были вычисления в реальном времени, прямо в момент съёмки) и получил грёбаные 10 fps, чем неистово гордился. До сих пор помню, как навёл на лицо одного из однокурсников камеру, а прога выдала что-то типа «woman».

Там же я писал фулстек-приблуду для радио на PHP в Yii2 — но, кстати, закончить не успел. И вообще не жалею, что бросил эту какашку под названием PHP, и могу с чистой совестью клеймить его плохим ЯПом, потому что своими руками копался в нём.

Я был в ударе: большинство университетских задач по программированию я закрывал с помощью одного лишь Java. Если преподаватели где-то требовали написать решение на чём-то другом, я всеми возможными способами пытался их уболтать на Java — и мне это удавалось. Причём разрешение продавливал не только для себя, но и для других ребят.

Во всей этой джуно-мидловской истории за три «сезона» у меня был выбор:

  • Брать С#, который работает из коробки в популярной для работы и учёбы экосистеме (Windows). В этом случае я бы весело сдавал лабы, курсачи и имел больше свободного времени. Плюс не сталкивался бы с дополнительными преградами в виде необходимости писать свои классы и интерфейсы, изобретать велосипеды.
  • Плакать кровавыми слезами и проводить за программированием гораздо больше времени, потому что громоздкий, универсальный, обратно совместимый и мультиплатформенный Java мне чертовски нравился. В нём даже на своём джуновском уровне я что-то да знал и умел, мог собирать мобильные приложения, без проблем запускать коннекторы к разным СУБД, рисовать в MVC всякие веб-странички и пользоваться миллиардом сторонних библиотек. Именно Java стал моим личным бунтом против гораздо более продвинутых на старте обучения одногруппников, которых я раньше считал хорошими партнёрами для своих соревнований.

Да, тогда я предпочёл Java, хотя я сегодняшний советовал бы взять C# — он бы помог быстрее разобраться в общих технологиях, ORM и Web, написать больше полезного кода и заработать баблишко. Но нынешнему умнику дерзкий и необузданный я из прошлого ответил бы так:

«На самом деле, живя с комфортом и коробочными решениями на шарпах, ты бы даже не подумал, что тебе нужен DAO (Data Access Object). Ты бы не думал о тонкостях настройки веб-серверов — тех же Apache и Tomcat. Не вникал бы в устройство сетей, не смотрел в сторону MySQL, MariaDB, Oracle, Postgres, не смог бы поковырять OpenCV. Ты бы забыл, что такое Gradle, Maven, и так бы и не узнал, что с JVM можно играться как угодно. И уж точно не стал бы писать Android-приложения для дипломного проекта. Нет, выбрав простой путь с минимальным сопротивлением, ты бы просто отупел. К тому же какой в Linux прекрасный терминал! Вспомни первую встречу с ним».

Зарплата и бабки тогда вообще были какой-то странной темой — всё происходило в нищем в плане IT Казахстане. Чтобы вы понимали, стажёры в EPAM получали 30 тысяч тенге (5 тысяч рублей) в месяц, а джуны — от 40 до 60 тысяч тенге (10 тысяч рублей). Рассказы представителей EPAM и волшебные истории о том, как один мальчик работал-работал и ему организовали релокейт в Санкт-Петербург, дали зарплату в долларах на зарубежных проектах и своё казино с блэк-джеком и всем, что полагается, — что ж, они оказались всего лишь красивыми историями, и никому из моих знакомых это так и не удалось. Кстати, один одногруппник уже девять лет шлёпает там что-то на шарпах за смешные деньги. А ведь на старте он перформил втрое-вчетверо лучше меня.

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

Кстати, ситуация с моим одногруппником, который уже много лет зарывает свой талант в землю и сидит на шарпах в той же компании, в той же стране, — это проблема личных амбиций. Скорее всего, он боится, что снаружи его ждёт страшный и угрюмый мир. И он прав — мир IT меняется настолько быстро, что, выйдя на рынок сейчас, он остался бы с голой жопой — никому не нужным, с неактуальными и устаревшими знаниями. С ним произошло ровно то, из-за чего я не остался в EPAM — стагнация и потеря интереса к профессии.

Кадр: фильм «Олдбой» (2003)

Осень

В принципе, «войти в айти» можно за 1,5 года через какой-нибудь Python или JavaScript — причём сразу на middle-уровень. Сейчас во многих технологиях уже не надо изучать низкоуровневые концепции и пытаться понять, что скрыто под текущим уровнем абстракции — деньги можно заработать и без этого. Достаточно просто ровно стелить на собеседованиях и зазубрить пару-тройку фундаментальных идей.

В открытом доступе полно видео и статей с популярными вопросами из техинтервью и даже с ответами на них. Нет недостатка и в туториалах для самых-самых чайников по тем же Node.js или Django, из которых можно копировать готовые решения и вставлять в свою IDE — а главное, всё худо-бедно будет работать. То есть почти любой человек может просто зайти в IT буквально с ноги — если будет стараться, конечно. Это не какой-то там Rocket Science.

И тут возникает логичный вопрос — почему я описал сложный, заковыристый путь, полный фундаментальщины, с классическим университетским треком обучения, серьёзными языками программирования, сервлетами, DAO, необходимостью лезть под капот JVM?

Да потому, что у меня не было цели заработать денег — я не ощущал нулевой конкуренции и не думал, что в казахстанское IT войти очень легко. А ведь IT-рынок там и правда был слабоват, конкуренция между специалистами гораздо выше, а зарплаты — меньше, чем в России. Но моя IT-осень и правда началась осенью: я поступил в магистратуру одного российского вуза — чтобы законно избежать осеннего призыва в казахстанскую армию. И когда я со своим бэкграундом приехал в Россию учиться, я вдруг отчётливо понял: какие же тут слабые конкуренты при таком спросе на разработчиков.

На вторую неделю я уже работал как middle C# dev. Собес был очень лёгкий, а задачи — ультрапростые, почти скучные. Все мои одногруппники по магистратуре тоже работали, но по факту могли писать лишь элементарный код на шарпах. Их не интересовали другие решения, другие стеки, они не задавались вопросами о том, как писать код быстрее или как оптимизировать текущее решение.

Я спорил буквально с каждым разработчиком, тыкал их носом в исходники и документацию, вырос по зарплате три раза за полгода и вообще вёл себя довольно самоуверенно. Все задания магистратуры я делал на Python и Java — даже не трогая шарпы. Во-первых, это был мой протест, а во-вторых — на работе меня уже рвало от .Net и WPF.

Кадр: фильм «Тот, кто рядом»

А потом мой единомышленник и сосед по комнате в общежитии окончательно пересадил меня на Linux. Начал я с Ubuntu и потом очнулся с установленной и настроенной Gentoo.

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

Потом я получил заветный оффер в другом городе на более перспективную должность в более интересной компании — и просто уволился без всяких сожалений, а коллеги устроили мне отличные проводы :)

Кстати, всё, что со мной происходило до этого оффера, я считаю вкатыванием в IT, потому что только тогда я начал понимать рыночек. Это было важно: знать, насколько я конкурентоспособен. Плюс я наконец-то пощупал разные стеки и сделал почти на каждом из них нормальное рабочее решение, примерил разные специализации: бэкенд, мобильные приложения, фронтенд, десктоп, базы данных, системное администрирование.

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

Итоги осени

Работая шарпистом, я так и не смог полюбить C# — стал ненавидеть этот язык ещё сильнее вместе с Microsoft, дырявой Windows, корявым TypeScript и всеми продуктами MS, которые стали для меня синонимом коровьей лепёшки в тот самый момент, когда я начал более глубоко понимать, как всё устроено изнутри, и сравнивать Windows с Linux, C# с Java. Но это моя личная неприязнь. У вас всё может быть по-другому.

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

Что сейчас

Прошло девять лет с начала моего вкатывания. Несколько раз я полностью терял интерес к профессии: однажды я ощутил непостижимую сложность программирования, а в другой раз понял, что писать круды — банально и скучно. А ещё расстраивался и страдал от синдрома самозванца в самом начале зимы, когда на первом курсе меня окружали какие-то уникумы, умеющие играть на гитаре и программирующие, словно Линус Торвальдс (так мне казалось).

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

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

Бонусом я поборол свою ненависть к Microsoft и больше не плююсь даже при виде откровенно ущербных технологий: технологии разные нужны — и разные важны. Ну и, конечно же, нашлёпал пет-проектов :)

Насколько важно высшее образование?

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

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

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

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

Какой язык программирования выбрать?

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

Подобные языки научат вас мыслить в правильном направлении, обезопасят от лишних выстрелов рантайм-ошибок в колено — к тому же вы твёрдо изучите типы данных, а возможно, и поймёте, как работает аллокация объектов в памяти. Поэтому C++, C#, C, Java — это выбор тех, кто не хочет потом страдать от непонимания того, как вообще можно программировать на другом языке.

А вот языки с низким порогом вхождения — Python, JS, Go — больше подойдут или тем, кто хочет быстро вкатиться в IT и начать зарабатывать первые деньги, или тем, кто считает С-подобные языки слишком сложными. На самом деле, если бы я знал раньше, насколько прост Python, я бы начал с него.

Обязательно ли соревноваться и сравнивать себя со всеми?

Нет, нет, нет! Это очень вредное занятие. Но вот я чисто психологически хотел иметь какой-то компас и вектор. С чем-то или кем-то себя сравнивать, как-то утвердиться самому. Да и я чёртов боксёр в прошлом: люблю придумать себе оппонента и пытаться его победить. Спортсмены поймут.

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

Что делать, если нет страсти к разработке?

Это достаточно типичный случай — но интерес может никогда и не появиться. Хотя и не факт, что со временем вам надоест программировать. Чтобы вкатиться в IT, действительно нужны либо нереальные усилия над собой, либо большой интерес, либо талант и способность схватывать всё на лету. Мне повезло — я нашёл интерес и смог приложить усилия, несмотря на то, что врождённого таланта у меня не было.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Java-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована