JavaScript

JavaScript


Первая редакция гайда для вкатывания в JS школьникам.


Я должен писать на эту тему.


Написать этот текст меня вдохновили успехи двух 16-и летних подростков из Кишинёва. Оба трудоустроены JS-макаками. Один на ваниле пишет плагины для говноконструктора за 1k$ в месяц, второй за 500$ кодит на реакте. Верю, что через три-четыре месяца к ним присоединится их сверстница из Фалешт, которой я займусь с июня.

Речь идёт о детях из неполных семей, которые вчера закончили девять классов средней школы и живут в нищей Молдове. Что в них такого особенного? Как им это удалось? Ведь на дваче сказали, что программировать это сложно, рынок труда переполнен, а фронтенд так распух от обилия используемых технологий, что жизни не хватит, чтобы выучить все необходимые фреймворки и библиотеки.

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


Делать уроки.


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

Ты можешь возразить мне, что ты умеешь читать, следовательно, база у тебя есть. Но это исключительно твоё субъективное мнение основанное на завышенной самооценке. Просто ты в определённый момент решил, что школа себя исчерпала и ничего полезного в ней нет.

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

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

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

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


Дрочить Кантора.


Это будет твоим первым учебником по JS, но надеюсь не первым по программированию вообще, хотя он с натяжкой подходит и на эту роль. Так будет сложнее. Читая Кантора, тебе придётся выяснить, что такое HTML и CSS, DOM-дерево, как веб-страничка обменивается запросами с сервером, как работать с дебагером и многое другое. Всё это там есть(точнее, там есть вообще всё необходимое - я это подчёркиваю), но если ты не сталкивался с этими понятиями раньше и плохо себе представляешь, как устроено веб-программирование и программирование вообще, пробираться через каждый абзац учебника будет чертовски трудно. Ну ты попробуй.

Любой язык существует не в вакууме, он работает с файловой системой, что-то читает из базы данных, посылает запросы на сервер, меняет структуру какого-нибудь документа(например HTML) или свойства его отдельных элементов, и т.п. Джаваскрипт может и делает это всё сразу, он оброс огромным количеством возможностей, библиотек и фреймворков. Я хочу, чтобы ты не заблудился и помнил, что в первую очередь, ты учишься программировать, программировать на ванильном джаваскрипте, а всё остальное как бы само собой прирастёт со временем.

Ты не планируешь стать верстальщиком, поэтому учиться верстать не надо. Надо уметь работать с готовой вёрсткой. Это значит всего лишь программно управлять DOM-элементами на страничке через простенький интерфейс.

И ты не планируешь(по крайне мере пока) стать React или Angular разработчиком, поэтому не спеши с изучением фреймворков. Они чуть менее, чем полностью состоят из сложных, незнакомых тебе концепций, призванных решать задачи, проблематику которых ты не в состоянии пока ещё даже осознать. Для этого нужна основательная теоретическая подготовка и практика. Фреймворки это не прихоть разработчиков, которых хлебом не корми, дай себе жизнь усложнить. Фреймворки были создан в ответ на задачи и проблемы, возникшие у программистов в процессе создания знакомого тебе современного интернета со всеми его веб 2.0 свистелками и перделками. Не зная и не понимая проблем и задач, которые призван решить фреймворк, как ты можешь научиться с ним работать?

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


Учиться писать асинхронный код.


Я хочу, чтобы ты сосредоточился на написании асинхронного кода и умел его писать с использованием всех возможностей JS, в первую очередь, промисов. Вот это самое важное. Фреймворки, библиотеки, вся хуйня малафья - это временное. Неизменно одно: взаимодействия с ресурсами(API, DOM, файловая система) происходят асинхронно и хорошей JS-макакой становится тот, кто умеет писать сложный, но внятный асинхронный код. Сраных коллбеков для этого явно недостаточно.

Всем своим малолетним кентам-вкатывальщикам я даю три одинаковых задания.

ToDo-list с использованием одного лишь jQuery, http://todomvc.com/ в помощь.

Парсер на node.js с использованием пакетов из npm, на промисах, обязательно с Promise.all. Ноду и нпм можно запустить под виндой.

Собственная реализация промиса. Хотя бы просто, чтобы работало, без заморочек с детальной реализацией всего функционала из стандартного объекта Promise. Достаточно сделать только then(возможности составлять цепочки - опционально).

У многих новичков возникает вопрос: как определить, что ты готов к попытке трудоустройства джаваскрипт-макакой? Даю на него предельно чёткий ответ: можешь попробовать устроиться на работу, если ты а) в состоянии уверенно решить все три задания выше б) умеешь писать асинхронный код с использованием промисов в) осилил хотя бы вводную статью по функциональному программированию г) знаешь основы любого популярного фреймворка. Для продвинутых и уверенных в себе, я бы рекомендовал попробовать связку из vue.js, redux и rxjs.

Ну и так ещё в общем я хочу кое-что сказать.


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


Я не очень люблю решать алгоритмические задачки и тесты, однако они часто встречаются на собеседованиях. Заведи себе аккаунт на codewars и заглядывай иногда туда, чтобы порешать самому и посмотреть чужие решения. Это особенно важно, если у тебя нет опыта программирования даже в школе на паскале. Дурацкую задачку на парсинг скобок (){}[] мне задавали на двух собеседованиях.

И научись проходить хотя бы один тест на знание ванильного джаваскрипта, а именно “perfection kills javascript quiz”. Может показаться, что вопросы в нём притянуты за уши, но на самом деле они призваны обнаружить у тебя понимание или непонимание важных особенностей языка.


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


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


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


Из книг, после Кантора, рекомендую JavaScript: The Good Parts. Основные источники информации это документация, статьи и ответы на стековерфлоу-подобных ресурсах.             

Report Page