Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Heurystyka rozwiązywania problemów przez programistów.
Forum PHP.pl > Inne > Opinie, ogłoszenia, pytania > Forum
Foxx
Dokonując pewnej refleksji nad treścią postów na forum można łatwo zauważyć,
że da się wyodrębnić pewnien typ problemów, które mają ludzie (szczególnie w
przedszkolu).

Mówię o postach typu "nie otrzymuję żadnych wyników z bazy danych". Każdemu,
kto ma trochę doświadczenia przychodzi do głowy kilka prostych działań, które
pozwoliłyby zlokalizować w którym momencie następuje błąd - w zapytaniu sql,
w działaniu bazy, w strukturze danych w bazie czy na poziomie przetwarzania
wyników w php.

Jak to się dzieje, że jeden z każdym problemem leci na forum a drugi potrafi
rozwiązać każdy z tych problemów? Oczywiście nie dlatego, że drugi nauczył się na
pamięć 5 milionów możliwych skryptów. Chodzi o dobrą heurystykę w szukaniu
błędów.

Mam wrażenie, że ta heurystyka jest w miarę prosta i uniwersalna. Gdybym miał
ją zwerbalizować, to może tak: prześledź program w taki sposób, w
jaki jest wykonywany i znajdź pierwsze miejsce, w którym wyniki nie są zgodne
z tym czego oczekujesz - prawdopodobnie tam jest błąd. Do tego dochodzą rzeczy
takie jak czytanie komunikatów ze zrozumieniem, skorzystanie z wyszukiwarek aby
znaleźć ten sam problem u kogoś innego i przeczytanie jak został rozwiązany.
Oczywiście zakłada to, że programista wie jakie jest oczekiwane działanie jego
skryptu a to dla wielu jest zbyt wiele. Ale jeżeli ktoś tego nie wie, to znaczy, że
nie szuka pomocy tylko frajera, który wykona za niego jego pracę (którą z jakiegoś
powodu [szkoła, zlecenie] ma wykonać on).

Zmierzam do tego, że nauczanie tej prostej heurystyki jest nieskończenie lepsze
niż ciągłe wykorzystywanie jej aby pomóc innym. W tym drugim przypadku,
Ci którzy potrafili się przestawić na efektywniejszy tryb myślenia
ponoszą za to karę - jednoczesnie trochę na własne życzenie jeżeli ciągle dają rybę
zamiast wędki.

Podsumowując smile.gif
Być może zaoszczędzimy sobie setki godzin jeżeli wyciągniemy wnioski z tych w sumie
oczywistości o których piszę. Jest przyklejony Temat: Najczestsze_bledy
ale po pierwsze założę się, że nie jest czytany, a po drugie nie do końca jest to
to, o co mi teraz chodzi.

Pomysł, który chodzi mi po głowie to coś w rodzaju mini systemu ekspertowego, który
prowadzi za rączkę ludzi mających tego typu problemy.

Inny pomysł, skromniejszy, to efektywne skatalogowanie postów, które były skuteczne
i trochę bardziej nachalne ich prezentowanie przed napisaniem posta w dziale
"przedszkole". Wiecie, "zanim zadasz pytanie sprawdź czy te posty nie rozwiązują Twojego
problemu" i tu posty dobierane na podstawie tytułu i może też treści. I może jakieś
małe przymuszenie do przeczytania ich snitch.gif

To taka luźna refleksja, ale zastanówcie się ile godzin jest tracone bez sensu. Nie tylko
na tym forum. I że taka umiejętność analizy przydała by się nie tylko na forum php czarodziej.gif
erix
Cytat
Jak to się dzieje, że jeden z każdym problemem leci na forum a drugi potrafi
rozwiązać każdy z tych problemów?

Raczej lenistwo i zaangażowanie... W przypadku tych pierwszych, oczywiście. winksmiley.jpg

Cytat
Wiecie, "zanim zadasz pytanie sprawdź czy te posty nie rozwiązują Twojego
problemu" i tu posty dobierane na podstawie tytułu i może też treści. I może jakieś
małe przymuszenie do przeczytania ich

