Kiedy utkniesz, jak szybko należy zastosować przepełnienie stosu? [Zamknięte]

51

Uczę się programowania iOS na kursie iTunes U CS193p i często utknąłem. Sam próbowałem się oderwać, ale może zająć mi wiele godzin, aby dowiedzieć się, co robię źle, czy to z powodu braku metody, czy też niezrozumienia całej koncepcji, takiej jak delegacja.

Martwię się, że mógłbym marnować zbyt dużo czasu i lepiej byłoby przejść do Przepełnienia stosu wkrótce po tym, jak utknę, aby móc przejść dalej.

Czy według ciebie szybkie pytanie o przepełnienie stosu utrudnia proces uczenia się, czy go usprawnia?

MaxGabriel
źródło
45
Warto zauważyć, że poszukiwanie odpowiedzi w SO jest jedną z pierwszych rzeczy, które powinieneś spróbować. Nawet jeśli nie ma odpowiedzi dokładnie odpowiadającej Twojemu pytaniu, prawdopodobnie znajdziesz coś, co da ci pewien wgląd. Ale zadawanie własnych pytań jest czymś, czego nie powinieneś robić, dopóki naprawdę nie spróbujesz samodzielnie odpowiedzieć na to pytanie i nie podejmiesz prawdziwych wysiłków, aby sformułować swoje pytanie w sposób, który wyraźnie wskazuje, co masz, a czego nie już próbowałem.
Dawood ibn Kareem
1
@DavidWallace Nie można zgodzić się więcej. Zbyt wiele osób po prostu pyta bez zastanowienia (pytania niskiej jakości), niektórzy myślą i zadają (lepsze pytania, ale chciałbym, aby więcej osób faktycznie szukało przed zadaniem (mniej (prawie) duplikatów))
Marjan Venema
3
Podobnie jak w przypadku zadawania jakichkolwiek pytań, jeśli najpierw sam szukałeś możliwej odpowiedzi, dowiesz się więcej, gdy zobaczysz prawdziwą odpowiedź: zobaczysz, gdzie zapomniałeś szukać, a następnym razem też będziesz mógł tam szukać. Nie tylko uczysz się odpowiedzi, ale także szukasz odpowiedzi. Jeśli nie pomyślałeś wcześniej o odpowiedzi, po prostu otrzymujesz odpowiedź i idziesz dalej, ale ogólnie mniej się uczysz. Nie poprawiasz siebie.
Konerak,
3
Podejście pragmatyczne: SO najlepiej nadaje się do prostych pytań, więc powiedziałbym, że pytaj prawie od razu (musisz jednak móc sformułować pytanie). Po wpisaniu tytułu zostanie wyświetlona lista najbliższych pytań - upewnij się, że twoje pytanie nie znajduje się na liście, ale nie trzeba wykonywać żadnych dodatkowych wyszukiwań SO.
Grzenio
6
Myślę, że prawdopodobnie należy o to zapytać w Meta SO.
hugomg

Odpowiedzi:

35

Kiedy pracuję z nowymi programistami, zachęcam ich do zadawania pytań po pięciu lub dziesięciu minutach, gdy nie robią postępów.

Ma to dwie zalety: pierwsza polega na tym, że mogą uzyskać pomoc bez zbytniego czasu poświęcanego na gapienie się na problem, ale pytają tylko wtedy, gdy gdzieś się nie dostają. Jeśli się uczą - nawet na czymś, co nie jest ostatecznie odpowiedzią - znacznie chętniej zachowają tę informację.

Po drugie, po upływie tak długiego czasu muszą wyjaśnić problem komuś innemu. To rozwiązuje ogromną część problemów, ponieważ przejście od końca do końca w celu oznacza, że ​​możesz dostrzec to, co przegapiłeś we wcześniejszej pracy.

Ponieważ brzmi to tak, jakbyś robił to sam, spróbuj zwrócić się do wypchanej zabawki, zegara lub ściany i zapytać o problem. Wyjaśnij to tak, jak robisz to osobie i sprawdź, czy to rozwiązuje problem.

Jeśli tak się nie stanie, a ty nie robisz postępów, zapytaj kogoś. Poświęcenie więcej niż pięciu lub dziesięciu minut to strata czasu - chyba że pójdziesz dalej, aby zrobić coś innego, to powróć do problemu ze świeżym umysłem.

