Сегодня ко мне на собеседование пришёл человек, работающий в компании, разрабатывающей программы для морского порта СПб.

Я навострил уши, потому что знал, что большая часть разработчиков с моей первой серьёзной работы, компании В-Реал, была, в своё время, в порт сманена. Как показал дальнейший разговор, уши я навострил не зря.

Выяснилось, что программа, первую версию которой мы, с Серёгой Щербаковым и коллегами, разрабатывали в 1997 году, до сих пор работает в порту! 🙂

Программа называется Integrated Object Manager (IOM) и представляет из себя универсальный клиент, для объектно ориентированного доступа к данным. В реляционной базе, мы тогда использовали Sybase, хранятся описания объектов и действий с ними и, естественно, содержимое объектов. IOM читает эти описания из базы и работает с объектами.

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

Не помню уже точно чья была идея изначально, помню, что активно учавствовали Саша Будник, Рома Герасимов, Серёга Щербаков и я. Первый вариант IOM, на Delphi, писали я и Серёга.

Забавно, что дело наше живёт через 14 лет, после первой версии.

Кстати, сейчас там работает следующая версия, на C++. И у них ходит легенда, что кто-то там переписал весь код, что мы с Серёгой делали полгода, за 10 дней, на C++.

Спор такой действительно был. И какую-то заглушку конечно написали. Но полного функционала за 10 дней добиться таки не удалось. Кто бы сомневался 🙂

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

Но, хорошая часть, плохим кандидатам это не помогает... 🙂

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

Вариант для C/C++. Увлеченно используем арифметику указателей.

char* reverse(char *s) {
    char *s0, *s1;

    for (s1 = s; *(s1) != '\0'; s1++);
    s1--;
    for (s0 = s; s0 < s1; s0++ && s1--) {
        char c = *(s0);
        *(s0) = *(s1);
        *(s1) = c;
    }
    return s;
}

Сравнивая производительность с предыдущими вариантами, надо обратить внимание на два момента:

  • фактически первый цикл — это вычисление длины строки, т.е. быстрее или медленнее это место, по сравнению со strlen, зависит от реализации strlen. Не знаю что конкретно там обычно написано, спекулировать не буду. Но думается, что что-то типа того и написано 🙂 С другой стороны, если вдруг окажется, что strlen работает быстрее чем просто поиск конца, в цикле, то никто не мешает нам написать конструкцию вида s1 = s+strlen (s). А дальше продолжить делать как тут.
  • Во время самого обмена значениями мы заметно сокращаем количество вычислений, т.к. вместо s+i и s+len-i, на каждом присваивании, мы все указатели вычисляем один раз, на проход.

На Java так красиво не получится. За отсутствием собственно указателей. Но близко к этому будет вариант с запуском навстречу двух счетчиков массива...

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

Так что попробую описать своё видение этого подхода в отдельной статье. А потом буду на неё везде ссылаться 🙂

Говорить буду, в основном, про софтверную часть. Как самую мне близкую.

Проблема

Есть известная шутка: Качественно, быстро, недорого. Выбери любые два. Хоть и звучала эта шутка изначально, кажется, про ремонт, она не менее справедлива и в разработке программного обеспечения.

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

Время тоже всегда ограничено: конкуренты не спят, протянешь с выпуском — потеряешь рынок.

Деньгами много не решить, т.к. много индусов не нагнать, а те что есть имеют вполне конечные аппетиты.

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

В управлении же качеством есть два основных подхода...
Continue reading

Наконец-то свершило то, чего так долго все ждали. Компания Oracle наконец-то опубликовала JSRы для Java SE 7 и 8.

Вот пост Марка Рейнхольда (Mark Reinhold) по этому поводу: http://blogs.sun.com/mr/entry/quartet

I’m pleased to note the submission of four new Java Specification Requests to the Java Community Process:

These JSRs have been a long time coming. They’re now—finally—on the JCP Executive Committee ballot for approval; results should be available in two weeks.

My thanks to everyone who’s contributed to the related OpenJDK Projects.

Как видно, нам тут интересны JSR336 и JSR337. Через две недели должны появиться результаты голосования по этим JSR.

На прошлой неделе со мной преключилась забавная пертурбация. Мне предложили писать статьи для сайта AppleInsider.ru, очевидно какой тематики. Сейчас там опубликовано три мои статьи:

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

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

Посмотрим, что из этого выйдет...

Как бы это сформулировать в резюме? Аналитическая журналистика? 🙂

Бизнес новости BFM.RU
15 февраля2010 года // Hi-Tech, Потребрынок, Intel, Nokia, компьютерная техника, новинки
Nokia и Intel совместно выпустят новую операционную систему
Компании Intel и Nokia объявили о создании новой операционной системы на базе Linux, которая будет поддерживаться нетбуками, смартфонами и планшетами
Продолжение статьи

Долго к этому шли...

Бизнес новости BFM.RU
15 февраля2010 года // Hi-Tech, Потребрынок, Телеком, интернет, Общество, сотовая связь
Сотовые операторы мира делают общую платформу для приложений
Ведущие телекоммуникационные компании мира объединились, чтобы создать открытую платформу для доставки приложений пользователям мобильных телефонов
Продолжение статьи

JavaME, судя по всему, совсем не хватает...