ข้อเสียของรหัสกะตะ


41

Code kataเป็นแนวคิดที่เสนอให้ฝึกฝนทักษะของโปรแกรมเมอร์โดยการทำปัญหาเล็ก ๆ หลายครั้งที่พยายามปรับปรุงโค้ดในแต่ละครั้ง ชื่อนี้มาจากการเปรียบเทียบกับศิลปะการต่อสู้แบบกะตะซึ่งแบบฟอร์ม (aka กะตะ) เป็นวิธีปฏิบัติที่ทำซ้ำแล้วซ้ำอีกซึ่งนำไปสู่การปรับปรุง

จากปฏิกิริยาที่เกิดขึ้นกับคำถามสุดท้ายของฉันในหัวข้อฉันอยากรู้ว่าอะไรคือสิ่งที่ดึงดูดความสนใจของแนวทางนี้?


+1 เพื่อตอบโต้ -1 ที่ไม่ก่อผล ดูเหมือนคำถามที่ถูกต้องเช่นเดียวกับที่ฉันมีข้อสงสัยเกี่ยวกับ Code kata แต่ไม่สามารถระบุสาเหตุได้
mattnz

9
จนกระทั่งวันนี้ฉันไม่รู้เลยว่ากะตะชิ้นนี้เป็นอย่างไร ตอนนี้ฉันเพิ่งตรวจสอบและ imho เป็นเพียงชื่อแฟนซีสำหรับสิ่งที่โปรแกรมเมอร์มีสติทุกคนทำและเรียนรู้โดยอัตโนมัติในขณะที่พัฒนา: ฝึก ดังนั้นข้อเสียเปรียบสำหรับฉันก็คือ: มันต้องใช้เวลาเพิ่มที่สามารถใช้เป็นอย่างอื่นได้
stijn

11
อืม ... เห็นได้ชัดว่าข้อเสียเปรียบหลักของรหัสกะตะดูเหมือนว่าผู้คนกำลังวิจารณ์รหัสกะตะโดยไม่เข้าใจว่ารหัสกะตะคืออะไร :-)
Jörg W Mittag

19
@ JörgWMittag - นั่นเป็นเพราะคำว่า 'กะตะ' เป็นการเปรียบเทียบที่ไม่ดีเพราะมันหมายถึงการฝึกฝนรูปแบบที่แข็งเกร็งพร้อมความหมายในทางปฏิบัติน้อยในสถานการณ์โลกแห่งความเป็นจริง การใช้คำศิลปะการต่อสู้เช่น "เข็มขัดหนังสีดำ" หรือ "กะตะ" กับการเขียนโปรแกรมหรือสถานการณ์ทางธุรกิจทำให้ฉันรำคาญ
jfrankcarr

คำตอบ:


22

โดยหลักการแล้วฉันไม่เห็นข้อเสียในโค้ดกะตะ คุณพยายามทำงานเดียวกันให้สำเร็จหลาย ๆ ครั้งด้วยวิธีการที่แตกต่างกันและภาษาที่แตกต่างกัน แต่

  1. มันค่อนข้างยากที่จะแนะนำในสถานที่ทำงาน โดยปกติคุณคาดว่าจะมีความเชี่ยวชาญหรือมีประสิทธิผล ฉันไม่ได้บอกว่ามันจะไม่เป็นประโยชน์ (ดีกว่าที่จะใช้เวลาในการปรับปรุงทักษะของการจ้างงานใหม่กว่าที่จะจ่ายสำหรับรหัสที่ไม่ดีเขาจะเขียนในเวลาที่จะมา) แต่มันค่อนข้างยากไม่มีน้อย
  2. คุณต้องพยายามปรับปรุงให้ดีขึ้นในบางแง่มุม การเขียนรหัสเดียวกันด้วยวิธีเดียวกันหนึ่งพันครั้งจะไม่ทำให้คุณดีขึ้น (แต่จะทำให้คุณเบื่อ) คุณต้องเข้าใจข้อผิดพลาดก่อนหน้านี้สิ่งที่ผิดพลาดหรือไม่ได้ผลตามที่คาดไว้ นี่คือส่วนที่สำคัญที่สุด มันเป็นรูปแบบของการศึกษาด้วยตนเองดังนั้นคุณต้องศึกษา

1
ฉันยอมรับคำตอบนี้เพราะมันตอบคำถามโดยตรง (แทนที่จะเป็นคำศัพท์ "กะตะ") และมุ่งเน้นไปที่ปัญหาที่อาจเกิดขึ้นจากการฝึกรหัสกะตะ นี่ไม่ใช่การบอกว่าคำตอบอื่น ๆ ไม่ใช่คำตอบที่ดี - อันที่จริงฉันยินดีที่จะยอมรับมากกว่าหนึ่งคำ!
Sardathrion

43

ฉันคิดว่าการเขียนโปรแกรมกะตะเหมือนกับศิลปะการต่อสู้กะตะส่วนใหญ่เกี่ยวกับรูปแบบการทำงานมากกว่า อาจสอนให้คุณเขียนโค้ดที่หรูหรา แต่จะไม่สอนให้คุณแก้ปัญหาที่คุณเขียนรหัส ฉันคิดว่าวิธีที่ดีกว่าในการปรับปรุงในฐานะโปรแกรมเมอร์คือการไขปริศนาที่ต้องใช้การแก้ปัญหาจริงและเพื่อทำงานในโครงการขนาดใหญ่ที่จะสอนคุณค่าของรหัสที่มีปัจจัยดีในแบบที่กะตะไม่สามารถสอนคุณได้

