Статьи
Что такое Код?
130

Что такое Код?

0qmm-dYUnrhKWsgmClbLEvBSfpfJUngkZtPxgiqMiNw

ITC.UA предлагает вашему вниманию перевод статьи журналиста и программиста Пола Форда «What is Code?»опубликованной на сайте Bloomberg Businessweek. Этот материал содержит больше 200 тысяч знаков увлекательного текста о том, что такое код, каким он бывает, кем и как разрабатывается. Но самое главное, что Полу Форду удалось сделать живой текст о, казалось бы, уж очень «сухой» теме. Он однозначно пригодится тем, кто не связан с программированием, но в последнее время часто сталкивается с кодом и кодерами, а также тем, кто еще раздумывает, стоит ли учиться программировать. Несмотря на больше, чем 200 тыс знаков с пробелами, мы не стали разбивать статью на несколько частей, так будет проще, если понадобиться к ней возвращаться или сохранить в сервисе для отложенного чтения.

Послание Джоша Тирангиеля  

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

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

Джош Тирангиел (Josh Tyrangiel), журналист, редактор Bloomberg Businessweek.

1. Человек в темно-сером пиджаке

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

Медные наградные таблички на стене подтверждают ваши разнообразные способности лидера как внутри компании, так и за ее пределами. Одна из них «Награда за внедрение инноваций — 2011 год» от коллектива отдела продаж за вашу поддержку выполнения полуторагодичной программы уменьшения цикличности в продажах. Благодаря успеху объем чистых продаж увеличился на 6,5%. Другая – «Городской светофор 2008» — за осуществление контроля над группой волонтеров, которые полностью перекрасили здание муниципальной школы.

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

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

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

Он заявляет: «По сути мы в пределах возможностей WordPress» (система управления содержимым сайта с открытым исходным кодом, распространяемая под GNU GPL)

Кто носит пиджак темно-серого цвета?

Главный технический директор был уволен полгода назад. У него трое детей учатся в колледже, и он носит усы. Это было плохое окончание карьеры. Человек в пиджаке темно-серого цвета работает у нового главного технического директора. Она пришла с Adobe, у нее короткая стрижка и нет усов.

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

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

Вот почему здесь присутствует человек в темно-сером пиджаке

Да кто он такой? Вебмастер? Айтишник? Нет, он – «Скрам Мастер» (Scrum Master – специалист в вопросах Scrum-cовещаний, одной из гибких методологий разработки ПО. Впервые была использована в 1993 с целью улучшить продуктивность команды разработчиков, сделав упор не на качественно определенный, а на качественно контролируемый процесс разработки. Важной частью этой методологии являются Scrum-совещания)

«По этому поводу у моих людей разные точки зрения», продолжает он. «Некоторые хотят использовать систему Drupal 7 и применить его с Magento, которая также написана на языке РНР». Он хмурит брови. «Второй вариант – просто создать СУБД на программной платформе Node.js с библиотекой Backbone для пользователей во front-end.

Вы сдвигаете брови. Он смотрит на вас с симпатией в глазах и объясняет: «С подобной опцией это все будет в JavaScript. Front-end и back-end».

Вы уже слышали эти термины. Вы читали страницы в «Википедии», а также справочник по оценке стоимости проекта программного обеспечения. И все, казалось, было понятным.

Вы задаете универсальный запланированный вопрос: «Вы подсчитали стоимость этих вариантов?»

Он подает вам цифру и дату сдачи проекта. В душе вы уже знаете, что эта цифра составляет половину того, что должно быть на самом деле, и что проект продлится еще год после его официального окончания. Он обещает вам долгосрочные результаты. Уже не нужно будет платить $85 000 за лицензии Oracle; все техническая часть будет располагаться в бесплатной базе данных с открытым исходным кодом. «Нам следовало сделать это раньше, когда мы занимались системой Magento» говорит ваш собеседник. Подразумевая, естественно, что его предшественник, возможно, решил этот вопрос.

Вы смотрите в электронную таблицу и напоминаете ему, что контракт с Oracle был обновлен несколько месяцев назад. Поэтому нет, по крайней мере, не на сегодняшний день. Глубокий вздох.

Этот человек зарабатывает на треть меньше, чем вы, у него степень бакалавра одного крупного уважаемого университета. Но у него есть 500+ контактов на LinkedIn. Этот значок «плюс» после 500  вызывает у вас беспокойство. Насколько это пятьсот? Пять? Пять тысяч?

Каким-то непостижимым образом он превосходит вас. Не в смысле, как сотрудник компании, не умением заказать столик в ресторане, нет. И все же. Он поглаживает свою короткую бороду, у него загорелые руки, он занимается туризмом, и на его носках вышита фигурка маленького ниндзя.

«И не забудьте», напоминает он, «нам нужно предусмотреть бюджет на приложения».

Вот это я понимаю. Скрам Мастер в носках с ниндзя пришел к вам в офис и говорит «Нам нужно предусмотреть бюджет на приложения». Даже если все полетит в тартарары, с его карьерой ничего не случится.

Вы работаете на перспективу с мыслями о бочках наличности. Недавно вы узнали, что сухотарная бочка вмещает в себя порядка $100,000. В следующем году вы одну бочку опорожните на Oracle. Одна бочка – это еще неплохо. Но вы не знаете во сколько бочек вам обойдется этот проект – 5, 10? Или больше? Еще рано делать выводы. Но вы уже чувствуете запах денег…

На этом этапе встречи вам нравится смотреть в глаза просителя. Вы спрашиваете «Окей, вы назвали срок сдачи объекта и сумму затрат. Но когда он будет выполнен? Реально. По-настоящему. Ну признайтесь, облегчите свою душу!»

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

1.1 Почему мы здесь?

Мы здесь потому, что редактор журнала попросил меня: «Ты можешь объяснить, что такое код?»

Я ответил: «Нет, не могу. Прежде всего, потому, что я не силен в математике. Да, я программист, но я программист Восточного побережья, а не один из серьезных мужиков-специалистов по созданию платформ из залива Сан-Франциско». (Намек на различия в условиях оплаты работы программистов. В Сан-Франциско она обычно выше – примечание переводчика).

Я начал заниматься программированием почти 20 лет назад, изучив язык oraperl, специальную версию Perl, модифицированную под базу данных Oracle. Через месяц активной работы я повредил аккаунты 30 000 баскетболистов. Они направили мне полные гнева электронные письма, после чего я решил стать лучше.

Не хочу сказать, что я какой-то особенный. Да, я люблю компьютеры, но они никогда не имели для меня большого значения. Однако, через двадцать лет настойчивых попыток впихнуть нужную информацию в «кодонепроницаемые» мозги, я накопил достаточно знаний, которые мне открыл компьютер, но его очарование и волшебство со временем исчезло. Сейчас я могу говорить с любым собеседником, который пользуется Amazon.com или Microsoft на работе без страха сгореть со стыда. Кроме того, я готов свободно общаться с собеседниками на темы Google и Apple, однако эти лица редко посещают круг моих знакомых.

Лучше всего я знаю «всемирную паутину» World Wide Web (я кодил за деньги на языках программирования Java, JavaScript, Python, Perl, PHP, Clojure, и XSLT). Но «паутина» представляет собой только маленькую часть огромного мира создания программного обеспечения. Согласно результатам исследования IDC, в мире насчитывается 11 миллионов профессиональных разработчиков программного обеспечения. Кроме них, еще 7 миллионов  — это те, для кого написание ПО служит увлечением. Количество сопоставимо с населением большого Лос-Анджелеса. Представьте себе, все жители города занимаются программированием. Район Ист — Голливуд населен айтишниками для Mac, Западный район Лос-Анджелеса разрабатывает приложения для мобильных устройств, Беверли – Хиллз заполнен программистами, которые пишут программы для финансовых учреждений, а округ Ориндж – работает на «Уиндоуз».

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

Хочу сказать вот что. Я – один из этих 18 миллионов чудаков. Моя точка зрения относительно написания программного обеспечения является чисто индивидуальной среди миллионов. Система создания кодов является моей жизнью так же, как и вашей. Пришло время понять, как эта система работает.

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

2. Давайте начинать

Компьютер – это своеобразные часы со многими выгодами. Работают они одинаково, выполняя задачи по математике для второго класса: ставим отметку, берем номерок и кладем его в клеточку №1. Ставим отметку, берем следующий номерок и кладем его в клеточку №2. Ставим отметку, операция (это может быть сложение или вычитание) этих двух цифр, а затем кладем полученную сумму в клеточку №1. Делаем отметку, проверяем. Если результат равен нулю, берем другую клеточку и выполняем новый набор инструкций.

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

Фирма Apple всегда производила компьютеры, а компания Microsoft создавала исключительно программное обеспечение и такие аксессуары, как мыши и клавиатуры. Однако в последнее время и она начала заниматься аппаратным обеспечением, благодаря конструированию игровых консолей Xbox, планшетов Surface и телефонов Lumia. Фирма Facebook занимается сборкой собственных компьютеров для своих дата-центров.

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

Когда вы обрабатываете в пакетном режиме тысячи изображений в «Фотошопе», или суммируете цифры в «Экселе», вы занимаетесь программированием, пусть в малых объемах. Когда вы слишком часто используете компьютер – в обычных объемах – тогда он начинает изменять вас. Мне снится «Фотошоп», Microsoft Visio, электронные таблицы и браузер. Мечты в виде фантастических пейзажей можно сортировать и реструктурировать. Меня даже посещают сны о программировании, где я перемещаю текст вокруг экрана.

Вы можете заставить компьютер создавать изумительные вещи, однако должны понимать пределы его возможностей. Он не всемогущий и не здравомыслящий. Он быстрый, однако некоторые комплектующие, как, например, процессор, или оперативная память работают быстрее, чем другие микросхемы, например, жесткий диск, или система подключения к Сети. Чтобы «снабдить» их бесконечными возможностями, необходимо максимум усилий со стороны программистов и специалистов по продвижению и продаже компьютеров.

Известный в конце прошлого века британский художник Уильям Моррис как-то сказал: «Нельзя создавать искусство без сопротивления материалов». Компьютер и его внешнее оборудование – это материалы, а код – это искусство.

2.1 Как вы печатаете букву “A”?

Давайте представим, что происходит, когда вы нажимаете на клавиатуре клавишу. Скажем, строчную «а». Клавиатура ждет, когда вы нажмете клавишу, или отпустите ее. Она постоянно сканирует процесс, чтобы увидеть, какие клавиши нажаты. Ударяя по клавише, вы посылаете ее идентификационный скан-код.

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

Просто, не правда ли? Компьютер «обращается» к таблице, определяет, что сигнал соответствует букве «а» и выводит ее на дисплей. Однако, это не так. Слишком просто. Компьютеры – это устройства, которые не знают, что такое дисплей, или прописная буква «а». Чтобы вывести «а» на дисплей, ваш компьютер должен извлечь образ буквы «а» из своей памяти, как часть шрифта, поскольку буква выполнена в виде линий и кругов. Он должен взять эти круги и линии, а затем преобразовать их в маленькую клетку пикселей в той части памяти, которая управляет дисплеем. Пока у нас есть минимум три изображения одной буквы: поступивший с клавиатуры сигнал, версия в памяти и эскиз в виде кругов и линий на мониторе. Мы еще даже не рассмотрели, каким образом его можно хранить, или что случится с буквами, расположенными с левой и правой сторон, когда вы вставите «а» посредине предложения. Или что означают круги и линии, когда они сокращаются до двоичных данных. Существует много вариантов для изображения простой буквы «а», и что самое удивительное, любой из них прекрасно выполняет свою функцию.

Нужно обладать особенным темпераментом, чтобы пролистать и изучить документы по стандартам, руководства пользователя, а также прочитать такие фразы, как, например, «поля данных передаются таким образом, что наименее значимый бит информации посылается в первую очередь». Это делается для того, чтобы понять, почему, когда вы ожидали букву «ü», вместо нее постоянно получаете «♦».

2.2 От аппаратного до программного обеспечения

Аппаратное обеспечение – это тонкое дело. На протяжении десятилетий работа, связанная с интегрированием, сборкой и поставкой компьютеров обеспечивала возможность заработать состояние. Однако со временем сферы деятельности постепенно сужались. Обратите внимание на Dell, сейчас это частная компания, или Gateway, которую выкупила Acer. Бренды Dell и Gateway – два конкурента мирового класса не участвовали в разработках программного обеспечения, а занимались сборкой персональных компьютеров с предварительно инсталлированной Microsoft Windows, а также созданием сервисов по подписке для увеличения прибыли. А это приводит к отрицательной реакции индивидуальных пользователей, которые заплатили за компьютер около 1000 долларов и сейчас пытаются  понять, как избавиться от дополнительных расходов на антивирусное программное обеспечение.

Несколько лет назад, когда Microsoft была на троне, Стив Балмер, Генеральный исполнительный директор, в промокшей от пота голубой рубашке прыгал перед аудиторией на стадионе и скандировал: «Раз-ра-бот-чи-ки!», «Раз-ра-бот-чи-ки!», «Раз-ра-бот-чи-ки!».

Он так вопил, пока не охрип: «Я люблю эту компанию!» Конечно, он любил. Если вы торгуете программным обеспечением, вы продаете бесконечно повторяемое ничто с заоблачной маржой. Но это все до поры, пока кто-то другой не начнет продавать ничто еще дешевле, или просто раздавать. Что в конечном итоге и происходит. Системы с бесплатным программным обеспечением, как например, Linux, начали постепенно «откусывать», а затем поглощать рынок серверов, а бесплатные для пользователей сетевые приложения (Google) стали предлагать свои услуги в качестве эффективных заменителей программного обеспечения для десктопов.

Со временем ожидания по поводу ПО претерпевали изменений. Фирма IBM в 1960-х годах установила отдельную цену на программное и аппаратное обеспечение, и таким образом повысила стоимость компьютеров. Компания Microsoft начала устанавливать Internet Explorer вместе с Windows в 1998 году, и против нее было возбуждено уголовное дело. Руководство Apple вначале отказалось от услуг третьих лиц в написании программного обеспечения для iPhone в 2007 году, а затем открыло App Store, который захватил огромную коммерческую сферу, и вскоре мир получил «рассерженных птичек» Angry Birds. На сегодняшний момент большое количество аппаратного обеспечения поставляется вместе с программным – ПК, например, с операционными системами, которые включают в себя сотни подпрограмм, начиная с почтовых приложений и заканчивая играми с одним участником (солитер). А дальше вы загружаете или покупаете больше.

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

Таким  образом, появилась профессия и соответствующие специалисты. Процесс начался еще в 1950-х годах, однако всерьез заговорили о них в 1980-х, когда относительно небольшая группа людей стала экспертами в изобретении способов удовлетворить базовые человеческие желания (узнать время, запланировать полет, убить зомби) путем контролирования работы устройства. Кодировщики, начиная с концепции «сигналы с клавиатуры» и «цифры в памяти», создали бесконечно воссоздаваемые цифровые функциональные модули, которые мы называем программным обеспечением, с надеждой удовлетворить потребности рынка. Черт возьми, и это им удалось! Созданные ими системы используются для управления глобальными экономическими инфраструктурами. Если программисты и не управляют миром, то они управляют вещами, которые управляют миром.

2.3 Каким образом Код превращается в Программное Обеспечение?

Нам известно, что компьютер – это своеобразные часы со многими выгодами, а программное обеспечение начинается с кода. Но каким образом?

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

Знімок екрана 2015-10-27 о 22.55.35

Это на языке, который называется просто «К», и знаменит своей краткостью. Данный код проверит запись на наличие палиндрома (кодовой последовательности, совпадающей сама с собой при чтении в обратном порядке). Если вы напечатаете ispal «able was i ere i saw elba» («а роза упала на лапу азора»), «К» выдаст подтверждение: «Да, это – палиндром».

Мир кодов наполнен акронимами (словами, составленными из начальных элементов словосочетания). «К» смоделирован на другом языке, который называется APL, что означает A Programming Language (язык программирования). Программисты – очень веселые люди. Они поддерживают стандарты самообращения и обратных акронимов на самом высоком уровне. Еще один пример «классики» — GNU GNU’s Not Unix (операционная система GNU, проект GNU (GNU — это рекурсивная аббревиатура для «GNU is Not UNIX» — «GNU — не UNIX»; произносится как гу-ну); Unix-совместимая ОС, разрабатываемая FSF. Проект был начат в 1983 г. Ричардом Столлманом (Richard Stallman) в MTI с целью создать свободно распространяемую замену UNIX. В рамках проекта разрабатываются также компиляторы и другое ПО). Шутки программистов могут вызвать смех и одновременно заставят вздыхать. Или просто вздыхать.

Как еще может выглядеть код? Может быть, как таблица в Excel (со всеми формулами, скрытыми под цифрами, которые они генерируют):

sec1_excel

Однако таблицы Excel довольно коварны, поскольку они способны прятать все виды данных под своими цифрами. Подобная непроницаемость служит причиной рисков. Один научный работник Университета штата Гавайи в своем исследовании обнаружил, что 88% электронных таблиц содержат в себе ошибки.

Программирование может также выглядеть, как язык для детей Scratch:

sec1_excel2

И это настоящее программирование – компьютер ждет нажатия, ввода сигнала, аналогично, как печатания буквы «а», а затем выполняет некую периодически повторяемую операцию, в результате чего появляются веселые животные.

Или может быть:

Знімок екрана 2015-10-27 о 23.17.41

Это на языке Fortran. Причина, почему он не работает в том, что вы забыли поставить кавычки в конце первой строки. Попробуйте чуть интенсивнее. Спасибо.

Все эти моменты, так или иначе, являются примером кодирования, особенно последний, который большинство программистов легко идентифицируют как код. Последовательность обозначений (с использованием стандартных символов, вводимых с клавиатуры и сохраненных в некоем файле), которые пользователь ввел, скопировал или вставил с другого текста. Это не означает, что другие виды кодирования не действительны, или не помогут вам достичь цели. Кодирование представляет собой широкий спектр деятельности человека, как спорт или писательское мастерство. Когда разработчики программного обеспечения думают о кодировании, большинство из них представляют его в виде строк программы в файле. Они сталкиваются с проблемой, изучают ее, пишут код, который поможет решить ее, а затем предполагают, что компьютер превратит слово в действие.

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

Компилятор представляет собой программное обеспечение, которое переносит напечатанные вами символы в файл и преобразует их в инструкции нижнего уровня. Представьте себе условный язык программирования под названием Business Operating Language United System, или Bolus. Это страшный язык, который должен быть достаточным для некоторых сложных абзацев. У него есть одна настоящая команда PRINT (печатать). Мы хотим вывести на монитор HELLO NERDS (ПРИВЕТ ЗАУЧКИ). С этой целью мы написали строку программы в текстовом файле, где сказано:

Знімок екрана 2015-10-27 о 23.21.26

И мы сохранили ее, как nerds.bol. Теперь мы запускаем воображаемую компилирующую программу gnubolus nerds.bol. Как это делается? Единственный способ – это с помощью пошагового лексического анализа каждого знака, начиная с «р», группируя буквы в символы и сохраняя их в наших одномерных «посадочных ящиках». Давайте превратимся в компьютер:

Буква

Значение

P

Хмммм…?

R

Кто-то что-то сказал?

I

Я жду…

N

[барабанит пальцами]

T

В любое время…

Space

А, «ПЕЧАТАТЬ»

{

А вот и строка!

H

Эти

E

Буквы

L

Не

L

Имеют значения

O

Ля

Space

Ля

N

Просто

E

Сохранить

R

Их

D

На

S

Будущее

}

Время строки закончилось!

Конец

Время начать работать.

Если поставить горизонтально буквы в первой колонке, то получится фраза PRINT {HELLO NERDS} (НАПЕЧАТАТЬ ПРИВЕТ ЗАУЧКИ — Примечание переводчика).

Я вам показываю эту таблицу для того, чтобы вы увидели, насколько важна каждая буква. Компьютеры обычно «понимают смысл», проверяя по каждой букве, побитно и преобразуя код в другие варианты программирования по пути следования. Компилятор Bolus организовывает символы в маленькое дерево, которое похоже на диаграмму предложения. Только вместо имен существительных, глаголов, а также имен прилагательных, компьютер ищет функции и доводы. Наша упомянутая выше программа приобретает следующую форму:

sec1_tree

Древовидная структура является приятным методом думать об окружающем мире. Ваша действующая память разделена на разделы, которые в свою очередь состоят из абзацев. Похоже на дерево, не так ли? Ваша программа электронной почты включает в себя послания, в которых предусмотрены предметные строки и адреса. Дерево? Конечно. Ваше любимое программное обеспечение состоит из линейки меню с отдельными пунктами, которые разбиты на подпункты. Дерево? Естественно. Сплошной праздник древонасаждения!

Конечно, это все фокусы. Если вы вскроете компьютер, то найдете бессчетное количество выстроенных в ряды маленьких коробочек, куда вы можете класть байты, а затем доставать их. В конечном счете, все сводится к содержимому маленьких коробочек, которые обращены друг к другу. В этом и заключается принцип работы. Так что это дерево выглядит следующим образом:

sec1_tree2

(Root – корень, Branch – ветвь, Leaf – листок)

Каждая цифра действительно имеет большое значение. Каждая отдельная глупая неправильно поставленная точка с запятой, пробел там, где нужен переход на следующее поле, квадратная скобка вместо круглой – это все ошибки, которые способны ввести компьютер в состояние шока. Деревья не знают, куда девать свои листья. Их корни разлагаются. Ящики разбросаны куда попало.

Процедура пошаговой проверки каждой цифры может превратиться в программу, которая также называется функцией, методом, подпрограммой или компонентом. (Немногое в мире компьютеров имеет отдельное, заслуживающее доверие название, что приводит к спорам по поводу семантики). И эта программа может быть использована так часто, как вы пожелаете. Второе, вы можете вывести на дисплей все, что захотите, а не только одну фразу. Вы можете повторять этот процесс до бесконечности, и ничто не остановит вас за исключением поломки устройства, или тепловой смерти Вселенной. Естественно, что никто из нас, за исключением героя Джека Николсона в культовом фильме ужасов Стенли Кубрика «Сияние», не будет бесконечно печатать одну и ту же фразу.

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

Неужели именно эту процедуру мы выполняем с отдельными буквами, компилируя программу в сборку ненастоящего языка для того, чтобы несуществующий компьютер смог вывести на монитор поочередно каждую букву в отдельности? Аналогичный принцип применяется к каждому пикселю на вашем дисплее, каждой частоте, закодированной на ваших файлах в формате МР3 и каждому виртуальному кубику в компьютерной игре Minecraft. Вычислительная обработка данных трактует человеческий язык, как произвольный набор символов в определенной последовательности. Таким же образом она «воспринимает» музыку, изображение и кинофильмы.

Очень полезно подумать о том, что делает ваш компьютер в настоящий момент. Возможно, вы читаете данную статью на ноутбуке. Какие шаги предпринимаются, и какие слои, или уровни активированы между вашими действиями и крошечными механизмами, расположенными внутри устройства? Когда вы выполнять двойной щелчок мышью на иконке для того, чтобы открыть программу, например, текстовый процессор, компьютер должен знать место нахождения программы на диске. Для этого он должен выполнить некую учетную операцию. Затем он загружает эту программу в память, или иными словами вмещает гигантский список задач на текущий момент в память и начинает поэтапно выполнять их. А как выглядит этот список?

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

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

«Алгоритм» — это слово, которое придумали журналисты, чтобы казаться умными во время обсуждения вопросов, связанных с разными технологиями. В их среде популярны такие словосочетания, как «алгоритм Facebook» или «алгоритм Google», что по сути своей неправильно. Ибо речь идет о «программном обеспечении».

Алгоритмам не нужны компьютеры, поскольку они решают возникшую проблему. Самому известному алгоритму даже присваивается имя. Например, алгоритм Дейкстра, названный в честь ученого-компьютерщика Эдсгера Дейкстры (Edsger Dijkstra), определяет кратчайший путь в диаграмме. Кстати, диаграмма означает не:sec1_graph1А скорее:

sec1_graph2

Представьте себе карту, где улицы соединяются между собой в точках пересечения на перекрестках. Диаграммы окружают вас повсюду. Канализация, электричество, компиляция кодов, социальные сети, интернет, все это можно представить в виде диаграмм!

Многие алгоритмы имеют свои страницы в Википедии. Вы можете потратить несколько дней, копаясь в них с восхищением. Например, алгоритм Евклида, это алгоритм нахождения наибольшего общего делителя пары целых чисел. Давайте возьмем, скажем, 16 и 12. Разделим первое число на второе. Если есть остаток (в нашем случае это 4), нужно разделить 16 на остаток 4 и в результате получим 4 без остатка. Таким образом, мы закончили, и наибольшим общим делителем будет 4. Теперь переведите все это в машинный код, и можно закрывать лавочку.

В Сети есть сайт под названием Rosetta Code, который демонстрирует различные алгоритмы на разных языках. Страница «Алгоритм Евклида» — просто великолепна. Некоторые примеры подозрительно длинные и сложные для понимания, а некоторые – сплошная поэзия нонсенса в миниатюре. Как, например, следующий на языке Forth:

Знімок екрана 2015-10-27 о 23.54.13

Прочитайте его громко, желательно для друзей. Язык Forth основан на концепции стека (участка компьютерной памяти для временного хранения информации, устроенного по принципу «последний вошёл — первый вышел»), который представляет собой специальную структуру данных. Вы создаете «слова», которые формируют язык по вашему усмотрению. PostScript, язык лазерных принтеров появился после Forth, но очень похож на него. Обратите внимание, насколько похожим является код, для этого вставьте или уберите фигурные скобки:

Знімок екрана 2015-10-27 о 23.55.28

А это алгоритм Евклида на языке PostScript. Допускаю, что он выглядит забавно только для меня. А это он же, но на языке Python. (см. Rosetta Code):

Знімок екрана 2015-10-27 о 23.56.36

Язык программирования представляет собой систему для кодирования, присваивания имен и организации алгоритмов с целью их повторного использования и приложения. Это система управления алгоритмом. Вот почему, несмотря на назойливую рекламу, Facebook создан на базе алгоритма. Алгоритм можно перевести в функцию, которая может быть востребована при написании программного обеспечения. Есть алгоритмы, которые имеют отношение к обработке изображений и хранения данных, а также быстрого просмотра элементов списка. Большинство алгоритмов можно получить бесплатно, они уже встроены в язык программирования, или расположены в библиотеках для загрузки из интернета.

Дейкстра распространил среди глобального компьютерного сообщества превосходный и побуждающий набор 1318 памяток, которые известны, как EWD, что является аббревиатурой полного имени знаменитого ученого Edsger Wybe Dijkstra. Большинство из этих работ были написаны вручную.
Дейкстра распространил среди глобального компьютерного сообщества превосходный и побуждающий набор 1318 памяток, которые известны, как EWD, что является аббревиатурой полного имени знаменитого ученого Edsger Wybe Dijkstra. Большинство из этих работ были написаны вручную.

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

Одна вещь, понимание которой заняло у меня целую вечность, — это то, что компьютеры действительно плохо разбираются в математике. Они могут быть запрограммированы для выполнения определенных операций до некоторой степени точности, благодаря чему у простых пользователей может возникнуть впечатление, что упомянутые устройства хорошо решают математические задачи. Дейкстра как-то заметил: «теория вычислительных машин и систем имеет такое же отношение к компьютерам, как астрономия к телескопам».

Большая часть этой науки изучает эффективность алгоритмов и как долго ими можно управлять. Компьютеры являются быстрыми машинами, однако они способны «увязнуть», например, когда пытаются найти кратчайший путь между двумя точками на большой карте. Такие компании, как Google, Facebook, и Twitter, созданные на вершине фундаментальной компьютерной науки и уделяют огромное внимание эффективности, поскольку их пользователи выполняют поставленные задачи (поиск, обновление статуса, твит) огромное количество раз. Таким образом, овчинка стоит выделки, чтобы найти превосходных ученых компьютерщиков, многие из которых имеют звания докторов и знают, где «спрятана» эффективность.

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

Самый сложный момент программирования – это обойти вещи, которые не поддаются вычислению в поиске возможности разбивки невозможных задач на маленькие решаемые составляющие, а затем сформировать впечатление, что компьютер создает нечто, чего он фактически не делает. Например, симуляцию человеческого разговора. Эта функция известна, как «изучение искусственного интеллекта», однако, в настоящий момент более распространенным является название «компьютерное обучение» или «глубинный анализ данных». Когда вы говорите с Siri или Cortana, и они вам отвечают, это не означает, что подобные голосовые помощники понимают вас. Они конвертируют ваши слова в текст, разбивают его на символы, затем сравнивают их на соответствие с символами в своей базе данных терминов и выдают ответ. Во время процесса задействованы тонны алгоритмов, поэтому вполне возможно, что компьютер может фальсифицировать процедуру общения.

Язык программирования выполняет две работы. Он упаковывает огромное число алгоритмов, поэтому они могут быть использованы повторно. Поэтому вам не нужно искать алгоритм квадратного корня (или гениального программиста) каждый раз, когда возникает необходимость извлечь квадратный корень. А это, в свою очередь, облегчает работу программистов на завершающем этапе с новыми алгоритмами и превращает в рутину функции повторного использования. Принцип DRY или Don’t Repeat Yourself (Не повторяйся) является одним из неофициальных догматов программирования. Это означает, что вам необходимо назвать вещи один раз, сделать их один раз, создать функцию один раз и позволить компьютеру повториться. Такой подход не всегда срабатывает. Программисты постоянно повторяются. Я сотни раз писал некоторые виды кодов. Вот почему DRY служит только основой.

Достаточно разговоров. Давайте займемся кодированием!

2.5 Спринт

После нескольких месяцев бюджет утвержден, и проект создания новой архитектуры сайта идет полным ходом. Он даже получил название Project Excelsior (Проект «Все выше и выше»). Отлично. Снова появляется человек в темно-сером пиджаке и проверяет с вами каждую неделю, как идут дела.

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

Господи, смилуйся над нами. С этого момента, вы знакомитесь с перечнем разных сообщений об ошибках. Он представляет собой детальный список всех описаний, как в словесном виде, так и в форме диаграмм. Своеобразная программа, которая не существует.

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

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

Вы редко увидите человека в темно-сером пиджаке собственной персоной, поскольку он всегда на конференциях, всегда присутствует на заседаниях экспертных групп. Затем он помещает в «Твиттере» соответствующую информацию о комиссиях и отмечает их на своей популярной странице в LinkedIn. Часто он фотографирует аудиторию со сцены, и на снимках вы можете увидеть в основном мужчин, многие из них носят бороды и большинство устремило свой взгляд в лэптоп вместо того, чтобы смотреть на выступающих. Тем не менее, запись в «Твиттере», которая сопровождает фотографию, просто разрывается от возгласов: «Аудитория ИЗУМИТЕЛЬНАЯ! @панель по вопросам архитектуры #микрослужбы на #ArchiCon2015».

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

Но что ему до этого? Каждый день он проводит 15-минутные совещания «стоя» через так называемый Slack, который, по сути, является вариантом Google Chat, и программисты подтверждают, что такой вариант обеспечивает превосходную и плодотворную работу.

«Я отслеживаю подтверждения», утверждает человек в темно-сером пиджаке. Это означает, что каждый день он проверяет код, а члены его команды фиксируют все в письменном виде, чтобы убедиться, что он хорошо организован. «Никто не форсирует события и не добивается создания кода без проведения тестов. У нас все хорошо».

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

2.6 Что нам делать с этими конференциями?

Конференции! Веб-сайт Lanyrd выкладывает списки сотен конференций по вопросам технологий лишь только за один месяц! Это и встреча специалистов по тестированию программного обеспечения в Чикаго, конференция по «Твиттеру» в Сан-Паоло, конференция по управлению контентом предприятий в Амстердаме, в одном только Нью-Йорке: Big Apple Scrum Day, Razorfish Tech Summit, учебный лагерь по вопросам предпринимательства для ветеранов, конференция, посвященная цифровому картографированию, много конференций для торговцев цифровыми продуктами, одна для специалистов Node.js, одна — Ruby, одна – по Scala (это все языки программирования), несколько деловых завтраков, конференция по каскадным таблицам стилей (язык CCS), одна для текстовых аналитиков и нечто под фантастическим названием Employee Engagement Awards (Награда за Вовлеченность Сотрудников в Рабочий Процесс).

Конференции по вопросам технологий выглядят именно так, как вы их представляете. Скопище лиц в отеле «Шератон», основной доклад — в шикарном зале  Ballroom D. Или огромные потоки участников, прогуливающихся в South by Southwest Остин, штат Техас. Прибывшие собираются в группы и посещают заседания экспертных групп, якобы для получения знаний, они слушают презентации и совершенствуют свои навыки. Но есть еще и вторичная функция конференции, это – акультуризация, или заимствование черт чужой культуры. Вы посещаете конференции по вопросам технологий, чтобы подтвердить свою племенную идентичность, выделить себя из толпы дилетантов и попасть в мир профессионалов. Вы хватаете добычу и общаетесь с поставщиками, если это именно то, что вам нужно.

Знімок екрана 2015-10-28 о 00.21.31

Знімок екрана 2015-10-28 о 00.21.45

Первый ряд: конференция для разработчиков Google I/O, Сан-Франциско, май 2013, TechCrunch Disrupt NYC, май 2011; Конференция «Глобальный мобильный интернет», Пекин, апрель 2015

Второй ряд: Nvidia GPU, Сан-Хосе, сентябрь 2010; Интерактивный Фестиваль South by Southwest (SXSW), Остин, март 2013; Конференция разработчиков Apple Worldwide (WWDC), Сан-Франциско, июнь 2008

Третий ряд: TechCrunch Disrupt, Нью-Йорк, май 2012; Конференция Re:publica, Берлин, май 2015;

Четвертый ряд: Интерактивный Фестиваль South by Southwest (SXSW), Остин, март 2014; Конференция разработчиков Apple Worldwide (WWDC), Сан-Франциско, июнь 2015; Конференция по информационным системам Bloomberg,Сан-Франциско, июнь 15-16, 2014

Конференция по вопросам технологий – это место, где полностью представлена динамика приматов, где могут быть установлены взаимоотношения между властью и иерархией. Есть основные докладчики. Часто это лица, создающие технологию, которая является главной темой конференции, или разрабатывают заданный язык. Есть обычные докладчики, которым или вовсе не платят, или оплачивают только авиаперелет. В своих выступлениях они представляют некоторые идеи, технологию, или подход. Затем, есть экспертные панели, куда входят лица, создающие видимость взаимодействия, в то время, как слушатели проверяют свою электронную почту.

Я немного опущу панели. Они, как правило, меняются. Но я не уверен, зачем они существуют.

Есть еще одна вещь, которая касается конференций по вопросам технологий: слишком много сексуальных домогательств и сексистского контента. Что само по себе является глупостью, поскольку компьютеры –  тупые камни, у которых отсутствуют гениталии, но это реальность. Проблема широко распространена:

Женщины, связанные с программным обеспечением, натерпелись, начали писать об этом, публиковать в блогах. Другие женщины сделали то же самое. Конференций проходит много, и было ещё больше сообщений о домогательствах. Язык Ruby, предпочитаемый язык братства стартаперов, получил худшую репутацию. На конференции по Ruby в 2009 году кто-то выступил с речью озаглавленной «Perform Like a Pr0n Star» c вызывающими слайдами.

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

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

Конференция Burlington Ruby

php[architect] планирует провести мероприятие для всех желающих без домогательств, и не позволит проявления оскорбительного или агрессивного поведения в любой форме. 

php[architect]

The Atlanta Java Users Group (AJUG) (Группа пользователей языка Java из Атланты) готовы провести отличную конференцию для всех посетителей, выступающих, спонсоров, волонтеров и организаторов, которые задействованы в конференции профессиональных разработчиков DevNexus, несмотря на пол, сексуальную ориентацию, физические особенности, ограниченные возможности, габариты тела, расовую и религиозную принадлежность, финансовый статус, цвет волос (или их количество), предпочтения касательно платформы, или текстового редактора. 

— devnexus

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

«Когда я прихожу на работу, то выгляжу белой вороной. Меня часто принимают за помощника по административной работе. И это происходило неоднократно. Меня спрашивали, являюсь ли я представителем службы безопасности. И это, несмотря на то, что ее сотрудники носят особенную униформу», пишет Эрика Джой Бейкер на сайте Medium.com, которая работала в разных местах, в том числе и в «Гугле».

«Всегда только женщины выступали на собраниях, часто они были первыми – первая женщина инженер Научно-исследовательского отдела, первая женщина руководитель проекта, первая женщина руководитель коллектива по написанию программного обеспечения – в тех компаниях, где я работала», написала еще одна женщина в журнале Fast Company.

Согласно данным Национального Центра для Женщин и Информационных технологий (National Center for Women & Information Technology) в 2012 году женщины составляли чуть меньше одной пятой выпускников колледжей информатики и компьютерных наук. Менее 30% специалистов в сфере информационных технологий являются представительницами слабого пола. С 1980-х годов количество женщин в этой сфере уменьшилось, несмотря на то, что рынок для применения их знаний расширился. Информационный канал представляет собой большую проблему. Однако ее можно решить. Я встречался с менеджерами, которым удалось создать  прекрасно функционирующие большие коллективы, в которых более 50% сотрудников составляют женщины – специалистки по кодированию. Примером может служить сайт электронной коммерции Etsy, сотрудники которого разработали образовательные программы и программы наставничества. А такие организации, как некоммерческая Girl Develop обучает женщин, как правильно создавать программное обеспечение.

Это все произошло во время бума. В 2014 году некоторые компании начали выпускать отчеты по культурному многообразию для своих коллективов программистов. Они не стали популярными, но выявили следующие факты: штат фирмы Intel на 23% состоит из женщин, Yahoo! — 37%. Apple, Facebook, Google, Twitter и Microsoft – порядка 30%. Эти показатели касаются целой компании, а не только одних программистов. Есть много сотрудниц, которые не получают опционы на акции, а ситуация с цветными работниками и выходцами из стран Азии еще хуже. Компания Apple выделила $50 миллионов для поддержки развития инициатив, связанных с культурным многообразием сотрудников, что составляет 0,007% общей стоимости всех выпущенных в обращение акций компании. Фирма Intel вложила $300 миллионов в аналогичный проект.

Обычный программист – это старательный специалист с базовыми знаниями математики, обладающий практическими знаниями одного или нескольких языков программирования и способный внятно объяснить руководству и своим коллегам чем он или она занимается. Учитывая существенное количество женщин журналисток и редакторов, хирургов, а также руководителей компаний, или способных управлять малыми предприятиями и пользоваться электронными таблицами, принимая во внимание тот факт, что некоторые из них работают в Верховном Суде, а также то, что мы уже привыкли видеть их в должности бухгалтеров, преподавателей, профессоров, статистиков, или управляющими проектами, трудно представить, что они не могут написать JavaScript. Несмотря на назойливую рекламу и своекорыстные фантазии программистов, программирование не представляет собой самую  главную творческую задачу, которую можно вообразить.

Из чего следует неминуемое заключение: Проблема с женщинами в технологиях находится не в них.

