Показаны сообщения с ярлыком books. Показать все сообщения
Показаны сообщения с ярлыком books. Показать все сообщения

четверг, 23 апреля 2015 г.

Д. Босуэлл, Т. Фаучер - Читаемый код или программирование как искусство

Небольшая книжка, в которой много полезных мелочей.

Например, более точные варианты названий для типичных функций:

send - deliver; dispatch; announce; distribute; route
find - search; extract; locate;recover
start - launch; create; begin; open
make - create; setup; build; generate; compose; new

Именованные интераторы для циклов (ui лучше, чем просто i).

Дополнительные постфиксы - size_mb, html_utf луче, чем size и html.

first/last - это включающие, а begin/end - исключающие границы.

Пометы в комментах:

TODO - задумано, но не сделано.
FIXME - известно, что есть проблема
HACK - неэлегантное решение проблемы
XXX - серьёзная проблема

Уже второе недоумение насчёт цикла do-while (которые непонятно, зачем нужен).

Разоблачён миф о том, что из функции должен быть только один выход. Он тянется из чистого C, где нередко забывали вычистить память перед выходом. Но c тех пор появились исключения, деструкторы и очистка мусора. А в C простительно писать goto cleanup;

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

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

В JavaScript и Python переменная, объявленная внутри цикла, будет видна и снаружи. Вообще, область видимости переменных надо сужать. А самые лучшие переменные - константы, поэтому лучше всего менять их один раз.

Переменные объявлять где используются, а не в начале блока. Объявлять всё в начале блока - дурная традиция из Pascal и раннего C (хотя в C99 уже разрешили объявлять где угодно).

Также есть приятные куски кода:

Макрос для C++, чтобы убрать warning для неопределённого конструктора копирования или оператора присваивания.

#define DISALLOW_COPY_AND_ASSIGN(ClassName) \
  ClassName(const ClassName&); \
  void operator=(const ClassName&);

И потом писать:
class ClassName {
  private:
     DISALLOW_COPY_AND_ASSIGN(ClassName);
     ...
  public:
     ...
};

среда, 23 июля 2014 г.

А. И. Орлов - Прикладная статистика (конспект)

Самое время освежить свои знания по другому учебнику. Читаю А. И. Орлов - Прикладная Статистика (М. Алгоритм 2004)

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

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


Введение

3 раздела статистики (по Гнезденко): 1) сбор статсведений 2) их исследование 3) разработка приёмов для 1) и 2)
3 – и есть матстатистика.

Теор. Вер. – XVII в. Метод наименьших квадратов Гадеса – 1794.

Современный этап – 1990, журнал Biometrica. Первая треть XX в.  - применяют в основном параметрическую статистику.

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

На 1990-ый акутальны для специалиста – ~100 000 публикаций. Даже в наиболее полном 3-хтомнике Кендалла-Стюарта учтены 2 тыс. Учёные уходят в тупиковые ветки и беспомощны с реальными данными. Фактически, включается адаптационный механизм торможения науки.
Результаты, не попавшие в учебник, как правило, забываются. Человек, получив образование, либо забивает и пользуется обломками данных, либо, если идёт в науку, копает только свой узкий канал (если копает). В итоге – ВУЗовские учебники до сих пор на уровне 40-60-х XX в. Публикации – аналогично.
В своё время сам Орлов работал с оценками параметрических семейств. Но ф-ция так правдоподобия, эффективности оценок, неравенство Рао-Крамера. Но этот подход – тупиковый, реальные данные не подчиняются каким-либо параметрическим семействам.

Прикладная делится на: математика, методы сбора данных, кодинг.

Матстатистика давно замкнулась внутри себя и не реагирует на соседние области. В этом она аналогична геометрии – ныне это ритуальный предмет и землю давно меряют геодезисты. Пересечение высот треугольника мало кому интересно. Поэтому учебные часы сокращаются, при поступлении больше не спрашивают. А это путь в историю науки, вслед за теологией.
Большинство методов в Statgraphics/SPSS/Statistica в учебниках просто нет.

среда, 19 сентября 2012 г.

Georges Simenon – Le Chien jaune

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

Прочитал вот это издание:

