Review คลิปรีวิวของรีวิว: ชี้แจงการรีวิวหนังสือ Node.JS for Beginner ปี 2020

#REVIEW#TECHNICAL

28 พ.ย. 2563

DISCLAIMER: เนื้อหาต่อไปนี้เป็นเพียงความคิดเห็นส่วนตัวเท่านั้น แต่ค่อนข้างหาข้อมูลมาประกอบอยู่พอสมควร

Spoiler: บล็อกนี้คือติล้วน ๆ ไม่มีชมเลย ในคลิปจะเจอกับคำพูดที่ทำให้รู้สึก "อิหยังวะ" อยู่เป็นเนือง ๆ

เรื่องนี้เกี่ยวกับหนังสือเล่มหนึ่งที่ชื่อ Beginning NodeJS Programming เขียนโดยคนดังแห่งวงการ developer ไทย (ด้านไหนไม่รู้) ที่ Riffy ซื้อมาลองอ่าน

ปกหนังสือ

หลังจากนั้นซักพัก SaltyAom แห่ง BRIKL ก็ได้เขียนบล็อกรีวิวหนังสือเล่มนี้แบบจัดเต็มมาก ส่วนตัวที่ได้ลองอ่านก็รู้สึกเห็นด้วยกับรีวิวนี้ไม่น้อย

แต่หลังจากนั้นผู้เขียนก็ได้ออกมาชี้แจงเกี่ยวกับรีวิวอันนี้ โดยทำเป็นคลิปลง Youtube

ในบล็อกนี้เราจะมาพูดถึงคลิปอันนี้กัน

ความเห็นสำหรับคลิป

ในคลิปนี้มีหลายข้อที่ขัดใจกับสิ่งที่พูดมามาก ไล่เป็นข้อ ๆ เลย

"ถ้าหากว่าหนังสือนี้เขียนไม่ดี ก็ให้คนอ่านเขาตัดสินเอง และคนที่คิดตัดเครดิตก็ไปเขียนเล่มอื่นมาสู้กัน ให้ประชาชนเห็นด้วยตา ว่าหนังสือใครเป็นอย่างไร"

เอ้า ก็นี่ไงคนอ่าน อ่านแล้วรู้สึกว่ามันห่วยไงถึงมารีวิว ยังมีหน้ามาด่าแบบสุภาพอีก แล้วถ้าไม่ได้เขียนนี่วิจารณ์ไม่ได้ใช่มั้ย

(2.40) "ถ้ามืออาชีพจริงยังไงก็อ่านกันเป็นวัน"

เนื้อหามันเบสิกมากถึงขั้นมากที่สุด แบบ search google เองก็เจอใน 2-3 ชม. อยู่ดี ในขณะที่ใน codecademy มีคอร์สที่สอนทำแบบเดียวกัน ซึ่งราคา pro subscription ก็แค่ $15.99/month เท่านั้นเอง (อ้างอิงจากวันที่โพส) ถูกกว่าหนังสือเล่มนี้เกือบครึ่งแถมได้ interactive ด้วย

เดี๋ยวแจกวาร์ปให้เลยครับ ไม่ได้ค่าโฆษณาด้วยนะ

(4.45) "Search google บางอย่างก็ไม่ได้มีทั้งหมด บางอย่างมาจากประสบการณ์ของผม"

Search ดี ๆ เจอนะ อย่างเช่นอันข้างบนไง แล้วต่อให้ในคอร์สไม่ได้สอนการต่อ database ครบทุกตัว แต่ยังไงก็จะได้พื้นฐานที่ถูกต้องและมี "good practice" ประมาณนึง จะหาอ่านต่อเองก็คงไม่ยาก

(5.40) "Bad practice และ Anti-pattern อันนี้ผมไม่เข้าใจนะครับ"

เอิ่ม คุณเขียนหนังสือได้ยังไงถ้าไม่รู้จักสองคำนี้ แสดงว่า "ประสบการณ์ของผม" ที่เอามาเขียนไม่ได้มี Best practice เลย แค่ใช่ verb GET ในการลบข้อมูลนี่ก็ Anti-pattern สุดโต่งแล้ว

(6.05) "พรอส (Pros)"

ไม่มีอะไร ขยี้เฉย ๆ

(7.20) "Cons, Major อันนี้ผมไม่เข้าใจนะ"

เหมือนเดิม ขยี้จนสะอาดละ

(7.42) เรื่องเกี่ยวกับ font แนว Comic sans

ประเด็นคือ font แนวนี้ไม่เหมาะเอามาเขียนหนังสือแบบนี้เพราะมันอ่านยาก ซึ่งขัดกับที่คุณบอกว่าหนังสือเล่มนี้ตั้งใจให้อ่านง่าย

ยังมีเรื่องอื่นอีก เช่น การเว้นวรรคคำไม่สม่ำเสมอเลย พิมพ์ผิดก็เยอะ ยิ่งส่วนโค้ดควรใช้ font แบบ monospace เพื่อให้อ่านง่าย เพราะหนังสือก็เป็นขาวดำไม่ได้มี highlight

(8.06) "ตรงนี้คุ้มหรือไม่คุ้มอยู่ที่ผู้อ่าน คุณจะมาตัดสินไม่ได้ว่าคุ้มหรือไม่คุ้ม"

กลับไปข้อ 1

(9.37) "Callback hell คืออะไรไม่เข้าใจนะครับ"

เห้ย!! เขียนหนังสือ JavaScript ยังไงไม่รู้จัก Callback hell (อยากรู้ว่า Callback hell คืออะไรอ่านได้ที่นี่เลย https://medium.com/thinc-org/callback-promise-async-await-วายร้าย-แห่ง-javascript-f5a842e59d9e)

(10.00) "เราสามารถใช้ GET ในการ delete data ก็ได้นะ"

ทำได้ไม่ได้แปลว่าควรทำ ก็บอกอยู่ไงว่ามันเป็น Bad practice และ Anti-pattern คือถ้าอยากจะบอกว่ามันทำได้ก็ควรเขียนไว้เลยว่านี่ไม่ใช่ตัวอย่างที่ดี ไม่ต้องมาอ้างว่ามันแล้วแต่เคสด้วย ตามหลักทั่วไปเค้าไม่ทำกัน และการสวนกระแสเรื่องนี้ก็ไม่ได้ทำให้คุณดูเก่งกว่าคนอื่นแต่อย่างใด

(10.14) (หัวข้อ Promise Wrapper แต่ใช้ async/await แทน) "เราใช้ async/await ได้เลย"

ใช่และเป็นเรื่องที่ดี แต่ในเมื่อหนังสือชื่อ "Beginning NodeJS Programming" คุณก็ไม่ควรคาดหวังให้คนอ่านที่เป็นมือใหม่เข้าใจความต่างของ Promise กับ async/await ไง (ถ้าอยากรู้ว่ามันคืออะไรดู medium ในข้อ 9 หรือ google เอาเลยก็ได้ครับ)

(12.27) "ตรงนี้ไม่ทราบนะว่าผิดกฎหมายหรือไม่ การทำร้ายร่างกายบุคคลให้ได้รับบาดเจ็บหรือถึงกับชีวิต..."

what??

(13.58) "อันนี้ผมไม่ทราบเพราะว่าผมไม่เคยได้ใช้ container และผมไม่เคยมีขนาดโปรเจคไหนเกิน 1GB เลย อย่างมากก็แค่ 100MB"

Meanwhile... Screen Shot 2563-11-28 at 09.36.56

(15.13) "ถ้าไม่เอาพวก express หรือ lib อื่น ๆ มาครอบ Node.js จะเร็วมาก"

ถ้าดูจาก benchmark ของ fastify ใน github แล้วจะพบว่า fastify เร็วกว่า bare Node.js ด้วยซ้ำ แต่ก็ยังถือว่าช้าถ้าเทียบกับหลาย ๆ ตัวในตลาดอยู่ดี อ้างอิงจาก https://www.techempower.com/benchmarks/

(16.54) "ก็ประมาณนั้นแหละ non io ก็ไม่มีการ input/output ไม่มี log"

ไม่รู้จัก console.log สินะ แต่เอ๊ะ! ในหนังสือก็ใช้นี่นา (คือเขียนผิดก็ยอมรับตรง ๆ ไม่น่ายากนะครับ)

(17.22) "ก็มันทำได้ก็คือทำได้สิ มันจะ Bad practice หรือไม่ ผมจะต้องไปวงเล็บไว้ทำไม"

อะไรกันเนี่ย!! ทำหนังสือมาขายราคา 2,500 (ลดเหลือ 900) ให้มือใหม่อ่าน แต่ไม่คิดจะสอนเรื่อง practice (แนวทาง) ที่ดีในการเขียนโค้ด!! คุณคิดจะเอาเงินแล้วไม่สนคุณภาพแบบ product บางตัวของคุณไม่ได้!

(เรื่องสร้างไฟล์ใน node_modules) "ตรงนี้ผมไม่เข้าใจว่ากำลังสื่ออะไร"

กำลังสื่อว่าไม่ควรไปยุ่งกับ node_modules ด้วยประการทั้งปวงยังไงเล่า!!!

โดยปกติแล้วเราจะไม่แตะต้องอะไรกับ node_modules แต่จะจัดการผ่าน package manager ทั้งหลาย (เช่น npm, yarn หรือ pnpm) ดังนั้นตามหลักทั่วไปแล้วเราจะไม่ไปสร้างไฟล์ใน node_modules แน่นอน

(19.35) "คือ underscore มันใช้ได้อยู่แล้ว เมื่อมันใช้ได้ก็ใช้ไป ไม่ได้มีปัญหานะ"

จริงอยู่ที่ library อย่าง underscore และ lodash มีประโยชน์หลายอย่าง มันเกิดมาในยุดที่ JavaScript ยังไม่มีตัวจัดการ array ที่ดี แต่ในปัจจุบันหลาย ๆ feature มีใน JavaScript เองอยู่แล้วและไม่จำเป็นต้องลงเพิ่ม การลง lib เพิ่มนอกจากจะเพิ่มขนาดของโปรเจกแล้วยังมีความเสี่ยงด้าน security อีกด้วย ถ้าไม่จำเป็นคิดว่าก็ไม่ควรลง

และเอาจริง ๆ ในตอนนี้การใช้ lodash ก็ไม่ใช่เรื่องที่ดีเท่าไหร่แล้ว ลองอ่านจากบล็อกนี้แล้วจะพอเข้าใจว่าทำไม

(21.20) "Arrow นี่ไม่ต้องอธิบายอยู่แล้ว เพราะว่ามันเป็นมาตรฐานใหม่"

ก็เพราะมันเป็นมาตรฐานยังไงเล่าถึงต้องอธิบาย!! นี่ตกลงทำหนังสือให้มือใหม่จริงมั้ยเนี่ย

(22.50) "ที่เราต้องส่ง 200 เพื่อให้ทาง client ทำงานต่อไปได้ ถ้าส่ง 400 หรือ 500 ก็ทำงานต่อไม่ได้"

ห้ะ!! ถ้างั้นจะมี status 400, 401, 403, 500 etc. ไปทำไมล่ะ status code ก็เป็นส่วนหนึ่งใน response หนิ ฝั่ง client แค่ต้องจัดการ status code แปลก ๆ แต่ไม่ได้จะพังแต่อย่างใด

(23.13) เรื่อง Xampp บน production

มันทำได้แต่ไม่ควรอย่างยิ่ง เพราะ Xampp มีปัญหาเรื่อง security และ config ยาก อย่างที่ใน StackOverflow ได้กล่าวไว้

(23.36) "ตรงนี้ผมไม่จำเป็นต้องอธิบายนะครับว่าไอ้สิ่งนี้ไม่ควรเอาไปใช้ในเคสนั้นเคสนี้"

หนังสือสำหรับมือใหม่แต่ไม่คิดจะสร้าง good practice ให้คนอ่าน แต่เอาเถอะ ตัวคนเขียนก็เหมือนจะไม่รู้จักเรื่องพวกนี้อยู๋แล้ว (แต่เขียนหนังสือราคาหลักพันอ่ะนะ)

After note

เคยได้ยินกิตติศัพท์เกี่ยวกับคนนี้มาบ้าง แต่ไม่เคยสัมผัสจริง ๆ ว่าเป็นยังไง แต่ตลอดเวลาที่ดูคลิปจะมีข้อสังเกตบางอย่าง

  • คนเขียนแทบไม่รู้อะไรเลย โดยเฉพาะภาษาอังกฤษ คำว่า Practice, Major, Minor Pros & Cons และอื่น ๆ อีก ไม่รู้ว่าเพราะพื้นฐานภาษาอังกฤษไม่แข็งแรงหรือเปล่าเลยอ่านพวก blog หรือ document ต่างประเทศไม่ค่อยรู้เรื่องถึงได้มีความรู้ (และความมั่นใจ) แบบผิด ๆ
  • มีอีโก้สูงมาก ๆ หลายอย่างที่อยู่ในบล็อกรีวิวเป็นความผิดพลาดแบบพื้น ๆ และไม่ควรเกิดขึ้นกับหนังสือราคาขนาดนี้ แต่ผู้เขียนกลับบอกว่า "ไม่รู้" "ไม่เข้าใจ" "แล้วแต่การใช้งาน/กรณี" "แล้วแต่ผู้อ่าน" เป็นการกลบเกลื่อนและ blame คนรีวิวกลาย ๆ ซึ่งคิดว่าไม่ใช่ท่าทีที่ดีเท่าไหร่ จะว่าไปก็คล้ายกับลุงแถวบ้านบางคนเนอะ

โดยสรุปแล้วหนังสือเล่มนี้ล้มเหลวในการปูพื้น NodeJS สำหรับมือใหม่ แบบไม่เป็นท่า

เข้าใจว่าเป็นหนังสือเน้นปฏิบัติ แต่การไม่อธิบายพื้นฐานหลายอย่างจะทำให้มือใหม่ไม่เข้าใจ สุดท้ายก็ก็อปโค้ดแปะแล้วรันเลย ไม่ต่างอะไรกับ search Google หรือ StackOverflow หรอก

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

สุดท้ายอยากฝากข้อความถึงผู้เขียนนะครับว่า

คุณนี่มัน "กบในกะลา" จริง ๆ

สวัสดีครับ

UtopiaBeam Ⓒ 2019-2023