“วิธีการเรียนรู้/การเริ่มต้นงาน”: Trick ง่ายๆ ที่หลายคนมองข้าม

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

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

ลองพิจารณากันดูสักเล็กน้อยจะพบว่า … ในการอ่านหนังสือนั้น เรามีปัจจัยอย่างน้อยสองเรื่อง คือ “ภาษา” และ “เนื้อหา” ในขณะที่การเขียนโปรแกรมสักตัวนั้น เราก็มีปัจจัยพื้นฐานอย่างน้อย 2 เรื่อง คือ “ภาษา” และ “โครงสร้าง” ส่วนการพัฒนาโปรแกรมเพื่อตอบโจทย์ทางอะไรก็ตาม (เช่นโจทย์ทางธุรกิจ) จริงๆ นั้น ก็มีปัจจัยพื้นฐาน 2 เรื่องเช่นกัน คือ “ความสามารถในการพัฒนาโปรแกรม” และ “ความเข้าใจเรื่องราวนั้นๆ (เช่นความเข้าใจธุรกิจ)

Continue reading

Let it “Burn”

ไม่ค่อยได้เขียนเรื่อง Software Development สักเท่าไหร่ (ทั้งที่จริงๆ เป็นเรื่องที่เดินสายพูด เดินสายบรรยาย สอน และถนัดที่สุดแล้วในบรรดาเรื่องทั้งหมด) แต่เมื่อคืนน้องในทีมพัฒนา Sticgo (http://www.sticgo.com) Startup ที่ผมเป็น Mentor อยู่ในโครงการ True Incube (http://incube.truecorp.co.th) ดันเอา Chart อะไรบางอย่างขึ้นใน Facebook แล้วพี่ Roofimon (www.roofimon.com) เข้ามาบอกเลย “บาป” แล้วก็งงว่ามันคือ Chart อะไร ผมก็เลยสัญญากับพี่รูฟไปว่าจะเขียนเรื่อง Chart ตัวนี้ใน Blog ด้วยความเป็นลูกผู้ชาย ก็เลยต้องรักษาสัญญาซะหน่อย

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

Mindset โบราณที่ลอก Metaphor มาจากการก่อสร้าง หรือที่เรียกว่ากระบวนการแบบ Waterfall ก็มีเครื่องมือหลากหลาย และตัวหนึ่งที่เราต้องเจอกันมาตลอดก็คือ “Gantt Chart” ซึ่งไอ้เจ้า Gantt Chart ตัวนี้เป็นเครื่องมือนำ “แผนการทำงาน” มาวางต่อเนื่องบน Timeline เพื่อดูว่าเราวางแผนการทำงานอย่างไร อะไรต้องทำก่อนทำหลังอะไร แล้วเวลาที่จะใช้คือประมาณเท่าไหร่ ฯลฯ

สิ่งที่ Gantt Chart ตอบได้อย่างชัดเจนก็คือ การให้เห็นแผนการทำงาน ระยะเวลาของงาน และปริมาณงานที่เสร็จไปแล้ว ซึ่งนี่คือสิ่งที่จำเป็นมากในการทำงานอะไรก็ตามในโลกความเป็นจริงที่เราต้องอยู่กับชาวบ้าน ทำงานกับคนอื่น (ลูกค้า เจ้านาย ฯลฯ) เพราะว่ามันจะมีความถามเราตลอดเวลากับคำถามต่อไปนี้ “แล้วจากนี้จะทำอะไร ต่อจากนั้นทำอะไร ใช้เวลาประมาณเท่าไหร่ เหลืองานอีกเยอะมั้ย เสร็จไปแล้วเท่าไหร่” ฯลฯ (ซึ่งพวกนี้จะเกี่ยวข้องกับค่าจ้างเราด้วยนะ)

แน่นอนว่า ในโลกบางใบ คนหลายคนต้องการที่จะเห็นรายละเอียดทั้งหมดเหล่านี้ Up-Front ซึ่งหมายความว่าเห็นรายละเอียดของแผนการดำเนินการ ระยะเวลา และงบประมาณทั้งหมดก่อนที่จะเริ่มดำเนินการ ซึ่งในขณะที่แนวคิดแบบนี้ใช้ได้กับงานบางประเภท มันกลับไม่เหมาะเอาซะเลยกับการพัฒนาซอฟต์แวร์ โดยเฉพาะอย่างยิ่งการพัฒนาซอฟต์แวร์ที่ “เป็นของใหม่ ไม่มีใครทำมาก่อน” ซึ่งมันมี Unknown เยอะ (ถ้าเป็นโปรแกรมประเภท Data Entry ธรรมดาๆ นี่อีกเรื่อง อันนี้พอจะประมาณได้จากประสบการณ์ แต่ต้องมีประสบการณ์เยอะพอที่จะทำได้นะ — บอกตรงๆ ว่าโดยทั่วไป ต่อให้เป็นผมหรือเก่งกว่าผมก็มองเห็นทุกอย่าง Up-Front ขนาดนั้นไม่ได้หรอก)


1.jpg

Continue reading

A New Kind of Design (จากการสอน “Design for iOS7”)

** เนื้อหาของบทความนี้ ตัดทอนมาจากการสอน “Design for iOS7 Workshop” ที่ผมจัดเมื่อปลายเดือน ต.ค. 2556 ที่ Hubba **

เกริ่นก่อน…

เมื่อพูดถึง iOS7 สิ่งหนึ่งที่มักจะโผล่มาในการสนทนาและเป็นประเด็นเสมอ ก็คือเรื่องของ “การออกแบบ” ซึ่งหลายต่อหลายคนจะพูดเป็นเสียงเดียวกันว่า “iOS 7 ใช้ Flat Design” และได้ทิ้ง “Skeuomorphic Design” ซึ่งเป็นเอกลักษณ์ในการออกแบบของ iOS มาตลอดไปแล้ว และเป็นประเด็นต่อเนื่องสะท้อนจากนักออกแบบหลายคนให้ได้ยินบ่อยๆ ว่า “แบบนี้ออกแบบให้สวยงามน่าดึงดูดยากจังเลย”

ก่อนที่จะไปต่อ ผมขอบอกเสียงดังๆ ตรงนี้ก่อนเลยครับ ว่า

“iOS7 ไม่ใช่แค่ Flat Design และไม่ได้ทิ้ง Skeuomorphic!
ตรงข้าม …. iOS7 นี่แหละ โคตร Skeuomorphic เลย!!
มันไม่ใช่ Flat vs Skeuomorphic ตั้งแต่ต้นแล้ว!!!”

ห๊ะ?!?!? iOS7 เนี่ยนะ Skeuomorphic?!?!?! บ้าหรือเปล่า?!?!?

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


1.jpg

Continue reading

Myth: Basic & Easy ..​เรื่องง่าย ที่มักเข้าใจผิด

เรื่องหนึ่งที่ผมพูดบ่อยมาก ก็คือ “พื้นฐาน (Basic) ไม่ง่าย” ซึ่งสวนกับความเข้าใจหรือความคิดโดยทั่วไปของคนส่วนมาก (เท่าที่รู้จัก) ว่า “Basic = ง่าย” และ “Advance = ยาก”

ทำไมเป็นงั้นล่ะ? พื้นฐานน่าจะเป็นเรื่องง่ายๆ ใครๆ ก็ต้องทำได้ ส่วนเรื่องระดับสูง น่าจะยากกว่า เพราะอย่างน้อยมันต้องต่อยอดจากพื้นฐานไม่ใช่เหรอ?

อันที่จริงแล้ว “พื้นฐาน” ที่ดี จะเป็น “การรู้” เกี่ยวกับ “อะไร ที่ไหน เมื่อไหร่ ทำไม” หรือ What, Where, When, Why มากกว่า “อย่างไร” หรือ How ซึ่ง “การรู้” นี้จะได้มาจาก “การลงมือทำ โดยรู้ว่าตัวเองทำอะไรอยู่” ไม่ใช่เพียงแค่ “ลงมือทำ เพื่อให้ได้ผลลัพธ์” นั่นคือ

“การลงมือทำ ในระดับพื้นฐานนั้น ผลลัพธ์ที่ได้และควรใส่ใจ คือ การรู้ว่าอะไร ที่ไหน เมื่อไหร่ และทำไม ไม่ต้องสนใจผลลัพธ์อย่างอื่นของมัน”

ยกตัวอย่างเช่น เรื่อง “Differential Calculus” ที่เป็นไม้เบื่อไม้เมากับนักเรียนนักศึกษาส่วนมาก หลายคนมองว่า d(x^2)/dx = 2x เป็นท่าพื้นฐานที่ใครๆ ก็ต้องทำได้ และแบบฝึกหัด d(2x^3)/dx จะสนใจว่าได้คำตอบเท่าไหร่ … ซึ่งเป็นการศึกษาพื้นฐานที่ผิดวิธีมากๆ

เพราะเรื่องพื้นฐานจริงๆ นั้น จะต้องสนใจ “นิยาม” ของ Differential Calculus ว่าเครื่องมือที่ใช้ในการมองอะไรอย่างไร เช่นเราจะมองผลของการเปลี่ยนแปลงของอะไรเมื่ออะไรเปลี่ยนแปลงไปบ้าง แม้ว่าการเปลี่ยนแปลงนั้นจะเล็กน้อยที่สุดเท่าที่เป็นไปได้ ก็จะมีผลอย่างไรบ้าง เป็นฟังก์ชั่นที่กระทำกับฟังก์ชั่นได้ผลลัพธ์เป็นฟังก์ชั่น ไม่ใช่กระทำกับค่า (Value) และอื่นๆ อีกมากมายไม่ใช่แค่นี้ และแบบฝึกหัด d(2x^3)/dx ก็ไม่ต้องสนใจว่ามันจะตอบว่า 6x^2 เท่ากับที่จะต้องสนใจว่า “เห็นหรือเปล่า ว่า 2x^3 เป็นฟังก์ชั่นของ x และ 6x^2 ก็เป็นฟังก์ชั่นของ x เมื่อดูการเปลี่ยนของฟังก์ชั่นของ x ตัวหนึ่ง (ฟังก์ชั่นเหตุ) ว่าเมื่อ x เปลี่ยนไปเล็กน้อยที่สุดเท่าที่มันเป็นไปได้ แล้วผลของมันจะเปลี่ยนแปลงไปยังไง (ฟังก์ชั่นผล)”

เห็นอะไรหรือเปล่าครับ นี่ผมยังพูดถึงพื้นฐานของ Differential Calculus ในเชิง What, Where, When, Why ไม่หมดเลยนะครับ ยังเหลืออีกเยอะ นี่คือ “เปลือก” ของพื้นฐานเท่านั้นเอง

ลองดูปริมาณบรรทัดที่ใช้ในคำอธิบาย ลองดูสิ่งที่อธิบายออกมาเป็นพื้นฐาน เทียบกับสิ่งที่หลายคนคิดว่าเป็นพื้นฐาน d(2x^3)/dx = 6x^2 ว่ามันต่างกันเยอะแค่ไหน

ประเด็นสำคัญก็คือ พื้นฐาน เป็นเรื่องของความเข้าใจ ที่จะต้องลึกขึ้นเรื่อยๆ ตามการกระทำจริง ที่ทำแล้วได้ความเข้าใจพื้นฐานเพิ่มเติม ซึ่งก็คือผลลัพธ์ในเชิงความเข้าใจ (อะไรคือ Calculus มันคือเครื่องมือที่ใช้อะไรเป็น Input และให้อะไรเป็น Output และเราจะใช้มันกับโลกรอบๆ ตัวได้ยังไง) ไม่ใช่ผลลัพธ์จากเทคนิค (6x^2)

ดังนั้น ในการศึกษาพื้นฐานหลายต่อหลายครั้ง จำเป็นที่จะต้องมี “ตัวอย่างเชิงเทคนิคที่ง่าย” หรือตัวอย่างที่ไม่เน้นการใช้ How เพราะตัวอย่างที่ง่ายและไม่ซับซ้อนนั้น จะทำให้เราชี้ถึงประเด็นของ What, Where, When, Why ได้ง่ายกว่าตัวอย่างที่ซับซ้อน ที่จะทำให้หลงไปในเทคนิคของวิธีการได้ง่าย

แต่อนิจจา …. สำหรับบ้านเรา ที่เน้นผลลัพธ์ที่จับต้องได้ (6x^2) มากยิ่งกว่าอะไรทั้งปวง รวมถึงผลลัพธ์เชิงความเข้าใจ (อะไรคือ Calculus ฯลฯ) นั้น การสนใจแต่ “ทำอย่างไร” กลายเป็นเพียงจุดเดียวที่สนใจ และหลายต่อหลายคนก็พยายามหาสูตรลัดหรือทางลัดไปยังคำตอบของวิธีการ สนใจแต่เรื่อง How และเทคนิคการได้มาซึ่งผลลัพธ์ที่จับต้องได้ … ดังนั้นจึงกลายเป็นว่า “พื้นฐานเป็นของง่าย” ไม่ใช่เพราะมันง่ายนะ แต่เป็นเพราะว่า “มันใช้ How ง่ายๆ”

คำพูดติดปากผมในช่วงหลังๆ ก็คือ

มันไม่มีอะไรยากหรอก ถ้าคุณคิดว่ามันยาก “ก็เพราะว่าคุณไม่มีพื้นฐานมากพอที่จะทำให้มันง่าย”

และ

สิ่งที่ยากที่สุด คือ “พื้นฐาน”

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

ที่สำคัญมาก …

พื้นฐานที่ดี จะต้องชัดเจน ไม่คลุมเครือ และมักจะเรียบง่ายกว่าความซับซ้อนเชิงเทคนิคต่างๆ ที่เรามองเห็น

ทั้งนี้ผมจะต้องขอสร้างความชัดเจน 1 จุดตรงนี้ คือ

“เรียบง่าย = Simple” นะ ไม่ใช่ “ง่าย = Easy”

คำว่า “เรียบง่าย” เป็นคำๆ เดียว แยกไม่ได้ ไม่ใช่ Easy นะ คนละเรื่อง คนละเรื่อง และคนละเรื่อง … การจะมองหาและทำความเข้าใจอะไรให้เรียบง่าย เป็นเรื่องที่ยากมาก และต้องมีพื้นฐานที่ดีมาก ถึงจะฉีกหน้ากากของความซับซ้อนเชิงเทคนิค มองทะลุฉากหน้าทั้งหลายทั้งแหล่ลงไปได้

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

ป.ล. ฝากไว้ตรงนี้นิดหน่อย: “หนังสือ iOS Application Development ฉบับ Remake Edition สำหรับ iOS 6 SDK ที่ผมกำลังเขียนอยู่นั้น เป็นหนังสือ ‘พื้นฐาน’ มากๆ และแน่นอนว่า ‘มันไม่ใช่หนังสือที่ง่าย’ (Know-How อาจจะง่าย แต่ Know What, Where, When, Why หนักมากแน่นอน)”

ว่าด้วย “ข้อสอบ O-NET”

ช่วงนี้ของปีทีไร จะมีเรื่องเฮฮาที่ทำให้จิตตกอยู่ทุกปี ก็คือเรื่องของ “ข้อสอบ O-NET” ซึ่งแต่ละปีจะมีโจทย์ ตัวเลือก และเฉลย ที่โคตรจะปวดตับ

ไม่ว่าจะเป็นข้อสอบเรื่องนักกีฬาทีมชาติ (ที่ใส่ชื่อจริง นามสกุลจริง ในข้อสอบ) ที่ให้เจ้าตัวมาทำเองก็ไม่ได้คะแนน เพราะเลือกไม่ตรงกับเฉลย (ซึ่งเป็นคนอื่น) ข้อสอบที่มันถูกหมดทุกข้อ แล้วไม่รู้จะตอบข้อไหน หรือข้อสอบที่ถ้าตอบตามความจริงแล้วมันไม่มีทางได้คะแนนชัวร์ๆ แต่ถ้าตอบแบบสร้างภาพการเป็นคนดีตามอุดมคติของใครบางคน (แถวบ้านเรียก “ตอแหล”) แล้วอาจได้คะแนน ฯลฯ

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

ข้อสอบ แท้จริงแล้วมันคืออะไร? มันก็เป็นแค่ “เครื่องมือวัด” เหมือนกับไม้บรรทัด ที่ไม่ได้บอกเลยด้วยซ้ำว่าใครเก่งไม่เก่ง ใครโง่ใครฉลาด ใครดีใครเลว … มันบอกแค่ว่า “ใครเหมาะกับระบบที่สุด” ระบบเป็นเช่นไร ก็ย่อมมีแนวโน้มที่จะออกข้อสอบแบบนั้นเพื่อคัดคนที่เหมาะสมกับระบบที่สุด เข้าไปหล่อเลี้ยงรักษาระบบให้คงอยู่ไปเรื่อยๆ ….​ (ลองนั่งนึกภาพหนังเรื่อง The Matrix ผ่านตาสักรอบนะ)

ถ้าระบบนั้นๆ เป็นระบบของผู้สร้าง ข้อสอบย่อมวัดการสร้าง ถ้าระบบนั้นๆ เป็นระบบของผู้รับ/ผู้เสพ ข้อสอบย่อมวัดการรับ/จำ/เสพ เป็นต้น

แล้วบ้านเราล่ะ? … จากประสบการณ์ทำงานในบ้านเราของผม ผมสรุปได้อย่างหนึ่งว่า

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

(ผมเน้นว่า “ระบบ” นะ พวกที่ต่อสู้กับ The Matrix ไปสร้าง Zion เองในบ้านเราแล้วได้ดี ก็มีถมเถนะ)

ลองดูข้อสอบข้อเด็ดของ O-NET ปีนี้นะครับ … พวกเล่นถามว่า

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

แล้วเฉลยก็คือ “ปรึกษาครอบครัว”

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

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

กลับมาเรื่องเดิมครับ …. เด็กที่ตอบข้อนี้ว่า “ปรึกษาครอบครัว” แล้วได้คะแนน ทำแบบนั้นจริงหรือไม่? หรือแค่ “ได้คะแนนเพราะคิดตรงกับผู้ใหญ่/ผู้มีอำนาจ” โดยบังเอิญเท่านั้น? … ระบบเรามันกรองคนที่บังเอิญคิดตรงกับผู้ใหญ่/ผู้มีอำนาจให้เข้าไปได้ดีในระบบเป็นจำนวนมากครับ และไม่ใช่แค่เฉพาะข้อสอบ O-NET เท่านั้นนะครับ ยังมีระบบวัดผล/ข้อสอบอีกหลายตัวที่เข้าอีหรอบนี้ ก็เหมือนกับระบบการให้รางวัลคนในองค์กร หรืออะไรทั้งหลายทั้งแหล่ ที่ต้องเป็นแบบ “ใช่ครับท่าน ยอดเยี่ยมครับ เห็นด้วยครับ” อะไรแบบนี้ตลอดเวลาน่ะแหละ

คิดแล้วเศร้า ปลง …. ว่าแล้ว Morpheus อย่างผม ก็ก้มหน้าก้มตาค้นหา Neo ออกจาก The Matrix ต่อไป

[อัพเดท 03/03/2012]: มีคนบอกผมว่า “อาจารย์ครับ ผิดแล้ว เค้าเฉลยจริงๆ ว่าไปเตะบอลครับ ส่วนที่เฉลยว่าไปปรึกษาพ่อแม่ นี่เป็นคำเฉลยของอดีตผู้อำนวยการหน่วยงานที่ออกข้อสอบครับ ไม่ใช่คนปัจจุบัน” …

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

หัดเขียนโปรแกรมยังไงให้เก่ง?

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

ก่อนอื่น ต้องทำความเข้าใจพื้นฐานก่อน ว่า

“การเขียนโปรแกรม”​ มันเป็นเรื่อง “Skill การสื่อสาร”

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

ปัญหาอันดับแรกๆ ที่ผมพบก็คือ “คิดเป็นขั้นตอนไม่เป็น”

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

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

ดังนั้นในการสื่อสาร เราจะมีปัจจัยตั้งต้นคือ “ชีท” และ “กลุ่มคน”​ และปลายทางที่เราต้องการคือ “ทุกคนในกลุ่ม ได้รับชีทที่ถ่ายเอกสารแล้ว” ถ้าจะสื่อสารเป็นกระบวนการแบบโปรแกรม หรือฟังก์ชั่นทางคณิตศาสตร์ ก็จะได้ลักษณะนี้

จำนวน = นับ(คนในกลุ่ม)
ชีทที่ถ่ายเอกสารแล้ว = ถ่ายเอกสาร(ชีท, จำนวน)
คนที่ได้รับชีท = แจกจ่าย(ชีทที่ถ่ายเอกสารแล้ว, คนในกลุ่ม)

เป็นต้น

ปัญหาอันดับต่อไปที่ผมพบก็คือ การให้ความสำคัญกับตัวภาษาโปรแกรมมากไปในตอนแรก (แต่น้อยไปในระยะหลังจากนั้น)

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

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

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

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

ตัวอย่างง่ายๆ ผมเชื่อว่าแทบทุกคนรู้จัก

printf("Hello, world\n");

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

Name            Lastname        Sword
Byakuya         Kuchiki         Senbonsakura
Sousuke         Aizen           Kyokazuigetsu

โดยช่องว่างให้เว้นว่างทั้งหมด 2 Tab และให้ได้โดยใช้ printf เพียงตัวเดียว ทำได้หรือไม่ อย่างไร อะไรทำนองนี้

======================================

สรุปสั้นๆ การเขียนโปรแกรมก็เหมือนกับการสื่อสาร คิดว่าทำอย่างไรให้สื่อสารเก่ง ก็ทำแบบนั้นกับการเขียนโปรแกรม หลายคนอยากจะพูดภาษาอังกฤษเก่ง แต่เจอฝรั่งทีไรวิ่งหนีทุกที ให้พูดก็ไม่ยอมพูด แล้วมันจะเก่งได้อย่างไร ต่อให้วันๆ นั่งท่องไวยากรณ์ นั่งท่องศัพท์ ก็ไม่เคยมีประโยชน์ … พูดในฐานะคนที่พูดได้ 3 ภาษา ฟังออก 4 อ่านออก 6 ภาษา (แต่เป็นงูๆ ปลาๆ ไม่ค่อยแข็งแรงเท่าไหร่ซะ 3) นะครับ

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

สุดท้ายคือ ให้ “ลงมือทำ” เพราะความ “อยากได้” มันไม่เคยมีประโยชน์เลย ถ้าไม่ “ลงมือทำ”

======================================

เรื่องสุดท้าย … แต่ก่อนอื่นต้องขอเล่าเรื่องตัวเองให้ฟังสักหน่อย ผมมีวิธีการเรียนเขียนโปรแกรมอยู่อย่างหนึ่ง ซึ่งโดยส่วนตัวแล้วมันเวิร์กสำหรับผม คือ

หัดให้ “มือ” เขียนโค้ด อย่า copy & paste เด็ดขาด และอย่าใช้สมองคิดโค้ดโดยไม่จำเป็น

เวลาผมจะหัดเขียนโปรแกรมในภาษาใหม่ และหัดจากหนังสือ ไม่ว่าจะเป็นหนังสือใครเขียน (และแน่นอน ว่าผมลองทำแบบนี้กับหนังสือตัวเองด้วย) ผมจะ “อ่านเนื้อหาผ่านๆ” ก่อน 1 เที่ยว จากนั้น “พิมพ์” โค้ดเหล่านั้นเองด้วย “มือตัวเอง” ผมจะไม่เคย copy & paste โค้ดในช่วงของการเรียนรู้เลย เพราะว่าสิ่งที่สำคัญที่สุดคือ มือผมต้องโค้ดเป็น

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

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

ซึ่งนี่คืออีกปัญหาที่ผมพบ ซึ่งเป็นปัญหา “ใหญ่ที่สุด” คือ ผู้ฝึกเขียนโปรแกรม ต้องการได้ผลลัพธ์สำเร็จรูปเร็วเกินไป ฉาบฉวยเกินไป ต้องการโค้ดที่เอาไป copy & paste ได้ กด compile & run เห็นผลลัพธ์ แล้วคนขยันหน่อย ก็อาจจะกลับมานั่งอ่านโค้ดบ้าง นอกนั้นก็ปล่อยๆ มันไป เพราะได้ผลแล้ว

ปัญหาที่ว่าน้ีก็คือ “โค้ดไม่เคยผ่านมือ” และ “ไม่ได้เป็นคนเริ่มเอง” (แต่เริ่มจากโปรเจคที่เสร็จแล้ว ที่คนอื่นเริ่มไว้ให้แล้ว) ซึ่งทำให้เวลาต้องทำงานจริงๆ จะเริ่มต้นอะไรเองไม่เป็นเลย และโค้ดเองไม่เป็นเลย มือมันจะไม่ขยับ และต้องไปเปลืองแรงสมองคิดโดยใช่เหตุถึงเรื่องโค้ด แล้วหลายคนก็จะ Blank .. ตายตรงนี้

ผมมีข้อสังเกต ว่าถึงระบบการศึกษาบ้านเรามันจะไม่ได้แย่ลงกว่าเดิมเท่าไหร่ แต่ทำไมคนเดี๋ยวนี้เขียนโปรแกรมแย่ลงกว่าเมื่อก่อนมาก ก็เพราะมันเริ่มต้น “ง่ายเกินไป” และ “ฉาบฉวยเกินไป” มีโค้ดอยู่แล้ว copy & paste ง่าย แค่ Ctrl+C, Ctrl+V ก็จบแล้ว หรือไม่ก็ download งานที่เสร็จแล้วมา unzip แล้วใช้งานได้เลย ดังนั้นโค้ดจะไม่ผ่านมือเลย ซึ่งนี่คือเรื่องที่หลายคนอาจมองว่ามัน “เล็กน้อย” แต่จริงๆ แล้วนี่คือเรื่องที่ “ใหญ่ที่สุด” เรื่องหนึ่ง

สมัยผมหัดเขียน C++ 98 (ที่เป็น Standard แรกที่มี STL) ผมซื้อหนังสือ The C++ Standard Template Library ของ Nicolai Josuttis มานั่งอ่านผ่านๆ ทั้งเล่มก่อน 1 เที่ยว และ “นั่งลอก” โค้ดทุกบรรทัดด้วยมือตัวเอง ทั้งเล่ม จากนั้นค่อยพยายามศึกษารายละเอียดอีกครั้งในเบื้องลึก

ซึ่งนี่เป็นวิธีเดียวกับที่ผมศึกษา Perl, Ruby, Objective-C, Mathametica, Haskell, OCaml, Scheme และภาษาอื่นๆ ที่ผมเขียนเป็น และเขียนพอเป็น

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

สรุปสั้นๆ: อยากเขียนโปรแกรมเก่ง ต้องหัด “เขียน” โปรแกรมครับ อย่าหัดแต่รันโปรแกรมที่คนอื่นเขียนแล้ว

======================================

หวังว่าคงจะเป็นประโยชน์บ้าง …​ จริงๆ แล้วเนื้อหาบทความนี้ คัดมาจาก “บทแรก” ของหนังสือเล่มใหม่ที่ผมกำลังเขียนอยู่ (ยังไม่มีชื่ออย่างเป็นทางการ แต่ประมาณ “คิดและโค้ด ผ่านภาษา Objective-C”) โดยดัดแปลงให้เหมาะกับการเป็นบทความบนเว็บ

รออ่านนะครับ ผมหวังว่าจะเป็นหนังสือที่ดี(นะ)

พฤติกรรมฝังราก จากการศึกษา

ย้อนกลับไปเมื่อเดือนธันวาคม 2009 ผมเคยเขียนบทความไว้ที่นี่เรื่อง ลอกกุญแจ ได้คะแนนเต็ม และมีข้อความสำคัญว่า

ตราบใดก็ตามที่คนทำการบ้านได้ทุกข้อ ถูกทุกข้อ แต่ทำด้วยการลอกกุญแจ ลอกคีย์ ได้คะแนนมากกว่าคนที่ตั้งใจทำเอง เดินชนกับการบ้านเอง พยายามแก้ปัญหาเอง ถูกบ้างผิดบ้าง ทำเสร็จบ้างไม่เสร็จบ้าง … ตราบนั้น ประเทศไทยก็ไม่มีวันเจริญ (ไม่ก็ ตราบนั้นประเทศไทยก็ได้แค่นี้)

วันนี้จะขอพูดเรื่อง “การศึกษา” เพียงเรื่องเดียวเท่านั้น แต่แก่นแท้ที่สำคัญ มันขยายผลไปเป็นอะไรก็ได้ที่คุณผู้อ่านจะเปรียบเทียบและตีความได้ และเราต้องไม่ลืมว่าการศึกษา คือสิ่งที่สร้างพฤติกรรมฝังรากได้มากที่สุด รองจากพฤติกรรมของคนในครอบครัว

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

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

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

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

…………………………..

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

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

…………………………………………………

ผมพูดเสมอว่า “ผมไม่โทษนักศึกษาหรอก คนเหล่านี้เป็นผลผลิตที่สมบูรณ์ ของสังคมการศึกษาที่ล้มเหลว”

การสอบโปรเจคจบของนักศึกษาปีสี่ ที่เพิ่งจะผ่านไปเมื่อไม่นานนี้ สะท้อนภาพนี้ได้ชัดเจนพอสมควร

น้องๆ ปีนี้ คือนักศึกษาที่ผมสอนวิชา Programming Platforms and Environment ไปเมื่อสองปีก่อน ซึ่งในปีนั้นเมื่อไหร่ก็ตามที่ผมให้โจทย์ที่ต้องเขียนโปรแกรมบ้าง น้องๆ ส่วนมากจะ “รอเพื่อน” จนกระทั่งมีใครสักคนทำได้ แล้วลอกมันส่งกันเกือบยกชั้น .. น้องๆ ส่วนมากจะ “ไม่สามารถอธิบาย” แต่ละบรรทัด/แต่ละส่วนของโปรแกรมได้ ว่ามันคืออะไร มันมีไปทำไม ถ้าถามผลการทำงานของโปรแกรมอย่างฉาบฉวย จะตอบได้ แต่อย่าถามนะ ว่าไอ้บรรทัดนี้ มันมีไว้ทำไม มันทำงานเมื่อไหร่ อย่างไร มันทำแบบอื่นได้มั้ย มันเอาไปใช้ทำอะไรได้บ้าง จะเงียบ ตาย ทันที … น้องๆ แทบทุกคนจะ “ทำการบ้านเฉพาะข้อง่ายๆ” ที่คำตอบมันชัดหรือหาได้ง่าย

สอนก็แล้ว ให้ตกก็แล้ว ว่าก็แล้ว ฯลฯ

สองปีผ่านไป หลายคนก็ทำโปรเจคจบ เกิดอะไรขึ้นหรือ? ก็เหมือนกับข้อความข้างบนนี้น่ะแหละครับ เพียงแต่เปลี่ยนจาก “การบ้าน” เป็น “โปรเจค” เท่านั้นเอง อะไรที่เคยหยิบจากเน็ตได้อย่างฉาบฉวย เอามารันแล้วได้ผลที่ต้องการ มาส่งเป็นการบ้าน ไม่ได้คิด ไม่ได้เขียน ไม่ได้ทำความเข้าใจอะไรเลย เมื่อก่อนเป็นยังไง เดี๋ยวนี้ก็เป็นอย่างนั้น เลือกทำแต่เฉพาะงานส่วนง่ายๆ ที่คำตอบมันหาได้ง่ายๆ ฉันใดก็ฉันนั้น ถ้ามีอะไรที่คล้ายเพื่อน ก็จะลอกเพื่อน โดยตัวเองไม่เข้าใจอะไรเลย ฉันใด ก็ฉันนั้น

……………………………………..……………………………

ถ้านักศึกษากลุ่มนี้ยังจำได้ ผมเคยเขียน “บทเรียนสุดท้าย ที่ผมไม่มีโอกาสสอนคุณในห้องเรียน” ลงใน “ข้อสอบปลายภาค” และ ณ วันนี้ ผมขอเขียนมันอีกครั้งหนึ่งที่นี่

____ บทเรียนสุดท้าย ที่ผมไม่มีโอกาสสอนคุณในห้องเรียน ______

อาจารย์ที่ผมเคารพมากท่านหนึ่ง (Prof. Brian Harvey; University of California at Berkeley) เคยพูดเอาไว้ว่า เหตุผลที่ นักศึกษาควรศึกษาทุกอย่างเอง หัดทําอะไรเอง ชนกับปัญหาเอง วิเคราะห์การแก้ปัญหาเอง ไม่ลอก ไม่ถามหาความช่วยเหลือ ก่อนเวลาอันควร ไม่ควรเขียนโปรแกรมให้กัน หรือคิดวิธีการแก้ปัญหาให้กัน ไม่ใช่เพราะเรื่องจรรยาบรรณ เรื่องชื่อเสียง ไม่ว่า จะของตัวเองหรือสถาบัน เรื่องฝีมือการทํางาน ฯลฯ หรือเรื่องอะไรก็ตามที่มันอุดมคติ แต่เพราะ “พฤติกรรมอะไรก็ตาม ที่คุณสร้างให้ตัวเอง สมัยเรียน มันจะเป็นพฤติกรรมที่ฝังรากลึก แก้ไม่ได้ ตอนที่คุณไปทํางาน”

มันเหมือนกับการเขียนโปรแกรมให้ตัวเอง คอมไพล์ … แล้วไปเห็นผลการรันในตอนทํางานจริง

ผมไม่อยากเห็น พนักงานที่อ้างว่า ไปเที่ยว กิจกรรม ฯลฯ ในคืนวันอาทิตย์ จนไม่สามารถมาทํางานได้ในวันจันทร์ เพราะนั่น เป็นวันทํางาน คุณก็ต้องรับผิดชอบมันในฐานะวันทํางาน

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

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

ไม่ว่าคุณจะทํางานไอทีหรือไม่กต็ามพฤติกรรมเหล่าน้ีจะติดตัวคุณไป

ดังน้ันผมหวังว่าจะไม่ได้ยินคําพูดของคุณที่ว่า“จบแล้วผม/หนูจะไม่ทํางานด้านนี้ดังนั้นให้ผม/หนูผ่านเถอะครับ/ค่ะ” อีก

ผมอยากเคารพคุณทุกคน ในฐานะ “นักศึกษา” ในวันนี้ และ “เพื่อนร่วมวงการ” ในอนาคต

ขอบคุณครับ

… และคุณคงเข้าใจแล้วว่า วิชานั้น ที่ผมบอกว่า มหาวิทยาลัย การศึกษา และครอบครัว มันก็เป็น Programming Platform และ Environment ที่มันโปรแกรมพฤติกรรมฝังรากให้กับพวกคุณ ที่มันแก้ไม่ได้ ถ้าพวกคุณไม่พยายามคิดจะทำอะไรบางอย่างกับมันบ้าง มันแปลว่าอะไร … เพราะสิ่งไหนที่มันเป็นในวันนั้น วันนี้ก็เป็นอย่างนั้น

หนังสือ iPhone App: 3 บทใหม่ (ที่เคยคิดจะเอาใส่หนังสือเล่ม 2)

เนื่องจากก่อนหน้านี้ผมได้เขียนหนังสือ “คู่มือเขียน iPhone App” ซึ่งออกมาในช่วงคาบลูกคาบดอก ระหว่างรอการเปลี่ยนแปลง จาก iOS 4 เป็น iOS 5 และ Xcode 4 เป็น Xcode 4.2 ซึ่งเป็นการเปลี่ยนแปลงระดับ “Major Change”

ใจจริงผมอยากจะเขียนให้อิงกับ iOS 5 และ Xcode 4.2 เป็นหลักตั้งแต่ต้น แต่ในขณะนั้นไม่มีใครบอกได้ว่าทั้งสองตัวนี้จะออกมาเมื่อไหร่ และด้วยเหตุผลหลายๆ อย่าง รวมถึงความต้องการของสำนักพิมพ์ ที่อยากจะออกสู่ตลาดเร็วๆ ในขณะที่ยังไม่มีเจ้าอื่นออกมา (ซึ่งผมเข้าใจเหตุผลนี้ และไม่มีปัญหาใดๆ ทั้งสิ้น) ทำให้เราตัดสินใจทำมันออกมาเป็น “iOS 4 และ Xcode 4” เพื่อให้ออกมาได้ก่อน และหลายคนได้เริ่มก่อน

และด้วยเหตุผลของ NDA ทำให้ผมไม่สามารถที่จะเขียนถึงรายละเอียดอะไรของ iOS 5 และ Xcode 4.2 ได้เลย

ทีนี้ปัญหาก็เลยเกิดขึ้น เมื่อ iOS 5 ออกมาแล้ว และ Xcode 4.2 ออกมาแล้ว (และไม่สามารถหา Xcode 4.0, 4.1 ได้ง่ายๆ อีกต่อไปแล้ว เพราะ Xcode ที่อยู่บน Mac App Store มันเป็น 4.2) ปัญหาง่ายๆ มันก็เลยเกิดขึ้น เพราะว่ามันมีการเปลี่ยนแปลงมากมาย อย่างที่ผมบอกไว้ ทั้งในระดับตัวภาษา Objective-C, iOS SDK และตัว Xcode เอง โดยเฉพาะอย่างยิ่งเมื่อ Default Settings ทุกอย่างนั้นกำหนดให้ใช้ความสามารถใหม่โดยปริยาย

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

สำหรับท่านที่ไม่สนใจจะศึกษาเพิ่มเติม หรืออยากจะทำตามหนังสือเล่มแรกอย่างเดียว ผมมีคำแนะนำว่า เวลาสร้างโปรเจคใหม่ ให้เลือก “ไม่ใช้ Storyboard” และ “ไม่ใช้ Automatic Reference Counting” เสมอครับ

ตอนนี้ผม “พับ” โครงการที่จะเขียนหนังสือเล่ม 2 ออกตีพิมพ์เรียบร้อยแล้วครับ แต่จะ “เขียนใหม่ทั้งหมด” เป็น iOS Development Series โดยไม่เหลือเยื่อใยกับของเดิม เป็นการเขียนใหม่ 100% ทั้งตัวอย่าง เนื้อหา เรียบเรียง โดยจะทำเป็น e-Book only และขายผ่านเว็บไซต์ของ Code App และอาจจะผ่าน App ซึ่งออกแบบมาเฉพาะสำหรับหนังสือเล่มนี้ เท่านั้น โดยมีเนื้อหาแบ่งเป็นหลายเล่ม ตั้งแต่เริ่มต้นเขียนโปรแกรมด้วย Objective-C เต็มๆ เล่มเลยทีเดียว

อดใจรอกันสักหน่อยนะครับ

[ประกาศ] iOS SDK 5 & Xcode 4.2 Training

ทีมงาน Code App จัด Training สำหรับ iOS 5 SDK & Xcode 4.2 ครับ จัดเต็ม 4 วัน 17, 18, 24, 25 ธันวาคม รายละเอียดดูได้จากเว็บไซต์ของ Code App ครับ

พัฒนา iOS Application ด้วย iOS 5 SDK & Xcode 4.2

หลังจากนี้จะมี Training ระดับ intermediate และ advanced แบบเจาะเฉพาะเรื่องมาเรื่อยๆ ครับ เช่น Data Persistent & Core Data, Web Services, Core Image, Social Network Applications เรื่องละ 1-2 วัน คอยติดตามนะครับ แต่สำหรับแต่ละเรื่องพวกนี้จะไม่ลงพื้นฐานแล้ว จะเจาะเข้าเรื่องเลย เพราะว่าผมไม่อยากทำ Training แบบกว้างๆ เรื่อยๆ แต่ไม่ได้อะไรแบบลงลึกเท่าไหร่

สำหรับคอร์สนี้ ลงทะเบียนได้ในลิงค์ข้างบนครับ

ลูกค้าคือพระเจ้า (จากมุมมองของ​ “การศึกษา”)

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

เรื่องนี้รู้กันดีอยู่แล้ว แล้วผมจะเขียนทำไม?

ผมอยากจะมองเรื่องนี้ในด้าน “การศึกษา” เท่านั้นครับ ด้านอื่น เรื่องอื่น ที่ไม่ใช่เรื่องที่ตัวเองมี authority อะไรด้วยเลย ผมขอไม่มองก็แล้วกัน

ผมถามคำถามนี้มานาน ว่า “ถ้า” ข้อความว่า “ลูกค้าคือพระเจ้า” ไม่ผิด และใช้ได้กับวงการศึกษา “แล้ว” ลูกค้าของสถาบันการศึกษา เช่น มหาวิทยาลัย “คือใคร”?

คำตอบที่ต่างกันในจุดนี้ จะทำให้ทุกอย่างต่างกันราวฟ้ากับเหวแน่นอน และผมมีคำตอบให้เลือก 2 คำตอบ คือ

  1. ผู้เข้ามาเรียน หรือผู้ที่กำลังจะเข้ามาเรียน
  2. สังคมที่อยู่รอบตัวสถาบันการศึกษา หรือสังคมที่ใหญ่กว่านั้น เช่น อุตสาหกรรมที่เกี่ยวข้อง หรือแม้แต่ประเทศชาติ

แน่นอนว่า ในความเป็นจริง เราต้องคำนึงถึงตัวเลือก 2 ตัวนี้ควบคู่กัน แต่ว่าอะไรล่ะ ที่เป็น “ตัวเลือกหลัก” ที่สำคัญกว่าอีกตัวหนึ่ง?

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

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

แต่ถ้าเราเลือกข้อ 2. แล้ว “ผู้ที่จ่ายเงินเข้ามาเรียน” ล่ะ? ไม่ใช่ลูกค้ากระนั้นหรือ?

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

ทุกวันนี้ ในวันที่การศึกษากลายเป็นธุรกิจอย่างเต็มตัว ผู้เข้ามาเรียน (สังเกตว่าตั้งแต่ต้น ผมใช้คำนี้ แทนคำว่า “นักเรียน” หรือ “นักศึกษา”) มีทัศนคติว่าตัวเองเป็น “ลูกค้า” มากขึ้นทุกวัน เพราะว่าพวกเขาคือผู้จ่ายเงิน จ่ายแล้วต้องได้อย่างที่ตัวเองอยากจะได้ จ่ายแล้วจะเรียกร้องเอาอะไรก็ได้ ด้วยความที่ว่า “ลูกค้าคือพระเจ้า”

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

ไม่ผิดครับ “ลูกค้าคือพระเจ้า”

ป.ล. คงได้มีโอกาสเขียนเรื่อง Consumer & Creator หรือ “ผู้เสพ & ผู้สร้าง” ที่ผมพูดถึงบ่อยๆ ในทุกการบรรยาย ไม่ว่าจะในห้องเรียนหรือบรรยายสาธารณะ และเขียนถึงในบางส่วนใน Facebook ในโอกาสถัดไป