Специальный выпуск Bloomberg Businessweek, 11.06.2015
Специальный выпуск Bloomberg Businessweek, 11.06.2015
Содержание:
Часть 1. Человек в бежевом пиджаке
Часть 2. Что такое компьютер?
Часть 3. Почему программисты так болезненно относятся к языкам?
Часть 4: Почему программисты такие злые?
Часть 5: Совещание о валидации email-адресов
Часть 6: Как создаются приложения?
Часть 7: Триумф менеджера среднего звена
Часть 5: Совещание о валидации email-адресов
Желая лучше разобраться, как всё это устроено, и приняв от ЧБП приглашение, ты приходишь на рабочую встречу с программистами.
Двое опаздывают, и ты просишь единственного присутствующего объяснить, что вы планируете обсуждать. Серией вопросов он быстро выясняет границы твоих познаний, начав с: «Вы знаете, что такое веб-страница?»
Вот что он вам показывает: чтобы принять от пользователя email-адрес и имя, нужно создать веб-страницу на HTML:
<html>
<body>
<h1>Создать аккаунт</h1>
<form method="post" action="/">
Имя: <input type="text" name="name">
<br/>
Email: <input type="text" name="email">
<input type="submit">
</form>
</body>
</html>
Что приводит к такому результату в браузере:
Создать аккаунт
На сегодняшней повестке: как сделать так, чтобы регистрация на вашем сайте была приятной для пользователей, но при этом безопасной для компании. Вопросы к обсуждению, объясняет программист, примерно такие: «Как мы будем хранить эти данные? В каком виде? Как мы будем их обрабатывать? Как мы будем с нимм взаимодействовать?»
Входят двое оставшихся программистов. Программистка A, она в этой группе старшая, занимает место у доски:
Программистка А:
— Давайте начнём в валидации email-адресов.
Программист B:
— Давайте определим, что такое «валидный»?
Программист C:
— Корретно сформированный.
Программист B:
— Корректно сформированный через проверку регулярным выражением?
Программист C:
— Или сформированный согласно RFC 5321 и RFC 5322?
Программистка А:
— Давайте предположим, что мы используем библиотеку?
— Мы будем отправлять подтверждение каждому, кто заполнил форму?
— Стоило бы, да?
— Это предусмотрено в спецификации?
— Нет.
— Тогда не будем.
— Возможно, нам нужно внести исправление в спецификацию?
— Это считается лучшей практикой.
— Можно я скажу, что меня беспокоит?
— Подождите, я помечу, что это необходимо согласовать. Готово.
— Что меня очень, прям очень сильно беспокоит — это все эти «одноразовые» email-сервисы, типа Mailinator.com, которые позволяют создавать ненастоящие почтовые адреса.
— Давайте запретим использовать в форме адреса Mailinator.com?
(Записывает.)
— Но у Mailinator.com не один адрес, у них их больше 300!
— Давайте составим список.
— Нигде нет такого списка. Ты просто перезагружаешь сайт Mailinator.com и вылавливаешь все адреса, который он тебе отдаёт.
— Нужно будет посмотреть, как это обойти.
— Может быть не будем погружаться в эту кроличью нору, пока не обсудим общие вопросы безопасности?
— Я имею в виду, что возможно мы просто оставим валидацию библиотеке? Этого недостаточно? Вряд ли кто-то будет вводить в форму 500-страничный email-адрес.
— Русские будут.
— Очень возможно.
— Но мы можем просто ограничить размер поля, верно?
— Можем, конечно. Мы уже ограничиваем размер загружаемого изображения 2 мегабайтами при заполнении профиля.
— Какая связь?
— Мы это принимаем одним сообщением, поэтому кто-то может указать email размером 500 страниц. Нам нужно установить проверку.
— Если хотите, я могу этим заняться, потому что это всё относится к общей схеме базы данных.
— Мы можем это отлавливать на уровне базы данных?
— Вот поэтому я и возьму это на проверку.
— Может кто-то сделать фото доски?
— Конечно.
— Нам стоит обсудить сроки прекращения работы аккаунтов пользователя?
— Это есть в спецификации?
— Нет, но от этого зависят требованиям к срокам обновления пользовательских паролей.
— Кто за это отвечает?
И так оно продолжается доска за доской, под аккомпанемент щелчков фотоаппарата на мобильном. «Нам нужно отслеживать, сколько раз человеку отправлялось уведомление?» «Как мы удаляем адреса, если они уже в системе?» «Что, если кто-то введёт один и тот же адрес дважды?»
Программистка А выглядит очень профессионально. Она у доски — пишет, стирает, пишет, стирает. Списки, стрелки, прямоугольники, линии. Она написала на доске «РУССКИЕ?». Но через час до вас доходит: это ведь всего лишь email-адрес. Одно поле. Один крошечный кусочек данных. До имён вы даже не добрались. Что, если у пользователя одно имя, без фамилии? Что, если аккаунт заводит Боно или Шер? А если это китайский Боно? Разрешаем ли мы регистрацию на китайском? Какие браузеры нам нужно поддерживать? Нужно ли сотрудникам колл-центра уметь управлять аккаунтами?
Трудно в это время не представлять, как сгорают твои бочки с деньгами.
Программист B заносит всё в систему трекинга — заводит задачи, раздаёт поручения. Из этого совещания рождается целый шквал разосланных по почте заданий. Программист C молод, надоедлив и очень уж «программистский», но остальным он, похоже, вполне нравится.
Как убедиться, что кредитные карты действительны, а физические адреса реальны? Будем ли мы сами проводить финансовые транзакции? Какие внешние системы будут интегрироваться с нашими? Кто будет получать отчёты о продажах? Мы не обсудили софт для рассылок. Мы не обсудили длину пароля, количество букв и символов, необходимое, чтобы пароль был надёжным, и то, впишется ли наша парольная стратегия на этом сайте в общий профиль безопасности компании, за который отвечает совсем другое подразделение.
Так вот она какая, эта работа. И длится она днями.
Она превращается в спецификации и пользовательские истории, которые затем согласуют с ЧБП, — а тот сейчас в отъезде на конференции (но говорит вам, что несказанно рад вашему появлению на совещании).
За всё это время не пишется ни одной строчки кода.
5.1 Как связаны код и данные?
Данные приходят отовсюду. Иногда — от третьих сторон: Spotify импортирует огромные груды музыкальных файлов от звукозаписывающих лейблов. Иногда данные создаёт пользователь — письма, твиты, посты в Facebook, документы Word. Иногда данные порождают сами машины — как фитнес-браслет Fitbit или термостат Nest. Работая программистом, ты всё время говоришь о данных. Создавая сайты, тебе нужно достать данные из базы и разместить их на веб-странице. Если ты Twitter — данные это твиты. Если ты налоговая — данные это декларации, разбитые на поля.
Управление данными — та самая проблема, которую программирование и должно решать. Но, разумеется, теперь, когда компьютеры повсюду, мы все продолжаем порождать всё новые и новые данные, что требует нового программирования, и так по кругу. Чертовски трудная задача, конца которой не видно. Вот почему люди в технологиях зарабатывают такие деньги. Мало того, что они продают бесконечно копируемые пустышки — они продают их в таких количествах, что вынуждены изобретать новые категории бесконечно копируемых пустышек, просто чтобы разгрести последствия предыдущей партии. Так мы и получили «большие данные». Я бывал на конференциях по большим данным — там яблоку негде упасть.
5.3 Где живут данные?
Редкая крупная задача обходится без базы данных. Amazon, Google, Yahoo! , Netflix, Spotify — у всех огромные, мощные базы данных. Самая распространённая для управления этим богатством технология — реляционная база данных, использующая язык под названием SQL (Structured Query Language, «язык структурированных запросов»). Реляционные базы представляют мир в виде таблиц, у которых есть строки и столбцы.
Язык SQL выглядит так:
SELECT * FROM BOOKS WHERE ID = 294;
Из чего следует, что есть таблица под названием BOOKS, а в ней — строка, где обитает книга с ID, равным 294. ID в базах данных — штука важная. Представьте базу данных книжного магазина. В ней есть таблица customer со списком покупателей. Есть таблица books со списком книг. И есть хитрая промежуточная таблица purchases со строкой на каждый случай, когда покупатель купил книгу17.
17 Когда говорят о базах данных, часто используют аббревиатуру CRUD — create, read, update, delete («создать, прочитать, обновить, удалить»). Огромные объёмы кода языка SQL целиком посвящены управлению CRUD-операциями.
Поздравляю! Ты только что построила Amazon! Правда, пока мы пытались построить книжный магазин, мы на самом деле построили смерть книжных магазинов — в этом бизнесе такое случается сплошь и рядом. Берёшься за что-нибудь классное, а в итоге уничтожаешь кучу того, что было до тебя.
Реляционные базы данных появились в 1970-х и с тех пор только развивались. Но традиционным для мира разработки способом. Теперь, если ты крупный заказчик, у тебя на выбор есть Oracle, компания Microsoft тебе предлагает свой SQL Server, а не менее уважаемая IBM — свой продукт под названием DB2. Все они говорят на SQL и работают схожим образом, с ровно таким количеством различий, чтобы переход с одной на другую влетел в копеечку.
Oracle заставляет платить тысячи долларов за свою коммерческую корпоративную базу, но всё большая часть мира работает на бесплатных базах вроде PostgreSQL и MySQL. Есть даже крохотная базочка под названием SQLite — настолько маленькая, настолько послушная и с настолько либеральной лицензией, что теперь она стоит практически в каждом смартфоне, помогая мобильным приложениям сохранять и загружать данные. Прямо сейчас у тебя в кармане, скорее всего, лежат несколько мощных баз данных на SQL.
5.3 Язык программирования белых воротничков
Подойди к программисту и скажи «Большое Корпоративное Программирование» — и он сразу подумает о Java. Зайди на любой популярный сайт вакансий для программистов, вроде dice.com, и поищи позиции в Нью-Йорке. При недавнем поиске там было почти 2,000 вакансий по Java; 1,195 по JavaScript; 930 по Python; 344 по Ruby. И только две по Lisp.
Язык программирования Java родился в недрах некогда гигантской Sun Microsystems (земля ей пухом) стараниями команды под руководством уважаемого разработчика по имени Джеймс Гослинг. Он объектно-ориентированный, но при этом сильно похож на C и C++, так что для тех, кто понимал благородные языки, освоить его было довольно легко. Он был задуман в 1991 году и к 1995-му его явили публике на исполинском облаке корпоративного маркетинга — его провозгласили ответом на все беды, когда-либо терзавшие программистов! Java работает на любом компьютере! Java запустится прямо в вашем браузере! Она работает в «апплетах» — встроенных в веб-страницы окнах (вскоре прозванных «крапплетами» — он слова crapp — дерьмо), и со временем наверняка захватит весь веб! Java! Работал он очень медленно по сравнению с более традиционными языками. А зачем он был нужен? Java!
На рынок даже выпускались специальные сетевые компьютерные терминалы под названием JavaStation. В 1996 году Kleiner Perkins Caufield & Byers даже объявили о создании Java-фонда на 100 миллионов долларов для развития технолоии. Но после всего этого ажиотажа Java как-то… побурлил немного и угас. Будущее оказалось не таким, каким его предполагала Sun.
Идея была в том, что Java должна была работать «внутри» браузера в виде плагина. Но толком она никогда не работала. Она была невероятно медленной и неуклюжей, а при её загрузке каждый раз возникало ощущение, будто балансируешь на краю катастрофы. Эта паранойя регулярно оправдывалась, когда браузер намертво зависал или вылетал. Всякие Java-украшения, задуманные как цифровой ключ, хранилище платёжных данных и удостоверение личности, тоже особым успехом не пользовались. Но Java была бесплатной и разработанна так, чтобы обещать пользу командам любого размера.
Вот несколько фактов о Java, которые помогут понять, как, несмотря на все недостатки, она постепенно захватила мир разработки только благодаря внутренним возможностям языка.
Это был большой язык. Он шёл в комплекте с огромным количеством уже готового кода — «библиотекой классов» — где были все необходимые инструменты для работы с базами данных и сложными документами. Java позволяла заниматься серьёзной математикой и общаться с разными сетевыми сервисами. В этой библиотеке ждала своего часа уйма классов, методов и функций практически под любой запрос программиста.
Java автоматически генерировала документацию. Это было огромным делом. Все твердят, что любой код нуждается в исчерпывающей сопроводительной документации, что это не прихоть, а по-настоящему важное требование. Без неё очень сложно поддерживать и развивать любой код. Но на практике этот принцип чаще всего подтверждается его нарушением. Теперь же можно было запустить инструмент под названием javadoc, и он делал тебе веб-страницы со списком всех классов и методов, доступных внутри твоего кода. Документация эта выходила довольно паршивая, но всё же лучше, чем ничего, и её было несложно улучшить, если выделить на это время.
Существовала масса учебников по Java, воркшопов, обучающих семинаров и сертификаций. Программисты могут проходить курсы и сдавать экзамены, чтобы получить официальный сертификат по множеству технологий. У Java-программистов выбор был особенно широк.
Она запускалась на «виртуальной» машине, а значит, Java «работала везде», а значит, её можно было запустить на Windows, Mac или Unix-машинах, и вёла она себя одинаково. Это был исключительно грамотно спроектированный компромисс. Что делало этот язык идеальным для больших компаний18. По мере того как двухтысячные шли своим чередом, Java становился всё популярнее для серверов приложений. Строите систему управления контентом для компании с 2,000 сотрудников? Java подойдёт. Нужно соединить десятки тысяч сотрудников друг с другом? Java. Нужно, чтобы один банк общался с другим банком каждый день в 17:01? Java. Графики и диаграммы, увесистые отчёты, расчёт пятилетних проектов? Java. Она не изящна, не очень подходит для запуска быстрых и простых вещей, зато очень предсказуема. Язык для строительства очень больших вещей в очень больших местах очень большими командами.
18 Другие языки, вроде Perl, PHP, Python или Ruby позволяют делать ровно то же самое и работают на тех же платформах — но изначально они были задуманы для для быстрого запуска программ. Но у них нет такой же мощной сопроводительной поддержки.
Люди жалуются, но он работает.
5.4 Кратко об огромной теме под названием Microsoft
Разумеется, если ты Microsoft, наблюдать за всем этим активным бурлением вокруг просто невыносимо. Нельзя допустить, чтобы какая-то другая компания заползала в ваши банки и корпорации со своим дурацким языком. Нельзя допустить, чтобы люди выбирали запускать что-то на виртуальной машине, когда им следовало бы запускать это на Windows-машинах, как заповедали Господь Бог и Билл Гейтс.
Никогда не списывайте Microsoft со счетов. Её великий корпоративный талант всегда состоял в том, чтобы брать чистейшую странность компьютерных идей и переводить её для корпораций на язык Глобального Бизнес-Лидерства. Что бы мы с тобой тут ни обсуждали, Microsoft предлагает как минимум одну версию этого. Статическая типизация, скриптинг, управление данными, функциональщина — назовите любое своё туманное прилагательное, и Microsoft продаст вам что-нибудь, что это обеспечивает, и вы сможете писать под Windows и жить Windows-жизнью. И это вовсе не претензия; продукты Microsoft бывают не хуже, а то и лучше всего, что есть на рынке.
Руководство Windows 95 с участием Дженифер Эннистон и Мэтью Пэрри.
5.5 Жидкая инфраструктура
«Энтерпрайз» — слово, которого программисты боятся, потому что разработка монструозных проектов для крупных заказчиков — это масса работы, которую редко можно продемонстрировать. Ещё очень часто подобные проекты любят с треском проваливаться или тихо закрываться, не оставляя после себя никаких артефактов.
При этом программисты уважают большие системы, особенно когда те работают. Невозможно не уважать амбициозность огромных тяжёлых машин, каждую секунду пережёвывающих здоровенные объёмы данных и кода. Мы выросли, читая про суперкомпьютеры. Большое железо — это круто, даже если будущее, судя по всему, за гигантскими облачными платформами, размещёнными на кучах дешёвых серверов.
Язык Java идеально подходит для мест вроде General Electric или Accenture. Он так же вовсю используется в продуктах Google. Это не стартапы, если у них сдвигаются сроки выпуска продукта, сдвигается и выручка, а эти компании подотчётны публичным рынкам. Гигантские организации, живущие на данных, вынуждены выстраиваться вокруг кода и профессионально заниматься производством софта. Но это не значит, что у них огромные команды — Amazon, например, знаменит своим правилом двух пицц: «Никогда не собирай совещание, на котором две пиццы не смогли бы накормить всю группу».

