ไม่รู้จะอธิบายยังไง? “สิ่งที่ควรจะมีในใบเสนอราคาตอนรับทำเว็บ”

จากทวีตที่ได้ทวีตไป

ผมอยากทำเว็บแนว Facebook แต่ผมมีงบ 50,000 บาท คุณพอช่วยผมได้ไหม" #อยากเอาหัวโขกข้างฝาตาย ><"

คือถ้าคุณต้องการทำเว็บแนว Social Network หรือจริงๆ ก็อะไรที่มีคนเข้าเยอะๆ หลักหมื่นหรือแสนคนต่อวันขึ้นไป มันไม่ใช่แค่คุณมีเว็บที่เขียนด้วยภาษาโปรแกรมมิ่งอย่างเดียวแล้วจบนะ มันมีเรื่องของการออกแบบหน้าตาของเว็บ (ซึ่งหลังๆ มืออาชีพในสายงานนี้มักจะคิดราคาแยกต่างหากกันอยู่แล้ว) และระบบ Server/Infra ที่มารองรับการใช้งานตัวเว็บซึ่งอยู่เบื้องหลังอยู่อีก
โดยต้องบอกก่อนเลยว่า ยิ่งคนเข้าเว็บที่คุณสร้างขึ้นมาเยอะเท่าไหร่ คุณก็ต้องจ่ายออกไปเป็นค่าระบบที่เอามารองรับการเข้าเว็บมากขึ้นไปด้วย นี่ยังไม่รวมค่า b/w ที่คุณต้องจ่ายให้ IDC ด้วยนะ เพราะถ้าคุณฝากตัวระบบไว้ในประเทศไทย link ระหว่างประเทศของคุณจะมีค่ามากๆ โดยราคาหลัก 1 Mbps อยู่ที่หลักหมื่นบาทหรือหลายหมื่นต่อเดือน (Link ของ IDC ต่อ inter connection)
นี่ยังไม่รวมสิ่งที่ผมมักผมเจอบ่อยๆ กับคนที่อยากได้เว็บไซต์เป็นของตัวเอง แต่ไม่ทราบว่าต้องมีการจดชื่อเว็บ (Domain Name) และพื้นที่สำหรับฝากไฟล์เว็บที่จัดทำขึ้น (Web Hosting) ซึ่งมีค่าใช้ย้ายแบบเช่าใช้งานเป็นรายปี (หรือรายเดือน) ซึ่งเป็นราคาที่แยกต่างหากจากค่าเขียนระบบและงานออกแบบหน้าเว็บอีกด้วยนะ

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

จากที่บอกไป คงพอทราบภาพใหญ่ๆ แล้วว่าปรกติทำเว็บ 1 เว็บเนี่ยเรามีปัจจัยอะไรบ้าง (มันเยอะนะ แต่อันนี้ผมเอาแค่หลักๆ พอ)

