ฉันจะหาแบบฝึกหัดการออกแบบได้จากที่ไหน [ปิด]


16

ฉันรู้สึกว่ามันสำคัญที่จะต้องฝึกทักษะการแก้ปัญหาต่อไป การเขียนโปรเจคเล็ก ๆ ของฉันเป็นวิธีหนึ่ง แต่อีกวิธีหนึ่งคือการลองและแก้ไขปัญหาที่โพสต์ออนไลน์ มันง่ายที่จะหาแบบทดสอบการเขียนโปรแกรมที่น่าสนใจออนไลน์ที่ต้องใช้อัลกอริทึมที่ชาญฉลาดในการแก้ปัญหา - Project Eulerเป็นหนึ่งในตัวอย่างที่รู้จักกันดี

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

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

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


คำตอบ:


7

วิธีการเกี่ยวกับรหัสกะตะ ฉันทำสิ่งเหล่านี้ไปแล้วและพวกเขาก็สนุกที่จะทำและท้าทายพอที่จะเรียนรู้ได้เสมอ

ความคิดเห็นสำหรับกะตะแต่ละคนมักจะมีข้อมูลเพียงพอที่จะช่วยตอบทุกสิ่งที่คุณติดอยู่


อย่างแรกคือปัญหาการออกแบบ แต่ฉันมีความรู้สึกว่าคนอื่น ๆ ล้วนใช้โค้ดมากกว่า ฉันจะให้มันดูอีกขอบคุณ!
โอ๊ก

3

เริ่มต้นด้วยปัญหาออกแบบคลาสสิก: KWIC

David Parnasใช้ KWIC เป็นตัวอย่างในกระดาษคลาสสิกของเขาในโมดูล: ในเกณฑ์ที่จะใช้ในการย่อยสลายระบบเป็นโมดูลซึ่งทุกคนน่าจะอ่านทุกๆ 10 ปี

KWIC สำหรับคำสำคัญในบริบทเป็นปัญหาการจัดทำดัชนีและการเรียงลำดับอย่างง่าย ๆที่คุณอ่านในบรรทัดของข้อความจากนั้นหมุนแต่ละบรรทัดตามคำหลัก (เช่นไม่รวม "the", "with") เพิ่มแต่ละกะไป รายการคุณเรียงลำดับแล้ว แนวคิดคือการใช้ KWIC จะเป็นประโยชน์ในการสร้างดัชนีสำหรับหนังสือ ในช่วงเวลาของกระดาษคลาสสิกของเขา Parnas กล่าวว่าโปรแกรมเมอร์ที่มีประสบการณ์สามารถแก้ได้ใน 1-2 สัปดาห์ แต่กฎหมายของ Yannisระบุว่าขณะนี้สามารถทำได้ใน 1-2 ชั่วโมง [ระบบปฏิบัติการและไลบรารี่มาตรฐานนั้นดีขึ้นมาก]

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

หลังจากทราบตัวอย่างของ KWIC คุณจะสามารถชื่นชมเอกสารการออกแบบซอฟต์แวร์อื่น ๆ ที่ใช้งานได้ ตัวอย่างเช่นกระดาษของ Michael VanHilst Decoupling Change จาก Designใช้เพื่อแสดงเทคนิคการออกแบบที่น่าสนใจโดยใช้เทมเพลต C ++ และตราบใดที่เรากำลังพูดถึงแม่แบบและการออกแบบ c ++ อ่าน Czarnecki และ Eisenecker ของสังเคราะห์วัตถุกระดาษ

ย้ายจาก KWIC เป็นตัวอย่างคลาสสิกอื่น ๆ เช่นตัวอย่าง Spacewarซึ่งได้รับการ ported / ออกแบบใหม่ในภาษาต่างๆเช่นงูหลามและAspectJ

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


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

1

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


1

ฉันเห็นด้วย Katas และ Euler เป็นสิ่งที่ดีสำหรับการออกแบบอัลกอริทึมและฝึกการเขียนโค้ด - บางทีคุณสามารถขยายพวกเขาและเป็นความคิดสร้างสรรค์เล็กน้อยและออกแบบระบบรอบ ๆ ปัญหา

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

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

มันคือทั้งหมดที่เกี่ยวกับความคิดสร้างสรรค์และความสนุกสนาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.