2 คะแนน โดย GN⁺ 2024-07-11 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Brian Kernighan ย้อนมอง The Practice of Programming หนังสือที่เขาเขียนร่วมกับ Rob Pike ในปี 1999 ว่าเป็นหนังสือที่พยายามว่าด้วย “วิธีเขียนโปรแกรมให้ดีอย่างมืออาชีพ” ในยุคที่อินเทอร์เน็ต, Python, Perl และ Java กำลังแพร่หลายอย่างรวดเร็ว
  • แม้ตัวอย่างบางส่วนจะล้าสมัยไปตามกาลเวลา แต่เขามองว่าหลักการอย่าง สไตล์·การดีบัก·ทัศนคติในการเขียน ยังสามารถนำไปปรับใช้ได้ แม้ภาษาและสภาพแวดล้อมจะเปลี่ยนไป
  • การพาร์ส CSV ยังคงยุ่งเหยิงและสเปกก็ไม่ได้ชัดเจนสมบูรณ์ ส่วน pandas นั้นทรงพลัง แต่ หนักและมีระดับ abstraction สูง จนบางครั้งโค้ด Python แบบเรียบง่ายอาจดีกว่า
  • Bell Labs เป็น สภาพแวดล้อมการวิจัย ที่ทำให้งานอย่าง Unix, yacc และเครื่องมือเตรียมเอกสารเกิดขึ้นได้ ด้วยการคิดระยะยาว เพื่อนร่วมงานที่ยอดเยี่ยม และแรงกดดันด้านผลิตภัณฑ์·รายได้ที่ต่ำ
  • โมเดลภาษาขนาดใหญ่เป็นเทคโนโลยีที่สร้างผลกระทบอย่างฉับพลันหลังเดือนพฤศจิกายน 2022 และประสบการณ์ที่ Claude สร้างโค้ด Python เกี่ยวกับ spaCy ได้เกือบถูกต้องทั้งหมดเป็นสัญญาณว่ารูปแบบการทำงานของโปรแกรมเมอร์กำลังจะเปลี่ยนไป

สภาพแวดล้อมการเขียนโปรแกรมในปี 1999 และเป้าหมายของหนังสือ

  • The Practice of Programming เป็นหนังสือที่ Kernighan และ Rob Pike เขียนขึ้นราว 15 ปีหลังจาก The Unix Programming Environment ซึ่งทั้งสองเคยเขียนร่วมกันก่อนหน้านั้น
  • เป้าหมายของหนังสือคือการพูดถึง “จริง ๆ แล้วเราเขียนโปรแกรมอย่างไร” และ “จะเขียนอย่างมีประสิทธิภาพและเป็นมืออาชีพได้อย่างไร”
  • สภาพแวดล้อมคอมพิวติ้งราวปี 1999 แตกต่างจากปัจจุบันอย่างมาก
    • อินเทอร์เน็ตยังเป็นสิ่งค่อนข้างใหม่สำหรับคนทั่วไป โดยเพิ่งปรากฏราวปี 1995~1996
    • Python เป็นภาษาที่ค่อนข้างใหม่, Perl ยังคงแข็งแกร่ง และ Java ก็ได้รับความนิยม
  • ตัวอย่างที่เฉพาะเจาะจงอาจไม่เกี่ยวข้องโดยตรงกับผู้อ่านยุคนี้มากนัก แต่เขามองว่า หลักการทั่วไป ยังสามารถย้ายไปใช้กับสภาพแวดล้อมอื่นได้
  • พิธีกรเห็นว่าบทว่าด้วย style guide และ debugging ยังใช้ได้ดีเป็นพิเศษ และประทับใจกับข้อเท็จจริงที่ว่าคำว่า “bug” ถูกใช้มาก่อนเรื่องเล่าเกี่ยวกับคอมพิวเตอร์ Mark ของ Grace Hopper โดยเคยปรากฏในบริบทของ Thomas Edison และ phonograph ด้วย

