Чому я навчився за 10 років на Stack Overflow

Чому я навчився за 10 років на Stack Overflow
Наближається десята річниця моєї присутності на Stack Overflow. За ці роки мій підхід до використання сайту та його сприйняття дуже змінилося, і я хочу поділитися з вами своїм досвідом. І пишу я про це з погляду середньостатистичного користувача, який не дуже залучений до життя спільноти сайту чи його культури. В останні дні я відповідаю лише на питання, що стосуються VS Code — продукту, над яким я працюю. Однак раніше я брав активну участь в обговоренні широкого набору тем. За 10 років я поставив близько 50 запитань і дав 575 відповідей, переглянув незліченну кількість чужих коментарів

Джон Скіт описав культуру Stack Overflow набагато краще і авторитетніше, ніж я коли-небудь зможу зробити. Його публікація вплинула на деякі розділи цієї статті, хоча загалом це мої власні відверті міркування про мій досвід перебування на Stack Overflow, що на цьому сайті добре і погано, і як його можна сьогодні використати. Це обговорення буде досить поверховим, без глибокого занурення у роботу сайту чи його історію.

Отже, ось чому я навчився за 10 років використання Stack Overflow.

Задавати питання потрібно вміти

На перший погляд, немає нічого простішого: введи кілька слів у текстовому полі, натисніть «Надіслати», та інтернет чарівним чином допоможе вирішити всі твої проблеми! Але у мене пішло майже 10 років, щоб зрозуміти, які слова потрібно ввести в це чортове поле, щоб справді отримати результат. По суті, я все ще щодня цьому навчаюсь.

Вміння ставити хороші питання — це справді недооцінена навичка (як і складання гарного повідомлення про проблему, до речі). По-перше, як ми взагалі визначаємо, що питання «хороше»? Stack Overflow пропонує підказку, в якій перелічені такі якості хорошого питання:

  • Чи відповідає тематиці сайту.
  • Має на увазі об'єктивну відповідь.
  • Ще не було задано.
  • Було досліджено.
  • Ясно описує проблему, зазвичай з мінімальним прикладом, що легко відтворюється.

Гаразд, але як на практиці виглядає «ясний опис проблеми»? Яка інформація є релевантною, а яка ні? Іноді виникає відчуття, що для того, щоб поставити хороше питання, потрібно спочатку знати відповідь.

На жаль, невелике текстове поле тут не допомагає. Тож чи варто дивуватися з того, що так багато користувачів публікують неякісні питання? Іноді єдина відповідь, яку вони отримують, це посилання на якусь заплутану документацію. І це їм ще пощастить. Багато неякісних питань просто мовчки мінусують, і вони зникають у нескінченній стрічці питань.

Задавати добрі питання – це навичка. На щастя, його можна розвивати. Я, в основному, навчався, читаючи купу запитань та відповідей, наголошуючи, що працює, а що ні. Яка інформація корисна, а яка заважає? Хоча вам все одно буде страшно використовувати отримані знання на практиці та ставити запитання. Просто постарайтеся і навчайтеся на отриманому результаті. Повинен зізнатися, що мене трохи бентежать деякі мої ранні неосвічені питання, хоча, можливо, це доводить, що я сильно прокачав свою навичку ставити питання з того часу, як опинився на цьому сайті.

Погані і не надто хороші питання — не одне й те саме

Не підсолоджуватиму пігулку: деякі питання просто погані.

Питання, що складається зі скріншоту та фрази «ЧОМУ ЦЕ НЕ ПРАЦЮЄ!?!» - Поганий. Чому? Очевидно, що автор майже не доклав зусиль. Це навіть не так питання, як вимога: «зробіть цю роботу за мене!» З чого мені це робити? Мій час надто цінний, щоб витрачати його на допомогу тому, хто від початку не хоче вчитися і не цінуватиме мою допомогу. Вчитися тому, що являє собою Stack Overflow.

Тепер розглянемо питання, під назвою «Як прибрати сині кордони на моїй сторінці», що складається з декількох абзаців тексту, в якому йдеться про CSS-властивість outlineproperty, але без явної згадки слів «CSS» або «outline». Хоча таке питання може суперечити багатьом рекомендаціям Stack Overflow, я з цим не погоджуся, це непогане питання. Автор бодай намагався дати якусь інформацію, навіть не знаючи, що треба дати. Спроба зараховується, як і готовність сприймати та вчитися.

Однак багато учасників Stack Overflow напевно віднесуться до обох питань однаково: замінусувати і закрити. Це неприємно, це відлякує багатьох недосвідчених користувачів, перш ніж вони зможуть навчитися ставити питання якісніше і взагалі зрозуміють, як сайт працює.

Справді, погані питання не варті того, щоб витрачати на них час. Але треба враховувати, що ті, хто ставить не надто добрі питання, роблять це ненавмисно. Вони хочуть ставити добрі запитання, просто не знають, як. Якщо сліпо і без пояснень карати новачків, як вони навчаться?

Гарне питання не гарантує відповіді

Зазвичай на Stack Overflow швидше відповідають прості питання, куди багато хто може відповісти. У вас питання про двійковий пошук у JavaScript або HTML? Прекрасно! Отримуйте п'ять відповідей за годину. Але чим складніше або специфічніше питання, тим менша ймовірність, що вам дадуть відповідь, незалежно від якості формулювання.

Імовірність отримати відповідь також швидко падає з часом. Коли питання йде на кілька сторінок углиб стрічки, воно губиться. Через тиждень вам залишається лише молитися, що хтось, який володіє потрібними знаннями, випадково натрапить на ваше запитання (або щедро на нього).

Вам можуть не сподобатися правильні відповіді

Щомісяця я отримую кілька мінусів за так звані непопулярні відповіді. Це такі відповіді, які, по суті, кажуть: «причина в тому, що це так спроектовано», або «це неможливо, тому що…», або «це баг, який треба спочатку виправити». У всіх випадках автори не отримують рішення або навіть обхідної ради. І я підозрюю, що коли людям не подобається те, про що йдеться у відповіді, вони його мінусують. Я їх навіть розумію, але це не означає, що відповіді є помилковими.

Звичайно, вірно і зворотне: хороші відповіді не обов'язково кажуть вам, що ви хочете почути. Деякі найкращі відповіді спочатку відповідають на вихідне питання, але потім описують інші підходи до вирішення проблеми. Іноді я відповідаю на запитання користувача, а потім пишу великий текст, чому не рекомендується так робити.

Щоразу, коли вираз відносини спрощується до голосів «за» і «проти» або кнопки «подобається», втрачаються важливі відмінності. Ця проблема часто трапляється в інтернеті. Скільки соціальних мереж дозволяють відрізнити "Я підтримую це" від "Думаю, добре сказано, навіть якщо мені це не подобається або я не згоден з цим"?

Загалом, незважаючи на щомісячні мінуси, я вважаю, що спільнота Stack Overflow голосує об'єктивно. Дотримуватимемося цього шляху.

Я майже ніколи не питаю на Stack Overflow

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

Але я рідко ставив тут питання, навіть коли вивчав нову мову чи фреймворк. Не тому, що такий геній зовсім навпаки. Просто через роки перебування на Stack Overflow, коли у мене виникає питання, я приходжу до глибокого переконання, що навряд чи стану першим, хто його поставив. Починаю шукати, і майже завжди виявляю, що хтось уже питав про те саме пару років тому.

Спостереження за чужими питаннями - чудовий спосіб дізнатися нове про свій продукт

Зараз я працюю над В.С. КодТому взяв за звичку переглядати питання з тегом vscode. Це чудовий спосіб дізнатися, як мій код використовується у реальному світі. Які проблеми виникають? Як можна покращити документацію чи API? Чому те, що я вважав зрозумілим, викликає стільки нерозуміння?

Питання - це важливий сигнал, що показує, як використовується ваш продукт. Але суть не в тому, щоб відповісти і йти далі, а спробувати спочатку зрозуміти, чому в людини виникло питання. Можливо, у продукті є невідома тобі проблема, чи якісь припущення, які ти несвідомо зробив? Також питання допомогли мені знайти багато багів і надихнули мене на подальшу роботу.

Якщо ви супроводжуєте продукт для розробників, то не сприймайте Stack Overflow як звалище (або, того гірше, як цвинтар питань). Регулярно перевіряйте, які запитання та відповіді. Це не означає, що вам потрібно самостійно відповідати на кожне запитання, проте сигнали зі Stack Overflow є надто важливими, щоб їх ігнорувати.

Межі між питанням, повідомленням про багу та запитом на фічу розмиті

