question

… Czyli jak zadać techniczne pytanie by była szansa uzyskać na nie odpowiedź

Przez ostatnie dwa trzy miesiące staram się systematycznie śledzić trzy imo największe polskie fora dotyczące programowania, w tym głównie interesują mnie zagadnienia związane z .NET co też wpływa na wybór tych portali :) Mowa tutaj o devPytaniach, które mają formę Q&A, Goldenline z forum dla programistów .NET oraz CodeGuru (wszystko byle by było związane z .NET). Pewnie istnieją też inne miejsca, ale rozdrabniać się też zbytnio nie lubię. Tak czy siak, przez ten okres przeczytałem 90% pytań które się pojawiły na tych portalach i muszę powiedzieć, że większości z nich po prostu nie rozumiałem. Były one zagmatwane, niedopowiedziane, dotyczące czegoś innego niż ich tytuł czy też po komentarzach „doprecyzowujących” w ogólnie nie na temat problemu, który ktoś chciał rozwiązać.

Dlatego też, postanowiłem przelać kilka propozycji jak zadawać pytania by uzyskać na nie odpowiedź na papier. Osobiście nie uważam siebie za eksperta w zadawaniu pytań jednak wiem co pomaga mi kiedy mam na pytanie odpowiedzieć. Sądzę jednak, że to co i mi pomaga też by pomogło innym. A więc po kolei.

Najważniejsze

Twoje pytanie, to czas innych ludzi. Pamiętaj o tym. To że ty poświęcisz 5 minut na zadanie pytania i olejesz sprawę może kogoś kosztować 30 minut pracy by napisać odpowiedź. Nie marnuj czyjegoś czasu, zadawaj konkretne i dobrze z profilowane pytania i staraj się dawać dość szybko feedback. Jeżeli z góry wiesz, że przez następne 2 tygodnie będziesz niedostępny to zastanów się dwukrotnie nad pytaniem zanim je opublikujesz.

Zanim zadasz pytanie

Wszyscy dodają w FAQ, że zanim zadasz pytanie sprawdź czy na forum już takiego nie było. Bzdura, to ma ręce i nogi jak jest tych pytań 10-100 ale nie jak jest ich 1 000 wzwyż. Jednak to nie oznacza, że nie powinieneś sprwadzić w googlu czy nie ma odpowiedzi na Twoje pytanie – szukasz odpowiedzi po polsku bo masz kłopot z angielskim, to wykorzystaj google.pl, interesują Cię odpowiedzi w języku angielskim to skorzystaj z google.com i pisząc pl i com mam na myśli te konkretne strony. To samo zapytanie na google.ie i google.com zwraca kompletnie inne odpowiedzi, gdzie przy .com mam informacje z miejsca na pierwszej stronie a na ie dopiero 2 strona o zawiera odpowiedź.

Wiedza o tych różnicach się przydaje, upewnij się, że przeszukujesz net z dobrej domeny, bo możesz spędzić godziny i nic nie znaleźć.

Jeżeli odpowiedź istnieje to warto sprawdzić czy uwzględni ona Twój konkretny przypadek, jak tak to naprawdę nie ma sensu zadawanie pytania. 60% odpowiedzi ludzi na forach to przeważnie jedne z pierwszych wyników zapytań googla. Zrobienie reaserchu nic nie kosztuje a może i zaoszczędzić Twój jak i innych czas. Z naciskiem na innych. Należy pamiętać że pytanie powoduje że inni spędzają czas nad odpowiedzią – nie marnuj ich czasu.

Tytuł i Tagi/Wątki

Przy zadawaniu pytania staraj się by tytuł jakkolwiek Twojego pytania dotyczył. Tytuł jak coś zrobić w technologii X nie idzie w parze z pytaniem o technologię Y.

Tytuł także nie może być za bardzo ogólny jak Exception na stronie – czasami po tytule decyduje osobiście czy przeczytać pytanie, czasami tytuł może zainteresować swoją ogólnością a czasami po prostu zniechęcić.

Dobrze jest więc nawiązać do tego o co chcecie się spytać, krótko i zwięźle. Zastanó się po czym byś szukali rozwiązania na podany problem, po ogólnym tytule Exception czy może FileNotFoundException przy próbie otwarcia strony SharePoint. Bardzo często takie zapytanie które zadajesz w googlu jest dobrym kandydatem na tytuł – oczywiście pomijam tutaj kwestie stricte związane z językiem zapytań googla jak pominięcie pewnych fraz.

