logo search
Лекции ПИС / Книги / Кулямин - Технологии программирования

Предисловие

Предлагаемый вниманию читателей курс лекций построен на основе специального курса, читающегося на факультете Вычислительной математики и кибернетики МГУ им. М. В. Ломоносова. Он был задуман как замена и некоторая модернизация курса по технологии

программирования, долгое время читавшегося на ВМиК ныне покойным Е. А. Жоголевым и являвшегося введением в инженерию программного обеспечения (ПО).

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

Таким образом, данные лекции преследуют две цели — введение в инженерию ПО в целом как инженерную дисциплину, рассматривающую методы построения сложных программных систем вообще, и введение в современные технологии разработки наиболее широко востребованного сейчас вида компонентных распределенных программных систем. Автор глубоко убежден в необходимости такого объединения. Компонентные технологии, хотя и продолжают активно развиваться, уже сейчас являются стержневым элементом современной программной инженерии. Они не только лежат в основе методов разработки прикладного ПО, но проникают и в системное программирование. Знание основных принципов работы широко используемых систем промежуточного уровня (middleware) и умение строить приложения на их основе в настоящий момент становится таким же необходимыми элементом образования профессионального разработчика программ, как и знания в области операционных систем, компиляторов и систем управления базами данных.

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

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

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

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

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