Чимало питань про VS Code на Stack Overflow насправді були повідомленнями про баги. А багато інших — насправді запити на нові фічі.

Наприклад, питання із заголовком «Чому VS Code падає, коли я роблю …?» - Це повідомлення про баг. VS Code не повинен падати в різних ситуаціях. Відповідати на запитання, які є повідомленнями про баги, непродуктивно, адже авторів може задовольнити обхідне рішення і вони ніколи не заповнять справжній звіт про баг. У подібних ситуаціях я зазвичай пишу, щоб користувачі заповнили звіт про баг на Github.

В інших випадках відмінності можуть бути менш очевидними. Наприклад, питання «Чому JavaScript IntelliSense не працює у VS Code?». Залежно від того, як саме не працює JavaScript IntelliSense, питання можна віднести до однієї з трьох категорій:

  • Якщо це проблема конфігурації користувача, то це дійсно питання для Stack Overflow.
  • Якщо в описуваному випадку IntelliSense повинен працювати, а він не працює, то це повідомлення про баг.
  • Якщо в описуваному випадку IntelliSense не повинен працювати, це запит на нову фічу.

Зрештою, більшості користувачів ці нюанси не важливі — вони лише хочуть, щоб працював JavaScript IntelliSense.

І хоча для мене, як відповідального за проект, ці відмінності є важливими, то загалом вони не повинні і для мене мати значення. Тому що і питання, і повідомлення про баги, і запити на фічі - все це способи вираження однієї ідеї: користувач чекає чогось від мого коду і не отримує цього. Якби продукт був ідеальний, користувачі ніколи не ставили б питання про нього, тому що їм все було б зрозуміло і він робив би саме те, що вони хочуть (або хоча б говорив, чому не може).

Розробники теж люди

Люди емоційні. Люди ірраціональні. Люди дурні. Не завжди, звісно, ​​але іноді! І не повірите, але розробники також люди.

Є така вигадка, що ми, розробники, любимо повторювати собі: «Ми працюємо з комп'ютерами, тому маємо бути раціональними. Ми розуміємо загадкові символи, тому маємо бути розумними. Програми захопили світ, так що ми маємо бути крутими! Круто! Вперед!

Це не так. А якби було так, то допоможи господи решті людей. Навіть на Stack Overflow, цьому інструменті для професіоналів, створеному як об'єктивна база знань, навіть у моєму власному, вкрай специфічному куточку VS Code, я продовжую стикатися з всілякими неподобствами: логічними помилками, образами, стадним мисленням і т.д.

Не обманюйте себе: мабуть, ви не такі досконалі, як вам здається. Але це не означає, що нам не потрібно намагатися позбавитися своїх недоліків.

Чувак, я саме той, хто це створив

Я теж людина, і час від часу те, що відбувається на Stack Overflow, мене дратує. Наприклад, коли користувач самовпевнено пише нісенітниця або просто дає помилкову відповідь на питання, пов'язане з VS Code - продуктом, який я створив і який чудово знаю. Дивно, але таке враження, що чим хибніша відповідь, тим вірогідніше, що хтось назве її незаперечним фактом.

Коли таке трапляється, я дію як на зображенні і пишу правильну відповідь.

Чому я навчився за 10 років на Stack Overflow

І кілька разів це призводило до виникнення довгих гілок: горе мені, що насмілився поставити під сумнів їхні знання, що я створив! Припиніть постійно намагатися бути правими, чортові розумники! Тому що правий я!

Легко стати цинічним у цій безпросвітності

Зіткнувшись із нескінченним потоком неякісних питань, легко стати цинічним. Він ніколи не чув про Google? А той хоча б уявляє, як будувати зв'язкові речення? Ти че, пес?

Іноді я переглядаю десятки нових питань на день. Постійно спостерігаючи всі ці неякісні питання, ризикуєш скотитися у зневагу чи цинізм. Цей цинізм може виплеснутися на сайт, що підтвердить будь-хто, хто стикався з занадто моторошним модератором або витратив пару годин на дослідження та складання питання, щоб у відповідь отримати лише мінуси і згинути в забутті без жодних пояснень.

Звичайно, є користувачі, які не докладають жодних зусиль і публікують погані питання. Але вірю, що основна маса неякісних питань походить від людей з добрими намірами (хоч і безглуздих). Я завжди намагаюся пам'ятати про те, що означає бути новачком. Коли ти тільки починаєш, то не розумієш, як насправді тут все влаштовано. У деяких випадках ти навіть не знаєш, як правильно висловити свою проблему. Повірте, важко бути в такому стані. І неприємно, коли тебе облили помиями тільки через те, що запитав.

Хоча Stack Overflow багато зробив, щоб допомогти новачкам, ще потрібно зробити набагато більше. Я намагався знайти баланс між дотриманням прийнятих на сайті стандартів та поблажливістю до недосвідчених користувачів. Це може мати на увазі пояснення, чому я проголосував за закриття питання або розміщення коментаря, що спонукає користувача дати додаткову інформацію. Мені ще є куди зростати.

З іншого боку, я без вагань мінусую користувачів з репутацією в 50 000, які публікують питання «Найкраще оформлення під VS Code для JavaScript-розробки?» або які завантажують мильні скріншоти коду замість тексту.

Іноді я хочу просто подякувати тобі

На Stack Overflow слабо розвинена культура подяки. Пам'ятається, колись на сайті автоматично вирізалися з питань слова «привіт» та «дякую». Можливо, так робиться й досі, я не перевіряв.

Сьогодні будь-хто, хто працював у підтримці клієнтів, добре знає, що надлишок ввічливості може перешкодити і навіть здаватися награним. Але іноді на цьому сайті хтось робить щось дуже важливе для тебе, а єдиний спосіб віддячити йому - поставити плюсик. Відстійно.

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

Іноді мені хочеться дізнатися, що сталося після отримання відповіді

Stack Overflow діє за принципом транзакцій: одні люди запитують, інші відповідають. А що відбувається після отримання відповіді? Хто знає? Іноді мені цікаво це дізнатися. Чи була моя відповідь корисною? Якому скромному проекту він допоміг? Чому навчився автор питання?

Звичайно, задовольнити цю цікавість неможливо. Вимагати, щоб користувачі звітували про те, як використовувати отриману інформацію, було б дуже проблематично, якби навіть ви змогли це зробити. Але поміркувати над цим цікаво.

Гейміфікація ефективна…

…при перетворенні процесів у гру.

Я все ще трохи хвилююся, коли в рядку статусу бачу маленький значок +10 або +25. Можливо ці невеликі вкраплення гейміфікації є причиною того, що я 10 років повертаюся на сайт. Але з роками я також став ставити питання, якого роду грою є Stack Overflow і що означає перемога в ній.

Впевнений, що систему створювали з найкращих спонукань: нагороджувати людей за корисні запитання та відповіді. Але як тільки додаєш високі оцінки, набирає чинності закон Гудхарта, і частина користувачів починає підлаштовувати свої дії під досягнення максимальної цінності, а під отримання максимальних оцінок. І це важливо, тому що…

Репутація означає не те, про що ти думаєш

Репутація не еквівалентна технічній компетентності, навичкам комунікації чи розумінню, як працює чи має працювати Stack Overflow.

Я не хочу сказати, що репутація марна. Просто вона означає не те, що має на увазі адміністрація Stack Overflow або що має означати слово репутація. Я зрозумів, що репутація – це міра впливу. Розглянемо дві гіпотетичні відповіді, опубліковані на сайті:

  • Один про поширену git-операцію. Я за дві хвилини за допомогою Google написав відповідь у три рядки.
  • Інший про заплутану теорію графів. Можливо, відповісти на нього може лише сотня людей у ​​всьому світі. Я написав кілька абзаців та приклад коду, які пояснюють суть проблеми та як її вирішити.

За п'ять років першу відповідь переглянули 5 млн. разів і поставили 2000 плюсів. Другу відповідь подивилися 300 разів і поставили два жалюгідні плюси.

Певною мірою це дуже нечесно. За що нагороджувати те, що опинилося в потрібному місці? (Не все визначається успіхом, величезну роль відіграє та розуміння правил гри). З іншого боку, перше питання справді допомогло набагато більшій кількості людей, ніж друге. Може, варто визнати, що в якомусь сенсі визнання призводить до нагромадження «репутації»?

Тому я розцінюю «репутацію» на Stack Overflow свого роду мірою впливу. Справжню репутацію не можна виміряти простими балами, вона виникає у суспільстві. До чиїх порад я прислухаюся, хто допомагає іншим, кому я довіряю? Можливо, все це будуть різні люди, залежно від того, я пишу на PHP або під iOS.

Враховуючи сказане, я не знаю, що в цьому плані повинен зробити Stack Overflow. Чи будуть користувачі так само мотивовані, якщо замість «репутації» вони запрацюють «хитрозаді бали»? Чи залишаться користувачі також залучені, якщо взагалі не буде системи балів? Думаю, навряд. І міф про те, що «репутація» на Stack Overflow рівноцінна справжній репутації, приносить вигоду не лише самому сайту, а й найактивнішим користувачам. Ну, правда, кому ж не подобається підвищувати свою репутацію?

Ні, як це найчастіше відбувається в житті, щоб отримати реальне уявлення про те, що відбувається, потрібно аналізувати не лише числа. Якщо пост набрав на Stack Overflow 10 тис. балів, то подивіться, як ця людина спілкується, які питання та відповіді вона публікує. І у всіх, крім виняткових, випадках майте на увазі, що самі по собі бали на Stack Overflow навряд чи говорять про щось, крім уміння людини користуватися цим сайтом. А на мій досвід, часто не говорять навіть про це.

Моя праця не була б продуктивною без Stack Overflow

Щоразу, коли мені потрібно зробити щось складне в git, я йду на Stack Overflow. Щоразу, коли мені потрібно щось просте в bash, я йду на Stack Overflow. Щоразу, коли я отримую дивну помилку компілювання, йду на Stack Overflow.

Я не продуктивний без IntelliSense, пошукового двигуна та Stack Overflow. Судячи з деяких книг, це робить мене дуже поганим програмістом. Ймовірно, я б провалив багато тестів і не вирішив багато завдань на дошці. Нехай так. Серйозно, щоразу, коли я використовую .sort в JavaScript, мені доводиться шукати інформацію про те, коли я отримаю -1, 0 або 1, а я щодня пишу на JS, розробляючи найпопулярніший редактор для цієї мови.

Ні, Stack Overflow – неймовірний інструмент. Тільки дурень не використовуватиме всі доступні йому інструменти. То чому б не бути внутрішнім дурнем, як я? Заощаджуйте ресурси мозку для важливих знань, наприклад, запам'ятовування всіх сюжетів серіалу «Сайнфелд» або вигадування витончених каламбурів (яких так не вистачає в цій статті, але багато інших, зовсім іншого характеру).

Stack Overflow - це диво

Stack Overflow дозволяє кожному, незалежно від досвіду чи знань, публікувати питання, пов'язані з програмуванням. На ці питання відповідають абсолютно незнайомі люди, більшість з яких витрачають час свого життя та кар'єри на безоплатну допомогу іншим.

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

Stack Overflow не існуватиме вічно. Якось з'явиться щось краще. Сподіваюся, це щось викладе уроки з помилок Stack Overflow і візьме від нього все найкраще. А доти, сподіваюся, ми не сприйматимемо цей сайт як належне. Це і орієнтир, і жива спільнота, яка постійно поповнюється новими людьми. Якщо вас це хвилює, то пам'ятайте, що все це дуже тендітно, і навіть невеликі дії на кшталт допомоги доброзичливим, але поки що необізнаним новачкам може мати позитивний ефект. Якщо я критикую цей сайт, то лише тому, що мені не все одно і я знаю, як зробити його кращим.

PS

Я ще був школярем, коли прийшов на Stack Overflow. Я тільки починав писати (ES5!) на JavaScript в Eclipse, і здавалося, що 90% питань починаються з «Використовую jQuery, просто…». І хоча я не розумів, що роблю, незнайомці витрачали свій час на допомогу мені. Не думаю, що я по-справжньому цінував це тоді, але я не забув.

Люди завжди хотітимуть, щоб Stack Overflow був чимось різним: сайтом запитань-відповідей; інструментом на вирішення домашніх завдань; живим стандартом програмування. А для мене цей сайт, незважаючи на його зростання і недоліки, по суті є відкритою спільнотою, в якій незнайомці допомагають один одному вчитися і вдосконалюватися. І це прекрасно. Я радий, що був частиною Stack Overflow за останні 10 років, і сподіваюся, що так буде й надалі. Я хочу за наступне десятиліття дізнатися не менше, ніж за попереднє десятиліття.

Джерело: habr.com

Додати коментар або відгук