?

Log in

No account? Create an account
о книгах про программирование - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

о книгах про программирование [сент. 2, 2018|04:13 am]
Anatoly Vorobey
[Tags|, ]

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

Есть всякие книги, которые учат тому, как лучше писать программы. Самая известная из них, наверное, "Code Complete" Стива Макконнелла (в русском переводе "Совершенный код"), но есть и многие другие. Навскидку приходят на ум "Working Effectively with Legacy Code", "The Practice of Programming" Кернигана с Пайком, "The Pragmatic Programmer" итд. (не все из них я читал). Книги о дизайне программ (включая объектно-ориентированный дизайн) тоже входят в эту категорию, а если программу пишет не один человек, а много, то и книги об управлении проектами, типа "Мифического человеко-месяца" Фреда Брукса.

Если я прав, то все эти книги почти бесполезны: не полностью, но близко к тому. Как тогда объяснить популярность многих из них, переходящую в культовость в отдельных случаях? Я себе это объясняю так. Почти все хорошие отзывы и хвалу об этих книгах пишут программисты, которым они не нужны, которые в процессе работы над кодом и над собой и так хорошо усвоили то, что в них пишут. Эти программисты, относительно хорошие, наблюдают вокруг себя относительно плохих коллег, конкурентов, учеников - короче, других программистов, новичков и не только. Они пишут ужасный спагетти-код, не комментируют или комментируют слишком много, не умеют мыслить правильными абстракциями, допускают кучу багов, которых легко можно было избежать, итд. Хорошие программисты читают книгу, в которой умной прозой, с хорошими примерами написано: не пишите спагетти-код, не делайте тривиальные комментарии, но там, где нужно, комментируйте, находите правильные абстракции, пользуйтесь такими-то простыми техниками, чтобы избежать тривиальных багов. Они и так знают все это, но думают: отлично написано! Всем плохим или неопытным программистам надо прочитать эту книгу! Очень рекомендую! Но они не задумываются при этом о том, что плохие программисты не осознают разницы между спагетти-кодом и хорошей модуляризацией, тривиальные комментарии кажутся им уместными, они думают, что мыслят правильными абстракциями, итд. Скорее всего, они просто не возьмутся читать эту книгу (потому что само желание читать такие книги коррелирует с определенным уровнем умения), но если им ее всучить и заставить читать, все эти наставления пройдут мимо ушей и не впитаются.

Если мое объяснение верно, то почти все отзывы на такие книги должны выглядеть примерно так: "Отличная книга, содержит множество полезных советов и примеров для начинающего программиста, и даже опытные найдут в ней для себя много интересного (без конкретных примеров)". Если же я неправ, то будет много отзывов следующего вида: "Читая эту книгу, я осознал, как много я делал неправильно, причем систематически - и теперь, следуя ее советам, я пишу код намного лучше".

Как вы думаете, прав я или нет? Особенно интересно услышать о примерах второго рода из вышеописанных - то есть, если вы, скажем, прочитали такую книгу и почерпнули в ней супер-важные, крышесносящие по полезности советы для себя самого, а не гипотетических новичков, и они сделали вас заметно лучшим программистом. Или если вы наблюдали такой эффект подобной книги на ком-то другом. Я не утверждаю, что такое вообще никогда не может случиться; но мне кажется, что в первом приближении такого нет, т.е. подавляющее большинство читателей таких книг - читатели первого рода, "я уже все это знаю, но вот им всем это очень поможет".
СсылкаОтветить

Comments:
Страница 1 из 3
<<[1] [2] [3] >>
[User Picture]From: tandem_bike
2018-09-02 01:44 am
i agree that they are useless, though i glanced through only two, and i rarely program now. i think what is most useful is - are - courses. at the department of engineering or computer science of a 4-year school or in postgrad courses there.

this is my painful history. for my own senior thesis which had a project/subject i should have asked changed, haning had insufficient background, but i had a shitty advisor and he needed this done. i was not prepared to tackle it, was talking to him in hope he removes me from the project, I had almost no guidance from anybody with reasonable apple math in them, and he told me that a smart person ought to be able to teach themselves. in addition to learning the kind of applied math i never had before, and without the benefit of a matshkola ( i realized later taking probability functional analysis diff. eq. statistics control theory etc) - i did NOT learn them, no matter how i thought i had some grasp - i was also required to write programs in fortran. on mainframe, then we switched to PDP-11. ( i am O-L-D).

i thought i did okay, the adviser was okay with my work, my programs compiled ran and gave results, line editor was easy to master, i learned to debug sequentially etc. but... it was this horrible sloppy programming you describe, as i realized later when taking formal courses for the next degree. the ones that had good teachers with exacting standards for all esthetic and algorithmic aspects of writing code, and... TEXTBOOKS. and frequent multitasking - from very few variants i coded for my diploma work as an undergrad, to writing studenty stuff like sorters, poker playing programs, text parsers, puzzle solvers, etc - it was so wonderful to actually LEARN and not just write feverishly. my first book was called Data Structures in Pascal ( told you i am old!). the second was kernighan and ritchie's C - and guess who was the professor - RITCHIE. he was a visiting prof that term, and he was brutal as far as indentations, comment styles, modules and functions, variable names, etc, etc.

it was such a revelation. a learning experience. later i had to do assembler ( 86something, aaa! OLD!) and it was also fun, as was digital logic , signals and systems and other multiple engineering courses. one CANNOT become a programmer or an engineer without training, was my conclusion, no "by myself, i can learn it from a book".

no you can't.

thus i consider those nice books - nighttable reading. to fall asleep faster. no revelations, maybe a few tricks at most.

through my entire PhD work i programmed in C (before ++!) and MATLAB, and was so grateful to my previous strict professors who taught me at least enough coding for me not to feel like an idiot.

Edited at 2018-09-02 01:49 (UTC)
(Ответить) (Thread)
[User Picture]From: archaicos
2018-09-02 04:22 am
If you're lucky with fellow programmers, you learn to get your code straight after a number of code reviews done by them. Coding for multiple architectures and platforms helps as well if we're talking about things such as C(++). You can get this training on the job (not a course), although it's not a given (like I said, "if you're lucky").

As for books, attentive reading of K&R or the C standard would help with the language but there're plenty of outright bad ones (just as there are countless bad online "tutorials") and in this particular case, I'm afraid, no course would be a substitute for the proper reference and/or code reviews by those in the know. There's too much info for a single course.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: dima_stat
2018-09-02 02:10 am
научить нельзя, но можно показать, чему сам научился.
и этим уже можно пользоваться.
(Ответить) (Thread)
[User Picture]From: tn
2018-09-02 03:13 am
Ричард Фейнман высказал однажды нечто в этом роде. Что, мол, обучение может пойти впрок только тем, кто к нему предрасположен. Но им-то оно почти и не нужно.
(Ответить) (Thread)
[User Picture]From: volk007
2018-09-02 03:21 am
Такие книги помогают организовать мысли и создать структуру, что бы не быть как той собакой - «все понимает, но сказать не может».

Я все равно всем программистам рекомендую читать Peopleware и Mythical Man-month. Понятно, что они релевантны только в контексте - т.е. самому нужно быть в правильной ситуации и готовым воспринимать идеи, что-бы пользу извлечь.
(Ответить) (Thread)
[User Picture]From: alxt
2018-09-02 03:42 am
По-моему...
1. Программирование это выражение мыслей на формальном языке. И для умения это делать понятно и кратко надо уметь говорить и писать понятно и кратко. Это закладывается в школе. Или раньше.
2. Если при прочтении не возникает шока, то ничему не научишься. А "да, так и надо" это просто подтверждение твоих мыслей. Может будет проще другим из объяснять.
(Ответить) (Thread)
[User Picture]From: deadkittten
2018-09-02 03:45 am
Соглашусь с volk007 -- эти книги мало чему могут обучить "с нуля", но хорошо помогают структурировать уже имеющийся опыт.
(Ответить) (Thread)
[User Picture]From: alxt
2018-09-02 04:06 am
Восторге книга, которая позволяет проявиться мысли. Если мысли нет, или она не дозрела, то книгу не поймёшь. Если мысль сформулирована - будет скучно.
(Ответить) (Thread)
[User Picture]From: vishniakov
2018-09-02 04:25 am
Есть минимум третий вариант и у меня в основном он - "Я не знал ничего, а теперь примерно понимаю с чего начать и каким образом действовать. Детали уже можно будет уточнить в процессе."
И это для новичков, для тех кто обучается, да. Таких книг мало.
(Ответить) (Thread)
[User Picture]From: special_linear
2018-09-02 04:54 am
Вот-вот, кроме вариантов "учить хорошо обученного" (в чем нет смысла) и "переучивать плохо обученного" (что очень тяжело) есть вариант "учить вообще не обученного" (который упускается из виду).
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: archaicos
2018-09-02 04:31 am
Программистам книги типа The MMM полезны когда мало опыта работы в разных организациях. Они дают идеи по поводу организации работы, а не непосредственно помогают с программированием. В начале карьеры (если это можно так назвать) имеет смысл ознакомиться.

