การเขียนโปรแกรมมันห่วยแตก [2014]
(stilldrinking.org)- บทความเชิงเปรียบเปรยที่อธิบายความโกลาหลของการพัฒนาซอฟต์แวร์ผ่านอุปมาเรื่องการสร้างสะพาน พร้อมคำสารภาพแบบประชดประชันว่า ทุกทีมโปรแกรมมิงประกอบด้วยคนบ้า และผลลัพธ์จากพวกเขาคือสิ่งที่ทำให้ซอฟต์แวร์ธนาคารกับอินเทอร์เน็ตทำงานอยู่
- โค้ดที่สมบูรณ์แบบมีอยู่แค่ในไฟล์ที่ทำงานอย่างเดียวและเขียนโดยลำพังเท่านั้น แต่ในโลกความเป็นจริง การทำงานคือการถูกสั่งวันศุกร์ให้สร้าง 600 อย่างภายในวันอังคาร พร้อมกับ เอาปิกัสโซไปพิงกองเกล็ดหิมะที่กำลังละลาย
- นักพัฒนาเว็บต้องเรียนรู้เทคโนโลยีใหม่สัปดาห์ละหนึ่งอย่าง พร้อมตรวจว่าสารพัดเครื่องมือเดิมหลายร้อยชิ้นยังไม่พัง และแม้เป็นผู้เชี่ยวชาญก็ยังถือว่า โชคดีถ้าใช้เวลาแค่ 6 ชั่วโมงหาสาเหตุของปัญหา
- อินเทอร์เน็ตพึ่งพาเงินมูลค่าหลายล้านล้านดอลลาร์ที่วางอยู่บนข้อตกลงแบบไม่เป็นทางการและโค้ดอายุ 10 ปีที่เขียนว่า "TODO: FIX THIS" และถ้าผู้ดูแลระบบทุกคนออกไปกินข้าวพร้อมกัน อารยธรรมก็จะล่มสลาย
- โปรแกรมเมอร์ใช้เวลา 10–15 ชั่วโมงต่อวันทำงานที่สมองมนุษย์ไม่ได้ถูกออกแบบมาให้ทำ และ กำลังค่อย ๆ บ้าขึ้นเรื่อย ๆ ซึ่งนี่ก็คือราคาของอาชีพที่เลือกแทนการยกของหนัก 50 ปอนด์
ทุกทีมโปรแกรมมิงประกอบด้วยคนบ้า
- เพื่อนที่ทำงานใช้แรงกายมักเริ่มบทสนทนาด้วยทำนองว่า "แกสบายจะตาย ฉันนี่ขุดอุโมงค์ด้วย เครื่องเจาะ อยู่ใต้ Mordor"
- ถ้าคุณเห็นตรงกันว่าความเครียดกับความทรมานทางจิตใจเป็นเรื่องแย่
ยินดีต้อนรับสู่โลกของการเขียนโปรแกรม - อุปมาเรื่องการสร้างสะพาน: สมมติว่าคุณเข้าร่วมโครงการสร้างสะพานในมหานคร แล้วเจอสถานการณ์แบบนี้
- Mary เป็นหัวหน้าโครงการ, Fred ทำงานกับไม้ได้อย่างเดียว แต่ดันรับผิดชอบทางเดินของสะพานที่สูง 200 ฟุตเหนือกระแสน้ำเชี่ยว
- Dave โดนขโมยเสื้อสเวตเตอร์ไปครั้งหนึ่ง เลยติดตั้งจุดตรวจความปลอดภัย 15 ขั้นตอน
- Phil ไม่ใช่วิศวกร แต่บังคับใช้นโยบาย ห้ามมีราวกันตก ไม่มีใครรู้ว่า Phil ทำอะไร แต่เพราะเกี่ยวข้องกับผู้บริหารจึงไม่มีใครแตะต้อง
- Sara ใส่เทคโนโลยีปูพื้นล้ำสมัยระดับ "hemorrhaging-edge" ทุกตัวที่มีลงไปในแบบ
- Tom กับ Harry ทะเลาะกันเรื่อง ระบบเมตริก vs ระบบอิมพีเรียล มาหลายปี และใช้หน่วยของคนที่เริ่มทำก่อน
- เดิมออกแบบเป็นสะพานแขวน แต่ไม่มีใครรู้วิธีสร้างสะพานแขวน เลย เติมเสาค้ำตรงกลางระหว่างทาง และปล่อยสายเคเบิลแขวนไว้เพราะมันคงพยุงอะไรสักอย่างอยู่
- เขาบอกให้พนักงานใหม่เสนอไอเดียใหม่ ๆ แต่ดันเป็น วิศวกรขับดัน ที่ไม่รู้อะไรเกี่ยวกับสะพานเลย
- ถ้าถามว่าใครจะกล้าข้ามสะพานนี้ คำตอบคือไม่มีใคร แต่ โครงสร้างแบบนี้แหละที่สร้างซอฟต์แวร์ธนาคาร เว็บไซต์ และโปรแกรมความปลอดภัยของอินเทอร์เน็ตทั้งหมด
โค้ดทุกก้อนล้วนแย่
- โปรแกรมเมอร์ทุกคนมี ไฟล์ Good Code ที่หยิบมาอ่านตอนอยู่บ้านคนเดียวแล้วน้ำตาคลอ
- ชื่อฟังก์ชันกับตัวแปรสอดคล้องกัน กระชับ ไม่ทำอะไรโง่ ๆ แบบเห็นชัด และไม่เคยถูกปล่อยสู่โลกจริงหรือโดนความต้องการจากฝ่ายขายถล่มใส่
- มีคนเขียนแค่คนเดียว ไม่มีใครมาแตะทีหลัง และ อ่านเหมือนบทกวีที่คนอายุมากกว่า 30 เขียน
- ความจริงคือ ถ้าวันศุกร์คุณถูกสั่งให้ทำ เกล็ดหิมะ 600 ชิ้น ให้เสร็จวันอังคาร คุณก็ต้องงัดทางลัดสารพัดออกมา เพื่อนร่วมงานก็ทำมันละลาย ทุกอย่างปนกันมั่วไปหมด แล้วเอาปิกัสโซไปพิงกองประติมากรรมประหลาดนั้น และสัปดาห์หน้าก็ ตักหิมะมาเพิ่ม เพื่อไม่ให้ปิกัสโซล้ม
- มีทฤษฎีว่าถ้าทุกคนทำตามมาตรฐาน (standards) ปัญหาจะหมดไป แต่ในความจริง มาตรฐานมีมากกว่าสิ่งที่คอมพิวเตอร์ทำได้จริง และยังถูกบิดตามรสนิยมส่วนตัวอีก จนโค้ดเบสเดียวกันมี วิธีทำงานเดียวกันได้เป็นสิบ ๆ แบบ
- ช่วงหลายสัปดาห์แรกในงานใหม่ ต่อให้รู้ทุกภาษา เฟรมเวิร์ก และมาตรฐาน ก็ยังหมดเวลาไปกับการทำความเข้าใจว่าโปรแกรมนี้ทำงานอย่างไร เพราะมาตรฐานนั้นเป็น ยูนิคอร์น
มีแต่ความมืดอยู่เสมอ
- อุปมาจากตู้เก็บของตอนเด็ก: พอคลานเข้าไป ผนังด้านหลังก็ถอยออกกลายเป็นชั้นวางของ แล้วพอเงยหน้าขึ้นอีกทีก็พบ ความว่างเปล่าสัมบูรณ์ของช่องคลานใต้หลังคาที่แสงส่องไม่ถึง และคุณก็รู้สึกได้ทันทีว่ามีสัตว์ประหลาดที่คุณต้องใช้ไฟฉายกับตุ๊กตาคอยขวางไว้ทุกคืนอาศัยอยู่ตรงนั้น
- การเรียนเขียนโปรแกรมก็เหมือนกัน: คุณเรียนรู้เครื่องมือที่มีประโยชน์ พอมองไปรอบ ๆ ก็มีเครื่องมือใหม่อีก และเครื่องมือนั้นจะเผยให้เห็น ความสยองไร้ก้นบึ้ง ที่อยู่ข้างเตียงคุณมาตลอด
- ความจริงของนักพัฒนาเว็บทั่วไป
- ต่อให้คุ้นกับภาษาโปรแกรม 12 ภาษา พร้อมไลบรารี มาตรฐาน และโปรโตคอลนับไม่ถ้วน ก็ยังต้องเรียนของใหม่เพิ่มทุกสัปดาห์
- ต้องคอยเช็กว่าเครื่องมือเดิมหลายร้อยตัวถูกอัปเดตหรือพังหรือยัง และตรวจดูว่า บั๊กที่เคยเอามาใช้อย่างชาญฉลาดตอนเมาช่วงสุดสัปดาห์ ยังไม่ได้ถูกแก้
- คิดว่าทุกอย่างทันสมัยดีแล้ว แต่อยู่ ๆ ก็พังทั้งหมด
- ตัวอย่างสาเหตุที่พัง: มีใครบางคนตัดสินใจให้ 1/0 ใช้แทน Infinity ได้ แล้วอีกคนก็ทำให้มันกลายเป็น ข้อผิดพลาดในคอมไพเลอร์ โดยไม่บอกใคร ผลคือแม้แต่ผู้เชี่ยวชาญก็ต้องใช้เวลา 6 ชั่วโมงกว่าจะหาต้นตอเจอ
- แม้แต่ความเชี่ยวชาญในสายงานของตัวเองก็ยังเป็นเพียงเศษเสี้ยวเล็กมากของวิทยาการคอมพิวเตอร์ทั้งหมด และ ไม่มีคนสักคนเดียวที่รู้ว่า MacBook อายุ 5 ปีเครื่องหนึ่งทำงานอย่างไรทั้งหมด
- เหตุผลที่คนพูดว่า "ลองปิดแล้วเปิดใหม่หรือยัง" ก็เพราะไม่รู้จริง ๆ ว่ามีอะไรผิด จึงทำให้คอมพิวเตอร์เข้าสู่ภาวะโคม่าแล้ว ปล่อยให้ทีมหมออัตโนมัติในตัว จัดการ
อินเทอร์เน็ตคือขุมนรกพิเศษในตัวมันเอง
- ต่อให้เป็นเว็บแนวรถเข็นช็อปปิงที่มีหน้าไดนามิกแค่ 3 หน้า ก็ยังต้องมี ทีมดูแลตลอด 24 ชั่วโมง เพราะทุกอย่างพังอยู่ตลอดเวลา ทุกที่ และกับทุกคน
- ณ ขณะนี้เอง พนักงาน Facebook กำลังรับมือข้อความผิดพลาดนับหมื่น รายหนึ่งในออฟฟิศ Google ไม่ได้นอนมา 3 วันแล้ว และมีโปรแกรมเมอร์ฐานข้อมูลที่ไหนสักแห่งนั่งท่ามกลางขวด Mountain Dew เปล่า ๆ จนคิดว่าสามีตายไปแล้ว
- ถ้าผู้ดูแลระบบทุกคนลุกไปกินข้าวพร้อมกัน ก่อนจะถึงร้านเดลีก็คงต้อง สู้กับฝูงกลายพันธุ์เพื่อแย่งอาหารกระป๋อง แล้ว
- เงินมูลค่าหลายล้านล้านดอลลาร์กำลังพึ่งพาข้อตกลงแบบไม่เป็นทางการและโค้ดที่มีคอมเมนต์จากเมื่อ 10 ปีก่อนว่า "TODO: FIX THIS IT'S A REALLY DANGEROUS HACK"
- มีกลุ่มคนที่โจมตีอินเทอร์เน็ตไปทั่วทั้งเพื่อข่าวกรอง เพื่อผลประโยชน์ หรือเพราะเบื่อ และ 4chan แค่อารมณ์เสียไปครึ่งบ่าย ก็อาจทำลายชีวิตกับธุรกิจของใครบางคนได้ แต่ก็เหมือนมีระเบิดนิวเคลียร์ตกเพิ่มอีกลูกในฤดูหนาวนิวเคลียร์ เลยไม่มีใครตกใจแล้ว
- บนอินเทอร์เน็ต ถ้าคุณพูดว่า "เหมือนอันนี้จะใช้ได้เป็นบางครั้งนะ" มันก็จะกลายเป็นส่วนหนึ่งของอินเทอร์เน็ตทันที และใครก็ตามที่มีคอมพิวเตอร์กับเงินไม่กี่ร้อยดอลลาร์ก็สามารถ อัปโหลดโค้ดแฮ็กสุดสยอง ขึ้นไปทำให้ทั้งระบบแย่ลงทีละนิดได้
- กฎลับของอินเทอร์เน็ตคือ: หลังเปิดเบราว์เซอร์ได้ 5 นาที เด็กชาวรัสเซียก็มีเลขประจำตัวประชาชนของคุณแล้ว, พอสมัครใช้งาน NSA ก็เริ่มติดตามตำแหน่งคุณ, และพอส่งอีเมล ที่อยู่ของคุณก็ไปโผล่บนป้ายโฆษณาในไนจีเรีย
- เรื่องนี้ไม่ใช่เพราะใครไม่ใส่ใจ แต่เป็นเพราะ ทุกอย่างพังหมดและไม่มีโค้ดดี ๆ อยู่จริง ทุกคนเลยได้แต่พยายามสุดชีวิตให้มันยังพอใช้งานต่อไปได้
ไม่ใช่ว่าเราบ้า แต่เรากำลังจะบ้า
ERROR: Attempted to parse HTML with regular expression; system returned Cthulhu— ถ้าคุณยังขำกับมุกนี้ได้ก็ยังไม่เป็นไร แต่ถ้ามีคนถามว่า "arrayReverse" ไหม แล้วคุณตอบด้วยs/camel/_/อย่างเป็นธรรมชาติ นั่นแปลว่าคุณ เข้าสู่ขั้นที่พูดเป็นโค้ดแล้ว- สมองมนุษย์ไม่ได้เก่งเรื่องตรรกะพื้นฐานเป็นพิเศษนัก แต่กลับมีอาชีพที่ต้องใช้ทั้งวันไปกับ ตรรกะที่ซับซ้อนอย่างรุนแรง
- ถ้าคุณใช้เวลาทั้งวันไล่ตามหาจุลภาคที่หายไปในห่วงโซ่เงื่อนไขและข้อกำหนดนามธรรมขนาดมหึมา พอเงยหน้ามามองหน้าคน คุณก็ไม่รู้แล้วว่าเขาพูดจบหรือยัง — เพราะ ไม่มี semicolon
- ยกตัวอย่างภาษาโปรแกรมประหลาด (esolang) เพื่อสาธิตผลทำลายล้างต่อสมอง
- มีโปรแกรมที่ให้ผลลัพธ์เหมือน "Hello World" ของ C++ อยู่ในรูปแบบของ Brainfuck, Ook!, และโค้ด Perl ที่แสดงเลขมายาเป็น ASCII art หมุน 90 องศา
- โปรแกรมเลขมายานั้น ชนะการแข่งขันมาแล้ว และในโลกแบบนี้ก็ไม่มีใครสงสัยเลยว่าทำไมบางคนถึงสูบบุหรี่วันละซอง
- โปรแกรมเมอร์ทุกคนกำลังบังคับสมองให้ทำสิ่งที่มันไม่ได้ถูกออกแบบมาให้ทำ วันละ 10–15 ชั่วโมง สัปดาห์ละ 5–7 วัน และ ทุกคนกำลังค่อย ๆ บ้าลงทีละน้อย
- สรุปคือ แทนที่จะยกของหนัก 50 ปอนด์ คุณได้โอกาส รับใช้ซาตานที่กำลังเล็มขนตัวเองและกินข้าวอยู่บนกะโหลกที่ถูกผ่าเปิด และสิ่งตอบแทนก็คือส่วนหนึ่งของอินเทอร์เน็ตจะยังทำงานต่อได้อีกไม่กี่วัน
ยังไม่มีความคิดเห็น