2011-10-23

Перевод // Dear Perforce: f*ck you

Добрейшего!

Кинули тут ссылочку на отличную заметку, буквально крик души человека, измученного нарзаном Перфорсом. Называется он "Dear Perforce: f*ck you", что цензурно можно перевести как "Дорогой Перфорс, иди нахрен", но сведущие в английском поймут, о чём название.

Решил перевести, поскольку сам с недавнего времени работаю с Перфорсом и наступил на некоторые грабли, которые малость испортили нервы. Да и продолжают портить, чего уж там. Замечу, что статья написана в 2007 году и прочитав её в 2011, я не увидел коренных отличий от ситуации на сегодня. Хотя я сам несколько терпимее отношусь к этому продукту :)

Так что ниже - мой перевод исходной заметки, отдельные комментарии показаны в скобочках.



/*
Начало перевода
*/

Дорогой Перфорс!

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

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

В данный момент я единственный, кто работает с базой исходников.

Уже четыре раза я приходил на работу, садился кодировать, открывал файл, который редактировал и сабмитил буквально вчера, только для того, чтобы обнаружить, что он сейчас в какой-то предыдущей версии. Говорю Перфорсу взять последнюю версию, на что получаю ответ, что файл уже синхронизирован. В конечном счете, я вынужден вызвать "sync -f" (то есть принудительно перезаписать всё или рискнуть поломать мой репозиторий сначала отредактировав файл, а потом внеся то, что у меня откатилось безо всякого предупреждения). Нет, юнит-тесты не помогут поймать эту проблему, ведь они точно так же откатятся на предыдущую версию, а поскольку я никогда не вношу поломаный код, то и после загадочного откатывания тесты будут показывать зеленую полоску, а я как-то не запоминаю в конце дня точное количество тестов каждого проекта. Сегодня он меня заставил сделать слияние ("мёрдж") "их" изменений. Вот только я единственный, кто работает на этой чёртовой ветке, и у меня всего один клиент, который на неё ссылается. (Прим. пер.: у Перфорса во время слияния в окне с 3-хсторонним слиянием показаны "их" - "theirs", "ваши" - "yours" и измения "общего предка")

Когда вы попробуете "интегрировать" (везде оно известно как "смёрджить") файлы из директории А, где вы работали, в директорию Б, он скажет: в "их" файлах есть изменения, "ваши" файлы в порядке, и хотите ли принять "их" изменения? И вы видите, что "их" изменения - это то, что сделали ВЫ в директории А и "ваши" изменения - это те, что в директории, где вы вообще ничего не делали, и куда собираетесь смёрджить всё, что надо.

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

Он недостаточно умён, чтобы понять, что файл, который ты поменял - это... погоди-ка... именно тот файл, который ты поменял! Ну, конечно, можете сказать "Господин Перфорс, с вашего позволения, я бы хотел отредактировать вон тот файл." и после этого он будет знать, но просто так файл отредактировать нельзя. Разговор чокнутых в стране сложившихся обстоятельств.  (Прим. пер.: тут игра слов: "perforce land" - "perforce" переводится как "необходимость", "в силу сложившихся обстоятельств", или попросту "припекло") Если попробуете откатывать наборы изменений, он начнёт скулить о том, что не хочет затрагивать файлы, которым были сделаны права на запись после очередного отката, и это несмотря на то, что вы с ними ничего не делали, а только лишь откатили несколько раз.

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

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

На это я каждую неделю убиваю по несколько часов.

Обновление: Вы не подумайте, я не просто скулю насчет Перфорса. Да, он мне не нравится, и я по этому поводу кое-что сделал. Я взял и написал инструмент, синхронизирующий Перфорс с самыми разными системами контроля версий, но потом пришёл к выводу, что Git слишком чертовски хорош, чтобы заморачиваться с остальными, так что перешёл на Git с его git-p4 для синхронизации с Сатаной Перфорсом. Если интересно, его можно найти в директории contrib в исходниках git. Просто куда-нибудь скопируйте в другую дирку - и можно работать (но нужен Python).

Что было дальше

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

- У Перфорса просто другой подход. Надо попробовать в него погрузиться, прежде чем так сильно ругать.
Знаете, я как-то бился над, казалось бы, простой проблемой, используя Perl 5 тем способом, который считал самым подходящим, и сделал ошибку, упомянув о нём на открытом форуме.
- Ну конечно, - последовал ответ - неопытных программистов всегда сбивает с толку то, как Перл дает то, что надо. Как только ты в него погрузишься, ты увидишь, что путь Перла - это правильно.
Я расширил описание ошибки и добавил, что между мной и моим напарником (с которым мы бились на проблемой) - десятилетия разницы в опыте.
- Ну конечно, опытные програмеры думают, что их проблему Перл решит тем способом, который они от него ожидают, но как только ты в него погрузишься, ты увидишь, что путь Перла - это правильно.
Примерно таков уровень обсуждений между програмерами касаемо инструментов.
Если что, я пользовался Perforce вполне успешно в нескольких местах (как например дома, как например в компании, раскиданной по нескольким континентам) и, да, тебе надо понять, что именно он думает насчёт контроля версий и конфигурационного управления - и это не обязательно будет совпадать с тем, что думаешь ты об этих же вещах. И, да, его реакция на неверные входные данные может быть совершенно аутичной. Всё, что он тебе говорит - верно, но редко бывает полезным.
Фактически Perforce - это то, что называется "система со своим взглядом на вещи", у него есть свой взгляд на то, что такое контроль версий и конфигурационное управление. Если у вас тот же взгляд на вещи - будете с ним летать. Если не тот - будете с ним бороться. Но в самом деле, как только вы в него погрузитесь, поймёте, что он довольно хорош в том, что делает. Гораздо более хорош, чем SVN, особенно когда вы с ума сходите по, ну, вы знаете... ветвлению и слиянию кода.
Лучше ли он, чем Mercurial/git/прочие - не знаю, я их не использовал. Для тех вещей, что делают они, тем способом контроля версий, который хотят их пользователи, - видимо нет. И это нормально.

