Хабрахабр

[Перевод] Джоел Спольски: Как правильно задавать вопросы более опытным программистам

Чудаковатые и ломающие мозг правила Usenet, Burning Man и Stack Overflow

image

Джоел Спольски, апрель 2018

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

Это одна из хитростей, которая может помочь самостоятельно разрешить проблему в процессе программирования. Еще один способ — освоить откладку программы (дебаггинг) по принципу “разделяй и властвуй”. Невозможно перерыть тысячу строк кода ради одной ошибки. Зато можно разделить код на две части и посмотреть, что происходит в первой половине, а что происходит во второй. Сделай это пять-шесть раз и дойдешь до той самой строки с ошибкой.

С учетом вышесказанного любопытно почитать чек-лист Джона Скита для написания идеального вопроса. Джон спрашивает: “Прочитали ли вы внимательно вопрос, чтобы оценить его внятность и понятность для человека, который в глаза не видел ту информацию, которой вы обладаете?”. По большому счету, это и есть тест с резиновой уточкой. Другой вариант: “Если в вопрос включен код, вписали ли вы его в полную, но короткую программу?”. Акцент на короткой программе — это, по сути, проверка того, пытались Вы “разделить и властвовать” или нет.

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

К сожалению, не каждый слышал об этом чек-листе. А может и слышал, но предпочел проигнорировать. У человека проблема с кодом, он знает, что существует система вопросов и ответов Stack Overflow, которая может ему помочь, и времени читать протокол какого-то ботана о том, как надо задавать вопросы, у него нет.
Часто случаются дискуссии о том, стоит ли на Stack Overflow допускать вопросы от новичков в программировании.

Когда мы с Джеффом обсуждали первоначальный дизайн системы, я рассказал ему о популярной в 80-х годах в сети Usenet группе о языке программирования Си. Она называлась comp.lang.c.

Си — простой и ограниченный язык программирования. Можно найти Си-компилятор всего в 100Кб, поэтому, как можно догадаться, если создавать обсуждение исключительно для Си, то темы для разговоров заканчиваются очень быстро.

И вот еще что. В 90-х Си был языком для студентов, которые только начинали втягиваться в программирование. И у этих самых студентов чаще всего проблемы с Си возникали самые примитивные. И они тут же бежали с вопросами в comp.lang.c.

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

Эти старожилы и изобрели концепцию F.A.Q. (часто задаваемых вопросов). Таким образом они как бы говорили “ради Бога, хватит спрашивать то, что на Usenet уже было отвечено сотню раз”, то есть олд-скуловцы хотели отвечать только на максимально чудные и эзотерические вопросы, которые 99% обычных программистов, работающих с Си, вообще были не нужны. Новостная группа затухала, потому что обслуживала, по факту, лишь небольшую группу людей, зависавших там около десятилетия.

Вот об этом мы с Джеффом и говорили. Как нам быть с вопросами от новичков?
В итоге решили, что новичкам — быть. На Stack Overflow не существует понятия “слишком простых” вопросов… Но все же сначала лучше поискать ответ самому, прежде чем идти за помощью к другим.

Мы понимали, что некоторым более “продвинутым” программистам может стать скучно читать одни и те же простенькие вопросы и к нам они больше обращаться не будут. Ничего страшного — Stack Overflow никого не обязывает сидеть там пожизненно. Надоело читать вопросы новичков о том, что у них не возвращаются локальные массивы символов (“у меня же работает!”), и Вы предпочли бы провести оставшиеся годы жизни за сортировкой музыкальных альбомов? Как хотите, Ваше право.

То, что Вы только вливаетесь в программирование, еще не значит, что Ваш вопрос не имеет место быть на Stack Overflow. Я даже специально сам задал вопрос “А как в LOGO перемещать черепашку?”, чтобы показать, что дизайнеры сайта рады видеть у себя абсолютных новичков.

Но как всегда, по закону непреднамеренных последствий, этот вопрос чуть не вызвал скандал — и отнюдь не из-за его простоты. Проблема в том, что я подошел к этому делу недобросовестно. Джефф Этвуд хорошо сказал на этот счет: “Простой вопрос не есть плохо. Плохо — когда к поиску ответа не приложено усилий”. (А, ну и это).

Для новичков количество пунктов, которые надо заполнить, прежде чем задать вопрос, кажется ненужным, а порой и просто странным. Это как фестиваль Burning Man. Думаешь, что едешь на зажигательную тусовку где-то в пустыне, а по приезде тебе в лицо кричат про какие-то 10 принципов, “радикальное самовыражение” и в том же духе, поэтому после того, как помыл посуду, нужно собрать каждую капельку воды из сухого озера и увезти домой — в багаж сдать, если понадобится. У каждого сообщества свои правила, и поначалу они могут казаться причудливыми и увлекательными или, если Вы просто пытаетесь заставить какой-то код работать, — странными и заумными.

Многие правила проведения Burning Man, делающие фестиваль таким успешным, кажутся очень абстрактными, однако в них есть смысл. Бюро по управлению земельными ресурсами США, позволяющее проводить фестиваль в пустыне, требует, чтобы на землю не выливали загрязненную воду, потому что глинистая почва плохо ее впитывает, что может привести к размножению микробов и развитию болезней, но зачем все это объяснять, если можно просто сказать, что если посетители не уберут за собой воду, то фестиваль больше не состоится?

То же самое с Stack Overflow. Мы не допускаем к публикации слишком абстрактные вопросы (“Как составить программу?”). Наше общее правило гласит: если ответ на Ваш вопрос размером с целую книгу, то Вы слишком много хотите. Это как если Вы напишете “У меня, кажется, почка болит. Как ее вырезать?”. Такой вопрос звучит неадекватно да еще и оскорбительно для хирургов, которые десять лет учились это правильно делать.

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

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

В следующем году мы планируем хорошенько над этой областью поработать. Мы не можем изменить других людей, заставить их быть добрее. Но, думаю, мы можем улучшить некоторые аспекты пользовательского интерфейса Stack Overflow, который будет мотивировать людей быть культурнее; например, мы можем подправить подсказки на странице “Задать вопрос” или поработать над реактивной модерацией, чтобы члены сообщества сами могли отмечать и жаловаться на грубые комментарии, чего на данный момент не происходит.

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

Несмотря на то, что мы стремимся сделать Stack Overflow более комфортным, нашей главной задачей всегда было создание лучшего в мире ресурса для разработчиков программ.

Среднестатический программист обращается к нам 340 раз. Вот в чем наша сила. Существуют и другие источники информации о написании программ, но есть только один сайт, которому разработчики настолько сильно доверяют и который нужно беречь, — он как Библиотека Конгресса для программистов.


image
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:

Читать еще

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть