Какво научих през 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, когато имам въпрос, стигам до дълбокото убеждение, че едва ли ще бъда първият, който го е задал. Започвам да търся и почти винаги откривам, че някой вече е питал същото преди няколко години.

Наблюдаването на чужди въпроси е отличен начин да научите нещо ново за своя продукт

В момента работя по VS Code, затова взех на навик да преглеждам въпроси с таг 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 и ще вземе от него всичкото най-добро. А до тогава, се надявам, че няма да възприемаме този сайт за даденост. Това е и ориентир, и жива общност, която постоянно се попълва с нови хора. Ако ви вълнува, помнете, че всичко това е много крехко и дори малки действия — като помощ на доброжелателни, но все още неопитни новаци — могат да имат положителен ефект. Когато критикувам този сайт, то само защото не ми е все едно и знам как да го направя по-добре.

P.S.

Бях още ученик, когато дойдох на Stack Overflow. Току-що започнах да пиша (ES5!) на JavaScript в Eclipse и изглеждаше, че 90 % от въпросите започват с „Използвам jQuery, просто …“. И въпреки че не разбирах какво правя, непознати отделяха времето си, за да ми помогнат. Не мисля, че наистина оценявах това тогава, но не съм го забравил.

Хората винаги ще искат Stack Overflow да бъде нещо различно: сайт за въпроси и отговори; инструмент за решаване на лични задачи; жива еталонна платформа за програмиране. А за мен този сайт, въпреки растежа и недостатъците си, по същество е отворена общност, в която непознати помагат на другите да учат и се усъвършенстват. И това е прекрасно. Радвам се, че бях част от Stack Overflow през последните 10 години и се надявам, че така ще бъде и за в бъдеще. Искам през следващото десетилетие да науча не по-малко ново, отколкото през предишното десетилетие.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster