ผมเคยเล่าให้ฟังบ้างว่าเคยมีส่วนร่วมในการสัมภาษณ์งาน ซึ่งเป็นโอกาสที่ดีมาก เพราะผมได้ทำตั้งแต่ทำงานปีแรกเลย (นี่ผมสัมภาษณ์คนมา 10 ปีแล้วนะเนี่ย 😉 ) ได้เจอคนมาหลากหลายแบบเหมือนกันครับ ในฐานะที่เป็นสายเทคนิคัล ผมก็จะได้สัมภาษณ์แนว ๆ เทคนิคัลซะทั้งหมดนั่นแหละ ซึ่งตามปรกติของสายนี้เราจะต้องให้ทำเทสต์ก่อนว่าคนที่สัมภาษณ์เนี่ยเขามีความสามารถจริงหรือเปล่า เพราะว่าถ้าเป็นคนที่ไม่มีทักษะเลยเราก็คงให้เขาเข้ามาร่วมงานไม่ได้ เพราะเขาก็คงจะทำงานไม่ได้

แต่ทีนี้ถ้าพูดเรื่องการทดสอบว่าเราดูอะไรกัน ส่วนตัวผมเน้นเรื่องความรู้พื้นฐาน คือคนที่มีความรู้พื้นฐานเนี่ยจะทำงานระดับพื้นๆ ได้ ถึงแม้ว่าการทำงานที่ยากขึ้นไปอาจจะต้องใช้ความคิดสร้างสรรค์มากขึ้น แต่ว่าเขาก็ต้องมีความรู้พื้นฐานด้วยเช่นกัน ดังนั้นคนที่มีแต่ความคิดสร้างสรรค์อย่างเดียวคงทำงานอะไรไม่ได้

อันที่จริงคนที่คิดอย่างเดียวโดยปราศจากพื้นฐานเนี่ย เราเรียกง่าย ๆ ว่าเป็นพวกเพ้อฝันครับ

จากประสพการณ์ส่วนตัวในระยะหลังผมพบว่าผมเจอคนที่ขาดความรู้พื้นฐานอยู่บ่อย ๆ อย่างเช่นที่เจอเอาหมาด ๆ เลยคือถามว่า integer ขนาด 32 บิตนั้นสามารถเก็บตัวเลขได้กี่หลัก (คำตอบคือ 10 ครับ ถ้าเป็น sign int จะเก็บได้ตั้งแต่ลบสองพันล้านกว่า ๆ ถึงสองพันล้านกว่า ๆ ทั้งนี้ถ้าจะเอาให้ปลอดภัยควรเก็บไม่เกิน 9 หลักนะครับ ไม่งั้นอาจจะเกิด overflow ได้เมื่อเกินสองพันล้าน ทั้งนี้เวลาฟังคำตอบก็ต้องดูเหตุผลประกอบครับ คำถามนี้ตอบว่า 9 ก็ได้เช่นกันด้วยเหตุผลเดียวกัน)

คนมักจะถามว่าต้องรู้ขนาดนี้เลยเชียวหรือ เพราะบางครั้งเขาก็จะทำตาม "รูปแบบ" ที่ทำกันมาจนเป็นแบบแผน ซึ่งการทำตามรุปแบบนั้นมันง่ายและทำให้จบงานได้อย่างรวดเร็ว แต่ถ้าคุณเอาแต่ตามรูปแบบอย่างเดียวโดยไม่รู้เหตุผลเบื้องหลังว่าทำไปเพื่ออะไร สักวันนึงเมื่อคุณประสพกับปัญหาที่เกิดจากรูปแบบคุณจะไม่สามารถไปต่อได้ อันที่จริงคือคุณจำเป็นต้องรู้ข้อดีข้อเสียและปัญหาที่อาจจะเกิดขึ้นจากการเลือกใช้รูปแบบนั้น ๆ ด้วย ซึ่งความรู้พื้นฐานจำเป็นมาก

ผมยกตัวอย่างนึง ถ้าพูดถึง access level เราก็มักจะพูดว่า ฟังก์ชั่นควรเป็น public ในขณะที่ฟิลด์ควรเป็น private ดังนั้นจะมีบางคนเขียนคลาสตามนี้โดยไม่คิดอะไรเลยว่า public คืออะไร และ private คืออะไร ทั้ง ๆ ที่จริง ๆ ถ้าคิดกันตามตรรกกะแล้วฟังก์ชันที่เป็น private ก็มีประโยชน์ของมัน ส่วนฟิลด์ที่เป็น public ก็ไม่ใช่ปีศาจ (ผมใช้ constant public field ประจำ ใช้ในแนว enumerator น่ะครับ)

ยิ่งเทคนิคที่มีความยากสูง ๆ ความรู้พื้นฐานก็ยิ่งสำคัญมากขึ้น เช่นเรื่องของการทำ multi-thread คุณต้องรู้เรื่องของการทำ synchronization ต้องรู้เรื่องของ atomic operation ไม่ใช่สักแค่เอา lock ไปแปะหัวท้าย (เพราะนั่นคือการบังคับให้ทุกงานถูกประมวลผลตามลำดับ (serial) กลายเป็นว่าเขียนของยากมาโดยไม่ได้ประโยชน์อะไรเลย) ซึ่งมันเป็นการแก้ปัญหาที่ปลายเหตุละ

ที่สำคัญที่สุด มันไม่ผิดที่ไม่รู้ แต่ที่ผิดจริง ๆ คือรู้ทั้งรู้ว่าตัวเองไม่รู้ก็ปล่อยให้ตัวไม่รู้ต่อไปทั้งอย่างนั้นครับ ดังนั้นอะไรก็ตามที่คุณคิดว่าตัวเองขาดไปคุณต้องศึกษาเพิ่ม ส่วนตัวผมพบว่าวิธีการตรวจสอบว่าตัวเองไม่รู้พื้นฐานเรื่องไหนก็คือการเปิดหนังสือที่เป็น reference แล้วอ่านทีละเรื่องไปตามลำดับ อย่างตระกูล In The Nutshell ของ Oreilly เนี่ยเป็นตัวอย่างที่ดี ลองค่อย ๆ อ่านไปตั้งแต่ต้นยันจบแล้วดูว่าตัวไม่เข้าใจมากน้อยแค่ไหน ถ้าเกิดว่ามึนตั้งแต่หน้า 10 นี่ก็ควรทบทวนควรรู้ด่วนล่ะครับ

สร้างตึกเริ่มที่ฐานราก สร้างคนต้องเริ่มที่ความคิดพื้นฐานครับ ลองดูนะ