Od początków istnienia Internetu, jedną z jego głównych funkcji było zadawanie pytań odpowiednio sprofilowanemu gronu słuchaczy – np. grupom dyskusyjnym Usenetu – i otrzymywanie na nie odpowiedzi. Narzędzia i sposoby komunikacji się zmieniają (mamy teraz fora, strony typu StackExchange, a nawet serwisy społecznościowe), ale ich przydatność w rozwiązywaniu programistycznych problemów pozostaje co najmniej niezmienna.
Odpowiednią pomoc możemy często znaleźć, przeszukując po prostu archiwum dyskusji. Niekiedy jednak musimy (lub chcemy) zadziałać aktywniej i założyć nowy wątek, opisując nasz problem. I tu podobno otwiera się przed nami całe uniwersum detali, o których powinniśmy pamiętać, i które zwykle zostały “wygodnie” zebrane do postaci kilometrowych poradników takich jak ten. Część z nich jest techniczna i często przestarzała (80 znaków w wierszu?…), a reszta nie jest dostatecznie poglądowa, aby uchwycić istotę sprawy.
A ta jest – według mnie – zupełnie nieskomplikowana i łatwa w praktycznym stosowaniu. Skuteczne prośby o pomoc w sprawach technicznych można bowiem rozważać jako proces obejmujący tylko trzy proste kroki – uniwersalne i niezależne od medium komunikacji.
Pierwszym z nich jest opisanie tego, co chcemy osiągnąć. W naturalny sposób powinny tu się tu pojawić nazwy używanych przez nas technologii (języków programowania, bibliotek, frameworków, itp.), a być może także pewne informacje dotyczące kontekstu (aplikacji, systemu, projektu), w którym je stosujemy. Nie powinno też zabraknąć najważniejszej części: opisu zadania, jakie chcemy wykonać, i które z jakiegoś powodu aktualnie nam nie wychodzi.
Tę wstępną część można nierzadko załatwić jednym, niezbyt długim zdaniem. Nadmierna rozwlekłość nie jest zresztą wskazana; liczy się zwięzłość i odpowiednio duża gęstość informacji. Oto dobre przykłady, zaczerpnięte ze znanego serwisu StackOverflow:
Używam biblioteki do C++, która wymaga przekazania danych jako
vector
char
ów. Potrzebuję przekazać jejstring
a… (źródło)
Mając w Pythonie ciąg znaków w rodzaju
"http://www.domain.com/?s=some&two=20
, jak mogę pozbyć się z niego wszystkiego od
"&
, otrzymując"http://www.domain.com/?s=some"
? (źródło)
Szukam sposobu na pobranie poprzez jQuery domyślnej wartości pola tekstowego HTML po tym, jak strona została odświeżona… (źródło)
Drugą częścią jest określenie tego, co próbowaliśmy zrobić. W przypadku problemów programistycznych nieodzowny jest tu odpowiedni kawałek kodu. Przygotowanie takiego fragmentu jest w pewnym sensie sztuką samą w sobie, ale poziom trudności tego zadania jest zazwyczaj nieporównywalnie mniejszy niż oryginalnego problemu.
Cel tego kroku (zwykle najobszerniejszego) jest trojaki. Oprócz pokazania własnej inicjatywy, prezentacja próby rozwiązania sama w sobie stanowi dobry opis problemu i założonych intencji pytającego. Ponadto może ona być gotową podstawą poprawnej odpowiedzi, jeśli nasz sposób podejścia do zagadnienia wymaga tylko niewielkich korekt.
Na koniec powinniśmy jeszcze wspomnieć o rezultatach naszych prób. Zwykle wymienia się tu takie dane jak: logi, teksty wyjątków wraz ze stosem wywołań, komunikaty o błędach kompilacji – i tak dalej. Ogólnie chodzi jednak o wszelkie zjawiska, które okazały się niezgodne z naszymi zamiarami opisanymi na wstępie. Ostatecznie bowiem to właśnie ta niezgodność jest powodem, dla którego szukamy pomocy w sieciowej społeczności, więc powinniśmy opisać ją wystarczająco szczegółowo.
“Chciałem A, zrobiłem B, a wyszło X” – tak chyba najkrócej można streścić opisaną wyżej metodę przedstawiania problemów technicznych szerszemu gronu odbiorców, a więc w konsekwencji także ich rozwiązywania. Być może istnieją łatwiejsze i/lub lepsze sposoby, ale skuteczność tego widziałem już wystarczająco wiele razy, żeby móc go polecić wszystkim.
Ciekawy artykuł. Większość z nas podchodzi do takiego opisu problemu intuicyjnie i często jest on poprawy, natomiast zdarza się, że ma z tym kłopot początkujący(nie każdy oczywiście). Początkujący, którego można nazwać “niezrównoważonym”. Pytanie tylko, czy wycelowałeś w odpowiednią grupę społeczną. Uważam, że jest to blog, który trzyma poziom(zarówno Ty, jak i Twoi czytelnicy). Taki artykuł bardziej nadawałby się na fora programistyczne, o dużej popularności, i częstym występowaniu początkujących(tych wyróżnionych wcześniej)
@Wem:
od teraz na forach zawsze możesz wklejać ten link. Dzięki temu co niektóre osoby będą mogły przeczytać ten jak i inny wpis, obcując tym samym (jak to sam nazwałeś) z czytelnikami trzymającymi poziom ;)