Мои рассуждения на тему Как учиться программировать на JavaScript
Дисклеймер: я ни в коем случае не хочу сказать, что именно так и надо учиться. Но за плечами 13 лет опыта и не один год активности в сообществах, так что рассуждения будут не на пустом месте. Но если вы уже состоялись как программист, скорее всего вам будет не интересна данная публикация.
Немного о себе
Скажу сразу: я неправильный программист. У меня нет никакого образования кроме школы, а в программирование я подался в возрасте 25 лет. У меня даже нет четкого понимания что я правильно программирую, а что нет. Но несмотря на это, уже более 13 лет я программирую. Я по-прежнему не очень умею в различные математические формулы и т.п., но в целом получается создавать программные продукты (и, к слову, вполне прилично зарабатываю). Вот и учить я буду может не правильно, но обязательно с упором на то, чтобы начинать в скором времени зарабатывать деньги.
Рассуждения о сути программирования
Наверно, надо придумать здесь какой-то другой термин на замену «программированию». Во всяком случае я вряд ли смогу научить именно программированию. Но, как мне кажется, надо просто разобраться в целях. Вспоминаем классическое «вам шашечки или ехать?».
Чаще всего я вижу следующую картину: с одной стороны все говорят о том, что программистом стать — это очень сложная задача, требующая кучи времени и из огромного количества желающих выходят всего лишь чуть ли не единицы программистов, а с другой стороны дикий дефицит и все кричат «нам не хватает программистов!». И здесь же еще один парадокс: мало кто вообще понимает по каким критериям оценивать программистов (что это вообще программист). Я думаю, что проблема тут в том, что до сих пор не выработана система правильной постановки задач. В какой проект не посмотри — нужен какой-то фантастический персонаж, который умеет все, что надо. Но такого не бывает. Сейчас даже в рамках одного только JavaScript столько технологий наплодилось, столько подходов, что в какой проект не окунись, гарантированно найдешь то, с чем не сталкивался. И вот и получается, что какой-нибудь матерый спец с 10-летним стажем может еще себе позволить подключиться к проекту, из расчета, что знает точно многое, а чего не знает — доучит. А что делать тем, кто еще и пары лет опыта не имеет? Скажу точно: для таких — почти безнадега.
В итоге огромная пропасть существует между джунами и сеньорами. Практически никто не хочет брать джунов на работу, как минимум хотят мидлов (а лучше сеньоров, но не за дорого). А откуда набраться мидлам и тем более сеньорам, если джунов никуда не берут?
И как мне видится, тут есть два пути:
- Заказчики (работодатели) научатся дробить проекты на правильные подзадачи, сумеют организовать правильную командную работу (возьмут толкового сеньора, который имеет огромный опыт, набил уже кучу шишек, и вот на этом проекте уж точно сможет сделать все правильно), и тогда появятся простые задачи для джунов и можно будет их брать массово на работу.
- Самим программистам рассмотреть правильное развитие рынка, вычленить востребованные технологии и сосредоточиться на изучении именно этих технологий, чтобы лучше спозиционироваться на рынке.
Первый вариант я, конечно же, привел чисто риторически. Даже если такое и произойдет, это будет исключением из правил и на всех джунов не хватит.
А вот второй вариант очень даже реален. В свое время, когда я еще программировал на php, я сосредоточился на MODX и довольно долго сидел на этом движке. И хотя это не самый популярный движок, но все же вокруг него был сформирован рынок, а я сумел на этом рынке зарекомендовать себя экспертом, и с заказами проблем у меня не было. И хотя я уже года три с ним не работаю, до сих пор поступают заказы.
Вот и с JS у меня мысль: не пытаться изучить все необходимое. Если вы будете пытаться браться за любой проект, всего необходимого вы тогда просто не изучите. А сосредоточиться на каком-то определенном стеке, в рамках которого еще и может получиться вычленить отдельные профили (чтобы еще сильнее сузить для себя профиль обучения).
Здесь наверняка многие адепты программирования меня наругают, мол «Чему ты учишь новичков?! Потом наплодится куча быдлокодеров, которые только и смогут что позорить отрасль!». Но я здесь как мантру повторю: «Вам шашечки или ехать?». Мне совсем не понятно, почему программирование пытаются возвести в какой-то мифический ранг? Почему, если программист, то надо быть богом, а вот простым чернорабочим нельзя быть? Есть полно задач, которые не требуют семи пядей во лбу, но которые требуют определенных знаний. Если человек освоит эти необходимые знания, может он и не станет еще программистом в том смысле, как от него ожидают «отцы». Но этот человек вполне может получить работу и получать свою зарплату. А со временем человек будет получать опыт и расти профессионально дальше.
Повторюсь: не пытайтесь стать суперхацкером. Для начала достаточно научиться тому, чтобы решать какие-то определенные задачи, начать зарабатывать деньги хотя бы для того, чтобы с голоду не умирать. А опыт придет со временем. Когда вы уже получаете зарплату, можно развиваться спокойно, сколько душе угодно. А пока у вас нет еще ни того, ни другого, получается замкнутый круг: нет опыта, чтобы понять в каком направлении лучше развиваться и как скоро это начнет приносить денег, чтобы потом можно было получать необходимый опыт.
В данном случае я считаю, что без менторства просто не обойтись. То есть нужен тот, кто будет направлять, кто скажет: сейчас хорошие перспективы изучать такой-то стек, потому что он покрывает многие задачи и на него уже появляются вакансии на том же hh, так что если быстро освоишь необходимый минимум, имеешь шанс в скором времени устроиться на работу.
Итак, какой же стек я предлагаю выбрать?
Git
Просто на всякий случай отмечу, хоть это уже и само собой разумеющееся. Без него вы просто не сможете в командную работу.
TypeScript
TypeScript — это не полноценный самостоятельный язык, а, по сути, надстройка над JavaScript, которая вводит типизацию в этот нетипизированный язык.
Вообще, я всегда был за то, чтобы учить выбранный язык в чистом виде, и только после этого переходить к каким-то готовым решениям (библиотекам и т.п.). Но в случае с TypeScript у меня мнение поменялось. Дело в том, что если мы говорим об обучении с упором на то, чтобы как можно быстрее влиться в коммерческую разработку, надо понимать, что априори мы рассчитываем на командную работу. Обучаясь в этом направлении, вы очень нескоро еще сможете взять целый проект в свои руки. Вместо этого вы будете работать с другими специалистами, совместно выполняя задачи. Но даже если вы сами будете тянуть какой-то проект, современный JS устроен так, что своего кода пишется минимум, а бОльшая часть проекта — это сторонние компоненты. Так вот, работая с большим количеством сторонних компонентов, у вас будет постоянная головная боль: Какие сущности в этих компонентах есть? С какими параметрами их можно вызвать (сколько параметров, какие типы)? Что в результате их выполнения ожидать? Вот если писать на чистом JS, вам постоянно надо будет держать это все в голове, все это знать, или постоянно сидеть в сторонней документации (которой может еще и не быть).
В случае же работы с TypeScript, вы как будто работаете не один, как будто кто-то сидит в вашей IDE и постоянно помогает вам в написании кода, следя за тем что и как вы пишете. И если вы что-то пишете не то, TS вам подсказывает, типа «Здесь ожидается логическая переменная, а ты строку пытаешься скормить» или «здесь условие никогда не выполнится, потому что ты пытаешься жестко сравнить число со строкой, а они никогда друг другу не равны» и т.п. То есть здесь смысл в том, что вы учитесь не тому «что делать», а тому «как делать». И это на самом деле сильно проще. Вам коллега ставит задачу «Забери по АПИ курсы валют и скорми массив числовых значений мне в компонент», и это уже довольно четкая задача, потому что вам уже определено условие: «дай массив чисел». Вы можете здесь ошибиться логически, к примеру, взяв не те числа не из того АПИ. Но вы не сможете скормить не массив, или массив не чисел. То есть решив, как вам кажется, задачу, получив результат и попытавшись отдать решение коллеге, уже IDE вам частично проверит результат, до того, как вы потревожите коллегу.
С typescript легко можно играться в playground. Вот пример.
Мой вердикт: если вы хотите в JavaScript, то изучайте сразу TypeScript. Вот прям сразу. И тогда вы сэкономите много своего времени, а более качественный код вы начнете давать довольно скоро.
React
Про React очень много написано и наверняка все слышали. Так же наверняка слышали и про другие библиотеки типа Vue, Svelte и т.п. Не хочу разводить холивар, но буду советовать выбирать именно React. Поймите правильно: я советую то, с чем сам работаю и что хорошо знаю. Так повелось, что я пишу на Реакт и знаю, что его хватает на большинство задач. А раз тема топика — на чем сосредоточиться по минимуму, чтобы в скором времени выйти на работу, говорить про все мы тут просто не можем.
Styled-Components
Само собой веб-интерфейсы — это JS+HTML+CSS. На чистом CSS уже давно никто не пишет, чаще используют препроцессоры типа SASS, LESS и т.п. Но я советую все же не изучать эти технологии, а сразу изучать styled-components. По моему опыту эта технология гораздо лучше подходит для использования в TS+React -проектах, так как получается более качественно типизацию проработать и гораздо проще работать с вложениями, оперируя не только классическими селекторами, но используя вместо селектором сами компоненты. Это позволяет более четко контролировать целостность проекта.
GraphQL
GraphQL довольно плотно устоялся на рынке API и лично я сейчас не работаю ни с чем, кроме как с GraphQL. И уверяю вас, что даже банки и прочие крупные организации, обновляя свой стек, все чаще выбирают именно эту технологию. Плюс использования ее в том, что когда вы пишете фронт и API-запросы, вы GraphQL схема помогает вам формировать запросы, подсказывая что и в каком виде можно запросить, и сообщая о синтаксических ошибках, если они были допущены. В добавок в одном запросе можно получать связанные данные на несколько уровней (если на бэке граф правильно приготовлен), что сильно упрощает работу с множеством запросов.
Next.JS
Не все проекты обязательно крупные и пишутся с нуля (хотя сейчас с нуля вообще уже мало что пишется, даже в очень крупных компаниях). Есть спросы и на простые сайта. А простые сайты должны не только просто работать, но и должны хорошо индексироваться поисковиками (то есть обязательно поддерживать качественную работу в режиме SSR (Server-Side-Rendering)), иметь высокие очки производительности (то есть конечные скрипты должны собираться с учетом лучших практик) и т.п. Поверьте, пытаться реализовать все это самостоятельно — очень серьезная задача, требующая огромного опыта и трудозатрат. Вместо этого советую взять Next.JS.
Next.JS — довольно популярный и уже довольно взрослый веб-фреймворк на JS+React плюс все остальное необходимое (включая перечисленные выше технологии). Есть много примеров реализации с применением различных технологий (включая GraphQL, Prisma, Nexus, Styled-Components и т.п.). На нем нельзя просто так сделать вообще все, но он вполне годится под 90%+ современных проектов. К тому же у него отличная документация и активное сообщество (даже в телеге есть очень активное русскоязычное сообщество, которое легко гуглится).
То есть если его взять, можно буквально в считанные дни сделать средненький сайт. А если у вас проект сильно сложнее, то все равно Next.JS наверняка пригодится, потому что он умеет не только в роутинг обычных HTML-страниц, но и можно выстраивать всевозможные API, при чем не только GraphQL. В общем, это такой мощный швейцарский нож с zero-configuration.
Резюме
Да, в сумме, перечисленные выше технологии — это совсем не мало. Но повторюсь — их достаточно для реализации многих проектов. И стратегия здесь следующая: если несколько человек будет изучать один общий стек технологий, то можно объединяться для реализации конечных проектов. И пусть каждый сам по себе не будет знать всего, все же можно разделять на более узкопрофильные задачи и каждый в отдельности может прокачиваться по более ему понравившемуся направлению (кто-то в React, кто-то в Styled-Components, кто-то в GraphQL). И на выходе получать комплексный качественный продукт. Нужен лишь хотя бы один боле менее опытный специалист, который понимает в целом как все это надо делать, который сможет поставить задачи, проверить результат, дать советы и т.п.
Но одной теории недостаточно. В своих размышлениях я пришел к тому, что в реальности практически невозможно создать какой-то четкий трактат, которому можно следовать и развиваться уверенно. Технологии постоянно меняются. Я рассчитываю на то, что приведенный выше список будет актуален хотя бы год-два. Но далее не известно. И расчет на то, чтобы обучение перспективным технологиям не занимало более трех месяцев, чтобы потом можно было хотя бы год-полтора работать с повышением з.п., а потом, в случае чего, взять месяц-два на перепрофилирование, если потребуется. Но при этом надо будет иметь возможность постоянно держать руку на пульсе в плане изменений течений в рынке и появления новых учебных материалов.
В итоге я решил, что для этого необходим ресурс, на котором были бы уроки, справочник технологий, проекты с задачами с указанием требуемых технологий и их уровней, обсуждение всего этого и т.д. в таком роде. Собственно говоря, я попытался реализовать такой апгрейд на своем сайте и многое уже сделано и в целом протестировано. Уже сейчас несколько человек обучаются и демонстрируют вполне нормальный прогресс. Вот я и решил, что хотя еще не все сделано, но «лучшее — враг хорошего». Уже сейчас проект выполняет многие задачи в плане совместного обучения. Если вы хотите тоже учиться, присоединяйтесь: https://freecode.academy
Сразу уточню, что скорее всего это подойдет только новичкам и только тем, кто действительно намерен чему-то научиться. То есть придется прикладывать усилия и первые ощутимые результаты будут только недели через две-три, а на коммерческий уровень надо потребуется минимум месяца два-три. Но гарантирую, что с моей стороны будет оказана всяческая помощь ученикам, и все это бесплатно.
- javascript
- typescript
- next.js
- обучение программированию
- обучение онлайн
- JavaScript
- Программирование
- Учебный процесс в IT
Как я javascript выучил
JavaScript используется везде от веб-приложений до мобильных приложений и серверов. Его популярность резко выросла за последние несколько лет, превзойдя такие языки как Java и PHP. Нет лучшего времени для изучения JavaScript чем сейчас. В этой статье я объясню как начал свое путешествие, что я узнал по пути и как вы можете использовать его для освоения JavaScript.
Немного истории
JavaScript был создан талантливым программистом Бренданом Эйчем в 1995 году. Он был нанят Netscape Communications, компанией, стоящей за первым браузером для задачи создать более гибкий язык для веб-разработки. Через десять дней Брендан имел прототип скриптового языка с синтаксисом, очень похожим на Java. Это был день рождения JavaScript.
В 1996 году JavaScript был взять в ECMA для стандартной спецификации, которую другие браузеры могли бы реализовать на основе того, что было сделано. Это привело к первому выпуску ECMA-262. ECMAScript — это название официального стандарта, наиболее популярной реализацией которого является JavaScript.
Со временем было выпущено несколько версий ECMAScript и версия ECMAScript 3 была широко поддерживаемой версией во время восхождения JavaScript к вершинам в промежутке с 2001 по 2010 год. Каждый браузер поддерживал его и это сделало JavaScript языком веба.
Есть разработчики, которые будут говорить ужасные вещи про JavaScript и многие из этих вещей не верны. JavaScript принимает почти все, что вы вводите и интерпретирует это таким образом, который полностью отличается от того, что вы имеете в виду. «Что за херня?», — было моей первой реакцией, когда я набрал свои первые несколько строк кода JavaScript и попытался их выполнить. Тогда я получил свой первый урок на трудном пути — JavaScript был не особенно либеральным в том, что он допускает.
Первые шаги
После моего первого столкновения с JavaScript я понял, что должен все взять в свои руки. Первое, что я сделал, это начал читать разные учебники. Проведя с ними две недели, я понял, что это не то. Я многому научился, но чего-то все равно не хватало. Я понял, что должен был составить план.
Мой план был прост:
1. Научиться процессу обучения и тому как легко запоминать
2. Изучить основы JavaScript
3. Погрузиться в глубину и изучить продвинутые вещи
4. Начать разрабатывать проекты
5. Создать поток информации обо всем новом в JavaScript
6. Учиться
Мне нравится называть это «бесконечным планом», и вы поймете почему. Я буду освещать эти темы одна за другой, но сначала хотел бы поделиться несколькими вещами. Знайте, что ваше путешествие может быть очень ухабистым временами, и у вас будут времена полного отчаяния, но не позволяйте этому пугать вас. Каждый прошел этот путь и даже самые яркие умы в программировании были новичками в свое время. Это часть процесса, и вы должны принять это как нечто нормальное.
Итак, без лишних слов перейдем к интересному
Учитесь учиться
Данный пункт многие пропускают. Наличие надлежащего плана обучения имеет основополагающее значение не только для изучающих JavaScript, но и для всех, кто серьезно относится к программированию. В IT-индустрии все меняется слишком быстро и разработчиками необходимо знать как управлять своим портфелем знаний. Вот некоторые идеи о том, как это сделать.
Техническое письмо как способ обучения
Для меня сработало то, что я писал обо всем, что изучил. Например, можно создать свой блог и писать там. Если это слишком амбициозно для вас, вы можете взять блокнот и написать в нем. Вы увидите результаты в кратчайшие сроки — вы не только тренируете свою память, но и получите верное представление о том, на сколько хорошо вы понимаете концепцию. Еще одним преимуществом технического письма является то, что вы будете развивать умение объяснять сложные вещи в ясной форме.
Практические тесты
Это один из моих любимых способов быстрого обучения. Традиционно тесты рассматриваются как необходимое зло образования, но на самом деле являются действительно мощным способом запоминания. Итак, как вы можете практиковать тестирование для себя?
Лучший способ — использовать флеш-карты. Я использую бесплатное приложение под названием Anki, где создал список карточек для каждой новой темы, связанной с JavaScript и начинаю свой день с 10-15 минут, отвечая на эти вопросы.
Это действительно веселая и захватывающая деятельность. Вы не только лучше запомните, но и научитесь верно задавать правильные вопросы.
Выбирайте верное время
Худшее время для обучения когда вы чувствуете усталость или демотивацию, так что не заставляйте себя. Сделайте перерыв на этот день или два, и возвращайтесь только тогда, когда почувствуете себя готовым и мотивированным. Я также настоятельно рекомендую использовать технику Pomodoro. Идея этого метода довольно проста — вы фокусируетесь на задаче в течение 25 минут и отдыхаете в течение 5, а затем повторяете снова.
Найдите наставника
Найдите кого-то, кто является экспертом в JavaScript и спросите у него, согласен ли он стать наставником. Поиск наставника может значительно увеличить время обучения и снизить разочарование.
Основы JavaScript
Теперь вы знаете как эффективно учиться и запоминать, и можете начать свой путь. Начнем с основ. Из-за популярности JavaScript есть тонны ресурсов на выбор. Однако, я рассмотрю только те, которые я лично считаю лучшими. Вы можете выбрать любой из них, так как они качественно рассказывают про язык:
MDN’s JavaScript Guide — после запуска MDN стал руководством по JavaScript, HTML и CSS. Их руководство емкое и отражает такие вещи как грамматика, типы, циклы, функции, выражения, числа и даты, форматирование текста и т.д.
You Don’t Know JS — это серия книг Кайла Симпсона, где он погружается в более сложные части языка, рассказывая о том, что такое scope & closures, что такое прототип объекта и что такое «this» в JavaScript. Эта серия поднимет ваши навыки на уровень выше, давая вам полное понимание JavaScript — в том числе тех частей, которых многие опытные программисты просто избегают.
Eloquent JavaScript — еще одна отличная бесплатная книга о JavaScript, хотя я не буду рекомендовать ее людям, которые только учатся программированию. Если у вас есть опыт работы с другим языком программирования, воспользуйтесь им, в противном случае выберите другие ресурсы.
Free Code Camp — это сообщество, в котором вы будете работать над самостоятельными задачами кодирования, создавать проекты и получать сертификаты, Это действительно интересно делать и можно сочетать с любым другим ресурсом.
CodeCademy — еще одна платформа для JavaScript задач, ориентированная на новичков и простая в использовании.
После окончания одного из курсов или нескольких, вы будете иметь прочную основу языка и сможете создавать свои первые программы и приложения. В этом месте вы можете порхать с одной темы на другую. Оставайтесь на своем пути и сосредоточьтесь. Не позволяйте своим демонам завладеть вами.
Иногда вы можете испытывать беспокойство. Будут вещи, которые вы не понимаете или проблемы, которые вы не можете решить. Не бойтесь обращаться за помощью в таких ситуациях. Гуглите, ищите на Stack Overflow или просто спросите кого-либо. Всегда спрашивайте окружающих и самого себя «Почему мне нужно использовать цикл for, когда я могу использовать метод map?», «Зачем мне нужен jQuery, когда я могу использовать простой JavaScript?».
«Я изучил основы, что теперь?»
Вы делаете успехи, вы достаточно хорошо выучили JavaScript, но что теперь? Этот же вопрос я задавал себе, когда чувствовал, что знаю достаточно, но все еще хотел большего. Это время, когда вы понимаете, что знания есть, но вы еще не можете что-то делать самостоятельно. Ваши основные проблемы — постоянная отладка и незнание того как задавать правильные вопросы.
Мне помогло преодолеть эту фазу сохранение спокойствия и осознание того, что это часть процесса и это в конечном итоге пройдет. Наличие правильного мышления полезно. Если у вас возникнет ощущение, что все сложно и неизвестно, знайте, что вы готовы вывести свои навыки на новый уровень.
Учиться новому на этом этапе довольно сложно. Материал должен быть не таким простым, но и не таким продвинутым. Итак, я начал искать и нашел много книг о лучших практиках JavaScript, тестировании, шаблонах дизайна и структуре кода. Некоторые из них были хорошими, а некоторые нет. Вот список книг, которые я нахожу действительно интересными:
Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript — эта книга состоит из 68 проверенных подходов к написанию лучшего JavaScript и подкреплена конкретными примерами. Вы узнаете как выбрать правильный стиль программирования для каждого проекта, управлять непредвиденными проблемами и более успешно работать с каждым аспектом программирования JavaScript от структур данных до параллелизма.
JavaScript — The Good Parts — хотя и старая, книга является отличным ресурсом для каждого среднего и продвинутого разработчика JavaScript. Написана известным Дугласом Крокфордом в далеком 2008 году. Эта книга показывает, что JavaScript может быть красивым, элегантным, легким и очень выразительным языком, который позволяет создавать эффективный код независимо от того, управляете ли вы библиотеками объектов или просто пытаетесь заставить ajax работать быстро.
JavaScript Design Patterns — с помощью этой бесплатной книги вы узнаете как писать красивый, структурированный и поддерживаемый JavaScript, применяя классические и современные шаблоны проектирования к языку. Объяснение просто замечательное и примеры более чем понятны. Обязательно прочитайте книгу.
Test-Driven JavaScript Development — одна из лучших книг о тестировании JavaScript, разработке на основе тестов и стратегиях тестирования.
Рутина хорошего разработчика
Хотя эти книги являются отличным источником знаний, они лишь часть того, что вам нужно сделать, чтобы стать действительно хорошим в JavaScript.
Подумайте о кузнеце. Он может знать каждую мелочь о своем мастерстве, но без практики это ничто не значит. То же самое относится к программированию. Если вы не практикуете и не создаете вещи, вы вероятно ничего не делаете. Итак, мой вам совет — учитесь и кодируйте одновременно. Не волнуйтесь, что ваш код будет сырым и не оптимизированным. Просто возьмите идею и начните над ней работать. Создайте учетную запись GitHub, делайте коммиты каждый день и сделайте это рутиной. Когда вы закончите проект, поделитесь им со всем миром и ищите обратную связь. Обратная связь — это самое чудесное, что может с вами случиться — вы узнаете о новой передовой практике, проверке кода, средствах сборки и приобретете навыки коммуникации, управления продуктами и проектной организации и т.д. Эти навыки и приемы уведут вас очень далеко и чем раньше вы их освоите, тем лучше.
Кроме того, если у вас есть возможность пойти на семинар JavaScript, локальное мероприятие или конференцию, просто идите. Я всегда находил эти события действительно вдохновляющими и мотивирующими. Встреча с новыми людьми с одинаковыми интересами, обмен опытом в чате принесет вам большую пользу в долгосрочной перспективе.
Вооружитесь философией «никогда не останавливать обучение»
Теперь когда у вас есть прочный фундамент и вы строите крутые проекты, мы должны решить следующую проблему — как оставаться актуальными в одной из самых быстро меняющихся отраслей в мире. В данной отрасли присутствует бесконечный поток информации в виде информационных ресурсов, видео, онлайн-курсов и даже очного обучения. Вот что я делаю.
Я подписался на несколько информационных лент — JSK Daily, Frontend Buzz, JavaScript Weekly, JavaScript World, Hashnode Times и получаю каждый день новые статьи. Я читаю их после работы или когда делаю паузы. Я сохраняю самые интересные статьи и проекты в Trello или на Github. Если что-то завоевывает мой интерес (например, async await), то я начинаю играть с ним по выходным. Я читаю об этом, пробую простое демо и эскпериментирую дальше. Я не устанавливаю сроки, так что могу остановиться тогда, когда захочу. Это один из лучших способов изучить новую технологию или спецификацию. Строительство игрушечных проектов может предохранить вас от выгорания.
Как справиться с разочарованием и беспокойством
Каждый разработчик, независимо от количества опыта, проходит через периоды беспокойства и разочарования. Это происходит потому, что природа программирования фрустрирует — вы пытаетесь что-то решить и не знаете как. Когда вы расстроены, стараетесь сильнее, вкладываете больше усилий и программа начинает работать. Разочарование это абсолютно нормально. Беспокойство и разочарование никогда не исчезнут. Это просто сделает решение проблемы более удовлетворительным. Вам нужно научиться жить с этим состоянием.
Когда вы почувствуете, что выгораете, сделайте перерыв. Найдите не техническое хобби, начните заниматься спортом, проводите время с друзьями или возьмите отпуск. Сделайте что-то другое в течение нескольких дней, а затем вернитесь. Вы будете более энергичным и мотивированным. Я прошел через несколько этапов выгорания и быть подальше от компьютера — лучшее решение.
Что я узнал по пути
Есть три основные вещи, которые я узнал за время путешествия:
Это может показаться тривиальным, но на самом деле это очень важно. Знание того как задавать правильные вопросы может значительно оптимизировать рабочий процесс. Всегда старайтесь задавать прямые вопросы, такие как «получить расширение файла из строки javascript» иди «как работают JavaScript closures». Не доверяйте слепо первому решению, которое найдете. Сомневайтесь во всем. Исследуйте немного больше, найдите различные решения и сравните их.
Узнал как и когда спрашивать
Задавать вопросы, наверно, самое сложное для новичка. Вы разоблачаете свое невежество, которое в большинстве случаев кажется унизительным. По крайней мере так я себя чувствовал первые дни. Хорошо. я ошибался. Незнание чего-то абсолютно нормально и задавать вопросы — это самое разумное. Правило, которое я использую — если я не могу сделать что-либо 20 минут, то задаю вопрос или ищу его. Вы будете поражены количеством людей, которые готовы помочь вам.
О помощи другим
Когда вы узнаете достаточно, лучшее что вы можете сделать — это поделиться с другими. Найдите сообщество и помогите другим разработчиками. Обучение других не только подарит вам приятное чувство достижения чего-то значимого, но и поможет освежить в памяти некоторые старые материалы или технологии, которые вас интересуют. Никогда не поздно помочь коллеге программисту.
Вывод
Изучение JavaScript и программирования в целом не самая простая вещь, но безусловно стоит того. Это тяжело, реально тяжело и требует большой степени самоотверженности и настойчивости. Но обладая правильным мышлением в сочетании с правильными ресурсами, вы можете достичь превосходных результатов. Что бы вы ни делали, не забывайте, что программироване должно приносить радость.
Как я JavaScript учить начал
Просто начал и все. Без всяких размышлений о великом будущем своем, как погромиста, без особых фантазий на тему, что теперь точно смогу написать BolgenOS. Я даже не совсем понимаю, зачем я учу JavaScript.
Последний раз я был быдлокодером в школе, где нас учили писать на. BASIC. В 2001 году, Карл! В то время, как почти везде уже учили Pascal. Потом я пытался писать на Delphi, но кроме генератора заданного количества случайных чисел в заданном интервале ничего написать не смог (нужно было для дипломной работы).
Потом было по чуть-чуть MAXScript и MEL (исключительно в объеме «мне тут нужна своя кнопка для создания шарика»). В общем, ничего, кроме «Hello, World!» на подавляющем большинстве языков программирования я ничего никогда не писал и не напишу (и то лишь потому, что «Hello, World!» учат писать на первых страницах любого учебника).
А JavaScript мне не нужен особо. Ни в прикладных моментах (для себя мне на нем писать нечего), ни в глобальных. Но уже недели полторы я читаю про него все, что можно, в том числе и MDN. Выходит около часа в день на это дело. Немного пока, но тут, как пойдет.
Вчера я начал разбираться с массивами и в конце своего часа накидал вот такой скрипт:
Без повторения примеров и уроков. Просто было интересно, получится ли. Все заработало и закрутилось, как было нужно.
Да, я знаю, что в ES6 все будет выглядеть иначе и много, где я вижу рекомендации начинать уже учиться сразу на этом стандарте, но прежний мне понятнее. Пока я даже не быдлокодер. И делюсь, собственно, даже не самим скриптом, а тем, что у меня что-то получилось написать после, де-факто, 17 лет отсутствия всяких опытов с программированием.

4 года назад
Ученье свет! Учиться, учиться и еще раз учиться! Молодец! Уважаю. Сам просидел до тридцати, а потом пошел и получил второе высшее. Честно, даже не понял зачем. Но потом во время учебы я понял, что учиться это благо, без напряжения мозга тупеешь и деградируешь.
раскрыть ветку
4 года назад
Молодец, что начал. Главное — не бросать. Через пару месяцев, когда вспомнятся или разучатся основы, настанет период, когда «вроде умею что-то писать, но что конкретно с этим делать — хз». Нужны будут идеи, свои проекты, вдохновение и мотивация развиваться дальше. В идеале — работа, чтоб и ментор опытный был, к кому за советом обратиться, и коллеги, с кем обсудить код, проект, задачи, подходы. Часто могут помочь группы в том же телеграмме, например. Там сейчас оч большое ру-комьюнити. Там и подскажут по «затыкам», и материалов скинут почитать, да и просто веселее. Плюс, работу можно в том же чате javascript jobs найти. В общем, успехов в труде =).
раскрыть ветку
4 года назад
Это все и правда здорово, и рвение похвально, но если это для вас именно хобби, и вы пока не планируете вкатываться даже джуном в коммерческую разработку, то попробуйте найти для себя интересную идею. И не надо никаких BolgenOS. Пробегитесь по форумам или, например, по реддиту на r/javascript — там часто выкладывают всякие мелкие, но интересные проекты. Возможно, что-то из этого вас вдохновит на написание чего-то подобного. Нужно всегда стараться преодолевать себя. Может вам станет интересно написать, не знаю. или какой-то интересный интерактивный элемент, или некую структуру данных, или маленький 3д движок на вебгл, или мини нейронную сеть, или еще что-то, ограниченное вашей фантазией. В процессе сложного проекта перед вам будет всплывать масса более мелких, что научит и чистоте кода, дабы поддержать его читабильным, и алгоритмам, и ньюансам языка и тд. Важно, чтобы задача была вам интересна. Это так же позволит вам найти наиболее успешное направление своего развития. Удачи.
Пс. ES6+ не принебрегайте вот прямо совсем. И бога ради, не используйте суммирование строк через «+» сверх меры: строки иммутабильны и хранятся в памяти каждая отдельно., т.е, грубо говоря, str1+str2 будет занимать памяти sizeof(str1)+sizeof(str2)+sizeof(str1+str2). Дабы не зависить от милости оптимизатора, используйте строковые литералы и Array.prototype.concat/join. В вашем случае, например, лучше:
Это также избавляет вас от замыкания.
Ну и далее сами попробуйте порефакторить.
раскрыть ветку
4 года назад
Найди задачник по программированию для студентов и прорешивай на любом языке. Не вижу смысла учить язык конкретный пока не будет базы именно программирования и алгоритмизации.
Потом уже изучай язык/языки которые по нраву.
раскрыть ветку
4 года назад
Прям как у меня исотрия) зайди на CodeAcademy, там есть отличные бесплатные и платные курсу, которые в разы дешевле и качественнее российских аналогов, и да, сайт полностью на английском, но материал они обхямняют так, что могут обезьяны научить кодить) успехов)
раскрыть ветку
Похожие посты
2 месяца назад
Он старался
Я: Глянь, я научил цыпленка говорить
ОН: Ну-ка покажи
Я: Назови математическую константу, выражающую отношение длины окружности к её диаметру?
ЦЫПЛЁНОК: Пи!
Я: А что говорят дети, когда хотят в туалет?
ЦЫПЛЁНОК: Пи пи!
ОН: Это фигня
Я: Но он старается
ЦЫПЛЁНОК: Я стараюсь!
2 месяца назад

