?

Log in

No account? Create an account
Лабораторный журнал -- Day [entries|friends|calendar]
Anatoly Levenchuk

[ website | Лабораторный журнал ]
[ userinfo | livejournal userinfo ]
[ calendar | livejournal calendar ]

Верхнее образование инженеров-программистов [22 Jun 2011|04:35pm]
Мой вариант курсов для ВУЗовского образования по специальности "программная инженерия" (характеристика этих курсов даётся в каждом "кумулятивно", т.е. очень грубо считаем, что эти курсы проходятся последовательно, а не "вперемешку" и умения накапливаются от курса к курсу):

1. Грунтовка мозга: подготовка "думателя"
-- английский язык
-- дискретная математика, классическая логика
-- философская логика (и совсем чуть-чуть философии)
-- лингвистика
-- формальные семантика и прагматика в объеме, чтобы свободно читать теоретические статьи по computer science.

После этого курса выходят очень умные, полностью бесполезные в любом деле люди. Зато их можно потом легко обучить многим и многим профессиям, ибо они после этого курса "быстро схватывают".

2. Предметная ориентация: подготовка "учёного программиста" (computer science)
-- парадигмы программирования и языки программирования
-- моделирование данных (от реляционок до онтологий, от XML до ISO 15926)
-- алгоритмика (методом Кнута без пряника, но не чураясь параллельности)
-- как устроены компиляторы, интерпретаторы, виртуальные машины, моделлеры и прочие редактирующие и исполняющие среды -- в объеме, позволяющем ориентироваться в том, что пишут в рассылке FONC, на сайте Lambda Ultimate, а также примерно понимать, как устроены системы типа помянутых в http://www.languageworkbenches.net/ar.html

Эти люди могут побеждать в олимпиадах по программированию, читать лекции в университетах, но к работе по специальности "программная инженерия" совершенно не приспособлены (ибо у них нет в лексиконе слов "требования", "архитектура", "методология разработки" и т.д.) -- то есть "придумывать алгоритмы умеют, а работать не умеют".

3. Профессиональная ориентация: инженерные компетенции:
-- системный подход, инженерный метод (работа с эвристиками)
-- ситуационная инженерия методов, методологии разработки
-- технические практики системной инженерии (инженерия требований, инженерия системной архитектуры и т.д.): не для "чисто программных систем" (таких нет), а сразу для социотехнической системы, киберфизической системы и т.д.,
-- особенности программной инженерии: методологии разработки (в ассортименте: RUP, SCRUM и все-все-все, понятие о devops etc.), архитектура и моделирование, методы тестирования, методы версионирования и управления конфигурацией, продуктные линии и т.д.. Фишка в том, что это одна строчка в программе, т.е. учить нужно отнюдь не только этому! Всё это дается как "специализация" для практик системной инженерии.

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

4. Инженерный менеджмент (как устроено производство)
-- праксеология (формальный анализ человеческой деятельности)
-- enterpise engineering (организационные модели + change management)
-- управленческий учёт
-- проектное управление в связи с методологиями разработки
-- работа с живыми людьми (aka "лидерство")

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

Время такого образования -- входное условие (например, 4 года), а вот уровень квалификации выпускника существенно зависит от методики (т.е. выбранных наборов упражнений -- по моей оценке, ежели учить "правильно", т.е. учить тщательно подобранными упражнениями для предварительно отмоделированных мыслительных операций, то получается обычно впятеро быстрее, чем если учить "традиционно").

UPDATE: мой рассказ (1 час 23 минуты видео) этих тезисов в виртуальной академии: http://ailev.livejournal.com/937397.html
* * *
Понятно, что у меня есть собственное понимание, что такое "инженер-программист" (не только теоретическое, но и практическое: у меня многолетний рабочий стаж и программиста-теоретика, и инженера-программиста, и менеджера программистского коллектива, и многолетний стаж работы в проектах, где айтишные задачи представляют только часть работы).

Для понимания моего подхода полезно также ознакомиться с другими моими материалами по общему верхнему образованию:
-- программа общего верхнего образования: http://ailev.livejournal.com/853399.html (июль 2010)
-- тезисы к Программе общего верхнего образования: http://ailev.livejournal.com/855472.html (август 2010)
-- оценки времени верхнего образования: http://ailev.livejournal.com/871079.html (октябрь 2010)
-- системная инженерия верхнего образования http://ailev.livejournal.com/907435.html (февраль 2011)
157 comments|post comment

navigation
[ viewing | June 22nd, 2011 ]
[ go | previous day|next day ]