Coraz częściej także fora a już na pewno Q&A udostępniają możliwość tagowania pytań – warto więc zastanowić się nad konkretnymi tagami, które opiszą Twój problem. W portalach typu Q&A tagi mogą być uzupełnieniem pytania, nie ma potrzeby nadawać tytuł NHibernate – problem z dodaniem rekordu kiedy można dodać tag NHibernate zaś tytuł doprecyzować o problem lub Exception.

Jeżeli zaś nie ma możliwości tagowania to ważne są dwie rzeczy, po pierwsze zadanie pytania w odpowiednim wątku – mówię to bo osobiście wkurzają mnie odpowiedzi typu chyba pomyliłeś wątek, a wiem, że to zniechęca do zrobienia kopii pytania w innym wątku. To gdzie i do jakiego wątku ma trafić pozostawiam Twojemu zdrowemu rozsądkowi – czy pytanie o sesję w NHibernate powinno trafić do wątku z bazami danych, architektury czy może do aplikacji web? Czasami jest ciężko bo IMO w zależności od kontekstu i tego co chcemy się dowiedzieć może pasować wszędzie lub nigdzie :) Dlatego też fora bez tagów to jakaś porażka :) Tak czy siak, zrób co w Twojej mocy by dobrze wybrać wątek, bo zamiast odpowiedzi możesz dostać po policzku. Później zaś ktoś szuka odpowiedzi na takie samo pytanie i trafia na taką genialną odpowiedź jak to nie ten wątek – jakie to jest wkurzające! :)

Druga rzecz o której warto pamiętać, jak nie ma tegowania to zrób je sam – w tytule, podaj technologię, produkty itp. nie za dużo ale też nie za mało. To się naprawdę przydaje. Na przykład istnieje osoba, którą interesują wszystkie pytania dotyczące wątków i będzie przeglądała wszystkie wątki w poszukiwaniu takiego pytania, by ułatwić jej znalezienie pytania na które może udzielić odpowiedź można w tytule dodać [Threads/ing] czy coś podobnego.

Dzięki takiemu podejściu można wejść na stronę i po prostu przejrzeć wzrokiem tytuły i wybrać tylko te, które są intersujące dla nas lub czujemy się mocni by w nich odpowiedzieć czy też chcemy się tematu douczyć za pomocą odpowiadania ludziom na pytania – polecam, bardzo fajny sposób uczenia się, rozwiązywanie problemu.

Tytuł powoduje iż pytanie jest dostrzeżone, zaś to czy otrzymasz na nie odpowiedź w dużej mierze zależy od treści pytania.

Treść pytania

Jedną z najważniejszych reguł jest napisanie tak pytania byś czytając je był wstanie na nie sam odpowiedzieć :) mimo iż śmieszna to reguła to jak bardzo trafna. Jeżeli napisałeś tak pytanie, że sam nie wiesz o co chodzi to lepiej je skasować i zacząć od początku. Jeżeli także odpowiadasz na pytania innych to zastanów się co powoduje iż jesteście wstanie na pytanie odpowiedzieć, i uwzględnij to także w Twoim pytaniu.

To co ja mogę powiedzieć to to, żeby pytanie było jasne, przejrzyste i konkretne. Pytanie się o problem Z kiedy w rzeczywistości chodzi o problem Y spowoduje iż nie otrzymasz odpowiedzi takiej o jaką Ci chodziło. A nie ma nic bardziej demotywującego jak po odpowiedzi otrzymać komentarz tak właściwie to chodziło mi o.

Także zamknij pytanie w całość, dawanie komentarzy do odpowiedzi ok, to teraz jak to już mam to co mam zrobić by zadziałało mi teraz to, może być trochę denerwujące – wszystko zależy od systemu forum czy Q&A. Jak forum to można na to przystać (nie, nie można ale wtedy forum nie było by forum;)) i spokojnie dalej kontynuować ale w Q&A jest to już drugie, inne pytanie.

Nie twórz też listy 20 pytań w jednym pytaniu. Skoncentruj się na tym co Cię interesuje, masz 20 pytań? Zadaj 20! A nie jedno z 20oma. Może da się to jakoś pogrupować, czasami są pytania zależne to wtedy kilka pytań ma ręce i nogi, ale 20 różnych pytań które są baaardzo luźno powiązane w jednym pytaniu raczej nie spowoduje otrzymania na nie wszystkie odpowiedzi.

Kilka dodatkowych porad:

  • Jeżeli podajesz informacje o wystąpieniu wyjątku, podaj dokładnie typ wyjątku, błąd, także może i stack trace jak i inner exception jak istnieje – może się też przydać fragment kodu gdzie on występuje, lub nawet całkowicie z reprodukowana sytuacja;
  • Podaj informacje co już próbowałeś wykonać by rozwiązać problem, nie ma sensu by ktoś się produkował nad odpowiedzią by potem dostać komentarz taa próbowałem już tego
  • Jeżeli problem istnieje w określonych warunkach i na pewnych zasadach, to jakie to są warunki i jakie zasady oraz dlaczego – dla przykładu problem może występować kiedy dwie instancje aplikacji są uruchomione na jednym komputerze. Zasadą jest korzystanie z jednego pliku źródła danych na raz. Zasada ta jest spowodowana tym, że ogólnie aplikacja wykorzystywana jest przez cała firmę a plik danych trzymany jest na zasobie sieciowym, tego nie można zmienić. To ogólnie zawęzi prawdopodobne odpowiedzi do tych, które uwzględnią zasady i warunki działania aplikacji. Po co Ci odpowiedź działaj na dwóch plikach więc kiedy trzeba wyraźnie działać na jednym.
  • Wklejasz kod? Z formatuj go, wykorzystajcie dostępne style by był on przejrzysty i czytelny to naprawdę zwiększa czytelność pytania.
  • Podajesz kod? Upewnij się, że jest poprawny i się kompiluje. Pisanie pytania, że kod nie działa i wywołuje dany błąd X kiedy on się nawet nie kompiluje naprawdę nie zachęca do odpowiedzi.
  • Podajesz kod? Postaraj się podać go tyle by dało się zrobić copy & paste do projektu i uruchomić go. Pytasz się o zapytanie do bazy danych, podaj model na jakim operujesz – czasami błąd może też leżeć w sposobie deklaracji zmiennych i własności modelu, który chcesz wykorzystać do odpytania bazy danych jak i na pewno ułatwi stworzenie przykładowego projektu w którym będzie można zreprodukować kod.
  • Podajesz kod? Upewnijcie się, że dotyczy on Twojego problemu i to on powoduje problem, a nie coś innego.

Oraz jeżeli zadajesz pytanie, to śledźcie je i reaguje na pytania i odpowiedzi ludzi, nie olewaj tego. Nie ma nic gorszego niż czekanie 2 tygodnie na doprecyzowanie pytania czy też brak jakiegokolwiek feedbacku czy to rozwiązuje problem czy też nie, jak nie to dlaczego.

Jeżeli korzystasz z portali typu Q&A to jak aktualizujesz treść Twojego pytania, poinformuj osoby, które odpowiedziały o tym, dając im komentarz, do ich odpowiedzi. Da to możliwości odpowiadającemu na zorientowanie się, że zaszła zmiana, może też ta zmiana zaszła przez jego odpowiedź? Tak czy siak, będzie on o tym wiedział i będzie mógł doprecyzować lub zmienić swoją odpowiedź by uwzględnić zmiany w pytaniu.

Zaznacz odpowiedź

To już nie jest stricte związane z pytaniem, ale jeżeli padła odpowiedź, zaznacz ją za poprawną, zarówno fora jak i Q&A mają możliwość kliknięcia na pomógł mi. To zarówno docenia odpowiadającego jak i pomaga innym w znalezieniu odpowiedzi w trakcie robieniu researchu. Czasami naprawdę odechciewa się dać odpowiedź do pytania kiedy pytający nigdy nie zaznaczył odpowiedzi jako pomógł mi, albo co gorsza zadał 20 pytań i tyle, słuch po nim zaginął.

Ostatnie uwagi

