Svantaggi del codice kata

41

Code kata è un concetto che propone di affinare le abilità del programmatore facendo piccoli problemi molte volte cercando di migliorare il codice ad ogni iterazione. Il nome deriva da un'analogia con il kata di arti marziali in cui le forme (dette anche kata) sono pratiche ripetute che portano a miglioramenti.

Dalla reazione sono arrivato al mio ultima domanda sull'argomento, desidero sapere quali sono gli svantaggi di questo approccio?

    
posta Sardathrion 06.03.2012 - 09:43
fonte

12 risposte

22

In linea di principio, non vedo gli svantaggi nel codice kata. Cerchi di svolgere lo stesso compito molte volte, con approcci diversi e lingue diverse. Ma

  1. è piuttosto difficile introdurlo in un posto di lavoro. Di solito ci si aspetta che sia competente o ragionevolmente produttivo. Non sto dicendo che non sarebbe utile (meglio dedicare un po 'di tempo a migliorare le competenze di una nuova assunzione piuttosto che pagare il codice non buono che scriverà nel futuro), ma è comunque piuttosto difficile.
  2. devi actuallu provare per migliorare in un certo senso. Scrivere lo stesso codice nello stesso modo un migliaio di volte non ti farà migliorare (piuttosto ti annoierà). Devi capire i tuoi errori precedenti, cosa è andato storto o non è stato eseguito come previsto. Questa è la parte più importante. È una forma di studio personale, quindi devi studiare.
risposta data 06.03.2012 - 13:31
fonte
43

Penso che i kata di programmazione, come il kata delle arti marziali, riguardino principalmente la forma rispetto alla funzione. Potrebbe insegnarti a scrivere codice elegante, ma non ti insegnerà a risolvere i problemi per cui stai scrivendo il codice. Penso che un modo migliore per migliorare come programmatore sia risolvere enigmi che richiedono una reale risoluzione dei problemi e lavorare su progetti più grandi che ti insegneranno il valore del codice ben calcolato in un modo che il codice kata non può mai insegnarti.

Per inciso, penso che termini come "code kata" e "software artigianato" siano più di romanticismo della nostra professione che di descrizione di qualcosa di nuovo o utile.

    
risposta data 06.03.2012 - 14:46
fonte
20

Il codice kata richiede solo tempo.

Essendo sviluppatore a tempo pieno e padre, non voglio rendere il computing un hobby.

E non immagino che il mio capo mi pagherebbe per sviluppare applicazioni non correlate al mio attuale progetto.

    
risposta data 06.03.2012 - 10:24
fonte
13

Come pugile, dovrei essere in disaccordo con il principio alla base del kata. È troppo rigido per essere effettivamente utile. Nel ring, devi capire come applicare i principi che hai imparato in un ambiente a flusso libero.

Questo non vuol dire che l'apprendimento e il miglioramento della tecnica non dovrebbero essere fatti. Esercitarti sulle borse ti permette di lavorare usando un pugno e sentendo come lo lanci, lo stesso di un kata. Ma non è così rigido. Stai praticando molte cose allo stesso tempo, muovendo la borsa, lanciando da una piattaforma stabile, mirando, respirando, la lista continua.

Soprattutto, tutto è appreso insieme nel modo in cui verrà effettivamente utilizzato. Se riesci a scrivere il ciclo più bello di sempre, ma non riesci a capire come inserirlo in un programma, allora a cosa serve?

Direi che una cosa migliore da fare se vuoi che la pratica sia costruire strumenti, o lavorare sugli strumenti che usi. Richiede l'esercizio di tutte le tue abilità e alla fine potresti avere qualcosa di utile.

    
risposta data 06.03.2012 - 15:42
fonte
11

Dal mio punto di vista lo svantaggio principale è che sarebbe terribilmente noioso. Anche i programmatori sembrano prosperare nello sviluppo di software che faccia qualcosa di utile o interessante. L'approccio al codice kata sembrerebbe essere l'opposto di quello.

    
risposta data 06.03.2012 - 10:43
fonte
8

Kata significa l'esatto opposto di ciò che dovresti sforzarti.

an exercise consisting of a sequence of the specific movements of a martial art, used in training and designed to show skill in technique

Il termine Kata (Origine: 1950-1955; < Giapponese: forma, modello) usato nelle arti marziali e la tua domanda riguarda la memorizzazione a memoria del muscolo come touch typing .

Nel Karate Kid originale, cerare le macchine, levigare i pavimenti, dipingere la recinzione questi erano tutti i Katas che venivano insegnati, completamente fuori dal contesto e in questo caso senza spiegazione solo per fornire memoria muscolare . Non è stato fino a quando sensei è arrivato e ha dato a queste attività vuote contesto che intendevano qualsiasi cosa.

Penso che la stessa cosa valga qui, senza un mentore che metta le cose in context rifare la risoluzione dei problemi sbagliato in più lingue non è meglio di un singolo. Senza il mentore per dirti dove migliorare sono una perdita di tempo.

È l'esatto opposto di risolvere creativamente i problemi apprendendo nuove variazioni di idiomi e semantica di un linguaggio o di una piattaforma.

Se vuoi essere in grado di digitare System.out.println() nel modo più semplice possibile, esercitarti sarebbe un Kata.

Se vuoi migliorare una soluzione a un problema in un'implementazione diversa , per ridurre i tempi e / o i requisiti di spazio o applicare più principi idiomatici, isn not qualcosa che Kata ti aiuterà con.

Esiste già un termine industriale accettato per la reimplementazione della stessa cosa più e più volte dopo aver già lavorato per ottenere piccoli miglioramenti incrementali e vantaggi discutibili della perfezione, si chiama Placcatura in oro !

I termini che avrebbero dovuto usare sono Refactoring quando applicati alla stessa lingua / runtime / piattaforma. E Porting quando si sposta un programma funzionante in un'altra lingua / runtime / piattaforma. Kata è stato probabilmente scelto in modo errato perché sembra hipster, fico e mistico senza comprendere completamente la semantica.

Risolvere diversi problemi difficili con poca pianificazione, esperienza o guida è ciò che la maggior parte degli sviluppatori, specialmente gli sviluppatori junior devono fare ogni giorno.

Solo gli accademici riescono a fare sempre lo stesso esercizio solo per il gusto di affinare una soluzione specifica. L'abilità di avere una carriera di successo come sviluppatore è in adattamento , non nella ripetizione.

Chi dice che non ci sono persone intelligenti che non hanno bisogno di studiare dopo il lavoro, e possono imparare tutto ciò che è necessario sapere e talvolta di più nelle loro 8 ore di lavoro?

    
risposta data 06.03.2012 - 18:05
fonte
5

Sono d'accordo che la metafora "kata" potrebbe non essere la migliore. Un kata nel karate viene eseguito allo scopo di praticare un movimento specifico e discreto finché non può essere eseguito in modo impeccabile, nitido e automatico. Questo non si traduce bene in un'attività in cui sono richiesti il pensiero critico e la creatività. (Si tradurrebbe meglio, per esempio, digitando).

Detto questo, il fallimento del nome non è un fallimento dell'attività. Quale possibile inconveniente potrebbe esserci nella pratica di qualcosa a cui qualcuno vuole migliorare? Suppongo che si possa dire che il tempo speso per farlo è un inconveniente, dal punto di vista del costo opportunità, ma in realtà è un investimento. Quindi, il tempo dedicato alla pratica dello sviluppo del software è per gli sviluppatori di software come il denaro speso per azioni o obbligazioni è per un risparmiatore / investitore a lungo termine. Non è un 'inconveniente' - è una posta in gioco da tavolo.

    
risposta data 06.03.2012 - 17:46
fonte
3

Stai meglio provando cose difficili e appena fuori dalla portata delle tue abilità; sfidare te stesso. Fare lo stesso "codice kata" più e più volte, come una forma di arti marziali, non lo fa. Penso che ristagni le tue abilità invece di aiutare a spingere in avanti le tue abilità.

Ha il suo uso come metodo di pratica per la prima volta, ma è limitato. Dico alle persone di usare invece il progetto Eulero . Più problemi e più impegnativi.

    
risposta data 06.03.2012 - 18:03
fonte
3

Per me, il principale svantaggio della tecnica, come la vedo io, è l'uso sub-ottimale del tuo tempo.

Il valore di apprendimento di questo esercizio è anche discutibile: quando fai qualcosa per migliorare, il feedback degli esperti è essenziale. Senza feedback di alta qualità imparerai anche qualcosa, ma c'è una possibilità di apprendere una cosa sbagliata molto bene.

Non fraintendetemi, la pratica rimane l'unico modo per diventare bravi a programmare, e il kata è sicuramente una forma di pratica. Ma così è risolvere i problemi relativi alla concorrenza in codice, scrivere i propri "progetti divertenti", imparare nuovi linguaggi di programmazione e così via. In definitiva, devi scegliere la tecnica con cui ti senti più a tuo agio e assicurarti di avere una guida chiara lungo il percorso.

    
risposta data 06.03.2012 - 20:11
fonte
1

Credo che senza una qualche forma di Kata non sarai mai un grande programmatore. Kata è pratica, questo è letteralmente ciò che significa. Prendi questo come esempio: un atleta dice "Mi farò vedere e farò il giro dei 100 metri, fai pratica". Suona come una strategia vincente? È ever fatto in questo modo?

Suggerisco alle persone di leggere lo zio Bob " The Clean Coder ", approfondisce questo (e altri) argomenti di professionalità nel campo della programmazione.

Oh e le argomentazioni secondo cui non puoi fare Kata e crescere una famiglia sono semplicemente scuse. Parlando dall'esperienza: i bambini vanno a dormire ad un certo punto ...

    
risposta data 06.03.2012 - 18:45
fonte
1

Fare solo kata, in un contesto di arte marziale, è inutile. Come detto prima, i kata sono la coreografia di movimenti che ti insegnano la forma. Conosci i movimenti ma non sai come applicarli. Non sai in quali situazioni sono utili. Se vuoi veramente fare qualcosa di utile con loro, hai bisogno delle applicazioni, che è Bunkai .

In un contesto software, il codice kata sarebbe l'algoritmo, lo strumento, il modello di progettazione o qualsiasi altra tecnologia. Sapere che è buono, ma è necessario applicarlo per capirlo. Devi usarlo in diversi contesti per dominarlo veramente. Il Bunkai sarebbe una situazione concreta in cui quel kata o parte di kata è utile.

Non vedo nulla di sbagliato in questa metodologia, questo è il modo in cui tutto è padroneggiato: apprendi qualcosa, esercitalo, aggiungi un dettaglio, pratica, aggiungi un altro dettaglio, pratica, ecc.

    
risposta data 23.03.2012 - 20:05
fonte
-1

La programmazione è una pittura o musica artistica. Quando qualcuno diventa un musicista o un artista per soldi, puoi dire che non c'è ispirazione, la performance non vale davvero il tuo tempo. Se sei nell'arte, niente può impedirti di esercitarti e perfezionarlo costantemente - ogni giorno perfezionando una singola tecnica, notando le sfumature che la maggior parte delle persone non vedrà mai.

C'è sempre spazio per le persone felici di essere musicisti di bar e pittori di casa, ma sono una classe di talenti completamente diversa. Suppongo che la maggior parte dei pittori di casa riderebbe all'idea di praticare, ma scommetto un pittore che ha fatto ricerche e praticato tecniche - essenzialmente riconoscendo il proprio lavoro come un'arte farebbe un lavoro notevolmente migliore, anche su qualcosa di così banale come dipingere la tua casa .

Alcune persone riconosceranno il valore della pratica che alcuni non fanno. Solo questo dovrebbe essere utile se sei in grado di valutare e stai cercando persone che possano fare arte (codice snello, semplice, comprensibile) e non solo una soluzione.

ps. Non mi sto definendo incredibilmente artistico o altro - non faccio Kata su problemi astratti ma riconosco il valore e cerco di rifattorizzare il mio codice di produzione un po '.

    
risposta data 06.03.2012 - 19:29
fonte

Leggi altre domande sui tag