ฉันทำงานกับทีมที่เติบโตจาก 2 นักพัฒนาเป็น 10 ในเวลาน้อยกว่าหนึ่งปี ฉันเป็นหมายเลข 3 และเป็นคนแรกที่เพิ่มปัญหามาตรฐานการเข้ารหัส นักพัฒนาดั้งเดิมสองคนทำงานเคียงข้างกันมาสองสามปีแล้วและพวกเขาก็นำมาตรฐานทั่วไปที่ดูเหมือนคนต่างด้าวมาให้ฉัน เราพบปัญหาเดียวกันกับที่คุณอธิบาย
สิ่งที่เราทำคือ:
มาตรฐานการเข้ารหัสงานวิจัย
เราใช้เวลาสองสามวันในการตรวจสอบโครงการโอเพ่นซอร์สที่จัดตั้งขึ้น เรารู้ว่าทีมจะขยายตัวอย่างรวดเร็วและเรากำลังมองหาวิธีการแก้ปัญหาที่แท้จริงจากโครงการจริงไม่ใช่แนวทางทั่วไป นอกจากนี้เราไม่ได้สนใจมาตรฐานการเข้ารหัสที่ดีที่สุด แต่สำหรับชุดของกฎและแนวทางที่เหมาะสมและไม่เรียกร้องให้มีการปรับฐานโค้ดทั้งหมดของเราอีกครั้ง เรากำลังมองหาการแฮ็กมาตรฐานการเข้ารหัสหากคุณต้องการ
พวกเราสามคนตัดสินใจว่ามาตรฐานการเข้ารหัสที่ดีที่สุดสำหรับโครงการ PHP ที่จัดตั้งขึ้นนั้นตามมาด้วย Zend Framework โชคดีที่คน Zend Framework ให้ครอบคลุมมากเอกสารมาตรฐานการเข้ารหัส
สร้างมาตรฐานการเข้ารหัสของเราเอง
แน่นอนว่าการใช้มาตรฐานการเข้ารหัสของโครงการอื่นในโครงการของเรานั้นไม่สมเหตุสมผล เราใช้เอกสาร Zend Framework เป็นแม่แบบ:
- ก่อนอื่นเราลบทุกอย่างที่ไม่เกี่ยวข้องกับโครงการของเรา
- จากนั้นเราเปลี่ยนทุกสิ่งที่เรามองว่าเป็นเรื่องของสไตล์ให้เป็นสไตล์ของเรา
- และในที่สุดเราก็เขียนทุกอย่างลง
ดังนั้นเราจึงมีเอกสารที่ค่อนข้างใหญ่อยู่ในมือของเราเก็บไว้ในวิกิแฟนซีของเรามันเป็นการอ่านที่ดีและตกลงกันโดยพวกเราทุกคน และไร้ประโยชน์อย่างสมบูรณ์ในตัวมันเอง
ปฏิบัติตามคำสัญญาของเรา
codebase ของเราในเวลานั้นประมาณ 1 * 10 ^ 6 sloc เรารู้ว่าเนื่องจากเราใช้มาตรฐานการเข้ารหัสที่เป็นทางการเราจึงต้องเริ่มปรับโครงสร้างรหัสของเราใหม่ แต่ในเวลานั้นเราได้รับผลกระทบจากปัญหาอื่น ๆ ดังนั้นเราจึงตัดสินใจปรับโครงสร้างห้องสมุดหลักของเราเพียง 5 * 10 ^ 3 sloc
เรามอบหมายให้หนึ่งในพวกเราเป็นหัวหน้ามาตรฐานการเข้ารหัส (เราใช้การดูหมิ่นท้องถิ่นแทนตำแหน่งอาจารย์ ) ด้วยความรับผิดชอบในการตรวจสอบและบังคับใช้มาตรฐาน เรารีไซเคิลบทบาททุก ๆ การวิ่ง ฉันเป็นคนแรกและมันก็เป็นงานที่ทำเยอะมาก
เรามีการสนทนาใหม่หลายครั้งและภาคผนวกเล็ก ๆ ของเอกสารต้นฉบับในระหว่างที่ฉันดำรงตำแหน่งและในที่สุดเราก็มีเอกสารที่ค่อนข้างคงที่ เราเปลี่ยนมันทุก ๆ ครั้ง แต่การเปลี่ยนแปลงเหล่านี้ส่วนใหญ่อยู่ในฟีเจอร์ใหม่ของภาษาเนื่องจาก PHP 5.3 เป็นรุ่นที่สำคัญในทุก ๆ ด้านยกเว้นชื่อ
จัดการกับคนใหม่
เมื่อคนใหม่มาถึงก็ถึงเวลาที่จะกำหนดมาตรฐานการเข้ารหัสของเราในการทดสอบ หลังจากการแนะนำเล็ก ๆ น้อย ๆ เกี่ยวกับ codebase ของเราเราขอให้เขาประเมินเอกสารมาตรฐานการเข้ารหัสของเรา เขาเกือบจะร้องไห้ ปรากฏว่าเขาทำทุกอย่างแตกต่างกัน
ในขณะที่ฉันเป็นหัวหน้ามาตรฐานการเข้ารหัสในขณะนั้นมันขึ้นอยู่กับฉันที่จะประเมินอินพุตของเขาและแก้ไขเอกสารตามนั้น ข้อเสนอของเขาคือ:
- เรื่องของสไตล์ส่วนตัว (ออกอย่างย่อ)
- มาตรฐานที่เหมาะสมกับพื้นหลัง Java ของเขา แต่ไม่มากกับ PHP (ถูกไล่ออก)
- อนุสัญญาที่เขาดำเนินการจากการเปิดเผยสั้น ๆ ของเขาด้วย PHP (บางคนถูกไล่ออก แต่มีหลายข้อพิสูจน์ที่ได้รับความนิยมว่าเราไม่เคยคิดหรือค้นพบในการวิจัยครั้งแรกของเรา)
ในอีกไม่กี่สัปดาห์ข้างหน้าเขาก็ได้รับมอบหมายงานง่าย ๆ : นำ codebase ของเราหลายส่วนให้ทันสมัยด้วยมาตรฐาน ฉันต้องเลือกชิ้นส่วนเหล่านั้นอย่างรอบคอบตามกฎสองสามข้อ:
- รหัสควรจะค่อนข้างง่ายสำหรับคนที่ไม่คุ้นเคยกับ codebase ของเรา (และ PHP โดยทั่วไป)
- รหัสควรเป็นสิ่งที่เขาได้รับการว่าจ้างให้ทำ
ฉันตรวจสอบกระบวนการของเขาและเขาก็ทำงานได้ดี เราระบุหลายส่วนของรหัสที่เป็นไปไม่ได้ที่จะพอดีกับเอกสารของเราและแก้ไขตามนั้น (รหัสและ / หรือมาตรฐานแล้วแต่จำนวนใดจะสมเหตุสมผล)
จากนั้นคนใหม่ก็มาถึง เราทำขั้นตอนนี้ซ้ำ (อาจารย์ต่างเวลานี้) และทำงานได้อีกครั้ง และอีกครั้ง.
สรุปแล้ว
- สร้างเอกสารมาตรฐานการเข้ารหัส แต่ตรวจสอบให้แน่ใจว่ามาตรฐานของคุณไม่ได้เป็นของคุณเอง แต่สะท้อนถึงมาตรฐานทั่วไปในชุมชนที่กว้างขึ้นของแพลตฟอร์มของคุณ
- กำหนดบทบาทที่คล้ายคลึงกับต้นแบบมาตรฐานการเข้ารหัสของเรา มีคนตรวจสอบรหัสใหม่อย่างน้อยและโดยเฉพาะอย่างยิ่งรหัสใหม่จากสมาชิกใหม่ รีไซเคิลบทบาทเพราะน่าเบื่ออย่างยิ่ง
- ประเมินอินพุตจากสมาชิกใหม่เสมอ ทบทวนมาตรฐานของคุณทุกครั้งหากเหมาะสม เอกสารมาตรฐานการเข้ารหัสของคุณควรมีการพัฒนา แต่อย่างช้าๆ คุณไม่ต้องการ refactor codebase ของคุณอีกครั้งในแต่ละการวนซ้ำ
- ให้เวลาสมาชิกใหม่แต่ละคนเรียนรู้และปรับตัวให้เข้ากับมาตรฐานและการประชุมของคุณ เรียนรู้โดยการทำงานได้ดีที่สุดในสถานการณ์เหล่านี้
- Wiki ทำงานมหัศจรรย์สำหรับเอกสารดังกล่าว
- ความคิดเห็นเกี่ยวกับรหัสทำงานได้อย่างมหัศจรรย์สำหรับทุกสถานการณ์!
เมื่อถึงจุดหนึ่งในกระบวนการแนะนำให้เราใช้ฮุกที่ทำล่วงหน้าเพื่อทำการตรวจสอบมาตรฐานโดยอัตโนมัติ เราตัดสินใจต่อต้านด้วยเหตุผลหลายประการมีการอภิปรายที่น่าสนใจเกี่ยวกับ StackOverflow เกี่ยวกับปัญหา:
บางตัวใช้เฉพาะ PHP แต่คำตอบนั้นใช้ได้กับทุกแพลตฟอร์ม