นอกจากนี้ฉันคิดว่าคำว่า 'รหัสกะตะ' และ 'งานฝีมือซอฟต์แวร์' นั้นเกี่ยวกับการทำให้อาชีพของเราดูโรแมนติกมากกว่าที่พวกเขาจะอธิบายถึงสิ่งแปลกใหม่หรือมีประโยชน์


4
ทำ +2 สำหรับประโยคนั้น
Erik Dietrich

6
ในขณะที่ฉันยอมรับว่าการแก้ปัญหาเป็นวิธีที่ดีในการปรับปรุงในฐานะโปรแกรมเมอร์การเรียนรู้การเขียนโค้ดที่หรูหราสามารถเป็นสิ่งที่คุ้มค่าได้เช่นกัน ฉันต้องการให้นักพัฒนาดั้งเดิมของโค้ดที่ฉันดูแลอยู่ใช้เวลาและความพยายามในการเขียนโค้ดที่หรูหรามากกว่าการคัดลอกและวางเพื่อให้ทำงานได้
Mike Partridge

1
+3 สำหรับความคิดเห็นของไมค์ โดยทั่วไปแล้วจะใช้เวลาในการบำรุงรักษาโค้ดมากกว่าที่จะเขียนไว้ในตอนแรก คุณคาดหวังว่าจะมีการใช้งานฝีมือเมื่อมีคนสร้างบ้านของคุณเนื่องจากคุณจะต้องอยู่ในบ้านเป็นเวลานาน ควรนำไปใช้เช่นเดียวกันเมื่อมีคนสร้างซอฟต์แวร์ แต่ส่วนใหญ่แล้วไม่ใช่
Kaleb Brasee

@KaptajnKold: คุณกำลังพูดจากประสบการณ์ของคุณ? ฉันชอบที่จะได้ยินความคิดเห็นจากคนที่พยายามพัฒนาทักษะของเขาผ่าน CodeKata และล้มเหลว
dzieciou

2
@dzieciou: ฉันมีประสบการณ์ด้านศิลปะการต่อสู้กะตะที่ฝึกคาราเต้มาหลายปีแล้ว และในขณะที่ผมเชื่อว่ามีบางแง่มุมที่เป็นประโยชน์ของการต่อสู้ที่สามารถเรียนรู้จากหาดกะตะ, ฉันยังเชื่อว่ามันเป็นที่สุดไม่ได้เป็นวิธีที่มีประสิทธิภาพมากในการรถไฟ คุณควรฝึกฝนเมื่อคุณต่อสู้ตามที่พวกเขาพูด นั่นคือถ้าจุดประสงค์ของคุณคือการเป็นนักสู้ที่ดีกว่า บางคนพบว่าการฝึกฝนกะตะเป็นการแสวงหาที่สนุกสนานในตัวเอง ไม่มีอะไรผิดปกติกับสิ่งนั้น ในที่สุดบางคนก็กลายเป็นคนดีมาก ที่กะตะ
KaptajnKold

20

รหัสกะตะต้องใช้เวลา

เป็นนักพัฒนาเต็มเวลาและพ่อฉันไม่ต้องการที่จะคำนวณงานอดิเรก

และฉันไม่คิดว่าหัวหน้าของฉันจะจ่ายเงินให้ฉันเพื่อพัฒนาแอปพลิเคชันที่ไม่เกี่ยวข้องกับโครงการปัจจุบันของฉัน


10
มีการเรียนรู้ชนิดใดบ้างที่ไม่ต้องใช้เวลา? เว้นแต่คุณจะโชคดีพอที่จะทำงานในโครงการกรีนฟิลด์ทุกครั้ง
Den

38
หากคุณไม่ได้ใช้เวลาว่างอย่างน้อยในการพัฒนาทักษะการเขียนโปรแกรมของคุณเป็นประจำอาชีพการงานของคุณตกอยู่ในอันตราย
Ladislav Mrnka

7
+1 ถึงสิ่งนี้ ในขณะที่ฉันรักการเขียนโปรแกรมอย่างแน่นอนและฉันสามารถสร้างรายได้จากสิ่งที่ฉันรักการทำฉันไม่เห็นจุดในการทำโปรแกรมเพิ่มเติมนอกที่ทำงาน ฉันมีงานอดิเรกอื่น ๆ อีกมากมาย (เช่น DJing ผลิตเพลงยกน้ำหนักวาดรูปและเต้นรำบนท้องถนน) ซึ่งฉันไม่เห็นจุดที่จะใช้เวลามากขึ้นกับบางสิ่งที่ฉันทำไป 40 ชั่วโมง / สัปดาห์
Andreas Johansson

7
@mouviciel: และนั่นคือปัญหา: เจ้านายของคุณยินดีจ่ายสำหรับการพัฒนามืออาชีพของคุณถ้ามันเป็นสิ่งจำเป็นในโครงการแต่คุณควรจะเต็มใจที่จะพัฒนาทักษะของคุณไม่เกี่ยวข้องกับโครงการปัจจุบันของคุณ - อาจจะไม่เกี่ยวข้องกับปัจจุบันของคุณ แพลตฟอร์มเลย นั่นคือสิ่งที่สร้างอาชีพ / ประกันสังคมของคุณ
Ladislav Mrnka

