So, ты хочешь стать full-stack разработчиком

Commendable wish, однако по моему скромному мнению у тебя не получится. Почему? Давай расскажу:

Full-stack это такое сокращение от back-end ∪ front-end, т.е. совмещающий одновременно знание о переднем и заднем конце. Интерфейс и бизнес логика, анимации и связи базы данных, верстка и настройка сервера.

Что тебе придется выучить, чтобы начать задумываться о фулл-стеке? Не так уж и много (шутка), для начала хватит одного фронта и одного зада бэка:

  • HTML/CSS и PHP,
  • React и Node.js,
  • Vue и Laravel,
  • Angular и Go.

Как видишь, на вкус и цвет выбор фломастеров крайне разнообразный. Как ты должен можешь догадаться, вариаций и комбинаций бесчисленное множество, а что особенно приятно – скорее всего окунуться придется со временем в несколько из них. Но, допустим, ты решился, ты смог, ты надумал – “реакт и нода круто выглядят!”.

Oh boy, where should I start?

Full-stack with React and Node

Какая ситуация выходит – ты учишь “всего лишь” 2 технологии: React и Node, обе вроде бы js, это вроде бы упрощает дело. Но, как можно догадаться по моим любимым кавычкам – на самом деле их далеко не две:

React – это наш перед, наш Frontend, а следовательно вместе с ним путешествуют:

  • разметка: это наши HTML+JSX, если внезапно React Native присобачить решил, то очень вероятно можешь и isomorphic компоненты накинуть – вместо div у тебя view, вместо привычного CSS – “Styled Components” или просто атрибут style;
  • стилизация: CSS, потом LESS, или SASS, или Stylus, или опять же Styled Components (брр), на что хватит времени и желания попробовать, изучить, и выбрать что больше понравится,
  • бонусы: локализация, SEO, микроразметка и прочие бонусы, если хочется делать все по-правильному;
  • чисто фреймворковые моменты: для реакта это любимый JSX, еще более любимый Redux+Redux-thunk\saga+Reselect, one-way data flow, components lifecycle, state+props+еще и hooks;
  • не забывай про сборку: из-за JSX и баловства с ES6+ реакт нельзя просто закинуть на страничку и радоваться, а поэтому учи webpack, а потом бонусом и gulp для автоматизации любимых стилей, “но это только когда CreateReactApp не хватает”;
  • а также вменяемая поддержка поисковиков: отдавая пустой документ с одним #root элементом куда вставится приложение, ты лишаешь их контента, поэтому встречай Server Side Rendering – чтобы поисковики не страдали, нужно отдать страничку с контентом И ТОЛЬКО ПОТОМ запускать приложение;
  • если повезет еще и с ServiceWorker-ами и концептом Progressive Web Apps познакомишься;
  • а потом и с Web Real Time Communications (WebRTC).

Еще не устал? Надеюсь, потому что теперь поговорим о заде Backend-е, Node.js в нашем случае:

  • начнем с простого, базы данных: SQL-like – MySQL, PostgreSQL, MSSQL – для общего развития изучи их все, потом можно глянуть на MongoDB (пожалуй самая близкая к SQL из NoSQL альтернатив), Redis, ElasticSearch, Neo4j для более специфических подходов и индивидов;
  • сама нода: EventLoop, async, closure, Promise – это только пара слов которые нужно будет понять;
  • фреймворки: старый добрый Connect-Express, чуть улучшенная (co)Koa, за которыми радостно шагают Hapi, Adonis, Feather и другие – кто лучше? иди изучай;
  • “devops” радости: конфигурация сервера, как правило linux ОС, nginx или apache веб-сервера, плюс Continuous Integration [CI], плюс docker, плюс X-cli для работы с облачными наворотами если внезапно такая радость посетит;
  • непосредственно сами облачные бонусы: Firebase (functions), Compute Engine, Cloud SQL от гугла; DynamoDB, Lamda, EC2 от AWS;
  • особенности фреймворков: понятие middleware для Express\Koa;
  • Node.js “Standard Library”: скромный список всего функционала ноды БЕЗ community библиотек

