บทเรียน 10 ข้อของการหัดเขียนโปรแกรมด้วยตนเอง

สิ่งที่คนเพิ่งหัดเขียนโปรแกรมควรทราบ

ภาพถ่ายโดย Christina Morillo จาก Pexels

ผมพบบทความเรื่อง Ten Lessons I Learned While Teaching Myself to Code จากอีเมลของคุณทิม เฟอร์ริส (Tim Ferris) ที่ผมสมัครเป็นสมาชิกจดหมายข่าว

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

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

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

หวังว่า เมื่ออ่านบทความนี้จบแล้ว คุณจะเปิดคอมพิวเตอร์ และเริ่มหัดเขียนโปรแกรมครับ

หนังสือ Coders ของคุณ Clive Thompson ผู้เขียนบทความนี้

คุณอยากเขียนโปรแกรมเป็นใช่ไหมครับ

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

คำตอบสั้น ๆ คือ แน่นอน คุณทำได้

คำตอบที่ยาวหน่อยคือ บทความนี้

เหตุผลที่ผมคิดว่า คุณทำได้ เพราะผมพบคนจำนวนมากที่ทำได้ ผมเป็นนักเขียนบทความด้านวิทยาศาสตร์ที่ใช้เวลาสามปีสัมภาษณ์โปรแกรมเมอร์ประมาณ 200 คนในการเขียนหนังสือ Coders: The Making of a New Tribe and the Remaking of the World คนจำนวนมากเรียนจบด้านคอมพิวเตอร์ แต่มีอีกหลายคนที่เรียนรู้ด้วยตนเอง เช่น ศิลปิน นักบัญชี นักเขียนบท นักการตลาด นักดนตรี ช่างไม้ ผู้ปกครองที่อยู่บ้าน หรืออาชีพอื่น ๆ แต่พวกเขาสนใจการเขียนโปรแกรม ทุ่มเทและเรียนรู้

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

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

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

­­คำตอบทั้งหมดคือ ใช่

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

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

นี่คือคำแนะนำครับ

ภาพถ่ายโดย Andrea Piacquadio จาก Pexels

1. โลกออนไลน์เป็นเพื่อนคุณ เริ่มต้นจากที่นี่

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

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

หลังจากที่เรียนมาหลายสัปดาห์ ผมอ่านบล็อกที่แนะนำ freeCodeCamp ซึ่งเป็นอีกเว็บหนึ่งสำหรับมือใหม่ และรวม JavaScript เข้ากับการเรียนรู้ HTML และ CSS ซึ่งเป็นภาษาทำเว็บเพจ ผมสลับไปมาระหว่างสองเว็บนี้ และพบว่าวิธีสอนเรื่องเดียวกันที่ต่างกันของทั้งสองเว็บช่วยให้พื้นฐานผมแน่นขึ้น

ผมไม่ยึดติดภาษาเดียว และทราบว่าภาษา Python เหมาะกับมือใหม่ เรียนง่ายกว่า JavaScript และใช้มากในการวิเคราะห์ข้อมูลซึ่งเป็นเรื่องที่ผมสนใจ แต่แทนที่ผมจะเรียนออนไลน์อย่างเดียว ผมใช้หนังสือหลายเล่ม เช่น Learn Python The Hard Way ของ เซ็ด ชอว์ (Zed Shaw) ที่โปรแกรมเมอร์หลายคนยกย่อง รวมทั้ง Crash Course in Python , Automate the Boring Stuff With Python และ Eloquent JavaScript ซึ่งมีประโยชน์ทั้งนั้น

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

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

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

ภาพถ่ายโดย Christina Morillo จาก Pexels

2. อย่าเพิ่งคิดมากว่าจะเรียนภาษาอะไร

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

ควินซี ลาร์สัน (Quincy Larson) ผู้ก่อตั้ง freeCodeCamp บอกว่า “ถ้าคุณเรียนภาษาหนึ่งได้ คุณก็เรียนภาษาอื่นได้ ภาษาแรกไม่สำคัญมากอย่างที่คุณคิด” เรียนภาษาที่เหมาะกับมือใหม่ เช่น Python , JavaScript , Ruby หรือ C# ของไมโครซอฟท์ คุณเปลี่ยนภาษาทีหลังได้หรือทำแบบผมคือ ลองเรียนหลายภาษาก่อน แล้วดูว่าภาษาไหนที่ “เข้า” กับวิธีคิดของคุณได้ดีกว่า (ผมชอบ Python เพราะดูดีกว่าในสายตาผม แต่ JavaScript มีประโยชน์มากกว่าในการสร้างเครื่องมือเว็บเพื่อใช้งาน ผมจึงใช้ทั้งสองภาษา) เมดิสัน คานนา (Madison Kanna) ซึ่งเรียนการเขียนโปรแกรมด้วยตนเองตอนอายุ 23 บอกว่า “เลิกมองหาคอร์สสอนเขียนโปรแกรมที่สมบูรณ์แบบ เลือกสักหนึ่งคอร์สแล้วทุ่มเท”

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

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

ซารอนบอกผมว่า “หางานที่คุณต้องการ จากนั้นถอดบทเรียนย้อนกลับ คนจำนวนมากบอกว่า JavaScript กำลังดัง จึงอยากเรียน JavaScript แล้วมารู้ทีหลังว่า ไม่มีตำแหน่งงานด้าน JavaScript เลยในบริเวณที่พวกเขาอยู่ แต่มาติดแหงกกับสังคมที่อยากให้พวกเขาเรียน .NET ของไมโครซอฟท์อย่างมาก แต่ไม่เคยเรียน .NET มาก่อน”

ภาพถ่ายโดย hitesh choudhary จาก Pexels

3. เขียนโปรแกรมทุกวัน

ข้อนี้สำคัญมาก คุณควรเขียนโปรแกรมทุกวัน อย่างน้อยครึ่งชั่วโมง

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

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

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

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

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

สมัยก่อนมีหนังสือตั้งชื่อทำนองว่า เรียน Java ใน 10 ชั่วโมง ซึ่งไร้สาระมาก ที่จริงแล้วควรเป็น “เรียนการเขียนโค้ดในสิบเดือน” (หรืออย่างที่โปรแกรมเมอร์ของกูเกิลชื่อ ปีเตอร์ นอร์วิก (Peter Norvig) เคยเขียนบทความเรื่อง Teach Yourself Programming in Ten Years) ผมใช้เวลาหลายเดือนกว่าจะเขียนสคริปต์สั้น ๆ และเครื่องมือเว็บที่เป็นประโยชน์ในงานผม

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

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

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

แต่การหาบูทแคมป์ที่ดีก็ไม่ง่าย เพราะยังไม่มีระเบียบเรื่องนี้ ในเมืองนิวยอร์คที่ผมอยู่ บูทแคมป์ที่ดีเช่น Flatiron (ซึ่งมีอีก 8 แห่งรวมทั้งฮุสตัน วอชิงตัน และแอตแลนตา) Grace Hopper (ซึ่งมีที่ชิคาโกด้วย) และ General Assembly (ซึ่งยังมีอีก 19 แห่งในอเมริกา เช่น ออสติน ซานฟรานซิสโก และบอสตัน) ในซานฟรานซิสโกยังมี Hack Reactor และ App Academy มันขึ้นกับแต่ละเมือง ดังนั้นคุณควรค้นหาในพื้นที่ของคุณ SwitchUp เป็นแหล่งที่ช่วยหาข้อมูลได้

ภาพถ่ายโดย Kampus Production จาก Pexels

4. เปลี่ยนชีวิตคุณให้เป็นอัตโนมัติ

เวลาที่มีคนคิดว่า “ฉันอยากเรียนการเขียนโค้ด” พวกเขานึกว่า ต้องสร้างผลิตภัณฑ์ เช่น แอปอย่างเฟซบุ๊ก กรับฮับ หรืออูเบอร์

แน่นอนว่า เป็นไปได้ แต่เหตุผลที่เป็นไปได้มากกว่าในทางปฏิบัติของการเขียนโค้ด ง่ายกว่านี้ ธรรมดากว่านี้ แต่ทรงพลังเหมือนกัน คือ คุณเปลี่ยนงานน่าเบื่อในชีวิตให้เป็นอัตโนมัติได้อย่างรวดเร็ว

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

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

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

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

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

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

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

โค้ดเดอร์ชื่อ เอริค ไดทริช (Erik Dietrich) เคยเขียนบทความเรื่อง Don’t learn to code, learn to automate บอกว่า เกือบทุกอาชีพในโลกที่ทำงานในสำนักงานต้องเกี่ยวข้องกับงานจำนวนมากที่ทำได้อย่างมีประสิทธิภาพมากขึ้น ถ้าคุณเขียนโค้ดเป็นบ้าง

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

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

ภาพถ่ายโดย Andrea Piacquadio จาก Pexels

5. เตรียมหงุดหงิดบ่อย ๆ

การเขียนโปรแกรมอาจทำให้อารมณ์เสียมาก

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

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

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

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

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

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

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

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

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

นี่คือเหตุผลว่า อย่ากลัวโปรแกรมของคนอื่นหรือโปรแกรมเมอร์ที่คุยโม้ใน Stack Overflow ว่า เรื่องนี้ชัดเจนมาก ไม่ต้องสนใจพวกเขา ทุกอย่างในการเขียนโค้ดจะยากตอนที่คุณทำครั้งแรก ลิเดีย ฮาลลี (Lydia Hallie) ผู้หญิงอายุ 21 ปีในสต็อกโฮล์มที่หัดเขียนโปรแกรมด้วยตนเองบอกว่า “อย่าเปรียบเทียบตัวคุณกับคนอื่น และอย่าเอาคำวิจารณ์ในออนไลน์เป็นเรื่องส่วนตัว การที่คุณเจออุปสรรคตอนหัดเขียนโค้ดด้วยตนเองเป็นเรื่องธรรมดามาก และอย่าพูดว่า คุณจะเป็นโปรแกรมเมอร์ที่เก่งกาจในตอนหลัง”

ภาพถ่ายโดย Anna Shvets จาก Pexels

6. สร้างผลงานให้มาก

เมื่อคุณเรียนการเขียนโค้ด คุณควรสร้างผลงานที่นำไปใช้ได้จริง

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

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

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

ตัวอย่างสุดโต่งของการ “สร้างผลงาน” คือ เจน ดีวอลต์ (Jen Dewalt) ในปี 2013 เธอเป็นเพียงนักออกแบบที่มีพื้นฐานด้านศิลปะแต่ไม่เคยเขียนโปรแกรมมาก่อน เมื่ออายุ 30 ปี เธอตัดสินเรียนการเขียนโปรแกรมด้วยตนเองด้วยการสร้างเว็บไซต์ทุกวัน เป็นเวลา 180 วัน

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

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

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

ภาพถ่ายโดย Zen Chung จาก Pexels

7. ดูต้นฉบับ ใช้โค้ดคนอื่น แยกส่วนและนำไปใช้ซ้ำ

ถ้าคุณอยากรู้ว่านาฬิกาทำงานอย่างไร คุณจะแยกชิ้นส่วนแล้วประกอบใหม่ ใช่ไหมครับ นี่คือวิธีทำงานของโปรแกรมเมอร์รุ่นบุกเบิกชื่อ เกรซ ฮอปเปอร์ (Grace Hopper) เธอเป็นเด็กอยากรู้อยากเห็นที่แยกชิ้นส่วนนาฬิกาหลายเรือน จนพ่อแม่เธอซื้อนาฬิกาหนึ่งเรือนให้เธอฝึกถอดและประกอบ

โค้ดก็เช่นเดียวกัน คุณไม่จำเป็นต้องเริ่มต้นจากศูนย์ตอนสร้างผลงาน แต่หยิบสิ่งที่มีอยู่แล้ว แยกชิ้นส่วน แล้วดูว่ามันทำงานอย่างไร นี่คือวิธีเรียนรู้อย่างยอดเยี่ยม

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

เมื่อผมเรียนวิธีการติดตั้ง Node ซึ่งเป็น JavaScript ที่ใช้ในเว็บเซิร์ฟเวอร์ ผมก็หัดใช้ Glitch มันเหมือนกับเซิร์ฟเวอร์ของ Codepen มีโครงการมากมายที่คุณนำไปใช้ ผสมผสานและทดลอง ผมอยากสร้างทวิตเตอร์บอทที่สร้างบทกวีไฮกุได้โดยอัตโนมัติ ผมจึงหยิบโค้ดทวิตเตอร์บอทที่มีอยู่แล้วใน Glitch แล้วเริ่มดัดแปลงโปรแกรม

ตอนนี้ ผมเข้าใจ JavaScript มากพอที่จะทราบว่าส่วนไหนในทวิตเตอร์บอทที่ต้องเขียนใหม่ ใส่ฟังก์ชันของตัวเองที่มีบทกวีไฮกุ 1,000 บรรทัด เลือกบทกวีสามบทอย่างสุ่ม แล้วแสดงทางทวิตเตอร์ นี่เป็นวิธีที่ยอดเยี่ยมในการเริ่มต้น เพราะถ้าผมเริ่มจากศูนย์ ก็ไม่มีทางทำได้

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

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

ภาพถ่ายโดย Helena Lopes จาก Pexels

8. สร้างผลงานของคุณ โค้ดที่คุณอยากได้

เมื่อผมเรียนการเขียนโปรแกรมมากขึ้น ผมก็สร้างซอฟต์แวร์เล็ก ๆ จำนวนมากที่เป็นประโยชน์ต่อตนเอง

ตัวอย่างสนุก ๆ เช่น ผมสร้างตัวจับเวลาโพโมโดโรของตัวเอง คุณอาจเคยได้ยินคำว่า “โพโมโดโร (Pomodoro)” ที่ตั้งเวลา 25 หรือ 15 นาที แล้วทำงานแบบโฟกัสเต็มที่ ไม่เช็คอีเมลหรือวอกแวก จนกว่าหมดเวลา จากนั้นหยุดพักสั้น ๆ มันเป็นแนวคิดที่เจ๋งมาก ผมใช้ตัวจับเวลาโพโมโดโรออนไลน์หลายแบบ แต่ทุกแบบมีปัญหาเหมือนกันคือ มันบังคับให้เลือก 15 หรือ 25 นาที

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

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

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

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

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