CSV, pandas, หน่วยความจำ และ abstraction

  • Kernighan พูดถึงตัวอย่าง parser สำหรับ CSV ในหนังสือว่า แม้ทุกวันนี้ก็ยังไม่มี CSV parser ที่ดี
    • เมื่อฤดูร้อนที่ผ่านมา เขาใช้เวลาตั้งแต่หลายสัปดาห์จนถึงประมาณหนึ่งเดือนในการเขียน “CSV parser ที่ทำได้ถูกต้อง” เพื่อเพิ่มฟังก์ชัน CSV ให้กับ awk
    • เขามองว่าสเปก CSV ไม่ได้ชัดเจนสมบูรณ์ และในบางแง่ก็ไม่ได้ถูกทำให้เป็นมาตรฐาน
  • pandas ถูกประเมินว่าเป็น เครื่องมือที่หนัก แม้จะทรงพลังก็ตาม
    • เขาบอกว่าในหลายกรณี การเขียน Python โดยตรงนั้นเรียบง่ายกว่าการทำความเข้าใจกลไกการวนซ้ำและการเลือกข้อมูลแบบแฝงของแนวทาง pandas
    • พิธีกรกล่าวว่าในงาน machine learning และ data science มักเลือกใช้ pandas แต่เมื่อจำเป็นต้องได้ประสิทธิภาพการรันที่สำคัญ ก็จะพิจารณาวิธีที่เรียบง่ายกว่า
  • การจัดการหน่วยความจำกลายเป็นเรื่องที่แทบไม่ต้องกังวลในการเขียนโปรแกรมจำนวนมากในปัจจุบัน
    • ใน C ต้องจัดการหน่วยความจำเอง และเป็นเรื่องยากมาก
    • ใน C++ ก็ทำได้เช่นกัน แต่เทคนิคในการจัดการให้ถูกต้องนั้นเรียนรู้ได้ยาก
    • ใน Python เขาอธิบายว่าส่วนใหญ่ทำงานได้ “เหมือนเวทมนตร์”
  • abstraction ขนาดใหญ่ไม่ได้ซ่อนปัญหาได้หมดเสมอไป
    • ระหว่างประมวลผลข้อความขนาดเท่าหนังสือหนึ่งเล่มด้วย spaCy เขาได้รับข้อความว่าหน่วยความจำไม่พอ เพราะโควต้างานเริ่มต้นคือ 1GB และแก้ปัญหาโดยเพิ่มค่าตั้งเป็นสองเท่า
    • ในยุคที่ Kernighan เติบโตมา แม้แต่ระดับ กิโลไบต์ ก็ถือเป็นหน่วยความจำขนาดใหญ่แล้ว
  • ในชุมชน embedded ยังให้ความสำคัญกับหน่วยความจำและประสิทธิภาพอย่างมาก และนอกจาก C แล้ว ภาษาอย่าง Rust หรือ Zig ก็ถูกกล่าวถึงในบริบทนี้ด้วย

