мысли

Почему падал Зерулс?

Версия 2.0.2 Зерулса, как можно понять из номера — версия с исправлениями ошибок (как и предыдущая). Самая большая неприятность случилась с одной из предыдущих версий. В ней, если запустить приложение в iOS 6, все падало. 

Источник ошибки оказался в коде, который отвечал за то, чтобы старая версия выглядела как раньше. В новой (для iOS 7+) при этом же, полностью обновлен дизайн, переделан вывод текста на TextKit и добавлены новые анимации.

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

Чтобы примерно представить себе сложность кода, попробуем её сравнить со стройкой (чуть серьезнее, чем в истории про программистов и дома). Пускай программа содержит несколько тысяч методов, кирпичиков, из которых она состоит. Пусть также квадратный метр стены толщиной «в один кирпич» — это 100 кирпичей. Получается, что из нескольких тысяч кирпичиков-методов можно выстроить, к примеру, четыре стены для одной комнаты. Хороший каменщик справится достаточно быстро. А программист?

Сложность заключается в том, что каждый метод-кирпич — разный. Разный размер, разная форма, разные выступы, разный материал. Нет двух одинаковых кирпичей (один из принципов программирования так и говорит: Don't Repeat Yourself, или DRY). Кирпичеукладка сразу же получается совсем не простая, ведь нужно аккуратно подбирать их друг к другу. При этом, укладывая нижний ряд, следует подумать, что сверху может быть что-то тяжелое.

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

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

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

На самом деле, есть способы математически доказать, что программа будет работать корректно. Объем работы, которую нужно для этого проделать, показывает проект ядра операционной системы. Самая интересная там статистика проекта. 8700 строк кода на С + 600 строк на Ассемблере. Проверено из этого 7500 строк. Скрипт проверки — 200 000 строк. Если напечатать его на бумаге формата А4, получится стопка высотой полметра. Потрачено примерно 30 человеко-лет работы.

В ЗеРулсе примерно 17 000 строк кода. В Ангстреме — больше 30 000.

Вопросы и ответы

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

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

Поэтому неправильно ждать ответа от кого либо. Задавая вопрос будьте готовы к тому, что ответ подтолкнет вас. Бывает, что подталкивает почти до самого конца, остается только осознать и понять. Бывает, что чуть-чуть. Иногда вообще отталкивает вместо подталкивания. Но никогда ответ не является тем самым, который вы ищете. Только подсказкой.

Биткамушки

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

Биткоин сегодня — это ракушки. Блестящие, красивые, модные. Ну, или камушки красивые, Биткамушки.

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

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

Я не понимаю, как хранить биткоины. Грубо говоря, для биткоина нет банков. Последние события показали, что хранить биткоины у себя «в матрасе» — не получается, сервера ломают только в путь. Где? Да и, как программист, я отлично понимаю, что вся эта «крипто» — до создания квантового компьютера. И что потом?

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

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

Поэтому пойду куплю еды за недорубли, и заплачу недодолларами за приложение в Апсторе.