Xcode 3.1 - часть I (Настоящее).

Наверное, со стороны Apple это было ошибкой: сразу же, в один день июля, будто нет, хотя бы в том же самом июле, других дней, выпустить в свет столько всего, что разбегаются глаза. iPhone 3G, iPhone OS 2.0, MobileMe, iPhone SDK 1.0, Xcode 3.1...

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

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

Это выше моего понимания. Зато я знаю, что среди всех этих новшеств самое-самое... Вы можете думать иначе, но по моему, интереснее всего новая версия инструментария разработчика, Xcode 3.1. Это трижды необычная версия.

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

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

Во-вторых, впервые за 18 лет, в дополнение к штатному набору компиляторов GCC, в Xcode 3.1 предлагается еще и LLVM-GCC4.2, принципиально новая разработка в рамках новой компиляторной инфраструктуры с открытым исходным кодом, о которой я недавно писал. Это только начало нового поворота - и оно радует.

В-третьих, и это самое главное и важное: из всех версий ProjectBuilder, Project Builder и Xcode, с которыми мне приходилось иметь дело, нынешняя - самая чистая и отлаженная. Это просто какой-то совершенно другой Xcode!

1. Питер Брук, наш мифический человеко-друг

Тот, кто всегда все делает абсолютно правильно, может бросить в инженеров Apple Developer Tools Group (DTG) увесистый округлый булыжник. До сих пор, год за годом, каждый релиз инструментария, в нагрузку к десяткам новых возможностей, нес в себе сотни новых проблем. Как если бы эта группа, работая в том же самом купертинском кампусе, все время работала на другую компанию...

Неужто зловредные конкуренты, в отместку за происходящее, заслали на Apple своих агентов, которые подсыпали в подшипники Xcode песок и битое стекло?

Какие только объяснения этому факту не придумывали уставшие и возмущенные люди! Apple славится образцовым качеством буквально во всем, что компания делает. Качество - это ее пунктик. И вдруг...

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

Просто в мире нет ничего, что может сравниться с Маком и Cocoa... Если вы писали софт в Cocoa, вы поймете меня. Если нет - прежде чем не верить, попробуйте!

Если бы доказанное Питером Бруком в 1975 году правило о бессмысленности увеличения числа разработчиков все еще было правильным, Xcode 3.0 вообще не должен был бы появиться на свет. Ни 3.0, ни 2.5, не говоря уже о новорожденном Xcode 3.1. Apple сделала то, против чего предостерегает "Мифический человеко-месяц", и... выиграла от этого.

До 2005 года, DTG решала множество самых разных задач не числом, а уменьем. Одни и те же люди писали редактор структур данных для Core Data (уникальный, кстати, инструмент), ловили багов в системе отладки, латали вспомогательный набор собственных компиляторов с C, C++ и Objective-C для нужд индексации проекта и лексической раскраски исходных кодов...

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

А еще они все время были рядом, и пытались помочь - почти со всеми из них мы заочно знакомы, "по переписке". Если бы мы только знали!

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

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

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

В 2004-2005, Apple объявила об открытии сотен вакансий в Developer Tools Group. В начале 2005 года компания взяла под свое "крылышко" парочку очень интересных проектов с открытым исходным кодом.

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

Самые главные фанатики Apple работают под ее крышей. Иногда компания нанимает на работу людей с исключительными способностями, наработками или опытом, безотносительно к степени их увлечения Маками. Эти люди все равно фанатики и маньяки своего дела, увлеченные им почти до безумия.

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

Вопреки всем питерам брукам в мире, расширив свои ряды и выстояв перед лицом немалых испытаний, DTG многократно увеличила свой потенциал.

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

Кроме улучшенной SCM, (системы управления версиями), поддерживающей CVS, Subversion и Perforce, появилась "мини-SCM". В любой момент состояние проекта и его файлов можно "сфотографировать", и вернуть к сохраненному состоянию, без лишних усилий... И много-много чего еще появилось в Xcode 3.0.