Go, Plan 9 และสภาพแวดล้อมการวิจัยของ Bell Labs

  • พิธีกรกล่าวว่าประเด็นปัญหาใน The Practice of Programming ให้ความรู้สึกเหมือนเป็นฐานสำหรับ การออกแบบภาษา Go
  • Kernighan มองว่า Rob Pike เป็นหนึ่งในสามคนที่สร้าง Go และเป็นเรื่อง “น่าเชื่อถืออย่างยิ่ง” ว่าความไม่สะดวกต่าง ๆ ที่พูดถึงในหนังสืออาจเป็นพื้นหลังเมื่อเขาคิดถึงภาษาใหม่ในภายหลัง
    • อย่างไรก็ตาม เขาบอกว่าไม่มีความทรงจำเฉพาะเจาะจงว่า Pike คิดในตอนนั้นว่า “จะปรับปรุงโลกด้วยภาษาใหม่”
    • เขามองว่างาน Plan 9 ในช่วงปลายทศวรรษ 1990 และภาษาอย่าง Limbo, Alef เป็นส่วนหนึ่งของสายวิวัฒนาการที่นำไปสู่ Go
  • ประสบการณ์ที่ Bell Labs ใกล้เคียงกับสภาพแวดล้อมในอุดมคติสำหรับ Kernighan
    • ตอนเป็นนักศึกษาบัณฑิตที่ Princeton ในทศวรรษ 1960 เขาฝึกงานช่วงฤดูร้อนที่ Bell Labs สองครั้งกับกลุ่มที่เกี่ยวข้องกับ Multics
    • เขาบอกว่าประสบการณ์นั้นดีมาก จนเมื่อได้รับข้อเสนอให้กลับไปทำงาน เขาไม่ได้ไปสัมภาษณ์ที่อื่นเลย
    • เขาอยู่ที่ Bell Labs ตั้งแต่ต้นปี 1969 จนถึงราวปี 2000
  • ใน Bell Labs ยุคนั้น สามารถคิดระยะยาวได้ และมีแรงกดดันน้อยจากผลลัพธ์รายไตรมาสหรือการต้องสร้างผลิตภัณฑ์·รายได้ในทันที
    • ผู้คนสามารถทำงานที่ตนคิดว่าน่าสนใจและสำคัญได้ค่อนข้างเป็นอิสระ
    • เนื่องจากเป็นยุคที่ AT&T ให้บริการโทรศัพท์แก่พื้นที่ส่วนใหญ่ของสหรัฐฯ จึงเป็น “สภาพแวดล้อมที่มีปัญหามากมาย” และมีงานจำนวนมากที่อาจเป็นประโยชน์ต่อระบบโทรศัพท์
  • เขาไม่เคยพบ Claude Shannon โดยตรง
    • เท่าที่จำได้ Shannon ออกจาก Bell Labs ไป MIT หลายปีก่อนที่ Kernighan จะเข้ามา
    • Kernighan บอกว่าเขาสนิทกับ Richard Hamming ผู้เคยใช้สำนักงานร่วมกับ Shannon

การเรียนรู้ การเขียนหนังสือ และวิธีคิดแบบโปรแกรมมิง

  • การเรียนรู้ในช่วงแรกของ Kernighan เกิดขึ้นที่ Bell Labs จากการได้พบผู้คน เครื่องมือ และปัญหาที่น่าสนใจที่ดี
  • yacc เป็นเครื่องมือที่ทำให้สร้างภาษาโปรแกรมใหม่ได้ง่าย และ Kernighan ใช้มันนอกจากการสร้างภาษาตามแบบดั้งเดิมแล้ว ยังใช้ในด้านอย่าง การเตรียมเอกสาร และภาษาเชิงประกาศด้วย
    • ในกระบวนการนี้ เขาได้เรียนรู้มากเกี่ยวกับการออกแบบและการ implement ภาษา
  • เขาสนใจเครื่องมือเตรียมเอกสารมาเป็นเวลานาน
    • ได้รับอิทธิพลจาก runoff โปรแกรมเตรียมข้อความแบบโต้ตอบยุคแรกของ MIT
    • ที่ Princeton เขาเขียนโปรแกรมเตรียมเอกสารคล้ายกันด้วย Fortran เพื่อจัดทำวิทยานิพนธ์ของตนเอง
    • ที่ Bell Labs เขาสร้างเครื่องมือที่ทำให้ผลิตหนังสือในทางกายภาพได้ง่ายขึ้น และช่วยไม่ให้ตัวอย่างโปรแกรมเสียหายระหว่างกระบวนการจัดพิมพ์
  • หลังย้ายไปมหาวิทยาลัย กระบวนการอธิบายสิ่งที่เขารู้อยู่แล้วให้คนที่ไม่ใช่สายคอมพิวเตอร์ฟังกลายเป็นการเรียนรู้ที่สำคัญ
    • เขาต้องอธิบายให้学生ที่เก่งด้านวรรณคดีหรือดนตรีเข้าใจว่าเลขฐานสองทำงานอย่างไร
    • เขายังบอกว่าได้เรียนรู้ในกระบวนการนั้นด้วยว่า Leibniz เป็นผู้ประดิษฐ์เลขฐานสองในเชิงปฏิบัติในช่วงปลายศตวรรษที่ 1600 และเคยใช้ตัวโน้ตแทนตัวอักษรเพื่อสร้างสิ่งที่คล้ายกับการเขียนแบบฐานสิบหก
  • แรงจูงใจในการเขียนหนังสือเกิดขึ้นเมื่อมี “บางสิ่งที่คุ้มค่าจะพูด” และ “ผู้เขียนร่วมที่อยากพูดเรื่องนั้นด้วยกัน”
    • หนังสือส่วนใหญ่ของ Kernighan เป็นงานเขียนร่วม
    • เขามองว่าการร่วมงานทำให้ต่างฝ่ายช่วยเติมเต็มและขัดเกลาเนื้อหาของกันและกันได้ จึงง่ายกว่าการเขียนคนเดียวมาก

