Sep 02, 2018 04:13
Я много думаю в последнее время о том, почему в первом приближении никого ничему нельзя научить. В частности, из этого следует, что нельзя научить человека быть лучшим программистом (но можно научить-ся).
Есть всякие книги, которые учат тому, как лучше писать программы. Самая известная из них, наверное, "Code Complete" Стива Макконнелла (в русском переводе "Совершенный код"), но есть и многие другие. Навскидку приходят на ум "Working Effectively with Legacy Code", "The Practice of Programming" Кернигана с Пайком, "The Pragmatic Programmer" итд. (не все из них я читал). Книги о дизайне программ (включая объектно-ориентированный дизайн) тоже входят в эту категорию, а если программу пишет не один человек, а много, то и книги об управлении проектами, типа "Мифического человеко-месяца" Фреда Брукса.
Если я прав, то все эти книги почти бесполезны: не полностью, но близко к тому. Как тогда объяснить популярность многих из них, переходящую в культовость в отдельных случаях? Я себе это объясняю так. Почти все хорошие отзывы и хвалу об этих книгах пишут программисты, которым они не нужны, которые в процессе работы над кодом и над собой и так хорошо усвоили то, что в них пишут. Эти программисты, относительно хорошие, наблюдают вокруг себя относительно плохих коллег, конкурентов, учеников - короче, других программистов, новичков и не только. Они пишут ужасный спагетти-код, не комментируют или комментируют слишком много, не умеют мыслить правильными абстракциями, допускают кучу багов, которых легко можно было избежать, итд. Хорошие программисты читают книгу, в которой умной прозой, с хорошими примерами написано: не пишите спагетти-код, не делайте тривиальные комментарии, но там, где нужно, комментируйте, находите правильные абстракции, пользуйтесь такими-то простыми техниками, чтобы избежать тривиальных багов. Они и так знают все это, но думают: отлично написано! Всем плохим или неопытным программистам надо прочитать эту книгу! Очень рекомендую! Но они не задумываются при этом о том, что плохие программисты не осознают разницы между спагетти-кодом и хорошей модуляризацией, тривиальные комментарии кажутся им уместными, они думают, что мыслят правильными абстракциями, итд. Скорее всего, они просто не возьмутся читать эту книгу (потому что само желание читать такие книги коррелирует с определенным уровнем умения), но если им ее всучить и заставить читать, все эти наставления пройдут мимо ушей и не впитаются.
Если мое объяснение верно, то почти все отзывы на такие книги должны выглядеть примерно так: "Отличная книга, содержит множество полезных советов и примеров для начинающего программиста, и даже опытные найдут в ней для себя много интересного (без конкретных примеров)". Если же я неправ, то будет много отзывов следующего вида: "Читая эту книгу, я осознал, как много я делал неправильно, причем систематически - и теперь, следуя ее советам, я пишу код намного лучше".
Как вы думаете, прав я или нет? Особенно интересно услышать о примерах второго рода из вышеописанных - то есть, если вы, скажем, прочитали такую книгу и почерпнули в ней супер-важные, крышесносящие по полезности советы для себя самого, а не гипотетических новичков, и они сделали вас заметно лучшим программистом. Или если вы наблюдали такой эффект подобной книги на ком-то другом. Я не утверждаю, что такое вообще никогда не может случиться; но мне кажется, что в первом приближении такого нет, т.е. подавляющее большинство читателей таких книг - читатели первого рода, "я уже все это знаю, но вот им всем это очень поможет".
программирование,
учиться