Ниже приводятся некоторые демографические выкладки из опроса разработчиков популярной системы вопросов и ответов о программировании Stack Overlow (2015 год):

sec1_demographics

Coder gender – пол кодировщика

Coder experience – стаж работы кодировщика

Men – Мужчины

Women – Женщины

Prefer not to disclose – Предпочитают не раскрывать информацию

Other – Другие

3. Почему программисты так  чувствительны к языкам?

Многие конференции организованы на основе конкретного языка программирования, или конкретного сообщества (PyCon для программистов, которые используют Python; конференция Strata — большие массивы данных; Oscon – для специалистов по открытым исходным кодам). Это ритуальные события для тех людей, которые являются членами таких сообществ. Участники конференций собираются, обсуждают и размещают свои видеоматериалы на YouTube. Язык имеет значение.

Программисты следят за  успехом компьютерных языков точно также, как другие люди за результатами спортивных событий, публикуя свои комментарии на таких форумах, как Reddit (где много языков получают собственные подразделы «subreddit», и reddit.com/r/programming на данный момент имеет 620 202 читателей), или Hacker News, принадлежащий венчурной фирме Y Combinator (компания получила название от специальной функции, которая действует на основе других функций), или Lambda the Ultimate (название взято у сборника статей, написанных преимущественно в 1970-х годах о влиятельном языке программирования Scheme. Чем больше таинственности в названии, тем менее интересная тема для обсуждения).

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

И это не просто дань уважения моде. Карьера программиста зависит от того, насколько он способен продемонстрировать свои способности в одном или нескольких языках. Поэтому рейтинги, которые часто обновляются, редко могут шокировать. В последнее время наиболее частым в употреблении компьютерным языком, согласно индексу Tiobe (который использует разные индикаторы, чтобы сгенерировать единый рейтинг для мира программирования) является Java, C, C++, Objective-C, и C#, после них следуют JavaScript, PHP и Python. Данные рейтинги не отличаются точностью. В другом документе, подготовленном консультационной фирмой RedMonk, первое место занимает JavaScript, после нее идет Java. Существует много возможных выводов, однако очевидным является тот факт, что, несмотря на равноправие языков, очень хороший программист со знанием Java, который сумеет прекрасно зарекомендовать себя во время интервью, будет иметь больше вариантов для карьеры, чем аналогичный кандидат, использующий малоизвестный язык.

Если вы занимаетесь кодированием, то до того момента, когда любой язык пробьется в десятку или двадцатку лучших, вы уже слышали о нем, читали блоги или посты, слышали от людей, насколько эти языки ужасны или великолепны, или принимали участие в практических занятиях в видео режиме, или экспериментировали немного с ними. Выбрать новые языки для предварительного знакомства – это очень хорошая практика для программиста. Часто единственное, что вам нужно сделать, это загрузить несколько файлов и написать пару строк программы, а затем решить, стоит ли продвигаться дальше. Большинство языков можно загрузить для использования бесплатно.

Почему разработчики создают, а затем раздают бесплатно языки? Дело в том, что хороший язык программирования создается специалистом топ-класса, поэтому результат его труда признается, как результат титанических усилий, что сродни публикации многотомной истории войн, или участие в одной из них. Соответствующее вознаграждение – это слава. Замена языка – это повторное участие в битве, а некоторые языки на протяжении короткого периода времени проживают жизнь от устаревшей версии до многообещающей. Например, Perl 5, который появился в середине 1990-х годов, идеально подходил для Всемирной сети World Wide Web, и по мере ее развития развивался и сам. Perl 6 должен был стать лучшим по всем параметрам. Его переработка сопровождалась широкой рекламной кампанией и началась в 2000 году. Над этим проектом специалисты работали бесплатно, поскольку считали, что это в интересах общественности. Однако даже через 15 лет официальной версии Perl 6 нет. (Последнее примерное время релиза: Рождество 2015.)

Пользователи языка Python (все знают о существующих проблемах этого сообщества), решили внести необходимые, но непонятные изменения в язык, поскольку это была часть переходного цикла с Версии 2 на Версию 3. Они усовершенствовали, сгладили неровные края, но не предприняли кардинальных изменений. Разработка языка Python 3.0 началась в 2006 году, первая рабочая версия была выпущена в 2008 году, а затем – в 2015. Однако, переходной период еще не закончился.

Создание нового языка связано с трудностями. Написание популярного языка требует еще больших усилий и улыбки фортуны. А изменения принципов работы популярного языка – это вообще один из самых  трудных процессов, на которые способно человечество, поскольку здесь необходимы годы согласований для того, чтобы привести стандарты под один знаменатель. Языки являются крупными, комплексными и динамическими выражениями человеческой культуры.

3.1 Красота Библиотеки Стандартных Программ

Настоящим мерилом языка являются точки с запятой, а вернее, как они используются. Это – библиотека стандартных программ каждого языка. Язык является программным обеспечением для написания программного обеспечения (прошу прощения за тавтологию). Библиотека стандартных программ – это набор ПО в виде «полуфабрикатов», которые вы можете использовать и применять неоднократно.

Например, возьмите Python с «батареями в комплекте». Это означает, что язык уже включает в себя большое количество заранее существующих кодов, организованных в «модули». Благодаря своим функциям, библиотека позволяет копировать веб-страницы, или менять слова в документе.

Что означает обработать текст? Ну, у вас может быть строка текста (The Quick Brown Fox) и вам нужно ее сохранить в переменной под названием my_string. Поэтому сейчас вы можете применить стандартные методы для этой строки. Можете сказать my_string.lower(), и она предложит все слова нижнего регистра строки “the quick brown fox”. Если вы по-настоящему поймете библиотеку стандартных программ языка, можете смело считать себя специалистом в этой сфере. Обычно нужно или посещать соответствующие веб-страницы, или читать специальную литературу.

Однако, библиотека стандартных программ – это лишь только начало. Для многих языков – а для Python – это характерно – существует обширный набор предварительно написанных модулей, которые доступны для мгновенной загрузки с помощью программного обеспечения «диспетчер пакетов». Модуль (или библиотека, или пакет) представляет собой код, который расширяет возможности языка.

Представьте себе, что вы работаете в рекламном агентстве, и вам необходимо обработать, масштабировать и увеличить резкость изображения 100 000 фотографий.

Вы печатаете одну команду: sudo pip install Pillow (установить от имени суперпользователя менеджер пакетов Pillow), и модуль Pillow загружается, автоматически собирает данные и размещается в правильной директории для последующего повторного использования. Конечно, вы должны знать, что большинство современных языков имеют модули для обработки изображения, а Pillow является наиболее часто используемым инструментом для этой цели. Понять это, является частью кодирования. Вы можете научиться этому путем поиска информации в интернете с помощью «Гугла», можете спросить у друзей, а можете прочитать в специальной литературе, как например The Hitchhiker’s Guide to Python.

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

Зато какой результат! Теперь, после того, как инсталлирован Pillow, вы имеете мгновенный доступ к десяткам стандартных программ и функций, имеющих отношение к обработке изображений, которые вы можете использовать в своем коде: менять цвета, вращать их на нужное количество градусов, масштабировать, конвертировать изображения из GIF в JPEG и так далее. Или, если вам нужно провести комплексный цифровой анализ и статистические исследования, вы можете загрузить NumPy, и сразу получить доступ к огромному количеству математических алгоритмов и результатов многолетних научно-исследовательской деятельности. Обработка аудио сигнала, взаимодействие с особым видом аппаратного обеспечения, контакты с базами данных – существует огромное количество пакетов для этих видов деятельности. Но вы должны знать, как найти их, и как они называются. Код – это не просто помещенная в файле невразумительная команда. Ему нужно, чтобы у вас в голове была карта, которая поможет вам найти место нахождения хороших библиотек, лучшей документации, самой полезной доски сообщений. Если вы этого не знаете, то потратите все свое время на поиски вместо создания классных новых продуктов.

3.2 Для чего используются разные языки?

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

Программисты, знающие языки С и Java могут прочитать коды друг друга, но они вряд ли смогут «заставить» коды С и Java работать вместе. Эти языки представляют мир в разных вариантах, структурированные данные в различных видах, а также обращаются к комплектующим компьютера по-своему. Пользоваться одним языком сулит большие выгоды членам команды, поскольку они мыслят одинаково о том, каким образом нужно инструктировать компьютер для обработки данных.

Однако необязательно, чтобы каждая отдельная команда пользовалась одним и тем же языком. Часто это – непродуктивно. Например, Etsy построена над РНР, но ее сервис службы поиска пользуется библиотеками языка Java, потому что поиск решений довольно обширный.

Некоторые языки программирования, как, например, С лучше всего выполняют все поставленные вами задачи, даже если это приведет к поломке компьютера. Некоторые, например, OCaml и Haskell, довольно ограничены и просят программиста предоставить сокращенный вариант задачи, чтобы помочь вам избежать глупых решений.

Некоторые языки отличаются классными логотипами, как, например, Go gopher:

sec2_gopher

Для детей предусмотрен учебный язык Scratch. Он не использует много текста, но позволяет маленьким кодировщикам перемещать иконки по экрану и собирать программы, как фигурки Lego. Логотипом является улыбающаяся кошка на двух лапах:

sec2_scratch

Также есть Lisp, который не имел логотипа в 1950-х годах, но позже появился пятиглазый инопланетянин, держащий в хоботе флаг. Lisp является классическим языком программироания. Кроме того, если еще канонические компьютерные языки, обладающие апломбом и элегантностью:

sec2_lisp

Одним из таких является язык С. Большинство популярных языков очень похожи на него. Логотипом этого языка является сама буква С и получилось так потому, что С следует за другим языком, который называется В.

3.3 Значение языка C

Язык C является очень важным в информационных технологиях. Он был создан Деннисом Ритчи (Dennis Ritchie) в конце 1960-х годов, сотрудником Bell Labs, и является основным языком разработки программ операционной системы UNIX. Unix (в данном случае пишу со строчной буквы, поскольку здесь меня интересует идея, а не бренд) – простая операционная система, ядро, которое контролирует память и управляет программным обеспечением, представляет собой набор очень маленьких утилит и «командной строки», которая позволяет сплести программы в «скрипты командной оболочки». Если вы не можете сделать то, что вам нужно, с помощью скриптов командной строки, вы можете написать новую утилиту в С и добавить ее в библиотеку утилит. Это прекрасный и практичный вид деятельности, совпадающей с ростом различных видов сетей, которые в собирательном значении более известные, как интернет. Поэтому Unix распространился с Bell Labs до академий, охватил крупные промышленные системы и в конечном итоге превратился в своеобразную систему водоснабжения информационных технологий. Где бы не появлялся Unix, рядом всегда был С.

Язык С достаточно простой. Он простой, как дробовик, который может снести вам крышу, поскольку позволяет управлять каждым составляющим элементом компьютера – памятью, файлами, жестким диском – что по своей сути просто великолепно, если вы скрупулезны, и опасно, если вы небрежны. Созданное на основе С программное обеспечение известно, как очень быстрое. Когда вы компилируете С, он одномоментно не становится кучей машинного языка. Для того, чтобы получить максимальный результат, нужно предпринять много шагов. Они называются оптимизациями и представляют собой то же, чем являются лазейки для налогов. Язык можно сравнить с дедом, у которого открытый характер, который всю жизнь охотился на бобров, принимал участие в нескольких военных кампаниях, но до сих пор способен 50 раз подтянуться на турнике.

Легендарное руководство пользователя The C Programming Language (Язык Программирования С) написано Ритчи и Брайаном Кернинганом (которые известны под псевдонимом K&R) четким и простым языком по сравнению с современными тяжеловесными учебниками по программированию. Данный рекомендованный текст был опубликован в 1978 году, когда идея использования персональных компьютеров только зарождалась в умах человечества, а сам компьютер был частью промышленного оборудования и служил для контроля систем охлаждения или расчета актуарных таблиц. Именно благодаря K&R приветствие “Hello, world!” (Здравствуй, мир!) стало каноническим примером программы для любого языка. По договоренности, практически каждое вступление в любой язык программирования с того момента начинается с «Здравствуй, мир!

Вот оригинальная версия текста самопрезентации компьютера:

Знімок екрана 2015-10-28 о 00.54.35

Которая после компиляции и запуска, напечатает на экране «Здравствуй, мир!». Давайте напишем программу, в которой вы присвоите ей номер х (икс), и она распечатает все квадраты величины чисел, от единицы до икса. Просто практичная и удобная программа, она всегда используется в учебных пособиях по программированию для того, чтобы решить запросы пользователей, которым срочно необходим перечень квадратов величин.

Знімок екрана 2015-10-28 о 00.54.51

Чтобы составить эту программу на Mac, я сохранил эту запись, как squares.c и открыл Terminal.app, а затем напечатал:

Знімок екрана 2015-10-28 о 00.57.32

Она выдала:

Знімок екрана 2015-10-28 о 00.57.50

В результате чего был запущен компилятор операционной системы GNU C (GNU C Compiler), который создал файл по умолчанию a.out, который я запустил на командной строке, чтобы получить квадраты целых чисел и проблемы на свою голову, поскольку, если мне нужно сменить код, я должен выполнить команды, а программа внесет соответствующие модификации. Даже при большом желании, это не самый лучший код.

Достаточно немного напрячь зрение, чтобы увидеть маленькие частички с высокой повторяемостью, которые подходят друг другу в определенном смысле. Существует функция под названием квадраты целых чисел. Это очень важный момент. Вы вписываете целое число. Затем она считывает от единицы до этого целого числа, и с каждым подсчетом, она печатает квадрат этого целого числа. Затем она печатает новую строку. Готово. Ядро Linux написано на С. Программное обеспечение, соединяющее ваш принтер с компьютером, тоже может быть на языке С. Веб-серверы, обслуживающие ваши страницы, часто написаны на языке С. Это также хороший инструментарий для написания других языков – Python, PHP и Perl, как и многие другие, созданы на базе С. Этот язык используется для построения систем. Он выполняет ту же роль в информационных технологиях, что и Латынь в среде академиков эпохи Ренессанса. Вы не встретите ни одного человека, серьезно занимающегося цифровым видами искусства, который бы не был хорошо осведомлен о нем. Более серьезные специалисты владеют им свободно.

Но помните перечень популярных языков? C++? Objective-C? C#? Java? То, что многие из нас ежедневно используют в качестве кода, фактически является не языком С, а одним из многих общепринятых, упрощенных, «разговорных» вариантов. Защитники подобных «языков» приводят различные доводы в свою защиту, например, они лучше подходят для больших групп и «программирования в целом». По мнению представителей такого подхода, эти языки организуют коды в библиотеки, которыми можно совместно и неоднократно пользоваться. Они вряд ли создадут пользователю проблемы, поскольку являются объектно-ориентированными адаптациями языка С.

3.4 Революция предмета деятельности

Если вы хотите понять, как работает код в корпоративной среде, вам необходимо понять, что такое объектно-ориентированное программирование.

Существует много определений. Я готов вступить в спор и предложить свою версию и отвечать за последствия. Объектно-ориентированное программирование представляет собой, по сути, регистрационную систему для кода. Любой человек, который когда-либо имел доступ к сетевой папке, или составлял в физической форме картотеку, знает, что без регистрационной системы коллективного пользования, работа его офиса потерпит крах. Компьютерщики в 1980-х и 90-х годов утверждали, что С – великолепный и отличный язык! Однако он не помогает привести необходимую информацию в порядок, и на этом все заканчивается. Полный бардак! Я имею ввиду, что у нас есть структура данных для наших клиентов (имя, адрес и так далее), у нас имеются все функции для того, чтобы умело управлять этими данными (update_address, send_bill, delete_account), но проблема в том, что эти функции не имеют отношения к данным, за исключением соглашения по присвоению имен. В С не предусмотрена последовательная система присвоения имен (названий). Это означает, что позже их тяжело найти. Объектно-ориентированное программирование предлагает программистам великолепный способ присвоения имен – средство для создания библиотеки. Я могу вызвать (запустить) update_address на изображении собаки или адресе в интернете. Такой подход опасный и ведет к сбоям в программировании (наши предшественники спорили на эту тему, поскольку были прецеденты), а также создает трудности для программирования в среде больших коллективов и усложняет попытки все отслеживать.

А что, если создать маленький ящик под названием «Клиент» (назовем его «класс», как и в описательном смысле, поскольку Клиент представляет подкласс человеческого вида, который входит в подкласс млекопитающих и так далее), а затем помещаем в ящик данные и методы, которые имеют отношение к клиентам. (А согласно ящику, это буквально «общедоступный Клиент класса {}» (public class Customer), и все, что внутри {}, имеет отношение к этому индивидуальному классу).

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

Теоретически это все работает очень хорошо.

Исходным языком объектно-ориентированного программирования является Smalltalk, который был создан узким кругом гениев фирмы Xerox PARC в период наивысшего расцвета компании в 1972 году (тогда же появился и язык С) после многих лет «вынашивания» и обрел окончательную форму в 1980 году. Он был инспирирован многими идеями, существовавшими в теории вычислительных машин и систем, а также философией Платона, биологией клетки и предшествующим языком под названием Simula, первым объектно-ориентированным языком, который, согласно названию был разработан для того, чтобы… симулировать предметы. В то время как С был создан в штате Нью-Джерси в компании Bell Labs, промышленного монстра AT&T, для того, чтобы оперативно решать возникающие проблемы, Smalltalk появился на противоположном конце США, в Калифорнии, в научно-исследовательском отделе компании Xerox с целью решения задач отдаленного будущего. Поэтому Smalltalk представлял мир иначе, чем С.

У языка Smalltalk смешное название, поскольку он переводится, как «Светский разговор ни о чем» и дружеское отношение к пользователю, хотя его спецификации занимают 700 страниц. Некогда это была большая система. Язык С дал вам обобщающую информацию по целому компьютеру, оказывая помощь в управлении памятью и процессами внутри устройства. Smalltalk дает вам обобщающую информацию о всей реальности, так что вы можете начать делить мир на классы, методы и тому подобное. Там, где язык С пытался облегчить вам создание вещей для компьютера, Smalltalk пытался облегчить вам реализацию вещей для людей.

Это не значит,  что он лучше или хуже. Он просто совершенно другой. Ниже приводим код Smalltalk:

Знімок екрана 2015-10-28 о 01.08.27

Он печатает это короткое предложение в Окне Записи (Transcript Window) на дисплее пользователя. Запись является объектом – и в данном случае она получает послание (показать:) с доказательством, например, вводное слово — “Hello.” Вы впечатываете его, выбираете с помощью мыши (это было возможно даже в начале 1980-х годов) и просите компьютер выполнить команду. Он компилирует данную часть кода и добавляет его в остальную часть работающей системы. Выглядит это следующим образом:

sec2_smalltalk2

Сотни окон разговаривают друг с другом. Каждое окно является объектом. И вместо того, чтобы программировать его, компилировать программу и затем выполнять ее, вы просто погружаетесь в эту живую, дышащую окружающую среду, заполненную окнами, и начинаете создавать новые объекты, которые посылают послания другим таким же, как и они. Если вы сохраните то место, где вы находитесь в настоящий момент и вернетесь через пять лет, все будет таким же без изменений. 

Дело в том, что всеми ящиками можно манипулировать. Они все являются объектами. В большинстве языков четко прописаны границы – между данными и кодами, между обычными файлами и файлами с расширением «.ехе», между операционными системами и приложениями, между закрытым и открытым программным обеспечением – все эти границы в нашем случае «размыты» преднамеренно и сознательно. Язык Smalltalk является образом компьютера в качестве собственной, родной среды. Любой пользователь способен модифицировать всю систему. Основная версия называется Squeak (по-английски Squeak означает «писк», поэтому логотипом является смешная симпатичная мышка). Усовершенствованная версия называется Pharo (логотип: маяк). Оба варианта бесплатные и легко загружаются.

