CODESTAR Scale


หลายคนสงสัยว่าต้องเก่งขนาดไหนถึงจะหางานทำได้ ควรรู้เรื่องอะไร หรือ เน้นเรื่องไหนเป็นพิเศษ และถ้าอยากไปทำงานองค์กรชั้นนำของโลก ต้องเตรียมตัวยังไง ลองอ่านบทความนี้ดูครับ ถ้ายาวเกินไปก็จำง่ายๆเลยครับว่า เพียงแค่เขียน Code พื้นฐานเป็นก็หางานทำได้แล้วครับ
บทความนี้จะอธิบายสิ่งที่ผมขอตั้งชื่อว่า CODESTAR Scale ซึ่งเป็นวิธีการวัดระดับความสามารถในการเขียนโค้ด เหมือนกับการเอาเครื่องวัดไฟมาตรวจดูว่ามีกระแสไฟฟ้ามากขนาดไหน หรือ มีความสามารถระดับไหนนั่นเอง ปัญหาทางคอมพิวเตอร์สามารถแบ่งออกเป็น 5 ระดับตามความยากง่าย ซึ่งปัญหาเหล่านี้สามารถพบเห็นได้ทั่วไปในการสัมภาษณ์งาน ตั้งแต่บริษัท Top 5 ใหญ่ที่สุดในโลก อย่าง Apple, Google, Microsoft, Facebook, Amazon จนถึงบริษัทชั้นนำของเมืองไทย

ระดับ 1

เป็นปัญหาสำหรับฝึกหัดเขียนโปรแกรม วิธีคิดตรงมาตรงไป เช่น การหาค่าที่น้อยที่สุดใน Array หรือหาว่าใน Array ข้อมูลเรียงกันแล้วหรือยัง ถ้าสามารถตอบคำถามเหล่านี้ได้ สามารถหางานดีๆ ในบริษัทชั้นนำของไทยได้ เงินเดือนที่ได้ไม่ต่ำกว่า 30,000 บาทต่อเดือน หรือถ้าทำงานในต่างประเทศประมาณ $50,000 ต่อปีขึ้นไป แต่ถ้าทำไม่ได้ก็ไม่ต้องกังวลอะไรมากมาย เพราะหลายคนทำไม่ได้แต่เงินเดือนมากกว่านี้ก็มี ที่น่าแปลกคือหลายคนที่ไม่ผ่าน ระดับพื้นฐานการเขียน Program แต่ไปทำงานที่สูงขึ้น เช่น Artificial Intelligence, Machine Learning หรือ Big Data มันก็เหมือนกับคนที่ยังคูณเลขไม่เป็นแต่ข้ามไปหา ∫ อินทิกรัล เลย

ตัวอย่างปัญหา

มีเลขจำนวนเต็มอยู่ประมาณ 1,000 ตัว ให้หาว่ามีตัวเลข 2 ตัว ที่สามารถรวมกันได้ค่าที่กำหนดหรือไม่ เช่น มีเลข [1, 5, 8, 4, 7] มี 2 ตัวที่รวมกันได้ 10 หรือไม่? คำตอบคือ ไม่มี
มีหุ่นยนต์เดินได้ 4 ทิศทาง คือ ทิศเหนือ ทิศใต้ ทิศตะวันออก และ ทิศตะวันตก ใช้สัญลักษณ์แทน N,S,E,W ตามลำดับ การเดินแต่ละครั้งเดินได้ 1 เมตร จากเส้นทางที่กำหนดให้หาระยะห่างจากจุดเริ่มต้น ในตัวอย่างข้างล่างนี้เส้นทางคือ NNEES ได้ระยะทาง 2.23 เมตร
ให้เขียน Code อ่านข้อมูลตารางจตุรัสจาก File มีข้อมูลจำนวนแถวและหลัก ตามด้วยข้อมูลแต่ละตัว จากนั้นหมุนไป 90 องศาตามเข็มนาฬิกา เช่น
3
1 2 3
4 5 6
7 8 9

ได้ผลลัพธ์คือ
7 4 1
8 5 2
9 6 3

ระดับ 2

เป็นปัญหาที่ต้องใช้โครงสร้างข้อมูล เช่น การใช้ Binary Search Tree เพื่อให้ได้ผลลัพธ์อย่างรวดเร็ว, ปัญหาเกี่ยวกับ String หรือ Array อาจจะมี Greedy อย่างง่าย ถ้าแก้ปัญหาระดับนี้ได้ เงินเดือนที่ได้ไม่ต่ำกว่า 50,000 บาทต่อเดือนขึ้นไป หรือในต่างประเทศประมาณ $60,000 - $70,000 ต่อปี ที่สำคัญคือ 90% ของ Programmer ในบริษัทชั้นนำของไทยไม่ผ่านระดับนี้ และ 90% ของคนจบปริญญาโทด้าน Computer หรือ IT ไม่ผ่านระดับนี้

ตัวอย่างปัญหา

มีเลขจำนวนเต็มอยู่ประมาณ 1,000,000 ตัว ให้หาว่ามีตัวเลข 2 ตัว ที่สามารถรวมกันได้ค่าที่กำหนดหรือไม่ เช่น มีเลข [1, 5, 8, 4, 7] มี 2 ตัวที่รวมกันได้ 12 หรือไม่? คำตอบคือ มี เช่น 5 กับ 7
มีข้อมูลอยู่สองรายการ แต่ละรายการมีนับล้านตัว ให้เขียนโค้ดเพื่อหาว่ามีตัวไหนที่อยู่ทั้งสองแห่ง เช่น [1, 2, 4, 3, 7, 5] และ [2, 5, 8, 6] ได้ผลลัพธ์คือ [2,5]

ระดับ 3

เป็นปัญหา Algorithm มาตรฐานเช่น Greedy, Dynamic Programming, Divide and Conquer, Graph, BFS, Backtracking พบในการสัมภาษณ์งานทั่วไปใน Silicon Valley อาจจะมีในไทยบ้างเหมือนกัน เช่น พวกบริษัทต่างชาติที่มีมาตรฐานระดับสูง เงินเดือนที่ได้ไม่ต่ำกว่า 70,000 - 100,000 บาทต่อเดือน หรือถ้าทำงานในต่างประเทศก็ไม่ต่ำกว่า $70,000 - $100,000 ต่อปี ถ้าศึกษา Algorithm ตามหนังสือหรือ Web ทั่วไป ไม่นานก็สามารถผ่านระดับนี้ได้ เพราะปัญหาทาง Computer สามารถแปลงไปหากันได้

ตัวอย่างปัญหา

มีเลขจำนวนเต็มอยู่ประมาณ 100 ตัว ให้หาว่ามี Subset ที่รวมกันได้ค่าที่กำหนดหรือไม่ เช่น มีเลข [1, 5, 8, 4, 7] มี Subset ที่รวมกันได้ 10 หรือไม่? คำตอบคือ มี เช่น [1, 5, 4]
ให้เขียน Code เพื่อตัดแบ่งข้อมูลออกเป็น Palindrome หรือตัวที่อ่านจากซ้ายไปขวาได้เหมือนกับ อ่านจากขวามาซ้าย โดยต้องแบ่งให้น้อยครั้งที่สุด เช่น
ATAA            // แบ่ง 1 ครั้ง เป็น ATA | A 
ATGCG           // แบ่ง 2 ครั้ง เป็น A | T | GCG
ATGTA           // แบ่ง 0 ครั้งเพราะเป็น Palindrome อยู่แล้ว

มหาวิทยาลัยในเมืองไทย มีสอนถึงระดับ 3 แน่นอน แต่คนทั่วไปเรียนแล้วจำอะไรไม่ได้ ลองถามง่ายๆว่า Binary Search คืออะไร น้อยคนที่จะตอบได้ ยิ่งถามว่ามันต่างจาก Binary Search Tree ยังไง ยิ่งไปกันใหญ่ รู้ไม่เกิน 10% ของคนที่เรียนจบปริญญาตรีสายตรง

ระดับ 4

เป็นปัญหาที่ใช้ในการทดสอบเข้าทำงานของบริษัทชั้นนำ เช่น Apple, Google, Microsoft, Facebook, Amazon ปัญหาระดับนี้ต้อง Devise หรือ คิดค้น Algorithm ขึ้นมาเอง และอาจจะต้องใช้การพิสูจน์ทางคณิตศาสตร์ หรือ Theory of Computation เข้ามาเกี่ยวข้องด้วย ถ้าผ่านระดับนี้ได้ สามารถส่งใบสมัครไปบริษัทชั้นนำเหล่านี้ได้ ไม่ว่าคุณจะถนัดภาษาอะไรก็ตาม คนระดับนี้เป็นที่ต้องการตัวของบริษัทระดับโลกตลอดเวลา รายได้ไม่ต่ำกว่า $100,000 ต่อปี

ตัวอย่างปัญหา

ในสนามกีฬาแบบจตุรัสแห่งหนึ่ง มีหลอดไฟจำนวน N * N ดวง เมื่อกดปุ่มเปิดปิดไฟดวงไหน หลอดไฟในแถวเดียวกันทั้งแนวตั้งและแนวนอน จะเปลี่ยนสถานะไปด้วย ให้เขียน Code หาว่าถ้าไฟทุกดวงเปิดอยู่ ต้องกดปุ่มอย่างน้อยที่สุดกี่ครั้งเพื่อปิดไฟทั้งหมด
ต้นไม้ถูกกำหนดให้มีคะแนนโดยใช้ผลรวมความยาวจากรากถึงใบ ตัวอย่างต้นไม้ที่มี 4 Nodes สามารถสร้างต้นไม้ได้ 4 แบบ มีคะแนน 3, 4, 3, 3 ตามลำดับ ให้เขียน Code รับจำนวน Node เข้ามาหาคะแนนที่มากที่สุด

ระดับ 5

ปัญหาระดับนี้จะไม่มีคำตอบถูกหรือผิด มีแต่คำตอบที่ดี ใช้ได้ หรือยอมรับได้ ตัวอย่างเช่น Google Maps จะแสดงได้ด้วยว่ารถติดบนถนนเส้นไหน ระบบนี้ไม่ได้แสดงข้อมูลที่แท้จริง ไม่ได้คำนวณจากปริมาณรถที่แท้จริง แต่แสดงข้อมูลที่ถูกต้องระดับหนึ่ง โดยคำนวณมาจากข้อมูลอื่นแทน
ตัวอย่างอีกปัญหานึงคือ ใส่ Latitude และ Longitude เข้ามา แล้วหาว่า อยู่ในตำบลอะไร อำเภออะไร จังหวัดอะไร