Исповедь full stack разработчика

Тихо-тихо, начинается…

Ну привет. Зовут меня Олег, если читал мою статью о переезде, то уже знакомы. Если нет – милости прошу, там и познакомимся, а потом возвращайся.

Давай сразу к делу. Здесь мы обсудим термин «full-stack developer» и всё, что с ним связано. Сам я (как и большинство, думаю) начинал с одной технологии. Но пришел к тому, что одной ограничиться нереально. Ну, собственно, и задался целью поделиться своим видением этого. Пристегивайся, начинаем…

В начале был С#...

В далеком 2012 (смешно) я начал узнавать, что такое программирование. То был второй курс техникума, и мы начали изучать программирование в целом. Так случилось, что из всего, что преподавали, мне наиболее зашел C#. Думаю, просто потому, что из вариантов были Assembler, C++, Pascal (не для разработки, но и он был) и C#. Ну тут выбор очевиден. Тогда я решил написать диплом на C# и даже не знал, что такое .NET, и что это как-то связано с ним. Я просто решил, что остальное, что мы изучали, точно не для меня. Еще услышал про XNA Framework, ну и, короче, диплом мой состоял из кучи «спрайтов» и двух тысяч строк в одном файле. В лучших традициях. Но в итоге именно так я определил свое основное направление и подсел на .NET.

Но я не ударился в изучение языка и всех его аспектов. Более того, понятия «full-stack developer» я и близко не слышал и не интересовался. Было принято решение плыть по течению и изучать все, что дают. Никаких дополнительных лекций, ни капли усилий, потраченных во внеклассное время на более детальное изучение, зафиксировано не было. А зря, ведь с нынешними тенденциями в ИТ-сфере (да и не только там), возможно, только самообразование и может принести самые богатые плоды. В дальнейшем у меня проявлялись огромные пробелы в знаниях, и это мне ой как понижало самооценку.

Пробелы в знаниях

Во времена первых собеседований я осознал, что у меня большие проблемы. Все из разряда «ты идешь на собеседование, а там, оказывается, знания нужны». Выяснилось, что я не так уж и много знал о том , как происходит взаимодействие на уровне памяти, мог взять и перепутать, кому выделяется процессорное время, и много всего другого. А еще одно из самых важных - в английском-то я был профан (я 5 минут пытался понять, что вопрос был про миграции баз данных). Да и не умел нормально держаться во время собеседования, нервничал, путался в словах, не понимал, почему-это меня так гоняют, если я пришел собеседоваться на позицию trainee. Было нереально стыдно. Так вот - возможно, я просто плохо готовился к собеседованиям. Но дело не в этом. Я осознал, что нужно изучать то, что действительно востребовано в моей области. Понимать, что следует прокачивать, а что уже не стоит потраченного времени, куда вкладывать усилия, а что лучше забросить. И волей-неволей я уже находился где-то близко к осознанию понятия той самой разновидности разработчиков.

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

Кто такой «full-stack» разработчик

Так кто же такой фулстек? В принципе, можно и без определения обойтись, если неинтересно. Я, например, сначала стал им, а потом интересовался, кто это такой. Я нашел несколько обозначений, выдранных из комментариев на DOU. Некоторые из них:

  • «Full-stack developer – это еще одна попытка «работодателей» получить задешево, то, что никогда дешевым быть не могло. Это такой же психологический прием, как и “вы же профессионал!”».

  • «Вы в универе сайтики под заказ делали? Если да, то это оно и есть, только красивое название, в окультуренной форме».

  • «Это из словарика “крутых названий для простых профессий”: “фулстек программист” – IT-разнорабочий».

  • «Если кратко, full stack developer – это новое название вебмастера. То бишь человек, который умеет делать сайтики. То есть человек, который обладает околонулевыми знаниями в разработке ПО».

То есть, если обобщить все приведенное выше, то получается, что «full-stack developer» – это IT-разнорабочий, который клепает «сайтики», ничего не шарит в разработке, а местами является просто психологическим приемом для экономии на человеко-ресурсах. Мое мнение - сколько разработчиков, столько и определений. Можно, конечно, опираться на что-то общепринятое и, тыкая всем в лицо какую-то мнимую официальную формулировку, хвастаться и говорить, мол, “смотри, кто я такой, - здесь вот как написано!”. А можно просто делать то, что нравится, и с неизменным выражением лица, взвешенно и стремительно пополнять свой “сундук знаний”.

