Saturday, October 23, 2010

Powerless PowerPoint

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

На фотографии - учителя в поисках учеников в горах Курдистана, каждый со своей доской (blackboard) и мелком в кармане.
Уже обсуждалось, насколько важно выступающему с докладом или презентацией использовать доску, флипчарт или сенсорный экран, для того, чтобы, рисуя на ходу диаграммы или упрощенные картинки, иллюстрировать свой материал, убеждать аудиторию и отвечать на вопросы.
Оказывается, рисование на доске во время выступления важно не только с точки зрения рисунка. Не менее важны жесты, которые вы совершаете, рисуя во время выступления. Жестам и позам посвящаются специальные разделы тренингов, обучающих менеджеров и ведущих инженеров искусству выступать публично. Но не канцлеров. Вспомните, как иногда складывает руки госпожа Меркель, примерно так, но ниже пояса,

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


Дальше самое интересное. Как пишет Rafael Nunez в “Do Real Numbers Really Move? Language, Thought, and Gesture: The Embodied Cognitive Foundations of Mathematics”, жесты преподавателя физики или математики восполняют формальные описания (формулы) недостающей информацией. Она не упущена, просто нет средств для ее выражения. Например, предел бесконечного ряда в книге R.Courant & H.Robbins “What is Mathematics?” описывается так: “We describe the behavior of Sn by saying that the sum Sn approaches the limit 1 as n tends to infinity, and by writing
1=1/2+1/2^2+1/2^3+1/2^4+...”
Комментируя приведенное выражение, Rafael Nunez пишет: “если взглянуть на выражение внимательно, то можно увидеть, что оно описывает несколько фактов, касающихся чисел и результата дискретных операций над числами, но нет ничего о понятии движения. Нет ничего, что описывало бы approaching и tending”. Думаю, добавление знака суммы и стрелки устремления n (которое отсутствует в выражении) к бесконечности улучшает ситуацию. В статье дается еще несколько примеров, а затем показывается, что именно жест выступающего играет определяющую роль, добавляя “движение”, внося информацию  об изменениях и “стремлениях”. Так, профессор математики на фотографиях ниже говорит об осцилляции значений последовательности с помощью горизонтального движения правой руки.

Сам я обучался безжестовой “культуре” речи, хотя, и не очень успешно. Учительница по литературе многократно говорила нам - “Не размахивайте руками, когда говорите, это некультурно”, о чем я простодушно заявлял на первых порах лекторам, обучающим нас искусству презентаций.
Конечно, размахивая руками, можно разбить стакан, вытеснить смысл сообщения эмоциями, то есть, потерять внимание аудитории и лишиться понимания ею материала. Но то - крайний случай.

Wednesday, October 20, 2010

Член Советского политбюро Стив Джобс

Стив Джобс на крыльях успеха (компания заработала почти в 2 раза больше в третьем квартале по сравнению с тем же периодом прошлого года) раскритиковал Гугловский Андроид, а заодно и Микрософтовский "играй на здоровье" (мой свободный перевод PlayForSure), хотя последний не имеет отношение к открытым системам (интересно, что MS открестилась от проблем лицензирования, написав, что лицензия написана плохо по недосмотру неопытного сотрудника - "license was poorly written due to an oversight by a junior Microsoft employee"), и провозгласил: "Открытые системы не всегда выигрывают".
Theinquirer мгновенно отреагировал и напомнил, что Советское политбюро твердило то же самое "Open systems don't always win" до ноября 1989 года - "No doubt many octogenarian former members of the Soviet Union's politburo were telling themselves the same thing about Western societies, right up until November 1989."

Sunday, October 17, 2010

Как говорят, на прошлой неделе состоялись 2 важных визита в Москву: А.Шварценеггера, наверное, вы его встречали в метро, и Б.Страуструпа.
Я поучаствовал в мастер-классе Б.Страуструпа “Advanced Programming Techniques”, переведенное название (уверен, что В.Павловым) “Виртуозное программирование”. Семинар состоялся 13-го октября во Дворце культуры МГТУ с 8:30 до 14:00. Он был частью (лакомый кусочек для российских программистов) недельной конференции SECR 2010. Вел конференцию Владимир Павлов, многие хорошо помнят его по ярким и темпераментным проектам и тренингам в Intel. 


Несколько фотографий здесь

Бьярне Страуструп, далее БС


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

Семинар, он же мастер-класс и workshop

Материал предназначен для знающих основы С++, не для экспертов. Кажущиеся простыми утверждения и примеры кода в нем не должны обманывать, они являются фундаментальным в написании надежного и эффективного кода. На это БС и обращал внимание слушателей.


