MSN Mail คิดช้าไปหรือเปล่าเนี่ย

จริงๆ มันก็น่าจะมาตั้งนานแล้ว ต้องรอให้ Gmail ใช้มาร่วมปีกว่า คิดช้าไป หรือว่า CPU ของคนทำงาน MSN มันประมวลผลช้าหว่า …… -_-”

แต่เรื่องที่ Gmail ทำงานได้เร็วเพราะ AJAX หรือ Asynchronous JavaScript and XML นั้นเอง ซึ่งมันทำงานโดยใช้

# HTML/XHTML/CSS เพื่อแสดงผล
# Document Object Model ทำการส่งค่า html และทำงานโดยผ่าน JavaScript เพื่อทำการแสดงผลแบบ dynamic ให้กับ HTML/XHTML/CSS มากขึ้น
# XMLHttpRequest เพื่อทำการส่งข้อมูลเข้า และออก web server เพื่อประมวลผล

Web browser ที่สนับสนุนคือ

– Apple Safari 1.2 ขึ้นไป
– Konqueror ทุกรุ่น
– Microsoft Internet Explorer (and derived browsers) 4.0 ขึ้นไป
– Mozilla Firefox (and derived browsers) 1.0 ขึ้นไป
– Netscape 7.1 ขึ้นไป
– Opera 7.6 ขึ้นไป
– ฯลฯ ในอนาคต

ซึ่งจริงๆ แล้วเป็น Technology ที่ใช้ใน Outlook Web Access อยู่แล้ว ซึ่งทำงานผ่าน Microsoft Exchange Server โดยทำงานบน Microsoft Internet Explorer 4.0 ต่อมาในปี 2005 นั้น Google ก็เอามาใช้ใน Google Groups, Google Maps, Google Suggest และ Gmail

ดูเพิ่มเติมที่ http://en.wikipedia.org/wiki/AJAX

ซึ่งการมาครั้งนี้น่าสนใจดี แต่คงไม่ต่างกับ Gmail เท่าไหร่นัก แต่น่าสนใจคือ .Net รุ่นใหม่ และงานด้าน Web Application น่าจะมีการปรับโฉมการทำงานใหม่ไปในทางนี้มากขึ้นแน่นอนทีเดียวเลย

ไม่ใช่อะไรหรอก เพราะว่ามันทำงานได้เร็วมากเลยหล่ะ ถ้าใครได้ลองใช้งาน Gmail จะรู้ว่าเร็วแค่ไหนในการทำงาน

บ่นนิดๆ สะกิดหน่อยๆ (Core Programming)

เมื่อ blog อันเมื่อกี้ไม่ได้ทักทายมาอันนี้ทักทายนิดดีกว่า

คือที่หายไปเพราะว่ามี project SAD แล้วเดี่ยวต้องทำ project Database ต่ออีก โอ้ววววววว ยังไม่พอนะท่านๆ ตอนนี้ทำ Project ขนาดใหญ่พอสมควร ทำคนเดียว อีก เวรกรรม เพราะว่าเพื่อนๆ ใน section และชั้นปีมันคงไม่มีใครเขียน PHP และทำงานบน MySQL ได้ (แค่ SQL ทำงานแบบ SELECT กว่า 80% ยังคงใช้งานไม่เก่งเพียงพอ ขื่นมาช่วยทำเกรงว่าเวลา train กับเวลาทำเอง จะพอๆ กันกลายเป็นงาน x2 ไป -_-”) แถมเขียน PHP แบบ OOP อีก ยิ่งไปใหญ่ เพราะอย่างที่บอกไป Concept OOP ถ้าคนไม่เข้าใจจะโคตร งง ผมก็ไม่ได้เก่งเท่าไหร่ แต่เอามาใช้งานได้ก็ถือว่า OK แหละ

คือเขียน PHP แบบ OOP นี่มันค้อนข้างจะผิดหลักพอสมควร (Version 4 ครับ) มันไม่ Encapsule เลย เซง แต่ก็พยายาม lock ตัวเอง และอื่นๆ ไม่ให้มันออกมานอก Class ได้แบบไม่ตั้งใจ ทุกๆ อย่างทำงานผ่าน Method หมด กันไว้ก่อน เพราะว่ามันปรับแต่งผ่าน Method ให้มันจัดการกับตัวแปรต่างๆ ได้ง่ายกว่าด้วย ขื่นให้ดึงไปใช้ได้ดื้อๆ มันจะมีปัญหาแน่นอน …. ตอนปรับแต่ง code บางคนที่มามอง class อาจดูโง่ๆ แต่ถือว่าเผื่ออนาคตดีกว่า มันไม่แน่ไม่นอน เพราะว่ายิ่งใกล้ทำ prototype ให้เค้ายิ่งมี request ที่ไม่ตรงกับ interfact และ operation ของเรามากขึ้น ยิ่งต้องเตรียมการไว้ก่อน จะได้สบายหน่อย

แต่ PHP แบบ OOP ถือว่าเขียนง่ายนะ สำหรับ Version 4 แต่ถ้า Version 5 ผมว่า OK กว่า แต่ว่าหา Server มา Run มันยากเลยต้องยึด เจ้า Version 4 ไปก่อนดีกว่า เพราะว่า Version 5 มันไปไกล และเขียนได้ดูเป็น OOP มาก และจัดการตัวแปร ง่ายกว่าเยอะ ทำให้ผมโปรแกรมภายในได้ง่ายกว่าเยอะเลย แต่ก็เล็กกับข้อกำหนดจุกจิกสักหน่อย แต่ไม่หวั่น เพราะว่าC++ มันมีเยอะกว่า เลยเฉยๆ ฮา …….

แต่เมื่อวานนี้คุยกับรุ่นน้องคนนึงมาคุยเรื่องเขียนโปรแกรมแบบ OOP ไม่รู้เรียนอีท่าไหน เอาตัวแปรมาใส่ Public เพียบเลย แถมถามกลับไปว่ารู้จักใช้ get/set ป่าว ตอบกลับมาแบบ งง ว่า “คือไร” ไอ้เราก็เซงเลยดิ อืมมมมม นะ

คือไม่ใช่อะไรหรอก การจัดการตัวแปร ต้องผ่าน method ที่ขึ้นต้นด้วย get (เข้าถึง) และ set (ตั้งค่า) ด้วยเหตุผลว่า การเข้าถึงแบบ method นั้น เราสามารถโปรแกรมได้ว่าจะ get/set แล้วมีขั้นตอนอย่างไรบ้าง โดยที่ข้อมูลที่ “ตั้งค่า” และ “เข้าถึง” นั้นจะถูกนำไปใช้งาน หรือได้รับออกมาได้ถูกต้องตรงตามที่มันควรจะเป็นไป เช่น(ตัวอย่าง PHP นะ)
$x->set_month(15); // มันจะไม่ได้ เพราะว่าใน method นี้จะมีการตรวจเช็คว่า value >0 and <13 อยู่ และ return หรือ echo ออกมาว่า เกินกว่าจำนวนเดือนที่เป็นจริง แต่ถ้าเป็น
$y->date_month = 15; // มันจะใส่ได้ และไม่ขึ้น error หรือ echo อะไร เพราะว่ามันเป็นการใส่ค่าไปตรงๆ โดยไม่มีการตรวจสอบแบบด้านบน

ส่วน get ก็ประมาณเดียวกัน แต่ว่าการ get อาจจะเอามาใช้ในการแปลงตัวแปรต่างๆ ได้เช่นกัน ประมาณว่า
echo($x->get_month_name(12)); // มันก็จะเอา 12 ไปเทียบกับ string แล้ว return ค่าเป็นชื่อเดือนแทน อะไรประมาณนี้

เห็นแมะ ถ้าจัดการผ่าน method มันจะทำให้เราเขียนจัดการตัวแปรเข้า และออกจาก object ได้ง่าย และถูกต้องตรงตามความจริงได้ง่ายๆ เลย

ใครคิดว่า OOP มันเป็นอะไรที่ยาก ลองศึกษาและคิดใหม่น่าจะดีนะ ;)

เซต Editplus เพื่อ Compile และเปิดไฟล์ Java ให้ทำงาน

  1. ทำการลงโปรแกรม EditPlus และ SDK ของ JAVA ชื่อ J2SE Development Kit ลงในเครื่องก่อน เพื่อให้ในเครื่องมีตัว Compile และ Editor เพื่อใช้ในการทำงานเสียก่อน
  2. เปิดโปรแกรม EditPlus และไปที่ Tools และตามด้วยเมนู Configure User Tools
  3. ตัวโปรแกรมจะเปิดหน้าต่างใหม่ ที่ชื่อว่า Preferences และตัว Cursor อยู่ที่ User tools ให้คลิ้กที่ปุ่ม Groups Name เพื่อทำการเปลี่ยนชื่อ Groups เป็น JAVA ซึ่งระบบจะขึ้นหน้าต่าง Rename User Tool Group ให้กรอง และเมื่อกรองเสร็จแล้วกด OK ออกมา และเราจะเห็นชื่อ Group 1 จากของเดิม เปลี่ยนเป็น JAVA แล้ว
  4. ต่อมาเราจะมาทำการสร้างตัว Command ในการ Compile ในตัวโปรแกรม EditPlus โดยไปที่ปุ่ม Add Tools และไปที่ Program ซึ่งโปรแกรมที่เราจะ Add เข้านี้มีชื่อว่า JAVA Compiler หรือชื่อ javac.exe นั้นเอง โดยให้ Browse ไปที่อยู่ของ javac.exe ซึ่งส่วนมากจะอยู่ใน directory  bin ของ JAVA รุ่นนั้นๆ เช่น "C:\Java\jdk1.5.0_01\bin\javac.exe" ซึ่งแล้วแต่เราว่าเราจะเอาไว้ที่ไหนนั้นเอง เมื่อ Browse หาเจอแล้ว ตัว Path ของไฟล์ javac.exe จะถูกนำมาใส่ไว้ในช่อง Command ให้เราเลยทันที และใน Menu Text ให้ใส่ Compile เข้าไป
  5. จากนั้นในส่วนของช่อง Argument  จะใช้ในการใส่ค่าของชื่อไฟล์ของเรา ในที่นี้ให้ไปที่ปุ่ม   และเลือกที่ File Name ซึ่งตามหลักการ Compile ใน Command Prompt ใน Dos นั้นจะมีรูปแบบคือ "C:\javac HelloWorld.java" ตัวโปรแกรมจะทำการใส่ไปให้เราเองดังที่ได้กล่าวไปในตอนแรกแล้ว
  6. ในช่องของ Initial directory นั้นปกติใช้เพื่อทำการบอกตัวโปรแกรมว่าให้ทำการ compile ที่ไหน โดยไปทีปุ่มเครื่องหมายลูกศรชี้ลง แล้วเลือก File Directory เมื่อทำทั้งหมดเสร็จแล้วให้กด Apply
  7.  ต่อมาเราจะมากล่าวถึงในส่วนของการให้โปรแกรมที่เขียนด้วยภาษา JAVA นั้นสามารถทำงานได้หลังจากทำการ Compile แล้ว ให้ที่ไป Add Tools และไปที่ Program ซึ่งโปรแกรมที่เราจะ Add เข้านี้มีชื่อว่า JAVA Interpeter หรือชื่อ java.exe ซึ่งส่วนมากจะอยู่ใน directory  bin ของ JAVA รุ่นนั้นๆ เช่น "C:\Java\jdk1.5.0_01\bin\java.exe" นั้นเอง เมื่อ Browse หาเจอแล้ว ตัว Path ของไฟล์ java.exe จะถูกนำมาใส่ไว้ในช่อง Command ให้เราเลยทันที และใน Menu Text ให้ใส่ Run เข้าไป
  8. จากนั้นในส่วนของช่อง Argument  จะใช้ในการใส่ค่าของชื่อไฟล์ของเรา ในที่นี้ให้ไปที่ปุ่ม   และเลือกที่ File Name Without Extension ซึ่งตามหลักการ Interpeter Running ใน Command Prompt ใน Dos นั้นจะมีรูปแบบคือ "C:\java HelloWorld" ตัวโปรแกรมจะทำการใส่ไปให้เราเองดังที่ได้กล่าวไปในตอนแรกแล้ว
  9. เมื่อทำการติดตั้งเสร็จแล้ว เราก็จะได้คำสั่งในการ Compile และ Run ออกมา
  10. ทดสอบโดยการเขียนโปรแกรมทดสอบ HelloWorld
    class HelloWorld {
          public static void main(String[] args) {
               System.out.println("Hello World!");
          }
    }
  11. และทำการ Save เป็น HelloWorld.java (หรือให้ชื่อไฟล์เหมือนกับชื่อของ Class ที่ทดสอบ)
  12. เมื่อ Compile จะได้ผล
    ———- Compile ———-
    Output completed (1 sec consumed) – Normal Termination
  13. และเมื่อ Run จะได้ผล
    ———- Run ———-
    Hello World!
    Output completed (0 sec consumed) – Normal Termination
  14. เมื่อได้แบบนี้แล้วแสดงว่าติดตั้งแต่สมบูรณ์เรียบร้อย ……

อะไรคือโปรแกรม และการเขียนโปรแกรม ตอนที่ 1

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


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

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


ว่าด้วย การเขียนโปรแกรม

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



มองซ้าย มองแบบคนเรียนวิทย์ – การสร้างสิ่งของ/สิ่งก่อสร้าง

            ก่อนอื่นเราลองมามองอย่างคนเรียนสาบวิทย์กันก่อน นั้นคือ ลองมองการเขียนโปรแกรมให้เป็นเหมือนกับการสร้างอะไรซักอย่าง เช่นตึกรามบ้านช่อง ศูนย์การค้า รถยนต์ ฯลฯ โดยในที่นี้ ขอยกตัวอย่างการสร้างสิ่งก่อสร้างเป็นหลัก

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

            และที่น่าสนใจก้คือ การออกแบบและความรู้ที่เราใช้ในการสร้างอะไรอย่างใดอย่างหนึ่งนั้น ไม่สามารถใช้กับการออกแบบ และการสร้างสิ่งอื่นๆ ได้เสมอไป เช่น ถ้าเราต้องการสร้างสิ่งก่อสราง เราต้องการความรู้ทางวิศวโยธา แต่ว่าถ้าเราต้องการเครื่องใช้ไฟฟ้า เราก็ต้องการความรู้ของทางวิศวกรรมไฟฟ้า ถ้าเป็นเครื่องบิน ก็วิศวกรรมการบิน ตลอดจน Aerodynamices ต่างๆ มากมาย นั้นก็คือ เราต้องการความรู้พื้นฐานในสิ่งที่เราต้องการสร้าง นั่นเอง และสิ่งที่พูดถึงไปนั้น ก็ยังคงสามารถนำมากล่าวได้เสมอ นั้นคือ การสรางเครื่องบินโบอิ้ง 747 นั้นใช้เวลาในการออกแบบและวิศวกรรม ตลอดจนใช้คนในการก่อสร้างมากกว่าเครื่องบินของเล่นต่างๆ

            การมองแบบนี้ทำให้เราเข้าใจการสร้างโปรแกรมขึ้นได้อย่างไร? อดใจสักนิด เรามาลองมองอีกด้านนึง ซึ่งต่างจากแนวคิดข้างต้นกันดูดีกว่า


มองขวา มองแบบคนเรียนศิลป์ – การเขียนนิยาย

            เมื่อตอนต้นเรามองการเขียนโปรแกรม ในเชิงการก่อสร้างสิ่งต่างๆ ไปแล้ว ตอนนี้เราลองมามองอีกมุมหนึ่ง โดยมองการ เขียนโปรแกรม เหมือนกับการ เขียนนิยาย กันบ้าง

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

            นอกจากนี้ ความรู้พื้นฐานในเรื่องที่เราต้องการเขียน ก็เป็นสิ่งสำคัญไม่ใช่น้อย เช่นนิยาย/ภาพยนต์เกี่ยวกับอวกาศและเทคโนโลยีชื่อดังเรื่อง 2001: Space Odyssey นั้นใช้ความรู้เกี่ยวกับอวกาศตลอดจนฟิสิกส์ค่อนข้างมาก รวมถึงจินตนการในการสื่อออกมาและการคาดการณ์อนาคตจากพื้นฐานของอะไรหลายๆ อย่างด้วย ในขณะที่นิยายของ Tom Clancy นั้นมักจะมีเรื่องของแผนการต่างๆ และเงื่อนงำต่างๆ ทางทหารเข้ามาเกี่ยวข้อง ซึ่งแน่นอนต้องหาข้อมูลกันมาอย่างดี และผู้เรื่องราวกันอย่างดี

            แต่ว่าทั้งนี้และทั้งนั้น ใช่ว่าเรื่อราวทุกเรื่องที่เราอยากจะแต่ง จะต้องยาวระดับนิยายหรือภาพยนต์แต่อย่างใด เราอาจจะต้องการแต่แค่การ์ตูนสั้นๆ สามช่องจบเหมือนกับขายหัวเราะ เราก็ต้องวางเนื้อหาและสิ่งที่ต้องการสื่อเช่นกัน

            เอาล่ะครับ ได้เวลากลับมามองดูสิ่งที่เป็นหัวใจของบทความนี้ นั้นคือการเขียนโปรแกรมกันต่อ ลองมาดูกันว่าการที่เรามองทั้งสองด้านนี้แล้ว เอามาเชื่อมโยงกับการเขียนโปรแกรมอย่างไร ในตอนหน้าครับ ……

เรียบเรียงบทความโดย Rawitat Pulam
บทความฉบับนี้เป็นไปตามข้อกำหนดของ GNU Free Documentation License 1.2. เท่านั้น

ลักษณะการทำงานเป็นทีม

คำถาม ทีมเราได้ทำการไปแข่งคอมพิวเตอร์ สมาชิกในทีมมี 3 คน … แต่ computer เครื่องเดียว .. โดยให้เวลา 5 ชั่วโมง ซึ่งมีปัญหาอยู่ 8 ข้อ ควรจะทำยังไงดี?

ส่วนใหญ่จะคิดว่า

1) แบ่งกันทำคนละข้อ หรือไม่ก็ 2) สุมหัวกันคิดให้หมดทุกข้อ

ซึ่งทั้งสองแบบมันไม่ใช่การทำงานเป็นทีม และถ้าจะทำได้นั้นคนในทีมจะต้องมีพวกอัจฉริยะอยู่ด้วย

ซึ่งมันไม่มีจริงหรอก เอางี้นะ ปกติเรามีสามคนใช่มั้ย? เราทำแบบนี้

1) คนที่มองปัญหาเก่งที่สุด รู้ algorithm มากที่สุด แม่น data structure มากที่สุด จะเป็นคนนั่งอ่านปัญหา วิเคราะห์ปัญหา … จากนั้นเมื่อได้แล้ว จะเรียกคนที่สอง มาทำงานต่อ

2) คนที่สอง ก็คือ คนที่แม่น library ที่สุด แม่น feature ต่างๆ ใน programming language ที่ใช้ที่สุด เมื่อฟังจากคนแรก แล้วก็จะนั่ง implement idea, algorithm, data นั้นลง และเนื่องจากมี com เครื่องเดียว ดังนั้นการ debug จึงต้องทำ “นอกจอ” เพื่อไม่ให้เสียเวลา

3) คนที่สาม คือ debugger ที่จะเอามาจากการ printout และมาทำการ core dump เพื่อมานั่งวิเคราะห์

ซึ่งถ้า “แบ่งๆ กัน -> สุดท้ายนะ มันแก้ได้แต่ข้อง่ายๆ พอข้อยากๆ จะตายหมด เพราะว่า บางคน คิดออก แต่ว่าไม่รู้ feature ของภาษาที่ใช้มากพอ พอเอามา debug ก็ ช่วยกันไม่ได้ เพราะว่าแต่ละคนเขียนต่างกัน”

หรืออย่าง “สุมหัวกันทำ -> ทะเลาะกันก่อนจะได้ลงมือเขียน แย่ง keyboard กัน แล้วมาทะเลาะกันตอน debug ฯลฯ มันไม่ใช่ team work”

มันแค่ทำงาน “ด้วยกัน” ไม่ใช่ทำงาน “ร่วมกัน”

ตัวอย่าง

นาย A จะอ่านปัญหา ทำการวิเคราะห์ และจะมาอธิบายให้ นาย B ฟัง และนาย C จะฟังด้วย เพื่อให้รับรู้ algorithm

จากนั้น นาย B จะไปพิมพ์ implement ให้เร็วที่สุด ให้ได้ working program ที่คิดว่าเร็วที่สุดเท่าที่จะเร็วได้ เพราะว่าในตอนนี้ นาย B เป็นคนเดียวที่จำ standard c++ ได้มากที่สุด ใช้ stl ได้ทั้งหมดโดยไม่ต้องเปิดอะไรเลย

นาย C จะมานั่งดูด้วย เพื่อให้เห็นวิธีที่นาย B เขียนอะไรบ้าง จากนั้น compile, run test .. แน่นอนว่าไม่ work ก็จะจะทำการ print เอา source code และ memory core dump จาก printer ส่วนกลางออกมา

นาย C จะมานั่ง debug ไล่ core จากนั้น นาย B ก็จะไปฟังการวิเคราะห์ปัญหาข้อใหม่จาก นาย A ซึ่งจะสามารถวิเคราะห์ปัญหาได้อย่างอิสระ ไม่ต้องยุ่งกับเรื่อง implementation และอาจจะช่วย debug บ้างนิดหน่อย

นาย B ไม่ต้องคิดมากเรื่องการแก้ปัญหา หรือว่า debug เท่าไหร่

นาย C ไม่ต้องคิดแก้โจทย์ แต่ว่าต้องแก้ปัญหาในโปรแกรมที่ นาย B เขียน

แบบนี้สิ คือการทำงานเป็นทีม

ซึ่งการแบ่งโจทย์ไปคิดคนละข้อ หรือการสุ่มหัวกันคิด –> นี่เค้าเรียกการแบ่งหน้าที่ด้วยเหรอ จริงไหม

ดังนั้น … “แบ่งโจทย์ไปคิดคนละข้อ หรือการสุ่มหัวกันคิด ..” มันไม่ใช่ “แบ่งหน้าที่”

หน้าที่ของ programmer คืออะไร
1) วิเคราะห์ปัญหา
2) เขียนโปรแกรม
3) แก้โปรแกรม

…….. มันควรจะเป็นแบบนี้