«Full-stack developer» - нечто большее, чем просто еще один вид разработчиков, как по мне. Это образ мышления, который позволяет раскрывать и изучать новые горизонты. Пребывая под влиянием таких же разработчиков, с огромной скоростью получается глубже разбираться в чем-то достаточно знакомом и узнавать что-то еще неизвестное. После некоторого времени нахождения в таком образе видения окружающего технологического мира начинаешь замечать, насколько легко можно переключаться не только между языками, но и между подходами к разработке, технологиями и архитектурным построением, и понимаешь, что это стоит затраченных усилий.

Говоря более конкретно, «full-stack» разработчики – это T-shaped люди, обладающие глубокими знаниями в своей основной сфере и имеющие дополнительные знания в смежных областях. Серверная часть, клиентское приложение, оптимизация производительности, DevOps - все выше перечисленное и многое другое подпадает под категорию того, чем может заниматься «full-stack». И я считаю такую широкую область потенциальных возможностей самым большим плюсом таких разработчиков.

Что нужно делать, чтоб стать «full-stack» разработчиком

Ну не будет ни здесь, ни где-либо мануала на подобии “Что нужно, чтобы стать full-stack?”. Так не работает. Для начала было бы хорошо разобраться в чем-то, что интересно, но если и пересекается с основным направлением изучения, то очень поверхностно. Ну и плюс, конечно, глубокое прокачивание в основной технологии. Дальше все будет приходить с опытом и с осознанием истинной ценности всестороннего развития. Нужно просто определить, что интересно, что в тренде и что может сделать жизнь проще. А там просто поспрашивать у знакомых / друзей / коллег, кто что изучал и что при этом использовал. И дальше за дело берется старая-добрая матушка учеба.

Так вот я так и сделал. Начал параллельно прокачивать JS, немного читать полезные книги по лидерству, продолжил посещать курсы английского. Каждый интересный вопрос или баг во время разработки или обучения подлежит обсуждению с другими. Более того, даже в моем .NET стеке есть еще довольно много чего, что стоило бы изучить более детально. Чтобы закреплять знания, можно писать какие-то свои мини-проекты чисто для понимания того, как это работает на практике.

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

Почему бы не быть просто разработчиком

Да можно быть, почему нет. Все зависит от стремлений. Например, если моя цель быть просто гуру в том направлении, каким я занимаюсь, чтобы на какую-то конкретную узкоспециализированную позицию меня брали с руками и ногами, то пожалуйста. Да и в таком случае «full-stack’ом» будет довольно тяжело стать, а даже и не нужно – цели-то другие.

В моем случае есть довольно большое стремление изучать все, каким-либо образом связанное с моей специализацией, и я хочу иметь возможность презентовать свои знания как широкопрофильные. В этом случае всплывает определение «full-stack».

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

Меня больше привлекает обучение в сторону нескольких технологий, языков, подходов, прокачивание лидерских навыков, изучение как минимум английского, и все в таком духе. Мне просто нравится иметь представление обо всем, что окружает меня в технологическом плане. Потому-то я считаю, что быть «full-stack» разработчиком – самый правильный шаг для меня. Меня привлекает то, что чем шире область моих знаний, тем интереснее и полезнее общаться с людьми. Когда я копал и топил только за .NET, то я не мог участвовать ни в обсуждениях, ни в спорах людей с других направлений. Просто не имел достаточной информационной базы. А сейчас чувствую, что мои взгляды очень круто меняются и расширяются. И это то, что мне нравится.

И что в итоге

По сути, мое жизненное направление не изменило вектор своего движения, а окружение не перевернулось с ног на голову. Но есть такое чувство, что я раскрыл глаза намного шире. Я все также интересуюсь .NET’ом и прокачиваю его по максимуму. Но оно и понятно - основная технология, все дела. Но я также уделяю достаточное внимание всему, что связано с разработкой: тайм-менеджмент, смежные технологии, лидерские навыки, преодоление языковых барьеров - тщательно расставляя приоритеты. Для меня – это зона комфорта. Я рад тому, что для поиска того, что конкретно мне нужно и каким образом удовлетворять свое эго, я не потратил десятилетия. Также мне импонирует возможность общения вне круга моей основной области знаний. Таким образом я доказываю себе, что развиваюсь и прогрессирую. Конечно, есть вероятность, что в будущем я приду к еще более прогрессивному и эффективному способу развития. Но на данном этапе меня вполне удовлетворяет расширение своего кругозора путем изучения широкого стека технологий, ну и, конечно, постепенное совершенствование в среде .NET.