Для Foo Bar, или не Foo Bar: вот в чем вопрос

Это было что-то, что первоначально обсуждалось во время презентации Чарльза Брайана Куинна из Ранчо Большого Ботаника на http://www.actsasconference.com/ Он обсуждал то, что он узнал, обучая Ruby on Rails Bootcamp многим людям, как новичкам в программировании, так и новичкам в Rails.

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

Что легче понять?

baz = foo + bar

или же

answer = first_number + second_number

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

Это особенно применимо, когда вы пытаетесь научить кого-то, кто не имел опыта программирования, и вам в конечном итоге нужно объяснить foo и bar, прежде чем объяснять то, чему вы на самом деле пытаетесь научить.

Тем не менее, использование foo и bar для опытных программистов кажется нормальным, хотя я лично считаю, что вместе с Чарльзом это нужно изменить.

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

Является ли это привычкой, которую когда-либо можно будет выгнать? Почему вы выбираете foo bar или не foo bar?

10 ответов

Решение

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

Например, если вы хотите показать, как генерировать исключение, я считаю, что можно представить фрагмент

public void foo() { 

   // Do some things

   if (errorCondition) {
      throw new Exception("Error message");
   }

}

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

То, что я не принял бы (в этом же примере) будет

public void foo() { 

   // Do some things

   if (bar) {
      throw new Exception(baz);
   }

}

как это затемняет то, что вы пытаетесь научить.

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

Вероятно, больше проблем, если вы находитесь на тренировочной арене.

Я использую их иногда. Но только если "настоящее" имя не актуально.

Я использую их при демонстрации того, что достаточно значений "foo" и "bar", например: "Вы можете получить размер объекта с помощью sizeof (foo)". Это удобно для того, чтобы люди поняли общую концепцию, а не только детали. Например, если бы я сказал: "Вы можете получить размер объекта с помощью чего-то вроде sizeof(int)", то почти гарантированно кто-то спросит, работает ли это также для float.

Для совершенно нового программиста я должен сказать, что термины foo и bar могут быть неизвестны. Я думал, что это что-то специфичное для языка (а именно C), но после проверки Википедии я теперь знаю, что они просто абстрактные заполнители. Так что, если ваша аудитория состоит из людей, которые не знают их значения, что-то еще намного яснее. Кроме того, first_number и т. Д. Говорит, что это числа, как только они представлены, а не что-то еще.

Помимо того, что я избегал бессмысленных слов, таких как foo & bar, я обнаружил, что гораздо важнее предоставить примеры кода для реальных сценариев, которые имеют такие же отношения. Это действительно помогает ученику правильно понять тему и предотвращает недопонимание. Например, если я учу о внедрении зависимостей и покажу пример кода, где экземпляр класса Car внедряется в класс Driver, никто не запутается и не подумает: "Значит, это значит, что Car контролирует Driver тогда?".

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

Если вы замените бессмысленное слово тем, что оно в общем случае представляет в коде примера, вы можете получить имена, которые во многом похожи на ключевые слова, классы или методы, которые вы пытаетесь объяснить. Префикс "мой", как в myNumber, myFunction, является хорошим компромиссом, который выделяет имена как произвольные.

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

Единственный случай, когда следует использовать Foo и Bar, это когда вы говорите о чем-то настолько абстрактном, что добавление контекста потребует дополнительного обсуждения. Тогда Foo и Bar гораздо более читаемый и созданный код, который более понятен, чем альтернативы, такие как x, y и z.

Я думаю, что это происходит из-за мягкой или, возможно, не такой мягкой, саркастической природы многих программистов. В то время как многие люди пытались поместить различные значения в foo/bar, большинство или, по крайней мере, многие из нас думают о "FUBAR", F**K Up Beyond All Recognition. Это способ для "опытных" людей сделать глупый комментарий обо всех остальных.

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

Я новичок в программировании и более или менее самоучка. Я прочитал много примеров кода в Интернете и в начале заменил foo и bar &c. с более подходящими именами, такими как примеры firstnumber и secondnumber выше.

Теперь я предпочитаю x,y,z,i... потому что foo и bar, кажется, вызывают лингвистические импульсы в моем уме и могут отвлекать меня от рутины, и я несколько выработал способность удерживать целую кучу разных переменные в моей голове и помните, что они есть. Но я все же определенно рекомендую использовать соответствующие имена при обучении кого-то другого, особенно при объяснении кода тому, кто не программирует, но должен понимать, как работает программа.

Другие вопросы по тегам