ว่าด้วยวิชา User Interface

ไม่ได้อัพเดทบ้านนี้ซะนานเลย มัวแต่ไปอัพที่ Multiply กับ Twitter (แต่ว่าอันนั้นสู้ sugree ไม่ได้หรอก) ก็มันไม่มีเรื่องจะเขียนยาวๆ นี่นะ

เปิดเทอม ยุ่งวุ่นวายนิดหน่อย ตรงที่มีเด็กๆ มาถามเยอะแยะ ว่าทำไมผมไม่เปิดวิชา User Interface

อยากจะบอกน้องๆ ว่า นี่เป็นวิชาที่ผมชอบสอนที่สุด และคิดว่าตัวเองสอนได้สนุกที่สุดแล้ว (หมายถึงเทียบกับเฉพาะวิชาที่ตัวเองสอนนะ) และผม “อยากจะเปิดที่สุด” เหมือนกัน แต่อาจจะด้วยเหตุผลหลายๆ อย่างทำให้เทอมนี้ภาควิชามีมติว่าไม่เปิด ซึ่งตัวผมเองไม่ได้มีปัญหาอะไรและรับมติ (เลยไปสอน Software Engineering แทน) ซึ่งวันนั้นที่ภาควิชาประชุมกันนั้น ผมไม่ได้เข้าประชุมเนื่องจากติดการประชุมใหญ่ของศูนย์บ่มเพาะธุรกิจ (University Business Incubator; UBI) ทุกมหาวิทยาลัยที่โรงแรม Rama Garden เลยไม่รู้ว่าวันนั้นประชุมกันยังไงบ้าง และตัวผมเองไม่มีโอกาสที่จะยืนยันที่จะเปิดวิชานี้ แต่อย่างไรก็ตาม มติคือมติครับ ผมไม่ขัดข้องแต่ประการใด

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

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

เอา “ความดี” มา Entrance?

ฟังข่าวเมื่อวันก่อนแล้วสะดุ้งโหยง ว่าจะมีการเอาคะแนนความดีมาใช้ในการเข้ามหาวิทยาลัย โดยอาจจะเริ่มใช้เร็วถึงปีหน้าเลยทีเดียว ลองอ่านเพิ่มเติมจาก

MCOT News – นำร่องใช้คะแนนความดีเข้ามหาวิทยาลัยปีหน้า

อ่านแล้วก็ยังเกิดข้อสงสัยหลายอย่างด้วยกัน กลัวว่ามันจะเหมือนกับประเด็นการประกันคุณภาพของสถาบันอุดมศึกษา หรือว่าการใช้​ GPA ในการเข้ามหาวิทยาลัย ที่สุดท้ายก็มีปัญหาในเรื่องการควบคุมคุณภาพ

ผมไม่ได้ต่อต้านแนวคิด (concept) แต่ว่าผมกลัวปัญหาเรื่อง implementation ของ concept มากกว่า เพราะว่าเราคงจะเห็นและรู้กันจนชินแล้ว

ความดีจะวัดกันออกมาเป็นคะแนนอย่างยุติธรรมได้ยังไง? จะมีการแจกคะแนนแบบเฝือหรือไม่? จุดยืนของโรงเรียนหลายโรงเรียนในประเด็นนี้คืออะไร? จริงๆ ก็ยังมีอีกเยอะ

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

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

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

หายไปไหน?

นั่นสิ … ผมหายไปไหนจากเว็บนี้?

ผมมัวแต่ไปสร้าง community blog/website อีกแบบหนึ่งอยู่ … เป็น community blog/website ที่ผมและนักศึกษาของผมในวิชาต่างๆ จะช่วยกันค่อยๆ เขียนมันขึ้นมาให้เป็นแหล่งรวมความรู้ และประสบการณ์ที่เกี่ยวข้องกับวิชานั้นๆ

ทุก blog จะเหมือนๆ กันอย่างนึง คือ ผมจะรวบรวม reading list เป็นเรื่องๆ ไว้ (คือเรื่องหนึ่งก็มีหลาย reading) แล้วให้นักศึกษาเข้ามาอ่าน แล้วก็ต้องไปเขียนบทความเข้ามาเพิ่มเป็น entry ใหม่ใน blog โดยที่ผมจะ moderate ให้ ว่ามันควรลงหรือไม่ควรลง บางคนเขียนมาง่ายไป หรือว่าน้อยไป (แค่บรรทัดเดียว)ื ผมก็จะไม่ publish ให้ …. ใช้การสร้าง content เป็นวิธีการวัดผล ใครสร้าง content มากกว่าและเป็น content ที่มีประโยชน์ (คือนำไปสู่ creative discussion ที่ให้ได้มาซึ่ง insight ต่างๆ รวมถึงการร่วมสร้าง creative discussion) .. ก็ได้คะแนนมากกว่าไป

ลองเข้าไปดูครับ ใครอยากจะได้ account ในวิชาอะไรเพื่อเข้าไปช่วยๆ กันก็รบกวนบอกครับ ผมจะสร้างให้

แล้วก็มีอีกอัน คือเป็น web รวมๆ พวกนี้อีกที (ณ ปัจจุบัน)

จริงๆ ไอ้ตัวนี้ผมอยากจะขยายมันออกไปมากกว่านี้ มากกว่าที่จะเป็นแค่ portal ของรายวิชาที่จะมี digital content (ที่ตอนนี้ก็คงมีแต่ podcast และ RSS ที่ feed มาจากไอ้พวก link ด้านบน) …. คือผมอยากจะให้มีการสร้าง knowledge และ content ร่วมกันในหลายๆ แง่ หลายๆ มุมมากที่สุดเท่าที่จะมากได้ ต่อไปอาจจะมีเรื่องกิจกรรมนักศึกษามากกว่านี้ หรือว่า event ต่างๆ มากกว่านี้….. แต่ว่า ตอนนี้ขอให้แก้ระบบให้มันเสร็จก่อน เพราะว่ามีหลายอย่างที่มันยังผิดๆ อยู่มากมาย (เกิดจากที่ programmer ของผมมอง model และ interaction design ของระบบนี้ไม่ขาดเอง และผมเองก็ไม่ได้ลงไปดูเองมากมายเท่าไหร่)

ก็ update กันนิดครับ เดี๋ยวจะคิดว่าผมหายไปนาน….. ไม่รู้มีคนคิดถึงบ้างหรือเปล่า :-)

History of the Internet & the Web

เทอมนี้สอนวิชา Programming on the World Wide Web และคิดจะใช้วิธี collaborative knowledge development กับวิชานี้ (และอาจจะวิชาอื่นๆ ที่สอนในเทอมนี้ด้วย) ก็คือ ผมจะรวบรวมบทความหรือว่าเร่ืองน่าสนใจต่างๆ มาเป็น reading list และนักศึกษาจะต้องเข้าไปอ่าน​ (ไม่จำเป็นต้องอ่านทั้งหมด) และต้องมีความคิดอะไรบางอย่างกับสิ่งที่ตัวเองอ่านไป ว่าให้ข้อคิดอะไรบ้าง ส่งให้เกิดผลอย่างไรบ้าง หรือว่าทำให้เข้าใจโลกที่เป็นอยู่อย่างไรบ้าง และนักศึกษาจะต้องเขียนเป็นบทความสั้นๆ แล้ว submit กลับเข้าไปในระบบ โดยที่ผมจะเป็น editor ให้ เพื่อคัดเลือกบทความที่ดี (interesting, insightful ตามภาษา slashdot) ให้อยู่ในระบบ และการนับคะแนนจะนับตาม contribution ในการร่วมกันสร้าง knowledge

สำหรับ reading list แรกของวิขานี้ คือเรื่องเชิงประวัติศาสตร์ นั่นคือ history of internet & the web ซึ่งผมเห็นว่าจริงๆ ก็น่าสนใจดี ก็เลยเอามา post ไว้ที่นี่อีกที่หนึ่ง

517312 Programming on the World Wide Web: Reading: History of Internet & the Web

ซึ่งก็คงต้องขออภัยอย่างสูงด้วยอีกเรื่องหนึ่งคือ ใน website นั้น ไม่ให้คนนอกสมัครเข้ามาเขียน content ได้แต่อย่างใด (เนื่องจากกำลังอยู่ในระหว่างการทดลอง model นี้ในการศึกษา)

IDS 110 จาก UC Berkeley

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

ตอนนี้มี podcast ที่ฟังติดมากเลยอันนึง คือ podcast ของวิชา IDS 110: Introduction to Computers โดยอาจารย์ Americ Azevedo (รู้สึกตอนนี้จะเปลี่ยนรหัสเป็น E 110 แล้ว ชื่อวิชาเหมือนเดิม) ที่ผมไป subscribe มาจาก iTunes-U

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

เนื้อหาก็เป็นเรื่องของ networks, information, society และมีเรื่องของการศึกษา เรื่องประเด็นต่างๆ ที่เทคโนโลยีทางคอมพิวเตอร์และสารสนเทศได้เปลี่ยนโลกไป มีการเชิญคนหลายคนที่น่าสนใจมาพูด topics ของวิชาค่อนข้างกว้างและได้ overview ที่ broad เอาเรื่อง

ผมฟังของตั้งแต่ Spring 06, Fall 06, Spring 07 เห็นว่าเนื้อหาไม่ค่อยจะซ้ำกัน ซึ่งเป็นเรื่องดี ส่วน topics ที่ฟังแล้วคิดว่าได้อะไรเป็นพิเศษก็คงจะเป็น

  • Re-engineering Education via Socratic Cultureware อันนี้ใครที่เคยฟัง/อ่าน/ดูผมพูดเรื่องการศึกษาน่าจะชอบมาก เพราะว่ามีหลายประเด็นที่จี้ใจดำ
  • Ivan Tam – Open Source Production in Non-Software Environment
  • Time, Technology, and Disappearing Students
  • Life in the Media Caves
  • We Are the Media; They Are the Media
  • Jaron Lanier – Computers and Culture ชอบเรื่องนี้มากเหมือนกัน
  • Existential Crisis of the Internet: Dangers and Opportunities
  • Pervasive Digital Media and the Postmodern World
  • Time, Money, and Love in the Age of Technology
  • Seth M. Andrzejewski: Principles of Usability
  • Plato’s Cave & Nature of Data, Information, Knowledge, and Wisdom

จริงๆ ก็ชอบเกือบหมดน่ะแหละ เนื้อหา overview ดีและไม่ได้ลงไปใน details มาก แต่ว่าฟังแล้วต้องคิด คิด คิด และคิดตามจริงๆ อ่อ จรริงๆ แล้วมันมี webcast ด้วย แต่ว่าไม่เคยเข้าไปดู เพราะว่า net ที่ ม. ในส่วนที่ใช้มันค่อนข้างห่วย แล้วก็การดู video มันไม่ค่อยจะ passive เหมือนกับฟัง podcast/เพลง น่ะ

ฟัง podcast วิชานี้แล้วชักอยากจะกลับไปนั่งเรียนแฮะ ……. อยากกลับไปเรียน ป.ตรี ใหม่ด้วยซ้ำไป

[update 1]: เพิ่ม topic เข้าไปอีกอัน

เศร้าใจ

อ๊ะๆ อย่าคิดว่าเรื่องเดิมๆ นะ คนละเรื่องๆ :-D

ดูกระทู้ forum C/C++/VC/MFC ที่ thaidev.com แล้วเศร้าใจยังไงก็ไม่รู้ …. (เข้าไปดูก็จะรู้ว่าเรื่องอะไร … )

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

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

อ่อ .. แล้วใครที่เล่น thaidev.com นะ ปกติเวลาผม post ที่นั่นจะใช้ชื่อว่า rp

How to Become A Hacker

บทความที่ดีมาก….

ผมอ่านเรื่องนี้นานมากแล้ว ตั้งแต่เรียนปริญญาตรีได้มั้ง และเป็นหนึ่งในบทความในหัวใจเลย ต่อมาก็กลายเป็น source of inspiration หนึ่งที่ทำให้ผมเขียนบทความ (ที่ยังเก็บต้นฉบับไว้อยู่ แต่ว่าขี้เกียจรื้อ) เรื่อง Hackers: Their True Stories

Hacker คือ ฮีโร่ของผมมาตลอด แต่ว่าคำๆ นี้ ในสายตาของ public แล้ว พวกที่ถูกเรียกว่า Hacker หรือว่าพวกที่สื่อต่างๆ และหลายๆ คนเรียกว่า Hacker คือคนไม่ดี ที่คอยทำลายระบบต่างๆ รื้อข้อมูล ทำลายข้อมูล เอาข้อมูลที่ไม่ได้รับอนุญาตไปใช้ในทางไม่ดี หรือแม้แต่อะไรที่เบาและแรงกว่านั้น​ (ตั้งแต่แงะซอฟต์แวร์ไปเรื่อย ถึงสร้างความเสียหายระดับชาติ)

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

บทความของ ESR นั้น ถ้าอ่านดีๆ และปฏิบัติตามได้จริงๆ คุณอาจจะกลายเป็น Hacker ก็ได้ ใครจะไปรู้ ….

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

ก่อนที่จะถามผมนะ ว่า แล้วจะเป็นไปทำไมล่ะ ทำไมฉันถึงต้องเป็นด้วย …. ก็ลองถามตัวเองดูก่อนนะครับ ว่าอ่านชื่อบทความ อ่านที่ผมเขียนมาแล้ว สนใจมั้ยล่ะ ถ้าไม่สนใจ ก็คงจะปกติที่คุณจะถามเช่นนั้น แต่ว่าถ้าสนใจ ก็จะรอช้าอยู่ทำไม (ใบ้นิด: มีคนแปลเป็นไทยไว้ด้วย แต่ว่าไม่แน่ใจว่า revision มีคนแปลหรือยัง…)

Computer Stupidities

มี website อยู่ที่หนึ่งนะ ที่ผมเคยชอบเข้าไปดูเมื่อก่อน (ตอนนี้ก็ once in a while) เข้าไปหาเรื่องสนุกๆ อ่านเล่น

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

  • Piecing it together (เอาเรื่องโน้นเรื่องนี้มาจับแพะชนแกะกันมั่ว)
  • Operating System (ความเข้าใจผิด เรื่องขำขัน เกี่ยวกับ OS)
  • Programming (ใครเรียน CS/IT/CE ต้องอ่าน!)
  • Mincing Words (เอาคำมายำกัน)
  • Paranoia (ความกลัวจากความเชื่อผิดๆ จนเข้าขั้นวิตกจริต)
  • Stupid Tech Support (อันนี้ขำมาก)
  • Stupid Salesman (อันนี้ด้วย)
  • ……. เยอะแยะ เข้าไปอ่านเองนะครับ

เมื่อก่อนอ่านก็ขำนะ แต่ว่าทำไมเดี๋ยวนี้มันต้องหัวเราะแห้งๆ ก็ไม่รู้ ขำไม่ออกมากขึ้นหลายๆ อย่าง แต่ว่าก็ยังเข้าไปอ่านอยู่ดี มีความรู้สึกว่าดีกว่าอ่านกระทู้ที่ web หลายๆ web หน่อยนึงมั้ง

อืมมม แต่ว่าจริงๆ คงต้องมองย้อนกลับไปที่ต้นตอของปัญหามากขึ้น ด้วยความรู้สึกส่วนตัวอย่างหนึ่งที่มีมานานแล้วนะ คือ computer แล้วก็ information technology มันกลายเป็น mainstream เร็วเกินไป เร็วเกินกว่าที่คนจะมี literacy กับมันมากพอ คือทุกวันนี้ computer กลายเป็นอุปกรณ์มาตรฐานอย่างหนึ่งในการใช้ชีวิต การทำงาน การเรียน การติดต่อ ฯลฯ แต่ว่ามันต่างจาก TV, วิทยุ, โทรศัพท์, projector, ฯลฯ มากมายมหาศาล เรียกว่ามันคนละ order of magnitude เลยก็ว่าได้

พูดง่ายๆ ว่าเราสามารถใช้ TV ได้โดยไม่ต้องคิดว่ามันจะตีกับวิทยุหรือเปล่า แต่ว่าถ้าเราเปิดโปรแกรมดูหนังพร้อมกันกับโปรแกรมฟังเพลง มันอาจจะตีกันทำให้ crash กันได้ไม่ยากเย็นเลย หรือว่าเราสามารถที่จะใช้เครื่องคิดเลข กับเครื่อง word processor ได้โดยไม่ต้องคิดว่าพวกมันแย่งทรัพยากรกันยังไง (นอกจากค่าไฟค่าแบตเตอรี่จากกระเป๋าเรา) หรือว่าเรื่องไวรัสที่ติดกับโปรแกรมตัวนึงอาจจะทำลายไฟล์ได้ทั้งเครื่อง ฯลฯ

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

ช่วยกันได้ก็ช่วยๆ กันไปนะครับ เรื่อง computer/information literacy กับคนใกล้ตัวเนี่ย สำคัญเชียวแหละ อ่าน web นั้น อ่านกระทู้ทั่วไปตาม webboard หรือว่าเจอคนใกล้ๆ ตัว ก็ช่วยกันสร้างความเข้าใจที่ดีขึ้นกับ computer เถอะครับ มันใกล้ตัวกว่าที่เราคิด