Nie zadawaj pytania jako żądania, prosisz o pomoc, nie żądasz jej. Więc pisanie potrzebuje na jutro kalkulator z ładną grafiką raczej spowoduje serię odpowiedzi zrobię Ci to za 1 000zł w najlepszym wypadku.

Podsumowanie

To chyba tyle moich uwag z ostatnich miesięcy, pewnie lista będzie się rozrastać wraz czasem, tak czy siak, mam nadzieję, że to pomoże zadawać lepsze techniczne pytania, co spowoduje także wzrost super ekstra fajnych odpowiedzi.

Czy coś pominąłem? O czymś nie wspomniałem? Gdzieś może przesadziłem? Podziel się swoimi uwagami w komentarzach, dzięki :)

8 KOMENTARZE

  1. W 100% popieram, a nawet nie w 100 tylko w 1000 :) Powoli się we mnie wzbierało, żeby napisać coś podobnego :) Wydaje mi się, że problem leży tęż po stronie lenistwa, bo tak chyba trzeba określić fakt, że coraz więcej osób nie szuka przed zadaniem pytania ("Zanim zadasz pytanie"). Często zdarza się tak, że wpisując lekko zmodyfikowaną treść pytania w google po 10 sekundach jest już odpowiedź – dodanie pytania na forum trwa trochę dłużej :)

    Co do określania problemu, to podoba mi się cycat, który podrzucił kiedyś Maciek Aniserowicz: "Problem dobrze zdefiniowany jest w połowie rozwiązany." (Charles F. Kettering) – co z tego, że chcesz pomóc człowiekowi, skoro nie wiesz o co mu chodzi. Zadając pytanie doceniajcie ludzi, którzy poświęcają na to czas.

    Z mojej strony dodałbym tylko stereotypy, o których pisałem na swoim blogu (http://maciejgrabek.com/2011/03/09/stereotypy-w-it/), a które również pojawiają się w pytaniach opisanych przez Ciebie… Czytając takie pytanie dochodzę do wniosku "to takie niedojrzałe…"

  2. Jeszcze jedno: używaj interpunkcji!!! Jak widzę pytanie na 15 linijek bez przecinka ani kropki to mnie szlag trafia. Sam sobie mam je dzielić? Podpada to pod "nie marnuj czasu innych", pod czym podpisuję się wszystkimi 5 kończynami.

  3. Ja miałem i mam podobne przemyślenia i uwagi jak Gutek i Procent. Chciałem je nawet spisać w poście, ale dałem spokój. Dlaczego? A no dlatego, że ludzi nie zmienisz. Możesz im mówić i pisać i 100 takich postów i na darmo. Przyjąłem metodę ignorowania takowych pytań i osób. Co najwyżej jeśli nie uzyska od nikogo odpowiedzi i ze zdziwionym tonem zapyta czemu nikt nie pomaga wtedy uświadamiam co jest w 99% na rzeczy (w 1% – rzeczywiście nikt może nie znać odpowiedzi). Świata nie zmienisz…

    Paweł

  4. Balem sie dodac ten punkt bo sam mocny z polskiego nie jestem :) ale zgadzam sie, interpunkcja powinna byc. to tak jak napisanie porgramu w jednej linicje :)

  5. moze i sie ich nie zmieni, ale napewno ludzie sie ucza. zada ktos pytanie 2-3 razy bez odpowiedzi to moze za 4 razem zmieni podejscie. gdybysmy sie nie uczyli to prezentacje wciaz by wygladaly jak te z epoki "death by power point".

    Wole byc osobiscie optymista pod tym wzgledem niz realista/pesymista :)

    Zas co do ignorowania – jasne, tez to sie robi, dlatego jednak napisalem jak zadac pytanie by uzyskac odpowiedz. Bo zadac kazdy moze :) zobaczymy, moze cos sie zmieni, a moze nie ;)

  6. dzieki,

    cytat bardzo dobry – musze chyba zaczac posty Procenta spisywac a nie tylko czytac ;)

    z wyszukiwaniem bardzo dobry przyklad: http://bit.ly/etcMXY – biedny Pawel ktorego zjechali w komentarzach i punktacji. ale szczerze, tez bym pewnie taka sama dal odpowiedz.

    ze stereotypami (dzieki za linka) jest ciezko walczyc :( jedyna szansa, ze w koncu ktos gdzies zmadrzeje

Comments are closed.