Профессиональное программирование. Системный подход

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: 2002

Language: Russian
Pages: 512
Tags: Информатика и вычислительная техника;Информатика (программирование);


Цель книги......Page 18
Для кого предназначена эта книга......Page 19
Профессиональные рамки......Page 20
Три зерна профессионального программирования......Page 21
Инструментальное зерно......Page 22
Базисное зерно......Page 23
Рекомендации по порядку чтения глав......Page 24
Благодарности......Page 25
1.1. Профессионализм в программировании......Page 28
1.1.1.1. Функции профессиональных программистов......Page 30
1.1.1.2. Черты и особенности мышления программистов......Page 31
1.2. Программирование. Что это такое?......Page 33
1.3. Программирование. Чему учиться?......Page 36
1.3.1. Подход на основе рекомендаций ACM/IEEE......Page 37
1.3.2. Точка зрения профессионалов......Page 41
1.3.3.2. Теория программирования......Page 43
1.3.3.3. Математические основы программирования......Page 44
1.4.1. Подход на основе рекомендаций ACM/IEEE......Page 45
1.4.2. Подход Г.С. Цейтина......Page 46
1.4.3. Роль наставника в процессе обучения......Page 47
1.5. Программирование. Искусство, наука или ремесло?......Page 48
1.6. Кризис программирования......Page 51
1.7.1. Отступление «о понятиях, определениях и классификациях»......Page 53
1.7.2. Программа и программный продукт......Page 54
1.7.3. Алгоритмы ,......Page 55
1.7.4. Модели и моделирование......Page 56
1.7.5. Жизненный цикл программного обеспечения......Page 57
1.7.6.1. Проект......Page 58
1.7.6.2. Участники процесса разработки......Page 60
1.7.7. Основная задача профессионального программирования......Page 62
2.1. Основные методологии......Page 66
2.1.2. Ядра методологий......Page 67
2.1.4. Реализационная специфика методологий......Page 68
2.2.1.1. Происхождение, история и эволюция......Page 69
2.2.1.4. Синтаксис и семантика......Page 70

2.2.2. Методология объектно-ориентированного программирования......Page 72
2.2.2.3. Вычислительная модель......Page 73
2.2.2.4. Синтаксис и семантика......Page 74
2.2.2.5. Объектно-ориентированные языки программирования......Page 75
2.2.2.7. Рекомендации по литературе......Page 76
2.2.3.3. Вычислительная модель......Page 77
2.2.3.4. Синтаксис и семантика......Page 78
2.2.3.6. Класс задач......Page 80
2.2.4.2. Методы и концепции......Page 81
2.2.4.4. Синтаксис и семантика......Page 82
2.2.4.6. Класс задач......Page 84
2.2.5.4. Синтаксис и семантика......Page 85

2.3.1.2. Методы и концепции......Page 88
2.3.1.5. Рекомендации по литературе......Page 89
2.4.1.3. Вычислительная модель......Page 90
2.4.1.4. Синтаксис и семантика......Page 91

2.4.2. Методология логического параллельного программирования......Page 93

2.5. Другие методологии......Page 95
2.6.3. Методологии как результат отображений структур......Page 96
3.1.1. Основные понятия и определения......Page 100
3.1.2. История и эволюция......Page 101
3.1.3.1. Классификация технологических подходов......Page 102
3.1.3.2. Классификация технологических процессов......Page 104
3.1.4. Проблемы и перспективы развития......Page 106
3.1.5. Рекомендации по литературе......Page 107
3.2.1.1. Возникновение идеи решения проблемы......Page 108
3.2.1.2. Постановка задачи......Page 110
3.2.1.3. Принятие решения о начале работы над проектом......Page 112
3.2.2.1. Управление проектом......Page 113
3.2.2.2. Эволюция менеджмента......Page 117
3.2.2.3. Методы управления проектами......Page 120
3.2.2.4. Современные подходы к управлению проектом......Page 123
3.2.3.1. Введение в анализ требований и проектирование......Page 124
3.2.3.2. Отступление «о спецификациях»......Page 125
3.2.3.3. Отступление «об архитектуре»......Page 126
3.2.3.4. Отступление «о классификации всего сущего»......Page 129
3.2.3.5. Проектирование архитектуры (проектирование «в большом»)......Page 130
3.2.3.6. Проектирование модулей (проектирование «в малом»)......Page 131
3.2.3.7. Методы анализа и построения спецификаций......Page 133
3.2.3.8. Подходы к ведению анализа и проектирования......Page 137
3.2.4.1. Стиль программирования......Page 141
3.2.4.2. Защитное программирование......Page 147
3.2.5.1. Введение в тестирование и отладку......Page 148
3.2.5.2. Тестирование программных продуктов......Page 149
3.2.5.3. Отладка программных продуктов......Page 152
3.2.6. Ввод программы в действие......Page 153
3.2.7. Эксплуатация и сопровождение......Page 154
3.3.1.1. Приобретение......Page 157
3.3.1.4. Эксплуатация......Page 158
3.3.2.2. Управление конфигурацией......Page 159
3.3.2.5. Аттестация......Page 160
3.3.3.1. Управление......Page 161
3.3.4. Взаимосвязь между процессами......Page 162
3.4.1. Фазы как крупные временные рамки......Page 163
3.4.3. Вариант подробного разбиения на стадии......Page 164
3.4.4. Контрольные точки......Page 166
3.5.1.1. Подход «кодирование и исправление»......Page 167
3.5.2.2. Каскадно-возвратный подход......Page 168
3.5.2.3. Каскадно-итерационный подход......Page 169
3.5.2.6. Спиральная модель......Page 170
3.5.4. Генетические технологические подходы......Page 172
3.5.4.1. Синтезирующее программирование......Page 173
3.5.4.2. Сборочное (расширяемое) программирование......Page 174
3.5.4.3. Конкретизирующее программирование......Page 175
3.5.5.1. Технология стерильного цеха......Page 176
3.5.6.1. Эволюционное прототипирование......Page 179
3.5.6.2. Итеративная разработка......Page 180
3.5.7.1. Экстремальное программирование......Page 181
3.5.7.2. Адаптивная разработка......Page 183
3.5.8.1. Компьютерный дарвинизм......Page 184
3.6.1. Авторская разработка......Page 185
3.6.2. Коллективная разработка......Page 186
3.6.2.1. Технические командные роли......Page 187
3.6.2.2. Психологические командные роли......Page 189
3.6.2.3. Типы совместной деятельности......Page 190
3.6.3. Общинная модель разработки......Page 191
3.7.1. Подходы к качеству программного обеспечения......Page 192
3.7.2. Характеристики качества программного обеспечения......Page 194
3.7.3.1. Модель зрелости процесса разработки программного обеспечения......Page 196
3.7.3.2. Определение возможностей и улучшение процесса создания программного обеспечения......Page 197
3.7.4. «Достаточно хорошее» программное обеспечение......Page 198
3.7.5. Стандартизация информационных технологий......Page 199




4.1.2.1. История и эволюция языков моделирования......Page 212


