Libro

Fluent Python ฉบับแรก: สำหรับคนที่เขียน Python ได้แล้วและอยากเขียนให้เป็นธรรมชาติขึ้น

หนังสือของ Luciano Ramalho (O'Reilly, 2015) ว่าด้วยการเขียน Python 3 แบบ idiomatic ตั้งแต่ data model ไปจนถึง asyncio และ metaclass บทความนี้สรุปจากคำอธิบายหนังสือ ข้อมูลแคตตาล็อก และคลังโค้ดทางการของฉบับแรก

ภาพประกอบบทความ: ปกหนังสือ Fluent Python โดย Luciano Ramalho

ขอบเขตของบทความ: แนะนำขอบเขตเนื้อหาจากสารบัญโดยอ้อม คือชื่อโฟลเดอร์ในคลังโค้ดทางการของฉบับแรก ร่วมกับคำอธิบายหนังสือและข้อมูลแคตตาล็อก ยังไม่ได้อ่านเนื้อหาของบทใด และไม่พบสารบัญจากสำนักพิมพ์ที่เปิดได้

คนที่ย้ายมาจากภาษาอื่นมักเขียน Python ได้เร็ว แต่ยังเขียนด้วยรูปแบบที่ติดมาจากภาษาเดิม เช่น เขียน getter/setter แบบ Java หรือวนลูปด้วย index แทนการใช้ความสามารถของภาษาเอง ผลคือโค้ดยาวกว่าที่ควร หนังสือเล่มนี้ตั้งใจแก้ปัญหานั้น

หนังสือเล่มนี้ว่าด้วยอะไร

Fluent Python: Clear, Concise, and Effective Programming เขียนโดย Luciano Ramalho ฉบับแรก ตีพิมพ์โดย O'Reilly วันที่ 20 สิงหาคม 2015 ความยาว 792 หน้า ISBN ฉบับพิมพ์ 9781491946008 (Open Library)

คำอธิบายหนังสือบน Google Books ระบุว่าเป็นคู่มือเชิงปฏิบัติสำหรับเขียน Python แบบ idiomatic โดยใช้ฟีเจอร์ที่ดีและมักถูกมองข้ามของภาษา กลุ่มผู้อ่านคือโปรแกรมเมอร์ที่มีประสบการณ์ซึ่งพยายามดัด Python ให้เข้ากับรูปแบบจากภาษาอื่น และอยากใช้ Python 3 ได้คล่องจริง

เนื้อหาครอบคลุมหัวข้ออะไร

คำอธิบายหนังสือแบ่งหัวข้อใหญ่เป็นหกเรื่อง:

  • Python data model การใช้ special method ให้ object ทำงานสอดคล้องกับส่วนอื่นของภาษา

  • Data structures ใช้ built-in type ให้เต็มที่ และเข้าใจความต่างของ text กับ bytes ในยุค Unicode

  • Functions as objects มองฟังก์ชันเป็น first-class object และผลต่อ design pattern ที่ใช้กันทั่วไป

  • Object-oriented idioms เรื่อง reference, mutability, interface, operator overloading และ multiple inheritance

  • Control flow context manager, generator, coroutine และ concurrency ด้วย concurrent.futures และ asyncio

  • Metaprogramming property, attribute descriptor, class decorator และ metaclass

โครงบทจากคลังโค้ดทางการ

คลังโค้ด fluentpython/example-code ระบุว่าเป็นโค้ดตัวอย่างของฉบับแรก (O'Reilly, 2015) แยกโฟลเดอร์ตามบทตั้งแต่ 01-data-model ถึง 21-class-metaprog ซึ่งน่าจะตรงกับ 21 บท ตัวอย่างชื่อโฟลเดอร์ เช่น 03-dict-set, 04-text-byte, 07-closure-deco, 11-iface-abc, 14-it-generator, 16-coroutine, 18-asyncio และ 20-descriptor บทที่ 17 และ 18 มีโฟลเดอร์รุ่น py3.7 เพิ่มด้วย ชื่อโฟลเดอร์ไม่ใช่สารบัญ จึงใช้ดูลำดับหัวข้อคร่าว ๆ เท่านั้น คลังนี้ใช้สัญญาอนุญาต MIT

ฉบับแรกกับฉบับที่ 2

README ของคลังโค้ดฉบับแรกแจ้งว่าคลังถูก archive แล้วและให้ไปที่คลังของฉบับที่ 2 แทน ส่วนเว็บไซต์ประกอบของผู้เขียนตอนนี้เป็นของฉบับที่ 2 (fluentpython.com) บทความนี้พูดถึงฉบับแรกตามปกในโฟลเดอร์หนังสือ ถ้าต้องการเนื้อหาที่ตาม Python รุ่นใหม่กว่า ควรตรวจฉบับที่ 2 แยกต่างหาก

พื้นฐานที่ควรมีก่อนอ่าน

คำอธิบายหนังสือตั้งกลุ่มผู้อ่านเป็นโปรแกรมเมอร์ที่มีประสบการณ์ ผู้อ่านจึงควรเขียน Python พื้นฐานได้แล้ว เช่น ใช้ list, dict, ฟังก์ชัน และคลาส หนังสือไม่ได้วางตัวเป็นตำราเริ่มต้นเขียนโปรแกรม

เหมาะกับใคร และใครควรเริ่มจากเล่มอื่นก่อน

  • เหมาะ กับนักพัฒนาหรือนักวิเคราะห์ข้อมูลที่ใช้ Python ทำงานอยู่ เช่น เขียนสคริปต์ backtest หรือ library ภายใน และอยากเข้าใจกลไกของภาษาให้ลึกขึ้น

  • เหมาะ กับคนที่อยากเข้าใจ generator, coroutine และ asyncio ก่อนนำไปใช้กับงานที่ต้องจัดการ I/O พร้อมกันหลายงาน

  • ควรเริ่มจากเล่มอื่นก่อน ถ้ายังเริ่มเรียน Python หรือยังไม่เคยเขียนคลาส

ข้อจำกัดของข้อมูลที่ใช้ในบทความนี้

  • ยังไม่ได้อ่านเนื้อหาบทใด หน้าหนังสือบนเว็บ O'Reilly เปิดไม่ได้ในการค้นคว้าครั้งนี้

  • โครงบทมาจากชื่อโฟลเดอร์ในคลังโค้ด ไม่ใช่สารบัญ และไม่ได้รันโค้ด

  • ฉบับแรกเขียนบน Python 3 ในช่วงปี 2015 บางส่วน เช่น coroutine และ asyncio อาจต่างจากแนวปฏิบัติใน Python รุ่นใหม่ ข้อนี้อนุมานจากการที่คลังมีโฟลเดอร์ py3.7 แยกไว้

  • ข้อมูลในแคตตาล็อกของ Libro ใช้ ISBN 9781491946268 ตาม Google Books ส่วน ISBN ฉบับพิมพ์คือ 9781491946008 ทั้งสองอ้างถึงฉบับแรกปี 2015

แหล่งอ้างอิง

  • fluentpython/example-code · GitHub · README และชื่อโฟลเดอร์รายบทของฉบับแรก

  • Google Books: Fluent Python · Google Books · คำอธิบายหนังสือ จำนวนหน้า และ ISBN

  • Open Library: 9781491946008 · Internet Archive · ข้อมูลฉบับแรก วันที่ และจำนวนหน้า

  • fluentpython.com · Luciano Ramalho · เว็บไซต์ประกอบของฉบับที่ 2

  • ปกหนังสือ Fluent Python

    Fluent Python

    Luciano Ramalho

    ฉบับแรกปี 2015 ราว 800 หน้า ครอบคลุม data model, data structures, ฟังก์ชันเป็น object, OOP, generator, asyncio และ metaprogramming

    ดูรายละเอียด

บทความนี้อ่านจบได้ในตัวเอง หนังสือด้านบนคือจุดต่อยอดสำหรับผู้ที่ต้องการศึกษาลึกขึ้น