6
@LadislavMrnka - ฉันเห็นด้วยกับคุณ อย่างไรก็ตาม Code kata ไม่ใช่คำตอบของปัญหานั้น
mouviciel

13

ในฐานะนักมวยฉันต้องไม่เห็นด้วยกับหลักการที่อยู่เบื้องหลังกะตะ มันแข็งเกินไปที่จะมีประโยชน์จริง ๆ ในวงแหวนคุณต้องเข้าใจวิธีการใช้หลักการที่คุณเรียนรู้ในสภาพแวดล้อมที่ลื่นไหล

นี่ไม่ได้เป็นการบอกว่าการเรียนรู้และการปรับปรุงเทคนิคไม่ควรทำ การฝึกบนกระเป๋าช่วยให้คุณทำงานโดยใช้หมัดและรู้สึกว่าคุณโยนมันอย่างไรเช่นเดียวกับกะตะ แต่มันก็ไม่เข้มงวดเหมือนกัน คุณกำลังฝึกซ้อมหลาย ๆ อย่างในเวลาเดียวกันเคลื่อนที่ไปรอบ ๆ ถุงโยนจากฐานที่มั่นคงเล็งเล็งหายใจรายการต่อไป

สิ่งสำคัญที่สุดคือทุกสิ่งเรียนรู้ร่วมกันในแบบที่มันจะถูกใช้จริง หากคุณสามารถเขียนลูปที่สวยที่สุดให้กับคุณได้ แต่คุณไม่สามารถเข้าใจได้ว่าจะใส่มันเข้าไปในโปรแกรมได้อย่างไรแล้วมันดีแค่ไหน?

ฉันจะบอกว่าสิ่งที่ดีกว่าที่จะทำถ้าคุณต้องการฝึกฝนคือการสร้างเครื่องมือของตัวเองหรือทำงานกับเครื่องมือที่คุณใช้ มันต้องใช้ทักษะทั้งหมดของคุณและในที่สุดคุณอาจมีบางสิ่งที่มีประโยชน์


จับได้เห็นชัดตรงเผง. fwiw ฉันยังเป็นนักมวย / โปรแกรมเมอร์ :)
Paul Sanwald

1
รหัส katas ไม่เกี่ยวกับการทำซ้ำอย่างเข้มงวด พวกเขากำลังทำงานเกี่ยวกับการแก้ปัญหามากขึ้นจากนั้นทำงานเพื่อปรับปรุงการแก้ปัญหาของคุณจนกว่าคุณจะพอใจ จาก Kata One: "เป้าหมายของกะตะนี้คือการฝึกรูปแบบการทดสอบแบบจำลองที่อิสระมากขึ้นลองมองหาวิธีการจัดการปัญหาที่หลากหลายเท่าที่จะเป็นไปได้ลองพิจารณาข้อเสียต่าง ๆ ของแต่ละเทคนิคใช้เทคนิคใดในการสำรวจแบบจำลองเหล่านี้ บันทึกพวกเขาคุณจะตรวจสอบความถูกต้องของแบบจำลองได้อย่างไร? "
Mike Partridge

4
ฉันยอมรับว่าคำว่า 'กะตะ' นั้นไม่สมบูรณ์ แต่ไม่ได้มองเห็นจุดของพวกเขาเพราะชื่อ พวกมันไม่ใช่ปัญหาคำทั้งหมด จาก Kata Two: "ใช้รูทีนการค้นหาแบบไบนารี่ (โดยใช้ข้อมูลจำเพาะด้านล่าง) ในภาษาและเทคนิคที่คุณเลือกพรุ่งนี้ใช้อีกครั้งโดยใช้เทคนิคที่แตกต่างกันโดยสิ้นเชิงทำแบบเดียวกันในวันถัดไป implementations ของสับสับเปลี่ยน (ตัวอย่างเช่นวิธีแก้ปัญหาอาจเป็นวิธีการวนซ้ำแบบดั้งเดิมวิธีหนึ่งอาจจะวนซ้ำ recursive หนึ่งอาจใช้รูปแบบการทำงานผ่านชิ้นอาร์เรย์รอบ ๆ และอื่น ๆ ) "
Mike Partridge

3
@ MikePartridge ที่เป็นตัวอย่างของฉัน กะตะจะเกี่ยวข้องกับวิธีการหนึ่งของการค้นหาแบบไบนารีที่ปรับปรุงในแต่ละวันพูดด้วยบรรทัดน้อยลงหรือใช้เวลาน้อยลงในการเขียนตั้งแต่เริ่มต้น วิธีการอธิบายแนวคิดมีความสำคัญในการกำหนด เขาอาจเรียกมันว่าฝึกการเขียนโปรแกรมซึ่งเป็นบทความเกี่ยวกับโดยไม่นำสัมภาระที่ไม่ถูกต้องไปด้วย ความรับผิดชอบอยู่ที่ผู้เขียนที่จะเลือกคำและแนวคิดที่ถูกต้องกำหนดความคิดของเขาไม่บ่นว่าผู้ชมของเขาจะดึงความสัมพันธ์ที่ไม่ถูกต้องเนื่องจากการเลือกคำอุปมาของเขา
Spencer Rathbun