Будучи программистом среднего уровня, я считаю, что окружающая среда Smalltalk – просто очаровательная, однако она никогда не позволила мне оценить мои достоинства и недостатки. Поэтому, однажды я дал себе слово, что прочту или хотя бы ознакомлюсь с перечнем спецификаций Smalltalk, который датируется 1980-ми годами и является основополагающим текстом и грандиозной попыткой создать реальность из отдельных компьютерных принципов. Проблема, однако, состоит в том, что Smalltalk требует усвоить не только способ ведения работ, но и философию мира, где все организовано согласно иерархии классов. Я люблю поиграться с ним, но обычно придерживаюсь более привычных подходов. Быть приверженцем Smalltalk означает то же самое, что и глубоко разбираться во фри-джазе. Некоторые из сторонников этого языка являются прекрасными людьми, но я не вхожу в их число.

История языка Smalltalk часто описывается, как трагичная, поскольку многие его лучшие идеи никогда не распространялась на культуру кода. Однако, он существует, им пользуются, и каждый может взять на  вооружение Squeak или Pharo. Кроме того:

  1. Java является объектно-ориентированным языком, на него повлиял C++, который работает в виртуальном устройстве (как Smalltalk);
  2. Objective-C, как следует из его названия, появился в результате слияния C и Smalltalk без каких-либо извинений;
  3. C# (произносится, как “C sharp”- в музыкальной терминологии означает «до диез») основывается на языке C и создавался под влиянием Java, однако был создан разработчиками фирмы Microsoft для применения в инфраструктуре .NET framework;
  4. C++ является объектно-ориентированной версией C, хотя корнями он уходит в Simula.

Количество цифровых объектов, появившихся в 1972 году, которые до сих пор служат темой для постоянной дискуссии, достаточно маленькое. (В этом году на экраны вышел знаменитый фильм «Крестный отец»). Мир развратил чистый образ великих идей. И, тем не менее, я считаю, что Smalltalk имеет успех глобального масштаба.

3.5 Чудны и сверхъестественны дела с языком Python

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

Вы спросите – и что дальше? Означает ли это, что вам нужно будет выбросить весь ваш Python и начать снова работу с использованием другого языка? Наверное, нет. Python пользуется заслуженной репутацией «языка-клея». Это означает, что вы можете взять код у другого языка более низкого уровня, например, С, С++ и Fortran 77 (да, как и в 1977 году), этот код ближе к пониманию компьютера, поэтому вы можете использовать его для написания интерфейсных функций. Таким образом, вы сможете внедрить более старый, быстрый код в новую, более медленную, но удобную в эксплуатации систему.

Большая часть этого процесса состоит в том, чтобы «упаковать» старый код в красивую обертку хорошо организованных функций языка Python. В большинстве случаев идиома языка заключается не только в том, как он выглядит, но и как он чувствует себя. Некоторые языки делают упор на краткость, некоторые поддерживают длинные сложные функции, тогда как другие подталкивают вас к тому, чтобы разбить функциональность на маленькие составляющие. Стиль и употребление имеют большое значение. Иногда программисты рекомендуют книгу The Elements of Style («Элементы стиля») авторов Странка и Уайта (Strunk & White) – и это правильно, так как в книге говорится об английском языке, а ее повышенное внимание на эффективном использовании языка находит отклик у программистов. Идиома языка является частью его общественной идентичности.

Однако язык Python не может быть универсальным связующим звеном. Его тяжело сочетать с Java, но он идеально подходит для С. Существует версия «Питона», которая была разработана для того, чтобы запускать внутри Java и использовать его код. Данная версия называется Jython. Если вам нужна версия, которая работает с Microsoft .NET, можете применять IronPython.

Но есть другой способ интерпретировать всю эту активность вокруг Python. Специалисты любят этот язык и хотят, чтобы он работал везде и выполнял все задачи. Они тратят десятки тысяч часов, чтобы обеспечить это, после чего дарят всем плоды своего труда. И это мощный индикатор. Разработчики приложили огромное количество усилий, чтобы сделать язык Python практичным и удобным в пользовании. Для этого проводятся конференции, регулярно обновляются коды и составляются списки адресов. Вы выбираете язык не только исходя из его технических достоинств, или скорости, или возможностей применения, которые он может представлять, но и его культуры.

Обычно, знатоки языка Python – классные ребята.

4. Почему кодировщики злые?

В интернете есть сайт, посвященный языковым критериям, измерениям скорости, с которой определенные языки выполняются по сравнению с другими, а также он включает в себя следующее предисловие для предотвращения массовых беспорядков: «Это не единственные компилирующие и интерпретирующие программы. Это не единственные программы, которые можно написать. Это не единственные задачи, которые можно решить. Это только 10 миниатюрных примеров».

Иногда, кажется, что все специалисты, которые работают в сфере кодирования, постоянно выражают свое несогласие. Вы можете ощутить, как подобный негатив исходит из страниц. Огромное количество защитных комментариев добавляются в ответ на гнев и негодование. «Люди очень резко отреагировали на этот пост, я не намеревался высказать свою точку зрения, но Java – отстой!»

В языках предусмотрено наличие планов решения задач, и специалисты усвоили их. Тупая болтовня выдается за хорошее качество работы разработчика, за признак «инженерного типа мышления» – поэтому как можно быстрее выплюньте каждое мнение, и вы сразу достигнете технического консенсуса. Ожидайте услышать, что вы неправы; будьте готовы к тому, что аналогичное заявление вы сделаете в адрес других людей. (Резко высказанная слепая злость является частью индустрии).

Кодирование является культурой болтунов. Оно может отдавать должное быстрым решениям, однако, ставит в неловкое положение тех, кому нужно спокойно собраться с мыслями, вознаграждая мыслителей, которые эффективно выражают раздражение. Интервью, связанные с работой программиста, которое часто состоит из абстрактных вопросов, лишенных всякого смысла, на которые нужно немедленно дать ответ на лекционной доске, служат типичным примером такой культуры. Регулярные встречи могут превратиться в обсуждение вещей, которые никому не нужны. Сокращенное название этому служит слово «bikeshedding» (хранение велосипедов под навесом). Интересно, кого волнует, в какой цвет выкрашен этот навес? Мда…

Культура кода – это очень и очень широкое понятие, однако географическим стержнем является Кремневая Долина, как двигатель прогресса. Долина мифологизирует юных гениев крупными денежными суммами. Идеи этой культуры работают, что делает ей честь, но только не для всех, а это уже печально.

В любой момент некоторые новые вещи могут поймать волну. Instagram был написан специалистами Python и продан за 700 млн долларов США. Это был звездный час для Python. Следующее сногсшибательное приложение, которое появится в будущем, будет написано новым языком – и заставит пользователей отнестись к этому более серьезно. Через полтора года ваши навыки могут стать бесполезными.

Однажды я был на встрече, где кто-то из присутствующих задал вопрос: «Сколько времени займет процедура урегулирования?» Один человек, работающий несколько лет в этой фирме, ответил: «Три месяца». Затем вмешался новый участник дискуссии из сферы облачных микросервисов, и заявил: «Три минуты». И оба были правы. Вот как меняется мир. Вначале медленно, а затем, раз, и на первой странице сайта Hacker News.

Программисты занимают для себя пядь территории познания и посещают конференции, но в то же время понимают, что их положение уязвимое. Они уходят в глухую оборону, когда слышат, как кто-то заявляет, что Python лучше, чем Ruby, потому что (здесь вы можете выложить потоки сообщений из 500 комментариев). Появился ли где-то очередной девятый вал, и снесет ли он язык Java? Сможет ли Go (Голанг) завоевать Python? Нужно ли мне изучать JavaScript, чтобы получать приличные деньги? Программисты очень часто недовольны, потому что они часто напуганы. Мы, по крайней мере, большинство из нас, блуждаем в потемках с одной свечкой в поисках выхода. Мы не всегда можем увидеть всю систему целиком, поэтому нам нужно разобраться в ней постепенно и по частям, в темноте.

4.1 Легенда о крутом программисте

Программирование обладает двумя культами – культом гения и юности. Один из способов, с помощью которого Google получил доброе имя, это приглашение на работу молодых специалистов высшего класса. Доктора философии Стенфордского университета, Калифорнийского Технологического Института, Массачуссетского Технологического Института и Университета Карнеги-Меллона были начальной ставкой. Настоящий программист начинает создавать коды еще в утробе матери, и сегодня его Коэффициент Интеллектуальных Способностей (IQ) составляет минимум 10 000 баллов.

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

Принимая во внимание вышесказанное, данная отрасль приглашает на работу прекрасных мыслителей-мудрецов. С некоторыми мне доводилось встречаться. Вы можете оценить их достоинства, поскольку их решения вызывают у вас смех и желание уйти. «О, я бы никогда не додумался до такого!». Искры в их мозгах совершают удивительные прыжки. Они знают больше, чем руководство пользователя. Некоторые тратят время на это, некоторые просто помешаны, а некоторые настолько дьявольски умны, что быть рядом с ними уже откровение.

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

Программирование представляет собой выполнение особенной задачи, которая требует повышенную концентрацию внимания, и поэтому может выполняться маленькой группой, или даже отдельно взятыми специалистами. Она напоминает синдром Аспергера (одна из форм психического расстройства, которая представляет собой пожизненную дисфункцию, сказывающуюся на том, как человек воспринимает мир, обрабатывает информацию и относится к другим людям). Многие программисты вам скажут, что они «находятся где-то в спектре», хотя подобная самодиагностика может быть немного своекорыстной. Быть маниакальным воспринимается многими кодировщиками, как хороший признак. Некоторые программы работы успешно прививали этим людям расстройство аутистического спектра в карьере программиста. Однако мысль о том, что люди с синдромом Аспергера могут стать хорошими программистами также лишена здравого смысла, как и идея о том, что женщины изначально не склонны к кодированию. Оба предположения, будем использовать термин, который очень любят пользователи интернета, являются проблематичными и глубоко упрощенными. Скажем более тактично: все люди могут быть программистами, и страдающие аутизмом могут заниматься любым видом деятельности.

Если крутые программисты существуют, тогда им нужны крутые менеджеры в крутых компаниях. Если вы не крутой специалист, то в этом нет ничего зазорного. Для по-настоящему талантливого программиста написание кода является побочным эффектом процесса мышления. Это умение не в синтаксической структуре, а в том, как эти специалисты воспринимают время и вычисление. Они способны видеть последствия своих действий быстрее, чем следующий программист, поскольку они проводят меньше времени в темноте. Их коды содержат ошибки и требуют доработки – они не без изъянов. Но на каждую свечку, которой мы освещаем свой путь во мраке, у них есть три или четыре фонаря и карта.

4.2 Суть в том, что настоящие художники – это …

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

В это время, руководители крупных коллективов программистов должны фактически поставлять программное обеспечение. «Поставлять»  — это культовое слово. Если они это не сделают вовремя, тогда менеджеры получают низкий рейтинг в обзорах своей работы и закончат свою деятельность, зарабатывая только непомерные, но не баснословные барыши. Винные погреба столкнутся с риском, уже не говоря об уплате алиментов.

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

Как ни странно, однако язык программирования может служить одним из потенциальных примеров риска. Дело в том, что опытный и талантливый программист способен выучить язык за неделю. Его коллеге среднего уровня понадобится больше времени. При этом, увлекательные, интересные языки программирования всегда несут в себе благословение, обещания скорости, или производительности, или просто счастья. Серьезно, счастье является  важным аргументом «продаж» для языков, и пользователи пишут сообщения в блоги, где они анализируют манеру обсуждения кодов. Согласно анализу Тобиаса Германна, пользователя GitHub, кодировщики PHP более часто применяют слово «ненависть» и его производные в своих комментариях на социальном новостном сайте Reddit, чем программисты Clojure, которые, в свою очередь, предпочитают использовать слово «клевый» чаще, чем программисты PHP.

Существует много постов по поводу того, как убедить менеджера вашей команды, чтобы он перешел на новый язык. Опытные управляющие со шрамами на лице, которые часто сами были кодировщиками, стали более практичными и более талантливыми в умении щурить глаза, покашливать и выдвигать следующие оправдания: «Нет, затраты на переход в настоящее время слишком высокие». Или «Может мы выполним пробный проект на две недели, когда создадим механизм выдачи аналитических отчетов».

Затем программисты возвращаются на свои рабочие места и жалуются до тех пор, пока продукт не будет поставлен. Или они просто увольняются, потому что один Господь знает, будет ли здесь еще работа. Для программистов, особенно молодых, в любом месте работа найдется всегда.

У менеджеров и более пожилых кодировщиков меньше вариантов. Для них лучше сидеть на одном месте и продолжать работать, даже когда код начинает выглядеть отвратительно, или когда номинально существуют лучшие решения, даже если технический долг нарастает вокруг вас, потому что через несколько лет все изменится. Возможно, вам предложат более интересную должность, и у нового менеджера появится желание и мотивация порвать все, что вы сделали, проклиная вас, и снова начать (возможно, с использованием нового языка), поставив перед собой цель упростить поставленную задачу. Или вся отрасль будет переживать подъем, поэтому все, что вы сделали, нужно будет выбросить и выбрать новый путь. (от десктопа до веб-сети, от веб-сети до мобильного устройства, от мобильного устройства до … кванта? Кто знает. Но всегда есть что-то удивительное).

Некоторые коды выглядят прекрасно, и вы испытываете желание читать их, использовать повторно и поместить в свою программу и сердце. Некоторые коды – просто раздражают и выглядят претенциозно, а некоторые на первый взгляд выглядят хорошо, однако, на поверку оказываются посредственными инструментами. Оценка качества кода составляет большую часть программирования. Давайте – выносите приговор.

Так или иначе, процесс не стоит на месте. Отрасль всегда обещает поглотить себя, предложить настолько правильную парадигму, что мы будем готовы прекратить тратить время в пустую и войти в мир чистого цифрового мышления. Однако, это нереально.

4.3 Нам всего равно нужно сделать Выбор…

Девять недель в процессе по созданию новой архитектуры, и вы обращаетесь к человеку в темно-сером пиджаке с просьбой заглянуть к вам в офис и обсудить дальнейшие шаги. Вы заметили, что его коллектив начал одеваться в его стиле. Одна из сотрудниц в высоких сапогах сотворила на голове нечто очень сложное и одела черную кожаную куртку. Ничего показного. Просто так более классно! Раньше она была вся в Patagonia, которая выпускает спортивную одежду. Это так одеваются программисты? Как они совершенствуют собственный стиль руководителя? Он отвечает: «Благодаря языку РНР». «Что имеем, то имеем. Команда хорошо поработала с РНР. Но я думаю, одна вещь, которую мы точно усвоили это то…»

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

«…что нам действительно нужно уходить от РНР.»

Ну… Вот ваш ответ.

«Мы все согласны, что РНР – это не тот язык, который нам нужен на протяжении следующих пяти лет».

«Тогда какой, по вашему мнению?»

«Вот в чём трудность» — говорит он. (Фраза взята из «Гамлета» В. Шекспира — Гамлет: «…Умереть, уснуть. Уснуть! И видеть сны, быть может? Вот в чем трудность; «). И вы должны взять себя в руки и не показывать свое настоящее выражение лица. Если только он опять не начнет цитировать Шекспира…

«Ну, так какой язык вы хотите использовать?»

Он выглядит смущенно. «Я в том смысле, что это не важно, я не пишу код».

Так кто тогда пишет? И вы именно сейчас осознаете, что ответ один – никто.

4.4 Почему существует так много языков?

Одна из известных работ на тему информационных технологий «Следующие 700 языков программирования» П.Дж. Лэндина описывает 1 700 языков, которые уже засоряют компьютерный пейзаж. Статья была написана для академического журнала и включает в себя одно очень точное, парадоксальное высказывание: «Большинство языков программирования являются частично способом отображения одних вещей через призму других, а частично базовым набором определенных вещей». Статья была опубликована в 1966 году.

Некоторые из этих 1 700 языков все еще применяются.

Например, Cobol, легендарный и ненавидимый многими детальный язык, который в узких кругах был привязан к проблеме «2000 года». Ученый компьютерщик Дейкстра однажды описал его следующим образом: «Использование Cobol травмирует мозг, поэтому его обучение должно приравниваться к уголовному преступлению».

Несмотря на то, что никто не поет ему дифирамбы (за исключением банков, поскольку банки любят Cobol), этот язык все еще функционирует в ЭВМ. Языки программирования Fortran, Formula Translating System (Система Преобразования Формул, Джона Бэкуса, и LISP, List Processor (процессор обработки списков), Джона МакКарти, (со временем название начали писать строчными буквами, и он превратился в Lisp, почти как UNIX – в Unix), были разработаны в 1950-х годах, во времена вычислительных устройств, которым скармливали магнитные ленты или бумажные карты, и оба применяются по сей день. Возможности, обеспечиваемые «Фортраном», отражены в его названии. Сегодня он выглядит достаточно комично:

Знімок екрана 2015-10-28 о 01.49.35

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

Backus
«Лень была поводом для моих работ. Мне не нравилось писать программы, и поэтому, когда я работал на IBM 701, создавая программы для вычислительной обработки траекторий полета ракет, я начал создавать систему программирования для упрощения процедуры написания программ» — Джон Бэкус, 1979 год, Журнал для сотрудников IBM Think («Думай»)

Lisp – это еще одно чудовище. Он появился в недрах математических исследований. У языка есть много свойств, которые делают его особенным. Некоторые специалисты утверждают, что Lisp — это сокращение «Lots of superfluous parentheses» (Много ненужных круглых скобок).

Знімок екрана 2015-10-28 о 01.49.51

Еще в 1980-х годах, когда программисты Fortran были заняты оптимизацией мощности ядерного арсенала, специалисты Lisp создавали программу для робота в виде плюшевого медведя, или написания сонетов. Но однажды, люди, которые решают финансовые вопросы в этом мире, пришли и потребовали закрыть эту «лавку». А затем выдернули большой красный переключатель, который был, вероятно, запрограммирован на языке Fortran. Программисты Lisp, которые до этого времени симулировали человеческий разум, или автоматически ваяли великий сонет, остались ни с чем, кроме глубокой печали.

Производители оборудования Lisp начали закрываться и распродавать свои активы. Студенты, вполне вероятно, переключились на изучение С или Java. Язык Lisp стал поучительной историей, с его уникальным унифицированным видением компьютера и теплыми воспоминаниями о лучших временах. И все же…

Еще жив курилка! Язык Lisp применяется в системах данных об авиационных перелетах, созданных ITA, которые были приобретены Google. Когда вы гуглите «рейс из Нью-Йорка в Берлин», ITA тут как тут с языком программирования Lisp. Было время, когда Lisp казался еще более умершим и увядшим, чем древнегреческий язык – красивая философская система, однако совсем не практичная.

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

5. Когда вы посещаете совещание «Подтверждение Адреса Электронной Почты»

Чтобы раздобыть больше знаний о том, как все это работает, и получив постоянно действующее приглашение от человека в темно-сером пиджаке, вы посещаете совещание программистов.

Двое из них опоздали, и вы смело спрашиваете одного из них, что происходит. Он мигом оценивает пределы вашей информированности с помощью вопросов, начиная с такого «Знаете ли вы, что такое веб-страница?»

Затем он демонстрирует вам следующее: чтобы получить адрес электронной почты, вы можете создать веб-страницу, используя HTML. А вот и HTML:

Знімок екрана 2015-10-28 о 02.04.44

Выглядит это следующим образом:

Знімок екрана 2015-10-28 о 02.04.52

На сегодняшней повестке дня:  Как убедиться, что регистрация не только удобно реализована для пользователей, но также обеспечивает компании безопасность. Программист утверждает, что вопросы, которые являются темой для обсуждения, такого типа: «Куда вы внесете эти данные? Будете вы их хранить в текстовом файле? Что вы будете с ним делать? Будете ли вы действовать в соответствии с ним?»

А вот появились два программиста. Программист А (старший) занимает свое место у лекционной доски…

Программист A: Давайте начнем с проверки достоверности электронной почты

Программист Б: Вы можете определить понятие «достоверный»?

Программист В: «Правильно построенный — »

Программист Б: —правильно построенный с помощью теста регулярного выражения

Программист В: — или правильно построенный в соответствии с RFC 5321 и RFC 5322?

Программист A: Представим себе библиотеку, хорошо?

Программист Б: Посылаем ли мы подтверждающее сообщение каждому, кто предоставит форму? 

Программист В: Мы ведь должны, правильно?

Программист A: В спецификациях это указано?

Программист Б: Нет.

Программист В: Тогда нам не следует этого делать.

Программист A: Эй, подождите, может целесообразно обновить спецификации?

Программист Б: Это лучший метод.

Программист В: Могу я сказать, что меня беспокоит?

Программист A: Минуточку. Запишите это. Нам необходимо проверить подтверждения. 

Программист Б: Понятно.

Программист В: Что меня действительно беспокоит, так это «временные» услуги электронной почты. Как, например, Mailinator.com, который позволяет создавать «одноразовые» электронные адреса.  

Программист A: Поэтому не разрешайте никому заходить на адрес Mailinator.

Программист Б: [Печатает.]

Программист В: Понятно, однако у Mailinator.com не один адрес, а как минимум 300.

Программист A: Достаньте список.

Программист Б: Фактически списка нет. Необходимо перезагрузить страницу Mailinator, создать список и держать кулаки. 

Программист В: Хорошо, мы рассмотрим этот вопрос. Списка нет. 

Программист A: Давайте не будем отклоняться от общей темы и переходить на Mailinator, прежде чем обсудим вопрос общего сохранения данных?

Программист Б: Я имею ввиду, что, если мы полагаемся на правильно созданную библиотеку, то достаточно ли она хороша? Никто не планирует вводить электронную почту на 500 страниц. 

Программист В: Русские могут.

Программист A: Вполне вероятно.

Программист Б: Однако, мы можем установить ограничения на закачку данных, правильно? 

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

Программист A: Ну и?

Программист Б: Нет, он прав. Эта информация идет одним большим куском, поэтому кто-то из пользователей может ввести электронный адрес на 500 страниц, и мы должны проверить его. 

Программист В: Я возьму этот вопрос под свой контроль, потому что он имеет отношение к общей логической структуре базы данных. 

Программист A: Сможем ли мы увидеть это в базе данных?

Программист В: Именно поэтому я им и займусь. 

Программист A: Кто-нибудь сфотографировал лекционную доску? 

Программист Б: Естественно.

Программист В: И мы должны поговорить об истечении сроков действия учетной записи?

Программист A: Об этом говорится в спецификациях?

Программист Б: Нет, но это – зависимость для инструмента администратора «окончание срока действия пароля».

Программист A: Кто этим займется? 

И так продолжается не один час. Лекционная доска постоянно в работе, мобильный телефон  уже давно превратился в фотоаппарат. «Нам, действительно, необходимо отслеживать, сколько раз им высылали электронные сообщения?» «Как можно убрать электронные сообщения, введенные в систему?» Что будет, если кто-нибудь введет дважды аналогичное сообщение?»

Программист А, руководитель, выглядит большим профессионалом. Она стоит возле лекционной доски и что-то неразборчиво пишет, стирает, снова пишет и снова вытирает. Листы бумаги, стрелки, клеточки, линии. На доске она написала РУССКИЕ? Однако через час до вас доходит: Это просто электронное сообщение. Одно поле. Один бит данных. Вы даже не разобрали имен. Что, если у пользователя одно имя? Что, если Боно или Шер (известные исполнители поп-музыки) действительно создают учетную запись? Как поступать в случае, если это китайский Боно? Сможем ли мы позволить регистрацию на китайском языке? Какие браузеры мы должны поддерживать? Должны ли сотрудники колл-центра иметь возможность управлять учетными записями?

Трудно не думать о мешках с горящей наличностью 

Программист Б вводит информацию в систему задач, создает алгоритмы выдачи команд, распределяет задания. Результатом встречи является шквал распределений, которые распространяются в электронном виде. Программист В – молодой человек, который сильно утомляет своими идеями программирования. Однако его коллегам он нравится.

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

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

И за все это время не было написано ни одной строчки кода.

5.1 Как соотносятся между собой код и данные?

Данные поступают из разных источников. Иногда от третьих сторон – Spotify импортирует огромное количество музыкальных файлов от фирм звукозаписи. Иногда данные создаются пользователями, как, например, электронные сообщения, твиты или сообщения в социальной сети Facebook, и документы в Word. Иногда сами машины создают данные, как, например, фитнес-трекер упражнений, или термостат Nest. Когда вы работаете кодировщиком, вы все время говорите о данных. Когда вы создаете веб-сайты, вам необходимо получать информацию с базы данных и размещать на веб-странице. Если вы работаете в Twitter, твиты являются данными. Если вы сотрудник Внутренней налоговой службы, налоговая декларация включает в себя данные, которые распределены по полям.

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

5.2 Где живут данные?

Очень редко бывает так, чтобы крупные программные модули (задачи) находились вдали от базы данных. Amazon, Google, Yahoo!, Netflix, Spotify – все они обладают огромными мощными базами данных. Наиболее распространенными являются реляционные базы данных, которые используют язык структурированных запросов SQL (Structured Query Language). Реляционные базы данных представляют мир, где применяются таблицы со строками и колонками. Выглядит SQL следующим образом:

Знімок екрана 2015-10-28 о 02.14.08

Предположим, что существует таблица под названием BOOKS (КНИГИ) и в ней строка, где хранится книга под идентификационным номером 294. Идентификационные номера – это очень важный элемент базы данных. Представьте себе базу данных книжного магазина. В ней есть таблица клиентов со списками покупателей. В ней есть таблица книг со списком книг. И в ней есть продуманная промежуточная таблица покупок, которая включает в себя строки, где фиксируется каждый момент, когда покупатель приобретает книгу.

Примите мои поздравления! Вы только что создали систему 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 коллективом специалистов под руководством известного программиста Джеймса Гослинга. Язык объектно ориентированный, однако очень похож на С и С++, поэтому для тех, кто понимает эти языки, он будет довольно легким, чтобы усвоить. Начало разработок датируется 1991 годом, в конечном итоге его начали очень активно рекламировать в интернете в 1995 году, как универсальное лекарство против любых напастей, которые досаждают программистов! Java был на каждом компьютере, Java вошел в веб-браузер в виде «аплета» (небольшой прикладной программы), которая позже была названа «крэплет» (жаргонное название плохо написанной программы, производное от английского слова «crap», что означает «фигня», «дрянь», «лажа») и со временем могла «поглотить» Web. Java! Он работал очень медленно по сравнению с более традиционными языками, например, С. Зачем он нужен? Java! Существовали терминалы подключенных к сети компьютеров, которые назывались JavaStations. Ох, этот Java! В 1996 году фирма Kleiner Perkins Caufield & Byers даже объявила о создании фонда Java c бюджетом 100 миллионов долларов. Но после всех этих эмоциональных всплесков Java… завис, и его будущее оказалось не столь блестящим, как было задекларировано с самого начала.

Язык Java, функционирующий «внутри» веб-браузера в качестве дополнительного программного модуля (plug-in), никогда не работал хорошо. Он был медленный, громоздкий, полный «тормоз» и процедура загрузки напоминала катание на качелях на краю катастрофы, полная паранойя, которая часто возникала, когда браузер переставал функционировать. Цифровые ключи, кредитные карточки, идентификационные удостоверения, созданные на базе языка Java, также имели низкий коэффициент успешности. Но язык был бесплатным для загрузки и создан для маленьких и больших групп пользователей.

Ниже я привожу несколько фактов о языке Java, которые помогут вам понять, насколько медленно он завоевал мир только благодаря тому, что многим казался слишком хорошим.

Это был язык больших блоков. Изначально он включал в себя тонны кодов, «библиотеку классов», которая состояла из набора классов и методов, необходимых для обращения к базе данных, обработки сложной документации, выполнения математических заданий и «общения» с различными сетевыми сервисами. Огромное количество классов этой библиотеки ждало своего часа, чтобы превратиться в объекты и привести себя в чувство.

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

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

Язык запускался на «виртуальной» машине, а это означало, что его можно «применять везде», а именно, на компьютерах с Windows, Mac или Unix, и везде он вел себя одинаково. Это был хорошо продуманный компромисс, который был идеальным для крупных компаний. С начала 2000-х годов Java стала более популярной для серверов приложений. Хотите создать систему управления контентом для негосударственных организаций со штатом 2000 человек? Язык Java хорошо подойдет для этой цели. Хотите соединить между собой сотни тысяч сотрудников компании? Java. Хотите помочь пообщаться банкирам разных банков между собой конкретно в 17 часов и 1 минуту? Снова Java. Нужно создать таблицы, диаграммы, пачки бумажной документации, проекты на пять лет? Java. Он не впечатляет с первого взгляда, но достаточно предсказуемый. Это язык для создания крупных проектов на больших площадках с многочисленными коллективами. Люди жалуются, но эта штука работает.

Другие языки, как например, Perl или PHP, позволяют вам делать то же самое, что и Java, поскольку они работают на одной и той же платформе, однако, изначально были созданы для написания сценариев и быстрой оценки программ. У них отсутствует аналогичная сила.

Все упирается в вопрос сравнения – утверждать, что один из нас более сильный, чем другой, означает провоцировать конфликт; кто-то появится в цифровом портале и скажет: «Фактически…» и вам обеспечена бессонная ночь. Но, если бы я пришел к вам и сказал: «Мне нужно за два года создать платформу для торговли акциями», никто не уволит вас за то, что вы выбрали язык Java. Если бы я сказал: «Мне необходим через два месяца прототип новой платформы для торговли акциями для клиента, который может быть захочет, а может и нет, создать ее, и она должна красиво выглядеть в моем веб-браузере.» В этом случае я бы выбрал нечто более компактное и не очень навороченное с точки зрения программы. Для этой цели подойдут Python, или Ruby.

5.4 Вкратце о большой теме под названием Microsoft

Естественно, если вы работаете с Microsoft, то это не допустимо. Вы не можете позволить, чтобы другие компании проникли в ваш банк и предприятия с помощью этого глупого языка. Вы не можете держать сотрудников, которые контролируют процесс на виртуальных компьютерах, когда они должны работать с Windows, как завещал им Господь Бог и Билл Гейтс.

Никогда не исключайте из своей практики Microsoft. Ее потрясающее корпоративное мастерство всегда заключалось в том, чтобы использовать все странности компьютерных идей и транслировать их для корпораций на языке Руководства Международного Предпринимательства. Чтобы вы не обсуждали в этой статье, Microsoft предлагает, как минимум одно из решений. Статически типизированный, скриптовый, управляемый данными, функциональный – назовите свое неоднозначное прилагательное, и Microsoft готов продать вам нечто, что поможет вам. И вы сможете написать на нем код Windows и прожить жизнь Windows. И это не унижение достоинства; продукты Microsoft могут быть такими же хорошими, если не лучшими, чем другие конкуренты на рынке.

5.5 Ликвидная инфраструктура 

«Корпорация» — это страшное слово среди программистов, поскольку программирование для корпораций означает выполнение огромного объема работ с нулевым конечным результатом. Вспомните healthcare.gov, первую версию, которая была полной катастрофой? Идеальный пример кодирования для корпорации. В то же время, программисты уважают крупные системы – особенно, когда они работают. Мы уважаем амбиции больших тяжеловесных машин, которые работают с большими блоками двоичных данных кода. Мы выросли на публикациях о суперкомпьютерах. Крупногабаритное аппаратное обеспечение – это всегда классно, даже если будущее видится в форме огромных облачных платформ, которые включают в себя огромное количество дешевых компьютеров.

Однако Java широко используется и в Google. Это язык для таких компаний как General Electric и Accenture. Это – не начинающие интернет-компании, но, если сроки выпуска их продуктов сдвигаются, аналогичная ситуация возникает и с доходами, и здесь они «признательны» открытому рынку.  Гигантские корпорации, деятельность которых управляется компьютерами, структурированы вокруг кода и создания программного обеспечения. Но это не означает, что у них огромный штат – компания Amazon известная своим правилом двух коробок с пиццей: «Никогда не проводи совещание там, где двух коробок с пиццей будет недостаточно, чтобы накормить весь персонал» (“Never have a meeting where two pizzas couldn’t feed the entire group”).

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

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

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

В конце концов, люди поняли, что, если им не нравится язык Java, они могут написать другие языки, которые компилируются в байт-код Java и запускаются на виртуальной машине Java. В настоящий момент существует много языков, которые успешно заменяют Java. Некоторые являются версиями известных языков, например, Jython и JRuby. Другие – полностью новые, например, Scala, один из языков, которым начали пользоваться разработчики Twitter, когда они выросли из одежек Ruby. Есть также Clojure, который является ничем иным, как … Lisp. Clojure берет любимый многими компьютерный язык, созданный в 1950-х годах, модернизирует его под требования 2010 года и обеспечивает ему возможность использовать повторно все классы Java, существующие в мире. Clojure был создан Ричем Хики (Rich Hickey), который решил, что ему понадобится новая современная версия Lisp.

Мне действительно нравится Clojure. Он меня многому научил. Но то, что применимо к Clojure, применимо и к другим языкам, однако он все еще почитаем, как классическая модель, типа электробритвы Braun, или кресла Имса. Хики работал над Clojure на протяжении многих лет, в конечном итоге адаптировав его для запуска на виртуальной машине Java. Это был радикальный и впечатляющий выбор, поскольку он означал, что Clojure получил доступ к библиотеке классов Java в полном объеме.

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

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

Clojure любят многие, но этот язык часто не используется. Возможно, он станет более популярным в будущем. Он появляется в интересных местах. Он используется в магазинах сети Wal-Mart для сбора и контроля приходных данных для бухгалтерии. Он перенесен в мир Microsoft и работает непосредственно внутри Excel, проводит адресацию ячеек и колонок. Это самый безумный язык в цифровом мире. Кто-то создал версию, которая компилируется в JavaScript, поэтому, бабах!, Clojure работает в вашем веб-браузере. Фактически эта версия называется ClojureScript.

Суть в том, что эти вещи – довольно изменчивы и нестабильны в мире программирования. Изменчивы в том виде, в котором не должны быть другие отрасли промышленности. Языки представляют собой ликвидную структуру. Вы загружаете несколько программ и, стоп-стоп, внезапно у вас возникает рабочая среда Clojure, которая фактически является Средой Выполнения Языка Java (Java Runtime Environment). Вы хватаете старый ПК, который пережил все допустимые сроки эксплуатации, загружаете туда Linux и внезапно получаете мощный веб-сервер. Теперь вы можете участвовать в новых  мероприятиях. В семинарах, собраниях, конференциях, блогах, обсуждениях в Твиттере. И вас радушно принимают, поскольку участники заинтересованы в притоке свежей крови, свежих мыслей. Предполагалось, что Java вытеснит язык С и будет работать на умных «побрякушках». В настоящий момент он запускает серверы приложений, служит ресурсом для языков типа Lisp и является базовым языком для операционной системы Android.

Компании Oracle это не понравилось, поэтому она подала судебный иск на Google. Oracle работает с огромным количеством программных продуктов. Она выиграла иск. Языки С и С++, которые она планировала вытеснить, также выиграли. Многие стороны подобных конфликтов становятся победителями, потому что количество компьютеров постоянно растет в огромном количестве. И это странно.

5.6 Имеющийся в наличии

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

Он корчит мину на лице. Типа этого, выдавливает он из себя, но когда вы создаете систему, которая будет интегрироваться с другими расположенными вокруг нее системами, а ваша компания представляет собой набор таких систем, ничто нельзя определить, как имеющееся в наличии. Существуют инструменты, пакеты и библиотеки, и если у вас вообще есть разум, вы уже используете подтвержденный документами бесплатный код для таких вещей, как проверка достоверности электронной почты (почтового сервера). «Все является edge case (в программировании edge case (граничный случай) называют тест, который проверяет граничные условия алгоритма, функции или метода. Серия edge case может быть использована, чтобы определить «границу» работоспособности программы. Если она работает «на грани», то будет работать и в других условиях )», утверждает человек в пиджаке, «Тестирование и edge case». И вы приходите к выводу – Мир сошел с ума.

Посылаем электронное сообщение.

Если вам необходимо, чтобы приложение JavaScript автоматически посылало кому-нибудь электронное сообщение, нужно сделать следующее:

  1. Пищите в поисковой системе Google программный пакет для управления кодом почтового сервера;
  2. Следуйте за первой ссылкой; найдите общий модуль с названием e-mail, который был загружен 5015 раз на протяжении месяца;
  3. Напечатайте npm install e-mail со своей командной строки;
  4. Выделите веб-страницу для модуля, с помощью которого вы можете получить пример кода;
  5. Скопируйте и вставьте код;
  6. Модифицируйте его немного;
  7. Запустите код, напечатав node myscript.js;
  8. Закатите глаза в недоумении, если ничего не произойдет;
  9. Уделите шесть или более часов на конфигурирование почтового сервера, чтобы он послал электронное сообщение;
  10. Вышлите на свой электронный адрес столько сообщений, чтобы ваша корпоративная сеть заблокировала вас, как спам;
  11. Махните рукой на это дело и отдохните;
  12. На следующий день попробуйте запустить код электронной почты;
  13. Повторите процедуру тысячи раз с известным чувством отчаяния и страха;
  14. Как только все начнет работать, зарегистрируйте его в репозитории исходного кода, пошлите электронное сообщение коллективу и обновите статус кода в системе отслеживания ошибок;
  15. Пообещайте себе, что вы напишете необходимую документацию и протестируете код завтра;
  16. Никогда не пишите подобных вещей.

5.7 А как же JavaScript?

Помните Netscape, первый огромный коммерческий веб-браузер? В 1995 году, когда Java был весь в цвету, Netscape решал свою проблему. Он демонтировал веб-страницы, которые были не столь привлекательны. У вас могло быть смешное изображение обезьянки на веб-странице, во время передвижения мыши, вы никак не смогли заставить обезьянку танцевать. Разработчик языка Брендан Эйх (Brendan Eich) пытался решить эту задачу. Для этой цели он создал язык под названием JavaScript.

Взаимоотношения между JavaScript и Java довольно деликатные. Самая сильная связь  между языками – это маркетинговое соединение их названий. Ранняя история JavaScript не особенно вдохновляла программистов. А сейчас обезьянка может танцевать. Вы можете работать с курсором, заставляя объекты мерцать, когда мышь коснется их.

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

Затем, около десяти лет назад, специалисты начали говорить об Ajax – идея состояла в том, что можно встроить реальное программное обеспечение в веб-страницу, не просто документ, а программу, которая могла выполнять настоящую работу. В зависимости от вводимых в компьютер данных, программы могли отвечать и меняться. Вы можете распространять свое программное обеспечение среди сотен миллионов пользователей, и JavaScript будет работать для них. Он не был таким управляемым, как Java, он был намного медленней, чем скомпилированный в родном формате С, и у него практически отсутствовали тонкости и мелкие детали. И все же: Gmail, Google Maps, Flickr, Twitter, и Facebook. Каждый отдельный пиксель на веб-странице можно сейчас регулировать, тип можно менять, слова можно перемещать, а кнопки нажимать.

Как и с любой другой звездой, существует целая индустрия, посвященная замазыванию изъянов и созданию привлекательного вида. Существуют книги о «достоинствах» JavaScript, есть библиотеки, которые облегчают и позволяют более согласовано создавать программы, такие, как jQuery. Они могут превратить много строк кода, которые необходимы для того, чтобы параграф исчез, в отдельный $(«p.optional»).hide();.

Во времена iPod и раскрашенных Макинтошей, фирма Apple взяла код из открытого Веб-браузера под названием Konqueror и модифицировала его для создания Safari, собственного Веб-браузера, который должен был конкурировать с Microsoft Internet Explorer. Затем, в 2008 году Google начала создавать собственные модификации для веб-подсистемы под Safari, которые получили название Webkit, а также создала собственную версию Chrome с быстро развивающейся программой JavaScript под названием V8. Язык JavaScript создавался быстро. «Разработчики обследуют JavaScript с таким темпом, как будто они мчатся на повозке, однако термоядерный реактор уже давно заменил лошадь», написал в своем Твитере один разработчик. Поисковая система Google функционирует лучше, когда JavaScript  работает быстро.

В 2008 году разработчик по имени Райан Дахл (Ryan Dahl) модифицировал движок V8, который представлял собой бесплатное программное обеспечение, и запустил его вне браузера. До этого существовали автономные версии JavaScript (включая некоторые, которые запускались внутри Java, конечно), но все они работали медленно. Он назвал это дополнительной ветвью Node.js. Однажды JavaScript был запущен внутри Веб-страниц. Но он вышел из «браузерной» тюрьмы. Сейчас он может функционировать в любом месте. Он может касаться вашего жесткого диска, посылать электронные сообщения, удалять все ваши файлы. Это настоящий язык программирования. А клиент… стал сервером.

Язык JavaScript возводит в квадрат несколько цифр для вас:

Знімок екрана 2015-10-28 о 02.17.37

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

Вскоре сообщество разработало огромную библиотеку пакетов – битов программного обеспечения, которые выполняют специфические задачи, как например, чтение файлов, обмен информацией с базой данных, или «общение» с инструментами веб-сервисов Amazon. При написании ресурс npmjs.com обладает 150 000 пакетами, и более миллиона копий разнообразных пакетов ежемесячно загружаются в базу данных.

Сокращение NPM расшифровывается, как Node Package Manager (Диспетчер Пакетов Node). Это программное обеспечение, которое помогает инсталлировать пакеты, и, честно говоря, они достаточно громоздкие, поскольку многие из 150 000 пакетов требуют поиска, тестирования и сопровождаются вздохами разочарования. Но, если вам нужно забрать большой объем важной информации бесплатно, вы не будете сожалеть.

Язык JavaScript представляет собой адскую смесь, разработанную в спешке, и он работает на кто его знает каких устройствах. Их количество может достигать миллиарды единиц, поэтому, вы, наверное, сталкивались с этой программой. У ваших клиентов может отсутствовать iPhone, но они, вероятно, так или иначе, пользуются JavaScript.

Вы можете использовать JavaScript для того, чтобы сделать свою Веб-страницу более интересной. Вы можете применить этот язык для создания клиентской стороны полноценного приложения, как, например, Google Docs, которое запускается в браузере. Вы можете использовать его для создания Веб-сервера, который «общается» с браузером, или применить его для программного интерфейса приложения, который передает данные «клиенту» и этим клиентом может быть браузер ноутбука. Однако, за окном у нас 2015 год, и этим клиентом, вполне вероятно является приложение на вашем смартфоне.

5.8 Что я минимально должен знать о PHP?

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

PHP расшифровывается, как Personal Home Page/ Forms Interpreter (Преобразователь Личной Домашней Страницы в Формы). Идея состоит в том, что, когда вы загрузили свои веб-страницы, код РНР запускается до момента загрузки страницы в интернет. РНР может, например, проверить, были вы зарегистрированы или нет. Если да, он может показать вам ваши сверхсекретные реквизиты, а, если нет, он может попросить вас: «Пожалуйста, зарегистрируйтесь».

Я знаю многих людей, которые пишут программы в РНР, и это умные и хорошие специалисты. РНР приводит в действие Etsy и Facebook, Wikipedia и WordPress. Из огромного количества веб-страниц, большой процент создан с помощью РНР.

Зарабатывать на хлеб путем создания кодов с помощью РНР – не означает подписать себе смертельный приговор. Многие специалисты даже разбогатели на этом. Хотя, работа связана с большим количеством  вырезания и вставок через буфер обмена и многочисленными посещениями дяди «Гугла» с целью выяснить, почему некоторые вещи не работают. Бедный, печальный, незаконнорожденный, невероятно эффективный, потрясающе успешный РНР. Чтение кода РНР сродни чтению  стихов, которые вы сочиняли, будучи на первом курсе колледжа.

Я потратил сотни, а может, тысячи часов, создавая программы в РНР, когда я не знал, что я делаю. Об этом также не имел понятия РНР. Перезагружал веб-страницы, пока мои пальцы не начинали страшно болеть. (Я уже слышу ваши всхлипывания сочувствия). Все было взломано, и  люди проникали на мои страницы. РНР. Я не хочу желать ему зла. Мне приятно видеть, как он смог обойтись без посторонней помощи. Иногда у нас были хорошие времена, но я ни под каким предлогом не хочу туда возвращаться.

6. Как Создаются Приложения?

Одним из преимуществ обладания компьютером Mac является возможность скачивания программы Apple под названием Xcode. Это — IDE, Integrated Development Environment (интегрированная среда разработки программ).

Это огромный массив данных, более 2 гигабайт, или, грубо говоря, размер часовой видео программы DVD-качества. Xcode является сердцем Apple. И это не означает только, каким образом компания пишет программное обеспечение. Это инструментарий для каждого, кто хочет создать программу для Mac, или iPhone.

sec3_xcode

Внутри Xcode находятся целые миры, которые  необходимо исследовать. Например, один компонент — iOS SDK (Software Development Kit – Пакет для Разработки Программного Обеспечения). Вы используете их для написания приложений под iPhone и iPad. Этот пакет состоит из десятков и десятков интерфейсов для прикладных программ APIs (Application Programming Interfaces). Есть интерфейс, который отслеживает место пользователя, есть для анимирования изображений, есть для воспроизведения звуков, отображения текста на экране и сбора информации от пользователей. И так далее.

Возможно, вы начали замечать некоторые элементы взаимосвязи. Помните, как работала окружающая среда Smalltalk, дисплей с большим количеством окон. Нечто похожее есть и в Xcode.

Есть и другие варианты. Я тяготею к созданию большей части моего кода в текстовом редакторе с черным фоном, чтобы значительно меньше увидеть с первого взгляда, а воспринимать все в комплексе. Однако, в данном конкретном случае – это уже нечто серьезное. Вы заполняете несколько полей, скрепляете вместе некоторые комплектующие (действительно, иногда это осуществляется путем соединения виртуальных проводов и виртуальных отверстий) и начинаете создавать код.

Когда представитель фирмы Apple стоит на сцене и объявляет нечто новое, которое заканчивается на слово “Kit,” например, ResearchKit или HealthKit или WatchKit, которые представляют собой набор программ для Apple Watch, то Xcode будет на месте расположения этих пакетов, полностью документирован для того, чтобы использовать его в процессе создания программного обеспечения.

Некоторые функции зарезервированы для производителя. Вам известно, как Apple рекламирует свою продукцию, подчеркивая, что вы можете измерять пульс с помощью Apple Watch? Фирма, правда, еще не задокументировала, каким образом это можно сделать. Возможно, компания беспокоится, что вы каким-то образом неправильно используете это. Возможно, измерение сердцебиения требует бережной работы с аккумулятором. Поскольку упомянутые проблемы уже имели место, то Apple пытается не допустить ухудшения работы, и поэтому не допускает случайных пользователей. Вероятно, что многие пытаются выяснить, каким образом получить доступ к API, позволяющему измерять сердцебиение. Люди всегда остаются любопытными.

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

Одновременно выполняется много функций, поэтому вы хотите оставить операционной системе отслеживать местонахождение окон. Именно IDE поможет вам реализовать ваши идеи в этом массивном мире с десятками тысяч методик, благодаря чему вы сможете воспроизводить песни, перематывать запись, отслеживать время, когда звучала песня (то есть, вы также должны иметь представление о временных зонах), или отслеживать название песни (а это означает, что вы также должны знать язык, на котором написано название песни, а также знать, как оно отображается – слева направо, или справа налево).

Вам также необходимо знать время звучания песни, а это означает, что у вас должен быть некий механизм для получения времени звучания из музыкального файла. Как только вы его получите – скажем, в миллисекундах – вам нужно разделить полученную цифру на 1000, а затем на 60, чтобы иметь информацию в минутах. А как быть, если композиция является подкастом и время звучания составляет 90 минут? Не хотите ли вы разделить еще раз, чтобы получить в часах? Столько переменных величин!

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

Прекрасный способ для реализации подобных планов – поместить свои намерения в API, SDK и IDE. Вот почему так много единиц программного обеспечения для написания программных продуктов предлагается бесплатно. Это стимулирует развитие еще большего количества программного обеспечения.

Иногда это является результатом корпоративных амбиций. Язык Java был продуктом Sun вплоть до библиотеки классов. То же можно сказать о C# для Microsoft. Но большинство кодов, которые предлагаются бесплатно, были созданы благородными волонтерами на протяжении многих лет для собственных нужд. Тактика взаимных уступок между корпорациями и языками программирования – довольно сложная вещь. Некоторые разработчики языков приглашаются компанией, чтобы работать со своими исходными языками. Работы над Go и Python финансировались в различной степени со стороны Google, а создатель РНР работает в Etsy.

Apple и Microsoft, Amazon и Google: заводы и фабрики. Их интерфейсы для прикладных программ являются результатом многочасового труда огромного количества программистов. Представьте себе, какой был объем выполненных работ. Кому-то нужно управлять пакетом для разработки программного обеспечения. Для этого сотни программистов должны написать код. Сотрудниками необходимо написать документацию и организовать демонстрацию продуктов. Кому-то нужно бороться за функциональные свойства, чтобы получить финансирование и закончить проект. Кто-то обязан удостовериться, что перевод на немецкий язык выполнен и в нем отсутствуют досадные ошибки, которые занесут вирус на Twitter. Кому-то необходимо написать фактически целое программное обеспечение, которое будет способствовать работе встроенного интерфейса накопителя IDE.

Современные операционные системы представляют собой праздник чудес: скоростное видео, музыкальные плееры, сотни кнопок. Фирма Apple, наверное, является лучшим производителем кнопок из всех, которых можно только представить. Просто экранные клавиши – это видимый результат работы. На сегодняшний день существует 15 стилей экранных кнопок, начиная от NSThickSquareBezelStyle и заканчивая NSSmallSquareBezelStyle.

Свобода. (Типа того. Это просто кнопки). Вещи, которые в свое время требовали затрат труда и заботы – чтобы показать карту, вращать пейзаж в трехмерном измерении, – сегодня можно выполнить с помощью нескольких строк кода.

Когда во время Всемирной Конференции Разработчиков, которая проводится Apple в Сан-Франциско, участники и посетители восторженно наблюдают, как некто в дорогой рубашке навыпуск вещает о «ключевых данных», это и есть суть. На сцене, представляя свои наборы программ, представитель Apple переставляет абстрактные понятия и при этом утверждает: «Посмотрите на описанную нами новую реальность, на то, насколько легко можно сейчас управлять некогда сложными вещами, какими яркими стали те вещи, которые недавно казались тусклыми. Ваша вера в нашу платформу и ваша преданность делу, которому вы посвятили тысячи часов своего времени, не пропали зря». Они говорят об этом с небольшим отклонением вот уже на протяжении 30 лет.

В Xcode вы можете скомпилировать все с помощью одной команды и получить программное обеспечение для тестирования в виде всплывающих строк. Вы можете увидеть созданную вами кнопку. Вам нужно нажать на нее, она ждет не дождется этого момента. Она кричит пронзительным визгливым голосом, как нано катализатор на прецизионном микростанке. Все, что находится внутри компьютера, обращается с мольбой ко всему остальному. Это похоже на рэкет. Вы кликаете мышью, и кнопочный «кот» наконец-то удовлетворен. Теперь компьютер может увеличить уровень громкости, сменить цвет, или вывести иконку «скрепка». Предназначение выполнено и тестирование после прохождения многих циклов завершено.

Когда ваше приложение готово, вы можете продать его в магазине программ. И если пользователям оно понравится, они будут стремиться приобрести еще больше приложений. Виток за витком, который дополняет своего предшественника, деньги накапливаются в сундуках снисходительных гигантов программного обеспечения. Создается некая «Экосистема». Кстати, сегодня значение этого слова девальвировано, особенно, если учитывать, что мы сделали по отношению к реальной экосистеме вокруг нас. Но, когда несколько сотен тысяч людей воспитывают своих детей и создают продукты для 100 миллионов, это слово используется ими для названия своей среды.

6.1 Инфраструктура: Младшая двоюродная сестра Пакета для Разработки Программного Обеспечения

Вполне вероятно что, если вы разрабатываете какую-то программу, особенно для веб-приложений, то вы привязаны к определенной инфраструктуре или платформе (framework). Поскольку Пакет для разработки программного обеспечения служит выражением корпоративной философии, то платформа или инфраструктура более похожа на краткое описание продукта. Хотите сэкономить время? Устали от написания того же старого кода? Хотели бы познакомиться с новыми направлениями? Тогда вы используете инфраструктуру графики для написания приложений с графическим интерфейсом, веб-платформу для разработки веб-приложений, а  также инфраструктуру сетей для создания сетевых серверов. Здесь существует сотни платформ, у каждого языка есть, по крайней мере, одна.

Django является популярной платформой Веб-приложений, которая используется для создания кодов на языке Python. Приложение Instagram было перенесено на нее. Когда вы первый раз начинаете работать с Django, то запускаете команду «startproject,» (начать проект). Платформа создает директорию с несколькими файлами и программными установками внутри. Это ваш каталог с проектами. Сейчас у вас есть доступ к библиотекам и сервисам, которые помогут пополнить и улучшить стандартную библиотеку.

Предположим, что мы все еще создаем наш книжный магазин в стиле Amazon с реляционной базой данных, который мы начали «строить» на предыдущих страницах. С помощью платформы Django мы запускаем команду «startproject». Вы можете попросить  ее запустить приложение, которое называется bookstore (книжный магазин). Затем вы устанавливаете свои модели с помощью команды “set up your models,” а именно, вы определяете, как должны выглядеть ваши данные с использованием идиом Python, которые инфраструктура «переведет» в форму базы данных.

Знімок екрана 2015-10-28 о 02.20.53

А сейчас мы можем создавать каталог книг. (Естественно, что нужно указать дополнительно авторов и тому подобное). Невероятно, однако, благодаря нескольким линиям конфигурации, вы получаете полностью функциональный редактора статей, который работает с использованием интернет-технологий, а именно:

sec3_addbook

Это называется «мнение администратора» и всегда является основной особенностью Django. Вы только начали работать в качестве программиста, но очень скоро после осмысления, ваши пользователи – журналисты, если вы строите платформу для издательства, или испытатели первого варианта программного продукта (альфа-тестировщики), или, может быть, вы сами – можете начать самостоятельно пополнять библиотеку, или брать книги оттуда.

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

Помните моменты, когда нужно было вводить электронные адреса? Если вы пользуетесь платформой Django, то сможете воспользоваться полем электронной почты «EmailField,» и многие из них (адресов) справляются. Тоже самое касается и многих вопросов, связанных с безопасностью, которые возникают при создании веб-сайтов, типичные злоупотребления, которые совершают нечистоплотные люди. Вы вошли и стали участником пула, включающего в себя многие тысячи других программистов, которые совместно пользуются платформой и предлагают улучшения, которые пишут обучающие программы, плагины, используемые для завершения задач, имеющих отношение к паролям, ведению блогов, контролю за спамом, предоставлению календарей, ускорению работы сайта, созданию дискуссионных форумов, а также интегрированию других сервисов. Таким образом, создается определенная архитектура.

Великолепно! Превосходно! А какой побочный эффект? Ну, платформы замыкают вас в свои рамки мышления. Вы можете смотреть на веб-сайт и натренированным взглядом оценить: «Это сайт, созданный на платформе Ruby on Rails».

Платформы оказывают очевидное влияние на тип работы, который может быть выполнен разработчиком. Некоторые полагают, что платформы способны облегчить много вещей, что они превращаются в опору. Очень легко попасть в трудное положение, а затем пытаться заставить платформу выполнять то, что она не хочет. Например, Django – это не тот инструментарий, который можно применить для создания гигантского чат-приложения, вы также не будете конкурировать с Google Docs, используя интерфейс Django для связи с базами данных. Ради этих удобств вы теряете в скорости и способности управлять процессом. Проблема состоит в том, чтобы понять, сколько скорости, контроля и удобств вам необходимо.

Программисты говорят о «предварительной оптимизации» — при этом слишком долго мудрят с кодом, прежде, чем вы поймете, какие могут быть реальные проблемы, — и описывают людей, ломающих себе голову над программированием, как «астронавтов архитектуры». Существует еще одна часто возникающая тенденция, NIH (“not invented here” – изобретено в другом месте).

Мнения по поводу инфраструктур довольно твердые, но не настолько как Пакет для Разработки Программного Обеспечения. Они плотно связаны в пучок, часто пахнут коммерцией и появляются вместе с рекламными глашатаями, особенно, когда представляют интересы Apple или Microsoft. Платформы могут нанести обиду, потому что они упреждают ваши проблемы и применяются тысячами пользователей. Они предполагают, что ваши проблемы — общие и ежедневные, а не особенные и загадочные, которые требуют решения усилиями только гениальной личности. Основой для платформ является чувство разочарования, они обвязаны тесьмой и попадают в интернет вместе с постом блогера. Там они либо выживают, либо нет. Существуют инфраструктуры разработки веб-приложений для каждого основного языка; в списке, который представлен в Википедии, насчитывается почти 40 различных инфраструктур только для языка Java и почти 30 для РНР.

Большинство хороших платформ бесплатны, они созданы для того, чтобы решить проблемы, а также принести славу и влияние своим создателям, а не богатство и контроль. Они распространяются органически. Заинтересованные лица видят видео урок о том, как можно создать блог за несколько минут. Затем они копируют этот материал, убеждают себя, что это легко, и показывают своим друзьям. Веб-сайты активируются, и программисты говорят о том, как быстро они разработали упомянутые сайты. Если вы создаете веб-приложение, то нужно быть глупцом, чтобы сначала не использовать платформу веб-приложений. Существуют крошечные варианты для маньяков-перестраховщиков, которые сфокусированы на URL-маршрутизации, а также массивные, как, например, Django и Rails, которые преследуют цели, намеченные вначале крупными системами, как например, Smalltalk, еще при царе Горохе. Они дают возможность разрабатывать большие коллективные системы, в которых данные будут обрабатываться и совместно использоваться. Возьмите выполненную для вас работу. Не повторяйтесь.

6.2 Что такое отладка?

(Debugging отладка поиск и исправление ошибок в разрабатываемой программе. Когда в начале 1945 г. ЭВМ Mark I был остановлен для ремонта, Грейс Хоппер (Grace Hopper) заметила в одном из реле мотылька, попадание которого, возможно и вызвало сбой. После этого операция восстановления работоспособности стала именоваться ею debugging. Это вполне вероятно, так как выделяемое компьютером тепло привлекает насекомых. – примечание переводчика)

В программировании существует много возможностей, как для создания, так и разрушения программы. Для этого достаточно одного бессистемного символа. Например, вы забыли поставить точку с запятой, или “é” со знаком ударения, однако код не готов к такой особенности – и бабах! Или вы добавляете два знака вместе, но один — это цифра 4, а второй «4» в виде строки, ведь вы можете сказать «4 и 20 черных дроздов испекли в пироге». Для компьютера эти «4 и 20» не имеют цифрового значения.

Такие вещи происходят в действительности, и часть работы состоит в том, чтобы запомнить, что 4 + 20 это 24, а 4 + “20” это “420”. Программирование является отладкой. Это ожидание, что что-нибудь не сработает. Это не то, чем принято хвастаться, люди не раскрывают свою медицинскую историю во время первого свидания. Большинство языков обладают такой конструкцией, чтобы можно было быстро обнаружить изъяны, захватить их в ловушку, исследовать и удалить. Со временем, когда ваши взаимоотношения с языком программирования достигнут расцвета, вы придете к пониманию того, что настоящей характеристикой языка является не ее способность выполнять задачи, а талант сообщить вам, что вышло из строя. Большая часть вашей жизни программиста будет потрачена на то, чтобы определить, что сломано, и если компьютер помогает вам, возможно, вы еще увидите, как ваши дети с азартом играют в футбол.

Когда я начинал заниматься программированием, я ощущал, что каждый раз, когда программа давала сбой, я «выходил из строя». Я чувствовал досаду и отвращение, безысходность и отчаяние, неспособность двигаться вперед. Существует повесть Эллен Аллман, «Сбой» (Ellen Ullman, The Bug), в которой автор описывает страхи и сложности в общении, которые возникают, когда тяжело обнаружить серьезные сбои в программе.

В конце концов, я научился подчиняться. Я погружался в компьютер, чтобы вспомнить математику, которую когда-то учил, а также типы, категории, списки и синтаксис. Иногда сбои вызывали ошибки в сообщениях, иногда из-за них программа «испускала дух» и внезапно исчезала, иногда возникали страшные циклы, которые заполняли память и забивали все ресурсы компьютера настолько, что его нужно было повторно запускать. Это называется переполнение стека (stack overflow). Иногда запрос идет слишком медленно, например, многократный вызов создавал ситуацию, когда стек, будучи невозобновляемым ресурсом, полностью заполняет его и не выдерживает. Отсюда появилось название веб-сайта Stack Overflow, куда заходят программисты, чтобы дать ответы на вопросы и помочь друг другу решить проблемы, связанные со сбоями. Сайт занимает 62 место в мире по количеству посещений, отставая от Craigslist на несколько пунктов.

Произвольно выбранное сообщение из Stack Overflow, чтобы дать вам возможность ощутить аромат программирования:

Angular 1.3 + ui-router + generator-hg-poly embedding nested(?) views not working

(Angular 1,3 + ui-роутер + генератор – гектограмма – поли вложенный (?) изображения не работают)

TheOncomingCode, StackOverflow.com

Предположительно на сайте OncomingCode утверждается, что платформа AngularJS на языке JavaScript и другой части кода называется ui-router (маршрутизатор для интерфейса пользователя). Судя по названию, последний помогает установить маршруты для адресации компонентов интерфейса пользователя – то есть помогает контролировать, каким образом вы просматриваете свои данные.

Но подождите, выясняется, что generator-hg-poly – это фактически generator-ng-poly, то есть… Ух ты. Я просмотрел этот инструментарий и нашел, что он описывает себя, как – соберитесь с духом – «генератор Yeoman для модульных приложений AngularJS с Gulp и опционной поддержкой Polymer». Черта с два! Однако знаете что? Назвался груздем, полезай в кузов. Давайте сделаем.

Поиск Yeoman дал следующий ответ. Это инструментарий для создания временных платформ (scaffolding tool), что означает – он создает маленькие папки для ваших веб-приложений, которые помогают вам начать разработку программ. Полезная вещь…

Теперь мы знаем, что означает Angular. Это инфраструктура/платформа…

Gulp, как утверждает веб-сайт «автоматизирует и улучшит ваш технологический процесс.» Вы можете постигать внутренним чутьем, что это инструментарий, который помогает вам создать программное обеспечение. Тем или иным образом. Вы никогда этого не узнаете из оранжево-розового фона сайта, а иногда вы просто так, так устаете…

Polymer – это библиотека «Веб-компонентов». Это значит, что она обеспечить вас маленькими кодовыми компонентами многократного пользования, которые вы можете применить на своих веб-страницах – выдвижные ящики, меню с вытесняемой нижней строкой, кнопки и так далее.

Что нам сейчас известно, так это то, что комбинация Angular, ui-router, Yeoman, Gulp, и Polymer каким-то образом не работает для TheOncomingCode. Все они являются инструментами для упрощения процедуры написания кода. Однако все они вносят свои собственные сложности. Упомянутый ниже пользователь пытается заставить веб-браузер выполнять задачи в JavaScript, и он заартачился.

Кто-то зашел на форум, чтобы ответить на вопрос. «Чтобы можно было использовать структуру заголовка в исходном состоянии», написал пользователь Stack Overflow Мэтт Тестер, «их необходимо вложить (сцепить), учитывая работу системы регистрации». Итак. Вот это другой разговор. Вот так решается проблема.

В настоящий момент JavaScript развивается очень быстро. Многое из того, что вы знаете сегодня, через шесть месяцев будет бесполезным. Каждый доставшийся в нелегкой борьбе любопытный, но бесполезный факт или домысел об абсолютно лучшем и наиболее принципиальном пути применения языка будет мусором со зловонным запахом в конце этого года. И некий хныкающий бородатый «мальчик» будет искоса смотреть на вас своим тусклым, заумным взглядом и неуклюже мямлить: «Ну да, нет, ух ты, у вас много Gulp и Angular, но я предполагаю, что вы не использовали Fleejob или Grimmex с расширениями Snurt? (Глубоко вздыхает). Я не уверен, что вам понравится здесь работать». В любом случае, это вопрос для Stack Overflow.

6.3 Ничего нового

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

О подобных вещах не говорят вслух, это не та фирма. О них можно прочитать по глазам, используя язык пожимания плечами в коридорах, по порядку адресов в электронной почте и по полю копии. Вы включаете свою антенну и слышите такие слова, как «пустой труд» и «поздно», или фразы типа «не логично с точки зрения функциональности». Также много слов касательно соответствия и управления.

Вначале своей карьеры, вы, наверное, стали бы паниковать. Вместо этого, вы ощущаете чувство спокойствия. Вы приглашаете в свой офис Генерального технического директора и Человека в темно-сером пиджаке, как только они появляются в ближайшей окрестности. Они заходят с застенчивым видом. Генеральный технический директор выглядит напряженно, жестко расправив плечи. На лице человека в темно-сером пиджаке скромность смешалась со злостью. «Люди верят,» вы говорите, указывая пальцем на верх, где расположено руководство компании, «что пришло время обрезать наши затраты и закрыть проект».

6.4 Как работает система тестирования?

Если вы слоняетесь возле помещений, где работают программисты, то наверняка слышали, как они обсуждают вопросы тестирования – написание тестов, прохождение тестов. Некоторые из них даже не приступают к созданию программы, пока не напишут перечень тестов, которые должен пройти код, который, как они надеются, разработают. Это называется «Разработка через тестирование».

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

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

Одним из самых лучших в мире тестируемых компонентов кода является SQLite, база данных, о которой уже ранее упоминалось и которая, наверное, загружена в вашем смартфоне. Она была разработана Ричардом Хиппом, который работал над ней на протяжении 15 лет. Она полностью открытая, полностью бесплатная и прошла 33 402 теста. Это один из наиболее широко используемых видов программного обеспечения и к тому же один из наиболее уважаемых программных продуктов.

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

6.5 А теперь несколько слов о красивом

По моему мнению, автоматизированное управление версиями программных документов – это один из самых прекрасных моментов в программировании. Это один из даров культуры создания кода миру. Управление версиями – это не режим отслеживания исправлений Microsoft Word, похожее на позорное уродство, которое способно даже мощный компьютер заставить спотыкаться. Нет, управление версиями – это абсолютно иная вещь.

Что, если бы я тебе сказал…

Продолжай…

… что ты мог бы вести реестр всех изменений, которые вносятся во многие документы, что входят в твою базу исходных текстов…

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

… и зарегистрировать того, кто это сделал с точностью до минуты, в виде постоянной записи…

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

… и любой человек может проверять каждое изменение, получив абсолютно прозрачный доступ…

Каждый может быть в курсе всех изменений и понимать, каким образом развивается код и каждое изменение? 

… и ты можешь связать все изменения в одно целое и превратить их в ответвления, и любой может создавать эти ответвления по мере необходимости без нарушения целостности других ветвей…

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

… и затем ты сможешь «привить» законченную ветвь назад к основному стволу кода, исследуя и отлаживая несоответствия по мере продвижения…

О, Боже, это похоже на то, что ты читаешь мои мысли. Даже если мой код представляет собой огромный набор хрупких взаимозависимых компонентов, моя команда может работать на собственными ветвями, а затем, поскольку я потратил время на создание мощного тестового комплекта, то мы можем в подходящее время соединить сделанные ими изменения и провести автоматизированные испытания, чтобы убедиться, что все функционирует нормально. 

… и каждый может иметь архив со всеми изменениями, которые были внесены в код, даже, несмотря на то, что базе исходных текстов несколько десятков лет…

Замолчи, замолчи, и возьми все, зазвучал отдаленный цифровой голос, бери все! Возьми меня!

… и программу можно полностью и абсолютно бесплатно скачать и по умолчанию исходный код можно распространять по всему миру!

(Затихает.)

Именно поэтому все так волнуются о веб-сервисе GitHub. Вам нужно зайти на GitHub, обязательно посетите. Я рекомендую вам пошарить по нему и просмотреть тысячи репозиториев, прочитать некоторые файлы с необходимой для пользователя информацией под названием «Прочитай меня» (Read Me). И вам также нужно будет заглянуть в код, а затем на commit (фиксация/подтверждение транзакции). Commit – это момент действия, который зафиксирован и сохранен. Вы можете сравнивать их и увидеть разницу, увидеть, что было внесено в виде дополнения, а что удалено. Увидеть, что вы способны постичь и понять. Посмотрите на прилагаемый скриншот:

sec3_django3

Прежде всего, мы проверим репозиторий Django. Это, фактический, опробованный на практике код, который запускает веб-платформу Django. За ним наблюдают 668 лиц, 14 325 лиц считают его своим любимым, а также имеется 5 692 разветвления. Это значит, что люди скопировали данный код в собственный репозиторий с намерением внести дополнения или изменения. Эти цифры представляют заинтересованных пользователей. Вполне вероятно, что есть еще сотни тысяч, которые загрузили этот код для того, чтобы активно использовать его.

Мы видим, что некий пользователь под ником claudep зарегистрировал код. Он сделал это пять часов назад, добавил «commit message» (сообщение о завершении транзакции), в которой было  написано «Исправлено №24826 – Учтено для максимальной длинны названия файла в зависимости от файловой системы». Он работает с файлом под названием tests.py, это означает, что данный конкретный новый код (обозначенный зеленым цветом с префиксом «+» в начале каждой строки) является, вероятно, или тестовым кодом, или кодом, который используется для поддержки тестов. Благодаря пользователю claudep этот код сейчас лучше, чем он был шесть часов назад.

Перед вами опыт использования программы управления версиями, которая представляет в себе сочетание службы подачи новостей и системы резервного копирования. Веб-сервис GitHub не изобрел программу управления версиями. Он взял программу под  названием git, разработанную Линусом Торвальдом, главным архитектором Linux, и начал дополнять его инструментарием и сервисами. Программа git работает таким образом, что вы можете скопировать все изменение, которые были внесены в код, с помощью одной команды:

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

Знімок екрана 2015-10-28 о 02.27.01

Что добавляет файлы с внесенными вами изменениями; а затем:

Знімок екрана 2015-10-28 о 02.29.09

Что просит вас ввести commit message (сообщение о завершении транзакции) с описанием выполненной работы; а затем:

Знімок екрана 2015-10-28 о 02.29.23

Что вызовет ошибку, потому что кто вы такой, чтобы войти и начать перемещать код в узловом репозитории? Но если у вас есть разрешение, тогда вы сможете внести свои изменения в мастер-ответвление репозитория программы git, которая находится на GitHub.

Знімок екрана 2015-10-28 о 02.29.36

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

Иногда изменения нагромождаются таким образом, что вы смотрите на них и про себя говорите: «Это хорошо. Мы готовы выдать миру новый код». Может быть, вы делаете это каждые две недели, может быть раз в год. Может быть, как Facebook, вы делаете это все время.

Если ваше программное обеспечение было в Версии 2, вы могли бы «связать» все изменения и поставить соответствующую метку (тэг) на коде. Трепещи, Версия 3. Изменение приходит через несколько секунд от кодирующего устройства, расположенного на огромном расстоянии. Вы закончили работу с Версией 3, которая теперь вошла в разряд документа постоянного хранения. Вы можете исправить некоторые ошибки и назвать этот вариант Версией 3.1. Вы можете добавить еще одну функцию и дать новое название — Версия 4.

Такие инструменты, как программа git, позволяют программистам использовать универсальный язык. «Вы зарегистрировали его?», спрашивают они. «Какой это был номер подтверждения?». «Это должен был быть 2.4, но мы разогнали до 2.5.» Поскольку каждое подтверждение получает произвольный уникальный идентификатор, вы можете точно определить это подтверждение в пространстве и во времени, а также уверенно ориентироваться в учетной записи изменений кода так, как вы вряд ли были уверены в чем-либо другом.

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

Ваш старательный «децентрализованный» коллектив часто пишет новый код, который запускается на серверах. И здесь возникает проблема. Как лучше всего установить этот код на эти 50 компьютеров? Кликнуть и перетащить с помощью мыши? О, Боже, только не это. Вы что, животное? Вы берете непрерывный интеграционный сервер и устанавливаете плагины, а затем роботы обслуживают вас.

Программисты почти не говорят о коде. Они болтают о данных. Они непринужденно беседуют о требованиях и интересных подходах и постоянно дискутируют о применении. Что звучит логично, поскольку это является целью их работы – извлечь код из мозга через тестирование и распространить в мировом масштабе с помощью интернета, приложения или других форм. Программисты, особенно хорошие, хотят идти дальше и решать следующие проблемы, которые их сильно волнуют. Существует огромное количество принципов и методик, буквально тысячи, для развертывания кода. Например:

Вся работа, связанная с программированием, должна проходить в ответвлениях. Когда работа выполнена, мы сведем отдельные части в одно целое на основной ветви и проведем тестирование.

Затем, перенесем код на GitHub. С этой точки будет запущено автоматическое обслуживание и затем на каждом из 50 компьютеров эти «сервисы» проверят код и установят его поверх предыдущей версии. Затем остановят веб-серверы, после чего снова запустят их, чтобы код смог загрузиться и начать работать.

Видите, испытания и управление версиями служат триггером для «поставки» кода. Если вы можете следить за процессом, то сможете осуществлять выпуск программного обеспечения несколько раз в день, что в период «оберточного/упаковочного» программного обеспечения (доступ к ПО предоставляется пользователю путем изложения типовых условий на передаваемых экземплярах: вскрыв упаковку, покупатель соглашается с условиями лицензии – примечание переводчика) является непредусмотрительным шагом. (Часто «билды» собираются в ночное время с помощью крупных серверов сборки приложений – и пришедший на следующее утро получает готовый результат). Но сейчас, когда это программное обеспечение можно распространять через Сеть, или с помощью приложений, возникает вопрос – а зачем ждать? Почему не выпускать программное обеспечение непрерывно каждый день, когда у вас уже есть готовый продукт?

7. Триумф руководящих кадров среднего звена

«Мне кажется, что эта компания сделает все возможное, чтобы затормозить финальный релиз», говорит Человек в темно-сером пиджаке, как только Генеральный технический директор вздрагивает. Это хорошо, вы ожидали, что это будет напряженная встреча. «Во-первых, мне нужно было пропустить все через команду безопасности, что заняло пять месяцев», утверждает Человек, «а затем я потратил недели, чтобы получить рабочую среду разработки, поэтому мои разработчики бегали в Starbucks, чтобы проверять свой код…»

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

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

«Мне сказали, что я смогу, что я должен сделать это правильно», заметил Человек. «Чтобы это не нужно было делать снова через полтора года».

Одним из уроков, который Человек в темно-сером пиджаке пытался донести до вашего сознания, послание, которое важнее для него самого, — это то, что код никогда не может быть создан; после передачи новой платформы со всеми ее взаимосвязанными компонентами, он и его команда будут продолжать работать до конца дней своих. Будут новые сбои, новые свойства, новые потребности. Такие вещи являются побочными эффектами любого роста, а данная платформа, и он настаивает на этом, разработана для масштабирования.

Многие разработчики не могут понять одного простого факта. То, что они воспринимают, как статичное, малоподвижное, изнурительное – среда в которой они работают – в действительности не является статичным. Малоподвижное – да, но это как линкор, который выходит из порта. Разработчики кода не видят, и вы можете убедиться в этом сами, что консервативный мир свободного предпринимательства, который наводит на них страх, не является последствием апатии, а скорее разрядки.

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

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

«Я просто хочу закончить», заявляет Человек. Этим он хочет сказать: «Я просто хочу делать то, что мне приказано». Однако большинство сотрудников воспринимает это, как «Я просто хочу уничтожить все, к чему я прикасаюсь. Потому что я – демон Кали, разрушитель передовых методов работы».

Вы соглашаетесь: «Хорошо, я это понимаю. Сделайте для меня следующее». Вы перемещаете свой взгляд на Генерального технического директора, и она утвердительно кивает. «Во-первых, больше никаких конференций».

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

Но вы вникаете в суть, посещаете совещания программистов. Это похоже на смартфон, который постоянно совершенствуется, и это хорошо.

Итак, вы продолжаете: «Вы должны позволить мне помочь с наблюдением. Мне нужно, чтобы вы присутствовали здесь каждый день, проходили по комнатам с открытой улыбкой на лице, приветствуя всех присутствующих. У вас сонливый вид. И тем не менее. Во-вторых, мне нужна дата сдачи программы, реальная дата».

В ответ звучит: «В следующем месяце».

Генеральный технический директор называет его имя и кивает головой. Вы продолжаете: «Мы будем над этим работать. С этого момента никаких конференций. И не говорите о рывках, не говорите об этапах и рубежах работы. Говорите с людьми таким образом, будто эта платформа уже существует и работает на протяжении нескольких месяцев. Спросите их, обновили ли они свои списки продуктов».

Время истекло. Генеральный технический директор спрашивает Человека в темно-сером пиджаке: «Все понятно?» «Да», отвечает Человек. Тот факт, что он не задает больше никаких вопросов, означает, что он должен был научиться чему-то. Он выполнил большой объем работ, и сейчас пришло время для него стать частью корпорации и симулировать рабочий процесс.

«Вы можете выбрать язык?», спрашиваете вы. Это для вас. «Мы уже выбрали», отвечает Человек. «Мы пользуемся Node.js. на платформе Express.» «Прекрасно», реагируете вы. «Мне не терпится увидеть код».

7.1 Как вы выбираете язык программирования?

Будьте осторожны с аргументами, которые имеют отношение к скорости программирования. При всех равных составляющих, чем быстрее, тем лучше. Однако ничто и никогда не бывает равным. Вам нужна скорость, которая позволяет создать веб-сайт и быстро запустить его? Или скорость, которая позволяет вращать несколько тысяч многоугольников в режиме реального времени и трехмерном измерении? Вам необходимо преобразовать 10 000 страниц PDF в текстовый формат за один час? Или за один раз 10 миллионов страниц PDF в текст? Это совершенно разные задачи. Что нам необходимо сделать, сколько раз это необходимо выполнить, и какой существующий код нужно использовать, чтобы с его помощью мы могли бы выполнить эту задачу столько раз, сколько необходимо? Задайте себе эти вопросы.

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

Предположим, что ваши программисты разрабатывают огромный веб-сайт, обслуживающий 5 миллионов  посетителей, каждый из которых посещает сайт пять раз в месяц. Будете ли вы использовать язык Python, который работает медленно, или Go, работающий быстрее, или Node.js, расположенный где-то посредине между ними? Интересный вопрос. Двадцать пять миллионов посещений – это не такая уже и большая проблема, если только они не привлекают некое волшебство, или сложные запросы в адрес базы данных, которые на каждой странице абсолютно разные (хорошим примером может служить Facebook).

В настоящий момент эта цифра не банальна. Если для создания страницы нужна одна минута, то вы потратите 48 лет для создания сайта, то есть скорость будет слишком маленькой. Если одна секунда, то все равно процесс будет медленным, поскольку в месяце всего лишь 2,6 миллиона секунд. Поэтому вам необходимо выяснить, что необходимо сделать, чтобы создать 10 страниц за одну секунду. Вероятно, вам понадобится не один компьютер, небольшой излишек рабочей силы и хороший сервер. Естественно, что нужно потратить время на планирование и саму работу, и это все можно выполнить на любом языке.

Что будет, если вы планируете обслуживать всего лишь несколько сотен тысяч страниц в месяц? Тогда вы можете устроить себе маленькую передышку. Вам не нужно слишком много инженеров для создания системной архитектуры. Вам нужно создать план действий, но в общих чертах вы сможете обойтись чтением блогов и пройти чужим путем. Будем откровенными, вы можете даже и схалявничать. И снова, здесь подойдет любой язык.

А что,  если вы захотите включить живой чат на этих страницах и предполагаете, что тысячи посетителей одновременно воспользуются интерактивной перепиской? О, тогда вы начнете погружать свои руки в некогда заброшенный поток. Но это именно та проблема,  для решения которой был разработан язык Go. Это инструментарий для создания доступных серверов, в которых применяется максимально возможное количество компьютерных процессоров. Он имеет и другие  функции, но это те задачи, в которых Go действительно сияет. Фактически Node.js также хорошо работает с подобного рода сервером, и у Clojure больше емкости. Ах да, Java тоже подойдет. Если у вас возникнет необходимость, то вы сможете воспользоваться даже РНР.

Вот почему выбор языка сопряжен с определенными трудностями. Многие вам могут рассказать, что вы должны использовать максимум возможностей, чтобы выполнить все, что вы задумали. Поэтому вам необходимо выяснить для себя, какой у вас коллектив, какая платформа вам больше по душе, где люди могут быть наиболее продуктивными, чтобы они оставались вместе до завершения проекта. Это тяжелая задача, поэтому большинство руководителей проектов выдвигают общий знаменатель — Java, PHP – поскольку, когда специалисты уходят, с них можно выжать максимум. И это правильно, так как  основная масса технологических проектов не нуждаются в оригинальных исследованиях, или фантастических открытиях. Все языки, о которых мы ведем речь, работают прекрасно и для них есть отличные программисты.

Вместе с тем, выбор основного языка программирования является самым важным сигналом от технологической компании. Скажите мне, что ваша программа написана с помощью Java, и я буду полагать, что вы или серьезная фирма, или неинтересная. Применение языка Ruby будет означать, что вы заинтересованы в быстром выполнении проекта. Clojure будет означать, что вы умны. С помощью Python, и я вам уже доверяю косвенным образом. РНР, и мы вместе вздохнем. В C++ или C, и я смиренно кивну головой. На C#, и я улыбнусь и предположу, что у нас нет ничего общего. Fortran? Я попрошу вас предъявить допуск к секретной информации. Эти языки содержат в себе целые цивилизации.

Вы можете определить, насколько хорошо составлен код, с противоположного конца комнаты. Форма кода с расстояния шести метров невероятно информативная. Чистый код является идиоматичным (присущим только определенному языку), самым кратким и очевидным, даже если он не строго задокументирован. Простой и удобный для пользования. Как отмечено в фундаментальном учебнике по программированию, который на протяжении многих лет использовался преподавателями в Массачусетском технологическом институте «Структура и Интерпретация Компьютерных Программ» (Structure and Interpretation of Computer Programs): «Компьютерный язык – это не только способ заставить компьютер выполнять операции… Это принципиально новое формальное средство для выражения идей, имеющих отношение к методологии. Таким образом, программы должны создаваться в первую очередь для людей, чтобы они их читали, и только попутно для компьютеров, чтобы те их выполняли». Великолепная программа – это послание от того, кем вы являетесь сегодня, к тому, кем вы будете в будущем, или личности, которая станет наследником вашего кода. Благородный и гуманистический документ. Конечно, все это прекрасно, но нужно, чтобы оно еще и работало.

7.2 Добро пожаловать в Скрам

Однажды вы заходите в «шарашку», где содержатся программисты. Они начинают работать в 10 часов, и некоторые уже пьют кофе. Большинство из них – мужчины, хотя есть и несколько женщин. Они прохаживаются по комнате, обмениваются информацией о том, что они делали вчера, и какие у них планы на сегодня. Интересуются, есть ли у собеседников блокировки (в программировании «блокировкой» называют ожидание программой данных для обработки, в основном это связано с работой API). Основная масса уже работает. Есть и новенькие – один из Бостона, второй из Венгрии, оба на связи, но говорят с сильным акцентом. Рассказывают аналогичные истории, как и все остальные.

«Вчера я работал над удалением истории использования в учетной записи», говорит бостонец. «Номер 265. Сегодня я пишу тесты составных частей для кода удаления аккаунта. Я не заблокирован. Предлагаю, чтобы Иштван  перешел к следующей теме». На линии включается звук, и голос с жестким венгерским акцентом продолжает: «Так, вчера я работал над инструментарием администратора каталога для загрузки программного продукта. Я закончил работу над элементом загрузки изображений. Сегодня я тоже буду создавать тесты составных частей. Я не заблокирован». Человек в темно-сером пиджаке спрашивает: «Иштван, ты уже обновил JIRA?» (коммерческий сервис, который выполняет функцию официального регистратора проекта). Странно слышать, что те элементы, которые вы утвердили в качестве элементов строки, обсуждаются так, как будто они являются реальными и фактическими вещами. Однако, приятно.

7.3 Как руководить работой программистов

На странице Википедии «Процесс  разработки программного обеспечения» размещен перечень ссылок на следующие страницы “TDD BDD FDD DDD MDD”—“test-driven development” (разработка через тестирование), “behavior-driven development” (разработка через реализацию поведения), “feature-driven develop­ment” (разработка, управляемая характеристиками результата), “domain-driven design” (проектирование, ориентированное на предметную область), и “model-driven development” (разработка на базе моделей). У каждой есть свои сторонники и критики. Я включил этот перечень для вашего общего ознакомления. Если вы хотите получить более детальную информацию о методологии управления, налетайте!

Управление работой программистов – это из ряда вон выходящая дисциплина. Существуют субдисциплины, которые изучают, как общаются между собой разработчики кодов. Самая известная из них – это «Гибкая методология программирования» (Agile methodology). Она призывает к регулярной координации действий программистов, обеспечивая набор обрядов и норм, которые должны выполняться разработчиками, чтобы их программы работали совместно с программами других коллег.

В Agile Manifesto (да, в манифесте) сказано следующее:

▹ Люди и взаимодействие превыше процессов и инструментов

▹ Рабочее программное обеспечение превыше всеобъемлющей документации

▹ Сотрудничество с клиентом превыше обсуждения контрактных условий

▹ Реагирование на изменения превыше выполнения плана

Под этим документом подписалось 17 человек. Существует много вариантов Манифеста. Я пережил тяжелые встречи в своей жизни, когда сидел между двумя группами, и одна из них объясняла со всеми подробностями, почему Agile с системой организации производства и материально технического снабжения Kanban лучше, чем Agile со Scrum. Вы можете прочувствовать запах денежных знаков.

Вот перед вами методология Agile, каким я видел его в действии: Вы разбиваете свой программный продукт на несколько простых для понимания пользовательских историй, о том, кому что нужно. Вы заносите эти истории в  систему отслеживания выпусков программного обеспечения, часто это коммерческий продукт типа JIRA. Вы разделяете работу на спринты за неделю, две недели, или любой промежуток времени, который соответствует вашему стилю управления, а затем даете спринту название и цель (внедрить поиск, регистрация пользователя), а затем программисты берут истории для их дальнейшего срабатывания, и за работу.

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

Это идеальный случай. Если все хорошо сделать, то у вас отпадет всякие волшебные мысли на тему: «Все это будет функционировать, когда мы все сделаем и свяжем вместе». У него есть свои критики, и, как мне кажется столько же ответвлений (Scrum, Kanban, и “Agile with Discipline”), что и у протестантизма.

Программисты всю жизнь в поисках оригинального и надежного решения проблемы, и, что хуже всего, они полагали, что нашли его. Вот почему Фредерик Брукс, самый знаменитый из ранних методистов программного обеспечения, написал статью под названием: «Серебряной пули нет – Иммане́нтность и Акциденция в Разработке Программного Обеспечения (No Silver Bullet — Essence and Accident in Software Engineering)». Он написал ее  в 1986 году и очень тогда надеялся, что объектно-ориентированное программирование поможет исправить ситуацию.

7.4 «Мы собираемся сделать релиз»

В офис входит Человек в темно-сером пиджаке. В руках у него большая бутылка и ноутбук. Выглядит он невыспавшимся, о чем вы ему с улыбкой говорите.

«Мы должны сделать релиз», говорит он. «Увязли немного прошлой ночью»

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

Новый веб-сайт выглядит  простым и обыденным. Квадраты налетают на квадраты. Каталог и пункты в каталоге выведены на дисплей, однако изображений нет. В тексте полно странных символов и необычных ошибок. Продукты с названием «фальшивый продукт», «ненастоящий продукт» и «Я ненавижу все продукты».

Здесь отсутствуют «похожие вещи» для покупки, хотя это очень важная деталь, которая является одним из основных источников дохода на данном сайте. Вы подавляете возникший вопрос. Понятно, что этот пункт будет внесен.

Однако здесь предусмотрена возможность войти в систему с помощью имени пользователя и пароля. Человек в темно-сером пиджаке оказал вам услугу, создав учетную запись. Как он утверждает, вы – первый человек нетехнического склада ума, который будет тестировать сайт.

Вы спрашиваете: «Это настоящее?» «Да, это программное обеспечение. Оно взаимодействует с базой данных. Именно это окончательный вариант».

«Взаимодействует ли он с отделом по работе с клиентами?» — спрашиваете вы.

Человек смотрит искоса. Это продолжается секунду, а затем следует ответ: «В июле сделаем».

Мой Бог, новый срок. Вы вычеркиваете один месяц. По крайней мере, это будет служить окончанием предусмотренного срока сдачи проекта.

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

«Так это настоящий, фактический веб-сайт».

«Да» он отвечает, делая маленький глоток из бутылки со сброженным напитком, приобретенным в магазине диетических продуктов, и этикеткой с рисунком, напоминающим символы буддизма. На стикере указана цена — “$3.99”. Он продолжает: «Теперь у нас следующий рывок. Мы переносим окончание работ на июль, и срок сдачи – середина августа».

У этого человека усталый вид, но с чувством собственного достоинства. Данные на дисплее – результаты деятельности его коллектива, участники которого использовали для этого хороший и современный инструментарий. Это их мастерство, которое доставляет им удовольствие. Человек в темно-сером пиджаке дал им возможность выполнить свою работу. В заключение он сказал: «Мы собираемся сделать релиз».

Они будут проводить стоячие Scrum-совещания (в разговоре просто “stand-up”), после чего перейдут в интегрированную среду разработки программ и будут писать язык JavaScript, который предназначен для выполнения на сервере, и JavaScript, предназначенный для работы со стороны клиента. Затем они проведут несколько испытаний и зарегистрируют свой код в репозитории исходного кода. Сервер непрерывной интеграции (Continuous Integration) осуществит тестирование и проверки, и если все пойдет хорошо, он развернет код в том или ином «облаке». Они настаивают, что они будут делать непрерывные выпуски каждый день.

Затем начнутся отчеты. Отчеты о доходах, аналитические отчеты, перечни новых рынков для захвата, все формы данных о новых клиентах, которые вы будете дробить на части и распределять. В этом будет заключаться ваша роль, как владельца глобальной базы данных намерений клиента. Сначала тысячи, затем миллионы новых фактов, которые смогут помочь компании спланировать циклы разработки и совершенствование продукции, а также товарооборота. Отличная вещь! И вы надеетесь, что новый сайт сможет генерировать больше доходов, будучи быстрее, лучше, со своим API и доступным для интернета, мобильного интернета и многочисленных программ. Вы приняли решение прекратить поддержку платформы BlackBerry. Это жгучий вопрос, но у вас дома в ящике стола этих смартфонов BlackBerry три штуки, а в кармане ни одного. Жизнь идет вперед.

Когда сайт запущен, вы купите торт кодерам и пошлете их на конференцию по JavaScript, на какую они пожелают. Вы усвоили, что единственная подходящая награда для тех, кто пишет JavaScript, — это больше JavaScript. Человек в темно-сером пиджаке получит свой бонус. Генеральный коммерческий директор также рассматривает возможность задействовать его в новых проектах. Вам нравится такая руководительница. Она стала в некотором роде вашим другом.

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

7.5  Нужно ли нам учиться создавать код?

Я общался с некоторыми своими друзьями, которым уже по 40 лет, и которые проработали всю свою сознательную жизнь в технологической сфере. Я выражал им свое недовольство: «Я был наставником для нескольких миллениалов, и Боже мой. Вся работа только по контракту. И никаких предложений с медицинской страховкой. А у них столько долгов». Они посмотрели на меня с недоумением, и затем один из них сказал: «Этого бы не было, если бы они умели создавать код».

Вы, наверное, создаете коды и делаете это в Excel или таблицах Google. Вы запускаете процессы в определенной последовательности, или выполняете механическую работу, имеющую отношение к поиску и замене символов в большом документе.

Программирование, как карьера может привести к тому, что вы займете достойное место в ячейке общества, которая называется «средний класс». Если вы склонны к такой работе, и она вам нравится, тогда это хороший вариант для плодотворного времяпровождения. А если вас окружают хорошие люди, тогда это сплошное удовольствие – даже у «сухарей» есть чему поучиться. Конечно, это имеет место везде, где работают умные люди. Если ситуация паршивая, то вы, наверное, сможете быстрее найти работу, чем, скажем, писатель или журналист.

Данная отрасль переживает частые взлеты и падения, поэтому вряд ли кто-то может сказать, что произойдет через следующие 10 – 20 лет. iPhone и мобильные устройства создали эпоху технического возрождения для тех, кто программирует языки низкого уровня, как, например, Objective-C, люди, которые беспокоятся о памяти компьютера. Возможно, Интернет Вещей превратит все в датчик. (Вы уже бродите по Диснейленду с браслетом, и датчик отслеживает ваше местонахождение. Вся территория находится в компьютере). Для этого понадобится мышление более низкого уровня. А затем придет черед создавать веб-сайты, писать приложения, и т.д. и т.п.

Вполне вероятно, что работа будет. Однако, это глобальная индустрия, а в Индии проживают тысячи специалистов с дипломами технических вузов и учеными степенями. Некоторые из них длительное время работали в Microsoft, Google и IBM. Те же технологии, которые превратили программирование в огромную суперструктуру, охватывающую весь мир, дали толчок к созданию на ее основе идеальной мировой промышленности. И нет причины, кроме предвзятого мнения, думать, что Мумбай или Сеул не способны создавать крупные сложные комплексы такого же уровня, что и аналоги из Пало Альто или Сиэтла.

Вы должны научиться программировать, потому что новая экономика такая же иррациональная, странная и мучительная, как и предыдущая. Книги и песни в настоящий момент существуют в виде строк баз данных, а фильмы создаются с помощью мощных процессоров, а не проходящего сквозь линзу луча света. Возможно, обучение кодированию поможет вам найти волшебное кольцо — декодер для будущего. Изменение – это та же оптимизация, но только другими словами. Наборы средств для разработки программного обеспечения представляют собой культуру кодирования и воспроизводимы для всего поколения специалистов. Они (наборы средств) воспринимаются также восторженно, как альбомы Beatles десятки лет тому назад. Марк Андрессен, интеллектуал социальной сети Twitter, который помешан на кодировании, а также предприниматель, любящий рисковать, как-то написал, что программное обеспечение съедает мир. Если это правда, то вы должны, по крайней мере знать, что является причиной голода.

Я – именно тот человек в темно-сером пиджаке, который привносит «цифру» туда, где она не приветствуется, и который уверен, что его вариант лучший. Я потратил много времени, чтобы понять, такой подход нежелательный – почему исполнительному директору, редактору или библиотекарю может быть неприятно слушать о том, что его вселенная перевернется потому, что кое-кто держит новую игрушку в кармане. Я не прячу игрушку в карман кого бы то ни было, и вы не должны казнить вестника. Но вестники тоже бывают не без греха.

За исключением серьезных болезней и редких выездов на природу, я ежедневно пользуюсь компьютером на протяжении 28 лет. Я изучаю мир с помощью программного обеспечения. Я научился издательскому делу, используя настольную редакционно-издательскую систему QuarkXPress, а искусство и цвет я изучил с помощью программы Deluxe Paint. Программное обеспечение помогло мне выучить математику и основы статистики. Оно научило меня, как рассчитать расстояние по дуге большого круга, оценивая расстояние между двумя точками на Земле. Я изучил интернет, создавая веб-страницы, а музыку я познал через MIDI. И больше всего, программное обеспечение научило меня программному обеспечению.

Мне нравятся дешевые старые компьютеры больше, чем новые, и мой ноутбук издает скрип, когда я его открываю. Мой дом заполнен книгами и материальными нецифровыми вещами. Однако, первая мысль, которая возникает у меня, когда я должен выполнить задание личного плана, или по работе, это — какой код я могу использовать? Какое программное обеспечение научит меня тому, что я должен знать? Когда я хочу что-то узнать, а соответствующее программное обеспечение отсутствует, вакуум раздражает меня – почему никто этим не занимается?

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

Код разделяет на атомы целые категории существования, которые ранее казались целостными системами. Квалифицированные практики используют подобную способность «взрывчатого вещества» для получения максимальной выгоды. Книжные магазины сегодня существуют в противовес Amazon, а появление электронной книги на Amazon является точкой отсчета для всего мира. Со своей стороны Amazon является не столько продавцом книг, сколько набором задач оптимизации, с которыми сталкиваются системы продаж в цифровом и физическом виде. Microsoft Office определил, как надо работать, затопив весь мир PowerPoint. Услуга вызова такси или частного водителя с помощью мобильного приложения Uber добивается переделать транспортные услуги согласно своему видению. А тысячи интернет-компаний существуют со звездами в глазах и лихорадочным желанием разрушать, разрушать, разрушать!

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

sec3_paulПол Форд (Paul Ford), журналист и программист, проживающий в городе Бруклин, штат Нью-Йорк. Он является партнером-учредителем фирмы Postlight в городе Нью-Йорк, которая занимается созданием интернет-платформ и разработкой интерактивных продуктов. Он пишет книгу очерков о веб-страницах, которое издательство Farrar, Straus and Giroux выпустит в 2016 году. Его статья “The Surprising Sophistication of Twitter,” («Удивительная утонченность Твиттера») была опубликована в номере Bloomberg Businessweek от 7 ноября 2013 года. Электронный адрес ford@ftrain.com. Twitter: @ftrain. GitHub: ftrain. Статья снабжена комментариями и внесенными исправлениями. Все вопросы присылайте на GitHub.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: