Любой дурак может написать код понятный компьютеру хороший программист пишет код понятный человеку

Обновлено: 04.07.2024

Я думаю, что в будущем все, а не только программисты будут связаны с элементами программирования.

Программное обеспечение никогда не заменит Коран.

Пpoграммист не стал кpeaтивить и назвал детей Новый сын (1) и Новый сын (2).

Говорят, что в мире есть десять видов людей. Те, кто понимает двоичный код… и те, кто не понимает.

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

Альпинист защищает крутизну и сложность подъема. Компьютерный энтузиаст защищает непрозрачность и затрудненность взаимодействия с программным обеспечением.

Программист – художник новой эпохи, который, экспериментируя, создает миры по своему вкусу. Он свободен от уродливых корпоративных этик, практик и дурного шлака.

Нельзя начать изучать С++ без знаний основ, ибо нельзя выучить таблицу умножения без знаний правил сложения.

Больше чем с юзерами сисадмин может натрахаться только с юзершами.

Надо представить себе это так. Вы идете по улице и решили покурить. Останавливаетесь, опираетесь плечом о стену дома, чтобы удобнее было сигарету прикуривать, и не замечаете, что прислонились не к глухой стене, а к балконной двери. И вдруг эта дверь открывается. Что происходит? Ясное дело. Вы вваливаетесь вовнутрь. Но вы ведь никуда не собирались вторгаться! И что, это уже грабеж со взломом?

Хакерство — это искусство. У художника есть идея, краски, холст и кисти. А у меня — компьютер и языки программирования.

Это программисты — они верят только в логику и математику.

Странно. Они всегда ходят пятерками, эти программисты. Один всегда — худой, высокий, белый; коротышка-азиат, жирдяй с хвостом, потом заросший чувак и еще индиец. Они будто меняются, пока не получается комплект.

— Да, она симпатичная, но почти все женщины симпатичные. Дело в её уме. Она так пишет на Javе. Такой красоты я ещё в жизни не видел! Элегантно, точно. Я тащусь от женщин, которые могут так кодировать. Я бы так и поселился в её мозгах. — Это я написал тот код. Ты сказал, что влюбился в её мозг. Ты понял, что произошло? Ты не на неё запал, а на мой код. — Заткнись, а то меня сейчас вырвет! — Динэш, тебя возбудил мой код. Ты кодофил. — Нет, я запал на неё, ясно? В задницу твой код! — Ты хочешь трахнуть мой код, да? Вздрочнуть на мою новую подпрограмму?

Быть программистом — значит выбрать путь непрекращающегося обучения, ведь это среда неиссякаемого потока нового — новые функции, новые языки, новые инструменты, новые фреймворки. Но в то же время компьютерная наука — это устоявшаяся область, базирующаяся на проверенных временем принципах. Мы привнесли в неё ООП, новейшее оборудование и искусственный интеллект. Но, несмотря на все эти изменения, многие идеи, зародившиеся десятилетия назад, до сих пор остаются актуальными.

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

1. О косвенной адресации

“В компьютерной науке все проблемы могут быть решены с помощью дополнительного уровня косвенности”, — Дэвид Уилер

Вот одна из часто повторяемых цитат, которую немногие разработчики любят объяснять. Однако она относится к моим любимым истинам программирования, т.к. раскрывает саму его суть.

Проще всего представить себе косвенность как слои. Например, у вас небольшой проект, который должен вписать компонент A в компонент B:

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

Многие скажут вам, что написание кода — это создание явных инструкций на языке, который поймут даже тупые компьютеры. Но цитата Дэвида Уилера раскрывает лучший подход. Хорошее программирование — это вскарабкивание по лестнице абстракций для получения более общих решений.

Сопутствующая цитата:

Косвенность — это мощь, и цена её — сложность. Люди очень редко цитируют вторую часть цитаты Уилера:

“Но как правило это создаёт другую проблему”, — Дэвид Уилер.

С тех пор эта истина удерживает программистов в деле (думал написать в седле, но что-то программист в седле…если только с ноутбуком:))).

2. О простоте

“Простота — это необходимое условие надёжности”,— Эдсгер Дейкстра.

Среди программистов всегда хватало мудрых людей, которые предупреждали нас не усложнять код. Но не многие смогли прояснить цену сложности так, как это сделал датский первопроходец компьютерной науки — Эдсгер Дейкстра .

Идея здесь в следующем: вы выбираете простоту не ради будущего и делаете это не потому, что предвидите необходимость повторного использования кода, или хотите, чтобы он выглядел чище во время ревью, или для облегчения его модификации (хотя всё перечисленное тоже важно!). Вы делаете это, потому что простота — это необходимое условие надежности. Без неё вам никогда не удастся создать надёжный код, которому можно доверить ведение бизнеса или обработку данных.

Чтобы принять точку зрения Дэйкстры, нам необходимо пересмотреть определение “хорошего кода”. Это не самый короткий и не обязательно самый быстрый и точно не самый умный. Это код, которому можно доверять.

Сопутствующая цитата:

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

“Если мы посчитаем количество строк кода, то стоит рассматривать их не как “произведённые строки”, а как “строки потраченные”, — Эдсгер Дейкстра.

3. О читабельности и переписывании

“Код легче писать, чем читать”, — Джоэл Спольски.

