วันพฤหัสบดีที่ 11 เมษายน พ.ศ. 2562

Ten Lessons I Learned While Teaching Meself to Code

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

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

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

ยุคนี้มีแหล่งเรียนรู้ออนไลน์มากมายซึ่ง 10 ปีก่อนแทบเป็นไปไม่ได้ แต่หลังจากที่คุณอ่านบทความผมแล้ว คุณเริ่มเรียนออนไลน์ได้ทันที
ตอนที่ผมหัดเรียนภาษา Javascript ครั้งแรก ผมเรียนที่เว็บไซต์ Codeacademy ซึ่งเป็นเว็บไซต์ที่เหมาะกับมือใหม่อย่างมาก เพราะมีบทเรียนสั้นๆ
หลังจากที่ผมเรียนจากเว็บไซต์นี้หลายอาทิตย์ ก็ได้อ่านบทความในเว็บชื่อ freeCodeCamp ซึ่งเป็นอีกเว็บหนึ่งที่เหมาะกับมือใหม่ โดยสอนภาษา Javascript ควบคู่กับ HTML และ CSS ซึ่งเป็นภาษาในการทำเว็บไซต์
ผมไม่ได้ยึดติดกับภาษาเดียว เมื่อผมทราบว่าภาษา Python ก็เหมาะกับมือใหม่เช่นกันและใช้ในการวิเคราะห์ข้อมูลซึ่งเป็นสิ่งที่ผมสนใจ แทนที่ผมจะเรียนจากออนไลน์อย่างเดียว ผมอ่านหนังสือชื่อ Learn Python The Hard Way ซึ่งมีคนยกย่องมาก รวมทั้งหนังสือเล่มอื่นๆ เช่น Crash Course in Python, Automate the Boring Stuff With Python, Eloquent JavaScript ซึ่งการอ่านหนังสือก็ยังเป็นประโยชน์ในการหัดเขียนโปรแกรม
แต่สิ่งหนึ่งที่คุณต้องระวังในการเรียนออนไลน์คือ คอร์สหรือบทเรียนส่วนใหญ่ที่บอกว่าเหมาะกับมือใหม่ แต่เมื่อคุณเรียนไปได้ซักครึ่งนึงแล้ว หลักสูตรเหล่านี้ก็คิดว่าคุณน่าจะรู้เรื่อง object หรือ IDE ทันที ซึ่งจะทำให้คุณหงุดหงิดมาก เพราะคุณไม่เคยทราบเรื่องเหล่านี้มาก่อน และคิดว่าเป็นความผิดของคุณที่ไม่เข้าใจ แต่ที่จริงแล้วมันไม่ใช่ ดังนั้นควรอ่านรีวิวก่อนตัดสินใจเรียน

2. อย่าซีเรียสเรื่องภาษาในตอนแรกมากนัก

อย่าซีเรียสเรื่องการเลือกภาษาที่ “สมบูรณ์แบบ” ในการเรียนรู้ เป้าหมายคุณในช่วงแรกคือคุ้นเคยกับหลักการพื้นฐานการเขียนโปรแกรมซึ่งคล้ายกันในทุกภาษา
Quincy Larson ผู้ก่อตั้ง freeCodeCamp บอกว่า ถ้าคุณเรียนรู้ภาษาหนึ่งแล้ว คุณก็เรียนรู้ภาษาอื่นได้ และการเลือกภาษาเริ่มต้นก็ไม่สำคัญมากอย่างที่คุณคิด คุณอาจเรียนภาษาที่เหมาะกับมือใหม่เช่น Python หรือ Javascript หรือ Ruby แล้วตั้งใจเรียน ซึ่งคุณเปลี่ยนใจ เลือกภาษาอื่นในตอนหลังก็ได้
เช่น ผมเองชอบภาษา Python แต่เนื่องจากว่า Javascript ก็มีประโยชน์ในการทำเครื่องมือของเว็บที่ใช้ผมนำไปใช้ได้ ผมจึงเรียนทั้งสองภาษา
อย่าไปเสียเวลาค้นในกูเกิลว่า “ฉันควรเรียนภาษาอะไร” เพราะมีการทะเลาะอย่างไม่มีวันสิ้นสุดว่าภาษาไหนดี ภาษาไหนห่วย ซึ่งไม่ใช่สิ่งที่คุณควรสนใจ
แต่มีข้อยกเว้นคือ ถ้าคุณต้องการเขียนโปรแกรมเป็น เพราะเบื่องานเต็มทีแล้วหรืออยากทำงานด้านโปรแกรมเมอร์ให้เร็วที่สุด ตอนนี้การเลือกภาษาจะเป็นเรื่องสำคัญ คุณต้องดูในพื้นที่คุณว่า มีความต้องการภาษาอะไร
ตัวอย่างเช่น คุณอาจได้ยินว่าตอนนี้ Javascript กำลังดัง จึงอยากหัดเขียน Javascript ให้เป็น แต่กลับกลายเป็นว่าไม่มีความต้องการโปรแกรมเมอร์ Javascript ในพื้นที่ของคุณเลย แต่ตลาดต้องการโปรแกรมเมอร์ที่รู้ .NET ซึ่งคุณไม่ได้เรียนรู้ภาษานี้

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

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

4. ทำชีวิตให้เป็นอัตโนมัติ

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

5. เตรียมพร้อมความกดดันหรือหงุดหงิด

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

6. สร้างโปรแกรมเยอะๆ เข้าไว้