Традиция сопровождать Xcode множеством ошибок в 3.0 была продолжена. Не все из новшеств работают как хотелось бы. Слишком много всего, и слишком все непросто...

2. Научились работать?

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

Но, как мне кажется, радоваться наступлению новой эры в истории Xcode... пока еще рано. Нарушая одну из заповедей Джиленси, интерфейсного евангелиста Apple, Xcode и его собратья (InterfaceBuilder и другие) расширяют и без того трудно-обозримый набор функциоальностей, вместо того, чтобы "сконцентрировать на самых важных, и забыть о второстепенных". Этот подход приводит к усложнению программы, пользователи перестают ее любить и покупать. Увы, есть программы и программы. Разработка - процесс очень сложный, и иметь под рукой арсенал самых разных инструментов и возможностей...

Новые функции - новые ошибки. Причина исключительной чистоты Xcode 3.1 вовсе не в том, что на шею и без того перегруженным инженерам (да, они таки сумели перегрузить и расширенный состав DTG!) провесили еще и джобс-приемку. Все проще.

Избранные (платные подписчики Apple Developer Connection), как всегда, получили доступ к Xcode 3.1 задолго до выхода новой версии в свет. И было бы все как всегда, если бы не одна маленькая деталь. Бета-версия Xcode 3.1 входила в состав бета-версии iPhone SDK.

В первые же несколько дней, с сайта Apple было сгружено сто тысяч копий SDK. Он появился в торрент-раздачах (только неизвестно, настоящий ли он там был). Судя по всему, он появился и в других сетевых хранилищах (интересно, зачем?).

И все эти люди, любопытные и жаждущие поскорее покорить iPhone, и начать писать для него шедевры, принялись нещадно подвергать новый Xcode самым неожиданным испытаниям. Баг-рипорты, сыпавшиеся на головы инженеров DTG, практически не оставляли им времени ни на что другое, кроме подготовки к выпуску новых вариантов бета-версии iPhone SDK.

Таких версий вышло восемь. Восьмая версия беты почти байт-в-байт идентичная с iPhone SDK 1.0. Xcode Tools "из восьмерки" идентичны официальному Xcode 3.1.

Об этом не сообщалось, но Xcode Tools из iPhone SDK без проблем можно было установить на Мак с PowerPC. При этом, как и в случае с официальным релизом, инструментарий не устанавливает шаблоны проектов и компиляторы для iPhone.

Всего же, с 6 марта по 11 июля, только с сайта Apple, iPhone SDK скачали 250 000 человек. И многие из этих многих тысяч видели Xcode впервые, и замечали в нем даже то, на что старожилы уже давно не обращали внимания.

Разработчики Xcode 3.1 с честью выдержали многокилометровые "рулоны" баг-рипортов. В SDK, а в основном - именно в Xcode и других инстурментах Xcode Tools, были исправлены сотни ошибок и устранены тысячи мелких несуразностей.

Теперь, как мне кажется, у сторонников большей открытости Apple появился сильный аргумент. Действительно, если обкатка предрелизной версии Xcode на сотнях тысяч добровольцев дала такой результат, почему бы не сделать ее традицией?

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

3. О недостатках Project Builder и Xcode

Боюсь, у вас могло сложиться превратное представление об Xcode Tools (раньше - Project Builder). Это огромный комплекс из сотен программ и утилит, с существенно другими задачами, чем, например, у комплекса офисных программ или интернет браузера. За исключением одной или двух неудачных версий, он всегда был, как минимум, вполне преемлем.

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

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

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

И тем не менее, было в Xcode что-то такое, из-за чего он казался немного чужим в Mac OS X. Во времена Project Builder, рассуждения о том, что не Apple приобрела NeXT Software, а наоборот, были невероятны эффективными на фоне открытой среды разработки.

Xcode 3.0 и Xcode 3.1 все больше отвечают требованиям, предъявляемым к маковскому программному обеспечению. Это намного важнее, чем считают многие.

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

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

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

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

Не поймут и не оценят.

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

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

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

Продолжение следует...

Источник: Олег Свиргстин