4.1.4. Проблемы и перспективы развития......Page 216
4.1.5. Рекомендации по литературе......Page 217
4.2.2. Управление......Page 218
4.2.5. Тестирование и отладка......Page 219
4.2.8. Завершение эксплуатации......Page 220
4.3.2.1. Даннные и типы данных......Page 221
4.3.2.3. Абстрактные типы данных......Page 222
4.3.2.4. Разновидности полиморфизма......Page 223
4.3.2.5. Статический и динамический контроль типов......Page 224
4.3.2.6. Статически и динамически типизируемые языки программирования :......Page 225
4.3.3.1. Структурное программирование......Page 226
4.3.3.2. Визуальное структурное программирование......Page 227
4.3.3.3. Оператор перехода......Page 228
4.3.3.4. Оператор итерации......Page 229
4.3.3.5. Оператор исключения......Page 230
4.3.3.6. Зависимости по управлению и по данным......Page 232
4.3.4.1. Модульное программирование......Page 233
4.3.4.3. Характеристики модульности......Page 234
4.4.1.2. Диаграммы функционального моделирования......Page 238
4.4.2.2. КОК-карты (класс-ответственность-кооперация)......Page 240
4.4.2.4. Диаграммы классов......Page 241
4.4.2.6. Диаграммы состояний......Page 242
4.4.2.8. Диаграммы последовательности......Page 243
4.4.2.10. Диаграммы компонентов......Page 244
4.4.3.1. Модель данных......Page 245
4.4.3.2. Реляционная модель данных......Page 246
4.4.3.3. Другие модели данных......Page 247
4.4.4.2. Модели представления знаний......Page 248
4.4.4.3. Метрики левой и правой моделей мира......Page 249
4.5.1.1. Семейство универсальных языков......Page 250
4.5.1.2. Семейство уникальных языков......Page 251







4.6.1. Иерархия грамматик......Page 259
4.6.2. Техники распознавания (разбора)......Page 260
4.6.3. Образное сравнение типов грамматик......Page 261
4.6.4. Метатрансляция......Page 262
4.6.4.1. Подходы к задаче синтаксического анализа......Page 263

4.7.1. Особенности естественных языков и культурных сред......Page 266
4.7.2.1. Подход Хомского......Page 267
4.7.2.2. Подход Цейтина......Page 268
4.7.3. Интернационализация и локализация программных продуктов......Page 269
4.7.4. Отступление «о придании тексту эмоций»......Page 271
5.1.1. Основные понятия и определения......Page 277
5.1.2.1. Некоторые важные даты......Page 278
5.1.3.1. Классификация по ориентации на поддержку процессов......Page 279
5.1.3.2. Функциональная классификация......Page 280
5.1.4. Проблемы и перспективы развития......Page 281
5.1.5. Рекомендации по литературе......Page 283
5.2.1. Возникновение и исследование идеи......Page 284
5.2.2.1. Системы управления проектами......Page 285
5.2.2.3. Средства оценки качества......Page 286
5.2.3.1. Системы на основе структурной методологии......Page 287
5.2.3.2. Системы на основе объектно-ориентированной методологии......Page 288
5.2.4.1. Трансляторы......Page 289
5.2.4.2. Компиляторы......Page 290
5.2.4.3. Системы генерации трансляторов......Page 292
5.2.4.6. Декомпиляторы......Page 294
5.2.4.8. Системы управления компиляцией и построением программ......Page 296
5.2.5. Тестирование и отладка......Page 299
5.2.5.3. Средства динамического построения профиля программы......Page 300
5.2.5.4. Системы построения срезов программы......Page 301
5.2.5.5. Отладчики......Page 302
5.2.5.6. Системы отслеживания проблем (ошибок)......Page 303
5.2.8. Завершение эксплуатации......Page 304
5.3.1.1. Средства, базирующиеся на регулярных выражениях......Page 305
5.3.1.2. Средства поиска различий......Page 306
5.3.1.3. Средства поиска на основе шаблонов......Page 307
5.3.1.4. Обозреватели и базы данных программ......Page 308

