Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Я должен писать на эту тему.
- Написать этот текст меня вдохновили успехи двух 16-и летних подростков из Кишинёва. Оба трудоустроены JS-макаками. Один на ваниле пишет плагины для говноконструктора за 1k$ в месяц, второй за 500$ кодит на реакте.
- Речь идёт о детях из неполных семей, которые вчера закончили девять классов средней школы и живут в нищей Молдове. Что в них такого особенного? Как им это удалось? Ведь на дваче сказали, что программировать это сложно, рынок труда переполнен, а фронтенд так распух от обилия используемых технологий, что жизни не хватит, чтобы выучить все необходимые фреймворки и библиотеки.
- Удивительно, как много хуйни о вкатывании в кодинг навыдумывали борщееды и неосиляторы, чтобы оправдать свои неудачи. Попытаюсь развенчать некоторые популярные мифы, рассеять страхи, вдохновить приунывших и рассказать желающим, как просто без задней мысли, регистрации и смс начать зарабатывать деньги, программируя на JS.
- Делать уроки.
- Представь, что мне поставили задачу, вместо тебя обучить программированию ребёнка из Африки, который всю жизнь пас коров и пил их мочу. Он и читать-то не умеет. Пришлось бы потратить немало времени, создавая базу у этого чувака, прежде, чем ему можно было бы что-то рассказать о языках программирования. На практике оказывается, что школьник не выполняющий домашку, не сильно отличается по уровню развития от такого пастуха и именно поэтому всю свою послешкольную жизнь проводит на схожих по интеллектуальным требованиям должностях.
- Ты думаешь, что, решение бессмысленных уравнений и задач не пригодится тебе в жизни или программировании(в котором математика, на самом деле, не нужна за исключением некоторых специфических областей). Но ты вспомни кочку, который напрягается в спортзале вовсе не для карьеры грузчика. Школа - качалка для мозгов, только тут всё гораздо сложнее. Скажем, бицепс ты можешь замерить рулеткой и оценить прогресс, а с собственным умом повторить этот трюк не выйдет. Так что у тебя нет способа наверняка оценить уровень интеллекта кроме сомнительных тестов. Надёжный способ узнать, нормально ли варит котелок - это опробовать его в сложном деле.
- И прежде, чем ты сможешь принять в свои анальные чертоги разума мощный елдак асинхронного программирования на джаваскрипте, тебе надобно разработать очече задачками попроще, например, из курса школьной математики. В противном случае, никакого удовольствия, только боль. Испытывая эту боль, возможно, ты решишь, что программирование не для тебя и это станет большой ошибкой. Возможно даже, что делать такие выводы войдёт в привычку и эта привычка угробит твою жизнь.
- Неудачники любят находить оправдания своим неудачам в причинах, которые никак от них не зависят, чтобы снять ответственность с себя. Именно таким образом они сохраняют целостность своего манямирка.
- Любой нищий даун до конца своих дней останется нищим дауном потому, что он умеет лишь те вещи, которым любого другого нищего дауна можно научить за две недели. Рулят не те, которых учат, а те которые учатся сами. Разжёвывают и кладут в рот знания только в начальных классах школы, во взрослой жизни в рот пихают нечто совершенно иное.
- Дрочить Кантора.
- Это будет твоим первым учебником по JS, но надеюсь не первым по программированию вообще, хотя он с большой натяжкой подходит и на эту роль.
- Читая Кантора, тебе придётся выяснить, что такое HTML и CSS, DOM-дерево, как веб-страничка обменивается сообщениями с сервером, как работать с дебагером и многое другое. Всё это там есть(точнее, там есть вообще всё необходимое - я это подчёркиваю), но если ты не сталкивался с этими понятиями раньше и плохо себе представляешь, как устроено веб-программирование и программирование вообще, пробираться через каждый абзац учебника будет чертовски трудно.
- Любой язык существует не в вакууме, он работает с файловой системой, что-то читает из базы данных, посылает запросы на сервер, меняет структуру какого-нибудь документа(например HTML) или свойства его отдельных элементов, и т.п. Джаваскрипт может и делает это всё сразу, он оброс огромным количеством возможностей, библиотек и фреймворков. Я хочу, чтобы ты не заблудился и помнил, что в первую очередь, ты учишься программировать, программировать на ванильном джаваскрипте под фронтенд, а всё остальное как бы само собой прирастёт со временем.
- И хотя ты будешь программировать для фронтенда, ты не планируешь стать верстальщиком, поэтому учиться верстать не надо. Надо уметь работать с готовой вёрсткой. Это значит всего лишь программно управлять DOM-элементами на страничке через простенький интерфейс. И ты не планируешь(по крайне мере пока) стать React или Angular разработчиком, поэтому не спеши с изучением модных технологий. Они чуть менее, чем полностью состоят из сложных, незнакомых тебе концепций, призванных решать задачи, проблематику которых ты не в состоянии пока ещё даже осознать. Для этого нужна основательная теоретическая подготовка и практика. Фреймворки это не прихоть разработчиков, которых хлебом не корми, дай себе жизнь усложнить. Фреймворки были созданы в ответ на задачи и проблемы, возникшие у программистов в процессе создания знакомого тебе современного интернета со всеми его веб 2.0 свистелками и перделками. Не зная и не понимая проблем и задач, которые призван решить фреймворк, как ты можешь научиться с ним работать?
- Куча неосиляторов обломали себе зубы на попытках изучить какой-нибудь React(это даже не фреймворк, а просто библиотека)+Redux, минуя усвоение фундаментальных знаний о языке и практику программирования на нём. Им кажется, что из-за возросшего кол-ва библиотек и фреймворков, вкатиться новичку во фронтенд с каждым годом всё сложнее и сложнее. Этим дебилам невдомёк, что нет абсолютно никакой необходимости учить весь этот зоопарк. Это невозможно, более того - строго противопоказано. Общее правило таково, что нужно учиться разбираться с документацией, а не задрачивать тысячи гайдов.
- В тредах высказывалось мнение, что Кантор слишком сложный, а его задачи на закрепление материала - херня. Мне не хотелось бы заниматься сравнительным анализом учебников или, тем более, разводить срачи. Тебе ничего не мешает самостоятельно выбрать подходящий лично для тебя учебник или записаться на платные курсы, если Кантор вдруг не зайдёт. Но лучше хорошенько перед этим подумай, действительно ли учебник так плох или ты просто-напросто ленивая обезьяна?
- Наверняка задачи почти из любого учебника программирования покажутся новичку хернёй и он всё время будет задаваться вопросом, а где же мне это пригодится и как. Я не раз слышал мнение, что задачки эти непонятны своей оторванностью от реальности и это нагоняет скуку. Мол, хотелось бы написать что-то работающее, что-то реальное, на что можно было бы посмотреть. К сожалению, компьютер устроен не так, что в языках программирования есть кнопка “сделать пиздато” и тебе просто не показывают её на первых страницах учебника.
- Суть программирования как раз и заключается в том, чтобы объяснить тупому кремньевому болванчику, что такое пиздато и как это сделать. Гораздо подробнее, чем ты бы объяснял даже очень сложную задачу другому человеку, который имеет обширные возможности многое додумывать(с непредсказуемым результатом). И тебе ещё повезло, что объяснения для компьютера носят вид слов, символов и чисел, а не дырок в перфокартах.
- Приложение, которое выводит в консоль “хеллоу ворлд” делает что-то вполне реальное, просто этого чего-то очень немного и это совсем не круто. Но ведь это просто потому, что написать много чего-то крутого ты пока не можешь, хотя тебе и очень хочется. Ты не знаешь как, ты не знаком с инструментами. Сложная задача, где надо было бы сделать что-то реальное поставила бы тебя в тупик, поэтому пользоваться инструментами языка учатся на простых примерах. Позже, ты обнаружишь множество способов применить их на практике.
- Конечно ты всегда можешь попробовать наебать систему и зайти с другого конца. Возьми кусок кода из реального приложения и попробуй в нём разобраться. Или поставь себе сложную задачу, сразу напиши пет-проект, который я предложу ниже или любое из заданий. Просто без задней мысли начинаешь кодить и гуглишь, что непонятно по ходу дела. Но помни, какие у этого способы могут быть последствия. Это может форсировать твоё обучение, а может из-за неудачи отбить желание заниматься программированием на всю жизнь или превратить тебя в быдлокодера, который до конца своих дней будет бездумно копипастить код со стековерфлоу(так, кстати, работает куча народу).
- Учиться писать асинхронный код.
- Скорее всего, тебе ещё не знакомо это понятие, если ты только решил вкатиться в IT. Но я хочу, чтобы разобравшись с Кантором хотя бы на три четверти, ты сосредоточился на написании асинхронного кода и умел его писать с использованием всех возможностей JS. В первую очередь, промисов и синтаксического сахара к ним - async/await. Вот это самое важное. Фреймворки, библиотеки - это временное. Неизменно одно: взаимодействие с ресурсами, будь то API, события или файловая система, происходят асинхронно. Скорее всего, если скрипт делает что-то полезное, а не просто складывает между собой переменные или сортирует массив, то его код будет асинхронным. Хорошей JS-макакой становится тот, кто умеет писать сложный, но внятный асинхронный код, а не тот, кто прошёл все курсы по всем модным фреймворкам. Ты должен научиться ворочать в голове асинхронными конструкциями любой величины и сложности.
- Всем своим малолетним кентам-вкатывальщикам я даю три одинаковых задания.
- 1. ToDo-list с использованием одного лишь jQuery(http://todomvc.com/ в помощь). Но не забывай, что jQuery это вчерашний день и удел быдлокодеров, которые штампуют менюшки и лендинги, а ты стремишься научиться программировать одностраничные приложения(SPA) на многие тысячи строк кода. Однако не факт, что тебе не придётся поддерживать(особенно на первых работах) кучу легаси говнокода как раз на jQ. Поэтому ознакомиться с этой библиотекой будет не лишним. Если у тебя уже есть мнение по этому поводу и ты категорически против jQ, ничего не мешает тебе выполнить задание на ванильном джаваскрипте, по ссылке выше есть и такой пример.
- 2. Парсер на Node.js с использованием пакетов из NPM, на промисах, обязательно с использованием Promise.all. Необязательно для этого красноглазить и поднимать себе линукс, хотя какой-нибудь убунту в виртуалке был бы неплохой практикой(и это не так уж сложно сделать). Ноду можно запустить под виндой. В качестве альтернативы можешь запилить бота, который работал бы с любым API(вк, двач - что сердцу ближе). Суть задачи в том, чтобы ты научился строить цепочки из промисов, когда для продолжения выполнения скрипта, нужно дождаться выполнения нескольких асинхронных запросов, поэтому использование Promise.all обязательно для выполнения этого задания. Нода не является обязательной для изучения и я бы не советовал новичку начинать свою карьеру с бэкенда на джаваскрипте. Просто на ноде удобно решать некоторые задачи, когда ты не знаешь другого языка и тебе нужен доступ к файловой системе или чему-то ещё, чего нет в браузере.
- 3. Собственная реализация промиса. Хотя бы просто, чтобы работало, без заморочек с детальной реализацией всего функционала из стандартного объекта Promise. Достаточно сделать только then(возможности составлять цепочки - опционально).
- Как определить, что ты готов к попытке трудоустройства джаваскрипт-макакой?
- а) ты в состоянии уверенно решить все три задания выше
- б) осилил хотя бы вводную статью по функциональному программированию
- в) знаешь основы любого популярного фреймворка
- г) можешь пройти тест “perfection kills javascript quiz” хотя бы на 10/14(в идеале 13/14). На первый взгляд новичку может показаться, что вопросы в нём притянуты за уши, но на самом деле они призваны обнаружить у тебя понимание или непонимание важных особенностей языка. Я практически уверен, что если ты осилишь собственную реализацию промиса, то и тест сможешь пройти(ровно, как и наоборот). В качестве справочника всё это время, кроме Кантора, можно использовать javascript garden.
- Ну и так ещё, всякое.
- Если ты встретил много незнакомых слов, типа, фреймворка или промиса и испугался - ты это брось. Времени от начала дрочки Кантора до момента, когда ты сможешь написать свой промис или поймешь зачем нужны чистые функции - полгода занятий с нуля для типичного цыганорумынского девятиклассника. Это тебе воображаемая шкала для оценки собственных возможностей. Насколько надо быть хренового мнения о себе, чтобы даже не попробовать разобраться?
- Заведи себе аккаунт на codewars и заглядывай иногда туда, чтобы порешать самому и посмотреть чужие решения. Это особенно важно, если у тебя нет опыта программирования даже в школе на паскале. Дурацкую задачку на валидацию парных скобок (){}[] мне задавали на двух собеседованиях. Терпеть не могу алгоритмические задачки, но их любят работодатели, их бодрое решение однозначно добавит тебе очков на собеседовании, а кроме того, это отличный способ попрактиковаться, когда ты не можешь выдумать себе, чем заняться, а приступить к какой-нибудь сложному заданию не хватает навыка.
- Не отчаивайся, если что-то не получается, потому что не получаться будет всё. И не жди, что когда-то в твоей карьере наступит момент, когда ты будешь безошибочно набирать идеально работающий код и знать ответы на все вопросы. Всегда что-то будет идти не так, ты будешь много тупить над элементарной хернёй, вообще будешь много тупить и ничего не будет работать - это нормальное состояние даже для опытного программиста, так что - привыкай. Учись решать возникающие проблемы с использованием документации и учись взаимодействовать с опытными разработчиками, которые не против поотвечать на вопросы и помочь тебе. Учись формулировать эти вопросы, чтобы не злить опытных разработчиков своим тупняком. За каждым тупым вопросом стоит лень и нежелание самостоятельно найти ответ, что очевидно для отвечающего. Хорошо сформулированный вопрос, это почти всегда готовый запрос в гугол и решение по первой же ссылке в выдаче.
- Из книг, после Кантора, рекомендую JavaScript: The Good Parts. Основные источники информации это документация, статьи и ответы на стековерфлоу-подобных ресурсах. Алсо, добро пожаловать в JS-тред в програмаче.
- Если ты научился писать асинхронный код, освоил Кантора, решил с десяток задач на codewars и вообще выполнил всё из списка выше, и теперь стоишь перед выбором стека, в качестве первого фреймворка для изучения, я бы рекомендовал Vue.js из-за его небольших размеров и документации на русском. Также настоятельно советую почитать о Redux и RxJS, а особо продвинутым и любопытным задротам об Elm.
- На данном этапе твоих знаний и навыков должно хватить, чтобы самостоятельно найти себе работу на сайте по поиску работы твоего города. Искать нужно вакансии джаваскрипт, а не фронтенд разработчика потому, что последнее подразумевает вёрстку. Полностью избавиться от неё может быть и не получится вовсе, и на первых этапах тебе придётся верстать что-то простое, но в хороших конторах есть строгое разделение на программистов и верстальщиков. Твоя задача-максимум попасть в такое место.
- В удалёнку на первых парах вкатиться будет крайне сложно или вообще невозможно из-за отсутствия так называемого опыта коммерческой разработки. Получить его можно фрилансом или работая в офисе.
- , поэтому сперва придётся поработать в офисе. Можно попробовать выучить английский, таким образом получить доступ к глобальному рынку труда и повысить свои шансы на успех. Но такой способ я бы рекомендовал только очень трудолюбивым и прошаренным задротам у котороых нет работы в городе и возможнсти переехать в город покрупнее. Но даже со знанием английского начинать энивей придётся с говнофриланса.
- В трудоустройстве сильно поможет наличие нескольких или хотя бы одного пет-проекта. Понимаю, что с фантазией у тебя не очень, поэтому можешь позаимствовать у меня так же не оригинальную идею и реализовать клон приложения OneTab для хрома.
Add Comment
Please, Sign In to add comment