พลังพิเศษที่แท้จริงของ Python
(youtu.be)นี่คือสรุปคีย์โน้ต "พลังพิเศษที่แท้จริงของ Python" ที่ Hynek Schlawack บรรยายในงาน PYCON UK 2025
ผู้บรรยายเริ่มต้นด้วยการแนะนำเส้นทางอาชีพของตนโดยย่อ และกล่าวถึง "มิตรภาพที่ทั้งรักทั้งชัง" ที่ได้สัมผัสจากการมีส่วนร่วมในชุมชน PyCon ตลอด 14 ปีที่ผ่านมา
การย้ายจาก Python 2 ไป Python 3 (The Python 2 to 3 Migration)
- ภูมิหลัง: Python 3.0 เปิดตัวครั้งแรกในปี 2008 โดยไม่ได้มีเป้าหมายเพื่อการใช้งานทั่วไปในทันที แต่เพื่อแสดงทิศทางของ Python และรับข้อเสนอแนะ การใช้งานเริ่มได้รับการแนะนำตั้งแต่ Python 3.2 เป็นต้นไป
- การเปลี่ยนแปลงสำคัญ:
- การจัดการสตริง: Python 3 เปลี่ยนชนิดสตริงพื้นฐานจากไบต์ที่เป็นมิตรกับเครื่อง ไปเป็นยูนิโค้ดที่เป็นมิตรกับมนุษย์
- การลบพฤติกรรมโดยปริยาย: พฤติกรรมโดยปริยายหลายอย่างที่นักพัฒนาเผลอพึ่งพาใน Python 2 เช่น การเปรียบเทียบระหว่างสตริงกับตัวเลข ถูกลบออกไป เพราะเป็นสาเหตุของบั๊กที่แก้ไขได้ยาก
- การปรับปรุงด้านสากลization: โค้ดเบสของ Python 2 เต็มไปด้วยข้อผิดพลาดจากการถอดรหัสยูนิโค้ด และ Python 3 ได้แก้ปัญหานี้ ทำให้เป็นภาษาที่รองรับการใช้งานระดับนานาชาติมากขึ้น
- ความยากของการย้ายระบบ:
- ต้นทุนต่อชุมชน: การพอร์ตทั้งอีโคซิสเต็มไปสู่ Python 3 มีต้นทุนมหาศาล ซอฟต์แวร์จำนวนมากต้องถูกย้าย และในเวลานั้นการมี test coverage ก็ยังไม่ใช่เรื่องปกติ
- การพัฒนาโค้ดเบสแบบผสม: กว่าจะเกิดฉันทามติเรื่องวิธีเขียนโค้ดเบสแบบไฮบริดที่รันได้ทั้งบน Python 2 และ Python 3 ก็ต้องรอจน Python 3.3 ออกในปี 2012
- ช่วงพักการพัฒนาภาษา: ระหว่าง Python 3.0 ถึง 3.3 แทบไม่มีฟีเจอร์ใหม่เพิ่มเข้ามา ทำให้นักพัฒนาไม่ค่อยมีแรงจูงใจจะย้ายไป Python 3
- ความไม่แน่นอน: ไม่มีใครมั่นใจว่า Python 3 จะกลายเป็นเวอร์ชันหลักได้จริงหรือไม่ และก็อาจล้มเหลวเหมือนกรณีของ Perl 6
- เหตุผลที่ Python อยู่รอด:
- ผู้ใช้ใหม่ไหลเข้าอย่างต่อเนื่อง: ในช่วงที่ภาษาอื่นอย่าง Go และ Rust เติบโต Python ยังมีผู้ใช้ใหม่เข้ามามากกว่าจำนวนที่หายไป
- ชุมชนวิทยาศาสตร์และวิศวกรรม: นักวิทยาศาสตร์และวิศวกรใช้ Python มานานแล้ว และตั้งแต่ช่วงกลางทศวรรษ 2010 ความนิยมของ Python ในสาย data science ก็พุ่งสูงขึ้น ปัจจุบันผู้ใช้ Python มากกว่าครึ่งใช้มันเพื่อสำรวจและประมวลผลข้อมูล
- อีโคซิสเต็มที่มีอยู่เดิม: มีอีโคซิสเต็มของไลบรารีคำนวณทางวิทยาศาสตร์ที่แข็งแกร่งอยู่แล้ว เช่น NumPy
- เชื่อมต่อกับภาษาแบบคอมไพล์ได้ง่าย: Python ทำงานร่วมกับภาษาแบบคอมไพล์อื่นได้ง่าย จึงทำหน้าที่เป็น "กาว" ในการเชื่อมองค์ประกอบประสิทธิภาพสูงที่เขียนด้วย C, C++, Fortran, Rust
- การเขียนโปรแกรมเชิงสำรวจ: Python เหมาะอย่างยิ่งกับการเขียนโปรแกรมเชิงสำรวจ ผ่านเครื่องมืออย่าง interactive shell (REPL) และ Jupyter Notebook
- ความเป็นค่อยเป็นค่อยไป (Graduality): Python เปิดให้ใช้งานได้หลายระดับของความเข้มงวด นักพัฒนาสามารถทำงานอย่างยืดหยุ่นในช่วงทดลอง และเพิ่มความเข้มงวดในระดับโปรดักชันด้วยเครื่องมืออย่าง type hints, linter และการทดสอบ อีกทั้งยังนำ Python ไปใช้ได้หลายรูปแบบ ตั้งแต่เริ่มใน Jupyter Notebook ไปจนขยายเป็นเว็บเซอร์วิส
พลังพิเศษที่แท้จริงของ Python: ความเป็นค่อยเป็นค่อยไป (Graduality)
- Python ไม่ได้มีเพียงกำแพงทางเข้าที่ต่ำ แต่ยังมีเพดานสูงหลายระดับให้ผู้ใช้เลือกใช้ได้อย่างยืดหยุ่นตามความต้องการ
- สองด้านของความเป็นค่อยเป็นค่อยไป:
- ด้านบวก: ผู้ใช้สามารถเลือกระดับความเข้มงวดและความซับซ้อนที่ต้องการได้ เช่น ตอนเขียนสคริปต์อาจเขียนแบบอิสระโดยไม่ใช้ type hints แต่ในแอปพลิเคชันขนาดใหญ่สามารถใช้การตรวจสอบชนิดข้อมูลอย่างเข้มงวดได้
- ด้านลบ: เมื่อเพิ่มกรณีพิเศษหรือข้อยกเว้นเข้าไปในระบบ แม้ระยะสั้นจะช่วยให้ผู้ใช้บางกลุ่มสะดวกขึ้น แต่ระยะยาวจะเพิ่มความซับซ้อนโดยรวมของระบบ เขาเน้นว่า "สิ่งที่ง่าย ไม่ได้หมายความว่าจะเรียบง่ายเสมอไป" และจุดนี้สะท้อนชัดในวิธีการแพ็กเกจของ Python
ตัวอย่างปัญหาเรื่องแพ็กเกจ (Packaging Problem Example)
- วิธีจัดโครงสร้างแอปพลิเคชัน Python มีทั้งแบบ 'ad hoc' และแบบ 'package' โดยแบบ package มีนิยามชัดเจนกว่าและมีเครื่องมือรองรับในตัว แต่ด้วยเหตุผลทางประวัติศาสตร์ แบบ ad hoc ก็ยังต้องรองรับต่อไป
- สิ่งนี้ทำให้ประเด็นอย่าง
sys.pathเข้าใจได้ยากขึ้น และฟีเจอร์อย่างpip install --userก็สร้างปัญหาใน global namespace จนทำให้ดีบักยาก - เครื่องมือใหม่อย่าง UV ในช่วงแรกสนับสนุนเฉพาะแนวทางแบบ package แต่สุดท้ายก็ต้องรองรับโปรเจ็กต์แบบ ad hoc ด้วย ทำให้ความซับซ้อนเพิ่มขึ้น
- "กับดักที่ชวนให้ใช้ (attractive nuisance)" เหล่านี้ให้ความสะดวกในระยะสั้น แต่ในระยะยาวกลับสร้างต้นทุนมหาศาลแก่ชุมชน
สถาปัตยกรรมซอฟต์แวร์ (Software Architecture)
- เขาชี้ว่าชุมชน Python ขาดการพูดคุยเรื่องสถาปัตยกรรมซอฟต์แวร์ ซึ่งส่วนหนึ่งมาจากอาการต่อต้าน "enterprise patterns" และ "ความกลัวว่าจะกลายเป็น Java"
- ความจำเป็น: หากต้องการสร้างและบำรุงรักษาระบบซอฟต์แวร์ที่ซับซ้อน การพูดคุยเรื่องสถาปัตยกรรมซอฟต์แวร์ที่เกี่ยวกับการจัดระเบียบและการดูแลโมดูล เลเยอร์ และปฏิสัมพันธ์ระหว่างส่วนต่าง ๆ เป็นสิ่งสำคัญ
- แนวทางแก้ไข:
- ชุมชน Python ควรหลีกเลี่ยงการปิดบทสนทนาด้วยคำอย่าง "pythonic" หรือ "unpythonic"
- ควรเรียนรู้และประยุกต์ใช้แนวปฏิบัติที่ดีจากชุมชนภาษาอื่น เช่น domain-driven design
- ควรมีคนออกมาแบ่งปันความรู้ด้านสถาปัตยกรรมซอฟต์แวร์มากขึ้น สร้างคอนเทนต์ที่เกี่ยวข้อง และมุ่งเน้นไปที่ทางออก
บทสรุป (Conclusion)
- ไม่ควรรู้สึกกังวลกับ Python แต่ควรเปิดรับวิธีการเขียน Python ที่หลากหลาย
- ควรลองสไตล์และเครื่องมือใหม่ ๆ เพื่อขยายกรอบความคิดของตนเอง
- ตัวเลือกทุกอย่างมีต้นทุน จึงต้องพิจารณาอย่างรอบคอบว่าฟีเจอร์ใดจะส่งผลต่อทั้งชุมชนอย่างไร
- นอกจากการทำให้เรื่องง่ายใช้งานได้ง่ายแล้ว เรายังควรทุ่มเทให้มากขึ้นกับการทำให้เรื่องซับซ้อน “เป็นไปได้จริง”
- ควรมีบทสนทนาเรื่องสถาปัตยกรรมซอฟต์แวร์ให้มากขึ้น และตั้งคำถามกับกรอบคิดแบบสุดโต่ง เพื่อพา Python ไปสู่อนาคตที่ดีกว่า
พรีเซนเทชันนี้ครอบคลุมทั้งอดีต ปัจจุบัน และอนาคตของชุมชน Python โดยเน้นย้ำว่า "ความเป็นค่อยเป็นค่อยไป" คือจุดแข็งที่แท้จริงของภาษา พร้อมมอบมุมมองเชิงลึกต่อความท้าทายที่ชุมชนกำลังเผชิญ และกำแพงทางวัฒนธรรมที่ต้องก้าวข้าม
หากต้องการชมวิดีโอ ดูได้ที่ลิงก์ต่อไปนี้: https://youtu.be/gDvwRpl9erE
3 ความคิดเห็น
ถ้าตัวจัดการแพ็กเกจสมัยใหม่แบบสไตล์
uvกลายเป็นมาตรฐานได้ ก็น่าจะสะดวกขึ้นมาก แต่ยังไงก็คงยากอยู่ดี..ช่วงต้นของชีวิตมหาวิทยาลัยยังเป็นช่วงที่ Python 2 ยังดูได้รับความนิยมมากกว่าแบบเฉียดฉิว แต่พอใกล้เรียนจบก็จำได้ว่าทุกคนย้ายไปใช้ Python 3 กันหมดแล้ว
ถ้าทำอาชีพเกี่ยวกับการเขียนโค้ด ต่อให้หลัก ๆ ใช้ Python ก็ตาม ส่วนใหญ่ก็มักจะใช้ภาษาอื่นได้อย่างน้อยอีกหนึ่งภาษาด้วย
ผมไม่ค่อยเข้าใจการที่บอกว่า Python ควรจะดีขึ้น แล้วพยายามนำฟีเจอร์หรือคุณลักษณะจากภาษาอื่นเข้ามาเรื่อย ๆ
ดูเหมือนจะมองข้ามไปว่าจุดที่ Python ขาดอยู่เหล่านั้น ก็เป็นเหตุผลที่ทำให้ Python ได้รับความนิยมเหมือนกัน
Python กำลังค่อย ๆ ซับซ้อนและจุกจิกแบบแปลก ๆ มากขึ้นเรื่อย ๆ
เหมือนข้อดีของการใช้ Python กำลังหายไป
แทนที่จะพยายามทำให้ Python กลายเป็น Java ผมว่าถ้าจำเป็นก็แค่ใช้ Java ไปเลยไม่ใช่หรือ
ถ้าไม่ใช่ Java ก็ยังมี Kotlin กับ Scala ด้วย
แต่ถึงอย่างนั้น ผมก็ยังคิดว่า Python ไม่ล้มหายไปหรอก
เพราะในความเป็นจริงแทบไม่มีภาษาไหนที่เขียนโค้ดได้ง่ายสะดวกแบบนี้อีกแล้ว