John Backus นำโครงการ FORTRAN ที่ IBM แสดงให้เห็นว่าโค้ดระดับสูงยังรันได้รวดเร็ว—เพิ่มผลผลิตและช่วยให้ซอฟต์แวร์เติบโตเป็นอุตสาหกรรมจริง

ในต้นทศวรรษ 1950 คอมพิวเตอร์ยังเป็นเครื่องหายากและแพง ใช้กันในรัฐบาล มหาวิทยาลัย และบริษัทใหญ่ พลังของมันมากในยุคนั้น—แต่การเขียนโปรแกรมช้ามาก หลายโปรแกรมถูกเขียนโดยตรงเป็นรหัสเครื่องหรือแอสเซมบลี ที่ซึ่งทุกคำสั่งต้องสอดคล้องกับชุดการทำงานเล็ก ๆ ของฮาร์ดแวร์ การเปลี่ยนสูตรเพียงเล็กน้อยอาจหมายถึงการต้องเขียนส่วนยาว ๆ ใหม่ และความผิดพลาดเพียงครั้งเดียวอาจทำให้การรันทั้งหมดพังหลังจากรอเป็นชั่วโมง
John Backus เป็นวิศวกรที่ IBM ซึ่งเห็นแล้วว่ามนุษย์เสียเวลามากกับการเขียนโค้ดระดับต่ำ เขานำทีมเล็ก ๆ มาลองทำสิ่งที่กล้าพอสมควร: ให้โปรแกรมเมอร์เขียนคำสั่งที่มีคณิตศาสตร์หนัก ๆ ในรูปแบบที่ใกล้กับวิธีคิด จากนั้นให้คอมไพเลอร์แปลเป็นรหัสเครื่องที่เร็ว
โครงการนั้นกลายเป็น FORTRAN (ย่อมาจาก “Formula Translation”) มุ่งเป้าลูกค้าทางวิทยาศาสตร์ของ IBM—พวกที่ทำงานเชิงตัวเลข ไม่ใช่งานเก็บข้อมูลเชิงธุรการ คำสัญญานั้นตรงไปตรงมา: เขียนโค้ดน้อยลง ข้อบกพร่องน้อยลง และยังรันได้เร็วบนเครื่องอย่าง IBM 704
ในเวลานั้น โปรแกรมเมอร์หลายคนเชื่อว่าภาษาระดับสูงเป็นความหรูหรา พวกเขาคิดว่าสิ่งที่ "คล้ายภาษาอังกฤษ" จะช้ากว่าการเขียนแอสเซมบลีที่ปรับจูนด้วยมือเกินไป กับราคาของคอมพิวเตอร์ที่แพงและเวลาเครื่องที่ถูกจำกัด ประสิทธิภาพไม่ใช่แค่อยากได้ มันคือเรื่องหลัก
ดังนั้น FORTRAN ไม่ใช่แค่ไวยากรณ์ใหม่ แต่มันคือเดิมพันว่าการอัตโนมัติจะเทียบเท่าทักษะของมนุษย์: ว่าคอมไพเลอร์สามารถสร้างโค้ดที่ดีพอให้เหล่านักวิทยาศาสตร์และวิศวกรมั่นใจได้
เรื่องราวของ FORTRAN เป็นทั้งก้าวหน้าทางเทคนิคและการเปลี่ยนแปลงทางวัฒนธรรม ต่อไปเราจะดูว่าการเขียนโปรแกรมเป็นอย่างไรก่อนยุคภาษาระดับสูง ทีมของ Backus สร้างคอมไพเลอร์ที่สู้กับโค้ดที่เขียนด้วยมือได้อย่างไร และทำไมความสำเร็จนั้นจึงเปลี่ยนเศรษฐศาสตร์ของซอฟต์แวร์—ตั้งรูปแบบที่ทีมสมัยใหม่ยังคงใช้มาจนถึงวันนี้
ก่อน FORTRAN “การโปรแกรม” มักหมายถึงการเขียนคำสั่งในคำศัพท์ของเครื่องเอง หรืออย่างมากที่สุดก็คือสิ่งที่เป็นมิตรขึ้นเล็กน้อย
คอมพิวเตอร์ยุคแรกทำงานตามรหัสเครื่อง: โอเปรานด์เป็นตัวเลขและที่อยู่หน่วยความจำ เพราะการจัดการแบบนั้นแทบจะเป็นไปไม่ได้ถ้าต้องขยาย โปรแกรมเมอร์จึงใช้ภาษาแอสเซมบลีที่แทนตัวเลขบางส่วนด้วยคำย่อ แต่แอสเซมบลี่ยังคงเป็นชั้นบาง ๆ เหนือฮาร์ดแวร์ คุณไม่ได้บอก สิ่งที่ต้องการ ทางคณิตศาสตร์ คุณบอก วิธีทำ ทีละขั้นตอน จัดการรีจิสเตอร์และที่อยู่เอง
สำหรับการคำนวณเชิงวิทยาศาสตร์นั่นหมายถึงการควบคุมลูป การจัดวางหน่วยความจำ และค่ากลางด้วยมือ แม้การเปลี่ยนสูตรเล็กน้อยอาจต้องแก้หลายส่วนของโปรแกรม เพราะทุกอย่างเชื่อมโยงผ่านที่อยู่และการกระโดด
การเขียนแอสเซมบลีช้าและเปราะบาง ปัญหาทั่วไปได้แก่:
นักวิทยาศาสตร์และวิศวกรไม่ได้รันการคำนวณเพียงครั้งเดียว—พวกเขาปรับแบบจำลอง รันซ้ำ และสำรวจเงื่อนไขต่าง ๆ เมื่อแต่ละการอัพเดตต้องใช้เวลาหลายวันหรือสัปดาห์ การทดลองก็ติดขัด
นี่คือจุดที่ต้นทุนชนิดใหม่ปรากฏ: เวลาของโปรแกรมเมอร์ ฮาร์ดแวร์แม้จะแพง แต่คนที่มีทักษะก็แพงเช่นกัน กลางทศวรรษ 1950 คอขวดไม่ได้อยู่ที่ความเร็วเครื่องเสมอไป แต่มันอยู่ที่เวลาที่คนใช้เพื่อให้เครื่องทำงานได้อย่างเชื่อถือได้
John Backus ไม่ได้เริ่มต้นในฐานะ "ผู้บุกเบิกคอมพิวเตอร์" ที่ถูกกำหนดไว้ แต่หลังจากอาชีพต้น ๆ ที่ไม่สงบและเวลาบริการในกองทัพ เขาก็มาถึง IBM ในต้นทศวรรษ 1950 เมื่อคอมพิวเตอร์ยังโปรแกรมด้วยมืออยู่ เขาโดดเด่นด้วยสองอย่าง: การเบื่อหน่ายเชิงปฏิบัติกับงานที่น่าเบื่อ และทักษะในการจัดการโครงการวิศวกรรมที่ทะเยอทะยาน
IBM มีทั้งปัญหาและโอกาสรวมกันอยู่ในเครื่องหนึ่งเครื่อง: IBM 704 มันทรงพลังและออกแบบมาพร้อมฟีเจอร์ที่เหมาะกับงานคณิตศาสตร์หนัก ๆ แต่ลูกค้าทางวิทยาศาสตร์และเทคนิคใช้เวลามหาศาลในการเขียนและดีบักแอสเซมบลี ถ้าการเขียนโปรแกรมยังช้า เครื่องดี ๆ ก็อาจถูกใช้งานไม่เต็มที่
เดิมพันของ IBM ง่ายแต่เสี่ยง: ทำให้ 704 เขียนโปรแกรมง่ายขึ้นโดยไม่แลกกับความเร็ว
Backus นำทีมที่ถือว่า FORTRAN เป็นโครงการสองส่วนที่แยกกันไม่ได้: ภาษาให้คนเขียนได้ และคอมไพเลอร์ที่แปลมันเป็นรหัสเครื่องที่เร็ว ส่วนหลังคือเดิมพันจริง ๆ ผู้เชี่ยวชาญจำนวนมากเชื่อว่า "การเขียนโปรแกรมอัตโนมัติ" จะไม่มีวันมีประสิทธิภาพเพียงพอมาแทนแอสเซมบลีที่ปรับด้วยมือ
ภาษาระดับสูงในตอนนั้นไม่ได้หมายถึงแค่อินเทอร์เฟซสวย มันหมายถึงการเขียนสมการ ลูป และคำสั่งเชิงโครงสร้างที่ใกล้กับคณิตศาสตร์และตรรกะของปัญหา แล้วเชื่อใจคอมไพเลอร์ให้ผลิตโค้ดที่แข่งขันกับสิ่งที่โปรแกรมเมอร์ชำนาญจะเขียนด้วยมือ ความเชื่อนี้คือสิ่งที่ IBM และ Backus พยายามจะได้มา
คำสัญญาหลักของ FORTRAN คือแทนที่จะบอกเครื่อง ว่าจะทำอย่างไร ทีละขั้นตอน คุณสามารถเขียนคำสั่งที่ดูใกล้เคียงกับคณิตศาสตร์ที่คุณใช้ ผู้ใช้งานคือวิศวกรที่สามารถเขียน "คำนวณสมการนี้สำหรับค่าหลายค่า" แทนที่จะสะกดลำดับการโหลด บวก เก็บ และกระโดดที่แอสเซมบลีต้องการ ความหวังคือการโปรแกรมจะเป็นการแสดงความคิด มากกว่าการเดินสายควบคุมด้วยคำพูด
FORTRAN ไม่ได้รันโดยตรงบนเครื่อง โปรแกรมอีกโปรแกรมหนึ่ง—คอมไพเลอร์—จะแปลซอร์ส FORTRAN เป็นคำสั่งระดับต่ำของเครื่อง
คุณสามารถคิดเหมือนล่ามฝีมือ: คุณเขียนภาษาที่คนอ่านได้ คอมไพเลอร์แปลให้เป็นภาษาที่ IBM 704 เข้าใจและรันได้
ทีมของ Backus มุ่งสู่การผสมผสานที่หาได้ยาก:
จุดสุดท้ายสำคัญ FORTRAN ไม่ได้พยายามเป็นทุกอย่างให้ทุกคน—มันตั้งใจทำการคำนวณจริงให้เสร็จด้วยข้อผิดพลาดน้อยลง
ความสงสัยรุนแรงมาก โปรแกรมเมอร์หลายคนเชื่อว่าการควบคุมทั้งหมดเป็นสิ่งจำเป็น และการแปลอัตโนมัติจะเสียเปล่า อีกคนกังวลเรื่องดีบัก: ถ้าคอมไพเลอร์สร้างคำสั่งสุดท้าย คุณจะรู้ได้อย่างไรว่าสิ่งที่เครื่องทำจริงคืออะไร
ผู้ใช้กลุ่มแรกของ FORTRAN คือ วิศวกรและนักวิทยาศาสตร์—ผู้ที่มีสมการต้องรัน ทดสอบแบบจำลอง และสร้างผลลัพธ์ สำหรับพวกเขาคำสัญญาไม่ใช่เรื่องใหม่ แต่มันคือการประหยัดเวลา ข้อผิดพลาดจากการคัดลอกน้อยลง และโปรแกรมที่คนหลายคนสามารถอ่านและดูแลได้ แทนที่จะเป็นกลุ่มผู้เชี่ยวชาญแอสเซมบลีเพียงไม่กี่คน
FORTRAN ไม่ใช่แค่วิธีใหม่ในการเขียนโปรแกรม มันต้องการวิธีแปลใหม่ งานแปลนั้นตกอยู่กับคอมไพเลอร์ และความสำเร็จจะตัดสินว่า FORTRAN เป็นปฏิวัติหรือแค่องค์ความรู้
คิดถึงคอมไพเลอร์เหมือนนักแปลมืออาชีพในการประชุมเทคนิค คุณพูดเป็นประโยคระดับสูง "คำนวณสมการนี้ ทำซ้ำสำหรับแต่ละค่า" แต่ผู้ฟังเข้าใจเพียงพจนานุกรมต่ำ ๆ นักแปลฝืด ๆ อาจแปลความหมายถูก แต่แปลแบบอ้อมช้าและวกวน นักแปลเก่งรักษาทั้งความหมายและประสิทธิภาพ ส่งออกสิ่งที่ผู้ฟังทำงานได้ทันที
FORTRAN ต้องการนักแปลที่ยอดเยี่ยมแบบนั้น
โปรแกรมเมอร์ยุคแรกไม่ได้เลือก FORTRAN เพราะความสวยงาม พวกเขาเลือกมันก็ต่อเมื่อมันคุ้มค่า: ชั่วโมงการเขียนโค้ดน้อยลงโดยไม่มีบทลงโทษด้านการรัน ในเครื่องแพงอย่าง IBM 704 เวลา CPU ที่ถูกทิ้งหมายถึงเงินที่ถูกทิ้ง และในการวิจัย งานช้าหมายถึงผลลัพธ์มาช้าเกินกว่าจะมีค่า
ดังนั้นผลิตภัณฑ์จริง ๆ ไม่ใช่สเปคภาษา แต่มันคือเอาต์พุตของคอมไพเลอร์ หากโปรแกรมที่คอมไพล์รันใกล้เคียงกับแอสเซมบลี ผู้คนจะเปลี่ยน หากไม่ก็จะทิ้งไม่ว่ามันจะดูดีแค่ไหน
จุดขายของ FORTRAN—การเขียนคณิตศาสตร์เหมือนคณิตศาสตร์—ก็ทำให้การคอมไพล์ยาก คอมไพเลอร์ต้อง:
วิศวกรหลายคนคิดว่าระดับสูงย่อมช้าตามนิยาม ทีมของ Backus ต้องชนะความสงสัยนั้นด้วยหลักฐาน: โปรแกรมที่คอมไพล์แล้วต้องแข่งขันได้ เชื่อถือได้ และคาดเดาผลได้ หากไม่มีความน่าเชื่อถือด้านประสิทธิภาพ FORTRAN จะเป็นแค่องค์ความรู้เชิงวิชาการ ไม่ใช่เครื่องมือทำงานจริง
คำสัญญาหลักของ FORTRAN ไม่ใช่แค่เขียนโค้ดเร็วขึ้น แต่มันคือโค้ดที่คอมไพล์แล้วยังรันเร็ว นั่นสำคัญเพราะผู้ใช้แรกไม่ใช่ผู้เล่นทั่วไป แต่เป็นวิศวกรและนักวิทยาศาสตร์ที่วัดคุณค่าเป็นชั่วโมงเครื่องและผลลัพธ์ที่ได้
การปรับแต่งคือคอมไพเลอร์ทำงานเพิ่มให้คุณไม่ต้องทำเอง คุณเขียนประโยคคณิตศาสตร์ชัดเจน คอมไพเลอร์เงียบ ๆ แปลงให้เป็นเวอร์ชันที่ใช้คำสั่งน้อยลง ดึงข้อมูลหน่วยความจำน้อยลง และใช้เวลาน้อยลงบน IBM 704
เป้าหมายไม่ใช่ความฉลาดล้ำ แต่เป็นประสิทธิภาพที่คาดเดาได้—เพื่อให้คนมั่นใจว่าการเขียนใน FORTRAN จะไม่ถูกลงโทษด้วยโปรแกรมที่ช้า
คอมไพเลอร์ FORTRAN ใช้การปรับปรุงที่จับต้องได้ เช่น:
สิ่งเหล่านี้ไม่ต้องให้โปรแกรมเมอร์คิดเรื่องเวลาอินสตรัคชันหรือที่อยู่หน่วยความจำ—แต่เป็นสิ่งที่โปรแกรมเมอร์แอสเซมบลีใส่ใจมาก
แอสเซมบลีมีข้อได้เปรียบชัดเจน: "ผมปรับให้เร็วด้วยมือได้เสมอ" นักสงสัยคิดว่าภาษาระดับสูงจะสร้างโค้ดอ้วนและสิ้นเปลือง
ทีมของ Backus ถือความสงสัยเป็นข้อกำหนดผลิตภัณฑ์ การปรับแต่งไม่ใช่ฟีเจอร์เสริม แต่มันคือหลักฐานที่แสดงว่านามธรรมไม่ได้หมายถึงการยอมแพ้ต่อประสิทธิภาพ
เมื่อข่าวแพร่ว่าโปรแกรม FORTRAN สามารถแข่งกับแอสเซมบลีที่เขียนด้วยมือในงานจริง ๆ การนำไปใช้ก็ยิ่งเพิ่มขึ้น คอมไพเลอร์กลายเป็นเพื่อนร่วมทีมที่เชื่อถือได้: เขียนความตั้งใจให้ชัด ปล่อยให้คอมไพเลอร์จัดการรายละเอียด แล้วได้ผลลัพธ์ที่เคารพฮาร์ดแวร์
FORTRAN มีความสำคัญเพราะมันลดต้นทุนด้านเวลาของการเขียนโปรแกรมโดยไม่แลกมาด้วยการทำงานช้าจนเกินไป.
คอมไพเลอร์เป็นโปรแกรมที่แปลซอร์สโค้ดที่เขียนโดยมนุษย์ให้เป็นคำสั่งระดับต่ำที่เครื่องจักรเฉพาะสามารถรันได้.
ในกรณีของ FORTRAN คอมไพเลอร์ต้องทำงานสองอย่างได้ดี:
ประเด็นหลักคือความเร็ว ถ้าโค้ดระดับสูงที่คอมไพล์ออกมาช้ากว่าแอสเซมบลีมาก ทีมวิทยาศาสตร์และวิศวกรจะไม่แลกประสิทธิภาพเพื่อความสะดวกสบาย
การนำ FORTRAN มาใช้งานขึ้นอยู่กับการพิสูจน์ว่าคอมไพเลอร์สามารถผลิตโค้ดเครื่องที่ แข่งขันได้ ไม่ใช่แค่โค้ดที่ทำงานได้เท่านั้น
การปรับแต่งทั่วไปรวมถึงการปรับปรุงเชิงกลแบบเป็นรูปธรรม เช่น:
สิ่งเหล่านี้เป็นเทคนิคที่โปรแกรมเมอร์แอสเซมบลีใช้ด้วยมือ—แต่ถูกทำให้อัตโนมัติ
FORTRAN ทำให้รูปแบบเชิงตัวเลขแสดงออกได้ง่ายขึ้น:
DO สำหรับการคำนวณที่ทำซ้ำข้ามช่วงรวมกัน ฟีเจอร์เหล่านี้ลดการใช้จุดกระโดดลับ ๆ และการคำนวณตำแหน่งหน่วยความจำด้วยมือ—ซึ่งเป็นแหล่งข้อผิดพลาดที่พบบ่อยในแอสเซมบลี
ไม่ทันที และไม่สมบูรณ์แบบนัก FORTRAN ลดภาระการเขียนใหม่และเพิ่มความเข้าใจของมนุษย์ แต่ยังมีข้อจำกัดจาก:
เมื่อเวลาผ่านไป แรงกดดันให้ย้ายโค้ดระหว่างเครื่องต่าง ๆ ช่วยผลักดันการกำหนดมาตรฐานภาษามากขึ้น
มันเปลี่ยนเศรษฐศาสตร์ของการเขียนซอฟต์แวร์:
โดยรวม FORTRAN ช่วยย้ายการเขียนโปรแกรมจากงานฝีมือเฉพาะเครื่องไปสู่แนวคิดของอุตสาหกรรมที่พึ่งพาวิธีการแบบทำซ้ำและซอฟต์แวร์ที่ใช้ซ้ำ
มีข้อแลกเปลี่ยมที่ปรากฏขึ้น:
มันแก้คอขวดสำคัญได้ แต่ไม่ใช่ว่าแก้ทุกปัญหา
บทเรียนหลักคือการลงทุนในเครื่องมือช่วยเพิ่มขีดความสามารถของทีม:
สรุป FORTRAN แสดงให้เห็นว่าการปรับปรุงระบบรอบโค้ด—ภาษา คอมไพเลอร์ และแนวปฏิบัติ—ทำให้ซอฟต์แวร์ขยายตัวได้
ใช่—ยังใช้งานอยู่มากในงานคำนวณเชิงวิทยาศาสตร์ โดยเฉพาะในไลบรารีและโค้ดเดิมที่ผ่านการตรวจรับรองยาวนาน
หากจะเรียนหรือใช้: