Сколько зарабатывает full stack программист. Перевод: full stack разработчик — это миф

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

И хотя было бы проще просто отодвинуть эту дискуссию на второй план, термин «full-stack разработчик» от этого никуда не исчезнет. Спрос на специалистов с такими навыками вырос на 198% только за прошлый год. Кроме того, большинство разработчиков со всего мира именно этими словами описывает свой род деятельности (согласно нашему ).

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

Чтобы лучше понять существующие разногласия относительно термина «full-stack разработчик», мы разберемся, с чего все началось.

Рождение full-stack разработчика

Термин « » вошел в моду не так давно. Одно из самых ранних упоминаний относится к 2008 году , а первый запрос «full-stack developer» в Google появился не раньше 2010. С тех пор популярность этого запроса начала расти.

«Full-stack developer» в трендах поиска Google с 2004 года. Подъем популярности отражен для разных вариантов написания, например, «fullstack developer » и «full stack developer ».

Но если такой вид деятельности в какой-то форме существовал еще в пред-интернетное время, почему мы не видим роста популярности этого термина до начала 2010-х? Оказалось, ответ на этот вопрос требует небольшого исторического экскурса.

История

Поздние 1970-е / ранние 1980-е

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

Поздние 1980-е / ранние 1990-е

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

Поздние 1990-е / ранние 2000-е

Интернет «наступает» – технологии становятся все более специализированными, соответственно и у людей, занимающихся ими, возникает узкая специализация.

Середина 2000-х

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

Поздние 2000-е

Соответствующие технологии упрощаются до уровня, при котором многие программисты вновь могут создавать приложения и сайты от начала до конца. Официальное рождение термина «full-stack developer».

Ранние 2010-е / настоящее время

Быстрый подъем более сложных технологий привел к тому, что стэк стал более «слоистым». Разработчикам стало сложнее поддерживать знания на соответствующем уровне. Начинают появляться специалисты фронтенда и бэкенда. «Full stack» разработка приобретает новое, более широкое значение.

Согласно истории термина, «full-stack разработчик» сначала приобрел популярность в середине 2000-х, когда более простые и оптимизированные технологии позволили многим разработчикам выполнять проекты полностью. Этот подход диаметрально отличался от того, что было в поздние 1990-е и ранние 2000-е.

С течением времени смещение в сторону более сложных технологий и большего количества слоев в стэке (ранние 2010-е) привело к новому разделению ролей. Работа с бэкендом и фронтендом все более разделяется, что приводит к популяризации терминов «фронтенд-разработчик» и «бэкенд-разработчик».

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

Но, конечно, с такой интерпретацией согласно не все тех-сообщество. И хотя сложно сказать, когда эти споры начались, катализатором для них выступили два события. Первым был пост бывшего инженера Facebook Карлоса Буэно от 2010 года о том, что такое full stack. Вторым событием стало услышанное Лоренсом Геллертом на конференции заявление сотрудника Facebook о том, что эта компания нанимает только «Full Stack разработчиков» (2012 год).

Что имеем в результате? Жаркие дебаты относительно терминологии все еще живут, даже спустя почти 10 лет.

Доводы против full-stack разработчика

Представители лагеря противников «full-stack разработчика» доминируют в спорах о том, из чего состоит (или не состоит) full-stack. Коротко говоря, их аргументы крутятся вокруг идеи, что full-stack разработчик это некто со «способностью легко управляться с бэкендом и фронтендом на уровне сеньора ».

Хотя у этого представления есть некоторые вариации, данный лагерь считает, что full-stack разработчики должны уметь:

  • Писать первоклассный код фронтенда на том же уровне, что и узкий фронтенд-специалист.
  • Писать в равной степени превосходный код бэкенда на том же уровне, что и бэкенд-специалист.
  • Управлять серверной инфраструктурой.
  • Разбираться в не-техническом менеджменте проектов и бизнес-требованиях, на основе чего координировать свою работу с продуктом.
  • Контролировать работу QA, DevOps и вопросы, связанные с безопасностью.

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

Претензии этого лагеря по поводу термина «full-stack разработчик» сводятся к следующим пунктам:

  • Для компаний это способ выставлять нереальные требования к сотрудникам. Это позволяет им нагружать одного работника огромным количеством обязанностей, что для компании выгодно, но выгода достигается за счет работника. Компании хотят получать большой объем выполненных работ и большой опыт за низкую цену (по сравнению с наймом нескольких узких специалистов).
  • Этот термин подразумевает общий уровень опыта, которого у большинства разработчиков нет . Настоящий full-stack разработчик должен обладать «двойным мастерством » – и во фронтенде, и в бэкенде – а это невозможно с учетом скорости развития технологий. Когда кто-то называет себя full-stack, имея опыт меньше упомянутого, это является необоснованным использованием термина.
  • Это поощряет широкие, но поверхностные знания. Full-stack разработчик никогда не может с головой погрузиться ни в бэкенд, ни во фронтенд. Разработчик, пытающийся охватить весь стэк, это «и швец, и жнец, и на дуде игрец», причем ни в одной сфере он не достигает мастерства.

Представители этого лагеря сходятся на том, что настоящих full-stack разработчиков крайне мало. При этом они склонны считать, что люди, определяющие себя как full-stack, на самом деле являются фронтенд-разработчиками с некоторыми знаниями бэкенда (или наоборот).

Доводы в пользу full-stack разработчика

Лагерь сторонников full-stack, в свою очередь, ратует за более широкое понимание этого термина. Они отвергают идею, что full-stack разработчик должен обладать одинаковым мастерством в каждом слое стэка. Вместо этого ему нужно рабочее знание всего стэка и экспертное знание нескольких его слоев.

Определение full-stack с менее ограничивающим набором требований описывает человека, который способен:

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

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

В защиту термина «full-stack разработчик» приводится несколько ключевых соображений:

  • Хороший разработчик не складирует свои знания. Большинство разработчиков занимаются либо фронтендом, либо бэкендом. Но чтобы быть хорошим специалистом в любом из этих направлений, вам нужно понимать оба. Проведение жесткого разграничения между ними охлаждает желание разработчиков изучать что-либо, выходящее за рамки собственной специализации. А ведь в каком-то смысле граница между бэкендом и фронтендом является искусственной .
  • Компаниям нужны специалисты широкого профиля. Не всегда и не для всех бизнес-целей вам подойдет узкий специалист. Маленькие компании и стартапы, у которых количество людей и средств ограничено, нуждаются в разработчиках с обширным опытом и разнообразием знаний. Крупные компании более склонны поручать работу отдельным специалистам, но и они могут привлекать full-stack разработчиков в контексте менеджмента проектов .
  • Full-stack разработчики наводят мосты между фротендом и бэкендом. Разработчики, специализирующиеся на каком-то одном из этих направлений, занимают свои ниши, но разработчики с full-stack знаниями помогают преодолеть пропасть между ними. Поскольку они понимают обе стороны, они могут определять проблемы и возможности, которые ускользнут от взгляда узкого специалиста.

Эти аргументы доказывают, что full-stack разработчики не заменяют, а дополняют работу специалистов по фронтенду и бэкенду. Их ценность – в способности понимать и работать со всем проектом в целом, а также использовать общие технические познания во всем, с чем они имеют дело.

Эту философию можно кратко изложить цитатой из «Программиста-прагматика »:

«Чем больше вы знаете, тем выше ваша ценность… чем больше технологий вы знаете, тем лучше сможете приспосабливаться к изменениям».

Общий знаменатель

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

С целью приближения к общему знаменателю, в недавно опубликованном Ассоциацией информационных систем документе был произведен анализ 5 самых общеупотребительных определений термина «full-stack разработчик». Это была попытка вывести общее определение термина. Вот, что получилось в результате:

«Full stack разработка это методология, охватывающая все слои стэка и при этом создающая полное, реализуемое решение требований бизнеса. Full stack разработчики обладают широким опытом работы во всех слоях стэка и экспертным уровнем знаний в некоторых из них. В заданном стэке они должны быть способны производить минимально жизнеспособный продукт», – «Towards a Consensus Definition of Full-Stack Development», 2018.

Если вы рекрутер или менеджер по найму и хотите направить дискуссию в конструктивное русло, вы можете предпринять следующие шаги:

  • Убедитесь, что ваши запросы разумны. Никто из представителей обоих лагерей не ожидает, что full-stack разработчик сможет доставить результат, равный результату целой команды разработчиков. Если вы решаете, что для вашей команды разумно будет нанять full-stack разработчика, убедитесь, что вы не начинаете ненароком искать «единорога» и не просите одного человека сравняться по результатам со многими людьми. Самое важное: будьте готовы к тому, что может существовать больше одного набора навыков, позволяющих преуспеть в этой должности.
  • Выясните, как в вашей компании налажена совместная работа разработчиков. Как члены вашей команды делят работу и кто их контролирует? Какой уровень гибкости в плане фронтенда и бэкенда они ожидают от каждого отдельного коллеги, хоть full-stack, хоть нет? Если рекрутеры и менеджеры по найму будут равняться на эту точку зрения, им будет легче понять, как должен функционировать full-stack разработчик в контексте их компании. Это поможет сделать процесс найма более эффективным.
  • Ориентируйтесь на нужды своей компании. В целом, чем больше компания, тем более специализированные разработчики (и другие специалисты) могут в ней работать. Если ваша команда находится в процессе роста, учитывайте, как в ней будет работать full-stack разработчик – и не только сегодня, но и в долгосрочной перспективе, когда команда увеличится. В команде на 300 человек может быть больше места для full-stack разработчиков, чем в команде на 8 тысяч человек.
  • Воспринимайте «full-stack» как примерный ориентир. Спектр мнений относительно трактовки этого термина предполагает, что full-stack разработчики могут быть очень разными. Если кандидат так себя называет, это еще не является показателем того, что он вам подходит. С другой стороны, кандидат, называющий себя фронтенд- или бэкенд-разработчиком, может иметь достаточно широкие познания, чтобы подойти на вашу full-stack позицию. Не игнорируйте терминологию, но и не слишком в нее упирайтесь, пускай навыки кандидатов говорят сами за себя.