Pisałem kiedyś o czymś podobnym (też mam podobne refleksje, co Ty): Temat: Odpornosc_na_debilne_pytania_w_Przedszkolu
Spawnm
i tak nie zmusicie lenia do czytania.
jest szukajka gdzie odpowiedź znajdzie, jest przyklejony temat, jest google ,może nawet jest identyczny temat 4 tematy niżej ...
dodanie kolejnego linka z odpowiedziami wiele nie da jeśli ktoś chce odpowiedź podaną na talerzu .

aby zmusisz leni do szukania/czytania tego co jest , trzeba by zorganizować jakąś akcje typu 'nie pomagamy leniom' tongue.gif
i dodatkowo np zamykać bzdetne tematy o utf-8 z informacją znajdź sobie było setki razy smile.gif

to by musiało poskutkować ;]
erix
Cytat
trzeba by zorganizować jakąś akcje typu 'nie pomagamy lenią'

Chyba leniom...

Cytat
to by musiało poskutkować ;]

Nie. Zawsze znajdzie się ktoś łasy na punkty pomógł i się wyłamie...
dr_bonzo
Skasowac "pomogl", albo wylaczyc dla tematow od nowych userow (powiedzmy pol roku + iles postow).
Zamkniecie tematu i nie klikniesz pomogl, bo nawet nie bedziesz mial odpowiedzi.
erix
Cytat
Skasowac "pomogl"

Albo zmienić zasady, aby przyznawać mogli ci dłużej obecni.
Foxx
Są dwie drogi - pierwsza zakłada że powodem tego problemu jest lenistwo i
brak zaangażowania. Na pewno tak jest. Zaradzić temu mogą metody
siłowe - ograniczanie możliwości dawania i otrzymywania "pomógł", zmuszanie
do czytania podobnych wątków, etc. To wszystko będzie działać i będzie
więcej spokoju.

Może jestem teraz zbytnim optymistą, ale mi chodziło o drugi aspekt sprawy.
Założenie mam takie, że to co robią ci ludzie to jest tylko pozornie łatwiejsza
droga. Pomyślcie, gdybyście mieli z każdym napotkanym w swojej karierze błędem
w swoim kodzie pisać posta o pomoc - ile czasu by to zajęło, ile stresu by
przysporzyło, oczekiwanie na odpowiedź (najczęściej delikatnie agresywną snitch.gif )
też może potrwać...
Nie robicie tego, bo macie w głowach małe skrypciki, które wam podpowiadają
np. "czytaj ze zrozumieniem komunikat", "znajdź miejsce o którym mówi komunikat",
ostatecznie - "wrzuć komunikat w google".

Drugie założenie jest takie, że forum to nie jest miejsce gdzie zawsze można
znaleźć frajera, który wykona moje zadanie. Najczęściej na zaliczenie przedmiotu.
To raczej miejsce, na którym można znaleźć pomoc gdy standardowe metody zawiodą.
No i tak sobie marzę, że najlepiej by było wtłoczyć wszystkim te standardowe
metody do głów. Jeżeli 5% osób z forum poświęca godzinę tygodniowo na
czytanie i odpowiedzi na takie pytania to miesięcznie tracone jest 6676 godzin
pracy ludzi, którzy mają coś w głowach - jednocześnie ci którzy te godziny
zużywają niczego się nie uczą.

A jeżeli chodzi o konkretne rozwiązania to myślę, że odpowiadanie na te posty
jest tak monotonne i powtarzalne, że można zrobić mechanizm, który tej pracy
zaoszczędzi (hej, jesteśmy programistami).
Mógłby to być jakiś prosty system ekspercki zbudowany na podstawie analizy
archiwum forum.
Inny pomysł: mogły by to być przyklejony temat albo tematy z algorytmami dochodzenia do
rozwiązania na tyle ogólne, że rozwiązywały by podstawowe problemy i można by
tylko odpowiadać linkiem do tych tematów.
Jeszcze inny pomysł: większy poziom ustrukturalizowania pisanego posta, na przykład
okienko 1: opis problemu, okienko 2: podjęte przeze mnie kroki,
okienko 3: komunikaty błędów, etc. - być może samo wypełnianie tego nasunęło by
części osób rozwiązanie.

