Записки реликта [entries|archive|friends|userinfo]
Latimeria chalumnae

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

Будни быдлокодера: XSLT [Dec. 29th, 2008|02:38 am]
[Tags|, , ]

И всё-таки XSLT — сила! Ничего не могу с собой поделать, этот язык меня реально прёт. Вот сейчас пишу XSL-преобразование, которое порождает из XML-файла код на JavaScript (это не опечатка, всё именно так: XML->JavaScript), и мне это нравится. Я псих, да?

P.S. А я правильно понимаю, что все реальные пацаны давно перешли с XSLT на DSSSL? Я вот прямо даже не знаю — с одной стороны, DSSSL это Scheme, а Scheme я люблю даже больше, чем XSLT. С другой стороны, не очень понятен статус технологии и её перспективы, да и документации даже ещё меньше, чем на XSLT (хотя и XSLT не сказать чтобы прекрасно документирован).
P.P.S. А вот Педивикия как бы говорит нам, что наоборот: "In parallel with the move from SGML to XML, the Extensible Stylesheet Language (XSL) is gradually replacing DSSSL", вроде бы. Ничего не понятно, короче.
UPD Вот [info]orie@lj в комментах разъясняет, как обстоят дела на самом деле.
Link4 комментария|Оставить комментарий

Странности со списками в Python [Nov. 30th, 2008|12:25 pm]
[Tags|, , ]

Тем временем то ли нашёл ещё одну крупную кривизну то ли в Питоне, то ли в собственных руках.

Был мне нужен список списков одинаковых значений. И я его, недолго думая, организовал строчкой:
L = [[1] * 30] * 30]

Но после этого, попытавшись с этим списком работать, я обнаружил, что присваивание 0 какому-то из элементов в строке обнуляет всю строку. Немножко потупив, я догадался, что, скорее всего, дело в питоновском implicit sharing (кстати, что-то я с утра туплю — есть устоявшийся русский термин?), и написал вместо вышеупомянутой строки цикл:
L = []
for i in range(30):
    М = []
    for j in range(30):
        М += [1]
    L += [М]

Всё немедленно заработало, конечно. "Но осадочек остался". Как-то, по-моему, это "неаккуратненько"©. А вы как думаете?
Link4 комментария|Оставить комментарий

Qt Creator [Nov. 6th, 2008|10:16 pm]
[Tags|, , , , , ]

Наконец-то!

Trolltech (с недавних пор — подразделение Nokia) выпустила-таки IDE для Qt4. Я, естественно, уже скачал и поставил. Это великолепно! По набору возможностей, конечно, оно куда беднее Eclipse, но, как всякий узкоспециализированный инструмент, свою конкретную задачу решает куда лучше.

А главное, главное, теперь можно с чистой совестью пересаживать на Qt леммингов, органически не способных освоить Emacs и gdb. Все довольны: они получают гламурную среду с умным автодополнением, похожую на их любимый Visual Studio (только быструю и безглючную), мы — избавляемся от необходимости иметь дело с говнодельфи и говноMFC.

Сейчас среда распространяется под ознакомительной проприетарной лицензией, но к моменту выхода первой версии код обещают открыть под свободной лицензией, совместимой с GPL.
Link7 комментариев|Оставить комментарий

Будни быдлокодера: // FIXME: WTF?!! [Oct. 21st, 2008|03:29 am]
[Tags|, , , , , , ]

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

Это я к чему. Я напрочь потерялся в собственном проекте в 470 (прописью: четыреста семьдесят) строк на C++. Что самое обидное — оно почти работает. По крайней мере, работающих кусков там больше, чем тех, про которые я понимаю, что они делают.

NB: если программа начинает работать после изменений, смысл которых ты не понимаешь до конца (в моём случае это break и continue с довольно замысловатыми условиями; не спрашивайте меня, как такое появилось без моего сознательного участия), отмени их и забудь как страшный сон. Чтобы не уподобиться автору этих строк, ага.
Link9 комментариев|Оставить комментарий

Очень верное [Sep. 12th, 2008|12:24 am]
[Tags|, , , ]