โมเดลภาษาขนาดใหญ่ การศึกษา และหนังสือแนะนำ

  • Kernighan ยกให้ ระบบ time-sharing, Unix, วิวัฒนาการของภาษาโปรแกรม, การเพิ่มขึ้นของทรัพยากรตามกฎของ Moore และ PC เป็นพัฒนาการสำคัญในอาชีพของเขา
    • time-sharing เป็นการเปลี่ยนแปลงครั้งใหญ่ที่ทำให้สามารถทำงานตามตารางเวลาของตนเองได้ โดยไม่ต้องอยู่หน้าคอมพิวเตอร์จริง ๆ หรือรอให้ operator ประมวลผลให้
    • เขามองว่า cloud computing มีรูปแบบที่กลับมาใกล้เคียงกับ time-sharing อีกครั้ง ในแง่ที่การคำนวณถูกรวมศูนย์ และผู้ใช้มีอุปกรณ์ปลายทางขั้นสูงสำหรับสื่อสารกับระบบที่อยู่ไกลออกไป
  • เทคโนโลยีที่น่าสนใจที่สุดในปัจจุบันสำหรับเขาคือ โมเดลภาษาขนาดใหญ่
    • เขามองว่าสิ่งที่แปลกคือมันปรากฏขึ้นอย่างฉับพลันราวเดือนพฤศจิกายน 2022 และสร้างผลกระทบใหญ่ในเวลาอันสั้น
    • เมื่อขอให้ Claude ทำงานเกี่ยวกับ spaCy ด้วยคำอธิบายสองสามประโยค มันสร้างโค้ด Python ที่ถูกต้องประมาณ 99.9% และเขาบอกว่าระดับการใช้ Python ยังประณีตกว่าตัวเขาเองด้วย
    • เขามองว่าโปรแกรมเมอร์คงไม่หายไป แต่รูปแบบการทำงานมีแนวโน้มจะเปลี่ยนไป
  • LLM เปิดแนวทางใหม่ให้กับนักเรียน
    • นักเรียนคนหนึ่งมองว่าสามารถใช้ LLM ช่วยปรับปรุงการแปลภาษากรีกโบราณได้
    • เขากล่าวว่าสามารถปรับปรุงผล OCR ของเอกสารพิมพ์เก่าจากทศวรรษ 1700 ได้โดยใช้ความรู้ทางภาษาที่ language model มี
  • ในวิชาสำหรับผู้ที่ไม่ใช่สายคอมพิวเตอร์ เขาพยายามเชื่อมโยงวิธีที่คอมพิวเตอร์ทำงานเข้ากับประเด็นเทคโนโลยีที่เกิดขึ้นในโลก
    • ผู้เรียนจำนวนมากเป็นนักศึกษามนุษยศาสตร์และสังคมศาสตร์ และหลายคนลงเรียนเพื่อให้ครบข้อกำหนดด้านการให้เหตุผลเชิงปริมาณ
    • ครอบคลุมหัวข้ออย่าง hardware, software, communication, net neutrality, privacy, security และ Google antitrust พร้อมพื้นฐานทางเทคนิค
    • เขามองว่า วิธีคิดแบบโปรแกรมมิง ซึ่งแบ่งงานใหญ่ให้เป็นงานเล็กและคิดทีละขั้น สามารถถ่ายโอนไปยังสาขาอื่น เช่น การเขียนบทความวิชาการหรือการวิเคราะห์ประเด็นกฎหมายได้
  • สำหรับผู้เริ่มต้น สิ่งสำคัญคือการค้นหาสิ่งที่ตนเองอยากทำ
    • หากเริ่มจากปัญหาที่สนใจ เช่น การทำเกม การปรับปรุงการเงินส่วนตัว หรือการวิเคราะห์ข้อความ ก็จะช่วยลดกำแพงทางจิตใจได้
    • ในวิชาสำหรับผู้ที่ไม่ใช่สายคอมพิวเตอร์ เขาใช้โจทย์ให้วิเคราะห์ Pride and Prejudice ด้วย NLTK จากนั้นให้นักศึกษาเลือกหนังสือเล่มอื่นที่ตนต้องการแล้วสำรวจด้วยวิธีเดียวกัน
  • หนังสือที่แนะนำ·กล่าวถึง และรสนิยมการอ่านมีความหลากหลาย
    • ในกลุ่มหนังสือเทคนิค เขากลับไปอ่าน The Mythical Man-Month เป็นครั้งคราว และบอกว่าบางส่วนยังอยู่ได้ดีตามกาลเวลา แต่สำนวนภาษาบางอย่างดูเหยียดเพศอย่างมากเมื่อวัดด้วยมาตรฐานปัจจุบัน
    • Recoding America ของ Jennifer Pahlka ถูกกล่าวถึงว่าเป็นหนังสือน่าสนใจที่อธิบายว่าทำไมซอฟต์แวร์ภาครัฐจึงไม่ได้ทำงานดีอย่างที่คาดหวัง และเหตุใดระบบจึงทำให้การปรับปรุงเป็นเรื่องยาก
    • สำหรับการอ่านนอกสายเทคนิค เขากล่าวถึงประวัติศาสตร์ ประวัติศาสตร์การทหาร นิยายสืบสวน นิยายแข่งม้าของ Dick Francis และ Chip War ซึ่งว่าด้วยเซมิคอนดักเตอร์

