• 5 min

ทำไมเพจเราเน้นภาษา C/C++ จังเลย?

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

เป็ดไอคอนของเรื่องเล่าชาวอัลกอ Practical Algorithms
Practical Algorithms: เรื่องเล่าชาวอัลกอ
เพจที่อยากให้คนไทยมีเนื้อหาอัลกอริทึมดีๆ ให้ได้อ่านกัน
เป็ดน้องอัลกอกำลังปีนตัวอักษร C ที่ใต้ตัว C มีคำว่า programming

ทำไมเพจเราไม่เคยเขียน 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 เองก็ได้ 🤪)

0

บทความอื่นๆ