ยินดีที่ได้รู้จัก Golang เล่มเดียวที่กล้าแหวกแนวเปรียบเทียบทั้ง 3 ภาษา ผ่านภาษาซี (C) และจาวา (Java)
(ขออภัยที่ราคาแพงไปหน่อย เนื่องจากเล่มนี้ทำเอง มีจำนวนจำกัด ไม่ได้ผ่านสำนักพิมพ์ ต้นทุนเลยสูง)
ถ้าเป็นเมื่อก่อน 10 ปีที่แล้ว ยุคสมัยที่ภาษา Java มันครองโลกในงานระดับ Enterprise หรือก็คืองานพัฒนาซอฟต์แวร์ในระดับองค์กร ทั้งฝั่ง front -end กับ back-end เหตุผลที่นิยมเพราะความสามารถเรื่อง WORA (Write Once Run Anywhere) หมายถึงเขียนโปรแกรมด้วยภาษา Java เพียงครั้งเดียว แล้วสามารถนำไปรันบน OS ได้ทุกที่ (ไม่ต้องคอมไพล์แยกแต่ละ OS) ซึ่งความสามารถนี้เหมาะกับงานระดับองค์กร เพราะเซิร์ฟเวอร์จะมีความหลากหลายของ OS เช่น มีทั้งเครื่องที่เป็นวินโดวส์ หรือ Linux พร้อมทั้งเวอร์ชันที่แต่ต่างกันอีกด้วย เป็นต้น ด้วยเหตุนี้ภาษา Java จึงเหมาะมาก เราแค่เขียนโค้ด แล้วคอมไพล์เพียงครั้งเดียว ก็สามารถนำไป deploy บน OS ที่แตกต่างกันได้เลย
แต่มายุคสมัยนี้เทคโนโลยีพวก container อย่าง Docker และ K8s มันได้รับความนิยม จึงทำให้สมัยนี้เขียนโปรแกรมด้วยภาษาอะไรก็ได้ แล้วสามารถนำไป deploy บน OS ที่แตกต่างกันได้เลย จึงทำให้มีทางเลือกในการพัฒนาซอฟต์ในระดับองค์กรด้วยภาษาอื่นๆ โดยไม่ต้องใช้ภาษา Java อีกต่อไป
หนึ่งในภาษาที่นิยมในตอนนี้ (เป็นทางเลือก) ยิ่งถ้าเราไปเปิดเว็บหางานก็คือภาษา Go เพราะมันเป็นภาษาที่คอมไพล์แล้วได้ไฟล์ executable ที่มีขนาดเล็ก ประสิทธิภาพการรันที่ดี ไม่กิน RAM ตรงนี้จึงทำให้มันเหนือกว่าภาษา Java ที่กิน RAM มากเกินไป จึงทำให้ภาษา Go เหมาะกับงาน back-end แล้วยิ่งบริหารจัดการ concurrency ได้ง่ายด้วย จึงทำให้ภาษานี้มีเสน่ห์มากยิ่งขึ้น
ยิ่งผู้เขียนได้มีโอกาสมาทำงานแห่งหนึ่ง ที่ต้องใช้ภาษา Go เป็นครั้งแรก ก็เล็งเห็นว่าภาษานี้มีความน่าสนใจ แต่ข้อเสียของมันก็คือ syntax ที่มีการใช้เครื่องหมายปีกกา และวงเล็บเหลี่ยมค่อนข้างเยอะมาก จึงทำให้การอ่านโค้ดดูชวนวุ่นวาย อ่านลำบากไปสักหน่อย บวกกับมีคอนเซปต์แปลกๆ เช่น receiver method interface เป็นต้น ที่ไม่เหมือนชาวบ้านเขา ก็อาจสร้างความงงงวยให้กับผู้ศึกษาภาษานี้ครั้งแรกก็เป็นได้
เหตุผลที่ต้องเขียนเล่มนี้
✔ เนื่องจากภาษา Go มีคอนเซปต์บางอย่างที่แหวกแนวหลุดโลกจาก Java (เรื่อง Methods กับ Interfaces)
✔ หรือฟีเจอร์บางอย่างก็ดีไซน์มาให้ใช้งานง่าย จนภาษา C อาจเหล่ตามองด้วยความอิจฉา
ด้วยเหตุนี้ผู้เขียนจึงพยายามเปรียบเทียบเนื้อหาภาษา Go กับภาษา C และ Java เพราะสองภาษาดังกล่าวเป็นที่นิยมมากกว่า
และหลายคนคงเขียนเป็นอยู่แล้ว แถม syntax ของภาษา Go ก็ได้รับอิทธิพลมาจาก C และ Java
จึงคิดว่าจะช่วยให้ผู้อ่านศึกษาเล่มนี้ได้รวดเร็วปานติดจรวด
ถือว่าเป็นตำราคอมพิวเตอร์ที่แปลกแหวกแนวจากเล่มอื่นๆ ในท้องตลาด
เพราะปกติตำราเล่มอื่น ถ้าเป็น Java C Go ก็จะเนื้อหาเดียวกันทั้งเล่ม
แต่เล่มนี้ใช้การผสมผสามเปรียบเทียบ Go กับ C และ Java เลยมี 3 ภาษาอยู่ในเล่มเดียวกัน
เป็นไงล่ะ!...แจ๋วมั๊ยพี่น้องครับ
ถ้าสนใจลองดูตัวอย่างเล่มนี้ได้
https://drive.google.com/file/d/1phI1jTeSyox27_ezNU0tReOVW4eT7mT3/view?usp=sharing
หรือจะทดลองอ่านบทที่ 1-7 ฟรีๆ ก็ได้นะครับ
https://drive.google.com/file/d/1WtCog4FXiMFruRROez3WfxkmzB5wGqBN/view?usp=sharing
ตัวอย่างหน้าสารบัญ
https://drive.google.com/file/d/1ytfxBB0IyHf8UlEfMOUr_VXsBASyGiOB/view?usp=sharing
จำนวนหน้า 238 หน้า กระดาษ B5 หนังสือใช้ฟอนต์ TH SarabunPSK ขนาด 15
(B5 จะเล็กกว่า A4)
เนื้อหาทั้งหมด
🔸 บทที่ 1 ปูพื้นฐาน
🔸 บทที่ 2 Packages
🔸 บทที่ 3 Variables และชนิดข้อมูล
🔸 บทที่ 4 Strings
🔸 บทที่ 5 Operators
🔸 บทที่ 6 Functions
การประกาศฟังก์ชันใน Go แหวกแนวจากภาษา C
แต่จะคล้ายคลึงกับภาษา Swift และ Kotlin มากกว่า ...ไม่เชื่ออ่านเล่มนี้ดูได้ครัช
🔸 บทที่ 7 Flow Control Statements
Go มีประโยคคำสั่ง for ที่ใช้งานได้แบบทูอินวัน
หมายถึงสามารถเป็นทั้ง for และ while ในภาษา C ได้เลย
ส่วนประโยค switch ในภาษา Go ก็มีฟีเจอร์ที่ช่วยให้เราไม่ต้องใช้ if เลยก็ได้
แถมยังมีประโยค defer ที่ไม่เหมือนใคร ...เอ๊ะมันคืออะไร ต้องอ่านต่อเองนะครับ
🔸 บทที่ 8 Pointers
ในภาษา C เรื่อง Pointer เป็นอะไรที่ปวดหัวไม่พอ ยังแถมไมเกรนให้ด้วย
โดยเฉพาะสัญลักษณ์ -> ที่ชวนให้ตาลาย
แต่ใน Go ได้เสนอการใช้งาน Pointer ที่ง่ายกว่า และปลอดภัยกว่า
แม้ว่าเราจะปวดหัวเรื่อง Pointer อยู่บ้าง
ก็อย่างน้อยช่วยให้เราไม่ต้องไมเกรนขึ้น
🔸 บทที่ 9 Structs
🔸 บทที่ 10 Arrays กับ Slices
🔸 บทที่ 11 Maps
🔸 บทที่ 12 range
เรื่อง Slices ในบทที่ 10 จะมีคอนเซปต์ slicing
และเรื่อง range ในบทที่ 12 จะมีคอนเซปต์ range
ที่คล้ายๆ กับ Python ที่มีคอนเซ็ปต์เหมือนกัน
อธิบายเรื่องนี้ง่ายๆ ชิว ...เปิดอ่านได้เลย
🔸 บทที่ 13 Methods
🔸 บทที่ 14 Interfaces
สำหรับ เรื่อง Methods กับ Interfaces (บทที่ 13 กับ 14)
ต้องบอกว่า Go มันแหวกแนวจากคอนเซปต์ใน Java ค่อนข้างมาก
Go เป็นภาษาที่ไม่ใช่การเขียนโปรแกรมเชิงวัตถุ หรือ OOP
แต่ก็มีฟีเจอร์ Methods กับ Interfaces ที่ทำตัวเลียนแบบ OOP ใน Java
หากคุณคิดว่าแน่จริง ...ต้องอ่านเรื่องนี้
🔸 บทที่ 15 Generics
🔸 บทที่ 16 Concurrency
เรื่อง Concurrency มันเป็นคอนเซปต์การจัดการ process ที่แยกกันทำงานเป็นอิสระต่อกัน
ในหลายภาษาเขียนโปรแกรมเสนอแนวคิดเรื่องเทรด (thread) ที่เป็น process ย่อยๆ ของการทำงาน
จะมาประมวลผลกับบางส่วนของโค้ด ทั้งนี้เราสามารถมีหลายเทรดที่ทำงานเป็นอิสระต่อกัน
เรียกว่า multithreading เช่น ในภาษา C++ และ Java
แต่เรื่องเทรดหากเขียนไม่ดี ผีหลอกวิญญาณหลอนได้
เนื่องจากปัญหา racing condition หรือ dead lock อันปวดหัว
Go จึงเสนอทางสวรรค์ทีใช้งานง่ายกว่าเขียนเทรดเอง ก็คือ goroutine
ปล. มีเวอร์ชั่น ebook วางขายบน MEB ตามลิงก์ต่อไปนี้
https://www.mebmarket.com/web/index.php?action=BookDetails&data=YToyOntzOjc6InVzZXJfaWQiO3M6NzoiMTcyNTQ4MyI7czo3OiJib29rX2lkIjtzOjY6IjIzODA3MyI7fQ