
Ваша оценкаРецензии
Аноним18 апреля 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 рублей заплатил я на Озоне за этого Наполеона-Хилла-для-программистов.
268,2K
Аноним27 сентября 2008 г.Эта книга должна стать настольной книгой абсолютно ЛЮБОГО программиста, а зачастую, и менеджера. И настольной не в том смысле, что будет лежать на столе как подставка под кофе, а в том, что ее необходимо читать и осознавать, что там написано. Только полное понимание основ, сути своего дела является залогом успеха. Эта "программисткая библия", в которой ясно изложены "программистские заповеди". Эта книга научит понимать, что вы делаете, как вы делаете и для чего вы делаете. Не изобретайте велосипед. Читайте "Совершенный код", вдохновляйтесь, творите свои IT-чудеса и получайте максимум удовольствия.Читать далее241,9K
Аноним5 мая 2024 г.Читать далееЭто та книга, которую я хотел бы прочесть раньше.
Если ответить на вопрос — что прочесть, «Совершенный код» Макконнелла ИЛИ «Чистый код» Мартина, то я бы порекомендовал именно Макконнелла. Хотя я не могу сказать, что у Мартина нет ничего дополнительно к тому, о чём пишет Макконнелл, что Мартин вторичен, нет. Как минимум эти его знаменитые SOLID-принципы описаны именно у Мартина в Чистом коде (хотя формулировки он потом в Чистой архитектуре и меняет потом, для SRP, например). Поэтому в конечном итоге я бы рекомендовал читать обе книги. Но начать бы рекомендовал с Макконнелла.
В «Совершенном коде» очень много ссылок на исследования и практически всё подкреплено цифрами. Научный здравый подход. Что лучше — автотестирование или код-ревью или парное программирование, что какие результаты даёт? В книге есть ответы в цифрах и мне было крайне интересно с ними познакомиться.
Да, книга «старая» (выпущена чуть раньше, чем сегодня в обед) и многие боятся её поэтому брать в руки — «да там всё устарело уже, какой смысл читать книги по программированию начала 2000-х?». Автор где-то в книге пишет — и я с ним полностью солидарен — что ценность изучения синтаксиса языка программирования или очередного фреймворка не очень велика, это всё изучается быстро (даже есть цифры относительно этого, насколько «знакомость» технологии для команды влияет на успешность проекта), а вот ценность более фундаментальных вещей, умения писать код и выстраивать методологию работы с ним — это важно, это применимо к любой технологии, и в этом особо ничего не изменилось за последние десятилетия.
Вставки кода где-то на C++, где-то на Java, где-то на Basic — ну да, есть. Но какого программиста это напугает? Весь код понятен и сам по себе, и тем более с пояснениями автора. Никаких заумностей нет. Да, обсуждаются некоторые возможности, которые в современных языках часто не представлены (goto, например), но вот как раз новички и узнают, что есть хорошо и что есть плохо и почему оно всё развивается именно так. Неактуального в книге мало и оно тоже интересно-полезно.
Вообще очень интересно сравнить «Совершенный код» с современными книгами по программированию. «Совершенный код» — не сухой унылый учебник, но подкрепляет почти всё цифрами и исследованиями, в то время как большинство современных книг это зачастую пересказ документации с вкраплениями жизненного опыта автора (совсем не бесспорного опыта, стоит сказать, и тем более с совсем не бесспорными выводами из совсем нерепрезентативной выборки этого своего жизненного опыта). Мне бы хотелось видеть больше современных книг с подходом Макконнелла, но, кажется, их на полках практически нет.
Да, книга толстенькая, почти 900 страниц, но читается легко и едва ли займёт много месяцев на проработку. Если читать, конечно.
Разумеется, «Совершенный код» надо читать не раньше, чем когда уже уложился в голове синтаксис твоего первого языка программирования. Но вот именно в этот момент стоит и прочесть. Как верно пишет автор, лучше сразу учиться писать правильно — чем прививать себе сначала не лучшие привычки и потом пытаться их перестраивать.
Опытным разработчикам многое из написанного будет знакомо, но всё равно на некоторых страницах вы будете восклицать — «о, точняк!». А менее опытным так это просто must read.
223,4K
Аноним28 марта 2012 г.Читать далееБольше всего понравилось в этой книге проходящее через все восемьсот с лишним страниц указание на то, что большая часть работы программиста может быть осуществлена не в редакторе кода. Макконнелл говорит, что когда он видит программиста, который основную часть времени пишет код, то полагает, что это весьма непрофессиональный программист. Большая часть рабочего времени программиста проходит в проектирования и рассуждениях. Даже код вначале пишется в виде псевдокода, а не реального.
Я не понимаю, каким образом эта книга устарела, как замечают отдельные читатели. Эта книга о том, как писать хороший код. В большинстве случаев Макконнелл воздерживается от упоминания конкретных технологий, поясняя, что, скорее всего, они устареют. Очень много времени автор посвящает принципам, очень много он рассказывает о том, как писать хороший и понятный код. Много он пишет о том, как правильно выбирать имена переменных, методов и классов, чтобы код был самодокументирующимся. Как правила написания понятного кода, которым преимущественно и посвящена эта книга, могут устареть? Да, его методы ручной проверки числа открывающихся и закрывающихся скобок вызывают ассоциации с мезозойской эрой, но о них и сказано лишь вскользь.
Подкупает начитанность Макконнелла! Эта книга - кладезь ссылок с комментариями на множество другой авторитетной литературы. Читая эту книгу, приятно заниматься программированием!
162,8K
Аноним22 мая 2017 г.Читать далееКнига посвящена программированию в общем и не привязана к конкретному языку, в программирование автор включает детальное проектирование, написание кода, отладку и тестирование, все эти аспекты рассматриваются очень детально и на конкретных примерах. Большинство своих выводов автор подкрепляет ссылками на различные исследования.
Через всю книгу проходит утверждение, что для написания качественной программы нужно грамотно бороться с ее сложностью. Для этого необходимо уменьшать количество элементов, которые нужно держать в голове одновременно при проектировании или чтении того или иного участка кода.
В программировании собственно на написание кода должно тратиться меньше времени, чем на проектирование и рассуждения о решении проблемы. Очень примечателен подход к программированию через написание псевдокода.
98,1K
Аноним15 мая 2016 г.Must read!
Читать далееВ '11 году сообщество Stack Overflow признало книгу Стива Макконнелла "самой впечатляющей книгой, которую должен прочесть каждый разработчик программного обеспечения".
Библиография книги насчитывает более 500 исследований, научных работ, статей.
Практически каждое утверждение автора подкреплено исследованием, проводившимся в этой области (чаще и не одним).
Данная книга является невероятно обширным сборником практических советов по разработке ПО и не потеряла актуальности и сейчас, хотя написана была достаточно давно.
Однозначно этот шедевр в favorites. Отдельные главы буду перечитывать и не один раз.
И настоятельно бы не рекомендовал "слушать" людей с опытом программирования полтора года, утверждающих, что "Из всего объема (за вычетом предисловий и послесловий к послесловиям) процентов пять, наверное, имеют ценность".85,3K
Аноним11 июня 2021 г.При прочтении вызвала двоякие чувства.
С одной стороны, тут много полезных идей, которые должны быть вдолблены в голову программиста с начала его обучения.
С другой -- описание этих идей ужасное. Не знаю, это перевод такой, или автор Лев Толстой от мира программирования, но читать книгу ОЧЕНЬ сложно. Перекрестные ссылки из конца в конец, рассуждения.На текущий 2021 год не рекомендовал бы к покупке. Есть более свежие труды, написанные приличнее и содержащие не меньше информации.
65K
Аноним18 марта 2021 г.must have для программистов
Читать далееЗамечательная книга, которая поможет заложить основы качественного кода.
Я бы советовала её студентам и начинающим разработчикам. Было бы круто если бы преподаватели советовали бы такие книги.
Очень легко читается, и много полезных советов по качеству кода, именованию функций, переменных.
Базовые вещи, которые с опытом и хорошей командой приходят сами, но лучше раньше, чем позже.Вот последние главы про тестирование мне в ней не понравились, но основная часть очень крутая, поэтому оценку не буду снижать
64,5K
Аноним23 июня 2019 г.Хорошая профессиональная литература
Хорошая профессиональная книженция в 896 страниц. Но непонятных терминов очень мало, так что читается очень легко. Перевод хороший и не вводит в заблуждение.
Читать лучше одновременно с изучением своего первого языка программирования, чтобы раньше выработать привычку писать правильно и понятно.
Время от времени автор повторяет сам себя и читаешь уже ранее озвученную мысль, но для меня это скорее плюс чем минус - лучше запоминается информация.66,7K
Аноним8 января 2013 г.Читать далееТеперь это моя любимая книга по разработке. Почти в каждой главе про себя так и говорил: "Точняк! Вот, что и как я стараюсь делать!".
Книга воодушевляет, читать её очень приятно. Хорошая бумага, приятные шрифты и оформление. Никакой бесполезной или повторяющейся информации. Оптимальное время для прочтения - 2 курс. Я прочитал на 5 курсе и мои мысли приобрели более отчетливую форму : )
Много полезных ссылок на другие стоящие книги. В общем, мастрид однозначно.
Автору моя пожизненная благодарность и лучи добра.63K