Widzę, że są pewne osoby, które nie rozumieją mojego punktu widzenia odnośnie podawania na tacy rozwiązań. Postanawiam wyjaśnić to w jednym poście.
http://forum.pasja-informatyki.pl/127125/wspolrzedne-podzial-bloki-obliczyc-bloku-majac-dyspozycji-tylko-wspolrzedne-miasta#c127208
W tym temacie Patrycjerz miał rację - pomyliłem się, ponieważ punkt był o "proszeniu o gotowca" a nie dawaniu gotowca. W regulaminie jest mowa wyłącznie o pierwszym i tam zrobiłem błąd. Chciałem na wstępie sprostować.
Teraz chciałbym przejść do sedna. Wiecie że jestem jednym z największych przeciwników gotowców wszelkiej maści na forum. Nie bierze się to znikąd i ma swoje uzasadnienie - w mojej reprezentacji rzeczywistości.
Zamiast dać rybę, lepiej dać wędkę
Powtarzam te słowa za każdym razem niczym mantrę i robię to czasem humorystycznie, czasem poważnie, a czasami ze zbyt dużymi nerwami. Słowa te są na pewno od czasów tworzenia Biblii znane każdemu wierzącemu (niewierzącym również). Nie głoszę czegoś, co jest nieznane i wymyślone w moim umyśle. Skoro jest to tak znana prawda od wieluset lat to musi być w niej chociażby cząstka czagoś dotykającego sedna problemu.
Niektórzy chyba w dzisiejszych czasach utracili pewną zdolność analizowania chociażby krótkiego zdania (o czym świadczą coroczne wyniki matur i systematyczne obniżanie jakości oraz wedle zasady promowanej przez MEN "równanie w dół" aby każdy mógł mieć maturę).
Skoro o szkole jest mowa to już mam pierwszy przykład, który wskazuje skalę tego, o czym mówię. W klasie jest jedna osoba, która jest sumienna, odrabia swoje prace domowe, systematycznie uzupełnia notatki i dobrze się uczy. Zachowaniem uczniów, którzy czują się "bardziej zajęci" innymi sprawami - pasją, grami, egzystowaniem - najczęsciej jest proste "daj spisać". Osobiście nie spotkałem się jeszcze z "wytłumacz mi to i sprawdź, czy dobrze robię". Możecie mi wmawiać, ale nie uwierzę, że taka osoba która żyła ze spisywania od sumienniejszych od siebie osiągnęła w życiu sukces miary Billa Gates'a, Steva Jobsa, Henrego Forda, Bella, Tesli, Newtona, Einsteina czy chociażby ludzi, którzy dziś są dyrektorami firemek firm i korporacji, Wszystkie te osoby mają pewne cechy, które doprowadzają je do takiego stanu rzeczy. Wyobrażasz sobie szefa firmy, który prosi innego szefa o zrobienie czegoś za niego? Wyobrażasz sobie, żeby Newton prosił kogoś o rozwiązanie równań różniczkowych (których ówcześnie nie było, więc nazwał je fluksjami).
Takie zachowanie widać również w Internecie - ludzie przychodzą tu, chcą jak najszybciej otrzymać odpowiedź (dlatego wybierają fora wg idoli, ilości użytkowników i bez udziwnień z regulaminem). Nikomu tego nie bronię. Ale jestem przeciwnikiem zachowania na wzór: "Hej nie działa mi cout w programie, napiszcie mi kod obliczania równań kwadratowych". Takie zachowanie dotyka sedna - człowiek piszący takie pytanie przekazuje kilka informacji.
- Wie, czym jest programowanie
- wie, że można za jego pomocą rozwiązywać problemy
- napisał niedziałającą instrukcję echo
- jego celem jest napisanie programu do rozwiązywania układów równań
- nie zrobił tego
- nie ma informacji o próbach, ile trwały, jak wyglądały, w czym się program zawiesza i tak dalej
- wymaga od użytkowników wklejenia działającego kodu
Może znajdzie się coś jeszcze, jednak i tak już wystarczająco dużo wiadomo. Tak sformułowane pytanie jest przykładem tego, w jaki sposób świat dziś funkcjonuje. Jest problem, znajdę kogoś kto umie go rozwiązać. Gdyby patrzeć nieco w bok - w Norwegii rowery leżą przy ulicach w rowach bo dynamo się zepsuło, bo linka hamulcowa pusciła. Znam przypadek, w którym kobiecie telewizor spadł z półki i obudowa pękła (pilotem nie można przełączać kanałów) i oddała 50 cali chłopakowi, który podłączył pilot z anteną przez usb. Można też sterować przez sieć - jak kto woli. W końcu to też są rozwiązania problemów chociaż to jest zupełnie inny poziom, na oddzielną dyskusję. Ot taka dygresja.
Pytanie wyglądałoby zupełnie inaczej, gdyby użytkownik opisał swój problem dokładnie, czyli:
- napisałby jakiego języka dotyczy
- w której linii debugger/konsola pokazuje błąd
- podałby tę linię z najbliższymi do niej.
- opisał, w jaki sposób chciał to rozwiązać
- opisał, w jaki sposób chciał naprawić błąd
- opisał, że szukał w tym tym i tamtym miejscu zanim napisał
- poinformował o użyciu wyszukiwarki
Nie są to trudne czynności do wykonania a znacząco wpływają na jakość reakcji i odpowiedzi jaką otrzyma. Takiej osobie z miejsca chce się pomóc, tym bardziej jeśli problem jest ciekawy. Innym wątkiem sa notorycznie powtarzane pytania i nieumiejętność wyszukiwania informacji.
Ja piętnuję takie pytania - jeśli ktoś ma problem, to właśnie on powinien się postarać żeby ludzie chcieli mu pomóc. Powinien tak postawić pytanie, aby z miejsca było wiadomo, że nie wygladało to tak, że zobaczył problem w konsoli i w sekunde powstało pytanie na forum w takiej formie. Nie tędy droga i teraz czas na drugą stronę medalu.
Osoba, która odpowie "gotowcem" na takie pytanie, z mojego punktu widzenia bardzo źle życzy autorowi pytania. Odpowiedzenie gotowym kodem bez wyjaśnienia rzeczy w nim zawartych i uznanie, że "w kodzie wszystko jest, resztę się sam domyśli" jest błędnie postawioną tezą. Chociażby dlatego, że osoba taka po prostu wklei ten kod, zobaczy, że działa i zacznie pisać inny program zbyt wiele nie zastanawiając się nad otrzymanym rozwiązaniem ponieważ w jego głowie jest kolejny pomysł, może kolejny problem. Jeszcze inną sprawą jest to, że nie jesteście jedyni na forum, a użytkowników przybywa. Wklepanie działającego kodu bez wyjaśnienia każdego znaku w nim występującego powoduje, że kolejne osoby szukając rozwiązania danego problemu (to się chyba nigdy nie dzieje) dostaną taką odpowiedź i również wklepią bez głębszego rozumowania.
Mówiąc językiem Mirosława - w takiej pomocy jest tylko zastosowanie i ewentualnie wiedza. Brak jest analizy, syntezy i zrozumienia. I to w tym polega problem. Stąd przecież pojawiło się "pokolenie stackoverflow". A juniorów w pracy nazywa się koparkami, bo dokopią się do najgłębszych zasobów SO zamiast pomyśleć i samemu coś stworzyć. Ja rozumiem, że dla takich gagatków jest również miejsce na świecie. Jednak wizja tego świata, z rosnącym i to prężnie światkiem tego pokroju jest przerażająca.
Dorion300 napisał, że uczył się właśnie na gotowcach i zrozumiał jak piszą inni. Ja się zastanawiam (w sumie to też nie wiem na jakim poziomie jesteś), czy wzorce projektowe, wzorce architektoniczne są gotowcem? Ale zaraz, wcale nie muszę jakoś głęboko się zastanawiać, Alexander w publikacji o wzorcach w architekturze zdefiniował o co mu chodziło z tymi wzorcami. Tak samo banda czworga jak jeden mąż definiują w świecie programowania to, czym są wzorce. Są to szablony możliwe do wykorzystania w momencie zetknięcia się z pewnym problemem. Nie można ich uznawać za gotowe rozwiązanie problemu, ponieważ każdy problem posiada swoją naturę, specyfikę i złożoność. Jednak wzorce pomagają w pewien sposób opanować tą złożoność a zasady programowania ograniczają się do podpowiadania w jaki sposób najlepiej zmodyfikować swój kod, aby stał się czytelniejszy dla innych (i siebie, bo 60% czasu pracy to czytanie własnego kodu). Jeżeli takie coś zdefiniowałeś jako "gotowiec" na którym się uczyłeś - to moim zdaniem nie zrozumiałeś mojej wizji gotowców. Stąd również powstanie tego postu.
Stąd też utworzyłem temat o zasadach pomocy z zadaniami ze spoja. Programowanie to świetna zabawa, i powinno się każdy kod traktować tak, jak ten który będzie "dla spoja". Samodzielne rozwiązanie problemu daje najwięcej satysfakcji i zabiera najwięcej czasu. Otrzymanie gotowca zabiera najmniej czasu i nie daje żadnej satysfakcji. To jest jak granie na kodach, cheatowanie w programowaniu. Nikt nie lubi cheaterów - no może generalizuję, ale włącz mody gdy grasz zespołowo w csa ;).
Odpowiadajacy powinien się dwa razy zastanowić, zanim wyśle gotowy kod bez wyjaśnień - w przyszłości będzie widziany. Ktoś będzie czytać ten kod. Jeśli będzie on posiadać dziwne zachowania a nie będą one wyjaśnione w poście to nie powinien być to post, z którego jest się dumnym. Niektórzy młodzi tu wstawiali kod całego tictactoe w odpowiedzi na proste pytanie odnośnie logiki działania checkera. Taka osoba myśli, że jest pro, bo rozwiązała cały problem samodzielnie i wkleiła taki kod pod jakimkolwiek pytaniem odnośnie tej gry. Dostanie prawdopodobnie "naj".
Nie o to w tym wszystkim chodzi. Jest postawiona teza, że forum ma pomagać wszystkim, którzy maja problemy związane z programowaniem. Jednak widzę, że niektórzy jako pomoc widzą również jej patologiczne skrzywienie.
Każdy tu chętnie pomaga, jednak dobrze by było gdyby ta pomoc była jednoznacznie określona. Nikt nikogo nie wygoni za to, że czegoś nie rozumie czy nie potrafi zrobić. Najlepiej gdy ta osoba po prostu pokaże, że coś zrobiła żeby samodzielnie spróbować rozwiązać ten problem. A rozwiązanie tego problemu przez odpowiadającego niepowinno być gotowym rozwiązaniem do przeklepania, tylko w taki sposób, jak chociażby Comandeer to robi. Namęczy się, nawypisuje, w razie wątpliwości przejrzy dokumentację, prześle linki rozszerzające wiedzę. To jest rozwiązanie problemu. Zadający pytanie powinien wtedy przejrzeć te wszystkie linki, oczytać się na dany temat i byłoby po problemie. Takie rozwiązanie problemu powoduje że wszyscy zyskują. Comandeer utrwala swoją wiedzę, przypomina sobie rzeczy o których nie pamiętał, może czegoś nowego się uczy lub odkrywa że dokumentacja została znowu zmieniona. Zadający pytanie dostaje gotowy pakiet rzeczy do przejrzenia, uczy się nowych rzeczy, utrwala je i próbuje zastosować do rozwiązania problemu. Osoby zaglądające później do wątku robią to samo i również są zadowoleni z rozwiązania problemu.
Ktoś inny odpowiada gotowym kodem, który działa - ale opisuje każdą linię, opisuje algorytm rozwiązania problemu, opisuje na czym polegał problem. Takie rozwiązanie też powoduje, że każdy jest w pozycji wygranego.
Moim zdaniem każda inna odpowiedź jest podaniem rybki - nie daje się możliwości przejrzenia wartościowych źródeł, przeanalizowania kodu innych osób i ich problemów. Nie wiadomo na przyszłość gdzie szukać rozwiązania (poza forum). Taki obrazek nie jest przyjemny.
Zapraszam do dyskusji - chociaż w sumie wszystko co chciałem to powiedziałem.