Сам автор утверждает, что романы, вроде этого, он писал за 3 дня. Что ж, 3 дня “Жёлтого пса” оказались просто превосходными. Экранизировали книгу почти сразу, а в наши дни она читается ничуть не хуже, чем в 1931.

Так и появляется неожиданная классика жанра.

Jens Köhn – Die Etruskier. Kinder des Tunia

Ещё одна книга из серии “Alte Kulturen am Mittelmeer” – как и предыдущие про критян и микенцев. Книжки про финикийкев в магазине уже не было – только эти три.

Издана в 1991, ещё до орфографической реформы. Единственный серьёзный недостаток – на странице 4 в качестве примера этрусской письменности изображена лемносская стела, которую всё-таки относят к пеласгам или тирсенам.

понедельник, 17 сентября 2012 г.

Р. Смаллиан – Молчаливое Дао

Смаллиан – это такой Станислав Лем, только от математики. Советские дети помнят его по незабываемой “Как же называется эта книга?”. А ещё была “Алиса в Стране Смекалки” (“Королева думает, что Король думает, что Королева думает, что Король думает, что Королева не в своем уме…”).

Востоковеды этой книгой будут, пожалуй, недовольны. Ведь Смаллиан произвольно смешивает самые разные традиции в трактовке Дао! И это в то время, когда сами исследователи не уверены, читал ли Чжуан-цзы книгу Лао-цзы, несмотря на принадлежность к общей традиции. Дао – оно очень разное. У Лао-цзы – это “утроба”, из которой течёт всё сущее (т.е., женщина), у Чжуан-дзы – Великий Мастер, Кузнец, который отливает в своём горниле все предметы мира (т.е., мужчина, а утроба – не больше, чем его инструмент), а у конфуцианцев – “приоритетное направление” (“нет дорог, есть но направления”). Неужели он их не различает?

Я думаю, как раз для этой книги такое разделение и не важно. Смаллиан не исследует даосим. Он пытается найти там термины и рассуждения, чтобы объяснить явления, для которых ему не хватает слов европейской традиции. Примерно как Джек Лондон обнаруживал в монологе Чжуан-цзы про бабочку Белую Логику алкоголика. Или как я сейчас смотрю на перевод “Джона, Ячменное Зерно” и не могу найти главу, в которой приводится эта цитата – хотя точно помню, что она там была.

Не следует осуждать битников за то, что они заимствовали “неправильный” дзен-буддизм. Как будто в Японию буддизм приходил “правильным”! Даже христианство мутирует, превращаясь в надстройку над местными поверьями. Что уж говорить о методе. В самой Японии, судя по “Золотому Храму”, 90% дзена – не больше, чем музейные экспонаты.

Не страшно узнать даосизме из “Дао Винни-Пуха”. Страшно думать, что это лучшая книга по теме.

среда, 29 августа 2012 г.

Дж. Х. Рейнвотер – Как пасти котов

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

Где-то в книге скрывалась история о том, как проектный менеджер Джон завалил проект, потому что даже не пытался понять, что там происходит. Я так и не смог её разыскать. Видимо, она была не очень связана с той главой, в которую её поместили.

Зато я нашёл другую хорошую цитату и выписываю её отдельно, потому что она мне очень понравилась.


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

Возможно, ради неё и стоило читать всю книгу

суббота, 30 июня 2012 г.

Detlef Rössler – Mykene. Burg des Agamemnon

Книга из той же серии, что упомянутая раньше Kreta. Insel des Minos. Идём хронологически – сначала критяне, потом завоевавшие их минойцы, а дальше будут этруски из той же серии.
Скроена по тому же принципу, что предыдущая:

  1. Как раскопали
  2. Как жили цари
  3. Как велось хозяйство
  4. Как жил народ
  5. Каким богам поклонялись
  6. Как пришли завоеватели (в случае критян – минойцы, в случае минойцев – дорийцы) и всех завоевали

среда, 6 июня 2012 г.

Book: Reinhard Witte - Kreta. Insel des Minos

Book: Reinhard Witte - Kreta. Insel des Minos (Der Kinderbuchvelag. Berlin. Illustrationen von Ludwig Winkler).


There're 2 more books from the same serie to read.

Reinhard Witte – Kreta. Insel des Minos

