Wszyscy mówią to samo: „prawdziwy programista wie, jak radzić sobie z prawdziwymi problemami”. Ale zapominają, jak nauczyli się tej umiejętności i gdzie: nie uczy się jej w szkołach.
Co mogę zrobić, aby poprawić swoją zdolność do rozwiązywania złożonych problemów programistycznych? Jakie strategie Ci się przydały? Czy są jakieś szczególne obszary, na których powinienem się skupić, takie jak algorytmy lub wzorce projektowe?
Odpowiedzi:
Kilka technik, które mogą działać lub nie:
źródło
Stosuj myślenie w trybie R lub L w zależności od potrzeb
Tryb R to kreatywne, niewerbalne podejście, które powszechnie kojarzymy z podświadomością. Tryb L to liniowe, logiczne, werbalne podejście związane z twoim „głosem wewnętrznym”.
Jeśli problem wydaje się nierozwiązywalny, to prawdopodobnie dlatego, że próbujesz go rozwiązać, używając niewłaściwego trybu myślenia. Dla programistów domyślnym trybem myślenia jest tryb L, więc może być czasowe wyłączenie go i uzyskanie dostępu do trybu R.
Jak uzyskać dostęp do myślenia w trybie R.
Istnieje wiele sposobów, ale być może spróbuj metody Poincare (nazwanej na cześć słynnego matematyka).
Zapisz wszystko, co wiesz o problemie. Natychmiast rozwiąż wszystkie jego łatwe aspekty (jeśli istnieją). Wybierz jeden element z listy „trudnych problemów”, a następnie wybierz się na spacer, na którym nie będziesz przeszkadzany ani rozpraszany.
Nie próbuj analizować problemu podczas spaceru, po prostu pozwól umysłowi wędrować i obserwuj wszelkie interesujące obrazy lub odczucia, które mogą się wiązać z problemem. Niech się łączą. Jeśli pojawi się natchnienie, natychmiast przerwij spacer i wróć, aby zapisać zdobytą wiedzę.
Płucz i powtarzaj, aż wszystkie problemy będą wnikliwe. Następnie zacznij odkrywać spostrzeżenia.
Rekomendacja książki
Również czytanie Pragmatycznego myślenia i uczenia się może pomóc ci stać się lepszym rozwiązaniem problemu. (Wydaje mi się, że ostatnio często odwołuje się do tej książki ...)
źródło
Zapytaj kogoś innego...
Niepoważnie. Twoim największym zasobem może być osoba siedząca obok ciebie. Nawet nie pytaj ich o odpowiedź na problem, poproś, aby usiedli obok ciebie i pozwolili ci wyjaśnić problem.
Często rozwiążesz to podczas werbalizacji.
Czasami druga osoba zadaje pytanie lub wskazuje szczegół, który odblokuje mentalną bramę zalewową.
W końcu nauczysz się werbalizować rzeczy w głowie bez użycia marionetki i szybciej dostrzegasz kluczowe szczegóły problemu.
A jeśli wszystko inne zawiedzie, mogą być w stanie pokazać Ci technikę, której nie pomyślałbyś.
źródło
Właściwie moja krótka odpowiedź brzmi „rozwiązywanie większej liczby problemów”. Ale chodzi o to: naprawdę skoncentruj się na problemach i nie poddawaj się. Nie proś o pomoc w StackOverflow lub czymkolwiek. (Czytanie StackOverflow jest oczywiście w porządku!) Staraj się, aż znajdziesz prawie działające rozwiązanie, a następnie prawie osiągniesz swój cel. I kontynuuj, aż znajdziesz satysfakcjonujące rozwiązanie.
Dla mnie rozwiązywanie problemów to dwie rzeczy:
Punkt 2 jest moim zdaniem naprawdę kluczowy, ponieważ zmusza cię do zmiany myślenia, im dłużej utkniesz z problemem. Pozwala także spędzać więcej czasu na rozwiązywaniu problemów, co pozwala jeszcze bardziej doskonalić swoje umiejętności. ;-)
Nawiasem mówiąc, polecam przeczytać Edwarda de Bono. Chociaż moje umiejętności rozwiązywania problemów nabyłem głównie studiując fizykę, jego pisanie jest naprawdę interesujące.
Mój zestaw narzędzi do rozwiązywania problemów jest następujący:
Pamiętaj, że większość z tych narzędzi można stosować rekurencyjnie.
Mój algorytm jest taki:
Krok 1. to trudna decyzja, ale im więcej ćwiczysz, tym lepiej.
Aha i prawie zapomniałem najważniejszego składnika:
Pomyśl pozytywnie o całym procesie. Nie myśl „Mam nadzieję, że XYZ rozwiąże problem”. Pomyśl raczej: „Jeśli XYZ nie działa, to wiem, że YZX nie może być źródłem problemu i sprawdzę, czy ZYX działa”. Rozwiązywanie problemów może być czasem zabawne, szczególnie jeśli proces znajdowania problemu zakończy się eleganckim i pouczającym doświadczeniem.
źródło
Zacznij pracę nad umiejętnością identyfikowania problemów. Czasami musisz rozpoznać problem, zanim go rozwiążesz. W szkole wymagają zbyt wielu odpowiedzi i niewystarczającej liczby pytań od uczniów.
Znajdź ludzi wokół ciebie, którzy rozwiązują problemy i zapytaj ich, jak sobie z tym radzą.
Przygotuj się na błąd. Nie poprawisz się, jeśli zatrzymasz je wszystkie dla siebie i nie przyda ci się żaden użytek.
źródło
Główną zaletą edukacji informatycznej dla inżynierów oprogramowania jest możliwość tworzenia i rozumienia abstrakcji. Abstrakcje służą do enkapsulacji powszechnej funkcjonalności, takiej jak metody klasy String, w ciasne pakiety wielokrotnego użytku, które pozwalają nam skupić się na większym problemie.
Naucz się rozpoznawać i tworzyć abstrakcje :
Ale co najważniejsze, abstrakcje uczą nas, jak podzielić problem na mniejsze, łatwiejsze do opanowania części . W połączeniu ze środowiskiem naukowym połączenie tych umiejętności może stworzyć inżyniera zdolnego do przecinania hałasu i dotarcia do sedna problemu.
Naucz się rozwiązywać problemy za pomocą metody naukowej :
Podczas rozwiązywania problemów z aplikacją produkcyjną, w której występuje trudny do znalezienia problem, czasami pomaga ona w dalszym stopniu przerwać aplikację (w środowisku nieprodukcyjnym) w celu wyeliminowania kilku zmiennych w celu wyizolowania i wyeliminowania jednej.
Podsumowując, metoda naukowa, wyciągnięta z wzięcia wszystkich przedmiotów fizyki i innych przedmiotów ścisłych wymaganych do uzyskania stopnia naukowego w dziedzinie informatyki, pomaga rozwiązać te problemy, tak jakbyśmy testowali placebo i nową próbę narkotykową na szeregu ochotników. Podobnie jak naukowcy, którzy czasami muszą coś pogorszyć, aby to poprawić, czasami my, inżynierowie, musimy zrobić to samo.
Myślenie naukowe w ten sposób może - generalnie - wynikać wyłącznie z doświadczenia w środowisku naukowym. Czasami rozwiązania problemu nie można postrzegać jako ścieżki liniowej od A do B.
Krótko mówiąc, studiuj informatykę, badaj inne dziedziny nauki, ucz się programowania funkcjonalnego. Pomogą ci myśleć jak naukowiec i myśleć nieszablonowo.
źródło
Wszystko zależy od tego, jakie problemy chcesz rozwiązać, ale nauka logicznego myślenia, jeśli już tego nie robisz, jest dobra.
Podsumowując, będziesz mnie nienawidzić za to, że to mówię, ale praktyka czyni mistrza. Nie wyciągnięto mnie z łona matki, wiedząc, jak być dobrym rozwiązaniem problemu i nikt inny tego nie zrobił. Musisz ćwiczyć i uczyć się, jak robić rzeczy samodzielnie. Jeśli nadal jesteś w szkole i nie masz klas programistycznych / informatycznych, matematyka i nauki ścisłe są również bardzo dobre dla wspierania rozwoju tych umiejętności.
źródło
Myślę, że szukasz heurystyki informatycznej.
Jeśli chodzi o to, co 99% z nas robi w okopach, naprawdę nie ma nic nowego pod słońcem. Możesz więc zobaczyć problem i rozpoznać go jako problem DP, lub inny jako problem, który mógłby skorzystać z zapamiętywania itp.
Jak zdobyć tę wiedzę? Odpowiedni stopień CS to dobre miejsce do rozpoczęcia ... Nie inżynierii oprogramowania lub systemów informatycznych, ale rzeczy, które większość studentów narzeka na „niepraktyczność”.
Możesz to zrobić samodzielnie, ale prawdopodobnie będzie to trudniejsze. Zacznę od tych dwóch kursów:
Wprowadzenie do algorytmów
Świetne pomysły w teorii CS
źródło
Moje odpowiedzi odnoszą się konkretnie do kodowania, ale można je zastosować do wszystkiego.
źródło
Jeśli chodzi o praktykę, mogę ci powiedzieć, co robię. Bardziej interesuję się matematyką stosowaną niż programowaniem, ale matematyka stosowana w zastosowaniach komputerowych jest swego rodzaju programowaniem. Widzę problemy i rozwiązania. Przed (lub czasem po, jeśli powiedzmy, że moja praca wymaga szybkiego rozwiązania), łącząc się ze znanym rozwiązaniem - lub istniejącą biblioteką kodów, lubię zadawać sobie pytanie: „Gdyby to był dziewiczy problem - nie można go znaleźć rozwiązanie w puszce, jak byś postępował? ” Jeśli odpowiedź jest dość prosta, rozważ napisanie rozwiązania (analityczne lub program komputerowy do rozwiązania). Zignoruj skomplikowane przypadki końcowe - jesteś zainteresowany ekscytującymi podejściami i algorytmami, nie wymyślając na nowo istniejącej biblioteki. Jeśli rozwiązanie będzie wymagało zbyt dużego wysiłku, nie programuj pełnego rozwiązania, ale przynajmniej pomyśl o rodzajach struktur danych i metodach, których chciałbyś użyć. Pomyśl także o metodach alternatywnych.
źródło
Jest na to świetne pytanie SO .
Moja odpowiedź brzmiała:
źródło
Grać w szachy
Gra w szachy jest doskonałym trenerem do rozwiązywania problemów programistycznych. Warstwy problemów i drzewa logiczne są bardzo ładnie powiązane. Pomaga również myśleć z wyprzedzeniem i planować przed pójściem w dół optymalnej ścieżki i marnowaniem czasu.
Szachy wymagają również równowagi między lewym i prawym „trybem myślenia”. Jeśli staniesz się zbyt analityczny, możesz zaplątać się w próbie obliczenia wszystkiego, co jest niemożliwe. Jednak każdą twórczą inspirację należy sprawdzić za pomocą obliczeń, aby upewnić się, że pasuje ona do konkretnej rzeczywistości. Trudne problemy są właśnie takie.
Szachy pokazują, w jaki sposób nauka i praktyka prowadzą do stałej poprawy w bardzo liniowy sposób. Dotyczy to również rozwiązywania problemów z programem.
Gra w szachy może również pomóc ci dobrze zrozumieć, ile trzeba się nauczyć. Mimo że programujesz (lub grasz w szachy) od 10 lat, nie jesteś jeszcze arcymistrzem.
źródło
Ostatnio rozwiązałem problemy w Project Euler . Problemy mają różną trudność. Rozwiązania zwykle nie wymagają dużej ilości kodu, ale trzeba wziąć pod uwagę wiele czynników, takich jak czas działania algorytmu. Możesz użyć dowolnego języka, który Ci się podoba, po prostu wpisując odpowiedź. Jest dobry opis optymalnego rozwiązania wielu problemów i dużo dyskusji na temat każdego problemu. Spróbuj rozwiązać jeden problem każdego dnia, a zdziwisz się, jak bardzo poprawia się rozwiązywanie problemów i analiza. Aby uzyskać dodatkowe uznanie, spróbuj rozwiązać ten sam problem w wielu językach, takich jak język proceduralny (może C ++), język skryptowy (jak python) i język funkcjonalny (jak F #).
źródło
Pochodzę ze środowiska naukowego, więc kiedy patrzę na problem, zwykle używam taktyk z metody naukowej . Szczególnie lubię konfigurować „eksperymenty” oparte na hipotezach i używać „kontroli”, więc zbuduję coś, a następnie zmienię / dodam tylko jedną rzecz na ten temat i zobaczę, jaki jest wynik tej jednej zmiany / dodania i jeśli „ Nie otrzymuję rezultatu, którego potrzebuję, przełączę go z powrotem i zmienię coś innego. Działa to dobrze w przypadku rozwiązywania problemów / debugowania kodu. Czasami dostajesz odpowiedź, której szukasz, ale zawsze uczysz się czegoś nowego, nawet jeśli ci się nie uda. Lubię też uczyć się poprzez redukcjonizm- branie czegoś, co już istnieje (zawsze dobrze jest zacząć od czegoś, czego możesz nie rozumieć, ale wiesz, że działa) i wygląda dla mnie na skomplikowane i sprawdzanie, czy mogę go rozbić na części składowe i dowiedzieć się, jak działają najpierw. Czasem mojemu mózgowi łatwiej jest uczyć się w ten sposób, zamiast podejść całościowo do problemu, i mogę wykorzystać tę wiedzę do zbudowania innych podobnych złożonych rzeczy. Polecam również czytanie książek na temat logiki i rozumowania, wybierając dzieła zarówno od klasycznych, jak i współczesnych myślicieli (zacznij od Arystotelesa i rozwijaj swoją drogę). Mogą dać ci podstawowe podstawy logiki, których możesz użyć, aby pomóc w rozwiązywaniu problemów na komputerach. I oczywiście, jeśli nie możesz rozwiązać problemu i pracujesz nad nim przez jakiś czas, zrób sobie przerwę mózgową. Zastanawianie się nad konkretnym aspektem problemu jest czasem szkodliwe. Każdy potrzebuje przerw :)
źródło
Najtrudniejszą częścią rozwiązywania problemów jest „Percepcyjne zwężenie”.
Wybierasz coś, co wydaje się być problemem, i uporczywie podążasz za nim, dopóki nie jesteś wyczerpany i nie robisz postępów.
Sposobem na to jest upewnienie się - absolutnie pewne - że naprawdę rozumiesz problem. „Rozwiązywanie właściwego problemu” jest najważniejszą częścią rozwiązywania problemów.
Czasami nazywają to „nieszablonowym myśleniem”. „Pudełko” to wąski punkt widzenia, który może nie obejmować prawdziwego, podstawowego problemu. Myślenie nieszablonowe polega na szukaniu właściwego problemu do rozwiązania.
Istnieje wiele książek na temat strategii unikania zwężenia, które wiąże się z przedwczesnym skupieniem się na niewłaściwym problemie.
Główną sztuczką jest określenie, jaki powinien być prawdziwy wynik. Następnie dowiedz się, jakie bloki blokują pożądany wynik.
źródło
Szczerze mówiąc, myślę, że każdy jest inny, więc każda mapa drogowa do lepszego rozwiązania problemu jest inna. Możesz uczyć się na doświadczeniach innych ludzi, ale ostatecznie musisz wykreować własną ścieżkę. Zasadniczo uczy się czegoś „na twardo”, ale w tym przypadku jest skuteczne.
Oto jak zacząłem ulepszać moje rozwiązywanie problemów, chociaż nie jestem jeszcze świetnym narzędziem do rozwiązywania problemów, tylko lepszy niż w zeszłym roku. Otrzymałem nowy projekt w pracy, który polegał na rozszerzeniu oprogramowania do śledzenia czasu open source, dodając trzy nowe raporty do zarządzania. To oprogramowanie zostało napisane w języku, którego nigdy nie używałem, i było słabo udokumentowane i bardzo zaciemnione. Wykopałem i przeprowadziłem mnóstwo badań, a potem po prostu pracowałem nad raportami krok po kroku, kiedy miałem podstawową funkcjonalność, ulepszyłem je, a potem dodałem więcej funkcji.
Innymi słowy, polecam znaleźć jakiś projekt prawdziwego świata do zlewu lub pływania. Jeśli jesteś obecnie zatrudniony jako programista, znajdź projekt lub poproś o niego szefa. Jeśli ten scenariusz nie jest możliwy, znajdź go poza pracą, być może na podstawie umowy o pracę / pracę na własny rachunek lub coś takiego. Rozwiązuję problemy bardzo dobrze i bardzo szybko, kiedy muszę i zachowuję tę wiedzę ze względu na intensywność projektu. Jeśli to nie zadziała, zrób to, co sugerują wszyscy inni w tym wątku :).
źródło
Odpowiedź na to pytanie zawiera się w różnych rozwiązaniach. Zawsze istnieje więcej niż jedno rozwiązanie (np. Sortowanie można wykonać na różne sposoby, np. Sortowanie w bąbelkach, Sortowanie według selekcji itp.), Po prostu musisz wybrać sposób, w jaki możesz to zrobić (Sortowanie) efektywnie. Spróbuj innym razem następnym razem i tak dalej ..... I książki do rozwiązywania problemów ..... Brak Nie możesz nauczyć się umiejętności rozwiązywania problemów z książek, więcej kodu wykonasz, więcej zdobędziesz wiedzy. Powodzenia
źródło
Programiście łatwo jest mentalnie zaatakować problem, wizualizując sposób rozwiązania problemu za pomocą ulubionego języka programowania. Podobnie jak klasyczny stolarz, który widzi wszystkie problemy jako gwoździe, gdy jego ulubionym narzędziem jest młotek.
Myślę, że najlepsze ćwiczenia w rozwiązywaniu problemów pojawiają się, gdy osiągniesz poziom praktyczny i po prostu pomyśl w kategoriach „tego potrzebowałbym, aby rozwiązać go w optymalny sposób”. W niektórych przypadkach może być konieczne nauczenie się (wielu) nowych rzeczy, aby w ogóle zastosować rozwiązanie, ale kluczową kwestią jest to, że twoja umiejętność wypracowania rozwiązania nie powinna ograniczać się do twoich historycznych i istniejących technik.
Starym praktycznym przykładem dla mnie jest to, że nauczyłem się, jak wdrażać wydajne wielozadaniowość kooperacyjną, kiedy zdałem sobie sprawę, że mój problem nie wymagał już wątków zapobiegawczych, mimo że zwykle szedłem prosto do mojej strefy komfortu, niszcząc wszystkie te muteksy (że ostatecznie zawsze wydaje się, że w pewnym momencie przestaje się czuć komfortowo ...).
źródło
Podczas opracowywania aplikacji wiele problemów, z którymi mamy do czynienia, to albo nasz własny wynalazek, albo wynalazek idioty, od którego odziedziczyliśmy tę zepsutą bazę kodu. Rozwiązanie problemu najczęściej sprowadza się do znalezienia źródła . Często, gdy dowiadujemy się, gdzie to się dzieje, do rozwiązania tego problemu potrzebne są jedynie kompetencje .
Do tego końca:
Cały trening mózgu na świecie jest bezużyteczny bez informacji do wykorzystania przez mózg. Aby rozwiązać problem, musisz wiedzieć, jakie są możliwości ! Nawet wtedy praca z dobrą informacją jest o wiele szybsza niż tylko opis problemu.
Mogę spekulować, aż krowy wrócą do domu, dlaczego wykonanie czegoś zajmuje zbyt długo. Ale jeśli powiem „najpierw zdobądźmy trochę danych”, mogę zauważyć, że zgłaszanych jest wiele wyjątków i zdać sobie sprawę, że zamiast tego mogę zmienić to na wyrażenie if. Nie wiedząc, jak zbierać informacje, wiedząc, że na mojej platformie wyjątki zajmują sporo miejsca i że istnieje sposób, aby sprawdzić, zanim próba będzie szybsza, nigdy nie rozwiążę problemu.
źródło
Twoja odpowiedź składa się z dwóch części:
a) Techniki rzeczywistego rozwiązywania problemów
b) Ulepszanie mózgu z natury „lepszego” myślenia i rozwiązywania problemów
Zawsze było kilka świetnych odpowiedzi na temat techniki (zakładając, że znasz problem itp.), Więc nie zamierzam o tym tyle mówić. Jeśli chodzi o trening mózgu, możesz zrobić kilka rzeczy, aby przekroczyć te synapsy i zbudować więcej połączeń
1) Naucz się nowego języka, prawdziwego języka (np. Francuski lub chiński może być dobrym wyborem w dzisiejszych czasach)
2) Naucz się grać na nowym instrumencie
3) Zrób coś artystycznego, jak malowanie, rysowanie lub rzeźbę
4) Graj w scrabble lub krzyżówki
5) Tańcz jak chcesz. Nie żartuję. Wykazano, że taniec ma wpływ na mózg i myślenie
6) Poszerz swoje doświadczenia, innowacyjne rozwiązania pochodzą z zastosowania teorii w jednej dziedzinie w innej, więc przestudiuj różne dziedziny i obszary, które uważasz za interesujące
7) Ćwiczenie, ćwiczenie jest niezwykle ważne dla poprawy procesu myślenia
Na koniec zamierzam zaoferować najlepszą wskazówkę dotyczącą rozwiązywania trudnych problemów: długi spacer. Przekonałem się, że to działa cuda, aby oczyścić głowę i pozwolić kontemplować problemy
źródło
Radzę wyrzucić książkę!
Oczywiście nie dosłownie. Chodzi mi o to, aby wejść do obszaru tematycznego, w którym masz niewielkie doświadczenie, i rozwiązać tam trudne problemy bez wiedzy o istniejących rozwiązaniach. Nie polegaj na niczym oprócz kreatywności i krytycznego myślenia oraz być może podręcznika.
Możesz zaprojektować format obrazu. Lub serwer WWW. Lub schemat kompresji. System plików. Jądro. Sztuczna inteligencja. Język programowania. Komputerowy system wizyjny.
Coś, co wydaje ci się interesujące, jest dość skomplikowane i o którym nigdy się nie nauczyłeś. Nie czytaj o tym: po prostu wskocz prosto. Eksperymentuj. Robić błędy. Wymyśl koło na nowo.
Nie proś o pomoc. Unikaj samouczków. Trzymaj się z dala od teorii. Nie ściągaj rozwiązania z półki.
Dlaczego?
Podejmij kilka prób, a gdy będziesz zadowolony z tego, co osiągnąłeś, zostaw to na kilka miesięcy. Potem wróć świeżo i sprawdź, czy możesz znaleźć nową perspektywę. Potem nadszedł czas, aby zacząć czytać o problemie i jak inni go rozwiązali (lub rozmawiali z ludźmi). W tym momencie, zamiast mówić sobie „tak, to ma sens” podczas czytania, powiesz „tak, dokładnie ”, „w pewnym stopniu” lub „wow, to sprytne”.
Innymi słowy, znacznie bardziej krytycznie zastanowisz się nad tym, co czytasz, i łatwiej ci będzie je zrozumieć i zapamiętać, ponieważ masz już duży „mentalny szkielet”, do którego możesz go dołączyć. Będziesz czuł się dobrze z tymi rzeczami, które odkryłeś niezależnie, i odejdziesz z mnóstwem nowej wiedzy.
Nie staraj się, aby Twoje rozwiązanie było idealne. Po prostu udowodnij sobie, że możesz rozwiązać problem. Przyjmij postawę „da się zrobić”, a jeśli czujesz się zniechęcony tym problemem, pamiętaj, że osoba, która go rozwiązała, prawdopodobnie wiedziała tyle samo co ty (w rzeczywistości nie wiedziała, że ma rozwiązanie!).
źródło
Rozwiązywanie problemów nie jest czymś, czego można się nauczyć, a nawet nauczyć poprzez czytanie. Jedynym sposobem na lepsze rozwiązywanie problemów jest rozwiązywanie problemów.
Istnieją różne techniki i metodologie rozwiązywania problemów, o których można przeczytać, a także o narzędziach i technologiach, których można użyć do rozwiązania problemów w określonej domenie. Jeśli nie będziesz ciągle myśleć o problemach, spróbuj wymyślić rozwiązania (wymyśl wiele rozwiązań dla każdego problemu i oceń je względem siebie), a następnie oceń swoje rozwiązania względem rozwiązań opracowanych przez innych, nie będziesz w stanie lepiej stawić czoła problemowi rozwiązywanie.
Polecam zabranie kopii Pragmatic Thinking and Learning: Refactor Your Wetware autorstwa Andy Hunt . To książka o zrozumieniu, jak myślisz, reagujesz i uczysz się. Przynosi odpowiednie teorie z teorii behawioralnej i innych nauk poznawczych. Jest specjalnie skierowany do twórców oprogramowania, ale dotyczy każdego pracownika wiedzy.
źródło
Osobom początkującym w programowaniu takim jak ja polecam książkę „Think Like a Programmer”. W pierwszym rozdziale omówiono takie techniki rozwiązywania problemów, jak odtworzenie i podzielenie problemu, zaczynając od tego, co wiesz, redukowanie, analogie i eksperymentowanie.
Następnie są bardziej zaawansowane techniki z przykładami w C ++: rozwiązywanie problemów z tablicami, wskaźnikami i pamięcią dynamiczną, klasami, rekurencją, ponownym użyciem kodu. Nie mogę komentować tej części, ponieważ jest to dla mnie zbyt trudne.
źródło
Rozwiązuję jak najwięcej problemów. Lubię też takie puzzle, jak ta . Majstruję przy grach rozwiązywania problemów, takich jak gry matematyczne zawierające liczby pierwsze lub coś takiego, sudoku, Wieża Hanoi itp. Po prostu znajdź rzeczy do rozwiązania. Również, jeśli to możliwe, zakoduj to.
źródło
Żegnaj, rozwiązujesz DUŻO problemów!
zaczynasz od łatwych problemów i przechodzisz do trudniejszych problemów, gdy proste stają się rutyną zamiast problemów.
źródło
Nie trzymaj się teorii, ćwicz więcej. Wraz z praktyką przychodzi doświadczenie.
źródło