3
@ MikePartridge ในกรณีของฉันฉันเชื่อว่าโปรแกรมเมอร์ทุกคนกำลังเรียนรู้ / พัฒนาหรือควรจะเป็นตลอดเวลา ดังนั้นรหัสกะตะเป็นเทคนิคที่ช่วยในการบรรลุเป้าหมายนี้และคำตอบของฉันคือเทคนิคที่ฉันเห็นมันไม่คุ้มค่า ฉันเห็นด้วยกับเป้าหมายอย่างสมบูรณ์ แต่นั่นไม่ใช่คำถาม
Spencer Rathbun

11

จากมุมมองของฉันข้อเสียเปรียบหลักก็คือมันน่าเบื่ออย่างน่ากลัว โปรแกรมเมอร์ดูเหมือนจะประสบความสำเร็จในการพัฒนาซอฟต์แวร์ที่ทำสิ่งที่มีประโยชน์หรือยอดเยี่ยม ดูเหมือนว่ารหัสกะตะจะเป็นสิ่งที่ตรงกันข้าม


2
Katas สอนสิ่งใหม่ให้คุณ นั่นจะเป็นสิ่งที่ตรงกันข้ามกับโปรแกรมเมอร์ที่ตั้งใจจะทำอย่างไร? นอกจากนี้ยังเป็นการไขปริศนาไม่ใช่สิ่งที่นักเขียนโปรแกรมส่วนใหญ่จะมองว่า“ น่าเบื่อ” อันที่จริงนี่คือหัวใจของการแฮ็ค
Konrad Rudolph

4
@ KonradRudolph ฉันคิดว่าการซ้ำซากเป็นหัวใจของกาตะ? ดังนั้นคุณจะแก้ปัญหาหนึ่งครั้ง (อาจจะใหม่และน่าตื่นเต้น) แต่จากนั้นคุณก็จะแก้ปัญหาเดิมซ้ำแล้วซ้ำเล่า ฉันเพิ่งดู Katas แทบจะไม่ผิดเลย
Kevin D

@ เควินฉันเห็นด้วยว่ามันฟังดูโง่ (เว้นแต่คุณจะพยายามหาวิธีการแก้ปัญหาที่แตกต่างกัน) ฉันไม่เคยทำ“ katas” เช่นนี้เป็นเพียงแค่เกมไขปริศนาทั่วไป
Konrad Rudolph

ทำสิ่งเดียวกันซ้ำแล้วซ้ำอีก "สอนสิ่งใหม่ให้คุณ" อย่างไร

คำตอบของคุณชัดเจนว่าคุณไม่ได้อ่านลิงก์ที่ให้ไว้ในคำถาม
Mike Partridge

8

กะตะหมายถึงสิ่งที่ตรงข้ามกับสิ่งที่คุณควรพยายาม

การออกกำลังกายประกอบด้วยลำดับของการเคลื่อนไหวเฉพาะของศิลปะการต่อสู้ที่ใช้ในการฝึกอบรมและออกแบบมาเพื่อแสดงทักษะในเทคนิค

ระยะกะตะ (แหล่งกำเนิดสินค้า: 1950-55; <ญี่ปุ่น: รูปร่างรูปแบบ) ที่ใช้ในศิลปะการต่อสู้และคำถามของคุณเกี่ยวกับการท่องจำของหน่วยความจำของกล้ามเนื้อเช่นการพิมพ์แบบสัมผัส

ในคาราเต้เด็กดั้งเดิมแว็กซ์รถยนต์ขัดพื้นทาสีรั้วเหล่านี้คือ Katas ทั้งหมดที่ได้รับการสอนนอกบริบทและในกรณีนี้โดยไม่มีคำอธิบายเพียงเพื่อให้ความจำของกล้ามเนื้อ มันไม่ได้จนกว่าอาจารย์จะเข้ามาและให้บริบทกิจกรรมกลวงที่พวกเขาหมายถึงอะไร

ผมคิดว่าสิ่งเดียวกันกับที่นี่ได้โดยไม่ต้องให้คำปรึกษาที่จะนำสิ่งที่อยู่ในบริบทใหม่ในการแก้ปัญหาการทำผิดในหลายภาษาจะไม่ดีกว่าหนึ่งเดียว หากไม่มีผู้ให้คำปรึกษาจะบอกให้คุณทราบว่าต้องปรับปรุงที่ไหนพวกเขาจะเสียเวลา

มันเป็นสิ่งที่ตรงกันข้ามกับการแก้ปัญหาอย่างสร้างสรรค์โดยการเรียนรู้รูปแบบใหม่ของสำนวนและความหมายของภาษาหรือแพลตฟอร์ม

หากคุณต้องการที่จะพิมพ์System.out.println()ได้อย่างง่ายดายที่สุดเท่าที่จะเป็นไปได้ให้ฝึกฝึกที่จะเป็นกะตะ

หากคุณต้องการที่จะปรับปรุงวิธีการแก้ปัญหาในที่ที่แตกต่างกันการดำเนินการเพื่อลดเวลาและ / หรือความต้องการพื้นที่หรือใช้หลักการสำนวนอื่น ๆ ที่ยังไม่เปิดไม่ได้สิ่งที่กะตะจะช่วยให้คุณมี