Pointless Programming : Java 7

จริงๆ เค้าเรียกว่า Point-Free Programming (HaskellWiki) หรือว่า Tacit Programming (Wikipedia) นะ :-P ผมเขียนชื่อล้อเลียนไปงั้นเอง เรื่องนิยามหรือว่าตัวอย่างลองไปดูใน Wiki link ด้านบนเอานะครับ แต่ว่าผลของมันเนี่ย มันมักจะทำให้โปรแกรมสั้นขึ้น ในขณะที่มันก็ยังอ่านง่ายขึ้นด้วยเออสิ แล้วมันเกี่ยวอะไรกับ Java 7 ล่ะเนี่ย? เพราะว่าใน spec ของ Java 7 มันจะมีเรื่อง Closures เข้ามาเกี่ยวข้องด้วย แล้วก็จะมีเรื่องอื่นๆ ที่เอา idea จาก Functional programming มายัดลงไปในภาษาที่มันค่อนข้างจะ bloat และ verbose ที่สุดภาษานึง ทำให้มันสั้นลง กระชับขึ้น น่าอ่านน่าเขียนขึ้นแบบไม่น่าเชื่อ ลองดูตาม Link ต่อไปนี้นะครับ

ส่วนนิยามของ Closures ในแบบ Computer Science และ Software Development จริงๆ ก็ตามนี้ครับ Closure (computer science) – Wikipediaขอปิดท้าย post นี้ด้วยเรื่องของ Point-Free Programming ใน Java 7 ครับ สวยดีเหมือนกัน ดูรายละเอียดเต็มๆ ที่นี่: Ricky’s technical blog: Point-free Programming in Java 7 – Beyond Closuresผมว่าโลกมันกำลังหมุนไปในทิศทางที่มันถูกต้องนะ ที่ในที่สุดก็เริ่มจะมีการเอา idea ของ Functional programming มาใช้ในภาษาโปรแกรมที่เป็น mainstream เสียที เพราะว่า programming model ของ Functional มัน elegance กว่า imperative เยอะมาก …สุดท้ายมันทำให้ผมนึกถึง paper ที่เป็น hall-mark สุดยอดอันนึงของ John Backus (ผมเคยเขียนถึงเรื่องเค้าทีนึงที่ Thai Mac Dev นะ) คือCan programming be liberated from the von Neumann style?: a functional style and its algebra of programs (Link ไปหา paper ที่ Stanford University)เมื่อ Java 7 ออกมาจริงๆ ผมคงจะต้องกลับมามองมันแบบ serious อีกที แต่ว่าเราก็ไม่รู้เหมือนกัน ว่าวันนั้นโลกมันจะหมุนไปถึงไหน และจะมี feature อะไรอีกบ้าง ใน niche programming languages ที่ทำให้ผมอ้าปากค้าง ตกหลุมรัก และมอง Java 7 “ในวันนั้น” ว่ามันไม่ elegance ….. อย่างว่าแหละครับ Programmers Don’t Like to Code ;-)

เปลี่ยนภาษาเขียนโปรแกรม

อะไรยากกว่ากัน ระหว่าง

  1. สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยนภาษา
  2. สอนคนที่เขียนโปรแกรมไม่เป็น ให้เขียนโปรแกรมเป็น

