1 ... 11 12 13 14 15 16 17 18 19 Ім'я файлу: kurs_istoriya_informatiki.rtf Розширення: rtf Розмір: 1212кб. Дата: 26.10.2020 скачати Пов'язані файли: p1_0.docx Теория и практика разработки программ и информационных системНе менее значительные изменения произошли и в области технологии программирования. Произошел не только переход от классических методов управления проектами, унаследованных от докомпьютерной инженерии, но и методы информационного моделирования нашли свое место в традиционных сферах проектирования, повысили их уровень при одновременном снижении трудоемкости. От последовательности фаз постановки решаемой задачи, выбора и реализации ее решений, после экспериментов с CASE-системами и системами управления проектами с разными схемами детализации процесса разработки произошел сдвиг к исследованию полного жизненного цикла информационных систем, приспособленных к решению классов задач и совершенствованию реализованных решений. Эти исследования привели к технологиям с совмещенными фазами разработки программ и обеспечением обратной связи со сферой их применения в условиях технической поддержки версий и документирования процесса разработки – грамотное и экстремальное программирование. Устойчивость слабо предсказуемых трудностей программирования достаточно высока. Так, Ф.П. Брукс почти 30 лет назад отмечал неизбежность повторного программирования, морального устаревания результата за время его получения и влияния структуры программистской группы на эффективность трудозатрат. Впечатления от трудного опыта разработки OS IBM 360 Ф. Брукса можно характеризовать следующими цитатами из его знаменитой книги: “Система начинает работать как следует только после создания нескольких вариантов, последовавших за первым”. “Неполнота и противоречивость новых идей становится ясной только в процессе реализации”. “На практике оказывается, что все этапы могут начинаться одновременно и проходить параллельно”. “Вторая система - самая опасная из всех, которые проектирует человек”. “Диалоговые интерпретаторы обеспечили наиболее фундаментальные преимущества в отладке”. “Нам не удалось воспитать в программистах походящее отношение к документации”.8 При повторном издании (через четверть века!) своей книги Ф. Брукс отметил, что основные трудности практического программирования для сложных систем почти не изменились. Современные подходы к разработке ИС скорее являются методами “уклонения от сложностей”. В начале 70-х годов Дж.М. Вейнберг обратил внимание на частичность понимания целей работы программиста (особенно в сложных проектах), опасность невнимания менеджеров к естественным взаимосвязям в коллективе, разнообразие способностей, необходимых программисту для успешной работы. В основополагающей монографии “Психология программирования” Дж. Вейнберг акцентирует внимание на человеческих факторах программирования и показывает, что решение любых сложных проблем начинается с анализа их социально-этической реализуемости. Техническое решение осуществимо, лишь если ясно, кто и почему способен сложную проблему решить. Э. Дейкстра отмечал ненадежность программирования и связывал это с усложненностью преждевременно программируемых решений задач, обуславливающей ошибки как в реализации, так и в применении таких решений. Провозглашенная им дисциплина программирования нацелена на принцип "сверху вниз", с очевидным обоснованием решений на каждом уровне, с наглядным структурированием программ и со стандартизацией изобразительных средств. М.М. Леман указывал на возрастание стоимости сопровождения больших программ и объективность эволюции активно используемых программ. Внимание к завершенности фаз жизненного цикла (ЖЦ) программ помогают четко выделить ближайшую цель, концентрировать усилия на ее достижении и тем самым минимизировать перенос трудозатрат с периода разработки на период сопровождения. А.Л. Фуксман выделил проблему разложения на модули таких программ, как трансляторы, и обеспечения оперативной обратной связи программирования со сферой приложения программ, предложил методику вертикального сложения программ (на основе функциональной структуры) и проверки частичных результатов в реальной обстановке. По мнению Э. Йодена, истинное предназначение программирования – это трудно выполнимые миссии, т.е. проекты, выполняемые при недостаточных условиях, что активизирует творческий потенциал программистов, заставляет быстро находить эффективные и надежные решения. Эту мысль убедительно подтверждает практика разработки игровых программ. В пользу этого говорит и оценка трудоемкости проектов по классическим схемам ЖЦ программ. Как правило такие оценки завышены во много раз в сравнении с реальными трудозатратами. Проектирование, макетирование и разработка программ также обрели языковую поддержку. Примеры – язык UML и проекты в рамках .Net-технологии. Организация параллельных процессов и параллельное программированиеВ середине 70-х годов активное исследование методов параллельного программирования рассматривалось не только как наиболее перспективное направление повышения эксплуатационных характеристик оборудования, но и как ведущее направление преодоления кризиса технологии программирования. По мнению Т.Хоара "Параллельная композиция действий внешне не сложнее последовательного сочетания строк в языке программирования". От параллелизма на уровне доступа к оборудованию и совмещения операционной системой небольшого числа независимых заданий произошел переход к многопроцессорным и сетевым системам, функционирование которых сопряжено с изменением точки зрения на базовые понятия и задачи программирования. В число базовых понятий включаются временные отношения. В число актуальных задач – масштабирование и синхронизация процессов, осуществляемых на многопроцессорных комплексах и суперкомпьютерах. Параллельные процессы возникают при функционировании информационных сетей и применении распределенных информационных систем во многих сферах деятельности, связанных с автоматизацией бизнеса, транспорта, медицины, образования и др. Независимая разработка специализированных языков параллельного программирования и языков управления процессами дала ряд интересных идей по представлению и масштабированию параллельных вычислений, с которыми можно ознакомиться по материалам о языках APL, Symula-67, Sisal, БАРС, Occam, Поляр и др. Первое предложение по организации языка высокого уровня для параллельных вычислений было сделано в 1962 году Айверсоном в проекте языка APL. В этом весьма оригинальном языке был предложен интересный механизм реализации многомерных векторов, приспособленный к расширению и распараллеливанию обработки. Сложные данные представляются как пара из последовательности скаляров и паспорта, согласно которому эта последовательность структурируется. В результате любое определение функции над скалярами может быть стандартно распространено на произвольные структуры данных из скаляров. APL обладает богатым, тщательно подобранным набором базовых средств обработки векторов и манипулирования паспортами структур данных как данными. Появились универсальные языки сверх высокого уровня, такие как SETL, Planner, Eiffel, Haskel, Python, Cw и т.п., абстрагирование данных и процессов в которых нацеливает на активное использование математических и функциональных моделей, приспособленных к гибкому и строгому структурированию, удобному для доказательных построений. Заметное место среди языков функционального программирования занимают языки параллельного программирования. Довольно известен язык функционального программирования Sisal. Название языка расшифровывется как “Streams and Iterations in a Single Assignment Language”, сам он представляет собой дальнейшее развития языка VAL, известного в середине 70-х годов. Среди целей разработки языка Sisal следует отметить наиболее характерные, связанные с функциональным стилем программирования. - Создание универсального функционального языка. - Разработка техники оптимизации для высокоэффективных параллельных программ. - Достижение эффективности исполнения, сравнимой с императивными языками типа Fortran и C. - Внедрение функционального стиля программирования для больших научных программ. Функциональная программа является безусловно параллельной, если ее можно писать, освободившись от большинства сложностей параллельного программирования, связанных с выражением частичных отношений порядка между отдельными операциями уровня аппаратуры. Пользователь Sisal-а получает возможность сконцентрироваться на конструировании алгоритмов и разработке программ в терминах крупноблочных и регулярно организованных построений, опираясь на естественный параллелизм уровня постановки задачи. В конце 70-х годов основные идеи языков параллельного программирования APL и VAL, предшественника языка Sisal, были интересно обогащены в языке БАРС в трех направлениях: в качестве базовой структуры данных были выбраны комплексы, представляющие собой нечто вроде размеченных множеств с возможностью обозначить кратность вхождения элементов, описание элементов памяти могло сопровождаться предписанием дисциплины доступа к памяти, средства управления асинхронными процессами включали механизм синхросетей, позволяющий согласовывать функционирование узлов из независимо представленных фрагментов. Синхросети позволяют независимые описания процессов синхронизовать в терминах разметки. Узлы с одинаковой разметкой срабатывают одновременно. Телекоммуникации и информационные сервисыНа заре компьютерной эры лишь в фантастических романах можно было прочитать про средства телекоммуникации, отдаленно напоминающие современные средства связи и распределенные информационные сервисы, обеспечивающие информационные сети, мобильные телефоны, сетевую обработку изображений, беспроводную связь и многие другие устройства. Микропроцессоры встраиваются в бытовые приборы и игрушки. Ими можно управлять с голоса, тактильно или визуально. Практически любой маленький прибор можно сделать точкой входа в мощную компьютерную сеть, возможности которой мы еще не вполне осознаем. В настоящее время массово выполнимы требования к устройствам для реализации распределенных информационных систем (РИС), которые должны быть одновременно мощными (высокая пропускная способность) и недорогими (могут простаивать). По существу это эволюционирующий объект, разработка которого имеет непрерывный характер и продолжается в период эксплуатации. По этой причине язык представления РИС должен поддерживать в полной мере средства для решения проблем разработки и эксплуатации программ, что приводит к парадигме компонентного программирования Ключевое направление развития парадигм программирования связано с тенденцией компонентного подхода к разработке программ, верификации свойств их компонент и межязыковой интеграции программных комплексов. Такой подход интенсивно развивается в проектах типа .Net . Разработка компонентов программ отличается от первичного программирования учетом долговременных целей и критериев, таких как надежность, производительность и улучшаемость информационных систем (ИС). Не теряет актуальности давнее наблюдение, что разработка компонента ИС более трудоемка, чем разработка аналогичной по назначению автономной программы. Понятие "компонент" имеет глубокие корни и весьма широкое толкование в технологии разработки программ. Это и библиотечные процедуры, и раздельно компилируемые модули, и пользовательские интерфейсы, и макроопределения, и системы файлов, и документация, и шаблоны компиляции кода программ, и элементы структур данных, и наборы данных с методами их обработки, и иерархии классов объектов общего назначения, и комплекты ИС, встраиваемых в информационные комплексы. Развитие компонентов осуществляется достаточно свободно, но подчинено некоторым интуитивным закономерностям ЖЦ, связанным с динамикой представления и накопления знаний человеком, пока не превышен некоторый приемлимый предел, достижение которого ставит границы в их развитии. После этого происходят шаги декомпозиии на более простые компоненты или обобщения до более факторизуемых форм. В этом процессе компоненты подвергаются систематическому анализу, параметризации, оптимизации, таким образом повышается качество и потенциал компонентов, их изученность, организованность, эфективность и надежность. Средства и методы искусственного интеллекта Взволнованные дискуссии на тему “может ли машина мыслить?” сменились массовым применением информационных технологий в области гуманитарного знания. Средства и методы искусственного интеллекта привели к достаточно точной постановке вопроса о компьютерном разуме, на которую в середине 60-х годов дал ответ Вейценбаум, и предоставили специалистам разнообразные усилители интеллекта, обеспечившие исследования важнейших особенностей мыслительного процесса и роли интеллекта в коллективной деятельности. Очень интересные результаты получены применением электронных роботов при исследовании поведения животных. Применение компьютерных игр и тренажеров стало важной методикой обучения во многих сложных профессиях, включая игры в шахматы и авиацию. Алгоритмы, учебное и любительское программированиеПрограммирование как искусство начинается с алгоритмов. Многочисленные изобретения структур данных и методов их эффективной обработки выдержали проверку временем и теперь доступны не только их описания в публикациях, но их реализации в виде хорошо отлаженных библиотечных компонент. Тем не менее, успешность применения таких компонент весьма зависит от понимания алгоритмической природы программирования. Учебное программирование позволяет, начиная с небольших задач и тщательно созданных учебных миров, ознакомить с проблемами программирования и дать полезные навыки программирования. Целенаправленная работа в этом направлении началась с языка Паскаль (Вирт - 1970), продолжена в работах на базе языка Лого (Пайперт - 1974), весьма интересно представлена в описании языка Grow (Калифорнийский университет), а в нашей стране получила весьма результативный опыт в виде языков Робик и Рапира (Звенигородский - 1977, 1980), послуживший основанием введения предмета “информатика” в школьный регламент. Всю историю программирования пронизывает нечто вроде дуэли между коммерческим и любительским программированием. При очевидных преимуществах ответственного профессионального программирования в рамках солидных фирм в последние двадцать лет на базе Интернет сложились клубные формы программисткой деятельности, достижения которых вполне сравнимы, а кое в чем превосходят, аналогичные продукты фирм. Наиболее известный результат такого рода – движение свободно распространяемых программ GNU (Столмен), давшее миру операционную систему Linux (Торвальд) и целый ряд других не менее интересных информационных систем, а главное создавший убедительный прецедент профессионального творческого международного проекта предельно широкого масштаба. 1 ... 11 12 13 14 15 16 17 18 19 |