С точки зрения новичка

Похоже, что многие профессиональные разработчики устали от состояния программирования Javascript в 2016 году. Недавно появилась эта статья, которая утомляет меня, просто чтобы (попытаться) ее прочитать. А Куинси Ларсон пишет немного поощрения продолжать для тех, кто устал от усталости от Javascript. Даже Эрик Клеммонс написал почти год назад об истощении, которое приходит с попытками эффективно встроить Javascript (особенно в большом масштабе) со всеми фреймворками, генераторами, шаблонами, API и т. Д., Которые имеют быть настроенным и поддерживаться в любой данной среде разработки. Я вижу множество статей и сообщений на Medium в Твиттере, которые либо рекламируют x как следующий важный аспект в разработке Javascript, либо оплакивают разочарование всей техосистемой Javascript как безнадежно раздутой и несходной.

В этой статье не говорится, что [insert Angular, React, Node, Ember и т. Д.] является [лучшим / единственным] решением ваших проблем с Javascript. Также не расскажем, как исправить перенасыщение неоптимальными API. Почему? Поскольку у меня нет решения этой проблемы, больше, чем многие более опытные разработчики Javascript смогли предложить адекватное решение. (Возможно, это раздувание техносистемы указывает на то, что природа Javascript такова, что его нельзя исправить, и нам просто нужно выбрать решение, которое лучше соответствует нашим потребностям. , даже если это не самое идеальное решение.) Нет, этот пост - скорее напыщенная речь или статья «вот моя точка зрения по этому поводу, на случай, если это поможет любому, кто чувствует то же самое, что и я».

Перспектива новичка

Я хотел бы начать с того, чтобы прояснить, кто я, а кто нет. Я не профессиональный разработчик. Я работаю в аптеке днем, а в свободное время изучаю веб-разработку. (Я хотел бы получить должность разработчика в будущем, на случай, если рекрутеры читают. * Подмигивает, подмигивает *) Я никогда не использовал [снова вставьте Angular, React, Node, Ember, npm, Bower, Browserify и т. д.]. Мой опыт программирования в основном ограничен HTML, CSS, Javascript, Ruby / Rails и Bash, и я бы сказал, что нахожусь на довольно базовом уровне в каждом из них (с большим опытом работы с HTML, CSS и JS. ). При этом я думаю, что взгляд новичков в этом вопросе может поучить более опытных разработчиков, которые пришли к Javascript в то время, когда технологическая система была более простой и понятной. Итак, вот мой.

Javascript пугает, пугает и вызывает клаустрофобию. Не собственно Javascript. Даже Javascript + jQuery. Когда я искал, где мне начать изучать веб-разработку, и спрашивал людей об их предложениях, главный совет, который я получил, был: «Javascript преобладает в отрасли, и Ruby on Rails не сильно отстает. Сосредоточьтесь на хорошем изучении Javascript, и вы добьетесь успеха на пути к разработке ». Поэтому я погрузился в изучение JS и jQuery, будучи уверенным, что смогу посвятить все свое учебное время одному языку, пока не смогу собрать достойное публичное портфолио.

Но это погружение немного похоже на прыжок в кроличью нору Алисы: снаружи вы не видите, насколько глубока кроличья нора. Я начал изучать собственно Javascript и дополнять его jQuery, но потом наткнулся на бесчисленное количество ссылок на React, Angular, Ember и так далее. И я смотрел на объявления о вакансиях, связанных с веб-разработчиками, и видел, что они отмечены как требования для многих должностей разработчиков. Дерьмо. Тот совет, который мне дали некоторое время назад, теперь кажется слишком упрощенным. Теперь мне нужно знать не только Javascript + jQuery, но и npm, Node, Angular / React / Ember, Bower, Browserify, Gulp, Grunt, Webpack, JSON, Babel, ES2016 / ES6 / ES5 (и варианты функциональности для каждого , чтобы при необходимости можно было выполнять полифил), Typescript, Flux,… * делает глубокий вдох *. Плюс как их настраивать, импортировать модули, конвертировать существующие проекты и т. д. И я даже не знаю где и как начать. Или когда использовать какой. Или даже почему фреймворк важен.

Все это создает своего рода огромную ментальную клаустрофобию - бывают моменты, когда я чувствую, что нахожусь в когнитивной шахте в сотнях футов под землей, и все скалы надо мной рухнули. И изучение каждой новой технологии похоже на расчистку камня, но я больше не увижу солнечный свет, пока не изучу все API и фреймворки. И я определенно не могу устроиться на работу веб-разработчиком, пока не дополню свое резюме всеми необходимыми технологиями и не буду иметь как минимум 3-5 лет опыта работы с каждой из них (не говоря уже о том, что React существует только с 2013 года) и создал портфолио, которое адекватно демонстрирует, что я действительно знаю, как использовать каждую технологию.

Затем возникает синдром самозванца, и этот голосок в моей голове начинает говорить что-то вроде: «Ты никогда не сможешь выучить все эти вещи и быть достаточно хорошими во всех них». быть успешным веб-разработчиком », или « Люди, действительно разбирающиеся в этом материале, имеют степень магистра или прирожденный талант; вам следует просто бросить курить и заняться тем, что вам больше подходит ». И (честное признание): я боюсь принимать участие в обсуждениях на Gitter, веб-форумах, Github, или (не дай Бог!) лично, из боязни задать неправильный вопрос, или задать неправильный вопрос, или из-за снисходительности ответа более опытного JSer-а, потому что мой вопрос слишком «базовый» для публичного обсуждения (настоящий комментарий по одному из моих вопросов о StackOverflow):