5.3.1.7. Синтаксически-ориентированные редакторы......Page 310
5.3.2. Системы документирования......Page 311
5.3.4. Системы управления базами данных......Page 312
5.3.5.1. Системы искусственного интеллекта......Page 313
5.3.5.2. Механизмы выводов на знаниях......Page 314
5.3.5.3. Неточный вывод на знаниях......Page 316
5.3.6.1. Парадигма усиления информации......Page 317
5.3.6.2. Профессиональный поиск информации......Page 318
5.3.6.3. Проблемы работы с информационными ресурсами Интернета......Page 319
5.3.6.4. Коллекции информационных ресурсов в Интернете......Page 320
5.3.6.5. Базы данных в Интернете......Page 321
5.3.6.6. Краткая история поисковых средств Интернета......Page 322
5.3.6.7. Искусственный интеллект и задача поиска в Интернете......Page 323
5.4.1. Системы формального преобразования и верификации программ......Page 326
5.5. Инструментальные системы......Page 327
5.5.1. Инструментальные среды программирования......Page 328
5.5.2. Средства автоматизации разработки программ (CASE-средства)......Page 329
5.5.3. Интегрированные среды......Page 330
5.5.4. Репозитории проекта......Page 331

5.6.1.1. Система управления версиями файлов......Page 334
5.6.1.2. Система управления пространствами......Page 335
5.6.1.3. Система синхронизации удаленных пространств......Page 336
5.6.2. Системы поддержки работы виртуальных групп......Page 337

5.7.1. Диалоговые системы......Page 339
5.7.3. Автоматизированные обучающие системы и системы контроля знаний......Page 340
5.7.4. Системы искусственного интеллекта......Page 342
6.1.1. Основные понятия и определения......Page 346
6.1.2.1. Поколения компьютерных архитектур......Page 347
6.1.2.2. Некоторые важные даты......Page 348
6.1.2.3. История советской и российской вычислительной техники......Page 349
6.1.3.1. Функциональная классификация компьютеров......Page 350
6.1.3.2. Классификация по степени централизации......Page 352
6.1.3.4. Классификация Флинна......Page 353
6.1.4. Проблемы и перспективы развития......Page 354
6.1.5. Рекомендации по литературе......Page 356
6.2.1.1. Фон Неймановская архитектура......Page 357
6.2.1.3. Стековая архитектура......Page 358
6.2.1.4. Архитектура регистр-регистр......Page 359
6.2.2.1. Компьютер с полным набором команд......Page 360
6.2.2.2. Компьютер с сокращенным набором команд......Page 361
6.2.2.3. Архитектура с длинным командным словом......Page 362

6.2.3.2. Интервальная арифметика......Page 364
6.2.5. Оценка производительности вычислительных систем......Page 365
6.3.1. Процессор......Page 367
6.3.2. Память......Page 368
6.3.5. Функциональное описание......Page 369
6.4.1. История создания SPARC-архитектуры......Page 370
6.4.2.1. Регистры и регистровые окна......Page 371
6.4.2.2. Общий синтаксис команд и модель адресации......Page 373
6.4.2.3. Стек......Page 374
6.4.3.2. Арифметические и логические команды......Page 375
6.4.3.3. Команды sethi и пор......Page 376
6.4.3.5. Команды переходов......Page 377
6.4.3.7. Синтетические команды......Page 378
6.4.4.1. Простейшая программа......Page 379
6.4.4.2. Программа, сгенерированная компилятором......Page 380
6.4.5. Организация SPARC-архитектуры......Page 382
6.5.1. Основные классы параллельных архитектур......Page 384
6.5.2.1. Простые коммутаторы......Page 385
6.5.2.2. Составные коммутаторы......Page 386
6.5.3.1. Классификация Хокни......Page 387
6.5.3.2. Классификация Кришнамурти......Page 388
6.6.1.2. Классификация сетей по сетевым топологиям......Page 389
6.6.2. Стандарты в области сетей IEEE 802......Page 390
6.6.2.3. Маркерное кольцо......Page 391
6.6.3.1. Ethernet на толстом коаксиальном кабеле (10Base-5)......Page 392
6.6.3.2. Ethernet на тонком коаксиальном кабеле (10Base-2)......Page 393
6.6.4.1. Введение в Интернет......Page 394
6.6.4.2. История и эволюция Интернета......Page 395
7.1.1. Основные понятия и определения......Page 399
7.1.2.2. Краткий обзор истории создания операционных систем......Page 401
7.1.3.1. Классификация по типу централизации......Page 403
7.1.3.3. Классификация по особенностям аппаратных платформ......Page 405
7.1.3.5. Классификация по типу архитектуры ядра системы......Page 406
7.1.4. Проблемы и перспективы развития......Page 407
7.1.5. Рекомендации по литературе......Page 409
7.2.1.1. Понятие процесса......Page 410
7.2.1.2. Процессы с поддержкой многопоточности......Page 412
7.2.1.3. Сигналы как простейшие средства коммуникации......Page 416
7.2.2.1. Основные понятия и определения......Page 419
7.2.2.2. Алгоритм Деккера......Page 420
7.2.2.3. Аппаратная поддержка взаимоисключений......Page 421
7.2.2.5. Блокировка с запретом прерываний......Page 422
7.2.2.6. Семафоры......Page 423
7.2.2.7. Мониторы......Page 425
7.2.2.9. Решение задачи передачи данных между процессами «читатель-писатель»......Page 426
7.2.2.10. Тупики......Page 429
7.2.2.11. Модели для анализа свойств асинхронных процессов......Page 430
7.2.2.12. Планирование и диспетчеризация процессов......Page 432
7.2.3.1. Уровневые протоколы......Page 434
7.2.3.2. Адресация в сетях TCP/IP......Page 437
7.2.3.3. Транспортные протоколы :......Page 439
7.2.3.4. Маршрутизация в сетях TCP/IP......Page 440
7.2.3.5. Формирование сети......Page 446
7.2.3.6. Средства коммуникации высокого уровня......Page 447
7.2.4.1. Основные подходы к синхронизации......Page 449
7.2.4.2. Взаимные исключения в распределенных системах......Page 451
7.2.4.3. Высокоуровневые средства синхронизации......Page 452
7.2.4.4. Тупики в распределенных системах......Page 453
7.2.4.5. Распределение процессоров в распределенных системах и планирование......Page 454
7.3.1.1. Привязка адресов......Page 458
7.3.1.2. Управление виртуальной памятью......Page 460
7.3.1.3. Распределенная общая память......Page 463
7.3.2.1. Управление внешней памятью......Page 465
7.3.2.2. Файлы и файловые системы......Page 466
7.3.2.3. Распределенные файловые системы......Page 467
8.1.1. Основные понятия и определения......Page 472
8.1.3. Классификация уровней карьеры......Page 473
8.1.4. Источники и составные части карьеры......Page 474
8.2.1. Привлечение кандидатов......Page 476
8.2.2.1. Основные советы по составлению резюме......Page 477
8.2.2.2. Структура резюме......Page 478
8.2.2.3. Образец краткой биографии (резюме)......Page 479
8.2.2.4. Как не следует писать резюме......Page 481
8.2.4.1. Общие рекомендации......Page 482
8.2.4.4. Вопросы на размышление......Page 484
8.2.4.6. Технические вопросы......Page 486
8.2.4.7. Проверка знания английского языка......Page 492
8.2.4.8. Написание простой программы и ее анализ......Page 494
8.2.4.9. Анализ чужого кода......Page 495
8.2.4.10. Оценка результатов собеседования......Page 496
8.2.4.11. О дополнительных домашних заданиях......Page 497
8.2.5. Испытательный срок......Page 498
8.3.1. Совершенствование мастерства......Page 499
8.3.2. Семь ступеней мастерства......Page 500
8.4.1. Трудовой договор (контракт)......Page 501
8.4.2. Заработная плата......Page 502
8.5.1. Философия и стратегии программистских коллективов и организаций......Page 504
8.5.2.2. Дискреционная власть......Page 505
8.5.3. Паковщики и картостроители......Page 506
8.5.4.1. Введение в соционику......Page 507
8.5.4.2. Пример соционической характеристики программиста......Page 508
Предметный указатель......Page 511