А к какому «лагерю» относитесь вы и ваша команда? Поделитесь в комментариях!

Компании любят нанимать разработчиков Full Stack developer. Но с большим количеством опций в каждом месте стека работать становится все сложнее и сложнее. Объявление о найме каждый раз содержит новый головокружительный список технических требований к специалисту: полдюжины языков, несколько систем баз данных, пару последних фреймворков Javascript, знание Android и iOS, технологии развертывания и многое, многое другое.

Полноценная разработка отлично подходит для тех, кто не любит фокусироваться на одном деле и предпочитает сложные задачи. В то же время главное преимущество работы технического специалиста Full Stack developer - это самая высокооплачиваемая работа в ИТ-процессах.

С появлением интернета и Google информация стала буквально у людей под рукой. Тем не менее, даже сегодня не все знают и понимают значения многих новых слов, особенно когда речь заходит о терминах программирования. Один новомодный загадочный термин, используемый в мире программирования, - это полная разработка стека. Хотя есть сотни статей, объясняющих, что такое Full Stack developer, он все еще сложен для полного понимания. Вот несколько фактов:

  1. Начало разработки полного стека идет с 3 июня 2008 года. Рэнди Шмидт, управляющий директор терминалов Burns & McDonnell, первым использовал термин Full Stack developer, описанный Джейсоном Трамбле, Джеффри Grosenbach и Томом Престоном-Вернером. Они первоначально определили такого разработчика как человека, который занимается дизайном, разметкой, стилем, поведением и программированием. С тех пор многие известные программисты использовали термин «разработчик полного стека» и дали свое собственное определение.
  2. Полная разработка стека включает в себя знания в интерфейсе. Это человек, который комфортно работает как в интерфейсе, так и на стороне веб-разработки.
  3. Есть 710 языков кодирования во всем мире. Разработчик должен знать языки, которые потребуются для стека.
  4. Чтобы овладеть концепциями, необходимо понять его технические основы и сложные рамки. Независимо от уровня успеваемости ученика, успех овладения одним или несколькими языками программирования зависит от него самого.
  5. Термин «веб-разработка» был популяризирован Тимом О"Рейлии Дейлом Догерти в конце 2004 года.
  6. Существует 19 видов разработчиков-кодеров. Вероятно многие знают только сторонних разработчиков и разработчиков полного стека.
  7. Сегодня в мире насчитывается более 23 миллионов Full Stack web developer, а к 2023 году их количество достигнет 27,7 миллиона. - Evan Data Group
  8. Ожидается, что к 2024 году рост занятости веб-разработчиков возрастет на 27%, согласно данным Бюро статистики труда США.
  9. Эти специалисты являются одними из самых востребованных в последние годы. Заработная плата за полный стек выше его спроса. Действительно, отчет включал среднюю зарплату Full Stack java developer, которая в среднем составляет 111 640 долл. США в год.
  10. Front-end и Back-end разработка - это два важных навыка в технологической отрасли, и значит, что они оба дают больше преимуществ в карьере.

Полная разработка стека относится к разработке приложения. Этот процесс веб-разработки включает в себя все три уровня представления:

  1. Front end part, который касается пользовательского интерфейса.
  2. Business Logic Layer, который занимается проверкой данных.
  3. Уровни базы данных. Они заботятся обо всех шагах от концепции идеи до фактического готового продукта.

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

  1. Написания оптимизированного интерфейсного кода в HTML, Java, JavaScript, для Full Stack overflow developer.
  2. Создания и использования API-интерфейсов.
  3. Записи внутреннего кода в Ruby, Python / Java.
  4. Работы с инфраструктурой системы, включая аппаратное обеспечение и ОС.
  5. Знание устройств сетевое оборудование и сфер безопасности.
  6. Понимание процессов создания и запроса баз данных.
  7. Управление проектами и координация клиентов.

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

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

Одной из проблем может стать координация и стратегия. Senior Full Stack net developer решают все эти проблемы, вот почему сегодня они наиболее востребованы на рынке персонала.

Существуют 4 самых популярных курса в полном стеке. Хотя для некоторых, эти курсы - всего лишь несколько частей головоломки. Даже после изучения этих технологий, многие не понимают, как эти знания применить, чтобы разрешить головоломку в целом.

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

Полный курс веб-разработки

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

