Author Note:
จากการเขียนแบบเวิ่นเว้อครั้งที่แล้วใน การเดินทางของโปรแกรมเมอร์ชื่อสมชาย ทำให้ปิ๊งไอเดียอยากเขียน tutorial แบบไม่ technical จ๋า สอดแทรกเรื่องราวแนวนิยาย ตั้งชื่อแนวเองเสร็จศัพท์ว่า “Noveltorial” เพราะคิดว่าเรื่องแบบ technical คนขี้เกียจอ่าน เข้ามาก๊อปโค้ดแล้วก็ไป – และที่สำคัญคือหาอ่านได้ทั่วไปจากบล็อก ตปท อยู่แล้ว
เชิญชิมแล้วติชมได้ตามสะดวกครับ
i – การเริ่มต้นครั้งใหม่
ความสงสัยที่กัดกินหัวใจของสมชาย ทำให้เขาหมดศรัทธาในการเมือง เอ๊ย ในการพัฒนาซอฟต์แวร์ – เขาสรุปเอาเองว่าต่อให้ทำดีอย่างไร ก็ต้องเจอปัญหาในอนาคตอยู่ดี งั้นเลิกทงเลิกทำแม่งไปเลยดีกว่า
วันนั้นสมชายยื่นใบลาออกกับเจ้านายด้วยหัวใจที่ร้าวราน…
ด้วยความที่บ้างานจัด สมชายจึงไม่มีลูกเมียให้เป็นห่วง – เขาจึงตัดสินใจเริ่มต้นใหม่อีกครั้งด้วยการเดินทาง
ตามหาปรมาจารย์ในตำนาน…
การเดินทางเป็นไปด้วยความยากลำบาก ต้องบุกห้วย ลุยดง ฝ่าขุนเขา เจอกับเหล่าร้ายและม๊อบเสื้อแดง – แต่สมชายก็ไม่ยั่น ด้วยหวังว่าสักวันจะเป็นจอมยุทธ์เลื่องชื่อให้จงได้
แล้วสมชายก็พบกับตาแก่หัวล้านตาสีน้ำข้าวคนหนึ่งที่ตีนเขาตั๊กม๊อ…
สมชาย: ท่านผู้อาวุโส ท่านพอจะรู้ทางไปบ้านปรมาจารย์บ๊อบซื่อยงหรือไม่?
ตาแก่: ไม่ทราบว่าจอมยุทธ์เยาว์ท่านนี้มีธุระอะไรกับท่านปรมาจารย์รึ
สมชาย: ท่านผู้อาวุโสยกย่องข้าน้อยเกินไปแล้ว ข้าเป็นเพียงชาวบ้านธรรมดาที่หวังฝากตัวเป็นศิษย์ก้นกุฎิท่านปรมาจารย์เท่านั้นเอง
ตาแก่: เดี๋ยวจะยาวซะเปล่าๆ กรูเองชื่อบ๊อบ มีไรว่ามาอย่าร่ำไร
สมชาย: ง่ายๆ อย่างเงี้ยอ่ะนะ?
ตาแก่: เออ แบบนี้แหละ เจ้ามาหาข้าเพราะเขียนโปรแกรมเท่าไหร่ก็ไม่ได้ดีใช่ไหม? แหมเป็นถึง PM แล้วยังกระแดะมีความรับผิดชอบสูง ทำลาออก ดูคนอยู่เมืองนอกดิ๊ เค้าโฟนอินมาจนตีกันจะตายห่าอยู่แล้ว แค่หัวแม่เท้ายังไม่โผล่มาให้เห็นเลย
สมชาย: สมเป็นท่านปรมาจารย์ ช่างรอบรู้เสียจริง – สมชายมองปรมาจารย์ด้วยสายตาชื่นชม
ตาแก่: ข้าอ่านเอาจาก entry ที่แล้วน่ะ 555
หลังจากนั้นปรมาจารย์บ๊อบก็รับสมชายเป็นลูกศิษย์ตามสูตร แกกำชับให้เรียกแกว่าลุงบ๊อบก็พอ เสียค่าแป๊ะเจี๊ยะกันนิดหน่อยแล้วก็เริ่มหลักสูตรกันเลย
ii – สายตาของนักออกแบบ
ลุงบ๊อบเริ่มบทเรียนแรกด้วยการสั่งให้สมชายเขียน twitter client แบบ object-oriented ขึ้นมาสักตัวด้วย C# (สมัยนี้เขาเลิก hello world แล้ว ลุงบ๊อบบอกมันเชย)
มีข้อแม้คือสมชายต้องเขียนภายในเวลาที่จำกัด โดยไม่ต้องใส่ใจรายละเอียดการติดต่อกับ twitter
สิ่งสำคัญที่ลุงบ๊อบต้องการประเมินคือสกิล “สายตาของนักออกแบบ” ในตัวสมชาย
ตัดตอนโค้ดของสมชายมาให้ดู (ตัวเต็มโหลดได้ข้างล่าง):
public static void Main(string[] argsRaw)
{
ArgumentList args = new ArgumentList(argsRaw);
foreach (ArgumentList.Item arg in args)
{
// Handle each command
switch (arg.Name)
{
case ARG_HELP:
PrintUsage();
break;
case ARG_LOGIN:
UserName = arg.Value;
Password = args.Unnamed[0];
TryLogin(UserName, Password);
break;
case ARG_RECIEVE_LATEST_TWEET:
DisplayLatestTweets();
break;
case ARG_SEND_TWEET:
Tweet(arg.Value);
break;
default:
break;
}
}
}
ลุงบ๊อบเบิ๊ดกระโหลกสมชายไปหนึ่งที พร้อมส่ายหัวซ้ายทีขวาที
ลุงบ๊อบ: เมิงเขียนโปรแกรมแบบนี้มาตลอดสิบกว่าปีเลยเรอะ? สมควรแล้วที่มันเจ๊ง ไอ้ชิบหาย
สมชาย: อ้าวจาน ทำไมต้องพูดคำหยาบด้วยอ่ะ? ผมไม่ได้เขียนมา 5 ปีแล้ว ได้แค่นี้ก็ดีถมถืด
ลุงบ๊อบ: ข้าบอกให้เขียนแบบ OO เจ้าไม่เข้าใจรึ?
สมชาย: อ้าว ผมก็แยกเมทอดแล้วไง เห็นป่าวมี switch case แยกรับแต่ละคำสั่งด้วยนา
ลุงบ๊อบเบิ๊ดกระโหลกสมชายซ้ำอีกที
ลุงบ๊อบ: โอโอบ้านพ่อง เป็นงี้เหรอ? twitter client ก็แปลว่ามันต้องมี server แล้วไหน service class? ไหนจะเรื่องการแบ่ง entity อีก – จับทุกอย่างมายำรวมกันเขาไม่เรียกโอโอหรอกเว้ย
สมชายกุมหัวด้วยความตกใจ กลัวโดนเบิ๊ดแฮตทริกซ์ – ลุงบ๊อบอารมณ์เย็นลงแล้วจึงอธิบาย
ลุงบ๊อบ: สิ่งสำคัญที่สุดคือการมอง เวลาข้าให้โจทย์ หรือลูกค้าให้ requirement ก็แล้วแต่ – เจ้าต้องมองให้ทะลุ แยกวัตถุออกจากอากาศธาตุที่ว่างเปล่า การที่เจ้าจะทำอย่างนั้นได้ต้องเข้าใจคอนเซ็ปต์ของ OO อันได้แก่ Encapsulation, Inheritance และ Polymorphism เสียก่อน
เอาล่ะ ดูเหมือนก่อนที่ข้าจะถ่ายทอดวรยุทธ์ S.O.L.I.D ให้กับเจ้า ข้าคงต้องปูพื้นพลังวัตร TDD ให้เจ้าก่อนสินะ
ไรอ่ะจาน ตัวย่อเพียบเลย -_-’
การเริ่มต้นครั้งใหม่ของสมชายกำลังรออยู่ สู้เขานะ สมชาย อาย อาย
ดาวน์โหลดตัวอย่างโค้ดของสมชาย
(ใช้ VS2008 กับ .NET3.5)
ปล. โค้ดรันได้นะ แต่ต้องคอมไพล์ก่อน
ปล 2. ตอนต่อๆไปจะ improve code ไปเรื่อยๆตามพัฒนาการของสมชายครับ ไม่รับประกันว่าจะดีขึ้น 555
6 Comments
โอ้ย เยี่ยมครับ ไปอ่านตอนต้น มาอ่านตอนนี้ ทั้งฮา และลึกล้ำยิ่งนัก
ฮาดีครับ น่าติดตาม
เยี่ยมครับ
ฮา และ ได้สาระ
คุ้มค่า กับการรอคอย.. ^^
คือ อยากอ่านได้ฮาและได้สาระแบบข้างบนบ้าง
แต่อ่านกี่รอบๆ ก็ไม่get เพราะ ไม่ได้เปนโปรแกรมเมอร์
ขอบคุณทุกท่านที่แวะมาอ่านครับ ^-^
@j อ่านไปเรื่อยๆเดี๋ยวก็งงเองแหละ เอ๊ะยังไง 555