Остальные комментарии:

Комментарии типа "Я работал с ним на протяжении N лет, и ни разу у меня Перфорс не: испортил файл/сработал нестабильно/упал"

- Я использую Перфорс 4 года на своём проекте, но никогда не сталкивался с проблемами, о которых вы упоминаете

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

Чтоб совсем понятно было: Перфорс всё записывал правильно (ну кроме случая с окончанием строк, и я понимаю, что там всё настраивается), но тем не менее, я считаю, что система контроля версий не должна додумывать за меня, что же я имел в виду сделать. Ни один файл не испортился и не потерялся, и я ожидаю подобного в будущем.

- Хочу сказать, что несмотря на странности, он делает то, что написано на коробке.
- Перфорс был непробиваем для нашей группы разработки ~10 человек и ~10000 файлов при использовании с Линукса, Виндов и МаксОСи.

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

Коментарии типа "Да ты просто не умеешь им пользоваться/не дал ему ни единого шанса/ты специально его ломаешь"

Я без особых проблем ставил и начинал использовать Bazaar, CVS, Darcs, Git, Mercurial (Hg) и Subversion, всегда меньше часа требовалось для начала полноценной работы даже без того, чтобы начать что-то гуглить. Я дал Перфорсу 2 месяца. Я разговаривал с разработчиками, работавшими с ним годами.

Когда я говорю с опытными людьми, и на мои вопросы как правило отвечают тем, что или не знают как сделать с командной строки, только из GUI, или знают как сделать из комстроки или GUI, но понятия не имеют как оно так срабатывает. Вы правы, я возможно не знаю как его использовать, но обучение базовым операциям управления исходным кодом (включая ветвление и слияние) не должно занимать 2 месяца!

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

- Проблемы есть только у тех, кто его не понимает и изучил "по верхам", вместо того, чтобы попросить о помощи.

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

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

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

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

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

- А я считаю, что инструменты командной строки - очень мощные и полезные.

Так и есть. Не могу отрицать, что они мощные и полезные. Блин, похоже GUI просто втихаря запускает те же самые команды почти на каждое действие. Я также верю, что истребитель F-16 такой же мощный и полезный, но он и близко не похож на что-то, что может быть полезным и мощным без предварительного серьёзного обучения. К сожалению, то же самое могу сказать и об инструментах командной строки Перфорса (хотя и не с таким временем обучения... я надеюсь).

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

Ну почему мне кажется, что я один такой, кто видит постоянную проблему "мне он тоже показался странным, когда я начал его использовать". Нет, НЕТ, НЕТ, НЕТ. Такое ВООБЩЕ нельзя произносить. Перфорс существует уже больше десятилетия, и людям известен контроль версий ещё дольше. Не может быть никакого прощения за то, что на текущем этапе основые действия контроля версий могут чем-то непростым. У Перфорса было достаточно времени, чтобы переработать свои интерфейсы, сделать безумные вещи вроде команды "move" (дя, я знаю про команду "integrate", это не одно и то же). Говорить "странный" про совершенно новый инструмент, только что из "беты" - это нормально. Нормально говорить такое, про инструмент, использующий не ту парадигму, к которой вы привыкли. Ненормально говорить такое про такой старый инструмен, как Perforce, с такой старой парадигмой, как централизованный контроль версий.

Я согласен со всеми комментариями о том, что Перфорс - отстой.

Спасибо, приятно знать, что я такой не один.


/*
Конец перевода
*/

8 комментариев:

  1. Кстати, да - у меня тоже сразу параллели появились именно с гитом :)))

    ОтветитьУдалить
  2. ну так с чем ещё ассоциировать UI «by aliens, for aliens» :)

    ОтветитьУдалить
  3. http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/

    ?

    ОтветитьУдалить
  4. 2antono Зачастую смена инструмента - не самая простая задача в рамках организации. Так что "мышки кололись, плакали, но продолжали жрать кактус".

    ОтветитьУдалить
  5. А я думал один такой - никак не могу git понять.
    Правда работаю с ним редко.

    ОтветитьУдалить
  6. > Блин, похоже GUI просто втихаря запускает те же самые команды
    > почти на каждое действие
    Да, так и есть. Там внизу ещё консоль всё это дублирует - удобно.

    Кстати, у меня с Perforce всё хорошо было в течение нескольких лет, сейчас он у меня как домашний сорс-контрол. Единственное с чем согласен из статьи и комментариев - это убожество P4V (ибо P4Win был весьма вылизан, я по нему визуально скучаю), плюс выбор read-only атрибута как собственной метки об отсутствии изменений (и предупреждение "can't clobber writable file" при нарушении). SVN и черепаха меня тошнят куда больше :)

    ОтветитьУдалить
  7. Насчёт команд - как выяснилось, некоторые из них не совсем одинаково отрабаывают на консоли и в P4V.

    Касаемо SVN как системы - они довольно немало походи между собой, особенно в части ветвления. Так что дело действительно в ГУИ.

    ОтветитьУдалить