Неси память

Показать полностью 1
2 месяца назад
Юный читер
Случилось только что, не знаю как реагировать.
Предыстория: сын перешел в третий класс. На лето задали учить таблицу умножения. Он увлекся визуальной средой разработки Scratch, летом часто спрашивал, какой проект ему бы сделать. Мне пришло в голову: а сделай, говорю, программу для проверки знания таблицы умножения. Пусть рандомные примеры тебе дает и проверяет ответ. Считает число верных и неверных. Рассчитывает среднее время решения примера (с этим я ему помог). Сын сделал, и договорились, что каждый день будет решать по 50 примеров. За каждую ошибку еще +3 примера. Летом занимался по своей программе, вроде неплохо решал.
Сейчас пошел в школу, рассказал классной о проекте. Она заинтересовалась и попросила ссылку. С этой целью я заглянул в проект и вижу код:


Отругал, конечно, но сам ржу сижу. Паразит мелкий!
З.Ы. По комментариям увидел, что не все поняли суть: он встроил в программу код, который при нажатии стрелки вверх увеличивает счетчик правильных решений, а при нажатии стрелки вниз — уменьшает счетчик ошибок.
Показать полностью
2 месяца назад
Пирожки с потрошками
Я лично считаю, что каждый студент-медик должен побывать на родах и на вскрытии и увидеть начало и конец пациентов. Некое посвящение в медицину. Понять, что смерть это не нечто абстрактное и эфемерное, а данность, которая настигнет любого, а возле врача будет постоянно.
На вскрытии Я побывала впервые в 10 классе. Тем, кто собирался поступать на медика, организовали практику в морг (не знаю зачем, на самом деле, но мне, естественно, инициатива очень зашла), но для нас, буйных энтузиастов, поход в морг это было некое таинство по типу «смотрите, мы идем в морг, вау, морг, тру-упы, жу-уть». Всего было 3 посещения. На первом было 4 человека, на последнем только Я. Зря, самое интересное пропустили. На первых нас ознакомили с устройством и рассказали много интересных историй, объяснили, чем тут, собственно говоря, занимаются.
На последнем началось самое интересное. Мы пошли непосредственно в секционный зал. мне дали одноразовые СИЗы и местный фотоаппарат, чтоб Я фотографировала то, на что пальцем покажут для дальнейшей фиксации в документах. То был май, в секционке было жарковато, у меня маска на лице и очки (в секционке нехолодно, это не холодильник). В общем, дышать было проблематично. Но Я мужественно продолжала фотографировать нужные кусочки органов, слушая по ходу дела объяснения патологоанатома чем он занят и зачем Я, собственно, тут стою.
Когда мне стало уже плохо после 40 минут стойки в закрытом СИЗе, было решено сделать перерыв. Мы пошли пить чай в специальную комнату (нет, на одном столе с трупом не едят как в анекдотах, это антисанитария) и обсуждать то, что Я увидела, вопросы и впечатления. Когда мне предложили пирожки с потрохами (мои любимые, кстати), так как Я не завтракала, ибо рекомендовали идти на данное мероприятие голодной, чтоб не вырвало, состоялся весьма забавный диалог:
— А откуда данные пирожки?
— Не переживай, не отсюда.
— Я не переживаю, просто домой хочу взять.
И мне отдали оставшиеся пирожки.
Правда, до дома Я их не донесла. Съела по дороге. Хорошие пирожки, вкусные. Не отравилась потом.
Показать полностью
Проверяем информацию, разоблачаем фейки, разбираемся со сложными историями
Подписаться
3 месяца назад
Правда ли, что в Японии школьникам запрещено красить волосы?

На многих сайтах можно встретить утверждение, что в японских учебных заведениях очень жёсткие требования к внешнему виду учащихся, в частности к цвету волос. Мы решили проверить, действительно ли это так.
Спойлер для ЛЛ: во многих японских школах действительно существует запрет на иные цвета волос, кроме чёрного. Учеников, цвет волос от природы у которых иной, даже могли заставить их перекрасить. Хоть и в последние годы под давлением общественности многие школы от таких требований отказались, в некоторых из них такая практика сохраняется и по сей день.
О строгих правилах в японских школах, предписывающих ученикам не красить волосы, пишут на тематических ресурсах, посвящённых этой стране. Такую информацию можно встретить на порталах о путешествиях и развлекательных сайтах. Пользователи публикуют посты на эту тему в соцсетях (например, «ВКонтакте») и на блог-платформах (LiveJournal, «Дзен»).
Если сделать в Google поисковый запрос «японские подростки», можно найти тысячи фотографий ярко, иногда даже экстравагантно одетых и накрашенных молодых людей с причёсками всех цветов радуги. Поэтому может показаться, что у детей в этой стране полная свобода самовыражения. Однако, судя по сообщениям в СМИ, в японских школах дела обстоят совсем иначе. Там действуют очень строгие правила, касающиеся внешнего вида учеников. В 2020 году коллегия адвокатов Фукуоки провела исследование и выяснила, что во многих школах этого города существуют требования не только к оттенку волос, но и к стрижкам и даже к цвету нижнего белья учеников (причём, чтобы это заметили, этим предметам гардероба вовсе не обязательно торчать наружу: представители школы могут заставить ученика раздеться и в случае, если расцветка не соответствует правилам, вызвать в школу родителей или опекунов).
Причём иногда правила, предписывающие детям иметь определённый цвет волос, доходят до абсурда. Так, в 2017 году школьница из Осаки подала в суд на свою школу за то, что там её заставляли красить от природы каштановые волосы в чёрный цвет. В 2021 году суд постановил, что школа должна выплатить ученице компенсацию за причинённый моральный вред, однако правило об обязательном чёрном цвете волос не было признано незаконным — суд раскритиковал только избыточные меры, которые были приняты в отношении девушки. И это не единственный случай, когда подростки подвергались критике и нападкам со стороны руководства школ из-за причёски. В 2022 году в префектуре Хёго учителя довели ученицу с каштановым цветом волос до обморока — девушка потеряла сознание из-за того, что её ругали и дёргали за волосы «неправильного» цвета, а также не давали связаться с родственниками. Позже школа извинилась перед родителями девочки за действия преподавателей.

В 2019 году группа активистов обратилась в Токийский совет по образованию с петицией, в которой призвала положить конец требованиям красить волосы в чёрный цвет тем ученикам, у кого природный цвет иной. Петиция собрала более 19 000 подписей, в том числе от людей, которые в прошлом пострадали от этих требований. Сообщалось, что ранее совет по образованию уже обращался к директорам столичных школ с просьбой прекратить эту практику, но после петиции выпустил письменный приказ. Впрочем, после этого в СМИ по-прежнему появлялись сообщения о том, что токийские школы требовали от учеников предоставить доказательства, что их отличный от чёрного цвет действительно натуральный.
В 2022 году 200 государственных школ в Токио объявили, что отменяют строгие правила в отношении причёсок, цвета волос и нижнего белья. Тем не менее бо́льшая часть остальных японских учебных заведений, судя по всему, всё ещё могут предъявлять подобные требования к учащимся.
В том числе из-за жёстких требований к внешнему виду и нападок из-за несоответствия им некоторые дети в Японии вообще отказываются ходить в школу, существует даже специальный термин для этого феномена — футоко. Ещё в 1980-х годах в ответ на рост количества таких детей в Японии появились так называемые свободные школы. Эти учебные заведения ставят во главу угла индивидуальный подход к учащимся и принципы свободы личности. Там от учеников не требуют определённого внешнего вида, да и отношения между преподавателями и учениками куда менее формальные. Впрочем, таких школ в стране сравнительно немного.
Таким образом, во многих японских школах действительно существуют правила, по которым цвет волос учащихся должен обязательно быть чёрным — красить их в другие оттенки и правда нельзя. При этом у части жителей Японии природный цвет волос иной — например, каштановый. Хотя некоторых учеников даже заставляли окрашивать волосы в чёрный, в последние годы многие школы под давлением общественности отказываются от этих требований. Тем не менее, судя по всему, в некоторых учебных заведениях такая практика есть и по сей день.
Фото на обложке: Getty Images Signature через Canva