Курсы охватывают как теоретическое обучение, так и практическое применение. Живые проекты дают опыт работы в качестве разработчика полного стека. Вот некоторые из наиболее распространенных технологий, которые он предлагает в каждом сегменте:

  1. Front end - HTML, HTML5, JavaScript, J Query, CSS3.
  2. Backend- Ruby on Rails, PHP, Angular2, Node.js, для Full Stack php developer.
  3. База данных - MySQL, MongoDB, CouchDB.
  4. Отладка / контроль версий - GIT, Grunt, Xdebug, Subversion.

Таким образом, в основном эти курсы начинаются с того, что курсант получает фундаментальные знания о развитии переднего плана ИТ-проекта. Он узнает, как использовать HTML5, CSS3 для создания простых приложений. Затем он продолжит изучение передовых концепций, необходимых для создания интерактивных и гибких моделей.

Со знанием популярных бэкэнд-технологий, таких как Node.js и Ruby on Rails, он станет мастером в разработке и кодировании сложных серверных приложений. И также узнает, как эффективно использовать реляционную базу данных и, как защищать и настраивать серверные и хост-приложения.

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

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

Этот курс охватывает все, начиная от базовых основ и заканчивая переменными, математическими операциями, циклами, концепциями ООП, коллекциями, многопроцессорностью, базой данных и многими другими. Курсант получит опыт разработки игр и приложений для социальных сетей. Он узнает, как использовать инфраструктуру приложения Cordova для создания мобильных версий, ориентированных на несколько платформ с единой кодовой базой и как получить доступ к моделированию новых возможностей мобильных устройств.

Его научат Bootstrap и Angular JS. Он сможет использовать эти навыки, чтобы стать экспертом в использовании Ionic framework. Он узнает, как применять Ionic framework для создания элегантных интерфейсов, а также для реализации клиентской и серверной логики. Будет знать, как написать многосерверный многоуровневый код для создания гибридных мобильных приложений.

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

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

После того, как курсант изучит теоретические концепции, он может создать веб-приложение с полным стеком прямо на курсе, чтобы подтвердить полученный опыт работы. И также узнает, как включить такие функции, как аутентификация пользователей и учетные записи пользователей. Основное понимание HTML, CSS и Javascript является предпосылкой для курса Full Stack javascript developer. Изучение только одного полного стека уже является огромным преимуществом специалиста.

Независимо от того, является ли программист владельцем бизнеса, стремящимся увеличить трафик на свой сайт, или начинающим специалистом по цифровому маркетингу, этот курс поможет ему овладеть стратегическими маркетинговыми концепциями и понять инструменты, необходимые для создания имиджа бренда в цифровом мире. Здесь он узнает о различных аспектах цифрового маркетинга, включая поисковую оптимизацию, маркетинг по электронной почте, маркетинг в Facebook, Twitter, Youtube, копирайтинг, WordPress, Google Analytics и Adwords.

Он познакомится с тем, как нужно разрабатывать стратегии и использовать эти методы для увеличения трафика, создания потенциальных клиентов и развития любого типа бизнеса. Многие начинающие специалисты спрашивают: «Какой лучший язык для изучения?» или «Какую базу данных я должен использовать?», но действительно неважно, какой из них выбирается первым. У каждого есть свои преимущества и недостатки, первоначальный выбор не будет иметь большого значения. Изучив целый стек, программист получит необходимый контекст, для изучения альтернативных технологий каждой части стека.

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

  1. Аналитический ум.
  2. Терпение.
  3. Любовь к обучению.
  4. Внимание к деталям.
  5. Обладание Creative Vision.

Не нужно становиться мастером в каждой технологии, нужно концентрироваться на главном:

  1. HTML и CSS - это две основы, которые встречаются в самом начале любого курса программирования, потому что благодаря HTML можно добавлять материалы на веб-страницу, а CSS помогает придать ему определенный стиль.
  2. Семантический HTML.
  3. Изучение модели CSS Box, чтобы программисты могли знать ее принципы и отличительные черты.
  4. - их преимущества для разработки программного обеспечения.
  5. Bootstrap.
  6. JavaScript этот язык программирования в первую очередь предназначен для трех типов разработчиков, включая полный стек.

Важным моментом здесь является то, что при выполнении проекта нужно выбрать один язык и сосредоточиться на нем. Другими словами, нужно знать подробно, как это работает и что именно можно сделать. Полное понимание проекта - это то, что нужно работодателю.

Обычно требуется:

  1. Знакомство с базами данных NoSQL и ситуациями при выборе определенного.
  2. Особенности реляционных данных.
  3. Понимание того, как связать базу данных и выбранный язык.
  4. Веб-хранилище.
  5. Протокол приложения HTTP, который позволяет клиентам и серверам оставаться в постоянном соединении. Например, можно создать запрос через код JavaScript, который будет отправлен во внутренний код. Это произойдет благодаря HTTP.
  6. Изучение фундаментальных вопросов о REST.
  7. Проектирование API RESTful.
  8. Использование Chrome DevTools.
  9. Знание архитектуры приложения имеет решающее значение, когда разработчик концентрируется на сложном проекте. Нужно знать, как упорядочить код и данные, где хранить большие файлы, как отделить определенные файлы и многое другое.
  10. Сбор информации о платформах.
  11. Работа над оптимизацией приложения.
  12. Изучение кодовых баз из крупных проектов GitHub.

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