Я давно заметил, что русские вообще отличаются иррациональной любовью к странным вещам, типа среды Borland Delphi, операционной системы FreeBSD, браузера Opera, протокола ICQ, поисковой машины Rambler и сайта bash.org.ru

Больно И Стыдно™, соотечественники.

Всё, кроме поисковой машины Rambler (о которой я просто ничего не знаю — крайний раз использовал её, кажется, ещё в прошлом тысячелетии) и bash.org.ru (который я очень люблю) в топе личного hate list'а.

По ссылке из подзамочного поста, так что, наверное, неэтично указывать источник
Link4 комментария|Оставить комментарий

Ещё программистское [Aug. 13th, 2008|12:55 am]
[Tags|, , ]

Сейчас довольно много пишу на С++/Qt4 и на Python/PyQt4, и вот что я заметил.

Скорость разработки на Python действительно значительно выше. Если ты неплохо знаком с используемой библиотекой (а я знаю Qt4 уже, скажем так… нормально), написать приложение на Питоне, десять раз переделать, оттестировать и переписать на C++, подглядывая в питоний код, может быть в разы быстрее, чем писать всё с самого начала на C++. Питон — действительно куда более приятный, лаконичный и выразительный язык, чем Кресты. Настолько, что можно простить ему несколько раздражающих мелочей типа не слишком красивого синтаксиса описания классов или недостаточно гибких технологий связывания модулей. Питон, вообще, занимает фантастическую нишу, из общих соображений такое вообще невозможно: "язык для работающих (в отличие от какого-нибудь PHP) и поддерживаемых (в отличие от того же Перла) наколеночных решений". (Да, пользуясь случаем, хочу ещё раз сказать спасибо ЖЖ-пользователю [info]haron@lj, который убедил-таки меня в том, что Питон рулит.)

Однако, как только что-то идёт не так (глюки/непонятки с архитектурой программы/необходимость осваивать незнакомые куски библиотеки), меня охватывает желание схватиться за C++, обычно непреодолимое. Интересно — почему?

Дело ли тут в статической типизации C++? Вообще в большей бюрократичности Крестов, заставляющей каждые пять минут останавливаться и думать? В том, что Qt4 прикручена к Питону всё же слегка через задницу? В тем, что C++ для меня привычнее (хотя на сознательном уровне Питон всё равно кажется читабельнее)? Во всплывающем всё же скрытом раздражении от бесконечных self и необходимости писать имя модуля перед именем класса?

Я пока не понял.
Link8 комментариев|Оставить комментарий

Язык программирования --- это на 90% его библиотеки [Jul. 1st, 2008|10:11 pm]
[Tags|, ]

И это, на самом деле, ужасно.

Вот, например, очень хочется написать что-нибудь на Scheme, чтобы получше узнать этот замечательный язык — но, например, приличной библиотеки для создания GUI к этому языку нет ни одной, работа с сетью и тредами, а также интеграция в C-шный код нормально сделана, afaik, только в Guile, который знатоки и ценители ругают последними словами, со средствами веб-программирования тоже беда... и это сильно усугубляется несовместимостью библиотек для различных интерпретаторов, конечно. В итоге для решения любой реальной задачи куда проще схватиться за "индустриальные стандарты": C++/Qt4, JavaScript, Python или Erlang.

Единственная, кажется, нужная на практике софтина, которая не требует почти никаких внешних библиотек и при этом просто создана для Scheme, уже написана. На Scheme, что интересно. И написана настолько хорошо, что человек моей квалификации вряд ли способен что-то хорошее и действительно полезное в неё добавить: это LilyPond.

Нет, конечно, от Схемы и так большая польза: например, в JavaScript очень тяжело жить без замыканий, но вряд ли бы я научился использовать их в JavaScript, не познакомься я с этим приёмом сначала в Схеме с её фантастически прозрачным синтаксисом. Возможности питоновской lambda я бы тоже вряд ли увидел без знания Схемы, наверное. Но хочется-то большего.