แล้วเวลาผมเสนองานต่างๆ ผมคิดโครงสร้างและแบ่งส่วนงานในการเสนอราคาเป็น checklist ดังต่อไปนี้

  1. Data ETL.
    เป็นค่าใช้จ่ายในการกรอกข้อมูลใหม่ หรือการแปลงข้อมูลเข้าระบบจากระบบหนึ่งมาที่ระบบที่พัฒนาใหม่ และรวมถึงการจัดระเบียบข้อมูลที่ลูกค้าส่งมาแล้วใส่ลงในระบบ อันนี้บางครั้งเราก็ไม่แน่ใจว่ามีข้อมูลตั้งต้นเยอะแค่ไหน บางครั้งเจอข้อมูลจำนวนมากๆ จนต้องจ้างคนมาช่วยใส่ข้อมูลให้ก็มี เพราะฉะนั้นต้องคิดถึงตรงส่วนนี้ไว้
  2. Translate UI
    กรณีที่ระบบมีหลายภาษา ก็ต้องมีการแปลหรือจ้างคนมาแปล และในหน้า UI ก็ต้องมาไล่แก้ไขภาษากันทุกๆ String ซึ่งใช้เวลาอยู่พอสมควร
  3. Theme and CSS Layout Design
    งานออกแบบหน้าเว็บและการตัดหน้ากราฟฟิกต่างๆ ของเว็บ โดยอาจจะมีราคา Font ที่ใช้ในการทำ Theme และราคาของรูปภาพต่างๆ ที่นำมาใช้ในตัวเว็บใส่เสนอมาด้วย ซึ่งบางภาพอาจจำเป็นต้องซื้อจาก Stock Photo ต่างๆ ซึ่งทั้งราคาของ Font และ Stock Photo นั้นจะถูกหรือแพงขึ้นอยู่กับการนำไปใช้ในสื่อใดบ้าง และในส่วนรูปภาพก็ราคาตามขนาดของรูปภาพและระยะเวลาในการนำไปใช้ (ในกรณีที่ไม่ได้ซื้อขาดมาเลย)
  4. General Implement
    การ Implement ระบบ ถ้ามีการ Custom ก็เพิ่มเป็น 3.1 – 3.n ไป แต้ถ้าแยกจนเป็นระบบใหม่ ก็เป็นข้อใหญ่ 4. – N. ไปซึ่งการแก้ไขงานในส่วนนี้ก็ต้องคิดเป็นราย issue ไป รวมไปถึงการปรับเพิ่ม-ลดระยะเวลาของงานนั้น ต้องตามความเหมาะสมในการแก้ไขงาน โดยการแก้ไขงานแต่ละครั้งต้องมีขอบเขตชัดเจนและมีจำนวนครั้งจำกัดหรือกำหนดระยะเวลาในการรอการ feedback เพื่อปิด issue ไม่งั้นเจอลูกค้าลากยาวจนลืม และเป็นการกำหนดกรอบเวลาให้ลูกค้าด้วยว่าต้องใส่ใจในการส่ง feedback กลับมา
  5. Domain Name
    ชื่อเว็บ ถ้ามีอยู่แล้วก็ไม่ได้คิดเงินเพิ่ม อะไร นอกจากลูกค้าจะมีเรื่องการย้าย หรือเรื่อง support อื่นๆ ถ้าไม่ได้เยอะก็แถมๆ ไป แต่ถ้าต้องดำเนินเรื่อง หรือย้ายมาให้เราดูแลก็คิดเงินไปตามเนื้อผ้า
  6. Web Hosting
    หรืออาจจะเป็น Dedicated server, Colocation server or Cloud server อันนี้ปรกติตอนแรกก็ต้องดู scale เล็กกันก่อน แล้วค่อยไปเล่น scale ใหญ่ ขึ้นอยู่กับวัตถุประสงค์ของงาน
  7. Training & Document
    ค่าทำเอกสารคู่มือ และอบรบการใช้งานต่างๆ ตรงนี้ต้องคิด เพราะมีค่าเดินทางและค่าสอนด้วย จำไว้เสมอค่าทำระบบไม่รวมค่าทำเอกสารครับ ไม่งั้นคุณต้องใช้เวลาทำเอกสารพอๆ กับทำระบบกันเลยทีเดียว (ยิ่งมีการแก้ไขระบบก็ต้องกลับมาแก้เอกสารด้วย)
  8. Maintenance
    ค่าดูแลและแก้ไขข้อผิดพลาดของระบบ ปรกติผมจะเน้นเรื่อง bug และ security เป็นหลัก ตรงนี้คิดเป็นรายปี ซึ่งไม่เกี่ยวกับ new feature ที่มันมาเพิ่มในข้อ 3. ด้านบน ตรงนี้ลูกค้าต้องจ่ายไม่อย่างนั้นก็ต้อง support ตัวเองไปหลังจากที่ระบบขึ้นไปแล้ว โดยปรกติผม Maintenance ให้แบบยังไม่คิดค่าใช้จ่ายในระยะเวลาหนึ่งเท่านั้น โดยเป็นช่วงหลังจากส่งมอบงานแล้วขั้นต่ำ 1 เดือน สูงสุด 3 เดือน

อันนี้คือคราวๆ ที่ผมคิดไว้นะ ซึ่งจะเห็นว่าจะมีครบตั้งแต่ input, process, output และ maintenance ส่วนตัวแล้วคิดว่าครอบคลุมในสิ่งที่ลูกค้าส่วนใหญ่ที่รับๆ มา และบางอย่างเป็นสิ่งลูกค้านึกไม่ถึง ซึ่งต้องบอกก่อนเลยว่า บางอย่างไม่คิดเนี่ยขาดทุนแน่ๆ ครับ

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