Изучение полного списка команд Git - это то, что делает успех для разработчиков с полным стеком. Существует много сфер ИТ, практически уже нельзя охватить все, нужно выбрать главное, учитывать последние обновления инструментов и технологий. Вот некоторые источники, которые помогут в этом:

  1. Сеть разработчиков Mozilla.
  2. Документация MySQL.
  3. Учебники W3Schools.
  4. Гипертекстовый препроцессор.
  5. Онлайн-обучение в Интернете.

Никакие теоретические знания не могут заменить обычную практику. Будучи частью сложного проекта, разработчик, только практикуя, сможет работать со всеми сторонами продукта и узнать больше об архитектуре приложений. Senior Full Stack developer должен отслеживать свои знания, чтобы идти в ногу с технологическими улучшениями. В самом начале полезно знать некоторые отрицательные моменты, с которыми он столкнется неизбежно. Любые трюки, которые стали известными, должны быть зафиксированы в личном планировщике.

MVP - это новый термин уровня квалификации специалиста Full Stack developer, перевод означает дословно «минимально жизнеспособное мастерство».

Для веб-программного обеспечения определяют базовый стек следующим образом:

  • Один язык программирования общего назначения (Ruby, Python, PHP и т. д.).
  • Одна система реляционных баз данных (Postgres, MySQL, Oracle и т. д.).
  • Один веб-сервер (nginx, Apache и т. д.).
  • Одна операционная система развертывания (Ubuntu, CentOS, FreeBSD и т. д.).
  • Одна система управления версиями (git и т. д.).

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

Учение - постоянный процесс для разработчика. Лучшие из них учатся постоянно, читают книги и блоги, слушают подкасты и смотрят скринкасты. Практика - лучшее обучение. Когда создается даже простая система программного обеспечения, обучающийся программист решает гораздо больше проблем, чем когда пассивно изучает образовательный контент. Он вырабатывает основные навыки, необходимые для успеха в качестве разработчика - чтение документации, сообщения об ошибках grokking и изучение возможностей доступных инструментов. В конце концов, у него будет своя система, в которой он может демонстрировать себя бизнесу как специалист.

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

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

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

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

Что значит full stack разработчик?

Термин full stack описывает разработчика, который одинаково хорошо справляется с написанием фронт-энда и бэк-энда.

Чтобы быть более конкретным, это означает, что разработчик может работать с базами данных, PHP, HTML, CSS, JavaScript, а так же может превратить Photoshop-ый макет в готовый к использованию шаблон.

Full stack разработчику не нужно быть супер профессионалом во всех областях и технологиях, в которых он должен работать, потому что это практически невозможно. Он просто должен уметь работать с этими технологиями.

Что значило full stack в 2000 году и что значит сейчас?

2000 год был очень давно, в этом году был выпущен PHP 4.0. Да, 4.0. Тогда, хороший веб-разработчик знал немного HTML, CSS и процедурный PHP, потому что собственно ООП появился в версии 5.0.

Сборка LAMP (Linux - Apache - MySQL - Perl / PHP) был в моде в те годы, практически без альтернативы. В начале 2000-х, если кто использовал контроль версий - то они считались либо технологическими еретиками либо мастерами. Сегодня это смешно, если кто-то не использует данные технологии.

Так, давайте попробуем классифицировать основные требования, которыми должен обладать full stack разработчик:

Системное администрирование

  1. Linux и написание shell скриптов
  2. Облачные технологии: Amazon, Rackspace, и т.д.
  3. Фоновые процедуры: Gearman, Redis
  4. Поиск: Elasticsearch, Sphinx, Solr
  5. Кэширование: Varnish, Memcached, APC / OpCache
  6. Мониторинг: Nagios

Linux по-прежнему самая распространённая операционная система Интернета, используемая в веб-разработке (не считая.NET). Кроме того, full stack разработчик должен знать, как работает облачный хостинг, Amazon / Rackspace.

Поиск является неотъемлемой частью большинства веб-сайтов - разработчик должен знать, как настроить и использовать поисковые серверы, такие как Sphinx или Elasticsearch.

Кэширование также важно: Varnish, обратный прокси, Memcached.

Инструменты веб-разработки

  1. Контроль версий: Git, Mercurial, SVN
  2. Виртуализация: VirtualBox, Vagrant, Docker

Сегодня неприемлемо не использовать контроль версий, даже если вы разработчик одиночка.

Используя средства виртуализации и среды разработки на основе каждого проекта легко настроить с помощью VirtualBox и Vagrant.

