Обучение специальности – программная инженерия
Инженерная деятельность в программировании близка по своей сущности к определению инженерной деятельности (например, приборостроение), определенной в толковом словаре:
1) инженерия есть применение научных результатов в практику, что позволяет получать пользу от свойств материалов и источников энергии;
2) деятельность по созданию машин для предоставления полезных услуг.
В программной инженерии, инженеры – это специалисты, выполняющие практические работы по реализации программ с применением теории, методов и средств компьютерной науки, которая охватывает теорию и методы построения вычислительных и программных систем. Знание компьютерной науки необходимо специалистам в области ПО так же, как знание физики – инженерам-электронщикам [5]. Если для решения конкретных задач программирования не существует подходящих методов или теории, инженеры применяют свои знания, накопленные ими в процессе конкретных разработок ПО, а также исходя из опыта работы на соответствующих инструментальных программных средствах. Кроме того, инженеры должны работать в условиях заключенных контрактов и выполнять задачи с учетом их условий.
В отличие от другой науки, целью которой есть получение знаний, в инженерии знание является способом получения некоторой пользы. Ф.Брукс [7] считает, что «ученый строит, чтобы научиться, инженер учится, чтобы строить».
Таким образом, разработку ПО можно считать инженерной деятельностью. Она имеет важные отличия с традиционной технической инженериею:
– традиционные ветви инженерии имеют высокую степень специализации, а у программной инженерии специализация заметна только в довольно узких применениях (например, операционные системы, трансляторы, редакторы и др.);
– объекты традиционной инженерии хорошо определены и манипуляции с ними происходят в узком контексте типичных проектных решений и деталей, которые отвечают типовым требованиям заказчиков и касаются отдельных деталей, а не общих вопросов, тогда как у программной инженерии подобная типизация отсутствует;
– отдельные готовые решения и изделия в традиционной инженерии классифицированы и каталогизированы, а в программной инженерии каждое новое решение и разработка некоторого элемента ПО - это новая проблема, для которой довольно трудно установить аналогию с ранее выполненными разработками таких продуктов, как программа, компонент, система и т.п.
Приведенные отличия требуют значительных усилий и доработок для превращения программной инженерии в специальность. Мировая компьютерная общественность признала целесообразность и своевременность таких усилий. Подтверждением этого является совместное создание ядра SWEBOK, разных программ обучения (Cirricula -2001-2005) [23, 24], институтов и комитета международного профессионального объединения в области информатики. Их главной целью является проведение работ по преобразованию программной инженерии в специальность, которая имела бы зафиксированные признаки для ее распознания и официального признания в мировом сообществе специалистов [25-28].
Практика специализации профессиональной деятельности, которая сложилась в цивилизованном мире, позволяет считать профессию "зрелой", если для нее существуют:
– система начального обучения специальности;
– механизмы развития умений и навыков персонала, которые необходимы для его практической деятельности;
– квалификация персонала организована в рамках профессии;
– лицензирование специалистов организовывается под управлением соответствующих государственных органов (в частности, для систем с повышенным риском, например, для атомных станций и т.п.);
– системы профессионального усовершенствования квалификации персонала и отслеживания современного уровня знаний и технологий по специальности, чтобы специалисты могли выжить в условиях интенсивного развития специальности;
– этический кодекс специалистов;
– профессиональное объединение.
Одним из дополнительных отличий программной инженерии состоит в большой сложности и недостаточной специализации большинства видов деятельности по ее основным направлениям, отсутствие научной системы классификации и каталогизации готовых решений в этой области.
Отметим, что указанные профессиональные организации в 1999г. приняли этический кодекс специалистов по программной инженерии [13], разработали руководства для обучения программной инженерии, а также создали программу обучения Computing Curricula (СС) 2001 [24]. Кроме того, в США работает комитет по сертификации учебных заведений (Computing Accreditation Commission of the Accreditation Board for Engineering and Technology [29].
Таким образом, инженерная деятельность в программировании приблизилась к энциклопедическому определению, отмечается ее становление как специальности большинством преподавательского состава Вузов, связанных с информатикой. Программная инженерия в соответствии с SWEBOK имеет связь со смежными дисциплинами:
– компьютерные науки;
– управление проектом;
– электротехническая инженерия;
– математика;
– телекоммуникации и сети;
– менеджмент;
– когнитивные науки;
– другие инженерные дисциплины.
В результате, можно сделать вывод о том, что содержание новой инженерной дисциплины "программная инженерия" является сформированной, ей уделяется большое внимание как специалистов, совершенствующих ее разные аспекты, так и разработчиков, которые используют ее в практике программирования и реализации разных видов и типов программных систем.