มีคำศัพท์อุตสาหกรรมที่ได้รับการยอมรับสำหรับการนำสิ่งเดียวกันซ้ำไปซ้ำมาหลังจากที่มันได้ทำงานอย่างหนักเพื่อการปรับปรุงที่เพิ่มขึ้นเล็กน้อยและผลประโยชน์ที่น่าสงสัยของความสมบูรณ์แบบนั้นเรียกว่าการชุบทอง !

คำศัพท์ที่ควรใช้คือRefactoringเมื่อใช้กับภาษา / รันไทม์ / แพลตฟอร์มเดียวกัน และพอร์ตเมื่อย้ายโปรแกรมทำงานไปยังภาษา / รันไทม์ / แพลตฟอร์มอื่น กะตะอาจได้รับการเลือกอย่างพิถีพิถันเพราะฟังดูทันสมัยเท่ห์และลึกลับโดยที่ไม่เข้าใจความหมายทั้งหมด

การแก้ปัญหาที่ยากต่าง ๆ ด้วยการวางแผนประสบการณ์หรือคำแนะนำเล็ก ๆ น้อย ๆ คือสิ่งที่นักพัฒนาส่วนใหญ่โดยเฉพาะนักพัฒนารุ่นเยาว์ต้องทำทุกวัน

นักวิชาการเท่านั้นที่จะทำแบบฝึกหัดเดียวกันซ้ำแล้วซ้ำอีกเพียงเพื่อแก้ปัญหาเฉพาะ ทักษะในการมีอาชีพที่ประสบความสำเร็จในฐานะนักพัฒนานั้นอยู่ในการปรับตัวไม่ใช่การทำซ้ำ

ใครบอกว่าไม่มีคนฉลาดที่ไม่ต้องเรียนหลังเลิกงานและสามารถเรียนรู้ทุกสิ่งที่จำเป็นต้องรู้และบางครั้งในเวลาทำงาน 8 ชั่วโมง?


จะเกิดอะไรขึ้นถ้าสิ่งที่คุณฝึกกำลังออกแบบใหม่และปรับปรุงการออกแบบ - ทำซ้ำขั้นตอนการออกแบบคำนั้นใช้ไม่ได้ คุณจะได้สิ่งที่ดีกว่าได้หรือไม่?
Bill K

ระยะเวลาสำหรับการออกแบบใหม่และการปรับปรุงระบบที่มีอยู่เป็นrefactoring (refactoring รหัสคือ "วินัยเทคนิคการปรับโครงสร้างร่างกายที่มีอยู่ของรหัสการเปลี่ยนแปลงโครงสร้างภายในของมันโดยไม่ต้องเปลี่ยนพฤติกรรมภายนอก") พวกเขาเลือกกะตะเพราะฟังดูดีและลึกลับโดยไม่เข้าใจความหมาย

คำว่า refactoring เป็นคำที่แตกต่างจากการฝึกฝนให้ดีในการรีฟิลเลอร์ ทุกคนสามารถสร้างรหัสซ้ำได้ซึ่งไม่ได้หมายความว่าพวกเขาทำได้ดีหรือได้รับการฝึกฝนในการตระหนักถึงโอกาสในการปรับเปลี่ยนที่ดี แม้ว่า "การฝึกหัดการปรับโครงสร้างใหม่" เป็นคำที่สืบเชื้อสายมาสำหรับมัน แต่ก็ไม่ได้แสดงความมุ่งมั่นที่กะตะทำดังนั้นฉันคิดว่ากะตะอาจจะเป็นทางเลือกที่ดีกว่าเล็กน้อยแม้ว่าฉันจะเปิดให้ทฤษฎีที่มีวลีที่ดีกว่า
Bill K

1
ที่จริงGold Plattingหมายถึง "... คุณสมบัติเพิ่มเติมหรือมากกว่านั้น" สิ่งที่คุณอธิบายดูเหมือนคล้ายกับการเพิ่มประสิทธิภาพก่อนกำหนดมากขึ้นแม้ว่าหลังจากข้อเท็จจริงแล้ว
Joshua Drake

5

ฉันยอมรับว่าคำอุปมา "กะตะ" อาจไม่ดีที่สุด กะตะในคาราเต้จะดำเนินการเพื่อวัตถุประสงค์ในการฝึกการเคลื่อนไหวที่เฉพาะเจาะจงต่อเนื่องจนกว่าจะสามารถดำเนินการได้อย่างไม่มีที่ติ, คมชัดและโดยอัตโนมัติ สิ่งนี้แปลได้ไม่ดีสำหรับกิจกรรมที่จำเป็นต้องใช้การคิดอย่างมีวิจารณญาณและความคิดสร้างสรรค์ (มันจะแปลดีกว่าที่จะพูดพิมพ์)

ที่กล่าวว่าความล้มเหลวของชื่อไม่ได้เป็นความล้มเหลวของกิจกรรม ข้อเสียเปรียบที่เป็นไปได้คืออะไรที่จะมีการฝึกบางสิ่งที่บางคนต้องการที่จะพัฒนาให้ดีขึ้น? ฉันคิดว่าอาจกล่าวได้ว่าเวลาที่ใช้ในการทำมันเป็นข้อเสียเปรียบจากมุมมองต้นทุนโอกาส แต่จริงๆแล้วเป็นการลงทุน ดังนั้นเวลาที่ใช้ในการฝึกฝีมือการพัฒนาซอฟท์แวร์คือผู้พัฒนาซอฟต์แวร์เนื่องจากเงินที่ใช้ไปกับหุ้นหรือพันธบัตรนั้นเป็นการประหยัดระยะยาว / นักลงทุน มันไม่ใช่ 'ข้อเสียเปรียบ' - เป็นเดิมพันของตาราง


3

คุณจะดีขึ้นด้วยการลองทำสิ่งที่ยากและไม่สามารถเข้าถึงได้ ท้าทายตัวเอง การทำ "รหัสกะตะ" ซ้ำ ๆ กันเหมือนแบบศิลปะการต่อสู้ไม่ได้ทำอย่างนั้น ฉันคิดว่ามันซบเซาความสามารถของคุณแทนที่จะช่วยผลักดันทักษะของคุณไปข้างหน้า

มีการใช้เป็นวิธีการฝึกครั้งแรก แต่มี จำกัด ฉันบอกให้คนใช้โปรเจ็กต์ออยเลอร์แทน ปัญหามากขึ้นและท้าทายมากขึ้น


การเขียนโปรแกรมเดียวกันซ้ำแล้วซ้ำอีกจะมีประโยชน์และน่าสนใจเช่นถ้าคุณใช้อัลกอริทึมที่แตกต่างกันและ / หรือในภาษาที่แตกต่างกันทุกครั้ง แต่อาจจะไม่ใช่กะตะ
9000

2
อ่านลิงก์ที่ให้ไว้ในคำถาม ความคิดไม่ใช่เรื่องไร้สาระซ้ำซากอย่างที่คุณคิดจากชื่อ
Mike Partridge

@ 9000 จริงๆแล้วนั่นเป็นวิธีที่ฉันเข้าใจ Code Katas มักใช้เมื่อเรียนรู้ภาษาใหม่หรือลองวิธีการใหม่ในการแก้ไขปัญหาที่ได้แก้ไขไปแล้ว
Joshua Drake

3

สำหรับฉันข้อเสียเปรียบหลักของเทคนิคอย่างที่ฉันเห็นมันคือการใช้เวลาอย่างคุ้มค่าที่สุด

คุณค่าการเรียนรู้ของแบบฝึกหัดนี้ก็เป็นที่น่าสงสัยเช่นกัน: เมื่อคุณทำอะไรมากกว่าจะได้ดีกว่าความคิดเห็นของผู้เชี่ยวชาญนั้นเป็นสิ่งจำเป็น หากไม่มีข้อเสนอแนะคุณภาพสูงคุณจะได้เรียนรู้บางสิ่งบางอย่างเช่นกัน แต่มีโอกาสที่จะเรียนรู้สิ่งผิดปกติได้เป็นอย่างดี

อย่าเข้าใจฉันผิดการฝึกฝนยังคงเป็นวิธีเดียวที่จะพัฒนาทักษะการเขียนโปรแกรมและกะตะเป็นรูปแบบการฝึกฝนที่แน่นอนที่สุด แต่นั่นก็คือการแก้ปัญหาการเขียนโค้ดการแข่งขันเขียนโครงการสนุก ๆ เรียนภาษาโปรแกรมใหม่ ๆ ท้ายที่สุดคุณต้องเลือกเทคนิคที่คุณรู้สึกสบายใจที่สุดและตรวจสอบให้แน่ใจว่าคุณมีแนวทางที่ชัดเจนตลอดทาง


คุณพบคำแนะนำได้อย่างไร ฉันกำลังดิ้นรนกับปัญหาเดียวกัน
CodeYogi

1

ฉันเชื่อว่าไม่มีรูปแบบของกะตะคุณจะไม่มีวันเป็นนักเขียนโค้ดที่ยอดเยี่ยม กะตะคือการปฏิบัตินั่นคือความหมายอย่างแท้จริง ยกตัวอย่างนี้: นักกีฬาคนหนึ่งบอกว่า "ฉันจะแสดงตัวและวิ่ง 100 เมตรประฝึกซ้อมด้วยสกรู" เสียงเหมือนกลยุทธ์ที่ชนะไหม มันเคยทำแบบนี้หรือไม่?

ฉันขอแนะนำให้ผู้คนอ่าน " Clean Coder " ของลุงบ็อบเขาเจาะลึกในหัวข้อ (และอื่น ๆ ) ของความเป็นมืออาชีพในด้านการเขียนโปรแกรม

โอ้และการโต้แย้งโต้แย้งว่าคุณไม่สามารถทำกะตะและเลี้ยงดูครอบครัวเป็นข้อแก้ตัว พูดจากประสบการณ์: เด็ก ๆ ไปนอนในบางจุด ...


3
coding! = วิ่ง 100 เมตรรีบเว้นเสียแต่ว่า 100 เมตรจะผ่านทุ่งเหมืองที่มีป่าไม้หนาทึบในวันหนึ่งและเหมืองข้าวที่เต็มไปด้วยนาข้าวในวันถัดไปและบึงที่เต็มไปด้วยงูพิษพิษในวันถัดไป ... กะตะเป็นคำผิดความหมาย

2
-1 การฝึกอบรมสามารถเกิดขึ้นได้แม้ในเวลาที่ต้องจ่าย (ไม่แน่ใจว่าทำไมผู้คนถึงลืมสิ่งนี้) ไม่ใช่ทุกอย่างล้วนเป็นงานที่บริสุทธิ์หรือการเรียนรู้ที่บริสุทธิ์
joshin4colours

