Введение в JavaScript

Введение в JavaScript IT, Программирование, Web-программирование, Javascript, Самоучитель, Саморазвитие, Верстка, Длиннопост

Этот пост посвящён главному языку будущего - JavaScript. Благодаря своей гибкости используется в браузере, на серверах, в мобильных приложениях, на десктопе и практически во всех видах программирования. Удобный синтаксис позволяет легко писать на нём, а высокая производительность делает его отличным выбором для решения любых задач - от небольших магазинов до огромных highload проектов. JavaScript по праву является самым популярным в мире языком. На каждом сайте есть браузерный JavaScript, а JavaScript на сервере используется такими крупными корпорациями, как Amazon, Yahoo, HP, NASA, Walmart и многие другие.


Часто задаваемые вопросы


В: Что это за язык такой?


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



В: Какие возможные направления для разработки существуют?


О: Практически все! Можно писать Front-end, Back-end, GameDev, 2D/3D графику, разрабатывать мобильные и десктопные приложения. Список инструментов для различных целей



В: Можно выучить только один фреймворк/библиотеку и всё писать на нём?


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



В: Существуют ли стайл-гайды для JavaScript?


О: Да. Стайл-гайд для Node.js, стайл-гайд для Front-end



В: Какие новые возможности добавил ES6?


О: Вот здесь можно почитать на русском



В: Я хочу писать на ES6, но многие браузеры не поддерживают новые возможности. И вообще, надоел геморрой с браузерным зоопарком. Неужели нет способа обойти это?


О: Конечно есть! Чтобы код одинаково хорошо работал во всех браузерах и все возможности ES6 и будущих стандартов нормально работали необходимо собрать код с помощью сборщика. Сборщик компилирует весь код в один файл и делает его полностью кроссбраузерным. Наиболее удобен в использовании Webpack, хотя существуют и аналоги. Потребуется некоторое время на изучение, но результат себя окупит. Сборщики нужны только во Front-end, Node.js и так поддерживает все новые возможности.



В: Зачем нужны CoffeeScript и TypeScript?


О: Это особые варанты JS для любителей других языков. CoffeeScript подходит для любителей Ruby и Python, TypeScript - для сторонников строготипизированных языков вроде C# или Java. Если ты новичок в программировании, то учи оригинал, а диалекты попробуешь, когда уже будет опыт.



В: Зачем нужны таск-раннеры, такие как Gulp или Grunt?


О: Они позволяют одной консольной командой запустить выполнение заранее прописанного процесса, который может содержать множество команд и который неудобно каждый раз выполнять вручную. Пример - компиляция JS с помощью Webpack, сборка LESS стилей в CSS и многое другое. Ещё раз - таск-раннер не замена сборщику, Gulp - не конкурент Webpack, они выполняют совершенно разные задачи и зачастую используются вместе.



В: Можно ли писать фронт на других языках?


О: Да, существуют компиляторы различных языков в JS, такие как ScalaJS, PyJS и другие. Но стоит помнить, что у них есть масса недостатков и использовать их стоит только если на чистом JS (также CS и TS) не получается писать совершенно. Они предназначены прежде всего для тяжёлых приложений вроде браузерных 3D игр в классических Front-end целях не очень удобны.



В: Я слышал про какой то WebAssembly, который заменит JS. Это правда? Что это такое?


О: Нет, неправда. WebAssembly (WASM) практически не имеет отношения к классическому Front-end. Это особая технология, позволяющая выполнять в браузере бинарный код, компилируемый из различных языков. Он предназаначен для выполнения в браузере тяжёлых приложений вроде трёхмерных онлайн-игр и никак не связан с привычными задачами JS. Более того, учитывая развитую инфраструктуру JS, множество фреймворков и библиотек на все случаи жизни, большое количество профессиональных разработчиков, огромное количество легаси-кода, выполнение WASM иных задач, не связанных с различными высокопроизводительными трёхмерными приложениям, видится невозможным. Кроме того, WASM не затрагивает серверную и мобильно-десктопную часть JavaScript, которые уже успели стать довольно популярными.


В: С чего начать изучение?



Материалы для изучения



Книги про JavaScript