Например, участие в большом проекте на Scheme, скорее всего, избавило бы меня от иллюзий. Я не мог нарадоваться на Питон, пока не пропробовал написать на нём действительно большую программу и не уткнулся носом в ряд уродливых неочевидностей и нелогичностей. Я думал, что знаю C++, пока не вынужден был влезть в разработку проекта на C++ в несколько десятков тысяч строк кода (с короткой, но бурной историей, н-да), после чего мне пришлось, по сути, заново учить этот язык. И, кстати, на собственной шкуре убеждаться в истинности утверждений, которые умные люди твердят не первый десяток лет: "явное управление памятью — для красноглазых подростков, человек, которому нужна программа, а не процесс её написания, с самого начала будет использовать язык с автоматической сборкой мусора", "объектный язык без развитой метаобъектной системы можно сразу выбрасывать в помойку", "шаблоны проектирования (design patterns) — маразм и бюрократия, но в ООП без них нельзя", "шаблоны (templates) рулят", "юзайте средства автодокументирования", "юзайте системы контроля версий", "убивайте тех, кто не использует средства автодокументирования и системы контроля версий", "C годится только для написания операционных систем, C++ не годится вообще ни для чего"… о десятом правиле Гринспуна я уже не говорю (наблюдательный человек уже заметил, что перечисленный мной набор мудростей состоит из следствий десятого правила Гринспуна чуть более, чем наполовину). Так что вполне возможно, что более плотное взаимодействие со Scheme тоже уравновесило бы восхищение должной долей раздражения.

А пока остаётся только кусать локти: почти любой код на Scheme кажется мне чудом логичности, изящества и читабельности; программирование небольших задач на Scheme это действительно удовольствие. Совсем обидно будет, если на самом деле больших — тоже.
Link14 комментариев|Оставить комментарий

Бложь: IT-шное [Jun. 30th, 2008|07:26 pm]
[Tags|, , ]

Из журнала [info]gaperton@lj:

результаты исследований карнеги-меллон (в рамках работ по psp/tsp) показывают, что при увеличении чистого времени работы более 4 часов в день приводит к понижению продуктивности, и выработка выходит на константу, а потом падает. Чистое время работы - это за вычетом перерывов совещаний чтения почты новостей и перекуров. Эти результаты научно точны - они железобетонно доказывают бессмысленность регулярных переработок.
(мой небогатый опыт полностью подтверждает, да; кстати, как раз примерно четыре часа в сутки тратили на обеспечение себя всем необходимым наши предки в эпоху палеолита, и столько же тратят сейчас охотники-собиратели).

Блог по ссылке вообще рекомендуется, особенно имеющим отношение к управлению программными проектами.

Из журнала [info]pzz@lj:

Пишем програмку, состояющую из 2-х потоков. Один пишет в TCP-сокет, другой читает. Сокеты соединены между собой через 127.1

Запускаем на Линухе - получаем 363 мб/сек. На Винде - 54. Уже забавно.

Теперь увеличиваем буфер, которым пользуется програма, с 1 до 32 килобайт.

Линух разгоняется до 700 мегабайт. Винда - до 78.

Я фигею.

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

Опыт написания индусского кода [May. 17th, 2008|02:42 am]
[Tags|, , , , , ]

Сегодня собственоручно сделал в корпоративный SVN коммит, содержащий примерно следующее:

...
_currentView->setWorkDir(_currentView->getWorkDir());
...

Это, увы, небессмысленный шаг, просто у класса, экземпляром которого является _currentView, такое вот зашибенное внутреннее устройство (тоже моего авторства, понятно).

Стыдно ужасно. Груз гуманитарного образования сегодня тяжёл как никогда, ощущаю позывы к заползанию в биореактор.

[много оправдательных слов skipped]

Остаётся надеяться только на то, что у меня будет время на рефакторинг и этот код не уйдёт в production.
Link2 комментария|Оставить комментарий

Опять про интерфейсы [Apr. 22nd, 2008|01:35 am]
[Tags|, , , , , ]