Ну и товарищам, которые оторваны от будничных реалий программистов, тоже неплохо бы понимать, как оно там у подчинённых программистов работает и не работает. А то ж программисты будут жаловаться, уходить, заниматься саботажем и т.п.
(Ответить) (Thread)
[User Picture]From: levtsn
2018-09-02 04:51 am

Я вот эти книги читал, а как программист я двадцатилетний пионер. Не в смысле возраста. Большие проекты меня выносят.

(Ответить) (Thread)
[User Picture]From: levtsn
2018-09-02 04:54 am

Сиплюс неосвоил. Что такое деревья вот только узнал, пожал плечами и подумал "диковина". Писал всякую мелоч вспомогательную связанную с железом и микроконтроллерами.

(Ответить) (Parent) (Thread)
[User Picture]From: oxfv
2018-09-02 06:06 am
Лучше всего положительный эффект от таких книг описывается анекдотом с панчлайном "а что, можно было?". То есть в некоторых случаях история/теория/совет оказываются типа энейблерами того, что внутри и так уже созрело. Что, очевидно, следует рассматривать как прямую пользу от таких книжек.
(Ответить) (Thread)
[User Picture]From: juunitaki
2018-09-02 06:13 am
В какой книге прочитать о том, как именовать объекты в программе?
(Ответить) (Thread)
[User Picture]From: igann
2018-09-02 03:38 pm

(Ответить) (Parent) (Thread)
[User Picture]From: korchy
2018-09-02 06:42 am
Я, наверное, программист ближе ко второму роду ) Который все никак не возьмется читать подобную книгу. Хотя вроде бы сильно грязный код не пишу ). Просто каждый любит ходить по граблям самостоятельно. И скорее даже не ощущает, что под ногами грабли, пока не прилетит по лбу ). А раз нет этого ощущения, то и необходимости читать подобные книги не возникает. А когда грабли прилетели, книга уже не очень нужна т.к. испытано на себе )
(Ответить) (Thread)
[User Picture]From: cryinstone
2018-09-02 12:29 pm
Эх, как давно у меня последний раз было время читать книги!
(Ответить) (Parent) (Thread)
[User Picture]From: kray_zemli
2018-09-02 06:52 am
В реале старшие учат младших тыкая их за волосы мордой в монитор во время ревью. А когда младшие начинают возмущаться — "А чего это ты считаешь,что по-твоему хорошо, а по-моему плохо?" — то есть в запасе хорошая толстенькая книжка, которой можно поддать по затылку.

Edited at 2018-09-02 08:57 (UTC)
(Ответить) (Thread)
[User Picture]From: karchamal
2018-09-02 07:46 pm
Ну, если младший достаточно упертый, книжку он прочтет, а потом просто будет ссылаться на противоположный подход, описанный в той же самой книге. Если книга и вправду хорошая, там не будет silver bullets, но будет много про здравый смысл, который в конечном счете не трансплантируется.
(Ответить) (Parent) (Thread)
[User Picture]From: livelight
2018-09-02 06:56 am
"Сильному тренировки не нужны, а слабому они не помогут"

Вот и с книгами так же. И в плане мыслей об их полезности, и в плане их реальной полезности :)
(Ответить) (Thread)
[User Picture]From: theaspect
2018-09-21 07:52 am
Когда у сильно спрашивают как он стал сильным, то выясняется что сильный каждый день на протяжении пяти лет усердно тренировался
(Ответить) (Parent) (Thread)
Страница 1 из 3
<<[1] [2] [3] >>