Главная идея презентации заключается в следующем
  • The key to reliability and perf are simple “lightweight”classes, type safety, absence of direct pointer use, and inlining.
  • without libraries every task is difficult and tedious
  • the tutorial focuses on the language features and programming we use to design, implement and use good libraries
  • my aim is improved understanding
  • my assumption is that you are a programmer who wants to deliver quality systems, not an academic
По плану, семинар должен был бы представлен в 3 частях:
  • C++, mapping to the machine, error handling
  • Generic programming, classes and class hierarchies
  • C++0x summary
это 128 слайдов в течение 4 часов вместе с вопросами. Но неполадки с проектированием слайдов и задержка начала семинара скомкали и укоротили выступление. Ниже - коротко и схематично, что из этого получилось. Вам встретятся также тексты нескольких слайдов, как это уже случилось выше.

Свойства языка не интересны, интересны технологии программирования, проектирование, и стиль.
  • A prog lang exists to help people express ideas
  • The primary value of a prog lang is in the app written in it
  • Ideals: work at the highest  feasible level of abstraction, represent concepts directly in code, represent relationships among concepts directly - hierarchical relationships (OOP), Parametric relationships (Generic programming)
Тысячи языков программирования, каждый (в действительности, многие) действует изолированно в изолированном окружении.
Последние 50 лет появлялось около 2 тыс языков в десятилетие
Почему не один язык. Картинка на слайде иллюстрирует как под действием языков различного уровня абстракций сформировался С++ и как он эволюционирует согласно требованиям разработчиков приложений и взглядам разработчиков языка.

В языке желательно поддержать такой высоты уровень абстракций, который бы был близок к тому, как мы думаем о решении проблемы для того, чтобы представить концепции прямо в коде. С помощью чего этого добиваются?
  • simple user-defined types. Classes.  Amazingly flexible, zero overhead
  • hierarchical organization. Class hierarchies, virtual functions. OOP, fixed min overhead
  • parameterized abstraction. Template. Generic programming, amazingly flexible, zero overhead
Отображение генерируемого кода на архитектуру определяет производительность кода.
  • C++ maps directly onto HW. build-in types fit into registers, matches machine instructions.
  • Abstractions: user-defined types are created by simple composition, zero-overhead principle: what you don’t use you don’t pay for, what you do use, you couldn’t hand code any better.
В вопросе контроля ошибок рассмотрены традиционные способы, затем пришли к полушутливому выводу, что крэш и перезагрузка является лучшим способом реагировать на ошибки в коде. Здесь же БС обратился к аудитории - “думаете сообщение перед абортированием приложения это решение?”.
  • Traditional error handling: error state (errno), error return codes, (err_code,value) pairs, give up
  • Traditional techniques do not integrate well with C++:  errors in constr, in composite objects
  • Caller knows (in principle) how to handle an error, but cannot  detect it
  • Callee can detect an error but doesn’t  know how to handle it
Эволюция контроля ошибок в использовании файла дана в кодах на следующих 3-х картинках.
Первый код никакой обработки не содержит и приведет к крэшу. 


Второй код, уже с исключениями, выглядит правильным, но потенциально опасен тем, что код может быть рассредоточен по телу программы (БС - “число ошибок в программе пропорционально размеру кода”, затем добавил - “и его сложности”) и вы можете упустить закрытие файла, что приведет к утечке ресурсов.

Третий код использует RAII (resource acquisition is initialization) и может считаться надежным

Для надежности программы вы должны знать, что программа по мере выполнения находится в хорошем состоянии (по русски легко спутать с “в хорошей форме”) - “good state”, и состояние не должно быть случайным. Для этого вводится понятие инварианта (вы, конечно, читали об этом у Н.Вирта)
  • to recover from an error we must leave our prog in a “good” state
  • each class has a notion of what is its “good state”, called its invariant
  • an invariant is established by a constructor
Есть несколько уровней гарантии защищенности кода (exception-safety guarantees)
  • Basic guarantee (for all operations): the basic lib invariants are maintained, no resources are leaked
  • Strong guarantee (for some key operations): either the operation succeeds or it has no effects
  • No throw guarantee (for some key operations): the operation does not throw an exception
Пара критических замечаний
  • конструктор может и часто должен порождать исключения
  • деструктор не должен порождать исключения
Даны рекомендации по обеспечению надежности кода
  • decide which level of fault tolerance you need. not every piece of code needs to be exception safe
  • aim at providing the strong guarantee. Keep a good state until you have constructed  a new state, then update
  • always provide the basic guarantee if you can’t afford the  strong guarantee
  • define “good state” (invariant) carefully
  • minimize explicit try blocks
  • represent resources directly: avoid free standing new and delete operations, prefer RAII over code where possible
  • keep code structured, “random code”easily hides exception problems
Тут БС упомянул про ошибку в коде MS, которая просуществовала 17 лет. Причина ее была в выделении инициализирующего кода в отдельную от конструктора функцию.

