воскресенье, 11 января 2009 г.

суббота, 13 декабря 2008 г.

Ruby IDE

Кажется, появляется IDE, в которой можно будет действительно работать с Руби.

Я-то с vim вряд ли куда уйду, но те, кто не принадлежит к нашему тайному братству часто жмущих Esc, смогут найти в ней утешение.

Смущает одно: IDE для Руби пишутся на Java (NetBeans, Aptana, и этот RubyMine туда же). В этом есть что-то неправильное с точки зрения стиля. На Java можно и нужно писать IDE для Java, а Руби IDE хорошо бы писать на Руби!

вторник, 9 сентября 2008 г.

Видео RuPy 2008

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

Показавшиеся интересными презентации:
Что характерно, за время, прошедшее с конференции, проект StrokeDB успел реорганизоваться. То, что получилось, называется strokedb-core. Вместо своих собственных хранилищ, основанных на skiplist-ах (они же слоеные списки; об этой структуре данных почему-то большая часть слушателей не имела представления), теперь используется TokyoCabinet. Да и код со спеками переписан. А я надеюсь все же найти время, чтобы вкрутить полную валидацию и в strokedb-core.

Life goes on :)

понедельник, 23 июня 2008 г.

RuPy 2008, Омск, 21.06.2008

Вчера вернулся из Омска, где выступал на RuPy-2008. Мой рассказ про StrokeDB привлек внимание, хотя с количеством технических подробностей я, кажется, перестарался.

В целом конференция мне понравилась, хотя было заметно доминирование питонщиков. Рубисты, вперед :)

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

воскресенье, 15 июня 2008 г.

Логично! А красиво?

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

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

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

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

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

Вот взять изначальную философию UNIX: Small is beautiful (см. книгу Рэймонда), т.е. ориентация на множество активно, простым способом взаимодействующих небольших программ. Получилось и «логично», и «красиво». Конкурирующие системы в то время (да и сейчас) опирались на другой принцип: некоторое количество программ разных размеров, хаотично взаимодействующих сложными способами. «Логично»? В чем-то, наверняка, да. «Красиво»? Нет.

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

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

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

На развитие связи между полушариями направлены некоторые практики, например Игры Нового Кода НЛП.

В следующий раз начну рассказывать, как я использую целостное восприятие и что из этого получается :)

Книги в тему:

суббота, 14 июня 2008 г.

Человек красит место красит человека

Я очень люблю читать сочинения Пола Грэма, как минимум просто потому, что у него блестящий ум. Кратко о Поле для тех, кто не в курсе: в начале 90-х он написал на ЛИСПе первую систему онлайн-торговли и продал ее Yahoo. Это позволило ему разбогатеть и стать венчурным капиталистом, главой Y Combinator.

Сегодня я вновь случайно зашел на его сайт и прочел последнюю статью, Cities and Ambition, в которой Пол описывает мессаджи, транслируемые разными городами, в которых ему доводилось жить. Нью-Йорк шепчет: «будь богаче», Силиконовая Долина нашептывает на свой лад: «стремись к большей силе и власти». Послание Бостона (Кэмбриджа) звучит так: «будь умнее». И т.д.

Мне подумалось: каково же послание Новосибирского Академгородка, в котором я обитаю? Наверное, корректнее будет говорить не о том, что посылается, а о том, что я принимаю. А принимаю я нечто вроде такого: будь тем, кто ты есть, ничего лишнего.

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

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

А какой мессадж у вашего города?

пятница, 6 июня 2008 г.

ОПК по-нашему

Я уже писал, что занимаюсь обучением студентов программированию (вот только что закончился мой 12-й семестр в роли «препода»).

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

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

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

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

На первом курсе мы используем Python. Это новация последнего учебного года. Раньше использовали Паскаль, а когда-то совсем давно — Modula-2.

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

В общем, получается довольно интенсивно, но интересно.

Надо сказать, что из всех нововведений в курс (когда я сам проходил его 10 лет назад, в 1-м семестре изучался просто Паскаль, во 2-м — просто C) самым удачным оказалось добавление MIX. При всей кажущейся архаичности MIX-машины, она дает неплохое представление, как все крутится на уровне процессора. При изучении у студентов возникает начальное отторжение, но потом большинству даже нравится.

А вот Python оставил двоякое впечатление. С одной стороны, алгоритмы на нем выразительнее (за счет мощных базовых типов данных), а с другой стороны, когда дело доходит до C и MIX, удар «об стенку» больнее — ведь все вкусности махом пропадают.

Возможно, мы выкинем Python и перераспределим нагрузку между C и MIX. Это еще и высвободит массу лекционного времени, что позволит уделить больше времени всяким интересным темам типа конструирования компиляторов :)

Я сам к скриптовым языкам пришел с позиции «я все это могу написать на C/C++, но нет смысла тратить время». Соответственно, когда я пишу на Python или Ruby, то довольно хорошо представляю, что происходит при исполнении программы.

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

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