393 คำ
2 นาที
เมื่อผมอยากทำซอฟต์แวร์ใช้เอง ตอนที่ 2: ยุคบัตรเจาะรู ปี 1950
สารบัญ

ทุกบทความในซีรีส์นี้มาจากการที่ผมคุยกับ AI แล้วค้นข้อมูลเพิ่มเติม ผมเป็นคนกำหนดทิศทาง ให้ AI ช่วยสรุป วิเคราะห์ และเรียบเรียงออกมาเป็นบทความครับ

ตอนที่ 1 ผมไล่ให้ดูภาพรวมทั้ง 6 ยุคไปแล้ว

ตอนนี้ได้เวลาลงมือจริง

เริ่มจากยุคแรกสุด ยุคศูนย์หนึ่ง ราวปี 1950

ผมอยากรู้ว่าคนยุคนั้นเขียนโปรแกรมกันยังไง ทรมานแค่ไหน

เลยขอเล่าผ่านตัวละครสมมติคนหนึ่ง ชื่อ “ต้น”

ต้นไม่มีตัวตนจริงนะครับ สายการบินที่เขาทำงานก็เป็นสายการบินสมมติ แต่วิธีทำงานที่เขาเจอ คือวิธีที่คนยุคนั้นเจอจริงๆ

วันแรกของต้น ปี 1956#

ปี 1956 ต้นเพิ่งได้งานเป็นโปรแกรมเมอร์ของสายการบินเล็กๆ แห่งหนึ่ง

หัวหน้ายื่นงานแรกให้

“เขียนโปรแกรมนับที่นั่งที่ถูกจองหน่อย พอเที่ยวบินเต็ม 20 ที่ ให้ไฟเตือนติด”

ต้นคิดในใจ ง่ายนี่หว่า

เดี๋ยวก็รู้ครับ 555+

งานแรกของต้น โปรแกรมนับที่นั่งที่ถูกจอง มีคนจอง นับเพิ่มหนึ่ง ถ้ายังไม่ครบรอคนจองต่อ พอจองครบ 20 ที่ ไฟเตือนติด

คอมพิวเตอร์รู้แค่ “เปิด” กับ “ปิด”#

ก่อนเขียนอะไร ต้นต้องเข้าใจก่อนว่าเครื่องคิดยังไง

ข้างในคอมพิวเตอร์มีแต่วงจรไฟฟ้า แต่ละจุดมีได้แค่สองสถานะ คือไฟผ่านกับไฟไม่ผ่าน

เราเลยเขียนแทนด้วยเลข 1 กับ 0

ระบบตัวเลขที่ใช้แค่ 0 กับ 1 เรียกว่า binary (เลขฐานสอง)

ลองนึกถึงสวิตช์ไฟในบ้าน 6 ตัวเรียงกัน แต่ละตัวมีค่าประจำตัว จากขวาไปซ้ายคือ 1, 2, 4, 8, 16, 32

อยากได้เลข 27 ก็เปิดสวิตช์ตัว 16, 8, 2 และ 1

16 + 8 + 2 + 1 = 27

เขียนเป็น binary ได้ 011011

สวิตช์ไฟ 6 ตัว เปิดตัว 16, 8, 2 และ 1 รวมกันได้ 27 เขียนเป็น binary ว่า 011011

ตัวเลข ตัวอักษร คำสั่งทุกคำ เครื่องเห็นเป็นแค่สวิตช์เปิดปิดแบบนี้หมด

ในตอนที่ 1 ผมเรียกมันว่า machine language คือภาษาที่เครื่องเข้าใจตรงๆ

ฟังดูง่าย แต่ทั้งโปรแกรมเป็นแบบนี้ เป็นพันเป็นหมื่นตัว

ตาลายครับ

ยุคนั้นเขียนโปรแกรมลงอะไร?#

ลงบัตรกระดาษเจาะรูครับ หนึ่งบัตรเก็บได้ประมาณหนึ่งบรรทัด ทั้งโปรแกรมเลยเป็นปึกบัตรที่ต้องถือไปส่งเครื่อง

แล้วต้นจะส่งเลข 0 กับ 1 เข้าเครื่องยังไง

คำตอบหลักๆ ของยุคนั้นคือ punch card (บัตรเจาะรู)

เป็นบัตรกระดาษแข็งแผ่นเล็กๆ ตรงไหนเจาะรูคือมีข้อมูล ตรงไหนไม่เจาะคือไม่มี เครื่องอ่านบัตรจะอ่านรูพวกนี้แล้วแปลงเป็นข้อมูลให้คอมพิวเตอร์

บัตรมาตรฐานของ IBM มี 80 ช่อง แต่ละช่องมี 12 แถว ส่วนมากหนึ่งบัตรก็เก็บได้หนึ่งบรรทัด

ต้นนั่งหน้าเครื่องเจาะบัตร พิมพ์ทีละบรรทัด ได้บัตรทีละใบ

โปรแกรมของเขาเลยไม่ใช่ไฟล์ในเครื่อง

แต่เป็นปึกบัตรที่ต้องถือไปถือมา

punch card หนึ่งใบเก็บได้ราวหนึ่งบรรทัด มี 80 ช่องตลอดแนว ช่องละ 12 แถว พิมพ์ผิดตัวเดียวต้องทิ้งทั้งใบแล้วเจาะใหม่

และมีกฎที่โหดมากข้อหนึ่ง คือ เจาะแล้วลบไม่ได้

พิมพ์ผิดตัวเดียว ต้องทิ้งบัตรใบนั้น แล้วเจาะใหม่ทั้งใบ

ถังขยะข้างโต๊ะต้นเลยเต็มเร็วมาก

ทำไมคนยุคนั้นต้องรอผลเป็นวัน?#

เพราะคอมพิวเตอร์แพงมาก ทั้งองค์กรมีเครื่องเดียว งานของทุกคนต้องต่อคิวให้ operator ป้อนเข้าเครื่องเป็นชุด บางที่เลยรอเป็นชั่วโมง บางที่รอข้ามวัน

ส่วนที่ทรมานที่สุดไม่ใช่การเจาะบัตร

แต่เป็นการรอ

ยุคนั้นคอมพิวเตอร์แพงมาก ตัวใหญ่เท่าห้อง ทั้งองค์กรมีเครื่องเดียวใช้ร่วมกัน

ต้นไม่ได้นั่งหน้าเครื่องเอง

เขาต้องเอาปึกบัตรไปยื่นให้เจ้าหน้าที่คุมเครื่อง ที่เรียกว่า operator (คนคุมเครื่อง)

operator จะรวบงานของหลายๆ คนไว้ แล้วป้อนเข้าเครื่องต่อกันเป็นชุด วิธีนี้เรียกว่า batch processing (ส่งงานเป็นชุดแล้วรอผล)

batch processing งานของต้นและคนอื่นส่งให้ operator ป้อนเข้าคอมพิวเตอร์เครื่องเดียวเป็นชุด ได้ผลเป็นกระดาษ ยื่นตอนเย็น ได้ผลพรุ่งนี้เช้า

ผลที่ได้กลับมาคือกระดาษที่พิมพ์ออกมา

บางที่รอเป็นชั่วโมง บางทีก็ต้องรอข้ามวัน

ในเรื่องของเรา ต้นยื่นบัตรตอนเย็น ได้ผลพรุ่งนี้เช้า

เช้าวันต่อมา ไฟไม่ติด#

เช้าวันรุ่งขึ้น ต้นรีบไปรับกระดาษผลลัพธ์

ที่นั่งเต็ม 20 ที่แล้ว

แต่ไฟไม่ติด

กระดาษไม่ได้บอกเลยว่าผิดตรงไหน

ต้นต้องหยิบบัตรขึ้นมาส่องทีละใบ แปลรูกลับเป็นตัวเลขเอง

จนไปเจอบัตรใบที่ 4

เขาเจาะไว้ว่าให้เทียบกับ 21 แทนที่จะเป็น 20

ผิดตัวเลขตัวเดียว

แก้แค่บัตรใบเดียว แต่ต้องรอผลรอบใหม่อีกทั้งคืน

bug คือจุดผิดพลาดในโปรแกรม ส่วนการไล่หาแล้วแก้ เรียกว่า debug

มีเรื่องเล่าดังเรื่องหนึ่ง ปี 1947 ทีมที่ดูแลคอมพิวเตอร์ Harvard Mark II เจอแมลงเม่าติดอยู่ในชิ้นส่วนของเครื่อง เขาแปะมันลงในสมุดบันทึกแล้วเขียนว่า “first actual case of bug being found” (เจอ bug ตัวจริงเป็นครั้งแรก)

แต่คำว่า bug ไม่ได้เกิดจากแมลงตัวนี้นะครับ วิศวกรใช้คำนี้เรียกจุดบกพร่องของเครื่องจักรมาตั้งแต่ก่อนมีคอมพิวเตอร์แล้ว ทีมเขาเขียนแบบนั้นก็เพราะมันตลกดีที่เจอแมลงจริงๆ

บัตรตกพื้น หายนะของแท้#

คืนที่สอง ต้นถือปึกบัตรใหม่เดินไปห้องเครื่อง

สะดุด

บัตรร่วงกระจายเต็มพื้น

ซ้าย ต้นคุกเข่ามองบัตรเจาะรูที่หล่นกระจายเต็มพื้น ขวา สันปึกบัตรที่มีเส้นทแยงตรง (เรียงถูก) เทียบกับเส้นขาด (บัตรสลับ) ข้างๆ มีดินสอ

นี่แย่กว่าบั๊กอีก

เพราะเครื่องอ่านบัตรตามลำดับในปึก บัตรสลับกัน คำสั่งก็สลับกัน โปรแกรมพังแบบไม่รู้เรื่องเลย

คนยุคนั้นเลยมีทริกกันไว้สองแบบ

  1. ขีดเส้นทแยง: เรียงบัตรให้ตรงแล้ว เอาปากกาขีดเส้นทแยงพาดสันบัตรทั้งปึก ถ้าวันไหนบัตรสลับ เส้นจะเบี้ยวให้เห็นทันที
  2. เลขลำดับบนบัตร: ภาษา FORTRAN ที่ IBM ออกมาในปี 1957 เผื่อช่อง 73 ถึง 80 ไว้ใส่เลขลำดับบัตร ถ้าบัตรตก ก็เอาเข้าเครื่องเรียงบัตร ให้เครื่องเรียงกลับให้

ผมว่าเส้นทแยงนี่ฉลาดมาก

ไม่ต้องใช้เทคโนโลยีอะไรเลย ปากกาด้ามเดียวจบ

ต้นเรียงบัตรกลับ ขีดเส้นทแยงไว้ ส่งอีกคืน

เช้าวันที่สาม ไฟติดตอนที่นั่งที่ 20 พอดี

งานที่แก้ตัวเลขแค่ตัวเดียว กินเวลาไปหลายวัน

แล้วระบบใหญ่ๆ ยุคนั้นทำได้ยังไง#

ฟังแบบนี้แล้วอาจสงสัยว่า ยุคที่แก้บั๊กทีละวัน จะสร้างระบบใหญ่ๆ ได้ยังไง

เรื่องของต้นเป็นเรื่องสมมติ แต่มาดูเรื่องจริงกันบ้าง

ในตอนที่ 1 ผมเล่าถึง SABRE ระบบจองตั๋วเครื่องบินของ American Airlines ที่ทำร่วมกับ IBM

เรื่องนี้มีที่มาที่ผมชอบมาก

ปี 1953 ประธานของ American Airlines ชื่อ C.R. Smith นั่งเครื่องบินข้างพนักงานขายของ IBM ชื่อ R. Blair Smith นามสกุลเดียวกันพอดี คุยกันไปคุยกันมา จนได้ไอเดียว่าน่าจะใช้คอมพิวเตอร์จัดการการจองตั๋ว

แต่จากวันที่คุยกันบนเครื่องบิน ไปถึงวันที่ใช้งานได้จริงนานมาก

เส้นเวลา SABRE ตั้งแต่ปี 1953 ที่เริ่มคุยกันบนเครื่องบิน จนใช้งานเต็มระบบในปี 1964

ปีเกิดอะไรขึ้น
1953สอง Smith เจอกันบนเครื่องบิน
1957American Airlines กับ IBM เริ่มพัฒนาด้วยกัน
1960ระบบแรกเริ่มทดลองใช้ บนคอมพิวเตอร์ IBM 7090 สองเครื่อง
1964SABRE ใช้งานได้เต็มระบบทั่วประเทศ

ตั้งแต่คุยกันครั้งแรกจนใช้ได้เต็มระบบ ห่างกัน 11 ปี

IBM เล่าว่าพอใช้งานได้แล้ว เวลาจองตั๋วหนึ่งครั้งลดจากเฉลี่ย 90 นาที เหลือไม่กี่วินาที

คุ้มมาก แต่ก็สร้างยากมากเหมือนกัน

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

สิ่งที่ผมได้จากยุคนี้#

ลองทำเอง

ตามต้นมาทั้งเรื่อง ผมรู้สึกเลยว่า การรอผลคือศัตรูตัวจริง

เขียนผิดไม่ใช่เรื่องใหญ่ ทุกคนเขียนผิด

แต่พอรู้ว่าผิดช้า ความผิดเล็กๆ ก็กลายเป็นความเสียหายใหญ่

เก็บศัพท์

ศัพท์ความหมายแบบภาษาคน
binaryเลขฐานสอง ใช้แค่ 0 กับ 1
machine languageภาษาที่เครื่องเข้าใจตรงๆ เป็นเลข 0 กับ 1
punch cardบัตรกระดาษเจาะรู ใช้ป้อนโปรแกรมและข้อมูลเข้าเครื่อง
operatorคนคุมเครื่อง รับบัตรไปป้อนให้
batch processingส่งงานเป็นชุดแล้วรอผล
bugจุดผิดพลาดในโปรแกรม
debugการไล่หาแล้วแก้ bug

จดบันทึก

ยุคนี้สอนผมว่า สิ่งที่ทำให้งานแพง คือระยะเวลาตั้งแต่ลงมือทำ จนถึงตอนที่รู้ว่าผิด

ยิ่งรอบนี้ยาว ยิ่งเจ็บ

ถ้าย้อนไปดูทุกยุคหลังจากนี้ คนก็พยายามทำให้รอบนี้สั้นลงเรื่อยๆ จากข้ามวัน เป็นชั่วโมง เป็นนาที จนเหลือไม่กี่วินาที

คำถามที่พบบ่อย#

binary คืออะไร?

ระบบตัวเลขที่ใช้แค่ 0 กับ 1 เช่น 27 เขียนเป็น binary ได้ 011011 คอมพิวเตอร์ใช้ระบบนี้เพราะวงจรมีแค่สองสถานะ คือไฟผ่านกับไฟไม่ผ่าน

บัตรเจาะรูของ IBM มีกี่ช่อง?

บัตรมาตรฐานของ IBM มี 80 ช่อง แต่ละช่องมี 12 แถว

คำว่า bug มาจากแมลงในคอมพิวเตอร์ปี 1947 จริงไหม?

ไม่ใช่ครับ ปี 1947 ทีม Harvard Mark II เจอแมลงเม่าในเครื่องจริง แต่วิศวกรใช้คำว่า bug เรียกจุดบกพร่องมาตั้งแต่ก่อนมีคอมพิวเตอร์แล้ว

SABRE ใช้งานได้จริงปีไหน?

ทดลองใช้ปี 1960 บน IBM 7090 สองเครื่อง และใช้งานเต็มระบบปี 1964

Next → ตอนที่ 3: ยุคทีมใหญ่กับ Waterfall ตอนหน้าเป็นยุคที่เครื่องมือยังมีจำกัด คนเริ่มมีภาษาที่อ่านออกเหมือนภาษาคนมากขึ้น ไม่ต้องเจาะ 0 กับ 1 เองแล้ว แต่ปัญหาใหม่ก็ตามมา ผมจะลองดูว่ามันง่ายขึ้นจริง หรือแค่ยากในแบบใหม่ 555+