เมื่อคุณเรียนการเขียนโปรแกรม คุณควรสร้างโปรแกรมที่ได้ใช้จริง
แน่นอนว่า บทเรียนขั้นพื้นฐานและหนังสือมีประโยชน์ แต่สิ่งที่จะทำให้คุณเขียนโปรแกรมเป็นคือการที่คุณสร้างซอฟต์แวร์ที่ทำบางอย่างได้ มันเหมือนกับความแตกต่างระหว่างการเรียนศัพท์ภาษาฝรั่งเศสจากตำรา แล้วไปสั่งอาหารจากภัตตาคาร
เมื่อผมพูดว่าสร้างสิ่งของ ผมไม่ได้หมายความว่า ให้คุณสร้าง Facebook หรือ Snapchat แต่หมายถึงบางสิ่งบางอย่างเล็กน้อยที่คุณได้ใช้จริงๆ หรือโชว์ให้คนอื่นได้
ตัวอย่างเช่นตอนที่ผมหัดเรียน Javascript กับ HTML ผมสร้างเว็บแอปตัวเล็กๆ ที่ทำเรื่องตลก เช่น แสดงชื่อโปเกม่อน
ตัวอย่างสุดโต่งของวิธีนี้ คือ นักออกแบบคนหนึ่งชื่อ Jen Dewalt ซึ่งไม่เคยเขียนโปรแกรมมาก่อน แต่เธอเริ่มหัดเรียนรู้การเขียนโปรแกรมด้วยตัวเองตอนอายุ 30 ดังนั้นเธอจึงฝึกทำเว็บไซต์เป็นเวลา 180 วัน
ในตอนแรก เป็นเพียงเพจง่ายๆ เช่นปุ่มกดที่เปลี่ยนสีพื้นหลัง แต่หลายอาทิตย์ต่อมา เธอเริ่มทำเกมหรือนาฬิกาที่แสดงเวลาเป็นข้อความได้ และในช่วงท้ายเธอก็เขียนโปรแกรมที่ซับซ้อน
เธอแนะนำว่า ให้เริ่มจากโครงการเล็กๆที่จับต้องได้ และเมื่อเธอต้องการสร้างบางอย่าง เธอจะใช้โค้ดของคนอื่นโดยไม่สนใจว่าเข้าใจหรือเปล่า ตราบใดที่มันทำงานได้
แต่เธอพิมพ์โค้ดด้วยตัวเอง แทนที่จะ copy และ paste ซึ่งอย่างน้อยก็ช่วยให้จำได้และมีเวลาคิด
ดังนั้น คำแนะนำสำคัญของเรื่องนี้คือ ยิ่งทำสิ่งของมากเท่าไหร่ คุณจะยิ่งเรียนรู้มากขึ้น โดยไม่ต้องทำอะไรใหญ่โต แต่ขอให้ทำสิ่งของเล็กน้อยที่จับต้องได้

7. ใช้โค้ดของคนอื่นให้เป็นประโยชน์

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

8. สร้างโปรแกรมที่คุณต้องการใช้เอง

เมื่อผมเขียนโปรแกรมเป็นมากขึ้น ผมก็รู้ว่า สามารถทำโปรแกรมเล็กๆ หลายตัวที่เป็นประโยชน์สำหรับผม
ตัวอย่างเช่น ผมอยากทำนาฬิกาโพโมโดโระ (Pomodoro) ของตัวเอง ซึ่งหลักการของโพโมโดโระคือ คุณทำงาน 25 นาทีหรือ 15 นาทีอย่างเต็มที่ โดยไม่วอกแวกกับเรื่องอื่น
แต่ผมเป็นคนวอกแวกง่าย ดังนั้นผมจึงต้องการนาฬิกาโพโมโดโระที่ทำงานแค่ 5 นาทีหรือแม้กระทั่ง 1 นาที
สำหรับผมแล้ว แค่ตั้งใจทำงาน 1 นาทีก็ถือว่าประสบความสำเร็จแล้ว แต่ยังไม่มีซอฟต์แวร์โพโมโดโระตัวไหนที่สร้างขึ้นมาสำหรับคนที่ผัดวันประกันพรุ่งมากๆ อย่างผม
ในที่สุด ผมตัดสินใจเขียนโปรแกรมด้วยตัวเองด้วยภาษา Python ที่ทำให้ผมระบุนาทีที่ผมต้องการได้ หรือแม้กระทั่งวินาที ! รวมทั้งมีข้อความหรือเสียงให้กำลังใจว่าทุกครั้งที่ทำเสร็จ
แม้ว่ามันเป็นซอฟต์แวร์ที่ประหลาดมาก แต่มันก็เป็นสิ่งที่ผมต้องการ เพราะคงไม่มีใครในโลกที่จะทำโปรแกรมแบบนี้ออกมา ผมจึงต้องทำด้วยตัวเอง ซึ่งผมก็ยังใช้อยู่ทุกวันนี้
ยิ่งผมเขียนโปรแกรมคล่องมากขึ้นเท่าไหร่ ผมก็ยิ่งพบว่า มีหลายอย่างที่ผมทำได้ด้วยตัวเองเพื่อทำให้ชีวิตง่ายขึ้น
ดังนั้น วิธีกระตุ้นตัวเองให้คุณหัดเรียนการเขียนโปรแกรมก็คือ การสร้างโปรแกรมเล็กๆที่ทำบางสิ่งบางอย่างที่คุณต้องการ

9. รู้จักวิธีการเรียน

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

10. รู้จักโปรแกรมเมอร์คนอื่น

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

ไม่มีความคิดเห็น: