ฉันทำงานเป็นตัวแทน / ผู้จัดการการเช่าสำหรับ บริษัท รถเช่าที่ใช้ระบบเช่าซึ่งเขียนขึ้นในปี 1972 ฉันตัดสินใจว่าอาจถึงเวลาสำหรับการอัพเดท สำหรับพื้นหลังเล็กน้อยนี่คือตัวอย่างสั้น ๆ ของความบ้าคลั่งที่เราต้องจัดการกับโปรแกรมนี้ทุกวัน:
ตัวแทนการเช่าต้องจำไว้ว่าการพิมพ์บนหน้าจอหนึ่งใช้ "MXC" ในฟิลด์ ACT (ทุกอย่างอิงตามรหัสย่อ) ซึ่งย่อมาจาก "MaXimum display on a contract" ในขณะที่อีกหน้านั้นต้องใช้ PR (for PRint) ใน ฟิลด์ ACTION แต่หน้าจอหลายจอใช้ Y ในฟิลด์ PT (สำหรับ PrinT) แต่หน้าจออื่นใช้ Y ในฟิลด์ PRT (สำหรับ PRinT) แต่หน้าจออื่นต้องการให้ผู้ใช้กด Enter (แต่ไม่ใช่การป้อนถัดจาก ตัวอักษรเนื่องจากเป็นอักขระบรรทัดใหม่นั้นจะต้องป้อนบนแป้นตัวเลข) และจากนั้น F8 หน้าจออื่นที่เกี่ยวข้อง แต่ต้องใช้เพียง F8 หน้าจอบางหน้ามีเขตข้อมูล PRT ซึ่งควรเป็น PRINT แต่ฟิลด์จริง ๆ ไม่ทำอะไรเลยและการพิมพ์จะดำเนินการโดยอัตโนมัติหลังจากผ่านการแจ้งเตือนหลายครั้งและยังมีหน้าจอเพิ่มเติมอีกจำนวนหนึ่งที่มีฟิลด์ชื่อ PRINT Y / Nซึ่งเริ่มต้นที่ Y อย่างบ้าคลั่งสำหรับการดำเนินงานที่มีสถานที่อื่นอยู่แล้วส่งมอบเอกสารและไปที่ N สำหรับการดำเนินงานที่ตัวแทนจำหน่ายอื่นจะต้องมีเอกสาร
ฉันตัดสินใจว่าฉันสามารถทำงานได้ดีกว่านี้ดังนั้นฉันจึงตัดสินใจติดต่อบุคคลใน บริษัท ที่จะทำการตัดสินใจอัปเดตนี้ ในที่สุดฉันก็ไปถึงรองประธานฝ่ายไอทีซึ่งรับผิดชอบโปรแกรมนี้ ฉันได้รับข้อมูลเล็กน้อยจากเขาและเรียนรู้ว่า บริษัท รถเช่าของฉันมีโปรแกรมการเช่าที่เขียนในแอสเซมเบลอร์เมนเฟรมของไอบีเอ็มกับ COBOL นิด ๆ หน่อย ๆ เขาบอกว่าตอนนี้ไม่มีตำแหน่งเปิด แต่ฉันควร ส่งประวัติส่วนตัวของฉันต่อเขาทางอีเมล (ในกรณีที่มีข้อผิดพลาดเกิดขึ้น)
นี่ทำให้ฉันมีคำถาม
ที่แรกก็คือเทคนิค ด้วยแนวคิดของการปรับปรุงการบำรุงรักษาในอนาคตความคิดของฉันคือการเขียนใหม่ในภาษาระดับสูงกว่าภาษาแอสเซมบลี ประสบการณ์ของฉันอยู่ใน C ++ ดังนั้นนั่นเป็นตัวเลือกที่ชัดเจนสำหรับฉัน บริษัท ต้องการวิธีที่ง่ายกว่าในการอัปเดตโปรแกรมเนื่องจากฉันเพิ่งอ่านบทความที่คนที่ฉันพูดด้วยอ้างว่าทีมทำงานหนักและพวกเขาภูมิใจที่จะประกาศว่าตอนนี้โปรแกรมสนับสนุน 5 - กำหนดรหัสสถานที่ (แทน 4) และหมายเลขรถยนต์ 8 หลัก (แทน 7) ปรัชญาของฉันเกี่ยวกับการปรับปรุงแม้ในสถานการณ์ที่เลวร้ายนี้สอดคล้องกับ Joel's: http://www.joelonsoftware.com/articles/fog0000000069.html โดยย่อการเขียนซ้ำควรเพิ่มขึ้นแทนที่จะละทิ้งทุกอย่างที่เคยมีมาก่อน และเริ่มต้นใหม่
มีวิธีที่ง่ายในการรวม IBM assembly เข้ากับ C ++ และถ้าเป็นเช่นนั้นฉันควรทำอย่างไร? ฉันตระหนักถึงคีย์เวิร์ด asm อย่างคลุมเครือ แต่ฉันไม่รู้ว่าควรใช้หรือทำอย่างอื่นดีที่สุด แผนดังกล่าวไม่ถูกต้องหรือไม่? ฉันทำงานส่วนใหญ่ของฉันบน Linux โดยใช้ g ++ และ GNU ทำดังนั้นคำตอบเฉพาะที่ยินดี แต่ไม่ต้องการแน่นอน (เนื่องจากฉันไม่รู้ว่าระบบการสร้างแบบไหนที่พวกเขาไม่มี แต่ฉันสงสัยว่าแทบจะไม่มีเลย)
คำถามที่สองคือเรื่องการเมืองมากกว่า ฉันจะไปโน้มน้าวใจ บริษัท นี้ว่าพวกเขาจำเป็นต้องทำการเปลี่ยนได้อย่างไร การประหยัดต้นทุนทางทฤษฎีมีขนาดใหญ่มาก (จากการประมาณการของฉัน บริษัท กำลังสูญเสียเงินเพิ่มอีกหนึ่งล้านเหรียญต่อปีเพียงแค่เพิ่มค่าฝึกอบรมเพื่อเรียนรู้วิธีโต้ตอบกับโปรแกรม) แต่การเปลี่ยนแปลงที่เสนอของฉันอาจทำให้ทุกอย่าง โปรแกรมเมอร์ปัจจุบันไม่ทำงานพวกเขาควรได้รับตราดังนั้นจึงมีความต้านทานโครงสร้างที่ดีในการเปลี่ยนแปลง
แก้ไข: ฉันควรอธิบายว่าทำไมฉันถึงปรับเปลี่ยนสิ่งที่ บริษัท มีอยู่แล้วดูเหมือนจะเป็นทางออกที่ดีที่สุดสำหรับฉัน ฉันยังคงเปิดให้คำแนะนำอื่น ๆ เพราะนี่เป็นสัตว์ประหลาดของโปรแกรม ฉันไม่เคยมีงานเขียนโปรแกรมมาก่อนดังนั้นโปรดแก้ไขให้ฉันในการวิเคราะห์ที่ไม่ถูกต้องที่ฉันอาจได้รับ
ก่อนอื่นมีทางออกนอกชั้นวาง
จากการพูดคุยของฉันกับผู้จัดการระดับกลางสองสามคนเกี่ยวกับเรื่องแบบนี้หนึ่งในข้อกังวลหลักของการเปลี่ยนไปใช้ระบบใหม่คือพนักงานภักดีจำนวนมากที่อยู่กับ บริษัท มานานหลายสิบปีและสะดวกสบายกับระบบในตอนนี้ . หากฉันมีความสามารถในการปรับเปลี่ยนสิ่งที่เรามีฉันสามารถรักษาอินเทอร์เฟซปัจจุบันใน 'โหมดความเข้ากันได้' ผู้ใช้ต้องเข้าสู่ระบบเพื่อใช้ระบบปัจจุบันดังนั้นฉันสามารถเพิ่มความสามารถในการเปิดใช้งานการตั้งค่าเมื่อผู้ใช้เข้าสู่ระบบเป็นครั้งแรก (หลังจากที่ฉันทำการเปลี่ยนแปลงนี้) ซึ่งพวกเขาจะได้รับตัวเลือกในการใช้งาน อินเทอร์เฟซ 'คลาสสิค' หรืออินเทอร์เฟซ 'ใหม่' ไม่มีวิธีที่ฉันจะหาวิธีแก้ปัญหาแบบ off-the-shelf ที่อนุญาต
บริษัท ของฉันเป็นเจ้าของซอฟต์แวร์ที่เราใช้ เราไม่อนุญาตให้ใช้งาน ซึ่งหมายความว่าการจัดการที่ฉันกำลังพูดถึงอยู่ในขณะนี้เป็นคนเดียวกันที่สามารถอนุญาตให้ฉันทำการเปลี่ยนแปลง ด้วยโซลูชันของบุคคลที่สามฉันจะต้องได้รับการอนุมัติจาก บริษัท ของฉันนอกเหนือจากการรักษาสิทธิ์ใด ๆ ก็ตามที่จำเป็นสำหรับ บริษัท ที่พัฒนาผลิตภัณฑ์ที่เราใช้ซึ่งจะเพิ่มอุปสรรค์เพิ่มเติม สิ่งนี้จะต้องโน้มน้าวใจให้ บริษัท เลิกใช้ผลิตภัณฑ์ "ของพวกเขา" และรับผลิตภัณฑ์อื่น ๆ ซึ่งดูเหมือนจะเป็นอุปสรรค์ที่ยิ่งใหญ่กว่าการพยายามอัปเดตสิ่งที่เรามี แต่ฉันอาจทำผิดในเรื่องนี้ได้เป็นอย่างดี
ในที่สุดเมื่อมองไปในอนาคตฉันไม่เพียงต้องการปรับปรุงส่วนติดต่อผู้ใช้และแก้ไขข้อบกพร่องบางอย่าง หลังจากฉันอัปเดตปัญหา 'เร่งด่วน' เหล่านั้นฉันหวังว่าจะอัปเดตวิธีพื้นฐานที่ บริษัท ดำเนินงานเกี่ยวกับเทคโนโลยี หลังจากใช้เวลา 1-2 ปีกับปัญหาเหล่านี้ฉันวางแผนที่จะกลับไปที่การจัดการและเสนอการเปลี่ยนแปลงที่น่าทึ่งมากขึ้น มีหลายวิธีที่ บริษัท จะดำเนินการซึ่งสามารถปรับปรุงให้ดีขึ้นได้ด้วยเทคโนโลยีที่พวกเขาไม่ได้ใช้ในตอนนี้ ตัวอย่างเช่นแต่ละภูมิภาคใช้วิธีเดียวกัน สนามบินหลักในท้องถิ่นเป็นศูนย์กลางในการจัดจำหน่ายรถยนต์ โดยส่วนใหญ่จะถูกส่งตามความจำเป็น อย่างไรก็ตามสนามบินถูกใช้เป็นฐานในการดำเนินการทั้งหมด พวกเขาจะส่งคนสองคนในรถคันเดียวไปยังสถานที่ของฉันเพื่อรับรถหนึ่งคันจากเราที่เราไม่ต้องการ จากนั้นกลับไปที่สนามบินด้วยรถที่พวกเขาเข้ามารวมถึงสิ่งที่พวกเขากำลังนำกลับไป (เราห่างจากสนามบิน 32 ไมล์) จากนั้นพวกเขาจะมาถึงสถานที่ห่างออกไป 5 ไมล์จากเราด้วยรถสองคันเพื่อส่งรถหนึ่งคันจากนั้นกลับรถอีกคันหนึ่งไปยังสนามบิน พวกเขาทำสิ่งนี้แม้ว่ารถที่เราส่งคืนเป็นรถประเภทเดียวกันที่พวกเขาต้องการใกล้เรา ฉันอยู่กับ บริษัท มาประมาณสองปีแล้วและฉันก็ดูเหมือนว่าพวกเขาจะเบี่ยงเบนไปจากสิ่งนี้ในสถานการณ์ฉุกเฉินที่รุนแรงที่สุดของการขาดแคลนรถยนต์ (ประมาณสามครั้ง) ฉันจะแทนที่คน 4 คนที่ทำงานในทุกภูมิภาคด้วยระบบตั้งเวลาอัตโนมัติที่กำหนดว่ารถจะไปไหนและลองค้นหาเส้นทางที่ต้องใช้เวลาน้อยที่สุด + ไมล์ + คนขับรถเพื่อส่งมอบรถยนต์ทุกคันที่พวกเขาต้องการ ตัวอย่างของการแก้ไขระดับที่สูงขึ้นฉันหวังว่าจะเพิ่มบางวัน
อย่างไรก็ตามก่อนที่ฉันจะรู้สึกสะดวกสบายที่จะเสนอสิ่งเหล่านี้ทั้งหมดฉันรู้สึกว่ามันจะมีประโยชน์มากหากคุณได้รับการสนับสนุนจาก บริษัท และฐานรหัส โซลูชันเช่นการเอาท์ซอร์สหรืออย่างอื่นจะลบความเป็นไปได้นี้
if (m_newInterface)
รหัสสปาเก็ตตี้อย่างรวดเร็วเริ่มปรากฏขึ้นทั่วฐานรหัส การแยกและการปรับโครงสร้างใช้เวลานานพอที่เมื่อเสร็จแล้วผู้ใช้ส่วนใหญ่ได้ย้ายไปยังอินเทอร์เฟซใหม่แล้ว (คิดว่าหลายปี)