Uważam, że ważne jest, aby nadal ćwiczyć umiejętności rozwiązywania problemów. Pisanie własnych mini-projektów to jeden sposób, ale innym jest próba rozwiązania problemów opublikowanych online. Łatwo jest znaleźć ciekawe quizy programistyczne online, które wymagają zastosowania sprytnych algorytmów do rozwiązania - Project Euler jest jednym z dobrze znanych przykładów.
Jednak w wielu projektach życiu rzeczywistym projektowania oprogramowania - szczególnie w początkowych fazach - ma duży wpływ i na późniejszych etapach nie może być manipulowane tak łatwo jak zwykły algorytmów. Aby poprawić te umiejętności, szukam dowolnej kolekcji problemów projektowych.
Kiedy mówię „projekt”, mam na myśli abstrakcyjny projekt rozwiązania programowego - na przykład, jakie będą moduły i jakie są zależności między nimi, w jaki sposób dane będą płynąć w programie, jakie dane należy zapisać w baza danych itp. Problemy projektowe to problemy, które należy rozwiązać na wczesnym etapie każdego projektu, ale ich rozwiązaniem jest schemat tablicy bez jednego wiersza kodu.
Oczywiście w tego rodzaju problemach nie ma jednego poprawnego rozwiązania, ale będę szczególnie zadowolony z każdego miejsca, w którym będą wyświetlane zalety i wady typowych rozwiązań, które można zastosować do rozwiązania problemu.
Odpowiedzi:
Co powiesz na Code Kata . Zrobiłem kilka z nich, i są zabawne, a wyzwanie jest na tyle duże, że zawsze trzeba się czegoś nauczyć.
Komentarze do każdego kata zazwyczaj zawierają wystarczającą ilość informacji, aby pomóc odpowiedzieć na wszystko, co utknęło.
źródło
Zacznij od klasycznego problemu projektowego: KWIC.
David Parnas wykorzystał KWIC jako przykład w swoim klasycznym artykule na temat modułowości: Kryteria , które należy stosować w rozkładaniu układów na moduły , które każdy powinien prawdopodobnie czytać co 10 lat.
KWIC, w kontekście słów kluczowych w kontekście , to prosty problem z indeksowaniem i sortowaniem, polegający na czytaniu wierszy tekstu, a następnie obracaniu każdego wiersza na podstawie słów kluczowych (np. Z wyłączeniem „the”, „with”), dodając każdą zmianę do listę, którą posortujesz. Chodzi o to, że użycie KWIC byłoby przydatne do wygenerowania indeksu dla książki. W czasie swojego klasycznego artykułu Parnas powiedział, że doświadczony programista może rozwiązać go w ciągu jednego do dwóch tygodni, ale Prawo Yannisa mówi, że można to teraz zrobić w ciągu jednej do dwóch godzin . [Systemy operacyjne i biblioteki standardowe stały się znacznie lepsze.]
Przeczytaj artykuł Parnasa, a gdy tylko będziesz w stanie zrozumieć, co powinien zrobić program KWIC, idź i napisz własne jako ćwiczenie projektowe. Następnie przeczytaj resztę artykułu, który omawia dwa różne projekty: oba są modułowe, ale jeden osiąga ukrywanie informacji, a drugi nie.
Po zapoznaniu się z przykładem KWIC, będziesz w stanie docenić inne dokumenty projektowe, które go wykorzystują. Na przykład w artykule Decoupling Change from Design Michaela VanHilsta wykorzystano go do pokazania naprawdę interesującej techniki projektowania przy użyciu szablonów C ++. I dopóki mówimy o szablonach i projekcie C ++, przeczytaj artykuł Czarnecki i Eisenecker Synthesizing Objects .
Przejście od KWIC to inne klasyczne przykłady, takie jak przykład Spacewar , który został przeniesiony / przeprojektowany w kilku językach, takich jak Python i AspectJ .
Oczywiście, każdy program może być użyty jako ćwiczenie projektowe, ale KWIC i Spacewar to przykłady, w których można spojrzeć na kilka alternatyw.
źródło
Słyszałem o takich rzeczach zwanych „programowaniem katas”. Kata to termin sztuk walki określający formę lub sekwencję ruchów, praktykowaną w kółko do perfekcji. Poszukaj katas w swoim wybranym języku, a założę się, że coś znajdziesz. :)
źródło
Zgadzam się, że Katas i Euler są mili w projektowaniu algorytmów i ćwiczeniu kodowania - być może możesz je rozwinąć, być trochę kreatywnym i zaprojektować system wokół jednego z problemów.
Na przykład pracuję nad nie tylko rozwiązywaniem problemów Eulera, aby znaleźć najszybszą i najkrótszą odpowiedź, ale rozwiązywaniem ich w sposób rozproszony - chcę skonfigurować serię węzłów Erlang, aby rozwiązać jeden z problemów. Oczywiście oznacza to, że muszę wymyślić, jak rozdzielić problem na odrębne fragmenty i poprosić, aby zdali raport z postępów i zebrali wyniki razem (wszystko w Funkcjonalnym Języku, w którym nie jestem ekspertem).
Być może możesz zaprojektować system wokół jednego z tych problemów jako rozwiązanie biznesowe - jak to zrobić, aby wielu „klientów” mogło mieć dostęp do Twojego problemu naraz, możesz przejść przez projektowanie interakcji klienta i warstwy usług itp.
Chodzi o kreatywność i dobrą zabawę.
źródło