Wiem, że to problem, na przykład jest kilka takich tematów typu "Najpopularniejsze
problemy" ale nie widzę żeby ludzie byli do nich często odsyłani. Moim zdaniem z
powodu słabej organizacji wiedzy i zbyt dużej konkretności poruszanych w nich problemów.
To na razie takie rozmyślania, ale chodzi mi raczej o pomyślenie o tym pod kątem
automatyzacji działań bo i niektórzy userzy w przedszkolu zachowują się jak boty.
Jestem też ciekaw waszych opinii co do moich pomysłów worriedsmiley.gif
Spawnm
W sumie napisanie bota który przeszukuje dodawany właśnie post i jeśli znajdzie w nim podany przez usera warnig ,
automatycznie dopisuje do tematu post z odpowiedzią nie było by trudne ,
zrobić tabelę warning->odp smile.gif
Cysiaczek
Jest jeszcze jeden problem. Wszystko pięknie, jeśli wiemy o co zapytać. Czasami nie da się łatwo zdefiniować problemu na tyle, aby móc efektywnie znaleźć rozwiązanie.
Przykładem niech będą nieśmiertelne register globals. Ktoś opisuje działanie programu sugerujące osobie bardziej doświadczonej, że właśnie z tym jest problem. Niestety, odpowiedź w stylu "Trzeba było poszukać, bo jest 5 wątków niżej temat zatytułowany 'register globals'" zawiera nieuzasadnioną pretensję. Gdyby ktoś wiedział, że odpowiedzialna jest dyrektywa registe_globals, nie pytałby na forum. Oczywiście przykład jest przejaskrawiony, ale poszukajcie sami - przynajmniej 10-20% "głupich" tematów to po prostu brak umiejętności (lub brak możliwości) sformułowania problemu. Tutaj żadna wyszukiwarka nie pomoże. Lista najczęstszych problemów owszem, ale musi być dobra i w miarę aktualna.

Pozdrawiam
Zyx
Potwierdzam - gdy widzę wiele tematów, mi osobiście wydają się banalne. Ale gdy uczę się czegoś zupełnie nowego, zdarza mi się siedzieć po parę godzin nad w sumie prostą rzeczą, bo np. nie znałem jakiegoś terminu i nie mogłem przez to znaleźć potrzebnych informacji, choć osobie otrzaskanej wydałoby się to banałem. Oczywiście jeśli na stronie/forum są jasno wypisane najczęściej powtarzane błędy, nic nie zwalnia nowego użytkownika od ich przejrzenia. Czasu nie zmarnuje, może dowiedzieć się czegoś nowego, a może i znaleźć odpowiedź na swój problem. Oczywiście są też pytana z serii "głupich", tj. "czy da się zrobić XXX" albo "czy istnieje funkcja...", gdzie akurat dokumentacja jest na tyle sensownie podzielona tematycznie, że przy odrobinie chęci i znajomości angielskiego każdy może odnaleźć wszystko, co mu jest potrzebne.

Na pewno da się uczyć nowych technologii bez latania z każdą głupotą na forum i znajdować na podstawie archiwów, Google i różnych artykułów rozwiązania nawet dość złożonych problemów związanych mocno z tym, co piszemy. Jednak wcześniej trzeba umieć się tak uczyć i trzeba umieć szukać, a niestety z tym jest różnie. Inaczej podchodzi do nowych zagadnień osoba, która z niejednego peceta krzem jadła, poznała "n" języków, techniki budowy aplikacji, algorytmy itd., a inaczej osoba, która w ogóle swoją przygodę z programowaniem zaczyna od PHP, a wcześniej jej kontakt z komputerem ograniczał się do instalowania wszystkim w okolicy Windowsów i podpinania do nich myszek. Moim zdaniem lepszy skutek od pisania systemu eksperckiego przyniosłoby poprawienie jakości materiałów, kursów i podręczników tak, by uczyły również zaradności, lecz jest to raczej zadanie niewykonalne.

