Про студентов
2007-11-21 06:48Забавно. Последний год я учу разных людей программировать, разрабатывать и чему то еще такому. Не то что бы это были люди, которым эта учеба нужна как зайцу стопсигнал на хвосте, а все-таки первый навык который осваивается - это самоуверенность и большие замашки по зарплате.
Вообще, интересно наблюдать за людьми после года обучения и работы по специальности. Забавно то, что независимо от реально полученных знаний, у всех развивается "синдром сапера": т.е. уверенность в своих силах, помноженная на отсутствие реальной ответственности.
Такой юный гений просто стремится браться за "сверхсложные" с его точки зрения задачи, причем "сложность" меряется то ли в строках кода, то ли в его запутанности до безобразия. Иногда они достают малоизвестные конструкции и плодят программных монстрров по принципу: "каждая программа должна делать все! Если делается пакет маленьких программ, каждая программа пакета должна использовать все остальные!".
Я вдруг понял, что я упускаю из обучения. Я прекрасно рассказываю теорию и архитектуру используемой системы. Даю много действующих и полезных примеров. И даже стараюсь прививать какой-то вразумительный стиль программирования и следование регламенту. Но один момент я упускаю начисто: факторизация системы. Разбивка системы на _независимые_ части, которые могут использоваться и продаваться отдельно. И насколько я помню свое собственное обучение, меня этому тоже никто не учил.
Дошел своим умом. Когда понял, что прекрасная функция из моей распрекрасной системы пытается подгрузить все остальные функции вообще и загрузить систему целиком. Сейчас я осознал это, но тем не менее, я понимаю что и выбора особого нет. Даже мой любимый Zope3 не так уж хорошо бьется на отдельные пакеты: из каждого нужно выносить какой-то инвариант, которые отвечает за связь компонент и ссылается на них все.
Ну а со студентами просто мрак. Те, что попроще, с большим апломбом просаживают деньги инвесторов на потенциально неработающий код: они наивно наступают на грабли, которые все давно обходят по интуиции. Те что поумнее - занимаются готическим программированием: "Программа должна подавлять и устрашать", - я вижу как простые изначально идеи, найденные ими, постепенно доводятся до полного абсурда: из простого и понятного решения они превращаются в тысячу кнопочек с тысячами неясных возможностей.
Так что глядя со стороны, автоматически разбиваешь решение на более простые эффективные составляющие, показываешь их студенту как оригинальное решение, он в восторге берется за поддержку - и каждая из них превращается в монстра.
С методологией факторизации программных средств надо что-то делать. Хотя бы довести до ума пакет pd.requires. Конечно, автоматический поиск зависимостей сам по себе ничего не решит, но даже визуализация этого бреда может быть, наверно, полезной.



