ทำไมเพจเราเน้นภาษา C/C++ จังเลย?
โดนถามมาบ้างเหมือนกันว่า แบบทำไมเพจนี้ไม่เขียนภาษาอื่นนอกจาก C บ้างเลย หรือทำไมไม่เขียน Python บ้าง คือนอกจากเรื่อง สอวน. มันก็ยังมีเหตุผลอื่นๆอีกอ่ะนะ


ทำไมเพจเราไม่เคยเขียน python หรือภาษาอื่นๆนอกจาก C/C++ ลงบล๊อกเลย… เหตุผลจริงๆมีข้อเดียวเลยคือ
แอดไม่อยากเขียน 555
…ตอนนี้หลายคนชอบใช้ python ในการอธิบายโค้ด หรืออัลกอริทึมกัน แต่ตอนนี้แอดคิดว่าตัวภาษา มันไม่ได้เหมาะกับการที่จะเอาไปใช้เป็นภาษาเริ่มต้นขนาดนั้น
เอาจริงๆไม่ใช่แค่เรื่องอัลกอหรอก ถ้าจะเรียนเพื่อไปเขียนโปรแกรมจริงๆจัง ไม่ได้แค่เอาไปทำ automation กระจุกกระจิกอ่ะ ยังไงแอดก็แนะนำภาษา C/C++ เป็นภาษาแรกอยู่ดี
เชื่อว่าหลายๆคนคงจะคิดต่างกันไปแหละ แต่ที่แอดชอบมันเป็นเพราะว่า
มัน low-level มากพอที่แต่ละบรรทัดของ C มันเกือบจะแปลงเป็น Assembly ได้เลย
ถ้าได้อ่านหรือได้เขียน Assembly กันมาบ้าง (หรือไม่ก็ได้ลอง compile C เป็น assembly) คือสองภาษานี้มันแทบจะเทียบบรรทัดกันได้แบบ 1 ต่อ 1 เลย
ซึ่งสำหรับแอดแล้วมันทำให้เห็นว่า จริงๆแล้วคอมพิวเตอร์เราเนี่ยในแต่ละคำสั่งย่อยๆที่มันส่งไปให้ CPU ทำงานเนี่ย มันทำอะไรได้บ้าง ทำได้แค่ไหน
จากที่แอดเจอตอนสอนอยู่คือ ถ้าจะหาผลรวมของตัวเลขในอาเรย์ของ integer งี้ บางภาษาก็อาจจะมีฟังก์ชันผลรวมมาให้เลย แล้วเราก็ส่งอาเรย์เข้าไปใช่มะ มันก็ง่ายดีแหละ แต่พอถ้าถามจี้เข้าไปอีกหน่อยว่าแล้วจริงๆมันทำงานยังไง หาคนตอบได้อย่างมั่นใจว่า “ก็ลูปบวกทุกตัวในอาเรย์ก็ได้” มันหายากนะ
จริงๆแล้วพอเขียนโปรแกรมไปได้สักพัก เดี๋ยวก็เข้าใจเองแหละว่ามันทำได้ แต่กับคนที่เพิ่งเริ่มต้นเขียนเลยมันไม่ใช่ (อย่างน้อยก็จากประสบการณ์ที่แอดเจอ) ก็เลยคิดว่าการที่ปลูกฝังให้เข้าใจแต่แรกเลยว่า การคิดจาก operation ย่อยๆที่ CPU ทำได้ มันดีกว่าไปพึ่งฟังก์ชันอะไรสักอย่าง เพราะถึงจุดๆนึงมันก็คงไม่มีฟังก์ชัน built-in มาให้ทุกอย่างหรอก
(อีกอย่าง compiler C มัน optimize โหดมาก)
มันไม่ซ่อน Concept ที่ภาษาอื่นๆทำเบื้องหลัง
ตอนเริ่มเขียนโปรแกรมใหม่ๆอ่ะ เราจะไม่ได้เจอคอนเซปต์อย่าง Heap vs Stack memory, Memory management, Garbage collection, pointer, reference ฯลฯ ไม่รู้สิมันมีอีกเยอะ จำได้ไม่หมดเหมือนกัน (ใครอยากเขียนเพิ่ม คอมเมนต์มาได้)
ประเด็นมันอยู่ที่คอนเซปต์พวกนี้ค่อนข้างสำคัญมากซะด้วย แต่โดย default แล้วภาษาที่ทำมาให้เขียนง่ายๆอย่าง python มันไม่พูดถึงเลย เพราะมันแอบใช้คอนเซปต์พวกนี้ในเบื้องหลังแล้วก็ไม่ได้บอกคนเขียนมามันทำอะไรบ้าง (หมายถึงไม่ได้เอาให้คนเขียนโปรแกรมต้องมานั่งคิดแต่แรก)
แต่ก็ไม่ได้หมายถึงให้เรียน C/C++ จนเขียนโปรแกรมได้ทุกอย่าง แต่คอนเซปต์หลายอย่างที่ว่ามาเนี่ยคือภาษาอื่นๆมันซ่อนไว้ ซึ่งมันมีประโยชน์มากถ้าเราเข้าใจ เพราะมันจะทำให้เราเข้าใจการทำงานภายในมากขึ้นไปอีก และเข้าใจการเขียนโปรแกรมอย่างอื่นอีกเยอะ
ด้วยความที่ C/C++ มันเอาคอนเซปต์พวกนี้มาให้เราแก้เอง เจอเอง ทำพังเองอ่ะนะ ถ้าผ่านมันมาได้ก็ควรจะเข้าใจบ้างแล้วแหละ
ที่ว่ามานี่ไม่ได้หมายถึงให้เอาแต่เขียน C/C++ แต่แค่คิดว่ามันควรจะเอามาใช้เป็นภาษาแรกที่เขียนจริงๆจังๆ ไม่ใช่แค่ใช้ตอนสอนวิชาอัลกอกับ data structure อย่างเดียว
ปล. เขียนย้ำอีกที ว่านี่คือแนะนำสำหรับคนที่คิดจะเขียนโปรแกรมจริงๆจัง นะฮะ
ปล2. ถ้าจะมาสาย Competitive Programming ก็ทั้ง Concept ทั้ง Performance ก็สำคัญทั้งคู่อ่ะนะ
ปล3. แล้วทำไมไม่ rust ไปเลย? จริงๆก็เป็นภาษาที่น่าสนใจนะ แต่ส่วนตัวคิดว่า syntax เข้าใจยากกว่า C นิ๊ดเลยไม่คิดว่าเอาไปอธิบายให้คนทั่วไปพังจะรู้เรื่อง(แต่ไม่รู้สิ แอดอาจจะ bias เองก็ได้ 🤪)