1 ความคิดเห็น

 
GN⁺ 2024-07-11
ความคิดเห็นจาก Hacker News
  • หนังสือเล่มนี้เป็น หนังสือพื้นฐาน ที่โปรแกรมเมอร์ทุกคนควรอ่าน โดยเฉพาะมือใหม่
    สมกับเป็นหนังสือของ Kernighan ประโยคเรียบง่าย กระชับ แม่นยำ และอัดเฉพาะแก่นสารไว้ในจำนวนหน้ากว่าสองร้อยหน้าเล็กน้อยโดยไม่เยิ่นเย้อ หลังจากเข้าใจหลักการจากตัวอย่างแล้ว ก็นำไปปรับใช้กับบริบทของตัวเองได้
    จุดแข็งของหนังสือ K&P คือไม่ได้ถาโถมด้วยทฤษฎี แต่แสดงการประยุกต์ใช้เทคนิคในทางปฏิบัติก่อน แล้วทำให้การศึกษาทฤษฎีต่อจากนั้นเข้าถึงได้ง่ายขึ้น
    ตัวอย่างเช่น ตอนที่ผมมีประสบการณ์ด้านการเขียนโปรแกรมเครือข่ายและการทำ implementation ของโปรโตคอลอยู่แล้ว พอมาอ่านหนังสือเล่มนี้ ในบท "Notations" มีการแสดง รูทีน pack/unpack ข้อความเครือข่าย ที่ใช้สตริงรูปแบบสไตล์ printf/scanf เพื่อระบุเลย์เอาต์ของแพ็กเก็ต ซึ่งเป็นประสบการณ์ที่เปิดหูเปิดตาอย่างมาก ได้เรียนรู้พลังของสัญกรณ์ที่เหมาะสมและภาษาเล็ก ๆ และยังมีโค้ดบางส่วนที่แสดงไอเดียของ virtual machine, code threading และ JIT compilation ด้วย
    หนังสือเก่ากว่าอีกเล่มของ Kernighan และ Pike ชื่อ "The Unix Programming Environment" ก็น่าอ่านควบคู่กันไป บท "Program Development" อธิบายกระบวนการทั้งหมดของการใช้เครื่องมือพัฒนาคอมไพเลอร์เพื่อสร้างคอมไพเลอร์สำหรับภาษาเครื่องคิดเลขขนาดเล็กไว้ในราว 50 หน้า และเท่าที่ผมรู้ นั่นเป็นงานเขียนที่อธิบาย วิธีเขียนคอมไพเลอร์ ได้เล็กและเรียบง่ายที่สุด
    สรุปคือ หนังสือของ Kernighan ทุกเล่มคุ้มที่จะซื้อมาอ่านและศึกษา

    • ผมสั่ง Gang of Four ตัวจริงไปแล้ว: "The C Programming Language", "The UNIX Programming Environment", "The Practice of Programming", "The Elements of Programming Style"
      หนังสือ C เคยอ่านมาแล้ว และจำได้ว่างานเขียนยอดเยี่ยมมาก คงได้ปัญญาด้านการเขียนโปรแกรมมากมาย แต่ก็อยากวิเคราะห์จากมุมมองการเขียนเชิงเทคนิคด้วยว่าเหตุใดหนังสือของ Kernighan ถึงดีขนาดนั้น
      Kernighan น่าจะศึกษาการเขียนมาเยอะ หรืออย่างน้อยก็น่าจะคิดเรื่องการเขียนแบบ first-principles thinking ไว้มาก ชื่อ "The Elements of Programming Style" เองก็อ้างอิงถึงหนังสือการเขียนชื่อดังของ Strunk และ White คือ "The Elements of Style"
    • ยังไม่ได้อ่านหนังสือของ Kernighan และ Pike แต่ถ้าเป็นคำอธิบายคอมไพเลอร์ขนาดเล็กมาก ๆ PL/0 ใน "Algorithms + Data Structures = Programs" ของ Wirth ก็ดีเช่นกัน
      ตามมาตรฐานตอนนี้อาจจะเก่าไปบ้าง แต่ก็ยังเป็นหนังสือที่อ่านง่าย
    • ในฐานะคนที่ทำงานเขียนโปรแกรมมา 10 ปี ผมสงสัยว่าอ่านหนังสือเล่มนี้แล้วจะได้อะไร
      ไม่ได้ประชด แต่อยากรู้ว่าทำไมมันถึงเป็น หนังสือที่ต้องอ่าน แม้แต่สำหรับคนที่อาชีพกำลังแล่นไปได้สบาย ๆ
  • ชอบ "The Practice of Programming" มากจริง ๆ
    ในบรรดาหนังสือเขียนโปรแกรมที่เคยอ่านมา บทเรียนจากเล่มนี้ติดอยู่ในใจแรงที่สุด ถึงจะไม่ได้กลับไปอ่านซ้ำมาหลายปีแล้ว แต่รู้สึกว่ามันยังส่งผลต่อการปฏิบัติในทุก ๆ วัน

    • เพิ่งอ่านครั้งแรก และแปลกใจที่แม้จะเป็น หนังสืออายุ 25 ปี ก็ยังมีเนื้อหาหลายอย่างที่ถูกต้องอยู่
      ตัวอย่างการเขียนโปรแกรมเฉพาะบางส่วนค่อนข้างล้าสมัยแล้ว แต่ไอเดียทั่วไปยังแข็งแรงมาก
  • ชอบ Kernighan เขาเป็นคนถ่อมตัวมากจริง ๆ
    ในวิดีโอหนึ่งบน YouTube เขาเล่าว่าตอนทำวิทยานิพนธ์ปริญญาเอกกำลังแก้ปัญหายากอยู่ แล้วภายหลังพบว่ามันเป็น ปัญหา NP-complete ก่อนที่ทฤษฎีจะถูกจัดระบบเสียอีก
    ผมส่งอีเมลไปขอวิทยานิพนธ์ แล้วได้รับคำตอบค่อนข้างเร็ว พออ่านดูก็น่าสนใจมากจริง ๆ

    • คนที่ฉลาดขนาดนั้นแต่ยังถ่อมตัวหาได้ยากมาก เป็นพรอันยิ่งใหญ่ต่อวงการของเราจริง ๆ
    • มีตัวอย่างที่สมบูรณ์แบบ ตอนเริ่มสัมภาษณ์ราวนาทีที่ 3–4 เขาบอกว่าแรงจูงใจในการเขียนหนังสือนั้น "ค่อนข้างโอ้อวด(kind of pretentious)"
      สำหรับผมและอีกหลายคน ความคิดของเขาเกี่ยวกับการเขียนโปรแกรมเป็นหนึ่งในสิ่งที่น่าสนใจและมีประโยชน์ที่สุด และส่วนสำคัญเป็นเพราะเขาสามารถ ถ่ายทอดมันได้อย่างชัดเจนมาก
    • หนังสืออื่น ๆ ของเขาดูเพิ่มเติมได้ในส่วน publications ที่นี่: https://en.m.wikipedia.org/wiki/Brian_Kernighan
  • อยากให้การสัมภาษณ์งานสมัยนี้วัด ความเข้าใจแนวคิด แบบที่อยู่ในหนังสือเล่มนี้ มากกว่าจะเป็น LeetCode
    ในโลกใหม่ที่เหลวไหลนี้ แม้แต่ Brian Kernighan ก็อาจไม่ผ่านการสัมภาษณ์ LeetCode hard ก็ได้

    • ตอนสัมภาษณ์เปลี่ยนงานครั้งก่อน ผมสัมภาษณ์กับบริษัทใหญ่ ๆ อย่าง Stripe, Square, Shopify และดีใจที่ไม่มี คำถามสไตล์ LeetCode เลย
      ทั้งหมดเป็นโจทย์เขียนโปรแกรมที่ค่อนข้างใช้งานได้จริง Stripe มีรอบสัมภาษณ์ที่ fork ไลบรารี Jackson Java แล้วฝังบั๊กไว้ จากนั้นให้หาและแก้บั๊กนั้น ค่อนข้างแปลกใหม่ แต่ใกล้เคียงกับงานเขียนโปรแกรมจริงมากกว่าเยอะ
    • คล้ายกับที่ Peter Higgs เคยพูดว่าถ้าเป็นยุคปัจจุบัน เขาคงไม่ได้งานในแวดวงวิชาการ
      ยังนึกถึงกรณี Katalin Karikó ผู้ได้โนเบลจาก mRNA ที่ถูกลดตำแหน่งที่ UPenn เพราะไม่สามารถดึงทุนวิจัยเข้ามาได้
  • ผู้เขียนอีกคนที่อยู่ในระดับยอดเยี่ยมพอ ๆ กับ Kernighan และหนังสือของเขาคือ Jon Bentley กับหนังสือ Programming Pearls และ More Programming Pearls
    https://en.m.wikipedia.org/wiki/Jon_Bentley_(computer_scient...

    • ยังมีหนังสือเล่มบาง ๆ รุ่นก่อนหน้าของเขา "Writing Efficient Programs" ด้วย
      หนังสือเล่มนี้สอนให้คิดเรื่อง ประสิทธิภาพ จากระดับบนลงล่าง โดยเน้นอัลกอริทึมและภาษา จึงมีประโยชน์กับโปรแกรมเมอร์ทุกคน
      หนังสือด้านประสิทธิภาพสมัยใหม่ของ Agner Fog, Fedor Pikus และคนอื่น ๆ มักเน้นเทคนิคด้าน performance ในระดับคอมไพเลอร์/ระบบปฏิบัติการ/โปรเซสเซอร์ ดังนั้นอ่านควบคู่กันแล้วจะเห็นภาพรวมทั้งหมด
    • เพิ่มเข้า reading list แล้ว เราคุยกันไว้ว่าพอผู้ชมเพิ่มขึ้น จะปรับรายการอ่านบน YouTube แบบเรียลไทม์ และเปิดให้ผู้ฟังเสนอความเห็นว่าอยากให้เราอ่านอะไร
  • ทุกคนครับ ตัว g ไม่ออกเสียง
    น่าจะลองเชิญ Rob Pike มาออกรายการ คิดว่าเขาคงต้องหยิบเรื่องการแก้การออกเสียงมาพูดแน่ ๆ เหมือนได้ยินเสียงเขาแล้ว

    • บน YouTube ก็มีคนทักเรื่องเดียวกันด้วย โธ่เอ๊ย ถ้า Brian แก้ให้เราก็คงดี
      อยากเชิญ Rob Pike มามากเหมือนกัน ตอนนี้กำลังพยายามอยู่ แต่ติดต่อยากกว่านิดหน่อย
  • ดูวิดีโอไปแค่ประมาณหนึ่งในสาม แต่เห็นได้ว่าผู้ดำเนินรายการตั้ง คำถามที่มีแง่มุมลึกซึ้ง ได้ค่อนข้างดี

    • เพิ่งรู้ว่าเข้า Top 20 ของ Hacker News บ้าไปแล้ว
      ผมคือ Carter หนึ่งในผู้ดำเนินรายการของวิดีโอนี้ ดีใจที่ทุกคนดูแล้วสนุก การได้คุยกับ Brian Kernighan ถือเป็นเกียรติอย่างยิ่งจริง ๆ
  • เนื่องจากรูปแบบนี้เป็นการพูดถึงหนังสือ คิดว่าน่าจะดีถ้ามีการรวบรวมรายชื่อหนังสือที่พูดถึง และถ้าเป็นไปได้ก็รวม รายการสื่อ ไว้ในคำอธิบายหรือบางส่วนของคอมเมนต์
    ผมเพิ่ม "The Bit Player" (สารคดี Claude Shannon ปี 2018) ลงในรายการที่จะดูแล้ว และเพิ่ม "Recoding America", "Chip War", "Endurance: Shackleton's Incredible Voyage" ลงในรายการที่จะอ่านด้วย

    • สงสัยว่าหมายถึงอะไรกันแน่ หมายถึงรายชื่อหนังสือทั้งหมดที่จะพูดถึงในอนาคตหรือเปล่า? ถ้าสนใจ สามารถดูได้ที่เว็บไซต์ของเรา www.bookoverflow.io
  • น่าจะเพิ่ม Software Tools in Pascal ของ Kernighan เข้าไปในรายชื่อหนังสือที่จะพูดถึงในพอดแคสต์ด้วย
    ผมมีเล่มนั้นอยู่ และคิดว่าเป็นหนังสือที่ดี

    • หัวข้อนั้นมีเรื่องให้คุยมากกว่าที่คิดเยอะ
      Kernighan กับ Plaugher เขียน "Software Tools" ด้วย RATFOR ก่อน แล้วจึงเขียน "Software Tools in Pascal" และจากประสบการณ์นั้นโดยตรง Kernighan ก็เขียนบทความชื่อ "Why Pascal Is Not My Favorite Programming Language"
      การเขียนด้วย Pascal ควรจะง่ายกว่าการเขียนด้วย RATFOR มาก แต่กลับไม่เป็นเช่นนั้น Kernighan จึงลองคิดว่าทำไมถึงเป็นแบบนั้น
      บทความนี้ยังน่าสนใจอยู่ และดูได้ที่นี่ เช่น: https://www.cs.virginia.edu/~evans/cs655/readings/bwk-on-pas...
      อย่างไรก็ตาม บทความนี้เดิมทีหมายถึง Pascal มาตรฐาน ส่วนส่วนขยายอย่าง Turbo Pascal แก้ปัญหาไปได้หลายอย่าง แต่ตามที่เขาพูดไว้ ส่วนขยายเหล่านั้นไม่สามารถพกพาข้ามกันได้ ถึงอย่างนั้น เมื่อ Turbo Pascal กลายเป็นส่วนขยาย "มาตรฐาน" โดยพฤตินัย ก็ช่วยแก้ได้ในระดับหนึ่ง
    • การได้เจอ Software Tools in Pascal ที่ร้านหนังสือในห้างแถวบ้าน ในยุคที่ผมยังไม่มีแม้แต่คอมพิวเตอร์ที่จะรัน Pascal ได้ กลายเป็นเหมือนสูตรโกงสำหรับเส้นทางอาชีพของผม
      ผมทึ่งกับแนวคิดและงานเขียน และมันก็กลายเป็นจุดเริ่มต้นให้ผมไปตามอ่านงานสำคัญอื่น ๆ ของ Kernighan ต่อ
  • Kernighan ยังเป็นผู้เขียนร่วมของหนังสือ The Go Programming Language ด้วย อย่างน้อยก็ในฉบับพิมพ์ครั้งแรก

    • นั่นเป็นเหตุผลที่ Go ไม่เปิดให้เลือก แต่บังคับใช้ สไตล์วงเล็บปีกกาแบบ K&R หรือเปล่า?