С++0х
Далее неожиданно и слишком коротко речь пошла о новом стандарте С++0х. БС сказал, что до окончания работы над стандартом осталось 2 митинга в Мадриде, что демократия при принятии решения заставляет работать с каждым членом комитета (около 60 на заседании), а коротко об этой работе можно сказать так
  • slow, bureaucratic, democratic process
  • 22 nations
  • memberships 100-200
  • ISO. started 1990, final draft 2010, will be C++11
Похоже, что главная работа заключается в рассмотрении и отклонении предложений типа “а мне в моих приложениях нужно”, “а в Haskell реализованы”. При создании новой версии С++ руководствовались 2-мя главными целями
  • Make C++ a better language for systems programming and library building
  • Make C++ easier to teach and learn
Вы можете легко найти драфт и множество обсуждений стандарта в интернете.
В короткий перерыв успел купить последнюю книжку Страуструпа и надписать ее у автора.

Далее речь пошла о шаблонах (лучше сказать о generic programming) и стандартной библиотеке с частым упоминанием А.Степанова и даже его дочери (она два года использовала / испытывала STL).
  • A.Stepanov: “Aim: the most general, most efficient, most flexible representation of concepts”
  • Don’t abstract for the sake of abstraction
  • Generalize from concrete example
  • Maintain performance
Templates are great
  • Flexible
  • General
  • Great performance in time and place
  • The language base for modern generic programming in C++
  • The language base for most current high-perf work in C++
  • The language base for template meta-programming in C++
But
  • Brittle: spectacularly bad error message
  • Poor overloading - leading to verbosity
  • Much undisciplined hacking
  • Much spectacularly obscure code
Далее - про итераторы, обеспечивающие прорывную эффективность программирования, про наследование, про высокую производительность кода благодаря шаблонам и inline. В частности, про наследование
Benefit of inheritance. Interface
  • a function expecting a shape can accept any object of a class derived from shape. simplifies use
  • we can add derived classes to a program without rewriting user code
Benefit of inheritance. Implementation
  • simplifies implementation of derived class. common functionality can be provided in one place, changes can be done in one place.
Problems with inheritance
  • anyone can provide a derived class that overrides a virtual function. “insanity is hereditary: you can get it from your kids
  • anyone can provide a derived class with a larger object size. arrays + inheritance = trouble
  • you cannot change a base class after deploying
  • Manipulate a class from a hierarchy through a ptr or ref

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


Накладки
  • Задержка начала семинара почти на час, хотя БС появился раньше, чем в 8:30
  • Во второй половине семинара перестали переключаться слайды. Похоже, презентационный компьютер был включен в сеть через wifi для подсоединения к проектору, терял связь, и просил авторизоваться, когда находил. Тех специалисты раз за разом тупо авторизовались, вместо того, чтобы решить проблему с презентацией. БС сначала шутил, потом перестал. Переходил на ответы на вопросы и пытался продолжить рассказ без слайдов. Ощущение было позорное
  • Невозможно было выпить кофе, то есть, для меня позавтракать, - короткий перерыв и длинная очередь в узкую дверь буфета с 2-мя продавщицами и одной кофе-машиной.
  • Согласно отзывам, синхронный перевод был “кошмарным”
Заданные вопросы. Не понял 2 из них, пометил “?”. В.Павлов сказал, как правильно задавать вопросы.

  • Использование библиотек полных ошибок и небрежного кода. БС: долгосрочное решение - переписывать, краткосрочное - симулировать ресурсы и их ограничения.
  • ? контролируемые исключения. БС: вижу в этом притворство, ни вижу, кто сделал это, даже в Java. Мы не знаем, как это делать.
  • Исключения в call-back. БС: это не проблема исключений, это проблема правильности, анализируйте инварианты в функциях.
  • Возможное разрушение кода в процессе оптимизации, можно ли построить компилятор, чтобы поддержать 2 подъязыка - нижнего и верхнего уровня? БС: я не знаю никого, кто бы пытался сделать такое. Наша задача высокий уровень абстракции с достаточной производительностью кода. DSL может быть использован.
  • Почему нет базового класса для всех исключений? БС: универсальности не существует, возникнут проблемы, если использовать много разных библиотек, конфликт имен, например.
  • Инъекция, например, состояния, как в Java. БС: не нравится, сложно поддерживать.
  • Почему из C++0x исключен concepts? БС: не хватило времени сделать качественно.
  • ? проверка синтаксиса на полный стандарт. БС: не думаю, что многие согласятся, у меня например есть код, которым я не горжусь.
  • Взаимодействие с разработчиками компиляторов. БС: мы разрабатываем стандарт, не может воздействовать на них и запретить их частные расширения языка
  • Компилятор, находящий проблемы на стеке. БС: если вы про массивы, то используйте стандартные контейнеры, использующие динамическую память.
  • ООП сделано 25 лет назад, что дальше? БС: я до сих пор в ООП. Может быть многопоточность.
  • Шаблоны хороши параметризацией, что, если мне нужен один тип сегодня, а завтра обобщенный тип (число)? БС: используйте указатель.
  • Метапрограммирование сложно, как сделать проще? БС: если у вас 5 параметров, то код плохой. мое предпочтение - не больше 3-х. Лямбда в новой версии поможет.
  • Traits, почему только на чтения? БС: const упрощенная версия, с которой мы начали.
  • Вы предпочитаете не изменяемый интерфейс, как насчет функционального программирования? БС: стало популярным, мне нравятся его свойства, но не производительность кода. В С++0х мы ввели лямбда функции.
  • Как часто вы используете unit тестирование? БС: должен использовать чаще.
  • Мне нравится С++, но С лучше. Если официальные данные о сравнении? БС: трудно сравнивать языки. Есть свидетельства в пользу С++.