У этих компаний есть культура, которая умеет делать софт. У них есть целые отделы, посвящённые тестированию. Процесс важен, потому что движущихся частей очень много, и многие из них невидимы.
Глобальная база компьютерных знаний традиционно пополняется из двух источников. Есть чисто академические исследователи, они постоянно производят какие-то алгоритмы и вещи, которые в принципе работают, но не имеют интерфейсов. Им нужно проверить свои тезисы, опубликоваться и перейти к следующей задаче. Ты можешь делать с результатами этих исследований что угодно. И есть люди из сообщества свободного ПО, которые пишут код, чтобы почесать зудящее место, и отпускают этот код в бесплатное цифровое достояние, чтобы другие могли его менять и крутить как хотят. Хотя чаще всего этот процесс никуда не ведёт, но некоторые подобные проекты со временем завладевают воображением других и становятся частью глобальной инфраструктуры.
Java, что любопытно, извлекает выгоду из всего этого. Язык создавался для больших корпоративных проектов и располагает масштабной инфраструктурой, чтобы их обслуживать. При этом он может быть полезен и для средних задач. Так что новые библиотеки, нужные тебе для дела, — обработка изображений, запись в лог-файлы, полнотекстовый поиск — продолжают появляться ровным потоком, улучшая стандартные библиотеки языка или вовсе вытесняя их.
Со временем люди поняли: если тебе не нравится сам язык Java, ты можешь писать на других языках, которые компилируются в Java-«байткод» и работают на виртуальной машине Java (JVM). Так что теперь существует множество языков, работающих поверх Java. Одни — это версии хорошо известных языков, вроде Jython и JRuby. Другие совершенно новые, как Scala — один из языков, на которые начал переходить Twitter, когда перерос Ruby, на котором изначально создавался. Есть ещё Clojure, которы по сути является… Lisp'ом. То есть Clojure берёт всеми обожаемый компьютерный язык из 1950-х, обновляет его для 2010-х и наделяет этот язык способностью переиспользовать все Java-классы на свете.
Clojure создал Рич Хикки, решивший, что ему хочется новой, современной версии Lisp. Который, может, и не такой функциональный по сравнению с современными языками, но его до сих пор чтут как уникальную модель мышления — этакая бритва Braun или кресло Eames — только для программирования. Хикки работал над Clojure много лет и в итоге приспособил его для работы на JVM. Это стало поворотным моментом — у Clojure появлялся доступ ко всей библиотеке классов Java целиком.
Результат: ты приходишь в офис, садишься за компьютер и пишешь немного Lisp'оподобного кода — очень элегантного, продуманного, аккуратного и удобного, — но при этом у тебя есть доступ к тысячам и тысячам невероятно хорошо продуманных и полностью рабочих бесплатных библиотек, которыми можно пользоваться, чтобы решать свои задачи.
Всё, что умеет Java, умеет и Clojure. А поскольку он построен поверх JVM, делать это он может на любом компьютере. Инструменты для редактирования Lisp уже существовали, и переделать их под Clojure было довольно легко. Он присосался к Java, как рыба-прилипала к акуле. Или, точнее, это прилипала, прицепившаяся к прилипале, потому что сама JVM — это ненастоящая машина, работающая внутри настоящих машин. Clojure любят, но широко им не пользуются. Может, он ещё станет популярнее, ведь он всплывает в любопытных местах. Его, например, используют в Wal-Mart Stores, чтобы собирать и обрабатывать данные с чеков. Его портировали в мир Microsoft, и он работает прямо внутри Excel. Совершенно безумная штука. Берёшь таблицу. А внутри таблицы носится какой-то Clojure-код, обращаясь к разным ячейкам и столбцам. Кто-то сделал версию, которая компилируется (ну, транспилируется) в JavaScript, — и бам, Clojure работает у тебя в браузере. Эта версия, кстати, называется ClojureScript.
Суть в том, что в мире программирования всё текуче — текуче так, как в других отраслях, кажется, не бывает. Языки — это жидкая инфраструктура. Скачиваешь пару программ и — оп! — у тебя вдруг рабочее окружение Clojure. Которое на самом деле является средой исполнения Java. Берёшь старый ПК, отслуживший своё, ставишь на него Linux — и вдруг у тебя мощный веб-сервер. Теперь ты можешь приобщиться к совершенно новым культурам. Есть митапы, воркшопы, конференции, блоги и люди, болтающие об этом в Twitter. И тебе рады. Свежей крови здесь всегда рады.
Java должен был вытеснить C и работать внутри ювелирно-умных систем. Теперь он крутит серверы приложений, хостит Lisp'оподобные языки и является основным языком операционной системы Android19. Он работает на миллиардах устройств. Он победил. Но и C и C++, которые он должен был вытеснить, тоже победили. Многое продолжает побеждать, потому что компьютеров становится всё больше, и применение находится для всего. Странно всё это.
19 При этом Oracle это совсем не обрадовало, и — долгая история — она подала на Google в суд.
5.6 Готовое решение
Через несколько недель, когда ЧБП снова оказывается в офисе и приходит на очередную встречу, ты его спрашиваешь, нельзя ли использовать побольше готовых компонентов? Ну, знаешь, просто купить решение и не изобретать велосипед.
Он кривится. И объясняет: если ты строишь систему, которая должна взаимодействовать с другими системами, а сама компания и есть совокупность таких систем, то ничего по-настоящему «готового» не существует. Есть инструменты, пакеты, библиотеки. И если у тебя есть хоть капля здравого смысла, ты уже давно используешь хорошо документированный бесплатный код для таких вещей, как, например, проверка адресов электронной почты. Но это избавляет лишь от небольшой части работы.
— Всё упирается в пограничные случаи, — говорит он. — Пограничные случаи и тестирование.
Ты делаешь вывод: мир сломан.
Как отправить письмо c помощью «готового» решения
Если тебе нужно, чтобы твоё JS-приложение автоматически отправляло кому-нибудь письмо, ты, вероятно, поступишь примерно так:
- Загуглишь
npm e-mail; - Перейдёшь по первой ссылке; увидишь, что существует популярный модуль, который называется «e-mail», его только за последний месяц скачали 5,015 раз;
- Наберёшь в командной строке
npm install e-mail; - Пробежишь глазами веб-страницу модуля в поисках примера использования;
- Скопируешь и вставишь код;
- Слегка его подправишь;
- Запустишь код, набрав
node myscript.js; - Немного потупишь в недоумении, когда ничего не произойдёт;
- Потратишь полдня, а то и больше, на настройку почтового сервера, чтобы он и вправду отправлял письма;
- Отправишь себе столько писем, что почтовый сервис заблокирует тебя как спамера;
- Забьёшь на всё это на денёк;
- На следующий день попробуешь ещё раз запустить почтовый код;
- Повторишь это тысячу раз со знакомым чувством обречённости;
- Как только заработает — закоммитишь в репозиторий, отправишь письмо команде и обновишь статус кода в баг-трекере;
- Пообещаешь себе, что напишешь документацию и тесты завтра;
- Никогда их не напишешь.
5.7 А что насчёт JavaScript?
Помнишь Netscape, первый популярный коммерческий веб-браузер? В 1995 году, пока расцветала Java, Netscape решал одну одну очень важную проблему: тогдашние веб-страницы были не слишком-то «живыми». Можно было разместить на странице симпатичную мультяшную обезьянку, но заставить её танцевать, когда ты наводишь на неё мышкой, было никак нельзя. Придумать, как это сделать, поручили разработчику по имени Брендан Айк. Он сел и за несколько недель создал язык под названием JavaScript*.
* Сначала он назывался LiveScript, а позже был переименован.
Родство JavaScript с Java весьма условно; самая крепкая связь между этими языками — маркетинговая схожесть названий. Да и ранняя история JavaScript вдохновляла мало. Итак, обезьянка теперь могла танцевать, можно было вытворять что-то с курсором или заставлять предметы мигать при касании мышью.
Но по мере того как браузеры множились, а веб вырастал из платформы для доставки документов в платформу для доставки софта, JavaScript стал, пожалуй, самой широко используемым языком в мире. Написав немного кода на JavaScript, ты мог запустить его везде, где есть веб, — то есть повсюду.
JavaScript годами копошился где-то на обочине индустрии — как, впрочем, и Java. Только без мощной маркетинговой поддержки такой корпоративной машины, как Sun. А затем, около десяти лет назад, люди заговорили об Ajax20 — идее, что в веб-страницу можно встроить настоящий софт: не просто документ, а программу, способную в браузере делать реальную работу.
20 Ajax — сокращение от «Asynchronous JavaScript and XML» («асинхронный JavaScript и XML»). Этот набор технологий позволял браузеру взаимодействовать с сервером без перезагрузки страницы.
Теперь веб-страница могла реагировать и меняться в зависимости от поведения пользователя. Это невероятно помогало тебе распространять свой софт среди сотен миллионов людей, — JavaScript работал где угодно, достаточно было стандартного браузере. Он не был таким управляемым, как Java, работал куда медленнее приложений, написанных на C и страдал от вопиющей нехватки привычных для разработчиков инструментов. И тем не менее: мы получили Gmail, Google Maps, Flickr, Twitter и Facebook. Теперь стало можно управлять каждым отдельным пикселем на веб-странице; шрифт можно менять, слова могут двигаться, кнопки можно нажимать и мгновенно видеть результат.
Как и у любой знаменитости, вокруг него сложилась целая индустрия, которая занималась прикрыванием его недостатков и наведению лоска. Есть книги о «хороших частях» JavaScript; есть и библиотеки, делающие программирование на нём проще и последовательнее, — например, jQuery, способный превратить множество строк кода, необходимых, чтобы заставить абзац исчезнуть, в единственное $(«p.optional»).hide(); .
Ещё в эпоху iPod и «Макинтошей» карамельного цвета Apple взяла код опенсорсного веб-браузера под названием Konqueror и переделала его, создав Safari — собственный браузер для конкуренции с Internet Explorer от Microsoft.
Затем, в 2008 году, Google начал вносить собственные изменения в движок браузера, который использовал Safari, — он назывался Webkit, — и сделал на его основе свою собственную версию браузера под названием Chrome с молниеносно быстрым обработчиком JavaScript. С помощью специального движка под названием V8 они впервые сделали JavaScript быстрым.
— Разработчики до сих пор подходят к производительности JS-кода так, будто едут на телеге, — писал кто-то в Twitter, — хотя лошадь давным-давно заменили термоядерным реактором.
Все продукты Google выигрывали от быстрого JavaScript.
В 2009 году программист по имени Райан Дал модифицировал движок V8 (который был свободным ПО) и заставил его работать вне браузера. Отдельно стоящие версии JavaScript существовали и раньше (в том числе некоторые работали внутри Java, естественно), но ни одна не была такой быстрой. Этот очередной форк он назвал Node.js — и тот просто взлетел. Ещё вчера JavaScript был ограничен веб-страницами. Теперь он вырвался из своей браузерной клетки и мог работать где угодно. Он мог трогать твой жёсткий диск, отправлять почту, стирать все твои файлы. Теперь это был настоящий язык программирования. А клиент… стал сервером.
Вот немного JavaScript, который возводит для вас числа в квадрат:
function squares(count) {
var x = [];
for (var i=1;i<count+1;i++) {
x.push(i*i);
}
console.log(x.join(" "));
}
squares(10);
Тысячи разработчиков со всего мира одной большой волной бросились тестировать Node.js и создавать для него модульные библиотеки. Если ты знал, как JavaScript работает на веб-странице, то мог заставить его работать и на сервере. А несколько любопытных особенностей языка делали его хорошим для написания софта, способного обслуживать несколько пользователей одновременно. В браузере JavaScript одновременно прислушивался к куче вещей: двинулась мышь; пользователь нажал клавишу; из сети пришла какая-то информация. На сервере он мог получать информацию от десятков или сотен пользователей одновременно и выдавать, пересчитывать и обновлять запрошенную ими информацию.
Вскоре сообщество наработало огромную библиотеку пакетов — кусочков софта, которые делают конкретные вещи: читают файлы, общаются с базами данных или взаимодействуют с сервисными инструментами Amazon. На момент написания этого материала на сайте npmjs.com существует 150,000 пакетов и библиотек. Только за последний месяц было скачано более миллиарда копий различных пакетов.
NPM — центральный источних этих бесплатных модулей, которые ты можешь использовать на своём проекте, расшифровывается как Node Package Manager («менеджер пакетов Node»). Штука, по правде говоря, довольно неповоротливая, потому что многие из этих 150,000 пакетов просто так себе. Это уйма поиска, тестирования и разочарованных вздохов. Но когда у тебя столько всего на выбор, да ещё и бесплатно, грех жаловаться. JavaScript — мешанина, состряпанная на бегу, и работает он на, ну, кто знает, но скажем так, на миллиарде с лишним устройств, так что можно и смириться. Может, у ваших клиентов и нет айфонов, но какой-нибудь другой способ запустить JavaScript у них наверняка найдётся.
Его можно смело использовать, чтобы сделать более интересную веб-страницу. Можно использовать, чтобы сделать клиентскую часть полноценного приложения вроде Google Docs, работающего в браузере. Можно использовать, чтобы сделать сервер, который общается с браузером и отдаёт ему какие-то результаты сложных расчётов. А можно использовать, чтобы сделать API21, отдающий данные «клиенту», — и да, этим клиентом мог бы быть браузер на ноутбуке. Но на дворе 2015 год, и этот клиент вполне вероятно окажется приложением на смартфоне.
21 API — Application Programming Interface, «интерфейс прикладного программирования» — такой специальный стандарт и набор классов, через готорый программы общаются между собой.
5.8 Что за абсолютный минимум я обязан знать про PHP?
Поднять сайт на PHP можно за считаные минуты — и в этом-то вся проблема. Раньше это был ужасный выбор, к которому ты прибегал, когда нужно было что-то сделать в интернете, но всё чаще JavaScript вытесняет его с позиции ужасного выбора по умолчанию.
PHP расшифровывается как Personal Home Page/Forms Interpreter *. Идея была в том, что при загрузке твоих веб-страниц PHP-код срабатывал прежде, чем страница уходила в интернет. И PHP мог, скажем, проверить, залогинен ли ты. Если да — он мог показать тебе твои сверхсекретные данные; а если нет — сказать «Пожалуйста, войдите». И это было круто на заре становления интернета.
* Теперь PHP расшифровывается как «PHP: Hypertext Preprocessor» («PHP: препроцессор гипертекста»).
Я знаю немало людей, которые программируют на PHP, и это умные, хорошие люди. На PHP работают Etsy и Facebook. На нём работает Wikipedia, боже ты мой. Или платформа для блогов WordPress. Из всех веб-страниц мира огромный процент создан на PHP.
Зарабатывать на жизнь программированием на PHP — не смертный приговор. Куча людей разбогатела на PHP. Просто это означает много ручного копирования кода и много походов в Google, чтобы выяснить, почему всё не работает.
Бедный, печальный, непутёвый, невероятно эффективный, безумно успешный PHP. Читать PHP-код — всё равно что читать поэзию, которую ты писала в старшей школе.
Я провёл несколько сотен, а может, и тысяч часов, программируя на PHP, — в те времена, когда я не понимал, что делаю, и PHP тоже не понимал. Перезагружал веб-страницы, пока пальцы не начинали болеть. (Слышу твои сочувственные всхлипы.) Всё вечно ломалось, а мои сайты вечно кто-то взламывал.
PHP. Не желаю ему зла. Рад видеть, как хорошо он устроился. У нас с ним было немало славных деньков. Просто больше не хочу к нему обратно. Никогда.
Добро пожаловать в симулятор Java. Получи полный набор впечатлений от работы с технологией!
(Двойной щелчок, чтобы остановить симуляцию.)
Нажми на окно загрузки Java, чтобы начать.