Work and Study

In 1960, a researcher interviewed 1500 business-school students and classified them in two categories: those who were in it for the money – 1245 of them – and those who were going to use the degree to do something they cared deeply about – the other 255 people. Twenty years later, the researcher checked on the graduates and found that 101 of them were millionaires, and all but one of those millionaires came from the 255 people who had pursued what they loved to do!

Research on more than 400,000 Americans over the past 40 years
indicates that pursuing your passions – even in small doses, here and there each day – helps you make the most of your current capabilities and encourages you to develop new ones.

Ref : “The Other 90%” by Robert K. Cooper, Three Rivers Press 2001.

จะเรียนเกี่ยวกับคอมพิวเตอร์

ผมขอแยกออกเป็น 3 ด้าน ด้วยกัน
1. Software Production, Algorithm & Theory ซึ่งคือด้าน Computer Engineering, Computer Science, Information Science เป็นการศึกษา เรื่องของ

  • correctness โปรแกรมที่คุณเขียนจะต้องถูกต้องทุกกรณี ไม่มีความผิดพลาดเกิดขึ้น โดยต้อง ทำ math proof ได้ ว่าทำไมถึงถูกต้อง
  • performance โปรแกรมที่เขียนจะต้องมีประสิทธิภาพใสการทำงานสูง ทำงานเร็ว โปรแกรมเปรียบเทียบบางโปรแกรมอาจจะใช้ O(n2), O(n3) แต่คนที่มีความรู้เรื่อง algorithms เป็นอย่างดี อาจจะสามารถเขียนให้โปรแกรมทำงานใน O(n logn) หรือ O(n) ได้
  • efficency โปรแกรมที่เขียนจะต้องทำงานได้ดีที่สุดโดยใช้หน่วยความจำน้อยที่สุด
  • OS เวลาเขียนโปรแกรมใหญ่ ๆ ที่ใช้ thread มากมาย ถ้าเขียนแล้วเกิด deadlock ขึ้นคุณจะแก้ปัญหายังไง แก้ปัญหาเรื่อง priority อีก ว่า thread ไหนจะได้ทำงานก่อน ถ้าคุณไม่เข้าใจเรื่องนี้ ก็อาจจะเขียน thread มั่ว ๆ ซึ่งอาจทำให้โปรแกรมทำงานช้า, เกิด deadlock ได้
  • data communication and network ในระบบ LAN คอมพิวเตอร์มันคุยกันได้ยังไงครับ ในเมื่อ IP address เป็นสิ่งที่สมมติขึ้นมา ในการที่เราจะวางระบบเครือข่าย เช่น ใน SW ขนาดใหญ่ เวลา implement อาจจะต้องดูเรื่อง network ด้วย ถ้าคุณไม่เข้าใจเรื่อง router, gateway, dns ต่าง ๆ คุณจะวางระบบไม่ได้
  • AI ปัญญาประดิษฐ์ ถ้าคุณจะไปเป็นนักพัฒนาเกมส์ แล้วคุณไม่รู้จักเรื่อง AI คุณก็จะทำไม่ได้อีก
  • IR ก็เหมือนกัน ถ้าคุณไปเขียนระบบที่ต้องมี Full Text Search นั้นเอง
  • etc …. อื่นๆ อีกนิดหน่อย

ซึ่งศึกษาในเชิงลึกในส่วนของ S/W รวมถึงการจัดการระบบงานต่างๆ และในแนวกว้างในส่วนของ H/W

2. Hardware Design หรือพวกที่เรียนด้าน Electronic และ Physic, Physic (Micro) Controller เป็นการทำงานร่วมกับพวกที่อยู่กับข้อที่ 1 ในการทำ คิดค้นหาอุปกรณ์ใหม่ๆ เพื่อให้ พวกข้อที่ 1 นำไปแก้ปัญหา และตอบ Requestment ของผู้ใช้ต่างๆ ให้ออกมาใช้งานได้ตามที่ลูกค้า หรือผู้ใช้ต้องการ โดยศึกษาในเชิงลึกในด้าน H/W และแนวกว้างในส่วนของ S/W

3. Technical หรือ Consult ต่างๆ เป็นผู้ให้คำปรึกษาต่างๆ แบ่งได้ 3 ระดับคือ

  • Administrator คือผู้ดูแลระบบต่างๆ บางครั้งอาจใช้คำว่า System Director, System Administrator หรือ System Management ติดตั้ง และดูแลในด้านจัดการระบบทรัพยากรระบบงานขององค์กรต่างๆ ดูแล Server หรือเครื่องแม่ข่ายให้อยู่ดี มีสุข
  • Technical Support เป็นคนที่คอยดูแลระบบงานต่างๆ ไม่ว่าเครื่องเสีย เครื่องมีปัญหา ต่างๆ ที่เป็นเครื่องลูกค่ายต่างๆ จะลงไปแก้ไขปัญหา
  • Consult เป็นคนดูแลในด้านการจัดการ ให้คำปรึกษา และแก้ปัญหาในด้านสินค้า นั้นๆ

โดยในด้านที่ 1 และ 2 ต้องมีพื้นฐานทางความคิดมาจากการจัดการความคิดแบบเป็นระบบมากๆ และการเรียนจะเน้นไปในทางการทำงานร่วมกัน เรียนในด้านทฤษฎี และทำการปฎิบัติไปพร้อมๆ กัน ส่วนในด้านที่ 3 นั้นเป็นงานเชิงช่างเทคนิคมากกว่าครับ

ส่วนใหญ่ด้านที่ 1 และ 2 นั้นคนที่จบ ม.ปลายจะสามารถเข้าไปศึกษาได้ง่ายกว่า แต่ก็มีสายอาชีพมาศึกษาเหมือนกันแต่ต้องเก่งจริงๆ
ส่วนด้านที่ 3 นั้น ส่วนใหญ่จะเป็นคนที่ศึกษามาจากด้านสายอาชีพครับ

แต่ไม่ขอฝันธงว่าด้านไหนดี เพราะว่าทุกด้านต้องทำงานร่วมกันอยู่แล้วครับ

เข้าใจงานของวิทยาศาสตร์, ปัญหาในการเลือกคณะในปัจจุบัน และการเรียนรู้

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

เรามาเข้าใจก่อนว่าวิทยาศาสตร์คืออะไรก่อน จริงๆ คำถามนี้ถามเด็ก ม. 6 แทบจะเกือบทุกคนยังตอบไม่ได้ก็มีนะ

วิทยาศาสตร์คือ “การเข้าใจปรากฎการณ์ต่างๆ หรือเข้าใจสิ่งต่าง ๆ” แต่ส่วนใหญ่เราจะเอาไปปะปนกับความหมายของวิศวกรรมคือ “การทำความเข้าใจวิทยาการทางวิทยาศาสตร์ และนำมาประยุกต์ เพื่อสร้างสิ่งต่าง ๆ ออกมาเป็นรูปธรรม”

ซึ่ง กล่าวโดยสรุป

วิทยาศาสตร์ คือ”การศึกษาเข้าใจธรรมชาต์”

ส่วนวิศวกรรม คือ “การประยุกต์วิทยาศาสตร์เพื่อนสร้างสรรค์งานต่าง ๆ”

แต่เดียวก่อน คนไทยเราชอบคิดว่า “วิศวกรรม เก่งกว่า วิทยาศาสตร์” หรือบางกลุ่มคิดว่า “วิทยาศาสตร์ เก่งกว่า วิศวกรรม”

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

“เราเห็นผลงานที่ออกมาของทั้งสองค่ายไปในคนละแบบ และคนที่ตีความก็ตีความไปในแนวทางต่าง ๆ กันไป”

นั้นหมายความว่าเรา

“มองคุณค่าของความรู้ในศาสตร์ทั้งสองด้วยผลงาน มากกว่าสิ่งที่เป็นเหตุหรือปัจจัยที่ทำให้เกิดผลงานต่าง ๆ ที่ออกมา”

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

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