И все-таки у БС есть чувство юмора, судите об этом по следующей картинке


Tuesday, October 12, 2010

"They can all thank Alan Turing"

Переход на новые технологии, в данном случае “облачные вычисления” зависит от компетентности и заинтересованности (интересов) начальников больших и малых. И наоборот, деятельное отношение к новым технологиям характеризует уровень мышления этих чиновников - земной или заоблачный. Почему, скажем, Озон затягивает внедрение технологий, которые давно используются Амазоном. Или, можно было бы пожелать, чтобы Лужкова сняли не за универсальное “утрату доверия”, а вполне за конкретные дела, например, за попытки разогнать тучи над Москвой.
Что ждет ИТ в течение следующих 10 лет и почему пишет N.Carr в “IT in 2018: From Turing’s Machine to the Computing Cloud”. 
  • Mott and his team are in the process of closing down the 85 data centers that HP has been operating around the world to run its internal systems. They’re being replaced by just sixgiant server farms in the southern United States – four in Texas and two in Georgia. Combined with an effort to rationalize the company’s application portfolio, the data center consolidation is expected to reduce HP’s total IT workforce from 19,000 to 8,000 and trim its IT costs as a percentage of revenues from 4 percent to 2 percent.
  • HP is not the only IT company in the midst of remodeling the way it deploys IT. Over the last decade, IBM has replaced 155 of its traditional data centers with just seven modernized facilities. Last summer, Big Blue announced it would go even further, replacing nearly 4,000 of its servers with just 30 Linux-based mainframes. In the process, the company says, it will slash its application licensing costs and save enough electricity “to power a small town.”
  • Already today, according to one analyst, Google’s parallel-processing grid can carry out a computing job for one-tenth the cost of the systems in a big corporate data center. As the capacity and power of the grid grow, as it becomes the greatest manifestation of Turing’s universal computing machine, more functions will flow onto it.
  • Eric Schmidt once said, “When the network becomes as fast as the processor, the computer hollows out and spreads across the network.”
  • Goodbye “World Wide Web.” Hello “World Wide Computer.
  • As more and more hardware and software have shifted out of companies and into the cloud, the IT department has gone through a fundamental transformation (and has likely taken on a new name).
Желающим вышлю статью в pdf формате.

Sunday, October 10, 2010

Теракт в детской

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

Saturday, October 09, 2010

"Воля это ничем не обусловленная активность"

Один хороший человек посоветовал прочитать статью, написанную О.Бахтияровым, который занимается исследованиями психики в экстремальных условиях. Психолог-экстремолог разрабатывает определенные приемы, которые позволяют решить задачу обеспечиния сохранения самоконтроля в экстремальных ситуациях, в экстремальных состояниях сознания. Российский Дон Хуан в какой-то мере. Побывал на встречах с Реальностью в "горячих точках" со своими методиками. Одно из наблюдений, знакомое нам по литературе ("Война и Мир", например), о том, что обреченный мечен.
У меня есть одна фотография: мы стоим - несколько человек, и только- только появилось ощущение угрозы, - видно, как катится волна напряженности по нашему ряду. Кто-то уже в большей степени включен, кто-то в меньшей. И, среди этого ряда есть человек, совершенно выключенный из ситуации: спокойное, отрешенное выражение лица... В тот момент ему осталось жить десять минут. Он уже фактически "там", - какая-то часть его уже проглочена Смертью.

Опубликовано в "Хроники - том II".

Thursday, October 07, 2010

Уловки вашего мозга

Когда мы рождаемся все части мозга соединены между собой. У некоторых взрослых - незаурядных, часть соединений остается, поэтому у них существует ассоциативная связь, например, между нотами и цветом, между цветом и цифрами.
Очень интересная лекция "Как мы познаем мозг через его же уловки".