Если вы хотите работать с Vagrant вы должны знать, основной синтаксис Ruby.

Бэк-энд технологии

  1. Веб-серверы: Apache, Nginx
  2. Языки программирования: PHP, NodeJS, Ruby
  3. Базы данных: MySQL, MongoDB, Cassandra, Redis, SQL / JSON в целом

Знание тонкостей работы с Apache и Nginx - это норма. Full stack разработчик должен знать, как настроить данные инструменты.

PHP должен быть освоен на высоком уровне, NodeJS, Ruby - как можно лучше.

В дополнение к веб-серверам и языкам программирования, full stack разработчик должен знать как работать с различными базами данных.

Реляционные (например, MySQL, PostgreSQL) и нереляционные базы данных (как MongoDB, Redis или Cassandra) различия между которыми full stack разработчик должен знать, наряду с XML / JSON.

Фронтальные технологии

  1. HTML / HTML5: Семантический веб
  2. CSS / CSS3: LESS, SASS, Медиа запросы
  3. JavaScript: JQuery, AngularJS, Knockout, и т.д.
  4. Особенности совместимости всех браузерах
  5. Адаптивный дизайн
  6. AJAX, JSON, XML, WebSocket

JavaScript, который изначально никто не воспринимал всерьёз, сегодня превратился в один из самых популярных и мощных языков. Новые методологии и структуры появляются каждый день: MVC, MVVM, MVP, Angular, Knockout, Ember, и т.д.

Наряду с HTML, CSS, Javascript, full stack разработчик должен знать о принципах работы с медиа-запросами CSS, а так же препроцессорами, такими как LESS и SASS.

Следует также знать, как работать с технологиями AJAX или WebSocket.

Дизайн

  1. Преобразование веб-дизайна в код

В дополнение к интерфейсным технологиям, full stack разработчик также должен уметь преобразовать макет сайта в полноценный шаблон, используя HTML / CSS / Javascript.

Так же вам могут потребоваться знания самых разных технологий. Если вы хотите настроить Vagrant вам нужно знать синтаксис Ruby, а для более эффективной работы с DOM не обойтись без JQuery.

  1. Android
  2. Гибрид: PhoneGap, Appcelerator

Full stack разработчик должен иметь хорошее представление об этих технологиях.

Хорошо ли быть full stack разработчиком?

Быть full stack разработчиком значит быть открытым к новым технологиям, понимать каждую из них и иметь представление о том, как развить веб-приложение от стадии проектирования - до готового продукта.

18 января 2016 в 09:35

Перевод: full stack разработчик - это миф

  • Блог компании Voximplant ,
  • Разработка веб-сайтов ,
  • Программирование
  • Перевод

Вашему вниманию предлагается перевод любопытной статьи Скотта Хадфилда , CTO и со-основателя стартапа “Hello Pretty”. Сейчас в половине вакансий, связанных с вебом и серверной разработкой, встречается волшебная фраза “full stack”. Чаще всего с эпитетами вроде “джедай”, “супер-герой” и “ниндзя”. Кого ищут все эти люди, и кого им на самом деле удается получить в свою команду?

Конечно, в названии статьи я несколько сгустил краски и full stack разработчики существуют. Но вы никогда такого не найдете. “Настоящие” full stack разработчики существуют - так же как существуют гении и люди, которые программируют с 12 лет. Я слишком часто вижу это словосочетание, и, по моему мнению, единственный вариант найти такого человека - это заняться хантинг-браконьерством. Если у вас не запредельное везение, то все бойцы, подходящие под описание “full stack”, уже давно и надежно трудоустроены.

Я знаком с несколькими ребятами, которые соответствуют описанию “full stack”. И за этими ребятами постоянно гоняется толпа хантеров, что лишь подпитывает миф о том, что у вас получится найти такого разработчика в свой проект.

Описание “full stack developer” так же бессмысленно как “Гений” или “Тот, кто может сделать все что угодно в [вставьте здесь свою предметную область]”.

Раскрою эту мысль поглубже. Иллюстрация ниже показывает неполную версию того самого “stack”, о котором говорится во всех этих вакансиях. В большинстве случаев разработчику нужны только одно или два умения из каждого слоя. Некоторые умения можно получить за пару часов (например, простейшая компиляция с помощью “./configure && make && sudo make install” или использование VPS). Получение других умений может занять годы.

То, что ожидается от “full stack” разработчика надежно выходит за рамки возможностей обычного человека. Такой разработчик должен разбираться в масштабировании приложения до нескольких миллионов кликов в день (в час?), знать что такое “домашние животные vs крупный рогатый скот” и почему это так важно, уметь выбирать между MongoDB и MySQL, применять CAP-теорему, настраивать PaaS и IaaS, владеть дюжиной средств управления конфигурациями для развертывания приложений на Rails, Django, Wordpress, Swift или их комбинации, разбираться в отличиях микросервис-ориентированной архитектуры от монолитных приложений и еще несколько дюжин вещей.

