Kata kodu to koncepcja, która proponuje doskonalenie umiejętności programisty poprzez wielokrotne zadawanie drobnych problemów, próbując poprawić kod przy każdej iteracji. Nazwa pochodzi od analogii do kata sztuk walki, w którym formy (aka kata) to praktyki praktykowane w kółko prowadzące do ulepszeń.
Od reakcji, jaką dostałem na moje ostatnie pytanie na ten temat, chcę wiedzieć, jakie są wady tego podejścia?
Odpowiedzi:
Zasadniczo nie widzę wad w kata kodu. Próbujesz wykonać to samo zadanie wiele razy, stosując różne podejścia i różne języki. Ale
źródło
Myślę, że programowanie kata, podobnie jak kata sztuk walki, dotyczy przede wszystkim formy ponad funkcją. Może nauczyć cię pisać elegancki kod, ale nie nauczy Cię rozwiązywania problemów, dla których piszesz kod. Myślę, że lepszym sposobem na ulepszenie jako programisty jest rozwiązywanie zagadek wymagających faktycznego rozwiązywania problemów oraz praca nad większymi projektami, które nauczą cię wartości dobrze skonstruowanego kodu w sposób, którego kata kodu nigdy cię nie nauczy.
Nawiasem mówiąc, myślę, że terminy takie jak „kata kodowa” i „kunszt oprogramowania” bardziej dotyczą romantyzacji naszego zawodu niż opisywania czegoś nowego lub przydatnego.
źródło
Kata kodu wymaga czasu.
Będąc programistą i ojcem w pełnym wymiarze godzin, nie chcę robić hobby z komputera.
I nie sądzę, że mój szef zapłaciłby mi za tworzenie aplikacji niezwiązanych z moim obecnym projektem.
źródło
Jako bokser musiałbym nie zgadzać się z zasadą stojącą za kata. Jest zbyt sztywny, aby był użyteczny. Na ringu musisz zrozumieć, jak stosować zasady, których nauczyłeś się w swobodnym środowisku.
Nie oznacza to, że uczenie się i doskonalenie techniki nie powinno się odbywać. Ćwiczenie na workach pozwala przepracować uderzenie i poczuć, jak go rzucasz, tak samo jak kata. Ale to nie jest tak sztywne. Ćwiczysz wiele rzeczy jednocześnie, poruszasz się po torbie, rzucasz ze stabilnej platformy, celujesz, oddychasz, lista jest długa.
Co najważniejsze, wszystko uczy się razem w taki sposób, w jaki będzie właściwie wykorzystywane. Jeśli potrafisz napisać najpiękniejszą dla pętli w historii, ale nie możesz zrozumieć, jak dopasować ją do programu, to co to za dobro?
Powiedziałbym, że lepszym rozwiązaniem, jeśli chcesz ćwiczyć, byłoby samodzielne budowanie narzędzi lub praca nad narzędziami, których używasz. Wymaga to ćwiczenia wszystkich swoich umiejętności, a na koniec możesz mieć coś pożytecznego.
źródło
Z mojej perspektywy główną wadą jest to, że byłoby strasznie nudne. Również programiści wydają się dobrze rozwijać oprogramowanie, które robi coś pożytecznego lub fajnego. Podejście do kata kodu wydaje się być przeciwieństwem tego.
źródło
Kata oznacza dokładne przeciwieństwo tego, o co powinieneś dążyć.
Termin Kata (pochodzenie: 1950–55; <japoński: kształt, wzór) używany w sztukach walki, a twoje pytanie dotyczy rutynowego zapamiętywania pamięci mięśniowej, takiej jak pisanie dotykowe .
W oryginalnym Karate Kid, woskowanie samochodów, szlifowanie podłóg, malowanie ogrodzenia były to wszystkie nauczone Katas, zupełnie poza kontekstem, w tym przypadku bez wyjaśnienia, tylko po to, by zapewnić pamięć mięśni. Dopiero kiedy pojawił się sensei i nadał kontekstowi tych pustych czynności , coś znaczyły.
Myślę, że to samo odnosi się tutaj, bez mentora, aby umieścić rzeczy w kontekście ponownego robi rozwiązywanie problemów źle w wielu językach nie ma lepszego niż jeden obraz jest. Bez mentora, który powiedziałby ci, gdzie poprawić, są stratą czasu.
Jest to dokładne przeciwieństwo twórczego rozwiązywania problemów poprzez uczenie się nowych odmian idiomów i semantyki języka lub platformy.
Jeśli chcesz być w stanie pisać
System.out.println()
tak łatwo, jak to możliwe, to ćwiczenie byłoby Kata.Jeśli chcesz ulepszyć rozwiązanie problemu w innej implementacji, aby skrócić czas i / lub wymagania przestrzenne lub zastosować więcej idiomatycznych zasad, nie jest to coś, w czym Kata ci pomoże.
Jest już przyjęty przemysłowy termin na ponowne wdrażanie tej samej rzeczy w kółko po tym, jak już działa, dążąc do drobnych stopniowych ulepszeń i wątpliwych korzyści z doskonałości, nazywa się to Złoceniem !
Warunki, których powinni użyć, to Refaktoryzacja w przypadku zastosowania do tego samego języka / środowiska wykonawczego / platformy. I Portowanie podczas przenoszenia działającego programu na inny język / środowisko wykonawcze / platformę. Kata została prawdopodobnie wybrana błędnie, ponieważ brzmi modnie, chłodno i mistycznie bez pełnego zrozumienia semantyki.
Rozwiązywanie różnych trudnych problemów przy niewielkim planowaniu, doświadczeniu lub poradach jest tym, co większość programistów, zwłaszcza młodszych programistów, musi robić codziennie.
Tylko naukowcy mogą powtarzać to samo ćwiczenie tylko po to, aby dopracować konkretne rozwiązanie. Umiejętność udanej kariery programisty polega na adaptacji , a nie na powtarzaniu.
Kto powiedział, że nie ma inteligentnych ludzi, którzy nie muszą uczyć się po pracy i mogą nauczyć się wszystkiego, co trzeba wiedzieć, a czasem więcej w ciągu 8 godzin pracy?
źródło
Zgadzam się, że metafora „kata” może nie być najlepsza. Kata w karate wykonuje się w celu ćwiczenia określonego, dyskretnego ruchu, aż można go wykonać bezbłędnie, ostro i automatycznie. Nie przekłada się to dobrze na działanie wymagające krytycznego myślenia i kreatywności. (Lepiej byłoby, powiedzmy, pisanie).
To powiedziawszy, niepowodzenie nazwy nie jest błędem działania. Jaką wadą może być praktykowanie czegoś, przy czym ktoś chce się poprawić? Przypuszczam, że można powiedzieć, że czas spędzony na robieniu tego jest wadą z perspektywy kosztów alternatywnych, ale tak naprawdę jest to inwestycja. Tak więc czas poświęcony na praktykę tworzenia oprogramowania jest dla twórców oprogramowania, ponieważ pieniądze wydane na akcje lub obligacje są przeznaczone dla długoterminowego oszczędzania / inwestora. To nie jest „wada” - to stawki za stół.
źródło
Poprawiasz się, próbując rzeczy, które są trudne i są poza zasięgiem twoich umiejętności; rzucać sobie wyzwanie. Robienie tego samego „kata kodu” w kółko, jak forma sztuk walki, tego nie robi. Myślę, że stagnuje twoje umiejętności, zamiast pomagać w rozwijaniu umiejętności.
Za pierwszym razem ma zastosowanie jako metoda praktyki, ale jest ograniczona. Mówię ludziom, aby zamiast tego używali projektu Euler . Więcej problemów i więcej wyzwań.
źródło
Dla mnie główną wadą techniki, jaką widzę, jest jej nieoptymalne wykorzystanie twojego czasu.
Wartość uczenia się tego ćwiczenia jest również wątpliwa: gdy robisz coś ponad to, aby być w tym lepszym, opinie ekspertów są niezbędne. Bez wysokiej jakości informacji zwrotnych też się czegoś nauczysz, ale istnieje szansa na bardzo dobre nauczenie się czegoś złego.
Nie zrozumcie mnie źle, ćwiczenie to jedyny sposób, aby stać się dobrym w programowaniu, a kata jest zdecydowanie formą praktyki. Ale tak samo rozwiązuje problemy z kodowaniem konkurencji, pisze własne „fajne projekty”, uczy się nowych języków programowania i tak dalej. Ostatecznie musisz wybrać technikę, z którą czujesz się najwygodniej i upewnić się, że masz jasne wskazówki po drodze.
źródło
Wierzę, że bez jakiejkolwiek formy Kata nigdy nie będziesz świetnym programistą. Kata to praktyka, to dosłownie to oznacza. Weź to jako przykład: sportowiec mówi: „Po prostu pokażę się i poprowadzę 100-metrową deskę rozdzielczą, trening śrubowy”. Czy to brzmi jak zwycięska strategia? Czy kiedykolwiek zrobiono to w ten sposób?
Sugeruję, by ludzie przeczytali „ Czysty koder ” wuja Boba , on zagłębia się w (i inne) tematy profesjonalizmu w dziedzinie programowania.
No i argumenty, że nie można robić Kata i zakładać rodziny, są po prostu wymówką. Mówiąc z doświadczenia: dzieci w pewnym momencie idą spać ...
źródło
Robienie tylko kata w kontekście sztuki walki jest bezużyteczne. Jak powiedziano wcześniej, kata to choreografia ruchów, która uczy formy. Znasz ruchy, ale nie wiesz, jak je zastosować. Nie wiesz, w jakich sytuacjach są one przydatne. Jeśli naprawdę chcesz zrobić z nimi coś pożytecznego, potrzebujesz aplikacji, którymi jest Bunkai .
W kontekście oprogramowania kata kodu to algorytm, narzędzie, wzorzec projektowy lub dowolna inna technologia. Wiedząc, że to dobrze, ale musisz to zastosować, aby to zrozumieć. Musisz go używać w różnych kontekstach, aby naprawdę go opanować. Bunkai byłby konkretną sytuacją, w której ta kata lub jej część jest przydatna.
Nie widzę nic złego w tej metodologii, oto jak opanować wszystko: nauczyć się czegoś, ćwiczyć, dodawać szczegóły, ćwiczyć, dodawać kolejny szczegół, ćwiczyć itp.
źródło
Programowanie jest jak malarstwo lub muzyka. Gdy ktoś staje się muzykiem lub artystą za pieniądze, które można powiedzieć, nie ma inspiracji, występ naprawdę nie jest wart twojego czasu. Jeśli interesujesz się sztuką, nic nie powstrzyma cię przed ćwiczeniem i ciągłym udoskonalaniem - codziennie udoskonalając jedną technikę, zauważając niuanse, których większość ludzi nigdy nie zobaczy.
Zawsze jest miejsce dla ludzi zadowolonych z bycia muzykami barowymi i malarzami, ale są to zupełnie inna klasa talentów. Przypuszczam, że większość malarzy domowych śmiałaby się z pomysłu ćwiczenia, ale założę się, że malarz, który badał i ćwiczył techniki - zasadniczo uznając swoją pracę za sztukę wykonałby zauważalnie lepszą pracę, nawet przy czymś tak przyziemnym jak malowanie domu .
Niektórzy uznają wartość praktyki, a inni nie. Samo to powinno być cenne, jeśli jesteś w stanie oceniać i szukasz ludzi, którzy potrafią tworzyć sztukę (oszczędny, prosty, zrozumiały kod), a nie tylko rozwiązanie.
ps. Nie nazywam się zbyt artystycznym czy czymkolwiek innym - nie robię Kata z abstrakcyjnymi problemami, ale dostrzegam wartość i staram się trochę refaktoryzować mój kod produkcyjny.
źródło