หลายคนจะตอบข้อ 2 โดยไม่ลังเลเท่าไหร่ เพราะว่าถ้าเป็นภาษาหนึ่งๆ แล้ว เรียนอีกภาษาหนึ่งคงไม่ยากเท่าไหร่ สาเหตุหนึ่งก็คงเพราะว่าภาษาส่วนมากมีรากที่คล้ายๆ กัน เช่น Pascal, C, C++, Java, C# ถ้าเป็นภาษาใดภาษาหนึ่งแล้ว การเรียนรู้ syntax ของอีกภาษาหนึ่งก็ไม่ใช่เรื่องยากเย็นเท่าไหร่แต่ว่าสอนคนที่เขียนโปรแกรมไม่เป็นให้เขียนโปรแกรมเป็นนี่สิ งานช้าง เพราะว่าอาจจะต้องสอนแนวคิด หลักการคิดแบบคอมพิวเตอร์ หลักการคิดแบบ von Neumann machine หลักการคิดแบบที่เราต้องใช้เวลาเขียนโปรแกรม ฯลฯ ซึ่งอาจจะยากหน่อย ไหนเลยจะต้องมานั่งเรียนรู้ syntax อีกแต่ว่าถ้าเปลี่ยนคำถามหน่อยนึงล่ะ เปลี่ยนข้อที่ 1 ให้เป็น

  1. สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยน paradigm ในการเขียนโปรแกรม

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

  • นึกถึงโปรแกรมที่ประกาศตัวแปรไม่ต้องประกาศ type แต่ว่าก็ยังเป็น strong typing ออกไหม
  • นึกถึงโปรแกรมที่ไม่ต้องประกาศ main function ออกไหม
  • นึกถึงภาษาโปรแกรมที่ไม่มี loop ออกไหม
  • นึกถึงภาษาโปรแกรมที่ฉลาดพอที่จะทำ list comprehension (เช่นบอกว่า จะเอา x จาก list L โดยที่ x มากกว่า 3 แล้วมันเข้าใจว่าจะต้องทำอะไรโดยที่เราไม่ต้องเขียน low-level instruction)

นอกจากเรื่องพวกนี้จะยาก เพราะว่าพอสมองเราถูก over-train ให้ชินกับอะไรบางอย่างมากๆ แล้ว มันจะเรียนรู้สิ่งใหม่ยากขึ้น มีอะไรที่ต้อง unlearn มากขึ้น อย่าว่าแต่ imperative vs. functional programming เลย แค่ procedural vs. object-oriented ก็แย่แล้ว การที่เราจะ unlearn เรื่องหนึ่งๆ แล้วปรับไปสู่เรื่องใหม่ เป็นเรื่องที่ค่อนข้างยากเอาการทีเดียวไม่ใช่แค่นั้น แต่ให้เขียน style เดิม แต่ว่าเปลี่ยนภาษาเขียนโปรแกรม ก็ยากแล้ว

  1. สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยนภาษา โดยต้องใช้เป็นภาษาหลักในกรณีทั่วไปแทนภาษาเดิม

ผมเห็นน้องหลายคนเขียน Ruby กันมาพักนึง (เพราะว่างานบางงานที่อาจจะต้องใช้ Rails) แต่ว่าพอลองตั้งโจทย์ที่มองไม่เห็นชัดว่าจะใช้ความสามารถของภาษาตรงไหน (ให้สร้าง permutation ของ list) น้องหลายคนก็ fall-back กลับไปเขียน C เหมือนเดิมไม่แปลกอะไร เพราะว่าจริงๆ แล้วผมเอง บางทีขนาดโปรแกรมง่ายๆ ก็ยังดื้อจะเขียน C++ กับ STL อยู่เลย ทั้งๆ ที่รู้อยู่แก่ใจว่า Ruby, Python, Haskell มันก็ทำได้ และจะง่ายกว่าด้วย แต่ว่าทำไมนะ ทำไมผมถึงยังจะดื้อที่จะ fall-back ไปเขียน C++ อยู่ดี?ความเคยชินบางอย่างมันแก้กันยาก อาจจะเป็นเพราะว่าผมใช้เวลาอยู่กับ C++ มานานกว่าภาษาอื่นๆ และทำงานจริงในภาษาตระกูล C มานานกว่าภาษาอื่นๆ หลายเท่าตัวก็ได้ (C, C++, Objective-C)เปล่าหรอกครับ ผมไม่ได้ถามเพื่อหาคำตอบใดๆ เพราะว่านี่คือธรรมชาติของมนุษย์ อะไรก็ตามที่เราทำจนเป็นนิสัย จนเป็น second nature แล้วมันอาจจะเปลี่ยนแปลงยากมาก หลายเรื่องเราเปลียนไม่ได้ เพราะว่าเรามีความรู้สึกว่า “เคยทำ” อะไรที่มันคล้ายๆ กันมาก่อนในลักษณะนั้นอยู่แล้ว (เช่นเวลาผมจะเขียนโปรแกรมง่ายๆ บางทีผมใช้ C++ โดยไม่มีเหตุผล ทั้งๆ ที่เขียน Ruby ง่ายกว่าเยอะ ส่วนหนึ่งเพราะว่าผม “เคยทำ” สิ่งนั้นมาแล้วใน C++ มั้ง)ผมเลยมีข้อสังเกตและข้อเสนอแนะให้น้องๆ ที่อยากจะเขียนโปรแกรมภาษาใหม่นะครับ ดังนี้

  1. เขียน code ภาษานั้นให้เยอะที่สุดและเร็วที่สุด โดยอย่าเอาแต่ลอก code จากหนังสือหรือว่า tutorial เพราะว่าคุณจะไม่ได้ใช้งานจริง และไม่ได้ force ให้ตัวเองคิดในลักษณะของภาษาใหม่ๆ เท่าไหร่
  2. เรียน standard library ของภาษานั้นๆ ให้มากที่สุดในเวลาที่น้อยที่สุด เพื่อให้รู้ว่ามันพอจะทำอะไรให้เราได้บ้าง โดยไม่ต้องลงอะไรเพิ่มเติม แล้วก็ลองดูว่ามันเอามาทำอะไรให้ชีวิตเราง่ายขึ้นได้บ้าง
  3. หักดิบ อย่าเล่นภาษาเดิมเท่าที่จะทำได้ ถ้าจำเป็นจริงๆ ก็ลองลบ compiler ภาษาเดิมทิ้งไปเลย
  4. อย่าเอาแต่เรียน syntax กับ library นะ เพราะว่าสิ่งที่สำคัญที่สุดสิ่งหนึ่งที่แทบทุกคนลืม ก็คือ การเรียน idiom ของภาษานั้นๆ ยิ่งหลายภาษา โดยเฉพาะพวกภาษาใหม่ๆ เป็นพวก expressionism ซะด้วยสิ แบบนี้ idiom ยิ่งสำคัญมากเข้าไปอีก
  5. ยิ่งถ้าเป็นการเรียนภาษาคนละ paradigm กับที่เคยเขียนนะ ยิ่งไปกันใหญ่ เพราะว่าลักษณะการเขียน วิธีคิด idioms ต่างๆ มันจะต่างกันมาก มากๆ ถึงมากที่สุด
  6. ยากนะ แต่ว่าหลายครั้งต้องคิดนอกกรอบเดิม ถ้าคิดตามกรอบเดิมล่ะก็ คุณก็จะไม่ได้เขียนภาษาใหม่หรอก แต่ว่าจะเขียนภาษาเดิมน่ะแหละ แต่ว่าอยู่ใน syntax ใหม่เท่านั้นเอง
  7. ทำงานจริง เพราะว่าทำงานจริงเท่านั้นที่จะบังคับให้เราต้องอยู่กับภาษาโปรแกรมภาษาใหม่และกระบวนการคิดของมัน ยิ่งทำงานจริงแบบมี deadline ด้วยแล้วล่ะก็ ยิ่งดี เพราะว่าเป็นการบังคับให้เรายิ่งต้องคิดและ figure out การทำงานต่างๆ และ idioms ของมันให้ได้เยอะที่สุด เพื่อประโยชน์สูงสุด และให้งานเสร็จเร็วที่สุด
  8. หา library เพื่อช่วยงานโน้นงานนี้เยอะๆ มีของเล่นเยอะๆ แล้วลองเล่นกับมัน เดี๋ยวก็ชินกับมันไปเองแหละ
  9. ดูภาษาอื่นๆ ใน paradigm เดียวกันบ้าง เพื่อหาข้อเปรียบเทียบหน่อยๆ ก็ดี
  10. ระลึกไว้ ว่าไม่ใช่ทุกภาษาเหมือนกัน สิ่งที่ผิดหลักการในภาษาหนึ่ง อาจจะเป็นสิ่งที่ถูกหลักการและควรทำในอีกภาษาหนึ่งก็เป็นได้ ดังนั้นอย่ายึดติดกับหลักการและข้อบังคับข้อกำหนดต่างๆ ของภาษาหนึ่งๆ มากไปนัก
  11. พยายามมองหาโอกาสใช้มันให้เยอะที่สุดเท่าที่จะทำได้ และอย่าเลี่ยงโอกาสในการใช้มันซะล่ะ

จริงๆ เรื่องนี้ยังเขียนได้อีกยาวมาก แต่ว่าวันนี้พอแค่นี้ก่อน ชักเหนื่อย แต่ขอปิดท้ายด้วย quote ดังจากคนดัง

Anyone could learn Lisp in one day, except that if they already knew Fortran, it would take three days.Marvin Minsky