Впечатления о книге — Программирование без дураков авторов Пассиг Катрин и Яндер Йоханнес

Отличная книга для инженеров по программному обеспечению начального уровня. 

Так же книга помогает обобщить ранее полученные знания. Стать неким указателем, который говорит, что движение происходит в правильном направлении для разработчиков поопытней (или же необходимо скорректировать некоторые ориентиры).

Книга позиционирует себя как руководство для программирования «less wrong», т.е. «менее неверно», другими словами — программировать правильнее с точки зрения опытных программистов, до которых дотянулись авторы книги и их окружение. Я думаю, она выполняет эту цель.

Несмотря на то, что книга не новая, многие вещи и подходы в ней до сих пор актуальны, благодаря своей простоте/элегантности или же универсальности.

Примечательно, что примеры в книге рассматриваются на разных языках программирования. Указываются некоторые отличительные стороны и особенности этих языков (но без фанатизма и избытка деталей).

Давайте детальнее рассмотрим, чему учит книга и какие области разработки покрывает

  1. Книга на примерах показывает, что значит плохой программист (и от обратного, мы понимаем, что не нужно делать, чтобы быстрее становиться хорошим)
  2. Дает советы общего (около-программного) плана, которые помогут быть хорошим программистом
  3. Вводим в курс проблемы именования переменных, функций, классов и т.д. Не дает универсальных решений, подчеркивая, что в разных языках и фреймворках правила могут отличаться. Так же не стоит забывать, что нету каких то абсолютно общепринятых правил и, может так статься, что нужно следовать ранее установленным договоренностям
  4. Важность комментариев и документированности кода. Однако, важно не злоупотреблять комментированием и понимать, где они к месту, а где могут даже мешать пониманию кода
  5. Подходы к чтению кода и поиску информации
  6. Важный вопрос, который подымается в книге, и которым грешат разработчик постарше — это попытки оказать помощь в случае, если она (помощь) не требуется или нежелательна (непрошена второй стороной)
  7. Целый раздел посвящен работе над ошибками разнообразнейших типов, поиск багов, составление и проверка гипотез, анализ и отладка кода, потенциально слабые места программ, вопросы рефакторинга и тестирования программного обеспечения
  8. Материал из книги учит не изобретать велосипеды (почему она не попадалась мне в начале карьеры 🙂 ). Как искать эти «велосипеды» и применять в своих условиях
  9. Чуточку, пытается направить читателя в поиске первого или следующего языка программирования (а так же фреймворка, менеджера пакетов и тому подобное)
  10. Вводит в курс важной темы систем контроля версия и работы с ними
  11. Помогает не бояться командной строки
  12. Открывает завесу в понятиях объектно-ориентированного программирования (как преимущества так и недостатки, а так же — альтернативы)
  13. Освещаются вопросы хранения данных (начиная с текстовых форматов и заканчивая графовыми базами данных) 
  14. Уделяется внимание важным вопросам безопасности информации
  15. В финале, рассматриваются не вошедшие, но немаловажные вопросы, с которыми рано или поздно сталкиваются все разработчики. И дает напутствие на дальнейшее развитие в сторону хороших программистов

В итоге получаем много полезной информации, не оторванной от жизни, собранной в одной книге.

Хотя, лично я, некоторые главы просто просматривал, не останавливаясь на деталях, так как дошел да этих истин самостоятельно. Но при этом получил удовлетворение, что все эти годы, двигался в правильном направлении.

Цитаты из книги «Думай медленно, решай быстро» Даниэля Канемана

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

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

Поэтому в данной статье, укажу наиболее полезные для меня цитаты


Система 1 срабатывает автоматически и очень быстро, не требуя или почти не требуя усилий и не давая ощущения намеренного контроля.
Система 2 выделяет внимание, необходимое для сознательных умственных усилий, в том числе для сложных вычислений. Действия Системы 2 часто связаны с субъективным ощущением деятельности, выбора и концентрации

Перед директором по инвестициям стоял трудный вопрос: «Вкладывать ли деньги в акции компании „Форд“?» Но его выбор определил ответ на другой вопрос, более легкий и родственный исходному: «Нравятся ли мне автомобили „Форд“?» В этом и состоит суть интуитивной эвристики: столкнувшись с трудным вопросом, мы отвечаем на более легкий, обычно не замечая подмены

Если у человека есть подходящие знания, интуиция распознает ситуацию, и интуитивное решение, приходящее в голову, вероятнее всего, окажется верным. Ситуация дала подсказку, подсказка дала эксперту доступ к информации, хранящейся в памяти, а информация дала ответ. Интуиция – это не что иное, как узнавание

Если вам важно казаться умным и достойным доверия, не используйте сложные слова в случаях, где достаточно простых

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

Склонность хорошо (или плохо) воспринимать в человеке все, включая то, чего вы не видели, называется эффектом ореола

Если вы недавно видели или слышали слово «ЕДА», вы дополните слово «М_ _О» до слова «МЯСО» с большей вероятностью, чем до слова «МЫЛО». Конечно, если вы только что видели слово «МЫТЬ», то все произойдет наоборот. Это называется эффектом предшествования или праймингом (формированием установки), иначе говоря, идея «ЕДА» дает установку на «МЯСО», а идея «МЫТЬ» дает установку на «МЫЛО»Находить и называть чужие ошибки намного легче и приятнее, чем признавать свои

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

Частые повторения – надежный способ заставить людей поверить неправде, потому что различить истину и ощущение чего-то знакомого нелегко

Знакомое порождает симпатию. Это – эффект простого предъявления

Часто мы уверены в себе, даже если неправы, однако объективный наблюдатель с легкостью замечает наши ошибки

Склонность видеть закономерности в случайном сильнее каких-то там исследований

Иллюзия понимания прошлого придает нам чрезмерную уверенность в своих способностях предвидеть будущее

Поощрение за улучшение результатов работает эффективнее, чем наказание за ошибки

Принцип “неприятия потерь“: если сравнивать напрямую, потери кажутся крупнее, чем выигрыш. Эта асимметрия между силой положительных и отрицательных ожиданий или ощущений возникла в ходе эволюции. У организма, реагирующего на угрозу сильнее, чем на приятную перспективу, больше шансов на выживание и воспроизводство