- การศึกษาแบบทางการ มีประโยชน์ต่อการถ่ายทอดทักษะอย่างมีประสิทธิภาพ แต่มีข้อจำกัดในการพัฒนา สัญชาตญาณ สำหรับการแก้ปัญหาที่ไม่คาดคิด
- การลองผิดลองถูกซ้ำ ๆ อย่างมีเป้าหมาย (อัลกอริทึม) คือปัจจัยที่ช่วยยกระดับความชำนาญได้มากที่สุด ผ่านกระบวนการล้มเหลวและแก้ไขในการลงมือจริง
- ใน ตัวอย่างจริง บุคคลหลากหลายอย่าง Linus Torvalds, Margaret Hamilton เป็นต้น ต่างผ่านความล้มเหลวและเอาชนะมันจนมีความสามารถโดดเด่น
- การมีเมนเทอร์ เป็นตัวเร่งที่สำคัญ แต่การทดลองด้วยตนเองและประสบการณ์ตรงคือหัวใจของการเติบโตในท้ายที่สุด
- การทดลองที่มุ่งเป้าหมาย โดยลงมือแก้ปัญหาด้วยตัวเองผ่านการปะทะและพังจริง คือรากฐานของการพัฒนาฝีมืออย่างแท้จริง
พลังที่สร้างสุดยอดวิศวกรซอฟต์แวร์: การลองผิดลองถูกอย่างมีเป้าหมาย
มายาคติของห้องเรียน
- การศึกษาแบบทางการ เหมาะกับการถ่ายทอดความรู้ที่มีคุณค่า แต่เป็นกระบวนการที่ถูกปรับให้เหมาะกับการสอนในวงกว้าง
- ประสบการณ์การทำงานจริงที่ซับซ้อนถูกกลั่นเป็นขั้นตอนที่เป็นระเบียบ และถ่ายทอดในรูปแบบที่เรียนจบได้ภายในหนึ่งภาคการศึกษา
- ในกระบวนการนี้ เราอาจเรียนรู้ ทักษะพื้นฐาน ที่จำเป็นต่องานได้ แต่ยังมีข้อจำกัดในการสร้างความสามารถในการแก้ปัญหาเชิงสัญชาตญาณเมื่อเจอวิกฤตที่ไม่คาดคิด
- โดยเฉพาะตอนตี 3 ที่บริการจริงเกิดปัญหา สูตรสำเร็จ ที่เรียนมาจากห้องเรียนเพียงอย่างเดียวมักไม่พอสำหรับการแก้ไข
การเติบโตที่แท้จริงจากการลงมือเผชิญเอง
ตัวอย่างต้นแบบ
- Linus Torvalds สร้าง Linux จากการเขียน MINIX ใหม่
- Margaret Hamilton สร้างแนวคิดด้านความเชื่อถือได้สมัยใหม่จากการลงมือแก้ปัญหาโค้ดแบบเรียลไทม์ในโครงการ Apollo
- ผู้ดูแลโอเพนซอร์ส จำนวนมากก็เติบโตจากการทำเครื่องของตัวเองพัง แล้วซ่อมกลับมาด้วยตัวเอง
- คนเหล่านี้ไม่ได้เริ่มจากการเรียน บทบรรยายแบบเป็นลำดับ ก่อน แต่ได้ทักษะอันลึกซึ้งจากความล้มเหลวและผลกระทบจริงที่ตามมา
ทำไมการลองผิดลองถูกจึงเหนือกว่าสูตรสำเร็จ
- วงจรป้อนกลับ เกิดขึ้นทันที การวิเคราะห์แครชจากล็อกทำให้เรียนรู้ได้เร็วกว่าควิซมาก
- กรณีขอบ จะปรากฏขึ้นเองตามธรรมชาติในสภาพแวดล้อมจริง และทำให้เจอกรณีใช้งานที่ตำราไม่อาจคาดถึง
- ปัญหาที่แก้ได้อย่างยากลำบากจะ ติดอยู่ในความทรงจำอย่างลึกซึ้ง จนกลายเป็นความจำของกล้ามเนื้อ
- เมื่อไม่มีคู่มือเดิมให้ยึดตาม ความคิดสร้างสรรค์ จะถูกดึงออกมาอย่างเต็มที่
มองเมนเทอร์ชิปใหม่: เป็นตัวเสริม ไม่ใช่สิ่งทดแทน
- เมนเทอร์ ที่ดีช่วยให้ฟีดแบ็กได้รวดเร็วและเปิดมุมมองให้กว้างขึ้น แต่สุดท้ายคนที่ต้องทดลองและเก็บประสบการณ์ก็คือตัวเราเอง
- การรีวิวโค้ดมีคุณค่าเพราะเป็นการ แบ่งปันผลลัพธ์ของการทดลอง แต่ไม่สามารถทดแทนประสบการณ์ตรงได้
สร้างนิสัยการทดลองด้วยตนเอง
- ลองทำ โปรเจกต์ด้านข้าง ที่ทำให้ตัวเองรู้สึกไม่สบายใจเล็กน้อย
- วัดทุกอย่างให้ได้ เพื่อให้มี ข้อมูลที่วิเคราะห์ได้ เมื่อเกิดความล้มเหลว
- ตั้ง ข้อจำกัด เช่น ห้ามใช้เฟรมเวิร์ก หรือทำให้เสร็จภายใน 48 ชั่วโมง เพื่อฝึกความสามารถในการแก้ปัญหาอย่างสร้างสรรค์
- เปิดเผยโค้ดต่อสาธารณะเพื่อรับ การตรวจสอบจากภายนอก
- ทำ บันทึกทบทวนย้อนหลัง รายสัปดาห์ เพื่อจดสาเหตุของความล้มเหลวและสิ่งที่ได้เรียนรู้
สรุป
- เมนเทอร์ชิป คอร์ส บล็อก และสิ่งอื่น ๆ เป็นเพียงตัวเร่ง แต่ ฝีมือที่แท้จริงถูกสร้างขึ้นจากกระบวนการปะทะอย่างหนักในสนามจริง
- วิศวกรที่ดีที่สุดเติบโตจากการทำ การลองผิดลองถูกอย่างมีเป้าหมาย ซ้ำแล้วซ้ำเล่า จนเกิดการแก้ปัญหาจริงและการพัฒนาตัวเอง
- ประสบการณ์ที่ได้จากกระบวนการนี้จะกลายเป็น ทรัพย์สินที่สำคัญที่สุดสำหรับตัวเราในอนาคต
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ตัวผมเองเป็นนักพัฒนาแบบเรียนรู้ด้วยตัวเอง และใช้เวลาส่วนใหญ่ของอาชีพทำงานในบริษัทใหญ่ร่วมกับเพื่อนร่วมงานที่จบ CS
จากประสบการณ์ของผม นักพัฒนาแบบเรียนรู้ด้วยตัวเอง ถ้าฉลาดพอ สุดท้ายก็จะแก้ปัญหาที่อยู่ตรงหน้าได้
คนที่จบ CS มักมีหลายคนที่ไม่แม้แต่จะลองเมื่อเจอพื้นที่ที่ไม่คุ้นเคยเลยด้วยซ้ำ (แน่นอนว่านี่ต่างกันไปตามนิสัย ผมคิดว่าประมาณ 85%)
เมื่อเจอกับความไม่แน่นอนสูง พวกเขามักไปต่อไม่ได้
สุดท้ายแล้วคนจบ CS เหมาะกับสภาพแวดล้อมแบบบริษัทใหญ่มากกว่า ทำงานตามแพตเทิร์นเหมือนเฟืองที่เปลี่ยนแทนกันได้
ส่วนนักพัฒนาแบบเรียนรู้ด้วยตัวเองมักพยายามสร้างนวัตกรรมอยู่เสมอ ทำงานเพื่อลดการทำซ้ำที่ไร้ประสิทธิภาพ และท่าทีที่มีความคิดริเริ่มแบบนี้ก็ทำให้คนรอบข้างรู้สึกไม่สบายใจ
แต่คนที่เรียนรู้แบบนี้กลับสร้างผลลัพธ์ที่ดีกว่ามาก
ดูเหมือนนักพัฒนาส่วนใหญ่จะให้ความสำคัญกับการรักษางานและลดความกังวล มากกว่าการเขียนโค้ดที่ยอดเยี่ยมจริง ๆ
วิศวกรที่ผ่านการศึกษาอย่างเป็นทางการจำนวนมากก็พยายามแก้ปัญหาใหม่ ๆ อย่างกระตือรือร้นเหมือนกัน
ประเด็นนี้น่าจะไม่ใช่เรื่องเรียนเอง/เรียนทางการ แต่เป็นเรื่องนิสัย เช่น ความอยากรู้อยากเห็น ความขยัน ความคิดสร้างสรรค์ และสติปัญญามากกว่า
คนเรียนเองจำเป็นต้องมีคุณสมบัติเหล่านี้ถึงจะประสบความสำเร็จได้ จึงอาจทำให้ลักษณะนี้เด่นชัดกว่าในกลุ่มนั้น
และเมื่อวิศวกรที่เรียนทางการมีคุณสมบัติเหล่านี้ด้วย ก็มักจะเก่งเหนือกว่าทั้งสองกลุ่มเสียอีก
คิดว่าความต่างด้านบุคลิกน่าจะเป็นปัจจัยใหญ่ที่สุด
สำหรับนักพัฒนาเรียนเองแบบผม สิ่งที่ขายได้คือความขยัน
ผมอาจไม่ได้เห็น 'ภาพใหญ่' ทางเทคนิคได้เก่งนัก แต่ผมพยายามเป็นคนที่ส่งผลงานได้มากที่สุดในทีม
ผมทำโปรโตไทป์ได้ถึงสามแบบภายในไม่กี่วันแล้วเอาไปทดสอบจริง
ส่วนเพื่อนร่วมงานสาย CS จะออกแบบบนไวต์บอร์ดครั้งเดียว แล้วเขียนโค้ดจริงครั้งเดียว
สองแนวทางนี้ไม่เคยถูกลองกับงานเดียวกันตรง ๆ เลยบอกยากว่าแบบไหนให้ผลดีกว่า
แต่ในหัวผม วิธีของผมรู้สึกว่าเป็นวิธีที่ 'ผ่านการทดสอบภาคสนาม'
ยอมรับว่าวิธีแบบ CS ถูกมองว่าเป็นอุดมคติ
แต่ผมก็คิดว่าตัวเองได้เรียนรู้อะไรมากมายจากการได้รับคำแนะนำจากวิศวกรจบ CS
พอมีประสบการณ์ในวงการสัก 10 ปี ไม่ว่าจุดเริ่มต้นจะเป็นแบบไหน ท้ายที่สุดก็เริ่มคล้ายกัน และสัญชาตญาณต่อ 'คำตอบที่ถูก' ก็เริ่มใกล้เคียงกัน
ผมอาจแต่งเติมหรือเหมารวมไปบ้าง และหวังว่าคนอื่นจะมาตอบเสริม
เห็นด้วยบางส่วน
หลักสูตร CS ส่วนใหญ่ค่อนข้างห่างไกลจากงานจริง ดังนั้นปริญญาจึงไม่ใช่ตัวชี้วัดความสามารถแบบทันทีทันใด
แต่ผมไม่เห็นด้วยอย่างแรงกับการบอกว่า 85% ของบัณฑิต CS แก้ปัญหาที่ไม่คุ้นเคยไม่ได้
ถ้าจะพูดถึงข้อดีของปริญญา CS ก็คือสายวิศวกรรมมีวิชาที่ยากมากและต้องใช้ศักยภาพทางปัญญาสูงอยู่เยอะมาก
คนที่ผ่านวิชาเหล่านั้นมาได้ ผมว่ามันยากจะเชื่อว่ากลับทำงานพัฒนาในโลกจริงไม่ได้
ถ้าไปดูสายงานพัฒนาที่ยากจริง ๆ กลับจะพบว่าหลายคนมีวุฒิขั้นสูงด้าน CS
ถ้ามีความสนใจในซอฟต์แวร์อย่างลึกซึ้ง คุณลักษณะแบบนี้ก็มักจะเกิดขึ้นได้ และในนั้นก็มีคนจบ CS อยู่มากเหมือนกัน
จากประสบการณ์ของผม คนเรียนเองจะถูกคัดกรองโดยธรรมชาติ
คือถ้าคนเรียนเองแก้ปัญหาที่ไม่คุ้นเคยไม่ได้ ก็จะไม่ได้งานตั้งแต่แรก
คนที่มาจากการศึกษาแบบปกติมักอยู่ในระดับกลาง ๆ หรือดีกว่านั้น แต่ไม่ได้โดดเด่นถล่มทลาย
ส่วนคนที่ทั้งหาความรู้ทุกอย่างด้วยตัวเองได้ และยังผ่านการพิสูจน์จากการศึกษาในมหาวิทยาลัยมาแล้ว จะมีพลังในการทำงานจริงที่แข็งแกร่งมาก
แก่นจริง ๆ คือ 'ความหลงใหล' มากกว่าวิธีเรียน
ถ้าแรงจูงใจอ่อน ไม่ว่าจะเรียนแบบไหนก็มีข้อจำกัดชัดเจน
หัวข้อนี้ยังมีด้านที่คุยเชิงตัวเลขได้ยากด้วย
การศึกษาแบบทางการช่วยสร้างพื้นฐานด้านแนวคิดสำคัญ (คณิตศาสตร์ ฮาร์ดแวร์ OS คอมไพเลอร์ ฯลฯ) ได้แน่น
การเรียนเองมักขับเคลื่อนด้วยเป้าหมาย จึงอาจมองข้ามพื้นฐานบางอย่างไป
เวลาที่เราไม่รู้ด้วยซ้ำว่าเราไม่รู้อะไร การมีเมนเทอร์ที่ดี (อาจารย์ หนังสือดี ๆ) จะช่วยประหยัดเวลาได้มหาศาล
วิศวกรจำนวนมากรวมถึงผมเองต่างก็ผ่านทั้งการเรียนแบบทางการและไม่ทางการ
ถ้ามีความหลงใหล คุณก็จะลงมือสร้างของเองต่อไปเรื่อย ๆ และทดลองอะไรต่าง ๆ นอกเหนือจากการเรียนในระบบ
สิ่งที่แยกวิศวกรที่ยอดเยี่ยมจริง ๆ ออกจากคนอื่น ไม่ใช่วิธีการศึกษา แต่เป็นความหลงใหลที่ชัดเจน
ตัวอย่างอย่าง Linus หรือ Margaret ก็ล้วนเป็นคนที่มีแรงใฝ่รู้มหาศาลทั้งนั้น
ในฐานะโปรแกรมเมอร์เรียนเอง ผมเห็นด้วยอย่างยิ่ง
ผมเริ่มเรียนเองมาตั้งแต่ยุคคอมพิวเตอร์ 8 บิตในยุค 80 และไม่เคยเข้ามหาวิทยาลัย
ตอนอายุ 19 ที่ได้งานเขียนโปรแกรมประจำงานแรก ผมเขียนโปรแกรมมาแล้ว 9 ปี
พอคนส่วนใหญ่เรียนจบมหาวิทยาลัย ผมเขียนโค้ดมาเกือบ 15 ปีแล้ว
ความหลงใหลและแรงผลักดันแบบนั้นมันยากจะมองข้าม
ตอนนี้ผ่านมาเกือบ 40 ปี ผมก็ยังสนุกกับซอฟต์แวร์ด้วยความรู้สึกแบบเดิม
ผมสนุกกับการสร้างของ อ่านงานวิจัย ติดตามความเคลื่อนไหวในวงการ และยังเขียนโค้ดเยอะมากอยู่ดี
แต่ผมก็รู้สึกเสียดายนิดหน่อยกับมุมมองที่เหมารวมว่าคนเรียนเองไม่มีพื้นฐาน
จริง ๆ แล้วคนเรียนเองหลายคนก็สนใจเจาะด้านวิชาการลึกพอสมควร—ขึ้นอยู่กับสาขาด้วย
เวลาอาจไม่พอสำหรับการเรียนแบบลงลึกเป็นระบบ แต่เมื่อสะสมประสบการณ์มาหลายสิบปี บางครั้งพื้นฐานกลับแน่นกว่าคนที่แค่เรียนในโรงเรียนเสียอีก
ผมก็เคยทั้งจ้างและเลิกจ้างคนมาเยอะ และบ่อยครั้งคนเรียนเองให้ผลลัพธ์ได้ดีกว่า
สุดท้ายคือพวกเขา 'ลงมือทำ' มามากกว่ามาก—ความหลงใหลผลักปริมาณการเรียนรู้ให้สูงขึ้น
ส่วนที่ว่า "เวลาที่ไม่รู้ด้วยซ้ำว่าเราไม่รู้อะไร การมีคนคอยชี้นำอย่างมีประสิทธิภาพช่วยได้มาก" นี่เห็นด้วยมาก
ผมเป็นเคสกึ่งกลางระหว่างทางการ/ไม่ทางการ
ผมไม่ได้เรียน discrete math ขั้นสูงหรือ linear algebra จึงมีช่องว่างด้านความรู้พื้นหลังเยอะ
ผมไม่รู้ด้วยซ้ำว่าควรค้นหาคีย์เวิร์ดอะไร
บางสาขาจำเป็นต้องมีคนช่วยชี้ทางจริง ๆ
ตอนอายุปลาย 30 การหาติวเตอร์มาช่วยตรวจความถูกต้องของโปรแกรมคณิตศาสตร์เวกเตอร์ให้ยังยากมากจริง ๆ
ความหลงใหลเป็นตัวผลักให้เรียนเองได้ แต่ในสภาพแวดล้อมห้องเรียนอาจต้องการน้อยกว่า เพราะมีคนคอยพาไปตามเส้นทางอยู่เสมอ
และนอกจากการเรียนเองแบบมุ่งเป้าหมายแล้ว ก็ยังมีคนเรียนเองที่มีเป้าหมายเพื่อเข้าใจหลักการทำงานของระบบเองด้วย
ต่อให้มีคนบังคับพาไปถึงแหล่งน้ำ ก็ไม่ได้แปลว่าไม่เคยไปถึงแหล่งน้ำนั้นด้วยตัวเอง
ความต่างที่สม่ำเสมอคือ คนเรียนเองทุกคนอย่างน้อยเคยพาตัวเองไปถึงแหล่งน้ำด้วยกำลังตัวเองมาแล้วครั้งหนึ่ง
ผมเป็นสายผสมระหว่างเรียนทางการกับเรียนเอง
ผมลงเรียนมหาวิทยาลัยมาหลายวิชา แต่สอบไม่เก่งพอจะเอาปริญญามาได้
ที่ผมไปเรียนส่วนที่เหลือเองต่อได้ ก็เพราะวิชาเหล่านั้นช่วยปูพื้นฐานไว้ให้แล้ว
ผมมองว่าวิชาในมหาวิทยาลัยยอดเยี่ยมมาก
ถ้าตอนยังไม่รู้อะไรเลย ผมคงไม่มีวันไปขุด C socket API, โปรเจ็กต์ bash, distributed systems, data structures หรือ algorithms ด้วยตัวเองแน่
ที่จริงผมสัมภาษณ์ทั้งคนเรียนเองและคนจบ bootcamp มาเยอะ และคนกลุ่มนี้มักขุดเฉพาะสิ่งที่ตัวเองคุ้น หรือพอเจอคำถามเชิงวิชาการก็มักไปไม่เป็นง่าย ๆ
ในทางกลับกัน คนที่อยู่มหาวิทยาลัยแต่ไม่เคยเขียนโค้ดจริงจังก็ฝีมืออ่อนมาก และแม้กำลังเรียนอยู่ก็ยังลืมสิ่งที่เคยเรียนมาก่อนหมด
ผมคิดว่าสูตรที่ดีที่สุดคือได้เขียนโค้ดมาบ้างก่อนเข้ามหาวิทยาลัย
ต้องเคยชนปัญหาด้วยตัวเองก่อน ถึงจะทำให้วิธีแก้เชิงทฤษฎีที่สวยงามซึ่งอาจารย์สอน กลายเป็นของตัวเองจริง ๆ
ยิ่งเคยโดนปัญหาจากความผิดพลาดเรื่องการจัดการหน่วยความจำแบบ RAII เล่นงานมากเท่าไร ก็ยิ่งเข้าถึงแนวคิดแบบนี้ได้ลึกขึ้น
ต้องแยกคนจบ bootcamp ออกจากคนเรียนเอง
ใน bootcamp ก็อาจมีคนเก่งได้ แต่คนที่ผมรู้จักหลายคนเลือก bootcamp เพราะเรียนเองไม่ไหวและกำลังจะไปมหาวิทยาลัยหรือเปลี่ยนสาย แล้ว bootcamp เป็นทางเลือกที่ถูกกว่า
เมื่อก่อนยังไม่มี bootcamp และผมก็ไม่ได้สนใจคอร์สออนไลน์หรือวิธีเรียนแบบดั้งเดิม
ผมอยากสร้างอะไรเท่ ๆ และรู้สึกว่าการแก้ปัญหาอย่างอิสระน่าตื่นเต้นกว่าการทำตามตำราแล้วลองใหม่
ตอนเด็กที่ผมเรียน C ด้วยตัวเอง ก็เพราะมีสิ่งที่ทำไม่ได้ด้วยข้อมูลหรือโค้ดที่มีอยู่แล้ว และผมอยากได้ผลลัพธ์เจ๋ง ๆ มากจนไม่มีทางเลือกนอกจากไปรื้อฟอรัม อ่านเอกสาร แล้วลองผิดลองถูกเอาเอง
ผมคิดว่าความอยากเรียนรู้อย่างแรงกล้าสำคัญกว่าวิธีเรียนเสียอีก
ก่อนเข้ามหาวิทยาลัย ผมใช้ C และ socket API คล่องอยู่แล้ว และเคยมีประสบการณ์ส่งมอบซอฟต์แวร์ด้วย
ผมมีเพื่อนคนหนึ่งที่หาเงินจากการขายเกมให้ C64 ตั้งแต่สมัยมัธยม
เราสองคนมีทักษะการเขียนโค้ดจริงเหนือกว่าพนักงานใหม่ทั่วไปมาก
สิ่งที่ผมขาดคือฝั่งทฤษฎี เช่น calculus, linear algebra, discrete math และบางช่วงก็มีเรื่อง data structures กับ algorithms ที่ยังไม่รู้
โปรแกรม CS ช่วยอุดช่องโหว่พวกนั้นได้ แต่ไม่ได้ทำให้ผมเขียนโค้ดเก่งขึ้น
วิชาที่เกี่ยวกับการเขียนโปรแกรมไม่ได้ยากสำหรับผมเลย สิ่งที่ยากกลับเป็นคณิตศาสตร์และวิชาทฤษฎี
โปรแกรม CS ทำให้ผมเป็นวิศวกรที่สมดุลขึ้น แต่ไม่ได้ทำให้ผมเป็นนักพัฒนาที่ดีกว่าเดิม
สมัยเรียนมหาวิทยาลัย บรรยากาศในภาควิชา CS ตรงข้ามกับข้อดีของมหาวิทยาลัยที่คนสมัยนี้ชอบพูดถึงแทบทุกอย่าง
ผมเองก็ไม่เลือกเรียนเอก CS ด้วยเหตุผลเหล่านี้ (ตอนนี้เป็น senior developer ในบริษัทเทคสหรัฐฯ) และในตอนนั้น CS แม้อยู่ในมหาวิทยาลัยชั้นนำที่รับแต่คนเกรดสูง ก็ยังมีทั้งอัตราตก อัตราว่างงาน และบรรยากาศจากอาจารย์ที่แย่มาก
แน่นอนว่ามีคนจำนวนมากที่ได้ประโยชน์จากมหาวิทยาลัย แต่ความจริงไม่ได้เป็นแบบนั้นทุกที่
บัณฑิต CS จำนวนมากที่ผมเจอในงานจริงมีปัญหาเรื่องการสื่อสาร ความเข้าใจธุรกิจ และการจัดลำดับความสำคัญของงาน
หลายคนเขียนโค้ดได้อย่างเดียวด้วยซ้ำ (และบางทีก็ยังเขียนได้ไม่ดี) และมีไม่กี่คนจริง ๆ ที่พร้อมสำหรับงานจริงอย่างสมบูรณ์เพียงเพราะเรียน CS ในมหาวิทยาลัย
ในทางกลับกัน ผมคิดว่าวิธีสอนแบบมหาวิทยาลัยต่างหากที่เป็นตัวอย่างคลาสสิกของการอยู่ใน ‘comfort zone’
ต้องยอมรับด้วยว่าการเข้าถึงค่าเล่าเรียนและค่าใช้จ่ายของมหาวิทยาลัยเป็นเรื่องชนชั้นทางสังคมและเศรษฐกิจ
และก็มีคนเรียนเองที่ไปไกลถึงระดับ C socket API หรือโปรเจ็กต์ bash ด้วยตัวเองเหมือนกัน
อีกอย่าง คนเรียนเองกับคนจบ bootcamp เป็นคนละกลุ่มกันโดยสิ้นเชิง
ผมอาจพังในสถานการณ์ที่ถูกกำหนดให้แสดงความสามารถ เช่นการสัมภาษณ์แบบออดิชัน แต่ตอนอยู่คนเดียวผมแก้ปัญหาจริงได้ดี
อาจฟังดูแก่ ๆ หน่อย แต่ผมเองก็เป็นคนรุ่นที่มหาวิทยาลัยสมัยก่อนดีมากจริง ๆ
ผมเคยทำทั้งคอมไพเลอร์ toy OS และอินเทอร์เฟซ GPS
เมื่อไม่กี่ปีก่อนผมถูกเชิญไปสอนเป็นอาจารย์ที่อีกมหาวิทยาลัยหนึ่ง แล้วรู้สึกผิดหวังมาก
หลักสูตรมันเหมือนยืด bootcamp สมัยนี้ให้ยาวเป็นหลายปี แล้วเอาวิชาที่ไม่ค่อยเกี่ยวกันมาพอกเพิ่ม
พื้นฐานแทบไม่มี และนอกจากวิชา algorithms แล้วแทบทั้งหมดเป็น React กับเฟรมเวิร์กที่สตาร์ตอัปท้องถิ่นนิยม
(แก้ไข: พอไปดูหลักสูตรจริง ๆ มีทั้งวิชาธุรกิจ การจัดการ มนุษยศาสตร์ เคมี สิ่งแวดล้อม ผู้ประกอบการ และ e-sports)
ผมรู้สึกว่าหลายคนทุ่มแรงไปกับการยอมรับการขาดการศึกษาของตัวเอง
มีทั้งคนเรียนเองที่เก่งมาก และคนมีปริญญาที่ไม่ได้ฉลาดนัก แต่จากประสบการณ์ของผมเอง ถ้ามีปริญญา CS เส้นทางของผมน่าจะง่ายขึ้น
โดยเนื้อแท้แล้ว CS ไม่ได้เท่ากับการเขียนโค้ดทั้งหมด เช่นเดียวกับ ME (วิศวกรรมเครื่องกล) ที่ความคาดหวังและบทบาทในแต่ละอาชีพก็ต่างกัน
วิศวกรเครื่องกลเองก็ไม่ได้เก่งเรื่องอย่างน้ำมันรถรั่วหรือยางแบนเท่าช่างเสมอไป
แต่เราก็ไม่ได้มองข้ามคุณค่าของปริญญาวิศวกรรมเพราะเหตุผลนั้น
ตอนเริ่มต้นผมเองก็เคยทำงานในโรงงานแบบลงมือเปื้อนน้ำมันจริง ๆ และแก้ปัญหาที่ช่างยังแก้ไม่ได้ แต่ทั้งหมดนั้นเป็นเพราะความชอบส่วนตัวและความอยากรู้อยากเห็น
เหตุผลที่คนเรียนเองมักทำผลงานได้ดี ก็เพราะพวกเขาเป็นคนที่มีแรงจูงใจ ความหลงใหล และความเป็นตัวของตัวเองสูงพอจะกลายเป็นคนเรียนเองตั้งแต่แรก
ท้ายที่สุด ถ้ามีความอยากรู้อยากเห็น สมาธิ และวินัย ไม่ว่าจะเรียนทางการหรือไม่ก็จะสูงกว่าค่าเฉลี่ย
และก็มี survivorship bias อยู่ด้วย—เรามักเห็นเฉพาะคนเรียนเองที่อยู่รอดจนทำงานจริงได้
ในทางกลับกัน คนเรียนเองที่ล้มเหลวอาจไปได้ดีกว่านี้ถ้าได้รับการสอนที่เหมาะสม
ผมเองชอบทั้ง CS และการศึกษาคณิตศาสตร์ แต่ในเชิงกรอบวิธีคิดแล้วกลับรู้สึกว่าการเรียนรู้ด้วยตัวเองเหมาะกับผมมากกว่า
คำว่า 'มัก' ก็เป็นแค่คำที่ใช้ห่อความคลุมเครือเท่านั้นเอง
ผมเป็นทั้งนักพัฒนาซอฟต์แวร์และอาจารย์ผู้สอน CS ในมหาวิทยาลัย
สิ่งที่วิศวกรที่ประสบความสำเร็จจริงมีเหมือนกัน สุดท้ายก็คือ 'ความสนใจ' และ 'ความหลงใหล'
คนเรียนเองย่อมสนใจสาขานั้นมากอยู่แล้ว ดังนั้นแรงจูงใจของพวกเขาจึงผ่านการพิสูจน์มาในตัว
ส่วนคนมีปริญญาปะปนกันมากกว่า—บางคนแค่ต้องการใบปริญญา ทำให้แยกคนที่รู้แค่ศัพท์ทฤษฎีออกจากคนที่มีฝีมือจริงได้ยาก
โดยธรรมชาติแล้ว คนเรียนเองคือคนที่มีแรงจูงใจและความสนใจมากพอจะออกนอกระบบเดิมแล้วไปศึกษาด้วยตัวเอง
ถ้ามองความรู้เป็นวงกลมบนกระดาน
https://matt.might.net/articles/phd-school-in-pictures/
วงกลมที่เรียนในมหาวิทยาลัยนั้นแคบอย่างน่าตกใจ และส่วนใหญ่ก็เป็นหลักสูตรแบบเดียวกัน
ตัวอย่างเช่น ไม่มีเวลาพอจะสอนอัลกอริทึม dmc (ที่ใช้ในอัลกอริทึมบีบอัดที่ทรงพลังที่สุด)
แต่ทุกคนกลับวนอยู่กับหลักสูตรทั่วไปชุดเดิม
ถึงอย่างนั้นก็ยังมีคนที่ก้าวออกไปนอกวงกลมนั้น
คนแบบนั้นแหละคือโปรแกรมเมอร์ระดับท็อปของวงการ—รู้แม้กระทั่งอัลกอริทึมหายากที่เห็นกันในงานวิจัย และแสดงความสามารถที่ต่างออกไป
คนเรียนเองก็เหมือนกัน; พวกเขาอาจมีช่องว่างในความรู้จากส่วนกลางที่ทุกคนเรียนเหมือนกัน จึงมักเริ่มต้นจากแรงขับภายในและความถ่อมตัว
แต่สิ่งที่พวกเขามีคือวงกลมความรู้ที่ค่อย ๆ เติบโตอย่างเป็นธรรมชาติจากความหลงใหล
และผมคิดว่าความหลงใหลนี่เองคือสัญญาณที่ดีที่สุดของผลงานทางวิศวกรรม
พูดอีกแบบคือ 'คนที่แสดงให้เห็นแล้วว่าสามารถตัดสินใจได้เองว่าควรเรียนรู้อะไรอย่างอิสระ และลงมือเรียนจริง คนแบบนี้มักโดดเด่นในงานที่ต้องใช้ความสามารถแบบนั้น'
ตอนที่ Torvalds เปิดตัว Linux เวอร์ชันแรกในปี 1991 เขาแทบยังไม่ได้รับการศึกษา CS อย่างจริงจังเลย
ผมก็เห็นด้วย
ตอนปริญญาตรีเรายังมีงานให้เขียน OS แบบหลายโปรเซสด้วย 68K assembly ด้วยตัวเอง
ประสบการณ์แบบนี้ช่วยให้เข้าถึงโครงสร้างและหลักการทำงานของ Linux kernel ได้ง่ายขึ้นมาก
ถ้าไม่รู้ด้วยซ้ำว่า kernel คืออะไร ก็คงเริ่มต้นไม่ได้ตั้งแต่แรก
ช่วงนี้ผมกำลังพยายามเรียนรู้ปัญหาเชิง numerical analysis ที่ไม่เคยมีประสบการณ์มาก่อน (การทำ sparse LU solver) ด้วยตัวเอง
สิ่งที่มีประโยชน์ที่สุดไม่ใช่การลองเขียนเองหรือรื้อโค้ดของ solver ที่มีอยู่ แต่เป็น lecture notes ของรายวิชาที่เคยสอนหัวข้อนี้
เมื่อดูทั้งรายวิชา เราจะได้เห็นแนวคิดที่เกี่ยวข้องกันซึ่งก่อนหน้านี้เราไม่รู้มาก่อนด้วย
ด้านอื่น ๆ ก็เหมือนกัน เอกสารประกอบการสอนจากมหาวิทยาลัยมักเป็นแหล่งข้อมูลคุณภาพสูงที่สุด
ถ้าจะบอกว่าไม่จำเป็นต้องมีวิชาในมหาวิทยาลัย ก็อธิบายยากว่าทำไมแหล่งข้อมูลที่ดีที่สุดกลับเป็นของมหาวิทยาลัย
หลายคนบอกว่าการลงมือสร้างเองดีที่สุดต่อการพัฒนาฝีมือ แต่โปรเจ็กต์ในมหาวิทยาลัยเองก็ให้คะแนนจาก 'การสร้างของจริง' อย่างจริงจังอยู่แล้ว
เห็นด้วยเต็มที่
หนังสือเทคนิคเชิงลึกก็ดีมาก แต่คุณค่าที่ได้รับต่างกันมากตามท่าทีที่เราใช้เข้าไปหา
ถ้าเรียนแต่ทฤษฎีล้วนโดยไม่มีการนำไปใช้จริงเลย ก็จะหมดความสนใจและลืมเร็วมาก
แต่ถ้าเรียนทฤษฎีที่เชื่อมกับความต้องการจริงหรือกับงานที่เกี่ยวข้อง มันจะเปลี่ยนเป็นความรู้เชิงปฏิบัติที่จำเป็นทันที
ถ้าคนที่เก็บประสบการณ์ด้วยตัวเองมามากพอตั้งแต่ต้นได้เข้าเรียนมหาวิทยาลัยและยังรักษาความหลงใหลไว้ได้ พวกเขาจะทำอะไรได้มหาศาลในเวลาสั้นมาก
สรุปคือ ทฤษฎีสำคัญแน่นอน
เพียงแต่ถ้าได้ลองสร้างอะไรสักอย่างก่อนแล้วค่อยไปเรียนทฤษฎี เราจะเข้าใจได้ชัดขึ้นว่าอินไซต์ที่แท้จริงคืออะไร