Книга про древних критян. Приятно, что авто не только пересказал все положенные легенды, но и хорошенько расписал порядок жизни царей и простых критян, включая их равзлечения и культуру.

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

Интересно, что гомеровские цитаты я понимал легче, чем весь остальной текст.

вторник, 22 мая 2012 г.

Books: Паттерны, сэр!

Кто-то издаёт толстенные тома, в которых переводит стандартные паттерны из известной книжки на C#, Java, Python...

А кто-то новые печёт!

четверг, 17 мая 2012 г.

Book: Достоевский - Игрок

Та самая книга, которую Достоевский надиктовал за 25 дней. Короче, чем "Село Степанчиково", "Неточка Незванова" и "Двойник", но длиннее, чем "Бедные люди". Чтобы усилить жанровую чересполосицу - это считается романом (а иногда и "Белые ночи" считают романом), в то время как "Вечный муж" (такого же размера) - рассказ.

Сложно сказать, насколько каторжной была работа: Достоевский диктовал с 12 до 4, т.е. 4 часа в день.

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

Очень достойно и захватывающе. Радует la baboulinka и впечатляет раздолбайство главного героя, который может выиграть деньги, но тратит их на парижское житьё пресловутой mademoiselle Blanche. Нету безысходного мрака и сырости, которым шибает нас из школьной программы, где "Белые ночи" и "Преступление и наказание". Просто срыв резьбы и падение, падение, падение.

Словом, Достоевский, конечно, велик. Несмотря на школьную программу.

среда, 9 мая 2012 г.

Book: Программист-прагматик - 2, гл. 3-8

17. Сохраняйте данные в виде простого текста. Так проще править руками

18. Графические интерфейсы:

преимущество - WYSIWYG - получаешь то, что видишь

недостаток - WYSIAWYG - получаешь только то, что видишь

Поэтому любите командную строку, а в ней - cygwin или даже UWin.

19. Используйте 1 редактор, но по максимуму. Требования: настраиваемость, расширяемость, программируемость

20. Отлаживать без паники. Не обвинять, а исправлять. Не предполагайте - доказывайте.

21. Добиться воспроизводимости, и только потом чинить. Метод “резинового утёнка”

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

23. Совершенных программ не бывает. Бывают программы, которые легко поддерживать.

24. Пользуйтесь исключениями только в исключительных случаях.

25. Если запутались - применяйте закон Деметера. Но без фанатизма.

26. Настройка лучше интеграции. Текст программы - абстракция, метаданные - подробности.

27. Проектируйте, не забывая о службах - некоторые процессы так и просятся, чтобы их распараллелили. Для распределённых приложений - концепция доски объявлений.

28. Реорганизуйте чаще, раньше, регулярней.

29. Проектируйте с учётом тестирования. Тестируйте сами, иначе это будут делать пользователи. Применяйте, если надо, журнал или даже секретное отладочное окно (пользователю не говорить).

30. Работайте с пользователем, чтобы говорить на его языке.

31. Абстракции живут дольше потребностей. Поэтому, например, проекту нужен иногда глоссарий - что как называется.

32. Не размышляйте вне ящика = найдите его. Все возможные решения, включая безумные - в список и на проверку. Так же выпишите ограничения.

33. Вопросы, если упёрлись:

    Можно ли сделать проще?
    Мы решаем проблему, или увязли в деталях?
    Почему это проблема?
    Что делает её сложной?
    Нужно ли это?

34. Начинайте, когда знаете, что будете делать. Иначе дров наломаете.

35. Автоматизируйте всё.

    Генерация текстов - Perl
    Системные дела - Cmd, Cygwin (теперь и PowerShell)
    Тестирование интерфейса - есть и для этого средства (в наше время - iMacro, AutoIt)

36. Тестируйте беспощадно. Тестируйте в т.ч. сами тесты - специально поставьте неправильный вывод и т.п. и проверьте, найдёт ли его текст.

понедельник, 7 мая 2012 г.

Book: Программист-прагматик - 1. гл. 1-2

Книга довольно старая (эпохи, кажется, Windows 2000) и очень плохо переведена (есть глава “Мой исходный текст съел кот Мурзик”).

Набор инструментов типичен для того времени - C++, CORBA, Perl и т.п.

Внимательно читать не стоит, а вот просмотреть - надо. В книге есть мысли, которые просто в голову не приходили.

Полезное:

1. Предлагать варианты решения проблемы, а не отговорки.

2. “Закон разбитых окон” выполняется и для программ. Если есть ошибки и нестабильности - очень скоро их станет намного больше.

3. Качество должно быть одним из требований.

4. Читайте по одной технической книге ежеквартально. И другие книги - не относящиеся к технической литературе.

5. Экспериментируйте с различными операционными системами.

6. Оставайтесь в курсе событий - интернет и т.п.
(Советует журналы и news-группы - в духе времени. Сейчас закрылись и основной журнал по C++, и The Perl Journal. Статьи из последнего можно найти в Интернете по метке TPJ).
и критически осмысляйте всё, что нашли и услышали.

7. “Лучше быть проигнорированным, чем недооценённым”. Беседуйте с гуру и с потребителями.

8. Принцип для выступлений WISDOM:

- Чему вы хотите научить?

- Какова их заинтересованность?

- Насколько искушена аудитория?

- Насколько детальным должно быть выступление?

- Кто должен обладать информацией?
 
- Как мотивировать слушателей?

9. DRY - Don’t repeat yourself. Важно писать код так, чтобы его было легко использовать повторно. Тогда отпадает большинство эпизодов с дублированием.

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

11. Из 10 - подобные функции могут быть объеденены в Strategy, а глобальные данные - в Singletone

12. Обратимость. Вытекает из предыдущего. Помним, что не существует окончательных решений. Если чтобы заменить MS SQL на Oracle надо переписывать всё - это не порядок.

13. Чтобы стрелять ночью прицельно, используют трассирующие пули, которые светятся в темноте. Куда попадёт трассирующая - попадёт и обычная. Используйте “трассирующие” предложения, чтобы понять, что от вас хотят.

14. Прототипы (не работает, но показать можно):
- Архитектуры (классы-заглушки)

- Новых функциональных возможностей для системы (интерфейс, который не работает)

- Структуры или содержания внешних данных

- Компонентов

- Рабочих характеристик

- Интерфейса

15. “Границы моего языка есть границы моего мира”.

(Неспроста Хайдеггер искал истину в языке, иногда получая слова в духе Хлебникова)

Программируйте как можно ближе к предметной области вашей задаче. Если команды можно упаковать в классы-“пакеты” - пакуйте! Т. ж. хорошо писать мини-языки, там, где они могут пригодиться.

Если язык парсится, его лучше описать в BNF, которая годится для всех контекстно-свободных грамматик (Perl, например,ей не опишешь)

Т.к. срок службы большинства прикладных программ превышает ожидаемый, лучше, чтобы язык был гибче и удобочитаемей. Ближе к настройкам rc, чем к настройкам sendmail.

16. Проводите оценки по следующим градациям:

1-15 дней - дни

1 - 8 недель - недели

8 - 30 недель - месяцы

> 30 недель - надо хорошенько подумать

Если вы уверены, что проект займёт 125 рабочих дней (= 25 недель) - говорите “примерно 6 месяцев).

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

пятница, 4 мая 2012 г.

Life: Музыка паттернов проектирования

В "Русских Ночах" Одоевского очень много разговоров о музыке. В те времена рассуждали примерно так: у животных нет понятия о красоте, хотя есть понятие о логической связности мира (т.е., разум). Но человеку красота доступна. Не в этом ли его тайна? И ещё - из всех искусств музыка выглядит наиболее "бесполезной" и ни на что в материальном мире не похожей, в отличии от архитектуры, скульптуры, литературы и живописи. Не в ней ли тайна прекрасного?

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

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

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

Кто знает - может, ремесло программиста станет тогда более возвышенным. А их код - более гармоничным.

Ведь программирование - это тоже искусство. Это выражается, например, в том, что программисты обычно сами не могут объяснить, как они делают то, что делают. Как у композиторов или у исполнителей - у величайших есть своя манера. Для кого-то и Perl недостаточно гибок, а для кого-то - например, для Линуса Торвальдса - и C++ есть излишество, эксплуатирующее достоинства чистого C.