อย่างไรก็ตาม คุณไม่จำเป็นต้องเขียนโปรแกรมที่มีประโยชน์เสมอไป ผมชอบใช้ P5.js (เป็นไลบราลีของ JavaScript) เพื่อสร้างงานศิลปะแบบอินเตอร์แอคทีฟที่เป็นความงามหรือความสนุก

แดเนียล ชิฟฟ์แมน (Daniel Shiffman) ซึ่งเป็นศาสตราจารย์ที่ Interactive Telecommunications Progam ของ New York University และสร้างวิดีโอ learn-to-code (รวมทั้ง P5.js ที่ผมเรียน) กล่าวว่า มันเป็นแรงจูงใจที่ดีพอในการหัดเขียนโปรแกรมเช่นกัน และวิธีหนึ่งในการเขียนโค้ดคือ นำศิลปะที่คุณชอบ เช่น ดนตรี ภาพวาด เกม ปริศนา แล้วเขียนโปรแกรมที่ใช้ในงานของคุณ

เขาบอกว่า “มันมีประโยชน์ในการหัดเขียนโปรแกรมเพื่อประยุกต์กับสิ่งที่คุณชอบอยู่แล้ว” ถ้าคุณชอบดนตรี ลองเรียน Sonic Pi เพื่อสร้างทำนองเพลง ถ้าชอบศิลปะ ก็ลองหัดใช้ P5.j หรือภาษา Processing ถ้าชอบเกม ก็ลองทำด้วย Phaser ซึ่งอิง JavaScript

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

ภาพถ่ายโดย Andrea Piacquadio จาก Pexels

9. ศึกษาวิธีเรียนรู้

ระหว่างค้นคว้าเพื่อเขียนหนังสือของผม ผมเยี่ยมโปรแกรมเมอร์ที่สร้างบริษัท Y Combinator ซึ่งเพิ่งเริ่มระดมทุน ผมถามเขาว่า “ความลับของการเป็นโค้ดเดอร์ที่ดีคืออะไรครับ”

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

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

ไชเฟอร์จาก Glitch บอกว่า “ดิฉันเรียกตัวเองว่าเป็นผู้เชี่ยวชาญ JavaScript แต่ไม่เคยจำฟังก์ชันจัดการข้อความสักอย่างเลย เพราะหาเมื่อไรก็ได้”

(ผมเบาใจขึ้นเยอะตอนได้ยินเธอพูด เพราะตอนที่ผมเขียน JavaScript และอยากทราบความยาวของข้อความ เช่น Clive Thompson มีกี่ตัวอักษร ผมต้องค้นหาทุกครั้งเช่นกัน)

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

ภาพถ่ายโดย fauxels จาก Pexels

10. ติดต่อโค้ดเดอร์คนอื่น

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

เกือบทุกคนที่ผมทราบว่าหัดเขียนโปรแกรมด้วยตนเองจะมีสังคมของคนเขียนโปรแกรม ลาร์สันแห่ง freeCodeCamp บอกว่า “รู้จักโค้ดเดอร์คนอื่นบ้าง ไปงานประชุมและแฮคกาธอน คลุกคลีสตาร์ทอัพและแฮคเกอร์สเปซ มันช่วยให้คุณได้ความสัมพันธ์ที่มีคุณค่าและมีแรงกระตุ้นในการหัดเขียนโปรแกรมระยะยาว”

ถ้าคุณอยู่ในสถานที่ห่างไกลหรือไม่สะดวกที่จะพบกันซึ่งหน้า ก็ติดต่อทางออนไลน์ ทั้ง freeCodeCamp และ Glitch มีกลุ่มที่กระตือรือร้น และ CodeNewbie ก็มีทุกอย่างตั้งแต่ Slack forum จนถึงแชตทวิตเตอร์ที่มือใหม่คุยและติดต่อกัน

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

เชิญสมัครเป็นสมาชิกจดหมายข่าว ไฟฉาย ของผมที่จะส่องไอเดียน่าสนใจทุกวันที่ 1 และวันที่ 15 ของทุกเดือน เช่น แอป คอร์สออนไลน์ หนังสือ วิดีโอ บทความ เป็นต้น

สมัครเพื่ออ่านทางอีเมลได้อย่างสะดวกสบายได้ที่

thongchairoj.substack.com

--

--

ธงชัย โรจน์กังสดาล

ผู้สอนวิชาเลือกสุดฮิตของจุฬาฯ Innovative Thinking และ คอร์สออนไลน์ CHULA MOOC ปลุกพลังความคิดสร้างสรรค์