Daniel Pittman
źródło
17
Nie ma nic lepszego niż rozmowa z psem o utknięciu. :-)
Marjan Venema
2
A kiedy zdajesz sobie sprawę, co robisz źle, pies będzie jak „ WOW! I nigdy nie pomyślałby o tym!” Pokonał kilka głosów pozytywnych dla wzmocnienia ego. ;-)
CVn
4
+1 Nazywa się to „debugowaniem kaczki” od rozmowy ze swoim zabawkowym kaczuszkiem. Mam lalkę voodoo. Nazywam to debugowaniem voodoo.
Sardathrion
4
Świetna odpowiedź +1. Przez wiele lat „utknąłem” wiele razy i odkryłem, że odpowiedź staje się dla mnie jasna, gdy wyjaśniam ją komuś innemu. Uważam też, że często działa odejście / zrobienie czegoś, aby uzyskać czystą głowę. Nie uciekłbym się do Przepełnienia stosu zbyt szybko, jeśli sam wymyślisz rozwiązanie, NIGDY nie zapomnisz! W dzisiejszych czasach jest wielu programistów, którzy nie żyją w mózgu, którzy nadmiernie polegają na Internecie.
AnthonyBlake,
2
i tak wiele moich pytań odpowiedziało na siebie, gdy tworzyłem pytanie na temat SO. Już samo ułożenie szczegółów twojego pytania ujawnia kilka odpowiedzi
aldrin
22

Mój jedyny dodatek do świetnych odpowiedzi innych:

PODKŁADANIE pytania w interfejsie pytań StackOverflow to świetny sposób, aby upewnić się, że w pełni je przemyślisz. Nie mogę zacząć mówić, ile pytań sam sobie odpowiedziałem, układając je na tyle jasno, aby właściwie zadać. Pytania, które zacząłem i nie przesłałem OGROMNIE, przewyższają te, które faktycznie zadałem.

Więc powiedziałbym, śmiało i pytaj (po przeszukaniu, oczywiście), po prostu nie przywiązuj się do faktycznego klikania „Prześlij”.

Dan Ray
źródło
+1 - Tego nie można przecenić. To kolejny powód, dla którego staranne formułowanie pytań jest tak ważne. (A algorytm automatycznego sugerowania odpowiedzi na pasku bocznym wyświetli jeszcze bardziej odpowiednie pytania).
kmote
@kmote - UWIELBIAM to. Rozwiązało to dla mnie tak wiele problemów.
Dan Ray
1
historia mojego życia .. rozwiązałem tak wiele problemów przed trafieniem poddaj się.
Ayush Goyal,
20

Przepełnienie stosu i każda inna witryna stosu wymiany ma zestaw wskazówek dotyczących zadawania pytań :

  • Odrób pracę domową
  • Być specyficznym
  • Uczyń go istotnym dla innych
  • Bądź na temat
  • Mieć otwarty umysł

„Odrób pracę domową” oznacza, że ​​nie powinieneś zbyt szybko pytać. „Bądź konkretny” oznacza, że ​​rozumiesz dziedzinę swojego problemu na tyle dobrze, aby zwięźle go zarysować. Jeśli nie, obowiązuje „odrób zadanie domowe”. „Zachowaj otwarty umysł” oznacza, że ​​powinieneś być gotowy do poszukiwania rozwiązań, które według ciebie nie byłyby odpowiednie dla twojego problemu.

Więc nie chodzi o pytanie o przepełnienie stosu, ale o to, czy twoje pytania są dobre. Zasadniczo wymagany wysiłek jest sam w sobie doświadczeniem uczenia się. Jeśli zrobisz to dobrze, prawdopodobnie nauczysz się kilku nowych rzeczy, szukając duplikatów. Jeśli nie, wyślij mi ping, mam kilka wolnych głosów. : P

Yannis
źródło
1
Zacząłem korzystać z tej rodziny stron internetowych (StackOverflow itp.) W ciągu ostatnich kilku miesięcy i muszę powiedzieć, że jestem pod ogromnym wrażeniem jednej rzeczy: pisowni i spójnego pisania. Mimo że tylko niewielki odsetek zarejestrowanych członków ma angielski jako swój język ojczysty, praktycznie każdy jest wyjątkowo ostrożny, jak pisze. Myślę, że nie ma innego miejsca w Internecie, w którym ogromna baza użytkowników zachowałaby taką jakość. To dziwne, ale imponujące. PS: Chciałem to powiedzieć przez jakiś czas, po prostu potrzebowałem miejsca, żeby było jakoś tematycznie :).
Radu Murzea
1
@SoboLAN To filozofia wiki. Stale edytujemy posty, nawet w przypadku drobnych błędów ortograficznych. Jako obcokrajowiec mówiący po angielsku, kiedy po raz pierwszy dołączyłem do Stack Exchange, miałem zwyczaj obserwować, jakie zmiany wprowadzali ludzie, ucząc się na błędach innych. To chyba kolejny pozytywny efekt uboczny wymiany stosów. Kto wie, w pewnym momencie mogę nawet nabrać pewności siebie z moim językiem angielskim, aby spróbować odpowiedzi na English Language & Usage Stack Exchange . : P
yannis
3

Osobiście, kiedy zaczynałem programować, spędziłem dużo czasu próbując to rozgryźć. Mógłbym spędzać godziny próbując coś naprawić. Nie uważam tych godzin za nieproduktywne, w tych godzinach nauczyłem się, jak szukać rzeczy w Internecie i naprawdę zyskałem wgląd w działanie mojego języka programowania. Więc myślę, że zbyt szybkie pytanie o SO pozbawia cię uczenia się. Wejście w programowanie zajmuje bardzo dużo czasu.

Następnie pojawia się pytanie, jak szybko zapytać, powiedziałbym, że spędzenie kilku godzin na konkretnym problemie nie jest długie (zauważ, że pochodzę ze środowisk akademickich, być może w środowiskach komercyjnych jest to mniej akceptowane).

A kiedy zadajesz pytanie dotyczące SO, poświęć czas na pytanie:

  • Jeśli masz błąd, opublikuj dokładny tekst błędu. Opublikuj także kod prowadzący do błędu, najlepiej samodzielny przykład, który można uruchomić na dowolnym komputerze.
  • Pokaż, co już próbowałeś.
  • Wymień wersje używanego oprogramowania: wersje kompilatora, wersja Pythona.

To tylko kilka punktów. Inwestując czas w pytanie, które szanujesz ludzi na SO, wykorzystujesz ich czas za darmo. Co ważniejsze, układasz swój problem. To może już rozwiązać Twój problem :).

Tylko moje 2 ct ...

Paul Hiemstra
źródło
1

Uważam, że ważną rzeczą jest tutaj, aby naprawdę zrozumieć, na czym utknąłeś i spróbować dotrzeć do głównego problemu. Po tym, jak naprawdę zrootujesz się do prawdziwego problemu, użycie Przepełnienia stosu jest jedną z pierwszych rzeczy, które robię.

Ale to nie jest pytanie.

Przeszukuje wszystkie świetne odpowiedzi. Szanse są tym, że masz problem, który miał teraz ktoś inny, który już zadał twoje pytanie. Jeśli czujesz się zmuszony do korzystania z funkcji Przepełnienie stosu, pamiętaj, że nie jest to tylko strona, na której możesz zadać pytanie, kiedy jesteś zakłopotany. Jest to również repozytorium naprawdę świetnych informacji na temat programowania komputerów; użyj funkcji wyszukiwania.

Jeśli przeszukałeś kilka różnych haseł / słów kluczowych i nadal masz zero, odrabiałeś pracę domową i masz próbki kodu, które możesz pochwalić i jesteś pewien, że twoje pytanie nie jest tak naprawdę duplikatem , to na pewno zapytaj twoje pytanie na temat przepełnienia stosu. To jest strona, którą ostatnio sprawdziłem.

Charles Sprayberry
źródło
1

Jest to całkowicie subiektywne, ale oto moje podstawowe zasady użytkowania.

1) Czy mój dom się pali? Oczywiście nie dosłownie, ale czy jest to problem, który wymaga nie tylko natychmiastowego rozwiązania, ale także rozwiązania awaryjnego. Jeśli tak, zrób sobie z tego pęknięcie, szybko zawieść, uzyskaj najlepszą możliwą pomoc.

2) Czy to coś, co mogę zbadać? Jeśli jest to coś, w czym mam czas i można je zbadać, pójdę tą drogą, a to obejmuje SO jako darmowy zasób. SO jest świetne, podobnie jak Wiki, podobnie jak pozostałe dziesiątki zasobów.
Czytaj dużo, pomaga ci zrozumieć, kiedy istnieją różne podejścia do problemu, ale najpierw poświęć czas na sprawdzenie, czy twoja wiedza może zostać ponownie zastosowana do problemu, a następnie zbudowałeś sobie nowe narzędzie mentalne.

3) Czy jest to coś, co wykracza poza moje umiejętności / jest tak niejasne, że prawdopodobnie 100 osób to widziało? To się zdarza i zdarza się często. Zasadniczo spróbuję badań przez godzinę lub dwie, a następnie udam się tutaj lub do innych zasobów.

Wiem, że bardziej szlachetnie jest siedzieć, prowadzić badania i spędzać czas, ale często mamy ograniczenia czasowe i korzystasz z każdego dostępnego zasobu, nawet jeśli wydaje ci się, że oszukujesz system.

Nicholas Smith
źródło
0

„Jak szybko” z natury będzie subiektywne. Wszyscy będą mieli nieco inne zdanie.

Jeśli nie możesz znaleźć przyczyny problemu w ciągu około 5 minut od zapoznania się z rzeczywistym kodem, wybrałbym go przynajmniej Google. Jeśli dobre wyszukiwanie nie ma odpowiedzi, zacznę pisać twoje pytanie na SO.

Pamiętaj, że nie można w rzeczywistości zamieszczać tego pytania; zdarzały się chwile, gdy pytanie zadawano słowami, rozwiązanie się przedstawiało, a ja nie musiałem wam go przedstawiać.

KeithS
źródło
0

Możesz napisać swoje pytanie wcześniej, ale nie powinieneś go zamieszczać, dopóki nie zbadasz źródła problemu. Napisz rzeczy, które wyeliminowałeś i jak je wyeliminowałeś. Powinieneś również sprawdzić inne podobne pytania, a jeśli naprawdę chcesz opublikować swoje pytanie, wyjaśnij, dlaczego to nie jest to samo pytanie.

Jeśli zrobisz to poprawnie, przekonasz się, że wiele razy rozwiążesz swój problem.

Marcin
źródło