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

Автор оригинала: Джоэл Спольски
  • Перевод

Чудаковатые и ломающие мозг правила 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:



Читать еще


SkillFactory
Онлайн-школа Data Science и разработки

Комментарии 7

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

    Заканчивается это тем, что задаёшь вопрос о нюансах работы Akka Stream в кластере и не получаешь ответа, так как способные ответить предпочли сортировать музыкальные альбомы.
      +4
      Ну а так и есть. Уже несколько лет как SO пребывает в окрестности замечательного состояния «если твоего вопроса еще нет на SO, то ты в лучшем случае не получишь на него ответа, а в худшем — получишь бесполезные или вредные ответы».

      Сложный вопрос писать на SO стало заведомо бесполезно. А если тебе и повезло и ты нашел свой сложный вопрос уже кем-то заданным — приготовься к тому, что даже если на него есть ответы, то они могут быть совершенно бесполезными и непригодными. Вообще, сколько не смотрю на SO — всегда вижу строгую корреляцию: чем сложнее вопрос, тем больше вероятности, что полезная информация будет не в заплюсованных ответах, а в комментариях или ответах без рейтинга. А заплюсованный ответ будет смесью бесполезных наставлений и ЧСВ на тему «просто не делайте так».
        +2
        Мне кажется, что чем выше квалификация, тем сложнее задать сложный вопрос, на который посторонний человек может дать ответ, так как зачастую нужно разбираться на месте и тысячи нюансов.
        Зато ответы на простые вопросы, причем раскрытые, по узкоспециализированным моментам там найти легко, и это ХОРОШО.
      +4
      Мы также работаем над новой функцией, благодаря которой Вы сможете направить свой вопрос небольшой группе людей из Вашей же команды, что, возможно, поможет создать определенную дружественную атмосферу в огромном мегаполисе, коим является Stack Overflow.
      Teams уже запущена. Хорошо бы статью привести к актуальному виду)

      заставить их быть добрее
      Очень точно описывает их политику за последние годы.
        +1
        У меня последние 10 лет как-то так — простые вопросы не стоят того, чтобы их задавать, а на сложные никто ответить не может :(
          +3
          Стараюсь всегда отвечать на свой «сложный» вопрос, если решил его самостоятельно и до этого не было ответов. Приятно считать что это твой вклад в базу знаний. Т.е. это нормально если мы иногда что-то даем без ответного «выхлопа».
            +1

            И где чеклист?

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

            Самое читаемое