Марейн Хавербек - "Выразительный JavaScript" — Вводная книга по JavaScript и программирование в целом.

Онлайн на русском | Онлайн на английском


Дэвид Фленеган - "JavaScript: Подробное руководство"

PDF на русском


Дуглас Крокфорд "JavaScript: сильные стороны"

PDF на русском


Стефанов С. - "JavaScript. Шаблоны"

PDF на русском


Джон Резиг - "Секреты JavaScript ниндзя"

PDF на русском


Николас Закас - "JavaScript. Оптимизация производительности"

PDF на русском


Джон Резиг, Расс Фергюсон - "JavaScript для профессионалов"

На русском


Dr. Axel Rauschmayer - "Speaking JavaScript: An In-Depth Guide for Programmers"


Онлайн на английском | PDF на английском


Discover Meteor — Книга по Meteor.js - одному из самых лёгких и функциональных фреймворков.

Онлайн на русском


Node.js



М. Кантелон , М. Хартер - "Node.js в действии"

PDF русском | Материалы к книге


Кирилл Сухов - "Node.js. Путеводитель по технологии"

PDF на русском


Дэвид Хэррон - "Node.js. Разработка серверных веб-приложений"

PDF на русском


Front-end


Тодд Мотто - "Учебник AngularJS"

Онлайн на русском | Онлайн на английском


Max P - "Курс по React.js для начинающих"

PDF на русском


Эдди Османи - "Разработка Backbone.js приложений"

PDF на русском


Эрл Каслдайн, Крэйг Шарки - "Изучаем JQuery"


Адам Фримен - "jQuery для профессионалов"


И не забываем читать официальную документацию для каждого фреймворка.



Онлайн сообщества



learn.javascript.ru - Самый главный русскоязычный сайт по JavaScript. Других таких подробных уроков не найти. Начинать строго с него.


node-center.ru - Второй по важности сайт. Ориентирован на Node.js, но мелькает материал и по Front-end. Сборник всей нужной информации, перевод официальной документации, список книг и ссылок.


jstherightway.org - Огромный англоязычный гайд. Есть книги, статьи, список фреймворков и многое другое. По сути, этот текст - краткий аналог этого гайда.


nodeguide.ru - Большое количество переведённых статей по Node.js



Блоги и новостные ленты


dailyjs.com - DailyJS


weblog.bocoup.com - Bocoup Weblog


perfectionkills.com - Perfection Kills


reddit.com/r/javascript - subreddit на reddit.com


toddmotto.com - Todd Motto, Lead front-end @appsbroker. Developer Expert @google.



Онлайн курсы



Изучая только теорию язык усваивается плохо. Наиболее важна практика, которую можно получить на онлайн-курсах.


CodeSchool


Отличный ресурс для изучения языка, очень много курсов по всем передовым технологиям.


CodeAcademy


Уже не такой сильный, но все еще интересный проект, также обязателен для улучшения навыка.


Udacity


Дает хорошее представление о замыканиях.


Прошёл курсы, прочитал книги и думаешь, что знаешь JS? Теперь изучи тонкости и особенности языка. Сделать это можно здесь - https://shamansir.github.io/JavaScript-Garden/





Список инструментов для различных целей


Front-end: jQuery, Angular, React, Backbone(ru), Meteor(ru)

Back-end: Node.js(ru), Express, Koa, Sails, Total, Strapi, Hapi


Десктопные приложения: NW.js, Electron, WinJS


Мобильные приложения: Cordova, NativeScript, React Native, Phonegap, Ionic


GameDev: Phaser, Cocos, Pixi, Unity, Atomic Game Engine


Тестирование: Mocha, Chai, Jasmine, Sinon, Karma


Continuous Integration: Semaphore, Shippable


Auto deploy: Sanelotto, ShipIt, Fabric, Capistrano


CMS: KeystoneJS, PencilBlue, Apostrophe, Ghost


Генераторы статичных сайтов: DocPad, Metalsmith, Harp, Brunch


Imageboard engine: Hanako, Doushio, live4chan


Бесплатные хостинги: OpenShift, Heroku


IDE/редактор: WebStorm, Atom, Brackets


Task-runner: Gulp, Grunt, Broccoli