
Разработка ПО
DigitalDemiurge
- 37 книг

Ваша оценкаЖанры
Ваша оценка
Правильно будет начать не с книжки, а с себя. Я не гуру. За плечами имею долгий айтишный опыт, но собственно разработкой ПО - вынужденно на разных языках - занимаюсь около полутора лет. Говорю это для того, чтобы было понятно: я - из таргет-группы, книга написана для меня.
Жаль, что Стивен Макконнелл не относится к писательству как к конструированию ПО. Он с ужасом пишет, что программистам кое-где (не уточняется, но точно в Индии) платят за код построчно. Есть подозрение, что в американских издательствах компьютерной литературы платят именно так: Совершенный код сомнений в обратном не вызывает. Это даже не тот случай, когда читать книжку для пользы дела нужно по диагонали. Правильный способ такой: до середины читать то, что выделено жирным или большим шрифтом (заголовки), а начиная с пятой части - только большим: там происходит переход на более высокий уровень абстракции и снова все повторяется. Начиная, кстати, с этой 5 части каждая новая глава напоминает введение в какую-то другую книгу - тоже, впрочем, неинтересную. То есть все становится еще хуже, чем было. Хотя казалось, что хуже быть уже не могло.
Семьдесят страниц вводного текста ни о чем напоминают напоминают введение Жака Деррида к Диссеминации , где этот странный - в плохом смысле - мыслитель сомневается в необходимости введения как такового. Две последние главы у Макконнелла - сотня страниц примерно - резюмируют то, что было написано раньше. Это при том, что свое отдельное резюме есть в каждой главе. Вообще, будучи в здравом уме, книгу невозможно прочитать от корки до корки. И пусть ваша читательская совесть будет спокойна, страдать должен Макконнелл. Плюс в том, что он откровенен - и это его главное - как автора - достоинство. Он признает, например, что худший виденный им код написала женщина. Не буду делиться своим опытом и своими мыслями на этот счет, но написать такое в современной Америке требует большой смелости.
Макконнелл многое взял из литературы по мотивации (так вроде называется весь этот говнотрэш про думай-и-богатей?). Очень кстати под конец мелькнула цитата из Карнеги. Книга содержит Тест на готовность руководителя, разделы про психологические аспекты отладки, личность программиста и другие ценные вещи. Утверждается, например, что программист должен быть умным. Это обязательно. Для глупых Макконнелл подготовил специальную подборку книжек по развитию ума.
Мало кто меня раздражает, как Аристотель. А Макконнелл его очень любит и навязчиво цитирует: дурной знак - от таких интеллектуалов надо бежать. Этот грек - глупый и злобный - придумал движущую силу для физиков, флогистон для химиков и даже программистам нагадил через толщу веков. Размышляя не так давно об ООП я понял, что именно из-за Аристотеля оно работает со скрипом. Мир есть совокупность фактов, а не вещей. Если почитать Виттгенштейна, все встает на места, и серебряная пуля - вот она. Не вещь надо ставить на вершину иерархии, а операцию-действие. Это тема для другого текста: надо его все-таки написать, может, для Хабра.
Вот как раз цитата из Макконнелла на философскую тему:
Уж не знаю, встречал ли Аристотель в реальном мире окружность и прямоугольник (square?), но у автора есть определенные проблемы на уровне базы (не данных).
Рекомендации по конструированию делятся на самоочевидные и спорные:
(очевидно, автор никогда не моделировал производственные процессы, где объекты обладают множеством характеристик, одни из которых участвуют в логике, другие нужны просто для учета - я, например, не вижу смысла резать такой объект и таблицу поперек, код от этого проще не станет)
(избавляемся от дата-классов?)
(программист должен быть еще и лингвистом-психологом? или речь о том, что лучше придумать синоним, если есть сомнения? мол, пиши флюкончик и ложись спать?)
Об исключениях автор говорит, что на высоком уровне абстракции лучше показать Data not available, чем Disk is not ready. Вопрос: для кого лучше? Кому такое исключение упростит жизнь? Снизить степень вложенности автор советует путем замены else if на case. А в качестве эффективного метода отладки предлагает спроектировать и переписать программу с нуля
Раздел про операторы, напротив, равно бесспорный и ненужный. Макконннелл советует: если вы пишете if-then, то, возможно, вам стоит написать еще и else, потому что британские ученые установили, что в 68.5% процентах случаев, он тоже вам пригодится.
Раздел про оператор goto на 15 страницах - просто шедевр. Вспомнилась статья Пьера Менара из рассказа Борхеса о возможности обогатить игру в шахматы, устранив одну из ладейных пешек. Менар предлагает, рекомендует, обсуждает и в конце концов отвергает это новшество.
Очень хороший пример Макконнелл приводит с этим же оператором в разделе о циклах:
Говорит, так нельзя делать. Входить в циклы надо правильно. Вообще Макконнелл не утруждает себя поиском и разбором каких-то типичных ошибок. Из его примеров плохого можно составить пособие по экстравагантному говнокодированию: лучше писать if ( a > b ) - говорит автор, - чем if ( (a > b) == true ).
Интересна глава про форматирование кода. Одни люди переносят фигурную скобку:
If ( ... )
{
......
}
Другие не переносят:
Как лучше? Макконнелл считает, что никакой разницы нет. Но 40 страниц придется прочитать.
Из всего объема (за вычетом предисловий и послесловий к послесловиям) процентов пять, наверное, имеют ценность. Меня, например, заставила задуматься главка о семантическом сопряжении, которое я учитывал только подсознательно. Ну и глава про инструментарий оказалась полезной. О некоторых штуках я действительно не слышал. Вообще, жаль немного, что Макконнелл обошелся со своим опытом и желанием этим опытом поделиться столь безобразно. Он мог написать большую статью, например, и эта статья вошла бы во все хрестоматии, потому что упорядочить правила хорошего кодирования многого стоит. Пожалел я немного и о потраченном времени (хотя его всего считанные часы, потому что книжка пустая) и о деньгах (не немного, нормально). 840 рублей заплатил я на Озоне за этого Наполеона-Хилла-для-программистов.


Это та книга, которую я хотел бы прочесть раньше.
Если ответить на вопрос — что прочесть, «Совершенный код» Макконнелла ИЛИ «Чистый код» Мартина, то я бы порекомендовал именно Макконнелла. Хотя я не могу сказать, что у Мартина нет ничего дополнительно к тому, о чём пишет Макконнелл, что Мартин вторичен, нет. Как минимум эти его знаменитые SOLID-принципы описаны именно у Мартина в Чистом коде (хотя формулировки он потом в Чистой архитектуре и меняет потом, для SRP, например). Поэтому в конечном итоге я бы рекомендовал читать обе книги. Но начать бы рекомендовал с Макконнелла.
В «Совершенном коде» очень много ссылок на исследования и практически всё подкреплено цифрами. Научный здравый подход. Что лучше — автотестирование или код-ревью или парное программирование, что какие результаты даёт? В книге есть ответы в цифрах и мне было крайне интересно с ними познакомиться.
Да, книга «старая» (выпущена чуть раньше, чем сегодня в обед) и многие боятся её поэтому брать в руки — «да там всё устарело уже, какой смысл читать книги по программированию начала 2000-х?». Автор где-то в книге пишет — и я с ним полностью солидарен — что ценность изучения синтаксиса языка программирования или очередного фреймворка не очень велика, это всё изучается быстро (даже есть цифры относительно этого, насколько «знакомость» технологии для команды влияет на успешность проекта), а вот ценность более фундаментальных вещей, умения писать код и выстраивать методологию работы с ним — это важно, это применимо к любой технологии, и в этом особо ничего не изменилось за последние десятилетия.
Вставки кода где-то на C++, где-то на Java, где-то на Basic — ну да, есть. Но какого программиста это напугает? Весь код понятен и сам по себе, и тем более с пояснениями автора. Никаких заумностей нет. Да, обсуждаются некоторые возможности, которые в современных языках часто не представлены (goto, например), но вот как раз новички и узнают, что есть хорошо и что есть плохо и почему оно всё развивается именно так. Неактуального в книге мало и оно тоже интересно-полезно.
Вообще очень интересно сравнить «Совершенный код» с современными книгами по программированию. «Совершенный код» — не сухой унылый учебник, но подкрепляет почти всё цифрами и исследованиями, в то время как большинство современных книг это зачастую пересказ документации с вкраплениями жизненного опыта автора (совсем не бесспорного опыта, стоит сказать, и тем более с совсем не бесспорными выводами из совсем нерепрезентативной выборки этого своего жизненного опыта). Мне бы хотелось видеть больше современных книг с подходом Макконнелла, но, кажется, их на полках практически нет.
Да, книга толстенькая, почти 900 страниц, но читается легко и едва ли займёт много месяцев на проработку. Если читать, конечно.
Разумеется, «Совершенный код» надо читать не раньше, чем когда уже уложился в голове синтаксис твоего первого языка программирования. Но вот именно в этот момент стоит и прочесть. Как верно пишет автор, лучше сразу учиться писать правильно — чем прививать себе сначала не лучшие привычки и потом пытаться их перестраивать.
Опытным разработчикам многое из написанного будет знакомо, но всё равно на некоторых страницах вы будете восклицать — «о, точняк!». А менее опытным так это просто must read.

"Когда вместе собираются критики, они говорят о Теме, Композиции и Идее. Когда вместе собираются художники, они говорят о том, где купить дешёвый скипидар".
Пабло Пикассо.

"Я никогда не встречал человека, желающего читать 17000 страниц документации, а если бы встретил, то убил бы его, чтобы он не портил генофонд."
Джозеф Костелло.

Зачастую единственным видом доступной программистам документации является сам исходный код. Спецификации требований и проектная документация могут устареть, но исходный код актуален всегда, поэтому он должен быть максимально качественным.
















Другие издания