Наш вердикт: большей частью правда
О моих свободных отношениях с языками программирования
Я занимаюсь программированием уже около 4 лет. Я начал с C#, занимаясь разработкой игр, а затем перешел на Python, потому что меня заинтересовало машинное обучение. Далее я изучил Javascript и Typescript, чтобы заниматься фронтендом. Через некоторое время я захотел разрабатывать мобильные приложения, поэтому выучил Ionic, React и React Native. Чтобы сделать мой бэкенд лучше, я выбрал Go. В 2017 году вышел Flutter и я выучил Dart, чтобы разрабатывать больше мобильных приложений. Я работал с Java во время учебы в колледже и с PHP, пока работал в Facebook.
Я не утверждаю, что являюсь экспертом в каком-либо из этих языков. У меня просто больше опыта работы с некоторыми языками/фреймворками, чем с другими. Но почему я учил все эти языки? Потому что меня очень легко соблазнить. Если я вижу классную функцию на каком-то другом языке, я хочу ее выучить.
Но почему я советую вам сделать то же самое? Потому что вы не сможете выбрать правильный инструмент до тех пор, пока не узнаете, что из себя представляет этот инструмент. Лично я считаю этот совет чрезвычайно полезным в своей жизни. Вы резко сократите количество прилагаемых вами усилий для решения проблемы, если выберете правильный язык программирования.
Решение моей #FirstWorldProblem
Позвольте мне привести очень простой пример того, как знание правильного ЯП сэкономило мне много времени, но если вам это не интересно, не стесняйтесь и сразу же переходите к разделу “Подведем итоги”. Пару месяцев назад я хотел купить беспроводные наушники и остановил свой выбор на AirPods. Я с уверенностью заявляю — это лучшая техника, которую выпускала Apple. Я перепробовал много беспроводных наушников, но ни одни из них не сравнятся по качеству и звучанию с AirPods. В любом случае, проблема заключалась в том, что я использую ноутбук на OC Windows и телефон на OC Android. AirPods автоматически подключались к моему телефону, но с ноутбуком что-то пошло не так. Мне приходилось залазить в настройки и подключаться к моим AirPods вручную КАЖДЫЙ РАЗ. Это был мучительный процесс, потому что я постоянно переключался между телефоном и ноутбуком. Мне нужна была кнопка, с помощью которой я мог бы одним нажатием подключить AirPods к моему ноутбуку.
Моей первой мыслью было использовать Python, так как я был уверен, что смогу найти Python-библиотеку, которая позволила бы мне контролировать Bluetooth моего компьютера. Идея не оправдала ожиданий. Для этого не было подходящей библиотеки. Следующим очевидным вариантом для поиска был Node.js. Эта идея увенчалась успехом — я нашел Javascript-библиотеку для управления Bluetooth на моем ноутбуке. Запустив нижеприведенный Node.js скрипт, я смог сразу же подключиться к своим AirPods:
// App.js
const device = new bluetooth.DeviceINQ();const airpodsAddress = "18:81:0E:B2:6B:A6"
const airpodsName = "Akshat's Airpods";device.findSerialPortChannel(airpodsAddress, function (channel) // make bluetooth connect to remote device
bluetooth.connect(airpodsAddress, channel, function (err, connection) if (err) return console.error(err); console.log('YAY! Airpods Connected');// Don't need a communication stream between the two
// so let's just exit the stream.
setTimeout(() => process.exit(0), 5000);
>);
>);
Теперь мне нужно было расположить кнопку на рабочем столе, чтобы появилась возможность быстро и легко запускать этот скрипт. Сначала я попытался поместить этот скрипт на панель задач, но Windows не позволяет поместить туда что-либо, что не является исполняемым файлом. Поэтому я создал пакетный (batch) скрипт, который, как мне казалось, я мог бы закрепить на панели задач, но, в итоге, вновь неудача. Тогда я подумал, какой язык позволит мне создать .exe (исполняемый) файл, который можно будет смонтировать на панели задач? Тут-то Golang и пришел мне на помощь! Я создал нижеприведенный маленький скрипт на Go, который одним нажатием запускал мой Node.js скрипт:
// main.go
package mainimport (
"fmt"
"os/exec"
)func main() output, err := exec.Command("npm", "start").CombinedOutput() if err != nil fmt.Println(err.Error())
>
fmt.Println(string(output))
>
Ниже я создаю ярлык для .exe на моем рабочем столе и назначаю ему симпатичную иконку. Затем помещаю этот ярлык на свою панель задач. БУМ! Готово! Простая и всегда доступная кнопка позволяет в мгновение ока подключаться к моим AirPods.
Я понимаю, что мог бы достичь того же результата, используя C#. Но я не хотел устанавливать Visual Studio — мой ноутбук не справился бы с этой чудовищной IDE. Также я мог бы упаковать мое Node.js приложение в exe, используя какой-то другой инструмент, вроде nexe, но это лишняя морока.
Это был простой пример того, как знание различных инструментов может помочь вам легко решить ваши проблемы. Если бы я знал только Python или Java или Go, я смог бы заставить мои AirPods подключаться одним нажатием кнопки, но на это бы ушло в разы больше времени.
Подведем итоги:
- Изучение различных языков программирования — это действительно интересно! Кроме того, изучая несколько ЯП, вы значительно расширите ваши познания и набор профессиональных навыков!
- Еще одна причина, почему вам стоит выучить больше языков — это умение думать о поставленных задачах вне одного языка или парадигмы. Объектно-ориентированное программирование — это замечательно, но не будет лишним знать функциональное или процедурное программирование. Как только вы научитесь думать о программировании за пределами вашего языка, вы больше не будете ограничены его возможностями.
- Первый язык, который вы выучите, будет сложным в изучении, а второй будет еще сложнее. Но затем изучение новых языков превратится для вас в нечто, схожее с прогулкой по парку. После чего вы сможете самостоятельно узнать все о конкретных библиотеках и фреймворках языков, выбранных вами.
- Еще одна веская причина в пользу того, почему вам стоит подумать об изучении большего количества языков — это WASM. WebAssembly позволит вам запустить любой ЯП в современных браузерах. Это означает, что если вы изучаете более быстрые языки, такие как C++, воспользуйтесь этой скоростью в браузерах и создайте что-то потрясающее!
В заключение
- Если вы пишите на Javascript или Python, то я очень рекомендую изучить язык более низкого уровня. Можете начать с C или C ++, но я бы предложил Golang. На Go вы получите скорость C++, без недостатков семейства языков С.
- Если вы пишите на языках никзкого уровня, наоборот, попробуйте Python или Javascript. Python похож на псевдокод, а Javascript настолько популярен, что встречается практически во всех сферах разработки. Оба этих языка позволят вам использовать языки низкого уровня вместе с ними. Вы можете написать модули C ++ для Node.js и Python. Так что поверьте мне — это изменит вашу жизнь!
Надеюсь, что я убедил вас начать изучать новые ЯП и тем самым получить новые впечатления от работы!
