Вообще я стараюсь не писать статьи и комментарии не на технические темы, но коль скоро появились не совсем технические по духу статьи JavaScript как явление и JavaScript как праздник, я счел нужным принять участие в дискуссии.
Начнем с того, что я не пишу на JavaScript профессионально. Я много пишу на TypeScript, считаю что разбираюсь во frontend-разработке (например сейчас я занимаюсь интеграцией собственной реализации VDOM в свой датагрид-движок Lattice, о котором скоро будет отдельная статья. Ну как скоро… будет, в общем :), однако мой основной профиль — C# и делать всё, чтобы защитить бедных C# разработчиков от излишнего ныряния в JavaScript.
Так вот. Прошу обратить внимание, что я решительно не имею ничего против JavaScript как такового и его технической экосистемы. Это нормальный язык, с приемлемым тулсетом. Во всяком случае мне в нем комфортнее чем в каком-нибудь… LabView. Я не считаю его уж шибко плохо сделанным — в конце концов в нем нет несовместимых с жизнью недостатков, но однако и ничего революционного или магического я в нем так же не нахожу. Мой основной посыл — к сообществу. К людям, а не к технологии, ибо как с моей точки зрения, большинство проблем и холиваров вокруг JavaScript происходит не от самого языка, а от его, как мне иногда кажется, обезумевших последователей. Имея за плечами продолжительный опыт общения с разработчиками на JavaScript, я предположил что этот язык работает как мыслевирус, который со временем превращает пишущего на нем человека в агрессивного фанатика, чего мне не удалось отметить с другими технологиями. Собственно, эта статья является сатирой на штампы JavaScript-разработчиков, которых JavaScript поразил как мыслевирус. Отсюда и название.
И да. Я не считаю что все поголовно JavaScript-разработчики такие. Среди них есть нормальные и адекватные люди, которым удалось остановиться на каком-либо квалификационном уровне и сохранить трезвость ума и здравость памяти. Однако же фанатизм от JavaScript-а настолько фееричен, что заслуживает отдельного рассмотрения. Итак…
Дорогой JavaScript-разработчик!
Если ты это читаешь, то ты должен знать: твой язык имеет характер мыслевируса. Он серьезно разъедает
0 уровень: «jQuery — хороший»
Симптомы:
— JavaScript тебя интересует только по работе
— Ты можешь написать кусок кода в теге <script>
— У тебя нет особого желания говорить о JavaScript, кроме как иногда жаловаться на него коллегам в курилке. Ты вообще его и за язык-то не считаешь
— jQuery — удобный инструмент и искренне тебе помогает в делах
— JavaScript написан в резюме одной строчкой наряду с Java, C/C++ и SQL
Диагноз:
Здоров. У тебя все хорошо,
1 уровень: «Я просто сижу там, где JavaScript-ят»
Симптомы:
— Тебя забавят замыкания в JavaScript, ты испытываешь легкую гордость от того, что понимаешь как они работают
— Ты раскладываешь JavaScript-код по файлам, поскачивал кучу плагинов к jQuery, думаешь об изучении AngularJS и чувствуешь успокоение и расслабление
— Читаешь мануалы по плагинам, в соседней вкладке браузера у тебя обычно порнушка
— jQuery — рулит и педалит, AngularJS отдается в голове звуками таинственного Туманного Альбиона
— Ты знаешь о том, что '3' — 2 == 1, но '3' + 2 == '32' и это вызывает у тебя негодование
Диагноз:
Все по-прежнему в порядке, но хитрый вирус JavaScript летает повсюду в воздухе. Береги себя и носи защитную маску.
2 уровень: «Я могу бросить когда захочу»
Симптомы:
— Ты разбираешься в прототипном наследовании. Тебе немного мерзко, но в целом терпимо
— AngularJS внедрен в домашний проект. Ты говришь начальнику что неплохо бы и в рабочем использовать
— Читаешь мануалы по AngularJS, попутно изучаешь TypeScript/CoffeeScript. Изредка с интересом почитываешь рекламные статьи, рассказывающие о магии JavaScript и о том, как некая компания X с ним счастливо живет
— jQuery тебя больше не заводит. Ты начинаешь использовать термины «MVW», «DSL», «DOM-дерево». JavaScript-объект называешь только «хэш»
— Видео навроде JavaScript WAT больше не вызывают бурных эмоций. Ты понимаешь как это работает и почему.
Диагноз:
Началось! Ты этого не замечаешь, но твой
Здесь ты начал испольовать npm
3 уровень: «Не вижу в этом ничего плохого»
Симптомы:
— AngularJS в продакшене твоего рабочего проекта. Не на всех страницах, но хоть так
— Ты осознаешь что фронтенд — целая отдельная часть системы и невозможно же её поддерживать силами backend-разработчиков. Говоришь об этом с начальником, получаешь недоумевающий взгляд
— Пишешь на TypeScript и нервно думаешь как бы автоматизировать сборку фронтеда. Читаешь статьи про grunt. Плотно знакомишься с опытом использования JavaScript в модных стартапах
— Коллеги, в основном совмещающие backend с допиливанием скриптов на страницы проекта, перестают понимать что ты говоришь и назначают тебя ответственным за все, что касается клиентской части. Из-за этого у тебя появляется легкое негодование и небольшая обида на них
— В резюме ты стираешь пункт JavaScript, и добавляешь новую секцию: Frontend
Диагноз:
Твоя болезнь прогрессирует. Ты этого, скорее всего, не замечаешь, но просто поверь мне — вирус уже обосновался в твоей голове. Отложи JavaScript, попиши на C, освой какой-нибудь игровой движок. Тебе срочно необходимо отогнать от себя мысли о JavaScript, чтобы сдержать развитие болезни. На этой стадии еще можно взять себя в руки и быть просто хорошим fullstack-инженером.
4 уровень: «Вы просто не понимаете сути»
Симптомы:
— Сильное желание говорить о JavaScript. В курилке ты с горящими глазами рассказываешь недоумевающим коллегам о том, что JavaScript можно запускать вне браузера. Обижаешься, когда они не считают это серьезным достижением
— Фронтенд рабочего проекта собирается отдельно, с использованием grunt и require.js. От этого тебе делается хорошо и приятно, появляется ощущение тепла и домашнего уюта. Коллеги не понимают что там происходит и почему именно так. На все вопросы отмахиваешься и отвечаешь нечто вроде «да там долго объяснять». Очень злишься, когда коллеги пишут что-либо в теге script
— TypeScript становится тебе тесноват
— Читаешь много концептуальных статей про будущее JavaScript. Узнаешь о существовании React, пробуешь его на домашнем проекте. Получаешь первый писательский опыт в комментариях к статье о React, находишь там поддержку и понимание
— Подумываешь съездить на конференцию по JavaScript — встретиться с единомышленниками
Диагноз:
Разжижение
5 уровень: «JavaScript — няшка. А вы все — быдло»
Симптомы:
— Пробуешь React на домашнем проекте. Полоскаешь
— TypeScript тебя сильно ограничивает в возможностях. Отказываешься от него не новом месте работы в пользу pure js
— Любого, кто напишет тебе про '3' + 2 незамедлительно называешь безграмотным быдлом, которое просто не может осилить язык. Для тебя это уже очевидно. Начинаешь считать, что любой человек, у которого JavaScript не является основным языком работы — просто органически не способен понять прототипное наследование. Это — для избранных
— Едешь на конференцию по JavaScript. Там тебе впервые показывают как за 20 секунд сделать сервер на Node.JS. Восторгаешься. Вирус, подпитавшись материалами с конференции откусывает ту часть
— Считаешь что VDOM — неочевидное и гениальное решение, которое может прийти только в самые светлые головы этого мира
Диагноз:
Болезнь подходит к необратимой стадии. Посмотри — вирус уже рушит твою жизнь. Немедленно достань учебник по C++ и выполни десяток-другой задач. С тобой становится невозможно общаться! Ты агрессивен и съехал с катушек. Я знаю, что ты в это не веришь, но окружающие всё видят.
Ты начал использоват Node.JS
6 уровень: «Это полноценный технический стек!»
Симптомы:
— Считаешь что весь web скоро перейдет на изоморфный рендеринг. Классические подходы устарели, а лично ты — стоишь на пороге технологической революции. Меняешь в резюме заголовок на «JavaScript-профессионал»
— Раз за разом запускаешь сервер на Node.JS. Проверяешь его на самых разных задачах — блог, аналог твиттера, todo-лист,
— Любой эксперимент начинаешь с установки webpack-а, react-а и еще десятка пакетов. В процессе скачивания зачарованно смотришь на монитор
— Забываешь зачем нужны SQL-базы. Искренне не понимаешь почему на mongodb нельзя делать вообще все. Авторов видео mongodb is web scale считаешь неграмотными толстыми троллями
— Асинхронные операции в Node.JS для тебя — cutting edge. Ты полностью уверен, что ни в одном другом языке кроме как JavaScript это невозможно и никаким другим фреймворком кроме Node.JS это не поддерживается
Диагноз:
Сильное повреждение головы. Картина мира капитально нарушена. Ну вот, это случилось. Мы тебя предупреждали. Сейчас с тобой уже невозможно дискутировать — просто поверь на слово, что надо остановиться. Перестань этим заниматься и поступи снова в университет. Просто поверь — так будет лучше.
7 уровень: «Мир должен знать!»
Симптомы:
— Пишешь свою первую статью об успешном внедрении Node.JS для решения, как тебе кажется, очень важных задач в вашей компании. В комментариях грубишь всем, кто посмеет усомниться в твоем успехе
— Наотрез отказываешься слушать про другие языки и фреймворки. Предпочитаешь узнавать о них из разговоров с друзьями. Уверен, что C++ устарел и скоро его перестанут использовать. Java/C#/VB — это enterprise-языки и в них нет ничего кроме бессмысленного нагромождения паттернов, а работают они медленно потому что в них нет асинхронных операций. Вместо любых аргументов, что это не так — слышишь белый шум
— JavaScript уже давно для тебя идеален. В нем нет недостатков, а если кто-то считает, что они есть — то только потому что этот кто-то не может открыть документацию и почитать, о чем ты ему незамедлительно сообщаешь
— Социальная активность возвращается. Правда, ты не общаешься ни с кем, кто не входит в JavaScript-тусовку. Любого, кто задает тебе вопрос по JavaScript снисходительным тоном отправляешь «читать книжки» и упрекаешь в непонимании очевидного
— Ты стал писать меньше кода. В основном ты проводишь время в чтении статей, расхваливающих JavaScript и пишешь одобрительные комментарии под ними. Называешь это «обмен эксперными мнениями» и «узкоспециальной профессиональной дискуссией»
Диагноз:
Критическое поражение
8 уровень: «Вся индустрия только и была создана для JavaScript»
Симптомы:
— Для тебя в JavaScript-е лучшие пакетные менеджеры. Ты абсолютно уверен, что системы должны собираться из как можно более мелких пакетов по 10 строчек, а любая модульная декомпозиция строится по принципу «меньше модуль — значит лучше»
— Считаешь что статическая сильная типизация — это тупиковая ветвь развития. Все более-менее типизированные языки скоро вымрут из-за своей негибкости и перегруженности. Ничего не должно ограничивать настоящего программиста — в том числе и система типов. Наследование, интерфейсы, абстрактные классы — пережиток прошлого, которые только все усложняют
— … а JavaScript — вообще единственный язык, который избавляет человека от таких условностей. Он стоит на первых местах во всех рейтингах индустии, развивается семимильными шагами и ничего кроме него не жизнеспособно. Ну может разве что TypeScript. И тот нужен только тем болезным, которые не осилили pure js
— Ты забыл слово «многопоточность». Считаешь что это что-то уровня ассемблера и тебе это знать не нужно, ведь Node.JS полностью тебя от этого абстрагирует. Ты уверен что так и должно быть, а люди, которые в этом разбираются — или носители ненужной и бесполезной информации, или разрабатывают операционные системы
— Ты чувствуешь, что вся IT-индустрия развивалась как-то неправильно. В ней много неуместных усложнений, которые никому не нужны. Ты искренне уверен, что все должно быть гораздо проще и что все люди, которые разрабатывали теоретическую базу для программирования — очень глупые, раз этого не понимали. И за что им только докторских степеней пораздавали? Ты бы справился гораздо лучше
Диагноз:
Вирус целиком съел твой
Автор: Pavel B. Novikov