Это значит, что full stack разработчик должен обладать как минимум хорошим пониманием каждого компонента в стеке веб технологий, чтобы иметь возможность принимать обоснованные решения как их использовать. Он также должен уметь объяснить свой выбор менеджерам, желательно простым языком. Да-да, на самом верху стека находятся хорошее владение письменным языком, навыки командной работы и умение донести непростые вещи до менеджеров.

Каждый год новые компоненты добавляются к каждому слою стека. А раз в несколько лет к стеку добавляется новый слой. Вы все еще считаете, что разумно писать в вакансиях “full stack разработчик”? Это не очень умно. Особенно когда вы начинаете искать одного человека, одновременно являющегося специалистом по безопасности, веб разработке, юзабилити и настройке серверов. И такие запросы не то чтобы очень редки.

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

Ах, да, и когда CEO заглядывает в офис, нужно настроить принтер и общий доступ к файлам на его новеньком ноутбуке с windows.

Как я уже писал, такие люди существуют. Лично знаю нескольких. Но также я знаю множество великолепных разработчиков, дизайнеров и менеджеров проектов, которые даже близко не подходят под определение “full stack”. И еще больше тех, кто называет себя “full stack разработчиками” и при этом с трудом могут дать определение больше чем дюжине слов из списка выше. И это при том, что в список далеко неполный, в нем даже нет некоторых слоев, например того, на котором живут JRE и Node.js. И тут мы понимаем, что у нас проблема.

В большинстве случаев, когда я видел “full stack” в описании вакансии, на самом деле они искали “очень крутого спеца”.

Самое раннее упоминание “full stack” и “full stack инженера

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

С тех пор, как Карлос Буэно из Facebook написал , выходит масса постов, авторы которых пытаются определить это понятие. Ходили слухи, что в течение некоторого времени Facebook нанимал на работу только full-stack разработчиков. Вероятно, это все-таки преувеличение, пусть и похожее на правду. Некоторые из авторов фактически считают full-stack разработчика полумифическим персонажем. Так, Лоренс Геллерт пишет , что full-stack разработчик - это «больше, чем senior-специалист», после чего подробно рассматривает те навыки и умения, которыми, на его взгляд, должен обладать такой разработчик. Большинство навыков, упомянутых Геллертом, не связаны с написанием кода.

И еще крестиком вышивает
Подобные списки качеств обычно получаются или слишком длинными, или слишком короткими. Я согласен, что full-stack разработчик и senior-инженер - не обязательно одни и те же люди. Но идея о том, что full-stack специалист обладает почти волшебными навыками сразу во многих областях, кажется мне неприемлемой. Геллерт же заявляет, что уровень full-stack предполагает «хорошее представление о каждом уровне стека, если не сказать - мастерское им владение». Правда, я бы добавил в список Геллерта еще несколько позиций, о которых он лишь вскользь упоминает: контроль исходников, инфраструктуру данных, распределенные вычисления и т.д.

Учитывая это, давайте попробуем определить, что такое стек. Возьмем для примера уже довольно архаичный стек LAMP: Linux, Apache, MySQL, Perl. Этот список неполный и определенно устаревший. Linux и Apache по-прежнему активно используются, хотя уже набирают популярность другие серверы, например, nginx. База данных MySQL все еще в ходу, правда, уже появились десятки пост-реляционных баз данных (наиболее известными среди них являются MongoDB и Cassandra). Я не удивлюсь, если в ближайшие несколько лет MariaDB придет на смену MySQL. Уже никто не пишет CGI-программы на Perl; вместо него используются самые разные языки, от Haskell до Java. Но пусть стек LAMP и устарел, в нем заложена правильная идея: операционная система, сервер, база данных, связующее ПО. Стек LAMP появился в те времена, когда язык HTML был тривиальным, а все вычисления выполнялись на сервере. JavaScript был «игрушечным» языком, помогавшим склеивать разные компоненты в браузере, но на этом его роль заканчивалась. В настоящее время JavaScript развился, стал серьезным полнофункциональным языком программирования, CSS ненамного от него отстает. Если вы мыслите себя full-stack программистом, то, несомненно, должны полностью понимать ту платформу, на которой базируется клиентская часть вашего приложения. Стек MEAN, Mongo, Express, Angular и Node - более современный аналог LAMP, красноречиво показывающий, что язык JavaScript уже развился в самостоятельную платформу.

Наряду с веб-программированием, full-stack разработчик должен в известной степени понимать проектирование. Чтобы написать по-настоящему качественное веб-приложение, необходимо обеспечить безупречное пользовательское восприятие. Дизайнер понимает, что его работа отнюдь не ограничивается созданием макетов в Photoshop . Разработчик также должен понимать причины, по которым приложение проектируется так, а не иначе, уметь обсудить с дизайнерами о том, что удастся и что не удастся эффективно реализовать.