Nawiasem mówiąc takie "systemy eksperckie" działają przy niektórych bugtrackerach, podpowiadając "podobne" raporty o błędach.
bim2
Narzekacie wszyscy na "pytających". Ja ponarzekam na pomocnych. Często można się spotkać z wątkiem, gdzie jeden user odpowiedział zagadką. Tzn. zobacz to i to, poszukaj o tym i o tym, a znajdziesz odpowiedź, a później ktoś odpisuje z rozwiązaniem problemu (nie ucząc niczego usera) bo chce "pomógł".

Zresztą często odrazu pada odpowiedź (jeśli problem jest banalny) miast podpowiedzi zagadki. To my, ludzie doświadczeni, powinniśmy uczyć innych, a nie ślepo im pomagać.

U kogoś (nie pamiętam u kogo) widziałem w podpisie piękny cytat.
"Daj człowiekowi rybę, a nadal będzie głodny, naucz go łowić, a naje się przez całe życie"

EDIT:
No tak, niezawodny Pan Mike smile.gif
mike
Cytat(bim2 @ 19.02.2009, 19:29:27 ) *
U kogoś (nie pamiętam u kogo) widziałem w podpisie piękny cytat.
Foxx
Zyx zgadzam się, standardowo rozumiany system ekspercki byłby niewiele lepszy niż dobra dokumentacja, tym bardziej, że w programowaniu i tak trzeba poznać większe połacie wiedzy niż tylko ścieżki rozwiązywania konkretnych problemów.
Ale może system ekspercki na metapoziomie, który nie dotykałby żadnych konkretów, nazw funkcji, itp. ?
Postaram się przeanalizować jakąś ilość postów i sprawdzę czy da się je skategoryzować tak, żeby opłacało się w ogóle myśleć o czymś takim.
Cytat
automatycznie dopisuje do tematu post z odpowiedzią nie było by trudne

Spawnm, tak działa wyszukiwarka ale automatyczne wyświetlanie postów, które były pomocne z innych tematów to ciekawy pomysł.
oscar17
Hmm, a może jakiś wizard rozwiązywania błędów, tzn coś w stylu:

Kod
KROK 1.
   Z czym masz problem
   a) PHP
   b) MySQL
   c) Apache
   d) ...

Kod
KROK2. (zależny od wyboru pierwszego - np. PHP)
1. Problemy z uruchomieniem skryptu
2. Problemy ze zmiennym
3. Problemy z pętlami/operacjami warunkowymi

etc.
Ostatnim krokiem byłyby już konkretne problemy lub linki do konkretnych (dobrze opisanych i rozwiązanych) postów.

Trochę by się trzeba pobawić ze skategoryzowaniem tych problemów, ale po każdym rozwiązanym problemie na forum można by to aktualizować...
erix
Nie... Uważam, że byłaby to przesada. Użyszkodnik nie lubi, jak musi się zbytnio wysilać albo nie wie, ile kroków na niego czeka.

Poza tym, piszesz:
Kod
2. Problemy ze zmiennym
3. Problemy z pętlami/operacjami warunkowymi

Uważasz, że te nazwy będzie znał kompletny laik, który po prostu nie mógł wcześniej znaleźć odpowiedniego terminu...? Bez przesady - debilne pytania powinny być wyplenione, ale nie można też pójść za bardzo w drugą stronę.
Foxx
Takie narzędzie musiałoby działać na poziomie objawów raczej niż konkretów. Raczej "dostaję błąd X" niż "problem z połączeniem z bazą danych". Powody wymienił erix ale dodałbym jeszcze to, że mi nie chodziło nigdy o narzędzie, które pozwoli programować ludziom, którzy nie mają podstawowej wiedzy czy robienie jakiegoś kompendium wiedzy, ale raczej o przyspieszenie nabywania pewnych metaumiejętności, które doświadczeni użytkownicy mają, dzięki czemu sami rozwiązują wszystkie syntax errors, etc.
erix
Cytat
czy robienie jakiegoś kompendium wiedzy

Ale to już jest - wszak niektórzy zapominają o phpedia.pl

Ja bym obstawiał za funkcją, którą zaproponowałem w zalinkowanym temacie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.