Заполнил блокнот на следующий год? Переворачивай страницу, поговорим о том что будет с обеих сторон:

  • HTTP: наш любимый HyperText Transfer Protocol, из которого тебе нужно будет понять как минимум два слова: verb и status, потом посидеть подумать и добавить себе концепт header-ов и их многообразия;
  • Git or Version Control Systems in general: плавать на плоту конечно можно, но в лодке как-то спокойнее, да и быстрее если с парусом – VCS позволяют не только работать в команде без “ты переписал все мои фиксы, *****!” но и частично предотвратить “***** я удалил исходники…” (к сожалению последнее происходило слишком много раз, делайте бекапы люди).
    Помимо этого в пакете идут приятные бонусы вроде ветвей изменений (отдельные независимые от основного проекта правки), которые можно под присмотром перенести в основной проект. Но VCS это обширный и ветвистый топик, про который можно долго обобщать;
  • WebSockets: ура двунаправленному общению! После ознакомления с HTTP тебе следует прийти к грустному наблюдению – клиент командует общением, а сервер послушно выполняет. WebSocket-ы помогают улучшить ситуацию давая бинарное в двух смыслах общение: сообщения могут быть отправлены в оба направления, и данные в сообщении могут быть.. бинарными – binary, что означает комфортную передачу любых нечеловекочитаемых данных: картинки (в том числе и “живые”), аудио, и любые другие файлы;
  • npm, yarn, \: нода и JS создали очень интересную экосистему построенную на “пакетах” – библиотеках и модулях, как правило размещенных на npm-е, и как ни странно, тебе придется изучить часть этой системы: как работать с npm\yarn, как работатить с другими cli (create-react-app и прочие балования), и в конце концов, как искать, работать, а иногда и читать исходники других библиотек созданных очень разными людьми.

Ну вот как-то так. Где-то 80% перечисленного выше я встретил, опробовал, работал с этим в тех или иных обстоятельствах. Со 100% знаком хотя бы немножко. Готов ли ты к такому, или может быть, лучше заняться только чем-то одним: версткой, реактом, дизайном, нодой, администрированием?


Real talk now, though

Я хотел запугать тебя этой статьей. 😉

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

Как я уже сказал выше, со всем описанным мне пришлось в той или иной мере столкнуться, изучить, разобраться и как-либо улучшить приложение с этим набором знаний.

С некоторым испугом спустя 3 года я понимаю что знаю очень много, некоторые вещи знаю на очень хорошем уровне, люди с которыми иногда работаю говорят “немногие знают столько, сколько знаешь ты” или “чувствуется профессионал и специалист высокого класса”. Я польщен, но я не заметил как и когда стал “специалистом высокого класса”.

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

Я не стану спрашивать готов ли ты к такому. Я спрошу:

Хочешь ли ты такую ответственность?

“Нести” проект, понимая что чем больше обязанностей висит на тебе, тем больше риск проекта если ты “заболеешь” или “устанешь”? Что когда ты отвечаешь и за интерфейс приложения, и за апи, и за настройку сервера, и за архитектуру бд, и за настройку сервисов – того же облака – то собираешь риски проекта на себя?

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

Это статья предупреждение – если захочешь, ты сможешь стать full-stack-ом, но хочешь ли ты и его “потенциальный багаж”?

Anyway!

На такой серьезной и грустной мине я завершать не собираюсь, after all I’m just talking out of my ass at 3 years of experience and thinking I’m some kind of developer demigod.

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

Another “important” notice – болботня про ответственно сугубо личный опыт и личная характеристика, я не стану проверять насколько она сходится с истиной передозадых разработчиков в общем случае.

На сим – удачи и до встречи.

nil commento load