На первый взгляд эта цитата легенды программного мира и сооснователя Stack Overflow — Джоэла Спольски выглядит правдивой, но обманчиво поверхностной. Да, код может быть плотным, немногословным и утомительно длинным. И это не обязательно чей-то код. Если вы взглянете на свой собственный, написанный с год назад, то наверняка затратите какое-то время прежде, чем проясните логику, которая тогда для вас была очевидна.

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

Я не хочу сказать, что переписывание не может улучшить архитектуру системы. Определённо это возможно. Но все эти улучшения будут достигнуты огромной ценой. Придётся заново проводить тестирование и устранять баги, т.е. выполнять две задачи, которые занимают куда больше времени, чем само написание кода. Склонность переписывать базируется на одном из основных заблуждений в среде разработки ПО: мы недооцениваем усилия, требуемые для создания принципиально простых вещей. Именно поэтому последние 5% проекта занимают 50% общего времени его разработки. Простые вещи могут требовать на удивление много времени. И ничто не выглядит проще решения проблемы, которую вы уже решали.

Тогда, если для достижения совершенства не стоит всё переписывать, то каково лучшее решение? Ответ заключается в распространении среди разработчиков проведения регулярного небольшого рефакторинга. Это даст постепенный и уверенный прирост в качестве кода — достойная награда при минимальных рисках. При этом вы можете попутно улучшать читабельность.

Сопутствующая цитата

Если вы всё ещё сомневаетесь в важности читабельности, то слова Мартина Фаулера помогут осознать ее более ясно:

“Любой дурак может написать код понятный для компьютера. Хорошие же программисты пишут код, который смогут понять люди”, — Мартин Фаулер

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

4. О повторах

“Не повторяйтесь. Каждый элемент знаний внутри системы должен иметь единственное, чётко выраженное и авторитетное выражение”, — Энди Хант и Дейв Томас.

Каждый уважающий себя программист знает, что повторяемость — это корень многих зол. Если вы повторно пишете одно и то же во многих местах, то увеличивается не только сам процесс написания, но также тестирование и отладка. Что ещё хуже, так это возможность появления несоответствий. Например, если одна часть кода обновляется, а другая нет, то возникает несогласованность схожих компонентов. В этом случае на итоговую программу уже нельзя положиться. А если на неё нельзя положиться, то и для применения она не годится.

Цитаты интересны своей способностью хранить ценную информацию в малом объеме текста.

Очень часто люди не знают, чего хотят, пока ты не покажешь им это // Стив Джобс

Ученье без размышления бесполезно, но и размышление без ученья опасно // Конфуций

Время — это капитал работника умственного труда // Оноре Бальзак

Насколько проще было бы писать программы, если бы не заказчики // Р. С. Мартин

Лишь те, кто отваживаются потерпеть большую неудачу, могут прийти к большим достижениям // Роберт Кеннеди

Стремись к цели, но живи сегодняшним днем // Эеро Воутилайнен

Мартин Фаулер

Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку.

Андрей Петрович Ершов

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

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

Алан Джей Перлис

У каждой программы два назначения: что она должна делать и чего не должна.

Вебмастера не должны строить свою жизнь вокруг трафика с Яндекса. Это не должно быть вопросом жизни и смерти сайта.

Я думаю, что в будущем все, а не только программисты будут связаны с элементами программирования.

Алан Джей Перлис

Проще написать неправильную программу, чем понять правильную.

Николай Кононов. Код Дурова. Реальная история «ВКонтакте» и ее создателя

Программист – художник новой эпохи, который, экспериментируя, создает миры по своему вкусу. Он свободен от уродливых корпоративных этик, практик и дурного шлака.

Алан Джей Перлис

Программы без ошибок можно написать двумя способами, но работает — третий.

Сергей Михайлович Брин

Одна из вещей, которые программисты должны решить — как сделать компьютеры простыми, чтобы их было легко использовать.

Дональд Эрвин Кнут

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

Алан Джей Перлис

Работу программистов следует оценивать не по их изобретательности и логике, а по полноте анализа каждой ситуации.

Джоэл Спольски. Джоэл о программировании

Никакая софтверная компания не добьется успеха, если у руля в ней стоит не программист.

Это программисты — они верят только в логику и математику.

Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.

Распотрошим проектик и продегустируем какой-нибудь код. Попробуем представить, а что за мастер-Зухер соорудил все это?

К примеру, получаешь такую плюшечку, а там даже, не то что юнит, смоук тест не сделан. А в глазах творителя сего - печаль и пустота. Жизнь не ласкова ни в чем, чай приходится делать самому, никто его не принимает. И если бы тот прогер не умел бы только писать хороший код, это была бы половина траблов. В жизни сей персонаж живет также по своему говнокоду, с вечными эксепшенами и дебагингом. Бессистемность и феерическая расхлябанность. Желания скомканы в пучок и исполнению не подлежат в таком виде. Классическая история вне работы: "Моя девочка мне не подходит, слишком проста для меня. Мне нужна другая, неизвестно какая. Другая".

А бывает и такой вариант. "Я программист. У меня все правильно". Знакомо выражение? "Это "вы" не так делаете, и разберитесь там сами. Прочитайте, все написано." Собственная установка в жизни также не подвергается сомнению. Как ни странно, эти крепыши часто осемнены. И тренируются в выносе мозгоебства дома и на работе с постоянным успехом. Уверенность или слабоумие? Ну ответ вы сами знаете. Я тоже)))))

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

Еще отцы сказали: "Каждый дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям." Людям. Да пребудет с тобой сила. Если ты, конечно, станешь понятнее людям. Доброго дня, бро!))))

Читайте также: