Насколько большую роль играет субъективность в программировании? - PullRequest
8 голосов
/ 31 марта 2010

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

Помимо этого, тот же самый вопрос возникает у меня в голове всякий раз, когда я читаю дебаты на SO или Meta о субъективных вопросах. Или почитайте вопросы о лучших практиках, а иногда и вы или другие не согласны.

Какую роль играет субъективность в сфере программирования?

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

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

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

Это напоминает мне дизайн интерфейса. Конечно, это субъективно, но есть целая дисциплина, связанная с созданием хорошего пользовательского интерфейса, и она имеет тенденцию работать.

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

Ответы [ 6 ]

1 голос
/ 31 марта 2010

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

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

1 голос
/ 31 марта 2010

Я думаю, многое из этого обязательно зависит от того, сколько наш ум способен обрабатывать за один раз. Таким образом, все сводится к тому, насколько язык и инструменты позволяют команде или разработчику разбить проблему на куски, которые сами по себе значимы, но не настолько велики, что их становится слишком сложно понять. Общая тема - искусство организации информации (в данном случае, кода, логики, ...), но, кстати, это не так уж и отличается от математики или физики.

1 голос
/ 31 марта 2010

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

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

По моему опыту, миру нужны большие инженеры-программисты больше, чем хорошие программисты. Относительно мало людей в наше время пишут программное обеспечение, которое действительно критично для производительности (ядра ОС, компиляторы, графические движки, встроенные системы реального времени и т. Д.), А Интернет позволяет посредственным программистам быстро находить алгоритмические решения проблем, которые они не могли решить в одиночку. Но почти каждый, кто пишет профессиональный код, должен работать в команде. Кроме того, производительность команды резко возрастает и зависит от способности ее членов эффективно общаться и эффективно распределять рабочую нагрузку. Это два субъективных навыка, которые невозможно доказать с помощью жесткой формулы.

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

0 голосов
/ 31 марта 2010

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

Мы говорим здесь о вероятностях. Если я проверю ваш код, я не гарантирую, что найду 60% ваших ошибок. Есть также немного абсолютов в разработке программного обеспечения; Опытные разработчики знают, что правильный ответ, как правило, «это зависит». Тем не менее, существует ряд практик с объективными данными в их пользу.

0 голосов
/ 31 марта 2010

Обращаясь к моей жене по математике, я спросил, есть ли субъективность в математике. Ее ответ - да, главным образом в том, как мы, люди, достигаем ответа.

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

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

Отсюда программисты могут спорить, как лучше всего добиться «правильного» результата. Хорошим примером этого является приложение FizzBuzz. Простым ответом будет просто цикл for, но Enterprise FizzBuzz также является «правильным» в том смысле, что он дает правильный ответ, но обычно смеется над «плохой» разработкой из-за чрезмерного усложнения идеи ( в конце концов, это было приложение для шуток).

Насколько большую роль в программировании играет субъективность? Я бы сказал, что это очень большая часть того, что мы делаем, просто потому, что мы люди, и потому что есть много способов получить «правильный» ответ, поэтому есть разногласия по поводу того, какой путь является лучшим.

0 голосов
/ 31 марта 2010

Все зависит от вашей точки зрения: -)

Но чтобы ответить на ваши вопросы, я думаю, что один из способов оценить субъективность - это признать, что языки программного обеспечения, инструменты и лучшие практики являются общим средством общения между людьми. Да, язык программирования - это формальный способ научить компьютер, как себя вести, но язык программирования также можно рассматривать как способ определения и передачи спецификаций с высокой степенью детализации (код является конечной спецификацией, не так ли ?).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...