ความรู้เบื้องต้นเกี่ยวกับรูปแบบการต่อต้าน
รูปแบบต่อต้านเป็นสิ่งที่ตรงกันข้ามกับรูปแบบ จำได้ว่ารูปแบบการออกแบบเป็นตัวอย่างของแนวทางปฏิบัติในการเขียนโปรแกรมที่ดี ซึ่งก็คือรูปแบบสำหรับการแก้ปัญหาบางอย่าง แต่รูปแบบการต่อต้านเป็นสิ่งที่ตรงกันข้ามอย่างสิ้นเชิง นั่นคือ รูปแบบของความผิดพลาดที่เกิดขึ้นเมื่อแก้ปัญหาต่างๆ
ส่วนหนึ่งของการฝึกเขียนโปรแกรมที่ดีคือการหลีกเลี่ยงรูปแบบต่อต้าน อย่าคิดว่านี่เป็นขยะทางทฤษฎีที่เข้าใจยาก - นี่เป็นปัญหาเฉพาะที่นักพัฒนาเกือบทุกคนพบเจอ ใครจะไปรู้ว่าเขามีอาวุธ!
มาดูรูปแบบการต่อต้านที่พบได้บ่อยในหมู่ผู้เริ่มต้น:
- ตัวเลขและสตริงวิเศษ
- ชั้นเทพ
- การเพิ่มประสิทธิภาพก่อนวัยอันควร
- การประดิษฐ์จักรยาน
- การประดิษฐ์จักรยานล้อเดียว
ตัวเลขและสตริงวิเศษ
เลขวิเศษคือค่าคงที่ที่ใช้ในรหัสสำหรับบางสิ่ง (ส่วนใหญ่มักจะเป็นการระบุข้อมูล) ซึ่งเป็นตัวเลขที่ไม่สมเหตุสมผลหากไม่มีความคิดเห็นที่สอดคล้องกัน ตัวเลขไม่มีความหมายใดๆ
เมื่อตัวเลขเริ่มปรากฏในโค้ดของโปรเจ็กต์ของคุณ ซึ่งความหมายไม่ชัดเจน นี่ถือว่าแย่มาก โปรแกรมเมอร์ที่ไม่ใช่ผู้เขียนโค้ดดังกล่าวจะมีปัญหาในการอธิบายวิธีการทำงาน เมื่อเวลาผ่านไปแม้แต่ผู้เขียนรหัสที่มีเลขวิเศษก็ไม่สามารถอธิบายได้
ตัวเลขทำให้โค้ดเข้าใจยากและปรับโครงสร้างใหม่ สาเหตุหลักของข้อผิดพลาดนี้คือความเร่งรีบในการพัฒนาและขาดการฝึกเขียนโปรแกรม รูปแบบต่อต้านนี้ควรถูกกำจัดโดยกำหนดการใช้ค่าคงที่ที่เป็นตัวเลขก่อนที่จะเริ่มการพัฒนา
ในการแก้ปัญหานี้ คุณต้องสร้างตัวแปรที่มีชื่ออธิบายจุดประสงค์ของค่าคงที่ที่เป็นตัวเลข และกำหนดค่าที่ต้องการให้กับตัวแปรนั้น
ชั้นเทพ
วัตถุศักดิ์สิทธิ์เป็นรูปแบบการต่อต้านที่พบได้ทั่วไปในหมู่นักพัฒนา OOP วัตถุดังกล่าวใช้ฟังก์ชันมากเกินไปและ / หรือเก็บข้อมูลเกือบทั้งหมด ด้วยเหตุนี้ เราจึงมีรหัสที่ไม่สามารถพกพาได้ ซึ่งยิ่งไปกว่านั้น ยังเข้าใจได้ยากอีกด้วย
นอกจากนี้โค้ดดังกล่าวยังดูแลรักษาค่อนข้างยาก เนื่องจากทั้งระบบขึ้นอยู่กับโค้ดนั้นเกือบทั้งหมด สาเหตุของข้อผิดพลาดนี้: ความสามารถของนักพัฒนา นักพัฒนารายหนึ่งทำงานเป็นส่วนใหญ่ (โดยเฉพาะอย่างยิ่งเมื่อปริมาณงานเกินระดับประสบการณ์ของนักพัฒนารายนั้น)
จำเป็นต้องจัดการกับแนวทางนี้โดยแบ่งงานออกเป็นงานย่อยที่นักพัฒนาที่แตกต่างกันสามารถจัดการได้
การเพิ่มประสิทธิภาพก่อนวัยอันควร
การเพิ่มประสิทธิภาพก่อนเวลาอันควรคือการปรับให้เหมาะสมที่ดำเนินการก่อนที่โปรแกรมเมอร์จะมีข้อมูลทั้งหมดที่จำเป็นในการตัดสินใจอย่างรอบรู้เกี่ยวกับสถานที่และวิธีดำเนินการ
ในทางปฏิบัติเป็นเรื่องยากที่จะคาดการณ์ว่าคอขวดจะเกิดขึ้นที่ใด ความพยายามที่จะเพิ่มประสิทธิภาพก่อนที่จะได้รับผลลัพธ์เชิงประจักษ์จะนำไปสู่ความซับซ้อนของโค้ดและการปรากฏตัวของข้อผิดพลาด แต่จะไม่ก่อให้เกิดประโยชน์ใดๆ
จะหลีกเลี่ยงได้อย่างไร? ขั้นแรก เขียนโค้ดที่สะอาด อ่านได้ และใช้งานได้โดยใช้อัลกอริทึมและเครื่องมือที่เป็นที่รู้จักและผ่านการพิสูจน์แล้ว หากจำเป็น ให้ใช้เครื่องมือโปรไฟล์เพื่อค้นหาคอขวด พึ่งพาการวัด ไม่ใช่การเดาและการสันนิษฐาน
ตัวอย่างและคุณสมบัติ
แคชก่อนทำโปรไฟล์ การใช้ฮิวริสติกที่ซับซ้อนและไม่ได้รับการพิสูจน์แทนอัลกอริทึมที่ถูกต้องทางคณิตศาสตร์ การเลือกเฟรมเวิร์กใหม่ที่ยังไม่ได้ทดสอบซึ่งอาจทำงานผิดปกติภายใต้การโหลด
ความยากลำบากคืออะไร
ไม่ใช่เรื่องง่ายที่จะระบุว่าการเพิ่มประสิทธิภาพเกิดขึ้นก่อนเวลาอันควรเมื่อใด สิ่งสำคัญคือต้องปล่อยให้มีที่ว่างสำหรับการเติบโตล่วงหน้า คุณต้องเลือกโซลูชันและแพลตฟอร์มที่ช่วยให้คุณเพิ่มประสิทธิภาพและเติบโตได้อย่างง่ายดาย นอกจากนี้ บางครั้งการเพิ่มประสิทธิภาพก่อนกำหนดยังใช้เป็นข้อแก้ตัวสำหรับโค้ดที่ไม่ถูกต้อง ตัวอย่างเช่น พวกเขาใช้อัลกอริทึม O(n2) เพียงเพราะว่าอัลกอริทึมจะเป็น O(n) ที่ยากกว่า
การประดิษฐ์จักรยาน
ความหมายของรูปแบบการต่อต้านนี้คือโปรแกรมเมอร์พัฒนาวิธีแก้ปัญหาของตนเองสำหรับปัญหาที่มีวิธีแก้ปัญหาอยู่แล้ว และมักจะประสบความสำเร็จมากกว่า
นักพัฒนาคิดว่าตัวเองฉลาดกว่า ดังนั้นเขาจึงพยายามคิดวิธีแก้ปัญหาของตัวเองสำหรับแต่ละงาน แม้ว่าคนรุ่นก่อนจะมีประสบการณ์มาแล้วก็ตาม บ่อยครั้งที่สิ่งนี้นำไปสู่การเสียเวลาและประสิทธิภาพของโปรแกรมเมอร์ลดลง ท้ายที่สุดแล้ว วิธีแก้ปัญหามักจะไม่ดีที่สุดหากพบเลย
แน่นอน คุณไม่สามารถละทิ้งความเป็นไปได้ของโซลูชันอิสระได้อย่างสมบูรณ์ เนื่องจากสิ่งนี้จะนำไปสู่การคัดลอกและวางโปรแกรมโดยตรง นักพัฒนาจะต้องสำรวจงานที่อาจปรากฏต่อหน้าเขาเพื่อที่จะแก้ไขได้อย่างมีประสิทธิภาพโดยใช้โซลูชันสำเร็จรูปหรือประดิษฐ์ขึ้นเอง
บ่อยครั้งที่สาเหตุของรูปแบบต่อต้านนี้คือการไม่มีเวลา และเวลาคือเงิน
การประดิษฐ์จักรยานล้อเหลี่ยม
รูปแบบการต่อต้านนี้มีความเกี่ยวข้องอย่างใกล้ชิดกับการประดิษฐ์วงล้อขึ้นมาใหม่ - สร้างวิธีแก้ปัญหาที่ไม่ดีของคุณเองเมื่อมีวิธีแก้ปัญหาที่ดีกว่า
การต่อต้านรูปแบบนี้ใช้เวลาสองเท่า: ครั้งแรก ใช้เวลาไปกับการคิดค้นและใช้งานโซลูชันของคุณเอง จากนั้นจึงไปกับการรีแฟกเตอร์ใหม่หรือเปลี่ยนใหม่
โปรแกรมเมอร์จะต้องตระหนักถึงการมีอยู่ของโซลูชันที่หลากหลายสำหรับงานบางช่วง โดยได้รับคำแนะนำจากข้อดีและข้อเสีย
ปัญหาทั้งหมดที่คุณต้องเผชิญในฐานะโปรแกรมเมอร์สามารถแบ่งออกเป็นสองส่วน:
- คนฉลาดแก้ปัญหานี้เมื่อ 30 ปีที่แล้ว
- คนฉลาดแก้ปัญหานี้เมื่อ 50 ปีก่อน
ปัญหาการ เขียนโปรแกรมส่วนใหญ่ได้รับการแก้ไขสำเร็จก่อนที่คุณจะเกิดด้วยซ้ำ ไม่จำเป็นต้องคิดค้นอะไร - เพียงแค่ศึกษาประสบการณ์ของผู้อื่น (นี่คือสิ่งที่หนังสือเขียนขึ้น)
ในปี 2022 เราสามารถฉลองวันเกิดได้ดังต่อไปนี้:
- ภาษาโปรแกรม
- ภาษา C อายุครบ 50 ปี (พ.ศ. 2515)
- ภาษา Java มีอายุครบ 27 ปี (พ.ศ. 2538)
- Python อายุครบ 31 ปี (พ.ศ. 2534)
- การเชื่อมต่อ
- อินเทอร์เน็ตอายุครบ 39 ปี (พ.ศ. 2526)
- โทรศัพท์มือถือมีอายุครบ 49 ปี (พ.ศ. 2516)
- SMS แรกถูกส่งเมื่อ 30 ปีที่แล้ว (พ.ศ. 2535)
- รูปแบบ
- รูปแบบ MVC เปลี่ยนเป็น 44 (1978)
- SQL ถูกประดิษฐ์ขึ้นเมื่อ 48 ปีก่อน (พ.ศ. 2517)
- Java Beans ถูกประดิษฐ์ขึ้นเมื่อ 26 ปีที่แล้ว (พ.ศ. 2539)
- ห้องสมุด
- ไฮเบอร์เนตถูกประดิษฐ์ขึ้นเมื่อ 21 ปีก่อน (พ.ศ. 2544)
- สปริงถูกประดิษฐ์ขึ้นเมื่อ 20 ปีก่อน (พ.ศ. 2545)
- Tomcat เปิดตัวเมื่อ 23 ปีที่แล้ว (1999)
- ระบบปฏิบัติการ
- Unix เปิดตัวเมื่อ 51 ปีก่อน (พ.ศ. 2514)
- Windows มองเห็นแสงสว่างเมื่อ 37 ปีก่อน (พ.ศ. 2528)
- Mac OS เปิดตัวเมื่อ 21 ปีที่แล้ว (2544)
และสิ่งเหล่านี้ไม่ได้ถูกคิดค้นขึ้นเพียงอย่างเดียว แต่ได้รับการพัฒนาขึ้นเพื่อเป็นวิธีแก้ปัญหาที่พบได้บ่อยและมีความเกี่ยวข้องในเวลานั้น
GO TO FULL VERSION