@JarrodRoberson สถานการณ์ที่คุณเพิ่งบรรยายคือสิ่งที่ทหารทำในชีวิตประจำวัน ดังนั้นคุณเลือกการเปรียบเทียบที่ค่อนข้างแย่ ตรงไปตรงมาฉันควรจะมีความสุขสำหรับคนที่ทำงาน 9-5 แล้วกลับบ้านและหยุดเรียนเพราะมันทำให้ฉันได้เปรียบในการแข่งขัน
ThaDonook

3
มาร์ตินฟาวเลอร์เคยถามเกี่ยวกับการใช้เงินในการฝึกอบรมพนักงานของคุณ"คุณไม่กลัวเหรอถ้าคุณฝึกฝนพวกเขา และคำตอบของเขาคือ"ไม่ฉันกลัวถ้าฉันไม่ฝึกพวกเขาพวกเขาจะอยู่!" . ไม่ใช่นายจ้างทุกคนที่มองว่าการฝึกอบรมเป็นค่าใช้จ่าย แต่คนที่ดีมองว่าเป็นการลงทุน!

การแก้ปัญหาที่ยากต่างกันด้วยการวางแผนประสบการณ์หรือคำแนะนำเล็ก ๆ น้อย ๆ คือสิ่งที่นักพัฒนาส่วนใหญ่โดยเฉพาะนักพัฒนารุ่นเยาว์ต้องทำทุกวัน ฉันคิดว่ามันเป็นการเปรียบเทียบที่ค่อนข้างแม่นยำ นักวิชาการเท่านั้นที่จะทำแบบฝึกหัดเดียวกันซ้ำแล้วซ้ำอีกเพียงเพื่อแก้ปัญหาเฉพาะ ทักษะในการมีอาชีพที่ประสบความสำเร็จในฐานะนักพัฒนานั้นอยู่ในการปรับตัวไม่ใช่การทำซ้ำ ใครบอกว่าไม่มีคนฉลาดที่ไม่ต้องเรียนหลังเลิกงานและสามารถเรียนรู้ทุกสิ่งที่ต้องการและอื่น ๆ ใน 8 ชั่วโมง

1

การทำเฉพาะคาตะในบริบทศิลปะการต่อสู้นั้นไม่มีประโยชน์ ดังที่กล่าวไว้ก่อนหน้า katas เป็นท่าเต้นของการเคลื่อนไหวที่สอนคุณในรูปแบบ คุณรู้การเคลื่อนไหว แต่คุณไม่รู้ว่าจะใช้มันอย่างไร คุณไม่รู้ว่าสถานการณ์เหล่านั้นมีประโยชน์อย่างไร ถ้าคุณอยากจะทำอะไรที่เป็นประโยชน์กับพวกเขาที่คุณจำเป็นต้องใช้โปรแกรม (s) ซึ่งเป็นBunkai

ในบริบทซอฟต์แวร์รหัสกะตะจะเป็นอัลกอริทึมเครื่องมือรูปแบบการออกแบบหรือเทคโนโลยีอื่น ๆ รู้ดี แต่คุณจำเป็นต้องใช้มันเพื่อทำความเข้าใจ คุณต้องใช้มันในบริบทที่แตกต่างกันเพื่อให้เชี่ยวชาญจริง ๆ Bunkai จะเป็นสถานการณ์ที่เป็นรูปธรรมซึ่งกะตะหรือส่วนหนึ่งของกะตะนั้นมีประโยชน์

ฉันไม่เห็นอะไรผิดปกติกับวิธีการนี้เป็นอย่างไรเกี่ยวกับสิ่งที่เชี่ยวชาญ: เรียนรู้อะไรบางอย่างฝึกฝนเพิ่มรายละเอียดฝึกฝนเพิ่มรายละเอียดอื่น ๆ ฝึกฝน ฯลฯ


-1

การเขียนโปรแกรมเป็นภาพวาดหรือดนตรีอย่างศิลปะ เมื่อใครบางคนกลายเป็นนักดนตรีหรือศิลปินในราคาที่คุณสามารถบอกได้ว่าไม่มีแรงบันดาลใจการแสดงไม่คุ้มค่ากับเวลาของคุณ หากคุณเป็นศิลปะไม่มีอะไรสามารถหยุดคุณจากการฝึกฝนและปรับปรุงอย่างต่อเนื่อง - ทุกวันปรับแต่งเทคนิคเดียวสังเกตความแตกต่างที่คนส่วนใหญ่ไม่เคยเห็น

มีที่ว่างสำหรับคนที่มีความสุขในการเป็นนักดนตรีบาร์และนักวาดภาพบ้าน แต่พวกเขาก็มีพรสวรรค์ที่แตกต่างกันโดยสิ้นเชิง ฉันคิดว่าจิตรกรประจำบ้านส่วนใหญ่จะหัวเราะเยาะความคิดในการฝึกซ้อม แต่ฉันพนันได้เลยว่านักวาดภาพที่ทำวิจัยและฝึกเทคนิค - การจำงานของพวกเขาในฐานะศิลปะจะเป็นงานที่ดีกว่าอย่างเห็นได้ชัด .

บางคนจะรับรู้ถึงคุณค่าของการปฏิบัติบางอย่างเคยชิน สิ่งนั้นควรมีค่าหากคุณอยู่ในตำแหน่งที่จะประเมินและคุณกำลังมองหาคนที่สามารถสร้างงานศิลปะ (เอนโค้ดที่เรียบง่ายเข้าใจง่าย) และไม่ใช่แค่วิธีแก้ปัญหา

PS ฉันไม่ได้เรียกตัวเองว่าเป็นศิลปะที่ยอดเยี่ยมหรืออะไร - ฉันไม่ได้ทำกะตะกับปัญหาเชิงนามธรรม แต่ฉันรู้จักคุณค่าและฉันพยายามปรับโครงสร้างรหัสการผลิตของฉันอีกครั้ง


นักดนตรีที่ผ่านการฝึกอบรมมากเกินไปโดยเฉพาะอย่างยิ่งในทางลบอาจถูกครอบครองโดยความสมบูรณ์ทางทฤษฎีซึ่งเป็นอันตรายอย่างยิ่ง ต่ออาชีพในการพัฒนาซอฟต์แวร์ เพลงมีองค์ประกอบของการแสดงออกซอฟต์แวร์การเขียนโปรแกรมไม่มีสิ่งนี้ คุณสามารถโต้แย้งว่าผลิตภัณฑ์ของ Apple มีการแสดงออกนี้ แต่นั่นคือการแสดงออกการออกแบบรหัสไม่เคยเห็นหรือรับรู้โดยตรง ดนตรีและศิลปะนั้นคล้ายคลึงกับการพัฒนาซอฟต์แวร์ และคุณแสดงอคติต่อพนักงานปกสีน้ำเงินที่คุณคิดว่าพวกเขาไม่ภูมิใจในงานหรือเห็นคุณค่าในคุณภาพ

อย่าผสมการฝึกกับการฝึกฝน การฝึกฝนมากเกินไปนั้นแตกต่างจากการฝึกฝนมากเกินไปและหากคุณไม่คิดว่าระดับการแสดงออกในโค้ดของคุณจะเห็นได้ในเวลาส่งมอบและความเสถียรของรหัสฉันไม่รู้จริง ๆ ว่าเรามีพื้นฐานการสนทนาร่วมกัน
Bill K

ไม่สำคัญว่าฉันจะคิดอย่างไรฉันรู้ว่าลูกค้าส่วนใหญ่จะไม่ได้รับการยอมรับและใส่ใจเกี่ยวกับรหัสที่ประดิษฐ์ขึ้นมาอย่างประณีตและสวยงามเพียงใดเมื่อสร้างแอปพลิเคชั่นเกือบตลอดเวลา เช่นเดียวกับที่ประชากรส่วนใหญ่ไม่เคยกังวลกับคุณภาพเสียงและวิดีโอของ VHS และวิดีโอบนอินเทอร์เน็ตหรือเทปคาสเซ็ทที่มีการบีบอัดสูงและตอนนี้ mp3s ที่ถูกบีบอัดสูงซึ่งจะลบความแตกต่างทั้งหมดโดยไม่มีการร้องเรียนใด ๆ การฝึกฝนมากเกินไปนั้นแย่กว่าการฝึกฝนมากเกินไปการฝึกฝนมากเกินไปทำให้ใครคนหนึ่งมองข้าม "ดีพอ" และน่าสังเวชในอุตสาหกรรมซอฟต์แวร์

การเขียนโปรแกรมเป็นงานฝีมือไม่ใช่ศิลปะ มีระดับของงานฝีมือและความสวยงามให้กับทั้งสอง แต่ศิลปะไม่ใช่อาชีพในการพัฒนาซอฟต์แวร์ธรรมชาติเป็นอาชีพ ผู้คนจำนวนมากทำซอฟต์แวร์เขียนเงินมากกว่าศิลปินในระยะเวลาอันสั้น ซอฟแวร์ไม่ได้เป็นอัตนัยและไม่ได้มีอยู่เพียงเพื่อประโยชน์ของตัวเองภาพวาดและดนตรีที่มีอยู่เพื่อโปรดผู้สร้างบ่อยกว่าไม่เป็นคำจำกัดความของการขายของคุณข้างต้นแสดงถึงความแตกต่าง ในฐานะคนที่ไปมหาวิทยาลัยศิลปะฉันสามารถบอกคุณได้ว่าการเขียนโปรแกรมเป็นงานฝีมือและไม่เกี่ยวข้องกับการสร้างงานศิลปะ

หากคุณไม่คิดว่าซอฟต์แวร์ที่ผลิตได้ดีจะถูกส่งมอบเร็วกว่าราคาถูกกว่าและดีกว่าซอฟต์แวร์ที่ผลิตโดยช่างฝีมือคุณจะไม่เห็นว่ามันถูกต้อง ไม่มากนักมีกี่คนที่ได้ดูศิลปินต้นแบบนักดนตรีหรือเล่นกับ / กับผู้เล่นกีฬามืออาชีพ - พวกเขาก็ไม่ได้เป็นแบบนั้นและในอุตสาหกรรมของเราก็จำยาก แต่ความแตกต่างของความสามารถก็เหมือนกัน ตามผลลัพธ์ ศิลปินคนหนึ่งสามารถทำได้ดีกว่าช่างฝีมือ 5 คนด้วยความเร็วและคุณภาพ แต่มีน้อยคนที่โชคดีพอที่จะเห็นว่าพวกเขาไม่เชื่อว่ามันมีอยู่จริง
Bill K
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.