Не забываем и о железе, на котором работает стек. В большинстве текстов о full-stack программировании делается акцент на производительности. Составить полное представление о производительности зачастую удается при детальном понимании взаимодействия ПО с железом. Буэно совершенно верно подмечает это: программист должен знать, как SQL обрабатывает запросы, как процессор выполняет инструкции, как дисководы предоставляют данные через систему уровней кэширования.
Далее начинается работа с сетью. В настоящее время практически все задачи решаются с применением сети, и ваша работа в сети может кардинально влиять на производительность. Илья Григорик написал отличную книгу для веб-разработчиков о принципах функционирования сетей .

В настоящее время многие новые приложения (и практически все приложения, разрабатываемые на стартапах) работают в облаке. Они не просто хранят данные в облаке, но и опираются на инфраструктуру Amazon, позволяющую выстраивать виртуальные серверные фермы и датацентры. Масштабируемость таких систем практически безгранична. Соответственно, full-stack разработчику необходимо понимать Amazon и его API: что вы покупаете, как это оплачивается, какими сервисами при этом можно воспользоваться. Кроме того, облачные технологии неразрывно связаны с распределенными вычислениями. Несмотря на всю шумиху об отказах амазоновских серверов, готов поспорить, что Amazon работает гораздо стабильнее, чем любой самодельный датацентр. Тем не менее, вы должны обладать всеми необходимыми знаниями, чтобы обеспечить жизнеспособность приложения в условиях таких отказов.

В настоящее время существует ряд интересных приложений, в основе которых лежит не обработка данных, а что-то другое. Допустим, вы пишете для электронного магазина такую программу, которая делает рекомендации. В данном случае, кроме всех вышеупомянутых компонентов стека вам придется иметь дело с Hadoop, Mahout, Scikit-learn, либо какой-то другой библиотекой для машинного обучения.

Наконец, существует инструментальная инфраструктура. Не устаю удивляться, когда слышу о компаниях, не занимающихся контролем исходников, автоматизированным тестированием и не применяющих ту или иную разновидность непрерывного развертывания. Впрочем, могу понять скептическое отношение к непрерывному развертыванию - в некоторых случаях оно действительно неприменимо. Но никак нельзя оправдать отказ от Git, SVN или эквивалентных коммерческих систем. Мне кажется, что full-stack разработчик должен уметь обращаться с современным инструментарием.

В начале статьи я сказал, что мне не нравится отношение к full-stack разработчику как к полумифическому персонажу. Затем на ваших глазах я сильно расширил стек - настолько, что его уже сложно назвать стеком. Фактически, мы получили дерево с инструментальной оснасткой, облачными сервисами, дизайном, данными и сетевой частью. Я нисколько не сомневаюсь в том, что разработчик должен как можно лучше ориентироваться в бизнес-составляющей, в работе менеджеров и т.д. Добавим еще одну ветвь к этому дереву. Что, удалось усугубить картину? Может быть, «full stack-разработчик» - это действительно кодовое наименование волшебного юнита, который умеет все: и программировать на ассемблере, и уговаривать финансистов? Может быть, такой умелец и канализацию в офисе починить может (кстати, на стартапах - незаменимый навык).

Нет, все не так плохо. Действительно, быть full-stack разработчиком - нелегкая задача, но она вполне сравнима по амбициозности со многими другими программерскими затеями. Так, я не считаю, что full-stack разработчик принципиально превосходит в профессионализме senior-разработчика. Более того, могу себе представить junior-разработчика, ориентирующегося во всем стеке, но отнюдь не считаю, что вакансии должны пестреть упоминаниями full stack. Мне больше нравится характеристика «Т-разработчик», подробно описанная (в частности) в пособии для сотрудников Valve . Т-разработчик обладает широкими знаниями и интересами, но при этом глубоко понимает ту область, в которой специализируется. Я не рассчитываю, что разработчик будет в разбираться в проектировании не хуже дизайнера, либо справляться с обслуживанием сетей так же умело, как инженеры-специалисты. Но разработчик должен понимать такие проблемы и уметь грамотно о них рассуждать.

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

«Full-stack разработка» - это умение воспринимать самые разнообразные идеи. Со временем такой талант будет становиться все более востребованным. Быть «full-stack разработчиком» не означает в одночасье переключаться с обслуживания кластера Hadoop на программирование связующего ПО на Java, а потом на JavaScript, работающий исключительно в браузере. Специализации придуманы не зря. Но разработчик, понимающий весь стек технологий, будет писать более качественные приложения. Так, разработчик машинного интерфейса будет понимать, чем занимаются разработчики клиентской части, сможет взаимодействовать с ними. Приложение не будет генерировать запросов, из-за которых база данных слетает с катушек. Клиентский разработчик, разбирающийся в проектировании, сможет помочь дизайнеру подготовить красивое приложение, которое при этом будет эффективно функционировать на любой платформе.

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