ความรู้เบื้องต้นเกี่ยวกับรูปแบบการต่อต้าน

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

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

มาดูรูปแบบการต่อต้านที่พบได้บ่อยในหมู่ผู้เริ่มต้น:

  • ตัวเลขและสตริงวิเศษ
  • ชั้นเทพ
  • การเพิ่มประสิทธิภาพก่อนวัยอันควร
  • การประดิษฐ์จักรยาน
  • การประดิษฐ์จักรยานล้อเดียว

ตัวเลขและสตริงวิเศษ

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

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

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

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

ชั้นเทพ

วัตถุศักดิ์สิทธิ์เป็นรูปแบบการต่อต้านที่พบได้ทั่วไปในหมู่นักพัฒนา 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)

และสิ่งเหล่านี้ไม่ได้ถูกคิดค้นขึ้นเพียงอย่างเดียว แต่ได้รับการพัฒนาขึ้นเพื่อเป็นวิธีแก้ปัญหาที่พบได้บ่อยและมีความเกี่ยวข้องในเวลานั้น