Вчера вернулся из Омска, где выступал на RuPy-2008. Мой рассказ про StrokeDB привлек внимание, хотя с количеством технических подробностей я, кажется, перестарался.
В целом конференция мне понравилась, хотя было заметно доминирование питонщиков. Рубисты, вперед :)
Слайды моей презентации можно скачать здесь, а позже должна появиться видеозапись.
понедельник, 23 июня 2008 г.
воскресенье, 15 июня 2008 г.
Логично! А красиво?
У человека есть две базовых оценочных системы: «красиво» и «логично, правильно». Но развиты они обычно в разной степени, что зависит как от генетических условий (это я предполагаю), так и от того, где и чему человек учился в процессе жизни (и у кого).
Чистое «красиво» связано с эстетическим, художественным восприятием, в нем нет ни капли функциональности (зато есть целостность). У чистого «логично» все наоборот.
Шедевр получается тогда, когда «красиво» и «логично» пересекаются. «Красивый» результат — это некая гармония между решаемой задачей, выбранным инструментарием и самим решением. К сожалению, это большая редкость в нашем мире.
Обратимся к области программирования. В общественном сознании эта область
примыкает к математике, логике, инженерии. И очень слабо примыкает к дизайну и прочей эстетике.
Что мы имеем как следствие? Орды программистов, которые умеют делать «правильно», но нифига не умеют делать «красиво». Точнее, многие из них даже «правильно» делать не могут, но это хотя бы решается по мере набора опыта. Но великие вещи, как правило, случаются именно на стыке одного и другого.
Вот взять изначальную философию UNIX: Small is beautiful (см. книгу Рэймонда), т.е. ориентация на множество активно, простым способом взаимодействующих небольших программ. Получилось и «логично», и «красиво». Конкурирующие системы в то время (да и сейчас) опирались на другой принцип: некоторое количество программ разных размеров, хаотично взаимодействующих сложными способами. «Логично»? В чем-то, наверняка, да. «Красиво»? Нет.
Как развить обе оценочные системы? Внятного ответа у меня, честно говоря, нет. Отделаюсь общими соображениями.
Во-первых, наука о мозге давно увязала восприятие целого с работой правого полушария и со взаимодействием его с полушарием левым. Поскольку правое полушарие есть у всех, необходимое «железо» есть у всех, вопрос лишь в его развитии.
Во-вторых, плодородной почвой для красивых решений являются ограничения и противоречия в исходной ситуации. Крепкие противоречия — гарантированный способ заблокировать логическое мышление; вылезти можно будет только с помощью целостного восприятия, каковое и будет развиваться в таком случае. На этом принципе построена такая штука, как ТРИЗ (а в чем-то близка и теория ограничений).
На развитие связи между полушариями направлены некоторые практики, например Игры Нового Кода НЛП.
В следующий раз начну рассказывать, как я использую целостное восприятие и что из этого получается :)
Книги в тему:
Чистое «красиво» связано с эстетическим, художественным восприятием, в нем нет ни капли функциональности (зато есть целостность). У чистого «логично» все наоборот.
Шедевр получается тогда, когда «красиво» и «логично» пересекаются. «Красивый» результат — это некая гармония между решаемой задачей, выбранным инструментарием и самим решением. К сожалению, это большая редкость в нашем мире.
Обратимся к области программирования. В общественном сознании эта область
примыкает к математике, логике, инженерии. И очень слабо примыкает к дизайну и прочей эстетике.
Что мы имеем как следствие? Орды программистов, которые умеют делать «правильно», но нифига не умеют делать «красиво». Точнее, многие из них даже «правильно» делать не могут, но это хотя бы решается по мере набора опыта. Но великие вещи, как правило, случаются именно на стыке одного и другого.
Вот взять изначальную философию UNIX: Small is beautiful (см. книгу Рэймонда), т.е. ориентация на множество активно, простым способом взаимодействующих небольших программ. Получилось и «логично», и «красиво». Конкурирующие системы в то время (да и сейчас) опирались на другой принцип: некоторое количество программ разных размеров, хаотично взаимодействующих сложными способами. «Логично»? В чем-то, наверняка, да. «Красиво»? Нет.
Как развить обе оценочные системы? Внятного ответа у меня, честно говоря, нет. Отделаюсь общими соображениями.
Во-первых, наука о мозге давно увязала восприятие целого с работой правого полушария и со взаимодействием его с полушарием левым. Поскольку правое полушарие есть у всех, необходимое «железо» есть у всех, вопрос лишь в его развитии.
Во-вторых, плодородной почвой для красивых решений являются ограничения и противоречия в исходной ситуации. Крепкие противоречия — гарантированный способ заблокировать логическое мышление; вылезти можно будет только с помощью целостного восприятия, каковое и будет развиваться в таком случае. На этом принципе построена такая штука, как ТРИЗ (а в чем-то близка и теория ограничений).
На развитие связи между полушариями направлены некоторые практики, например Игры Нового Кода НЛП.
В следующий раз начну рассказывать, как я использую целостное восприятие и что из этого получается :)
Книги в тему:
- Красота и мозг. Биологические аспекты эстетики: Пер. с англ./Под ред. И. Ренчлера, Б. Херцбергер, Д. Эпстайна. — М.: Мир, 1995 (e-book).
- Роберт Пирсиг. Дзен и искусство ухода за мотоциклом.
Ярлыки:
красота,
новый код,
ТРИЗ,
целостное восприятие,
TOC
суббота, 14 июня 2008 г.
Человек красит место красит человека
Я очень люблю читать сочинения Пола Грэма, как минимум просто потому, что у него блестящий ум. Кратко о Поле для тех, кто не в курсе: в начале 90-х он написал на ЛИСПе первую систему онлайн-торговли и продал ее Yahoo. Это позволило ему разбогатеть и стать венчурным капиталистом, главой Y Combinator.
Сегодня я вновь случайно зашел на его сайт и прочел последнюю статью, Cities and Ambition, в которой Пол описывает мессаджи, транслируемые разными городами, в которых ему доводилось жить. Нью-Йорк шепчет: «будь богаче», Силиконовая Долина нашептывает на свой лад: «стремись к большей силе и власти». Послание Бостона (Кэмбриджа) звучит так: «будь умнее». И т.д.
Мне подумалось: каково же послание Новосибирского Академгородка, в котором я обитаю? Наверное, корректнее будет говорить не о том, что посылается, а о том, что я принимаю. А принимаю я нечто вроде такого: будь тем, кто ты есть, ничего лишнего.
Это создает возможность для устойчивого параллельного существования разных ритмов жизни. Один человек может жить быстро, другой медленно, и они друг другу не помешают.
С точки зрения деятельности выходит, что здесь хорошо создавать нечто уникальное («от души»), в уникальном коллективе. А вот чтобы это выгодно продать, нужно растождествиться с атмосферой, ибо рыночную цену она увидеть не дает. То, что в глазах стороннего наблюдателя может выглядеть офигенно крутым, изнутри кажется обычным и малозначащим.
А какой мессадж у вашего города?
Сегодня я вновь случайно зашел на его сайт и прочел последнюю статью, 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, то довольно хорошо представляю, что происходит при исполнении программы.
Есть другая позиция, получающая все более широкое распространение: «использовать работающий инструмент, не задумываясь, как он работает».
Наш подход ближе к первой позиции, но вторую позицию полностью отбросить не получается. Может быть, нужно просто набраться храбрости. :)
Все это творится на физфаке НГУ, на кафедре АФТИ. Все первокурсники, желающие стать не просто физиками, а физиками-информатиками (нечто среднее между чистыми физиками и программистами), попадают к нам. В большинстве своем студенты уже что-то умеют, некоторые даже участвовали в олимпиадах. Это очень большое подспорье, потому что дает возможность заниматься интересными вещами, а не месяцами учить синтаксис языков программирования.
Сам курс называется «Основы программного конструирования» и имеет ту же аббревиатуру, что и «Основы православной культуры», введенные недавно в школах — ОПК. Довольно забавное совпадение :)
Приятной спецификой нашей кафедры является то, что преподавателям никто не указывает, что им делать. Поэтому чтобы изменить программу или реализовать какие-то новые идеи, нужно просто захотеть этого. Так что курс меняется от года к году и приобрел довольно фигуристые очертания. К следующему году, видимо, опять будем что-то менять (кроме меня на курсе работают А. Аксенов и В. Рудаковский).
Сейчас все происходит примерно так. Первый семестр посвящен изучению основных «священных коров» — двоичного представления данных, основных структур данных (списки, деревья, хеш-таблицы), алгоритмов сортировки, модульного подхода к разработке. В конце семестра студенты делают проект, сдают теоретический экзамен и получают итоговую оценку, включающую в себя все.
На первом курсе мы используем Python. Это новация последнего учебного года. Раньше использовали Паскаль, а когда-то совсем давно — Modula-2.
Второй курс начинается с изучения MIX-машины Д.Кнута и примерно месяц студенты пишут на MIX. Потом мы переходим на C. В конце семестра вкратце изучается многопоточное программирование и примитивы синхронизации; семестровый проект должен обязательно включать в себя взаимодействие между потоками. Кроме того, нужно сдать задание по MIX.
В общем, получается довольно интенсивно, но интересно.
Надо сказать, что из всех нововведений в курс (когда я сам проходил его 10 лет назад, в 1-м семестре изучался просто Паскаль, во 2-м — просто C) самым удачным оказалось добавление MIX. При всей кажущейся архаичности MIX-машины, она дает неплохое представление, как все крутится на уровне процессора. При изучении у студентов возникает начальное отторжение, но потом большинству даже нравится.
А вот Python оставил двоякое впечатление. С одной стороны, алгоритмы на нем выразительнее (за счет мощных базовых типов данных), а с другой стороны, когда дело доходит до C и MIX, удар «об стенку» больнее — ведь все вкусности махом пропадают.
Возможно, мы выкинем Python и перераспределим нагрузку между C и MIX. Это еще и высвободит массу лекционного времени, что позволит уделить больше времени всяким интересным темам типа конструирования компиляторов :)
Я сам к скриптовым языкам пришел с позиции «я все это могу написать на C/C++, но нет смысла тратить время». Соответственно, когда я пишу на Python или Ruby, то довольно хорошо представляю, что происходит при исполнении программы.
Есть другая позиция, получающая все более широкое распространение: «использовать работающий инструмент, не задумываясь, как он работает».
Наш подход ближе к первой позиции, но вторую позицию полностью отбросить не получается. Может быть, нужно просто набраться храбрости. :)
четверг, 5 июня 2008 г.
Tabula Rasa
Всегда с чего-то надо начинать, пусть это будет первым постом.
Меня зовут Олег Дашевский, я живу в Новосибирске, мне 27 лет.
Программированием занимаюсь с 10 лет, когда мне на день рождения подарили программируемый микрокалькулятор МК-61. С тех пор я много чего делал и много чего умею.
Сейчас я в работе в основном использую C++ и Python (пишу научный софт), в качестве развлечения пишу на Ruby. Мои коммиты можно найти в Rubinius, StrokeDB, Datamapper. В планах — дописать научный софт :) и перейти полностью на Ruby. В конце месяца собираюсь поехать в Омск и выступить на конференции по Ruby и Python с рассказом по StrokeDB.
Мой любимый редактор — vim, в работе активно использую git, на домашнем компьютере стоит Gentoo.
Я никогда не работал в жестких корпоративных условиях, в основном занимаясь работой на заказ (по знакомству). Кроме того, программирование — не единственная моя активность (про остальное можно прочитать в моем ЖЖ).
С 2002 года обучаю студентов I курса ФФ НГУ программированию, курс называется «Основы программного конструирования». Вообще, тема образования и обучения мне близка. Бродят мысли о создании своего бизнеса в форме самообучающейся организации, которая обеспечила бы постоянный рост и развитие своим сотрудникам, но до этого пока очень далеко.
Какое-то время назад я охладел к программированию, решив, что я «всего достиг», но сейчас интерес вернулся, обновленный и посвежевший. Данный блог — выражение этого интереса.
Пожалуй, на первый раз хватит :) В следующий раз расскажу про то, как мы учим студентов.
Меня зовут Олег Дашевский, я живу в Новосибирске, мне 27 лет.
Программированием занимаюсь с 10 лет, когда мне на день рождения подарили программируемый микрокалькулятор МК-61. С тех пор я много чего делал и много чего умею.
Сейчас я в работе в основном использую C++ и Python (пишу научный софт), в качестве развлечения пишу на Ruby. Мои коммиты можно найти в Rubinius, StrokeDB, Datamapper. В планах — дописать научный софт :) и перейти полностью на Ruby. В конце месяца собираюсь поехать в Омск и выступить на конференции по Ruby и Python с рассказом по StrokeDB.
Мой любимый редактор — vim, в работе активно использую git, на домашнем компьютере стоит Gentoo.
Я никогда не работал в жестких корпоративных условиях, в основном занимаясь работой на заказ (по знакомству). Кроме того, программирование — не единственная моя активность (про остальное можно прочитать в моем ЖЖ).
С 2002 года обучаю студентов I курса ФФ НГУ программированию, курс называется «Основы программного конструирования». Вообще, тема образования и обучения мне близка. Бродят мысли о создании своего бизнеса в форме самообучающейся организации, которая обеспечила бы постоянный рост и развитие своим сотрудникам, но до этого пока очень далеко.
Какое-то время назад я охладел к программированию, решив, что я «всего достиг», но сейчас интерес вернулся, обновленный и посвежевший. Данный блог — выражение этого интереса.
Пожалуй, на первый раз хватит :) В следующий раз расскажу про то, как мы учим студентов.
Подписаться на:
Сообщения (Atom)