Возвращусь к цитате из интервью Брайана Кернигана о чтении чужого кода:
Чтение чужого кода так же бесценно. Конечно, это подразумевает, что код хорош; я не вижу много пользы от чтения больших объемов плохого кода, разве что научиться не писать так.
Первоначально я перевел ее неправильно, указав, что чтение чужого кода не имеет ценности. По двум причинам:
- ошибочно решив, что invaluable переводится как “не имеющий практической ценности”, вместо “бесценный”;
- с чтением хорошего кода связана очень большая проблема.
Я подумал, что Керниган как раз намекает на эту проблему, поэтому-то и не предает значения чтению кода, потому не заглянул в словарь для точного перевода invaluable. :(
Так что же это за проблема такая? Может быть, это отсутствие хорошего кода? Нет. Хороший код встречается, и не так уж редко.
Главная проблема с хорошим кодом в том, что на него не обращаешь внимания. Ведь зачем программисту приходится читать чужой код? Не для того же, чтобы узнать, сколько пробелов используется в отступах (ну такое бывает, но крайне редко). Я читаю чужой код, чтобы понять, как в нем делаются конкретные вещи. Например, как организуется учет тайм-аутов при получении ответа SMTP сервера. Или как формируют HTTP-заголовки в SOAP запросе. Я ищу в коде решение конкретной задачи. И чем проще это решение найти, чем меньше я продираюсь сквозь код, тем код лучше. А вот с плохим кодом ситуация обратная: при попытке найти в коде суть решения основные усилия тратятся на борьбу с кодом. Плохой код, в отличии от хорошего, виден сразу.
Такие вот дела. Пожалуй, я не соглашусь с Керниганом. Чтение хорошего кода не очень полезно, т.к. можно даже не обратить внимание на то, насколько код хорош.
Чтение плохого кода так же не имеет большого смысла – ведь важно не столько понять, что код плох (это не сложно), и даже не почему он плох (это сложнее, в особенности, если приходится свои выводы оформлять для результатов code review). Самое сложное с плохим кодом – это понять, как же не писать такой код. А понять это – это научиться писать хороший код… Опаньки, а круг-то замкнулся… :)
нуу батенька насчет чтения хорошего кода вы не правы. Хороший программист - ленивый программист. Если он видит короткое и простое решение того над чем мудохался долго и налепил кучу кода/багов он усваивает моментально и бессознательно.
ОтветитьУдалитьТ.е., грубо говоря, увидел, как кто-то оформляет циклы, но сознание этого не отметило, а в подсознании отпечаталось... И потом подсознание само "руку направило"...
ОтветитьУдалитьДа, такое возможно, согласен.
Заблуждение 10
ОтветитьУдалитьЛюдей можно научить программированию, показывая им, как писать программы.
...
Дело вот в чем: изучая любой язык, мы в первую очередь учимся читать. Вы берете "Войну и мир", или "Дика и Джейн", или какое-то другое произведение и читаете. И вы не думаете, что можно написать "Дика и Джейн" или "Войну и мир", не изучив как можно больше примеров творчества умелых писателей. (Поверьте мне, написание "Дика и Джейн" тоже требует мастерства! Надо писать словами, входящими в словарь, соответствующий возрасту и знаниям читателей.)
Что же привело нас, занятых в индустрии ПО, на этот порочный путь, путь, на котором писать учат раньше, чем читать? Я даже не уверен, что знаю.
Роберт Гласс Факты и заблуждения профессионального программирования
> Что же привело нас, занятых в индустрии ПО, на этот порочный путь, путь, на котором писать учат раньше, чем читать? Я даже не уверен, что знаю.
ОтветитьУдалитьНе могу согласиться. Хоть аналогии являются всего лишь приближениями, но все-таки придется ими воспользоваться.
Литература -- это отдельный вид творчества, в котором главную роль играют только мозги автора. Тогда как в ряде других областей (скажем, живопись, скульптура или даже слесарное дело) обучение начинается именно с "письма". Т.е. ученик делает рисунок или пилит какую-нибудь деталь. А потом ему показывают, в чем именно он ошибся и что именно он сделал не так. Таким образом приводятся в соответствие умение думать и умение делать руками. Без умения делать руками просмотры тысяч картин, скульптур или изделий из металла ни к чему не приведут.
Программирование, с одной стороны, похоже на литературную деятельность. Но не совсем. Все-таки это инженерная деятельность. И здесь так же нужно привести в согласованное состояние умение думать и "умение делать руками". А умение делать без опыта написания программ не получается. Нужно дать человеку возможность сначала сделать что-то самому. Чтобы потом показать, что именно он сделал не так. Только заработав собственные мозоли можно научиться ценить красоту чужого труда (мля, поэтично как получилось).
Наверное поэтому, программирование начинается с "письма", а не с "чтения".
Еще момент о важности "чтения" что у него указан, и согласен - программист бОльшую часть времени читает код, а не пишет. Причем - чаще чужой код, чем свой (это вытекает из факта сопровождения). Хотя свой, через годик - как чужой :)
ОтветитьУдалитьПонятно что любая аналогия - это не доказательство, а упрощенное видение, по сходству процессов.
По поводу что же такое программирование, есть еще парочка мнений:
Тот тип организационного мастерства и аналитических способностей, который нужен для программирования, связан полностью с гуманитарными науками. Логика, например, преподавалась на философском факультете, когда я был в университете. Процесс, используемый при проектировании и написании компьютерных программ, почти полностью идентичен тому, который используется, чтобы сочинять и писать книги. Ален Голуб
... обычный программист -- не столько математик, сколько лингвист
и философ в одном лице, активно применяющий положения формальной логики.
Ричи О'Бауэр
Программирование как высшая форма творчества
Процесс, используемый при проектировании и написании компьютерных программ, почти полностью идентичен тому, который используется, чтобы сочинять и писать книги.
ОтветитьУдалитьИнтересно, а в написании книг метод brute force так же используется? (copy-and-paste используется точно) :)
Ричи О'Бауэр
Программирование как высшая форма творчества
Недавно прочитал на каком-то HR-форуме: "ИТ-шники, пожалуй, самые большие снобы". Название статьи убеждает меня в этом :)
"ИТ-шники, пожалуй, самые большие снобы".
ОтветитьУдалитьКак истинные графоманы :D
А если серьезно, то не только айтишники. Просто у айтишнирков больше голосов в инете, чтобы демонстировать свой снобизм :)
Программирование как высшая форма творчества
ОтветитьУдалитьПрочитал эту статью. Правильно там написано про математику и неспособность объяснить алгоритм. Интересно написано про отсутствие рефлексии в работе программиста. Но с заголовком и главной идеей о том, что программирование -- это лучшая творческая специальность, я не согласен. Есть еще кучи профессий (архитекторы, кораблестроители, ювелиры и пр.), представители которых с неменьшими основаниями могут так заявить.
Но с заголовком и главной идеей о том ... Есть еще кучи профессий ...
ОтветитьУдалитьА-а-а, это конечно. Просто стандарт мира потребителей, употреблять превосходные степени в описании качеств "продукта".
А про то что в программировании такое же количество рутины (напр спр у Гугла "Программирование — отстой!"), как и в любой другой профессии - помалкивать :)
А-а-а, это конечно. Просто стандарт мира потребителей, употреблять превосходные степени в описании качеств "продукта".
ОтветитьУдалитьДа, это все объясняет :)
А про то что в программировании такое же количество рутины (напр спр у Гугла "Программирование — отстой!"), как и в любой другой профессии - помалкивать :)
Забавно: чем старше я становлюсь, тем спокойнее отношусь к рутине и все более насторожено к необходимости творчества (рождению новых идей). Наверное, действительно "война дело молодых"...
Наверное, действительно "война дело молодых"...
ОтветитьУдалитьВ обществах, где молодые люди 15 - 29-ти лет составляют больше 30% населения, конфликты гарантированно заканчиваются насилием.
Популяционная бомба