magius wrote:
ты знаешь как выглядит Идеальный Интерфейс? :)
это ОДНА кнопка с надписью "сделай мне заебись!" :)
Step wrote:
Никаких кнопок. Одна надпись - "тебе уже заебись!"

http://bash.org.ru/quote/52960



Вот интересно, тема "годится ли Linux для десктопа" уже побила по популярности "как нам обустроить Россию" у русской образованной публики?

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

Формулировка совсем банальная; тем более странно, что обычно "хорошим интерфейсом" называют совсем другие вещи.


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


Всё остальное (пологая "кривая обучения", соответствие ожиданиям пользователя и наработанным рефлексам, визуальная и вообще сенсорная приятность и т.д.) — замечательные вещи, но не следует забывать, что они второстепенны относительно отквоченного принципа.

Что же обычно происходит на практике?

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

Надо сказать, что именно второго решения пользователи, как правило, хотят ("дайте мне кнопку, чтобы я на неё жал"©один клиент фирмы, в которой я сейчас работаю; см. также эпиграф). Но людям свойственно хотеть совсем не того, что им нужно на самом деле.

В чём проблема с этими двумя подходами?

Об имитации некомпьютерных инструментов смешно даже говорить. Такие интерфейсы, по сути, закрывают пользователям доступ к реальным возможностям компьютера, обессмысливая сам факт "автоматизации". С клонированием типовых решений всё сложнее.

В России, кстати, объяснить, в чём проблема с такими интерфейсами, особенно сложно из-за изобилия пиратского софта. 90% процентов пользователей ставит 90% программ для того, чтобы потыкать в первые попавшиеся меню в течении пары минут и забыть об установленной софтине до её сноса при ближайшей расчистке винчестера; "хорошим интерфейсом" в такой ситуации начинает считаться то, что позволило за эту пару минут получить "крутой" результат. Пользователю, который два раза в жизни запускал пиратский фотошоп, чтобы закрасить "штампом" прыщи на фотографии, и раз в год набивает в ворде заявление на отпуск, очень трудно объяснить, почему интерфейс фотошопа откровенно плох, а интерфейс ворда чудовищен — ну как же, за пять минтут этот интерфейс дал ему то, что было нужно. А с реальными проблемами сталкиваются только те, кто знает, чего хочет, и пытается получить конкретный результат.

Проблемы же эти связаны с тем, что в программе, которая ориентирована на быстрое получение типового результата, можно быстро получить только этот типовой результат. А при попытке сделать что-то осмысленное "интуитивность" и "пологая кривая обучения" куда-то стремительно испаряются, и интерфейс начинает мешать пользователю своей нелогичной организацией, своей неадекватной терминологией, короче, своей далёкостью от того, что реально делает программа. Классический пример: много ли пользователей пользуются стилями в ворде? Думаю, в лучшем случае единицы процентов. А как сделать в ворде список литературы, такой, чтобы при появлении в его середине нового источника все номерные ссылки на источники в тексте оставались корректными? То-то. Сравните теперь с тем, как это делается в "недружественном" LaTeX.

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

Мне не нравятся современные стандарты интерфейса именно потому, что из-за ориентации на непрофессионала в ряде областей попросту отсутствуют (или вытеснены в маргинальные ниши) удобные профессиональные инструменты; более того, всеобщее стремление к "дружественности" ПО приводит к тому, что портят уже существующие технологии (из свежих примеров — в новых версиях Linux-систем в /etc/fstab стали пихать UUID устройств вместо их имён; осмысленная ручная правка fstab стала из-за этого практически невозможной; говорить же без мата про вещи типа hal попросту нет никаких сил).

Вот ты, Митя, хочешь, чтобы вайфай в Debian настраивался автоматически при попадании устройства в новую сеть. Это прекрасно, и я целиком и полностью за, с одной оговоркой: это не должно усложнить мне руление интерфейсами через ifconfig и прочие полезные утилиты, а также через редактирование файлов в /etc. Система, в которой логику внутреннего устройства принесли в жертву "дружественности" к пользователю (дружественности к начинающему пользователю, не знающему, чего он хочет, на самом деле), у нас уже есть; все, кому нравится такой подход, могут работать в ней.

В общем, мне кажется, что инструмент должен быть удобен тому, кто пользуется им часто и разнообразно. Если этот инструмент при этом будет иметь пологую кривую обучения — хорошо; но это ни в коем случае не первоочередная задача. Автомобили вот, скажем, никто не оценивает по тому, насколько быстро полный чайник может стронуть их с места, не так ли?

Мне повезло: для довольно большого круга задач я нашёл средства, имеющие очень приличный интерфейс. Это Emacs для редактирования текстов, в том числе исходного кода; LaTeX для получения текста со сложным форматированием; оконный менеджер Window Maker; эмулятор терминала Konsole; просмотрщик графических файлов GQview; книгочиталка FBReader (список неполный). Про каждый из этих продуктов, я, пожалуй, берусь рассказать, почему он хорош, если это кому-нибудь интересно.

Да, и ещё: не всякая программа с крутой кривой обучения скрывает возможности быстрой и эффективной работы. Бывают и просто плохие интерфейсы, как, скажем, у GIMP или vi.

P.S. А вообще, чего-то я расписался, а можно было дать всего несколько ссылок:

  1. http://www.humanized.com/enso_demo.php  — демо-ролик софтины, обеспечивающей действительно удобную работу в современных графических средах. Кстати, этот самый Аза Раскин, который директор и главный идеолог Humanized — сын Джефа Раскина, благодаря которому Мак на порядок пригоднее для большинства пользовательских задач, чем любая другая настольная ОС; и опирается в значительной степени на идеи своего отца. Посмотрите обязательно, вот что такое по-настоящему удобный интерфейс.

  2. http://www.wagner.pp.ru/~vitus/articles/user-friendly.html Виктор Вагнер. "О вреде дружественных интерфейсов". Примерно о том же, о чём этот пост, но куда убедительнее и грамотнее, да и автор поавторитетнее меня

  3. http://mydebianblog.blogspot.com/2006/10/blog-post_30.html Аллин Коттрелл. "Текстовые процессоры: глупые и неэффективные". Почему WYSIWYG — отстой, и что не отстой.
Link32 комментария|Оставить комментарий

Снова про SVG [Mar. 30th, 2008|02:50 pm]
[Tags|, , , ]

К написанному ночью.

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

  • Каждый новый кадр анимации тащил с сервера новый файл. Теперь это не так, заодно, кстати, заработала анимация в Опере.

  • Заменил формат фоновой картинки с PNG на JPEG, теперь качать надо в пять раз меньше.


Забавно, конечно, как легко оно всё получается. Таким образом ведь, например, можно делать онлайновые point'n'click квесты в духе незабвенных Gobliiins, которые можно будет размещать на любом бесплатном хостинге, даже самом поганом, только бы он умел отдавать SVG с HTTP-заголовком "Content-Type: image/svg+xml" (а хотя бы даже и нет, встраивание SVG в HTML должно эту проблему решить). Пример аналогичного подхода можно видеть вот в этой программе для презентаций. Более того: можно написать XSL-таблицу, которая будет порождать такие игры из лёгкого человекочитаемого XML с описанием сюжета. А для совсем недружных с головой компьютером даже сделать программу/веб-сервис, которые позволят пользователю сделать игру путём тыкания мышкой.
LinkОставить комментарий

SVG --- сила! [Mar. 30th, 2008|12:21 am]
[Tags|, , , , ]

Точнее, так. Использовать ли продвинутые возможности SVG в серьёзных сервисах — каждый пусть решает сам. С одной стороны SVG это стандарт W3C, он хорошо документирован, отлично подходит для автоматической обработки, легко интегрируется с другими XML-технологиями (XSLT, CSS, об HTML уже не говорю), имеет ясный синтаксис и очень пологую кривую обучения. С другой стороны — разные реализации всё ещё не вполне совместимы, а в IE до сих пор нет поддержки SVG из коробки, нужен плагин. Но что бесспорно — SVG это невероятно кайфовая технология.

Вот этого чувачка, шарящегося по пустыне (осторожно — по ссылке интерактивный скрипт, если он завесит ваш браузер, удалит вашу почту или отформатирует ваш винчерстер, я не виноват!) я сегодня сделал за три часа (включая сюда перерывы на пожрать и почитать френдленту), не имея ни опыта разработки на JavaScript, ни сколько-нибудь глубокого знания собственно SVG. В мануалы практически не глядел, обошёлся примерами: код продуктов на SVG + JavaScript вполне, что называется, self-explanatory. Никаких, тем более платных, навороченных SDK, которые надо изучать неделями: в процессе "разработки" использованы текстовый редактор Emacs, одна штука, и браузер Firefox, одна штука. Но главное — ощущения. Такого соотношения между незначительностью прикладываемых усилий и прикольностью получаемого результата я не помню со времён восьмибитных компьютеров.

Да, разумеется, чтобы увидеть, что же я там наваял, вам понадобятся Firefox или Opera со включённым JavaScript'ом, причём в Опере персонаж не будет анимированным (учитывая качество "анимации", невелика потеря). У меня есть подозрение, в чём там проблема, но сейчас лень разбираться. Пользователи IE, подозреваю, не увидят ничего (не могу проверить за отсутствием под рукой Windoze).

А вот что SVG может вытворять в умелых (а не как у меня, по крайней мере пока, да) руках.

Тетрис: http://croczilla.com/svg/samples/svgtetris/svgtetris.svg
Ещё один тетрис, чуть погламурнее: http://www.codedread.com/yastframe.php
Пасьянс "Косынка": http://www.codedread.com/solitaire.php
Ещё пасьянс: http://www.codedread.com/freecell.php
"Жизнь": http://www.kevlindev.com/alife/life/life_2_0_bw.svg
Поиск стран на неподписанной карте мира: http://files.myopera.com/orinoco/svg/WorldCountries.svg
А здесь вот целый ворох ссылок на SVG-игры: http://torque.oncloud8.com/archives/000473.html

А вот вещи посерьзёнее.
Здесь замечательный сайт о применении SVG в ГИСах: http://www.carto.net/papers/svg/samples/
А здесь статья про GUI на SVG, очень обстоятельная: http://www.svgopen.org/2004/papers/SPARK/

Для тех, кто захочет попробовать что-нибудь сделать на SVG сам, добавлю, что на intuit.ru недавно появился курс по SVG.

P.S. Да, если вдруг кому понадобится — вот все используемые скриптом по первой ссылке файлы в одном тарболле [1M], вот они же без мегабайтного файла с фоновой картинкой [28k].
И ещё: найдётся хоть кто-нибудь, кому захочется дополнительных слов про то, как оно работает, я готов расписать процесс "разработки" (если это слово применимо к двухкилобайтной программе) по шагам.
P.P.S. На всякий случай. Управляется персонаж клавишами со стрелками.
UPD 30.03.08 14:51 Кое-что поправил.
LinkОставить комментарий

λ-экстремизм [Nov. 1st, 2007|01:51 am]
[Tags|, , , , ]

Сегодня, разбираясь со студентами, что мы можем и чего не можем сделать с функцией, то ли вспомнил, то ли придумал замечательную формулировку:

В принципе, все управляющие конструкции, кроме лямбды — это синтаксический сахар.

Строго говоря, для Питона, который мы используем в качестве рабочего языка, это не совсем так (и даже совсем не так): питоновская lambda очень слабенькая, а в Питоне-3000 будет, как обещает камрад ван Россум, ещё слабее (я уже не говорю о том, что в языке без оптимизации хвостовой рекурсии попытка писать без for и while даст нам, мягко выражаясь, не слишком эффективный код).

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

Может, стоило всё-таки делать курс на основе Scheme? Хотя это была бы жесть, да… к тому же для Scheme, увы, нет GUI-библиотеки, хотя бы сравнимой с PyQt4.
Link3 комментария|Оставить комментарий

navigation
[ viewing | most recent entries ]