2007-11-21

Про студентов

Андрей Орлов  2007-11-21 06:48

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

Вообще, интересно наблюдать за людьми после года обучения и работы по специальности. Забавно то, что независимо от реально полученных знаний, у всех развивается "синдром сапера": т.е. уверенность в своих силах, помноженная на отсутствие реальной ответственности.

Такой юный гений просто стремится браться за "сверхсложные" с его точки зрения задачи, причем "сложность" меряется то ли в строках кода, то ли в его запутанности до безобразия. Иногда они достают малоизвестные конструкции и плодят программных монстрров по принципу: "каждая программа должна делать все! Если делается пакет маленьких программ, каждая программа пакета должна использовать все остальные!".

Я вдруг понял, что я упускаю из обучения. Я прекрасно рассказываю теорию и архитектуру используемой системы. Даю много действующих и полезных примеров. И даже стараюсь прививать какой-то вразумительный стиль программирования и следование регламенту. Но один момент я упускаю начисто: факторизация системы. Разбивка системы на _независимые_ части, которые могут использоваться и продаваться отдельно. И насколько я помню свое собственное обучение, меня этому тоже никто не учил.

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

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

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

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

Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml