Правильная ссылка на эту страницу
http://az-design.ru/Support/SoftWare/l/GlassRob/03g10.shtml

ЗАБЛУЖДЕНИЕ 10

Заблуждение 10
       Людей можно научить программированию, показывая им, как писать программы.

Обсуждение
       Как вы учились программировать? Готов спорить, что это были какие-то занятия в учебном классе, на которых преподаватель рассказывал о правилах языка программирования, после чего предоставлял слушателям писать некий программный код, как им заблагорассудится, А если вы учились программировать более чем на одном языке, то наверняка во всех случаях это было одно и то же. Вы читали о языке программирования, или вам рассказывали о нем, а потом предоставляли полную свободу писать на этом языке все что угодно.
       И такой способ обучения программированию настолько вошел в норму, что вы, может быть, и не видите в нем ничего плохого, И напрасно. Он отнимает массу времени.
       Дело вот в чем: изучая любой язык, мы в первую очередь учимся читать. Вы берете "Войну и мир", или "Дика и Джейн", или какое-то другое произведение и читаете. И вы не думаете, что можно написать "Дика и Джейн" или "Войну и мир", не изучив как можно больше примеров творчества умелых писателей. (Поверьте мне, написание "Дика и Джейн" тоже требует мастерства! Надо писать словами, входящими в словарь, соответствующий возрасту и знаниям читателей.)
       Что же привело нас, занятых в индустрии ПО, на этот порочный путь, путь, на котором писать учат раньше, чем читать? Я даже не уверен, что знаю. Но мы идем по нему, в этом нет сомнений. Я не знаю ни одного учебного заведения и даже ни одного учебника, в котором бы будущих писателей программ сначала учили их читать. Стандартные учебные программы по различным компьютерным дисциплинам - вычислительной технике, разработке ПО, информационным системам- включают курсы по написанию программ, но ни в одну не включены курсы по их чтению.
       Выше я задал вопрос, до некоторой степени риторический, а именно: как же мы докатились до такой жизни. У меня есть некоторые соображения по этому поводу.
       1. Для того чтобы учить чтению программ, необходимо выбрать соответствующие образцы. Наверное, это должен быть первоклассный код. И найти такие образцы весьма непросто. Не исключено, что в этом коде должны быть ошибки, чтобы из него можно было извлечь уроки, которые бы учили, как делать не надо. И это тоже нелегко найти. Трудность в том, что у тех, кто занят в индустрии ПО, не всегда совпадают взгляды на то, что такое хороший код, и что такое плохой. Более того, в большинстве своем программы не состоят только из плохого или только из хорошего кода, в них есть и то, и другое. Несколько лет назад Институт инженерии ПО (Software Engineering Institute - SEI) с этой самой целью провел поиск образцового кода и в конце концов отказался от этой затеи. В итоге они удовольствовались неким типичным кодом, в котором были как удачные, так и неудачные фрагменты. (Большинство программистов считают себя лучшими мастерами в мире, но я думаю, приходится признать, что свою "Войну и мир" никто из них еще не написал!)
       2. Для того чтобы можно было учить чтению программного кода, необходимы учебники. Их нет. В каждой из известных мне книг по программированию говорится о написании программ, а не о чтении. Одна из причин состоит в том, что никто не знает, как написать такую книгу Недавно я рецензировал для одного большого издательства рукопись, претендовавшую на раскрытие этой темы. На первый взгляд эта задача была практически выполнена. Один серьезный недостаток у этой книги, написанной состоявшимся автором, тем не менее был. Он-то и заставил меня рекомендовать (испытывая при этом сожаление) издательству отказаться от ее публикации. Она была адресована тем, кто умел программировать, а этим людям уже не надо сначала учиться читать. В такой книге отчаянно нуждаются новички ("Дика и Джейн" не напишешь без умения).
       3. Как я уже говорил, много лет назад мы составили типовой учебный курс по академическим дисциплинам, имеющим отношение к программированию. Это было хорошее дело. Но в этом курсе ни полслова не было сказано о том, чтобы учить чтению кода. Все это означает, что теперь этот метод обучения, в котором все поставлено с ног на голову, приобрел законный статус. А мы знаем, как трудно изменять устоявшийся порядок вещей!
       4. Единственное время, когда в индустрии ПО читают код, — это период сопровождения. А сопровождение представляет собой область деятельности, к которой относятся с сильным пренебрежением. Одна из причин такого отношения заключается в том, что чтение кода - это очень непростое дело. Намного приятнее написать свой собственный новый код, чем читать старый и чужой.

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

Источники
       Если вы никогда не задумывались об этом, а я думаю, что в индустрии ПО это норма, то можете удивиться, увидев представительный список тех, кто занимает по этому вопросу определенную позицию.
       — Corbi, Т. А 1989. "Program Understanding: Challenge for the 1990s". IBM Systems Journal 28, no. 2. Обратите внимание на дату публикации - тема поднята уже довольно давно. Автор говорит: "Классическое образование в других "языковых" дисциплинах включает обучение устной речи, чтению и письму... На многих факультетах и кафедрах вычислительной техники уверены, что студенты, обучающиеся у них, готовятся приносить пользу на рабочем месте... Приобретение навыков понимания программного кода откладывается в значительной степени до начала работы."
       — Deimel, Lionel. 1985. "The Uses of Program Readings ACM SIGCSE Bulletin 17, no. 2 (June). В этой работе утверждается, что чтение программного кода имеет большое значение, и ему следует обучать; предложены некоторые подходы к обучению.
       — Glass, Robert L. 1998. Software 2020, Computing Trends. В этот сборник очерков входит один, озаглавленный "The "Maintenance First" Software Era". В нем говорится, что сопровождение ПО важнее, чем его разработка, и что сначала надо учиться читать программный код, а потом писать его, потому что специалисты по сопровождению занимаются именно чтением.
       — Mills, Harlan. 1990, Презентация, сделанная на конференции по сопровождению ПО и на которую есть ссылка в работе [Glass, 1998]. Этот выдающийся ученый-компьютерщик говорит, чго необходимо "в первую очередь преподавать сопровождение..., потому что в более сложившихся областях знания [по сравнению с программированием] сначала учат читать, а потом писать". Возможно, небезынтересной в этом контексте будет еще одна цитата.
       Я уже приводил ее раньше, в Факте 44, когда говорил о сопровождении ПО, но и здесь она вполне уместна.
       — Lammers, Susan. 1986. Programmers at Work. Redmond, WA: Microsoft Press В этой книге и цитируется Билл Гейтс (он был тогда моложе): "[самый] лучший способ подготовиться [быть программистом] состоит в том, чтобы писать программы и изучать хорошие программы, написанные другими. ...Я выуживал листинги операционных систем в мусорных корзинах вычислительного центра".


<<< Пред. Оглавление
Glass Robert L.
Начало раздела
След. >>>



<<< Пред. Оглавление
Начало раздела
След. >>>

Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:55 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/SoftWare/l/GlassRob/03g10.shtml