
Ваша оценкаЖанры
Рейтинг LiveLib
- 570%
- 422%
- 35%
- 21%
- 10%
Ваша оценкаРецензии
outsight18 апреля 2016Читать далееПравильно будет начать не с книжки, а с себя. Я не гуру. За плечами имею долгий айтишный опыт, но собственно разработкой ПО - вынужденно на разных языках - занимаюсь около полутора лет. Говорю это для того, чтобы было понятно: я - из таргет-группы, книга написана для меня.
Жаль, что Стивен Макконнелл не относится к писательству как к конструированию ПО. Он с ужасом пишет, что программистам кое-где (не уточняется, но точно в Индии) платят за код построчно. Есть подозрение, что в американских издательствах компьютерной литературы платят именно так: Совершенный код сомнений в обратном не вызывает. Это даже не тот случай, когда читать книжку для пользы дела нужно по диагонали. Правильный способ такой: до середины читать то, что выделено жирным или большим шрифтом (заголовки), а начиная с пятой части - только большим: там происходит переход на более высокий уровень абстракции и снова все повторяется. Начиная, кстати, с этой 5 части каждая новая глава напоминает введение в какую-то другую книгу - тоже, впрочем, неинтересную. То есть все становится еще хуже, чем было. Хотя казалось, что хуже быть уже не могло.
Семьдесят страниц вводного текста ни о чем напоминают напоминают введение Жака Деррида к Диссеминации , где этот странный - в плохом смысле - мыслитель сомневается в необходимости введения как такового. Две последние главы у Макконнелла - сотня страниц примерно - резюмируют то, что было написано раньше. Это при том, что свое отдельное резюме есть в каждой главе. Вообще, будучи в здравом уме, книгу невозможно прочитать от корки до корки. И пусть ваша читательская совесть будет спокойна, страдать должен Макконнелл. Плюс в том, что он откровенен - и это его главное - как автора - достоинство. Он признает, например, что худший виденный им код написала женщина. Не буду делиться своим опытом и своими мыслями на этот счет, но написать такое в современной Америке требует большой смелости.
Макконнелл многое взял из литературы по мотивации (так вроде называется весь этот говнотрэш про думай-и-богатей?). Очень кстати под конец мелькнула цитата из Карнеги. Книга содержит Тест на готовность руководителя, разделы про психологические аспекты отладки, личность программиста и другие ценные вещи. Утверждается, например, что программист должен быть умным. Это обязательно. Для глупых Макконнелл подготовил специальную подборку книжек по развитию ума.
Мало кто меня раздражает, как Аристотель. А Макконнелл его очень любит и навязчиво цитирует: дурной знак - от таких интеллектуалов надо бежать. Этот грек - глупый и злобный - придумал движущую силу для физиков, флогистон для химиков и даже программистам нагадил через толщу веков. Размышляя не так давно об ООП я понял, что именно из-за Аристотеля оно работает со скрипом. Мир есть совокупность фактов, а не вещей. Если почитать Виттгенштейна, все встает на места, и серебряная пуля - вот она. Не вещь надо ставить на вершину иерархии, а операцию-действие. Это тема для другого текста: надо его все-таки написать, может, для Хабра.
Вот как раз цитата из Макконнелла на философскую тему:
Прекрасный пример абстрактного объекта, который не существует в реальном мире, - Shape(фигура). Объекты Circle(окружность) и Square(прямоугольник) существуют на самом деле, тогда как класс Shape - это абстракция конкретных фигур.Уж не знаю, встречал ли Аристотель в реальном мире окружность и прямоугольник (square?), но у автора есть определенные проблемы на уровне базы (не данных).
Рекомендации по конструированию делятся на самоочевидные и спорные:
Настороженно относитесь к классам, содержащим более семи элементов данных-членов.(очевидно, автор никогда не моделировал производственные процессы, где объекты обладают множеством характеристик, одни из которых участвуют в логике, другие нужны просто для учета - я, например, не вижу смысла резать такой объект и таблицу поперек, код от этого проще не станет)
Если класс имеет только данные, но не формы поведения, спросите себя, действительно ли это класс. Возможно, этот класс следует разжаловать, сделав его данные-члены аттрибутами одного или нескольких других классов.(избавляемся от дата-классов?)
Избегайте слов, при написании которых люди часто допускают ошибки.(программист должен быть еще и лингвистом-психологом? или речь о том, что лучше придумать синоним, если есть сомнения? мол, пиши флюкончик и ложись спать?)
Об исключениях автор говорит, что на высоком уровне абстракции лучше показать Data not available, чем Disk is not ready. Вопрос: для кого лучше? Кому такое исключение упростит жизнь? Снизить степень вложенности автор советует путем замены else if на case. А в качестве эффективного метода отладки предлагает спроектировать и переписать программу с нуля
Раздел про операторы, напротив, равно бесспорный и ненужный. Макконннелл советует: если вы пишете if-then, то, возможно, вам стоит написать еще и else, потому что британские ученые установили, что в 68.5% процентах случаев, он тоже вам пригодится.
Раздел про оператор goto на 15 страницах - просто шедевр. Вспомнилась статья Пьера Менара из рассказа Борхеса о возможности обогатить игру в шахматы, устранив одну из ладейных пешек. Менар предлагает, рекомендует, обсуждает и в конце концов отвергает это новшество.
Очень хороший пример Макконнелл приводит с этим же оператором в разделе о циклах:
goto Start:
while (exptession) {
// Делаем что-то
Start:
// Делаем что-то еще
}Говорит, так нельзя делать. Входить в циклы надо правильно. Вообще Макконнелл не утруждает себя поиском и разбором каких-то типичных ошибок. Из его примеров плохого можно составить пособие по экстравагантному говнокодированию: лучше писать if ( a > b ) - говорит автор, - чем if ( (a > b) == true ).
Интересна глава про форматирование кода. Одни люди переносят фигурную скобку:
If ( ... )
{
......
}Другие не переносят:
If ( ... ) {
......
}Как лучше? Макконнелл считает, что никакой разницы нет. Но 40 страниц придется прочитать.
Из всего объема (за вычетом предисловий и послесловий к послесловиям) процентов пять, наверное, имеют ценность. Меня, например, заставила задуматься главка о семантическом сопряжении, которое я учитывал только подсознательно. Ну и глава про инструментарий оказалась полезной. О некоторых штуках я действительно не слышал. Вообще, жаль немного, что Макконнелл обошелся со своим опытом и желанием этим опытом поделиться столь безобразно. Он мог написать большую статью, например, и эта статья вошла бы во все хрестоматии, потому что упорядочить правила хорошего кодирования многого стоит. Пожалел я немного и о потраченном времени (хотя его всего считанные часы, потому что книжка пустая) и о деньгах (не немного, нормально). 840 рублей заплатил я на Озоне за этого Наполеона-Хилла-для-программистов.
26 понравилось
8,4K
lesowik27 сентября 2008Эта книга должна стать настольной книгой абсолютно ЛЮБОГО программиста, а зачастую, и менеджера. И настольной не в том смысле, что будет лежать на столе как подставка под кофе, а в том, что ее необходимо читать и осознавать, что там написано. Только полное понимание основ, сути своего дела является залогом успеха. Эта "программисткая библия", в которой ясно изложены "программистские заповеди". Эта книга научит понимать, что вы делаете, как вы делаете и для чего вы делаете. Не изобретайте велосипед. Читайте "Совершенный код", вдохновляйтесь, творите свои IT-чудеса и получайте максимум удовольствия.Читать далее24 понравилось
2,1K
alexey-goloburdin5 мая 2024Читать далееЭто та книга, которую я хотел бы прочесть раньше.
Если ответить на вопрос — что прочесть, «Совершенный код» Макконнелла ИЛИ «Чистый код» Мартина, то я бы порекомендовал именно Макконнелла. Хотя я не могу сказать, что у Мартина нет ничего дополнительно к тому, о чём пишет Макконнелл, что Мартин вторичен, нет. Как минимум эти его знаменитые SOLID-принципы описаны именно у Мартина в Чистом коде (хотя формулировки он потом в Чистой архитектуре и меняет потом, для SRP, например). Поэтому в конечном итоге я бы рекомендовал читать обе книги. Но начать бы рекомендовал с Макконнелла.
В «Совершенном коде» очень много ссылок на исследования и практически всё подкреплено цифрами. Научный здравый подход. Что лучше — автотестирование или код-ревью или парное программирование, что какие результаты даёт? В книге есть ответы в цифрах и мне было крайне интересно с ними познакомиться.
Да, книга «старая» (выпущена чуть раньше, чем сегодня в обед) и многие боятся её поэтому брать в руки — «да там всё устарело уже, какой смысл читать книги по программированию начала 2000-х?». Автор где-то в книге пишет — и я с ним полностью солидарен — что ценность изучения синтаксиса языка программирования или очередного фреймворка не очень велика, это всё изучается быстро (даже есть цифры относительно этого, насколько «знакомость» технологии для команды влияет на успешность проекта), а вот ценность более фундаментальных вещей, умения писать код и выстраивать методологию работы с ним — это важно, это применимо к любой технологии, и в этом особо ничего не изменилось за последние десятилетия.
Вставки кода где-то на C++, где-то на Java, где-то на Basic — ну да, есть. Но какого программиста это напугает? Весь код понятен и сам по себе, и тем более с пояснениями автора. Никаких заумностей нет. Да, обсуждаются некоторые возможности, которые в современных языках часто не представлены (goto, например), но вот как раз новички и узнают, что есть хорошо и что есть плохо и почему оно всё развивается именно так. Неактуального в книге мало и оно тоже интересно-полезно.
Вообще очень интересно сравнить «Совершенный код» с современными книгами по программированию. «Совершенный код» — не сухой унылый учебник, но подкрепляет почти всё цифрами и исследованиями, в то время как большинство современных книг это зачастую пересказ документации с вкраплениями жизненного опыта автора (совсем не бесспорного опыта, стоит сказать, и тем более с совсем не бесспорными выводами из совсем нерепрезентативной выборки этого своего жизненного опыта). Мне бы хотелось видеть больше современных книг с подходом Макконнелла, но, кажется, их на полках практически нет.
Да, книга толстенькая, почти 900 страниц, но читается легко и едва ли займёт много месяцев на проработку. Если читать, конечно.
Разумеется, «Совершенный код» надо читать не раньше, чем когда уже уложился в голове синтаксис твоего первого языка программирования. Но вот именно в этот момент стоит и прочесть. Как верно пишет автор, лучше сразу учиться писать правильно — чем прививать себе сначала не лучшие привычки и потом пытаться их перестраивать.
Опытным разработчикам многое из написанного будет знакомо, но всё равно на некоторых страницах вы будете восклицать — «о, точняк!». А менее опытным так это просто must read.
22 понравилось
3,8K
Цитаты
Подборки с этой книгой

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

Массив настольных книг web-разработчика
artmordent
- 15 книг
Программировать больше не весело
0x539
- 22 книги
Программистам обязательно к прочтению
ForestMan
- 10 книг
Computer Science
ada_king
- 69 книг
Другие издания

