การมีงานวิจัยเป็นงานของนักวิทยาศาสตร์ การทำงานวิจัยเป็นงานที่ทำเพื่อศึกษา ทำความเข้าใจเหตุของปรากฎการณ์ต่างๆ ทั้งหลาย ทั้งในโลกความเป็นจริง และอุดมคติ รวมถึงสังคมและวัฒนธรรมต่างๆ ด้วย การจะทำให้เกิดการพัฒนาอย่างยั่งยืนเราต้องมีรากของปัญญา เสียก่อน การทำงานอย่างมีขั้นตอนนั้นเป็นสิ่งสำคัญ

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

ในปัจจุบันคนในสังคมไทยเรายังคงคิดว่าการ ent’ และจบมาทำงานดีๆ เป็นจุดสูงสุดของการเรียนรู้, การประสบความสำเร็จของโรงเรียนผู้สอน
นั้นหาใช่ “แก่นของสาระไม่” แต่เป็นเพียงจุดเริ่มต้นของการก้าวเดินในสังคมยุคใหม่ที่ความสำเร็จไม่จำเป็นต้องมาจากการเรียนเก่ง หรือการทำงานที่ดีๆ “คะแนน ent’, GPA ผมมองว่าเป็นตัวบอกความตั้งใจ ความขยันของคนในช่วงเวลานั้น ๆ แต่ หลังจากนั้นอีก 4 ปี ที่เรียนมหา’ลัย มันจะไม่มีอะไรเปลี่ยนแปลงในทางที่ดีขึ้นหรือแย่ลงเลยหรือ แล้วการจะวัดความเก่ง จากคะแนน ent’ ผมว่ามันผิวเผินเกินไป และมันคนละเรื่องด้วย”

มีหลายครั้งที่การแนะแนวมองคนที่คะแนน และลักษณะอันพึงประสงค์ต่อการเรียนในสาชาวิชานั้น แต่กลับไม่มองที่ “จิตสำนึก หรือเหตุของความอยาก อย่างแรงกล้าที่จะเรียนรู้ในสาขาวิชานั้น” มองเพียงแต่ “คุณเรียนเก่งต้องเป็นหมอ คุณเรียนอ่อนวิชาวิทย์ ต้องไปเรียนภาษา” กลายเป็นแบบนี้กันไปทั่วทุกโรงเรียน หรือทุกสังคมไปแล้ว ….

เรามามองกันต่อที่คำถามที่เป็นต้นเรื่องตรงนี้ที่ว่า “เรียนคณะวิทยาศาสตร์แล้วมีอนาคตมั๊ย และเรียนสาขาไหน หางานได้ง่ายสุด”

ถ้าจะถามว่า “เรียนแล้วมีอนาคตมั๊ย”

ขอตอบตรงนี้เลยว่า “เรียนอะไร ก็มีอนาคต ทั้งนั้นแหละ”

แต่มันขึ้นอยู่กับว่า คุณนำความรู้ที่เรียนมา ไปไช้ประโยชน์ได้มากหรือน้อยแตกต่างกัน แต่ถ้าจะให้เราเดา คำว่า “มีอนาคต” ของคนไทยเราๆ ก็คือน่าจะหมายถึง “เรียนคณะนี้ แล้วจะตกงานมั๊ย” ถูกต้องหรือเปล่า

แล้วอีกคำถามนึงที่จะมีคนถามแน่นอนคือ “เรียนสาขาไหน หางานได้ง่ายสุด”

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

คำตอบคือ
1. เค้าไม่ขวนขวายหาข้อมูลการรับสมัครงาน ที่ต้องการบุคลากรที่มีคุณสมบัติตรงกับเค้า
2. เค้าสมัครงาน ในบริษัท ที่ต้องการคุณสมบัติไม่ตรงกับเค้า
3. เค้าไม่พร้อมทั้งความรู้ หรือจบออกมาเพราะเรียนแบบผ่านๆ แต่ก็จบได้
4. เหตุผลอื่นๆ อีกเยอะ คิดไม่ออกอ่ะนะ

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

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

คำถาม ทีมเราได้ทำการไปแข่งคอมพิวเตอร์ สมาชิกในทีมมี 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) แก้โปรแกรม

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