코드 카타 (Code kata) 는 각 반복마다 코드를 개선하기 위해 작은 문제를 여러 번 수행하여 프로그래머의 기술을 연마하도록 제안하는 개념입니다. 그 이름은 형태 (일명 카타)가 계속해서 개선되는 관행 인 무술 카타 와 유사하다 .
이 주제에 대한 마지막 질문 에 대한 반응 에서이 접근법의 단점이 무엇인지 알고 싶습니다.
코드 카타 (Code kata) 는 각 반복마다 코드를 개선하기 위해 작은 문제를 여러 번 수행하여 프로그래머의 기술을 연마하도록 제안하는 개념입니다. 그 이름은 형태 (일명 카타)가 계속해서 개선되는 관행 인 무술 카타 와 유사하다 .
이 주제에 대한 마지막 질문 에 대한 반응 에서이 접근법의 단점이 무엇인지 알고 싶습니다.
답변:
원칙적으로 코드 카타에는 단점이 없습니다. 다른 접근 방식과 다른 언어로 동일한 작업을 여러 번 수행하려고합니다. 그러나
무술 카타와 같은 카타 프로그래밍은 주로 형태 오버 기능에 관한 것입니다. 우아한 코드를 작성하도록 지시 할 수도 있지만 코드를 작성하는 문제를 해결하도록 지시하지는 않습니다. 프로그래머로서 개선하는 더 좋은 방법은 실제 문제 해결이 필요한 퍼즐을 풀고 코드 카타가 결코 가르쳐 줄 수없는 방식으로 잘 짜여진 코드의 가치를 가르쳐 줄 더 큰 프로젝트에서 작업하는 것입니다.
따로, 나는 '코드 카타'와 '소프트웨어 장인 정신'과 같은 용어는 소설이나 유용한 것을 묘사하는 것보다 직업을 낭만적으로 만드는 것에 관한 것이라고 생각합니다.
코드 카타는 시간이 걸립니다.
풀 타임 개발자이자 아버지이기 때문에 컴퓨팅을 취미로 만들고 싶지 않습니다.
그리고 내 상사가 현재 프로젝트와 관련이없는 응용 프로그램을 개발하는 데 비용을 지불한다고 생각하지 않습니다.
권투 선수로서, 나는 카타 뒤에있는 원칙에 동의하지 않아야합니다. 실제로 유용하기에는 너무 단단합니다. 링에서, 당신은 자유 유동 환경에서 배운 원리를 적용하는 방법을 이해해야합니다.
이것은 기술의 학습과 개선이 수행되어서는 안된다고 말하는 것은 아닙니다. 가방을 연습하면 펀치를 사용하고 던지는 방법을 느낄 수 있습니다. 카타와 같습니다. 그러나 그것은 엄격하지 않습니다. 당신은 동시에 많은 것들을 연습하고, 가방 주위를 이동하고, 안정된 플랫폼에서 던지고, 조준하고, 호흡하며, 목록이 계속됩니다.
가장 중요한 것은 모든 것이 실제로 사용될 방식으로 함께 학습된다는 것입니다. 가장 아름다운 for 루프를 작성할 수 있지만 프로그램에 맞추는 방법을 이해할 수 없다면 어떤 것이 좋습니까?
연습을 원한다면 도구를 직접 만들거나 사용하는 도구를 사용하는 것이 더 좋습니다. 그것은 당신의 모든 기술을 연습해야하며 결국 당신은 유용한 무언가를 가질 수 있습니다.
내 관점에서 볼 때 가장 큰 단점은 끔찍하게 지루하다는 것입니다. 또한 프로그래머는 유용하거나 멋진 기능을 수행하는 소프트웨어를 개발하는 데 번창하는 것 같습니다. 코드 카타 접근 방식은 그 반대입니다.
Kata는 당신이 노력해야 하는 것과 정반대 의 것을 의미합니다 .
훈련에 사용되며 기술의 기술을 보여주기 위해 고안된 무술 의 특정 운동 시퀀스 로 구성된 운동
무술에서 사용되는 Kata (원산지 : 1950–55; <일본어 : 모양, 패턴)라는 용어는 터치 타이핑 과 같은 근육 기억의 암기에 관한 질문 입니다.
원래의 가라테 키드 에서 자동차를 왁스 칠하고 바닥을 샌딩하고 울타리를 칠하는 것은 모두 카타 스였습니다. 선생님 이 들어 와서이 중공 활동에 상황을 알려주기 전까지는 아무 의미가 없었습니다.
여러 언어에서 잘못된 문제를 해결하는 컨텍스트 재실행 문제 에 대한 멘토가 없어도 동일한 내용이 여기에 적용된다고 생각합니다 . 멘토가 없으면 개선해야 할 부분을 알려주는 것이 시간 낭비입니다.
언어 나 플랫폼의 새로운 관용구와 의미를 배우면 문제를 창의적으로 해결하는 것과 정반대입니다.
System.out.println()
가능한 한 쉽게 입력 할 수 있으려면 Kata를 연습하십시오.
다른 구현 에서 문제에 대한 솔루션을 개선하고 시간 및 / 또는 공간 요구 사항을 줄이거 나 더 관용적 인 원칙을 적용 하려는 경우 Kata가 도움 이되지 않습니다 .
재 구현하는 이상 같은 일을 통해 이미 작은 증분 개선과 완벽의 의심 혜택을 위해 노력 작동 후,이 호출에 대한 인정 업계 용어 이미 있습니다 골드 도금 !
이들이 사용해야하는 용어 는 동일한 언어 / 런타임 / 플랫폼에 적용될 때 리팩토링 입니다. 그리고 포팅은 다른 언어 / 실행 / 플랫폼으로 작동하는 프로그램을 이동할 때. 카타 는 의미를 완전히 이해하지 않고 힙 스터, 시원하고 신비로 들리기 때문에 잘못 선택되었을 것입니다.
계획, 경험 또는지도가 거의없는 다른 어려운 문제를 해결하는 것은 대부분의 개발자, 특히 주니어 개발자가 매일해야하는 일입니다.
특정 솔루션을 연마하기 위해 학계 만 동일한 운동을 반복합니다. 개발자로서 성공적인 경력을 쌓는 기술은 반복이 아니라 적응 에 있습니다.
누가 퇴근 후 공부할 필요가없는 현명한 사람들이없고, 직장에서 8 시간 동안 알아야 할 모든 것을 배울 수 있다고 누가 말합니까?
나는 "카타"라는 은유가 최고가 아니라는 데 동의합니다. 가라테의 카타는 완벽하고 선명하며 자동으로 수행 될 수있을 때까지 구체적이고 개별적인 움직임을 연습하기 위해 수행됩니다. 이것은 비판적 사고와 창의성이 필요한 활동으로 잘 해석되지 않습니다. (입력하는 것이 더 좋습니다).
즉, 이름의 실패는 활동의 실패가 아닙니다. 누군가가 더 나아지기를 원하는 것을 실천하는 데 가능한 단점은 무엇입니까? 기회 비용 관점에서 시간을 낭비하는 것이 단점이지만 실제로는 투자라고 말할 수 있습니다. 따라서 주식이나 채권에 소비되는 돈이 장기적인 보호기 / 투자자에게 있기 때문에 소프트웨어 개발 기술을 실행하는 데 소요되는 시간은 소프트웨어 개발자에게 있습니다. '결점'이 아니라 테이블 스테이크입니다.
어렵고 능력이없는 것을 시도함으로써 더 나아질 수 있습니다. 자신에게 도전. 무술 형태와 같이 동일한 "코드 카타"를 반복해서 수행하는 것은 그렇게하지 않습니다. 나는 당신의 능력을 향상시키는 대신 당신의 능력을 정체 시킨다고 생각합니다.
그것은 처음으로 실천 방법으로 사용되지만 제한적입니다. 나는 사람들에게 Euler 프로젝트를 대신 사용하라고 말한다 . 더 많은 문제와 도전.
내가 볼 때 기술의 주요 단점은 시간을 최적으로 사용하는 것입니다.
이 연습의 학습 가치도 의문의 여지가 있습니다. 연습을 통해 더 나은 결과를 얻으려면 전문가의 피드백이 필수적입니다. 고품질 피드백이 없으면 무언가를 배우게되지만 잘못된 것을 잘 배울 가능성이 있습니다.
실수하지 마십시오. 연습은 프로그래밍을 잘하는 유일한 방법이며, kata는 가장 확실한 연습입니다. 그러나 코딩 경쟁 문제 해결, 자신 만의 "재미있는 프로젝트"작성, 새로운 프로그래밍 언어 학습 등이 있습니다. 궁극적으로 가장 편한 기술을 선택하고 그 길을 따라 명확한 지침이 있는지 확인해야합니다.
나는 어떤 형태의 카타가 없다면 위대한 코더가 될 수 없다고 믿는다. Kata는 연습입니다. 문자 그대로의 의미입니다. 예를 들어 이것을 예로 들어 보자. 운동 선수는 "100 미터의 대시, 나사 연습 만하면된다"고 말합니다. 이것이 승리 전략처럼 들립니까? 그것은되어 지금까지 이런 식으로 일을?
나는 사람들에게 밥 삼촌의 " 깨끗한 코더 "를 읽어 보라고 제안한다 .
아, 그리고 카타를 할 수없고 가족을 키울 수 없다는 주장은 단순히 변명입니다. 경험에서 말하면 : 아이들은 어느 시점에서 잠을 자고 ...
무술에서 카타 만하는 것은 쓸모가 없습니다. 앞서 언급했듯이 카타는 형태를 가르치는 운동의 안무입니다. 당신은 움직임을 알고 있지만 그것을 적용하는 방법을 모른다. 어떤 상황에서 유용한 지 알 수 없습니다. 실제로 유용한 것을 원한다면 Bunkai 응용 프로그램이 필요합니다 .
소프트웨어 컨텍스트에서 코드 kata는 알고리즘, 도구, 디자인 패턴 또는 기타 기술입니다. 그것을 아는 것은 좋지만 그것을 이해하려면 그것을 적용해야합니다. 실제로 마스터하려면 다른 컨텍스트에서 사용해야합니다. 분 카이는 그 카타나 카타의 일부가 유용한 구체적인 상황 일 것입니다.
나는 그 방법론에 잘못된 것을 보지 못합니다. 이것은 무엇이든 숙달 된 방법입니다 : 무언가를 배우고, 연습하고, 세부 사항을 추가하고, 연습하고, 다른 세부 사항을 추가하고, 연습하십시오.
프로그래밍은 그림이나 음악과 같은 예술입니다. 누군가가 당신이 말할 수있는 돈을 위해 음악가 또는 예술가가되면 영감이 없으며 공연은 실제로 당신의 시간 가치가 없습니다. 당신이 예술에 빠져 있다면, 매일 그 기술을 연습하고 꾸미는 것을 막을 수있는 것은 아무것도 없습니다. 매일 대부분의 사람들이 볼 수없는 뉘앙스를 알아 채고 매일 하나의 기술을 수정합니다.
사람들은 항상 바 뮤지션과 집 화가가되어 행복하게 여길 공간이 있지만, 그들은 완전히 다른 등급의 재능입니다. 나는 대부분의 집 화가들이 연습 아이디어에 대해 웃을 것이라고 생각하지만, 기술을 연구하고 연습 한 화가에게 내기를 걸었다. 예술로서의 직업을 본질적으로 인정하는 것은 집을 그리는 것과 같은 평범한 일에서도 눈에 띄게 더 나은 일을 할 것이다. .
어떤 사람들은 그렇지 않은 연습의 가치를 인식 할 것입니다. 평가할 위치에 있고 해결책이 아니라 예술 (간결하고 단순하며 이해하기 쉬운 코드)을 만들 수있는 사람들을 찾고 있다면 그 자체만으로도 가치가 있어야합니다.
추신. 나는 예술적으로나 다른 것을 부르지 않고있다. 추상적 인 문제에 대해서는 Kata를하지 않지만 그 가치를 인식하고 생산 코드를 상당히 리팩토링하려고한다.