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

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Author(s): Энди Орам. Грег Уилсон (под редакцией)
Publisher: Питер
Year: 2011

Language: Russian
Pages: 624
Tags: Библиотека;Компьютерная литература;Культура и искусство программирования;

Обложка......Page 1
Введение......Page 16
Глава 1. Поиск соответствий с помощью регулярных выражений......Page 17
Практика программирования......Page 18
Глава 2. Дельта-редактор Subversion: Интерфейс и онтология......Page 27
Управление версиями и преобразование дерева......Page 28
Выражение различий в деревьях каталогов......Page 32
Интерфейс дельта-редактора......Page 33
Мой самый красивый код......Page 46
Усиление отдачи при сокращении размеров......Page 48
Проблема: Данные веб-блога......Page 60
Регулярные выражения......Page 61
Подключение регулярных выражений к работе......Page 62
Ассоциативное устройство хранения......Page 66
А нужна ли оптимизация?......Page 69
Проблема: Кто выбирал, что и когда?......Page 70
Двоичный поиск......Page 72
Сильные и слабые стороны двоичного поиска......Page 74
Выход из цикла......Page 75
Ранжировка результатов......Page 76
Поиск в Интернете......Page 77
Вывод......Page 78
Роль XML-проверки......Page 79
Проблема......Page 80
Версия 1: Простейшая реализация......Page 82
Версия 2: Имитация BNF-нотации ценой O(N) операций......Page 83
Версия 3: Первая оптимизация O(log N)......Page 85
Версия 4: Вторая оптимизация: исключение двойной проверки......Page 86
Версия 5: Третья оптимизация 0(1)......Page 88
Версия 6: Четвертая оптимизация: кэширование......Page 93
Мораль всей этой истории......Page 95
Глава 6. Платформа для проведения комплексного теста: красота, полученная за счет хрупкости конструкции......Page 96
Платформа для приемочных испытаний, выполненная в трех классах......Page 97
Сложности конструкции платформы......Page 99
Открытая платформа......Page 101
Насколько просто может быть устроен HTML-napcep?......Page 102
Вывод......Page 105
Глава 7. Красивые тесты......Page 107
Изрядно поднадоевший двоичный поиск......Page 108
Знакомство с J Unit......Page 111
Подробный разбор двоичного поиска......Page 113
Проталкивание через границы......Page 114
Элемент случайности в тестировании......Page 118
Беспокойства о производительности......Page 124
Вывод......Page 126
Глава 8. Динамическая генерация кода для обработки изображений......Page 128
Глава 9. Нисходящая иерархия операторов......Page 152
JavaScript......Page 153
Таблица обозначений......Page 154
Лексемы......Page 155
Старшинство......Page 156
Выражения......Page 157
Инфиксные операторы1......Page 158
Операторы присваивания......Page 160
Область видимости......Page 161
Операторы......Page 163
Функции......Page 166
Литералы массивов и объектов......Page 168
Что нужно сделать и о чем подумать......Page 169
Глава 10. Поиск методов ускоренного подсчета заполнения......Page 170
Основные методы......Page 171
«Разделяй и властвуй»......Page 172
Другие методы......Page 175
Сумма и разница подсчета заполнения двух слов......Page 176
Сравнение подсчетов заполнений двух слов......Page 177
Подсчет единичных битов в массиве......Page 178
Применение......Page 183
Глава 11. Безопасная связь: технология свободы......Page 186
С чего все начиналось......Page 187
Разбор проблем безопасного обмена сообщениями......Page 189
Ключевая роль удобства и простоты использования......Page 191
Основы......Page 194
Конструктивные цели и решения......Page 195
Конструкция основной системы......Page 196
Блок тестирования......Page 199
Функциональный прототип......Page 200
Завершение, подключение, обкатка......Page 201
Обновление хранилища электронной почты......Page 202
Сохранность дешифрованной информации......Page 204
Гималайский хакинг......Page 205
Организация защиты кода......Page 207
Ревизия Crypt::GPG......Page 208
Скрытые манипуляции......Page 211
Скорость тоже имеет значение......Page 213
Конфиденциальность связи для обеспечения прав человека......Page 214
Хакинг цивилизации......Page 215
Глава 12. Становление красивого кода в BioPerl......Page 217
BioPerl и модуль Bio::Graphics......Page 218
Пример выходной информации Bio::Graphics......Page 219
Требования, предъявляемые к Bio::Graphics......Page 221
Процесс проектирования Bio::Graphics......Page 223
Установка параметров......Page 227
Выбор классов объектов......Page 229
Обработка параметров2......Page 232
Пример кода......Page 237
Динамические параметры......Page 238
Расширение Bio::Graphics......Page 242
Поддержка веб-разработчиков......Page 243
Поддержка изображений типографского качества......Page 244
Добавление новых глифов......Page 245
Заключение и извлеченные уроки......Page 247
Глава 13. Конструкция генного сортировщика......Page 249
Пользовательский интерфейс программы Gene Sorter......Page 250
Поддержание диалога с пользователем по Интернету......Page 251
Небольшой полиморфизм может иметь большое значение......Page 254
Фильтрация, оставляющая только значимые гены......Page 257
Теория красоты кода в крупных формах......Page 258
Вывод......Page 262
Глава 14. Как первоклассный код развивается вместе с аппаратным обеспечением (на примере Гауссова исключения)......Page 263
Влияние компьютерной архитектуры на матричные алгоритмы......Page 264
Декомпозиционный подход......Page 266
Простая версия......Page 267
Подпрограмма DGEFA библиотеки LINPACK......Page 269
LAPACK DGETRF......Page 272
Рекурсивное использование LU......Page 275
ScaLAPACK PDGETRF......Page 278
Многопоточная обработка для многоядерных систем......Page 283
Несколько слов об анализе ошибок и итоговом количестве операций......Page 286
Дальнейшее направление исследований......Page 287
Дополнительная литература......Page 288
В чем, по-моему, заключается красота программного кода......Page 290
Представление библиотеки лаборатории ЦЕРН......Page 291
Внешняя красота......Page 292
Внутренняя красота......Page 298
Заключение......Page 304
Глава 16. Модель драйверов ядра Linux: преимущества совместной работы......Page 305
Скромное начало......Page 306
Превращение в еще более мелкие части......Page 311
Расширение масштаба до тысяч устройств......Page 314
Свободно присоединяемые мелкие объекты3......Page 316
От кода к указателям......Page 317
От аргументов функций к аргументам указателей......Page 320
От файловых систем к уровням файловой системы......Page 324
От кода к предметно-ориентированному языку......Page 326
Мультиплексирование и демультиплексирование......Page 328
Уровни навсегда?......Page 330
Глава 18. Реализация словарей Python: стремление быть всем во всем полезным......Page 331
Что делается внутри словаря......Page 333
Когда специализация приводит к издержкам......Page 335
Конфликтные ситуации......Page 337
Изменение размера......Page 338
Итерации и динамические изменения......Page 339
Благодарности......Page 340
Глава 19. Многомерные итераторы в NumPy......Page 341
Основные сложности обработки N-мерных массивов......Page 342
Модель памяти, занимаемой N-мерным массивом......Page 343
Происхождение итератора NumPy......Page 345
Перемещение итератора......Page 346
Завершение работы итератора......Page 347
Настройка итератора......Page 348
Определение показаний счетчика итератора......Page 349
Структура итератора......Page 350
Интерфейс итератора......Page 352
Использование итератора......Page 353
Итерация по всем, кроме одного измерения......Page 354
Множественные итерации......Page 355
Истории......Page 357
Вывод......Page 358
Глава 20. Высоконадежная корпоративная система, разработанная для миссии NASA Mars Rover......Page 359
Миссия и совместный информационный портал......Page 360
Потребности миссии......Page 361
Архитектура системы......Page 363
Исследование конкретного примера: Служба информационных потоков3......Page 366
Глава 21. ERP5: Конструирование с целью достижения максимальной адаптивности......Page 381
ERP5......Page 382
Базовая платформа Zope......Page 384
Понятия, используемые в ERP5 Project......Page 388
Программирование ERP5 Project......Page 390
Вывод......Page 394
Глава 22. Ложка грязи......Page 396
Пример мотивации......Page 416
Модель программирования MapReduce......Page 419
Распределенная реализация MapReduce......Page 422
Расширения модели......Page 426
Заключение......Page 427
Благодарности......Page 428
Приложение: Решение задачи подсчета слов......Page 429
Глава 24. Красота параллельной обработки......Page 431
Простой пример: банковские счета......Page 432
Программная транзакционная память......Page 435
Реализация транзакционной памяти......Page 441
Задача Санта-Клауса......Page 444
Основная программа......Page 448
Размышления о языке Haskell......Page 452
Вывод......Page 453
Благодарности......Page 454
Глава 25. Синтаксическая абстракция: расширитель syntax-case......Page 456
Краткое введение в syntax-case......Page 460
Алгоритм расширения......Page 463
Преобразование......Page 474
Пример......Page 475
Вывод......Page 477
Глава 26. Архитектура, экономящая силы: объектно-ориентированная рабочая среда для программ с сетевой структурой......Page 479
Типовое приложение: служба регистрации......Page 481
Объектно-ориентированное проектирование рабочей среды сервера регистрации......Page 484
Определение общих свойств......Page 486
Увязка вариантов......Page 487
Связывание воедино......Page 489
Реализация последовательных серверов регистрации......Page 492
Реактивный сервер регистрации......Page 493
Реализация сервера регистрации с параллельной обработкой......Page 497
Вывод......Page 504
Предыстория проекта......Page 505
Предоставление служб внешним клиентам......Page 506
Определение интерфейса службы......Page 507
Маршрутизация службы с использованием шаблона Factory......Page 510
Обмен данными с использованием протоколов электронного бизнеса......Page 512
Вывод......Page 517
Глава 28. Красивая отладка......Page 518
Отладка отладчика......Page 519
Системный подход к процессу отладки......Page 521
Проблемы поиска......Page 522
Автоматическое обнаружение причины отказа......Page 523
Дельта-отладка......Page 525
Минимизация входных данных......Page 528
Проблема прототипа......Page 531
Дополнительная информация......Page 532
Глава 29. Отношение к коду как к очерку......Page 533
Глава 30. Когда кнопка остается единственным предметом, связывающим вас с внешним миром......Page 538
Основная модель конструкции......Page 539
Дерево......Page 543
Длинный щелчок......Page 544
Динамическое изменение заполнения дерева......Page 548
Простой набор текста......Page 549
Прогнозирование: завершение слова и следующее слово......Page 550
Шаблоны и замена......Page 551
Реализация кэш......Page 552
Распространенные и избранные слова......Page 553
Буфер набора, редактирование и прокрутка......Page 554
Буфер обмена......Page 556
Макрокоманда......Page 557
Будущие направления......Page 558
Глава 31. Emacspeak: полноценно озвученный рабочий стол......Page 560
Создание речевого вывода......Page 561
Говорящий Emacs......Page 562
Генерация полноценного речевого вывода......Page 564
Использование Aural CSS (ACSS) для стилевого оформления речевого вывода......Page 569
Добавление звуковых обозначений......Page 570
Беспроблемный доступ к интерактивной информации......Page 574
Краткий отчет......Page 581
Вывод......Page 584
Благодарности......Page 585
Глава 32. Код в развитии......Page 586
Применение «книгообразного» вида......Page 587
Одинаковое должно выглядеть однообразно......Page 589
Опасность отступов......Page 590
Перемещение по коду......Page 591
Используемый нами инструментарий......Page 592
Изменчивое прошлое DiffMerge......Page 594
Вывод......Page 596
Дополнительная информация......Page 597
Нелегкий путь......Page 598
Предупреждение для тех, кто боится скобок......Page 599
Три в ряд......Page 600
Скользящий наклон......Page 603
Неравенство в треугольнике......Page 605
Блуждания по извилистостям......Page 606
«Что вы говорите!» — то есть «Ага!»......Page 608
Дополнительная информация......Page 610
Послесловие......Page 612
О тех, кто работал над книгой......Page 614