В момент представления текущего Вопроса проблема описывается как Я все еще довольно неопытен с замыканиями, обработчиками событий и этой привязкой, поэтому, возможно, кто-то с большим опытом сможет пролить свет на это для меня. См. Stackoverflow.com/help/how-to-ask

Github и участие с открытым исходным кодом

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

Вы скажете, что это здорово. В чем проблема?

Допустим, я просмотрел список впервые обнаруженных ошибок и нашел одну помеченную как Javascript, которую хочу исправить. Итак, я захожу в репозиторий, просматриваю файлы README и CONTRIBUTING.md и просматриваю базу кода, чтобы получить представление о ее структуре. В 9 случаях из десяти, когда я пытался внести свой вклад, меня удерживали от этого , прежде чем разветвлять проект и копаться в коде. Где меня сдерживают? В ДОПОЛНИТЕЛЬНЫХ или README (или аналогичных) документах.

Давайте посмотрим глубже, почему это так. Имейте в виду, что ошибки, помеченные как «только впервые», «низко висящие плоды», «легкие» и т. Д., Предназначены для работы участниками, у которых мало или совсем нет опыта работы с совместными проектами. Хотя это не всегда всегда, но часто те, у кого мало или совсем нет опыта участия и которых привлекают эти конкретные теги, также относительно новичок в изучении программирования в целом. Ради аргументации предположим, что они изучают Javascript менее шести месяцев. Они хотят внести свой вклад, но файл CONTRIBUTING выглядит примерно так: «Разветвите проект, клонируйте, перебазируйте, ответьте, настройте линтер, установите зависимости, установите Gulp, установите Bower, установите больше зависимостей, запустите базу данных, внесите изменения , запустить тесты, зафиксировать, нажать, сделать запрос на перенос, скрестить пальцы и молиться Богу, чтобы кто-то не обнаружил запах новичка в вашем коде ». Теперь, реально ли ожидать, что кто-то с опытом программирования на Javascript менее 6 месяцев поймет или знает, как делать все эти шаги? Вы действительно думаете, что кто-то с таким уровнем опыта хоть раз сталкивался с какой-либо из этих технологий? Что еще более важно, собираются ли они понять, что они делают и почему, таким образом, чтобы они могли владеть теми же инструментами самостоятельно? Скорее всего, нет.

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

В качестве побочного примечания: моя единственная критика репозиториев, которые делают это, - это если накладные расходы и усилия на настройку среды для вклада не являются относительно простыми для новых разработчиков, воздержитесь от маркировки проблем с помощью тегов, ориентированных на новичков. Если вы сопровождаете репо и у вас возникает соблазн обозначить проблему как «только для первого таймера» или что-то подобное, сначала спросите себя: собирается ли участник, впервые вносящий свой вклад, понять, как установить все зависимости, которые мы требовать? Собираются ли они быть подвержены Angular / React / Ember достаточно, чтобы иметь возможность перемещаться по нашей базе кода, чтобы исправить эту ошибку? Если вы не можете ответить на этот вопрос уверенным «да», не помечайте его для новичков. (Как бы то ни было, по этой причине я стараюсь вносить только опечатки / грамматические изменения.)

Помогите новичкам

Для тех из вас, кто является опытным профессионалом в Javascript, я хочу предложить вам помочь новичкам. Вы можете быть тем, кто программировал с тех пор, как Javascript был младенцем, или вы, возможно, пришли к Javascript 8+ лет назад, когда технологическая система Javascript была (в основном) ограничена прямым Javascript и jQuery. Вы, наверное, настолько погружены и свободно владеете языком, что на вас проклятие знаний. Возможно, вы забыли, что значит быть новичком, пытающимся осмыслить замыкания, this или прототипирование объекта. Но я умоляю вас остановиться на минутку и вспомнить, как это было, когда вы боролись с основами языка. Теперь добавьте к этой борьбе массу запутанных и конфликтующих фреймворков, наборов тестов, API, модулей и т. Д., Которые вы имели возможность решать один за другим после того, как уже свободно владели базовым языком . Имейте в виду, что у новичков, которые будут использовать Javascript в 2016 году, нет такой роскоши: перед нами стоит непростая задача - выучить базовый язык и все дополнения одновременно в большой запутанной куче. Мы сталкиваемся с дилеммой, когда рекрутер спрашивает: Что вы думаете о Ember / React / Angular? и опасения, что я предпочитаю базовую функциональность чистого Javascript - устаревший и неприемлемый ответ. Итак, помните, каково это - бороться с языком и фреймворками, и быть наставником для кого-то менее опытного.

А пока позвольте признать, что мы все страдаем от усталости от Javascript в тот или иной момент. Не будьте слишком строги к тем, кто предпочитает другие фреймворки или API, чем вы (возможно, у них еще не было возможности выучить ваш любимый), и постарайтесь помочь новичкам выбраться из шахты, чтобы они тоже могли увидеть и почувствовать солнечный свет Javascript, как и вы.