2 คะแนน โดย GN⁺ 2025-07-18 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การศึกษาแบบทางการ มีประโยชน์ต่อการถ่ายทอดทักษะอย่างมีประสิทธิภาพ แต่มีข้อจำกัดในการพัฒนา สัญชาตญาณ สำหรับการแก้ปัญหาที่ไม่คาดคิด
  • การลองผิดลองถูกซ้ำ ๆ อย่างมีเป้าหมาย (อัลกอริทึม) คือปัจจัยที่ช่วยยกระดับความชำนาญได้มากที่สุด ผ่านกระบวนการล้มเหลวและแก้ไขในการลงมือจริง
  • ใน ตัวอย่างจริง บุคคลหลากหลายอย่าง Linus Torvalds, Margaret Hamilton เป็นต้น ต่างผ่านความล้มเหลวและเอาชนะมันจนมีความสามารถโดดเด่น
  • การมีเมนเทอร์ เป็นตัวเร่งที่สำคัญ แต่การทดลองด้วยตนเองและประสบการณ์ตรงคือหัวใจของการเติบโตในท้ายที่สุด
  • การทดลองที่มุ่งเป้าหมาย โดยลงมือแก้ปัญหาด้วยตัวเองผ่านการปะทะและพังจริง คือรากฐานของการพัฒนาฝีมืออย่างแท้จริง

พลังที่สร้างสุดยอดวิศวกรซอฟต์แวร์: การลองผิดลองถูกอย่างมีเป้าหมาย

มายาคติของห้องเรียน

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

การเติบโตที่แท้จริงจากการลงมือเผชิญเอง

ตัวอย่างต้นแบบ

  • Linus Torvalds สร้าง Linux จากการเขียน MINIX ใหม่
  • Margaret Hamilton สร้างแนวคิดด้านความเชื่อถือได้สมัยใหม่จากการลงมือแก้ปัญหาโค้ดแบบเรียลไทม์ในโครงการ Apollo
  • ผู้ดูแลโอเพนซอร์ส จำนวนมากก็เติบโตจากการทำเครื่องของตัวเองพัง แล้วซ่อมกลับมาด้วยตัวเอง
  • คนเหล่านี้ไม่ได้เริ่มจากการเรียน บทบรรยายแบบเป็นลำดับ ก่อน แต่ได้ทักษะอันลึกซึ้งจากความล้มเหลวและผลกระทบจริงที่ตามมา

ทำไมการลองผิดลองถูกจึงเหนือกว่าสูตรสำเร็จ

  1. วงจรป้อนกลับ เกิดขึ้นทันที การวิเคราะห์แครชจากล็อกทำให้เรียนรู้ได้เร็วกว่าควิซมาก
  2. กรณีขอบ จะปรากฏขึ้นเองตามธรรมชาติในสภาพแวดล้อมจริง และทำให้เจอกรณีใช้งานที่ตำราไม่อาจคาดถึง
  3. ปัญหาที่แก้ได้อย่างยากลำบากจะ ติดอยู่ในความทรงจำอย่างลึกซึ้ง จนกลายเป็นความจำของกล้ามเนื้อ
  4. เมื่อไม่มีคู่มือเดิมให้ยึดตาม ความคิดสร้างสรรค์ จะถูกดึงออกมาอย่างเต็มที่

มองเมนเทอร์ชิปใหม่: เป็นตัวเสริม ไม่ใช่สิ่งทดแทน

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

สร้างนิสัยการทดลองด้วยตนเอง

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

สรุป

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

1 ความคิดเห็น

 
GN⁺ 2025-07-18
ความคิดเห็นจาก Hacker News
  • ตัวผมเองเป็นนักพัฒนาแบบเรียนรู้ด้วยตัวเอง และใช้เวลาส่วนใหญ่ของอาชีพทำงานในบริษัทใหญ่ร่วมกับเพื่อนร่วมงานที่จบ CS
    จากประสบการณ์ของผม นักพัฒนาแบบเรียนรู้ด้วยตัวเอง ถ้าฉลาดพอ สุดท้ายก็จะแก้ปัญหาที่อยู่ตรงหน้าได้
    คนที่จบ CS มักมีหลายคนที่ไม่แม้แต่จะลองเมื่อเจอพื้นที่ที่ไม่คุ้นเคยเลยด้วยซ้ำ (แน่นอนว่านี่ต่างกันไปตามนิสัย ผมคิดว่าประมาณ 85%)
    เมื่อเจอกับความไม่แน่นอนสูง พวกเขามักไปต่อไม่ได้
    สุดท้ายแล้วคนจบ CS เหมาะกับสภาพแวดล้อมแบบบริษัทใหญ่มากกว่า ทำงานตามแพตเทิร์นเหมือนเฟืองที่เปลี่ยนแทนกันได้
    ส่วนนักพัฒนาแบบเรียนรู้ด้วยตัวเองมักพยายามสร้างนวัตกรรมอยู่เสมอ ทำงานเพื่อลดการทำซ้ำที่ไร้ประสิทธิภาพ และท่าทีที่มีความคิดริเริ่มแบบนี้ก็ทำให้คนรอบข้างรู้สึกไม่สบายใจ
    แต่คนที่เรียนรู้แบบนี้กลับสร้างผลลัพธ์ที่ดีกว่ามาก
    ดูเหมือนนักพัฒนาส่วนใหญ่จะให้ความสำคัญกับการรักษางานและลดความกังวล มากกว่าการเขียนโค้ดที่ยอดเยี่ยมจริง ๆ

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

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

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

    • คนจบ CS ไม่แม้แต่จะลองกับปัญหาที่ไม่คุ้นเคย
      ผมขอคัดค้านอย่างหนัก
      ผมเองก็เป็นคนที่เริ่มจากเรียนเองแล้วค่อยไปเอาปริญญา CS
      เมื่อก่อนผมเคยเสียเวลาทั้งวันพยายามเขียนโค้ดกราฟทราเวอร์ซัลกับการตรวจจับลูปขึ้นมาเองทั้งหมดตั้งแต่ต้น
      ถ้าเรียนวิชา data structures/algorithms มาก่อน ผมคงใช้เวลาตัดสินใจไม่ถึง 2 วินาที
      คนจบ CS สามารถรวบรวมข้อมูลอย่างเป็นระบบ และยังมีภาษาสำหรับใช้คุยกันเวลาอยากขุดลึก
      ในโลกจริง เพื่อนร่วมงานคุณถึงขั้นไม่ทำอะไรเลยแล้วส่งต่อว่า ‘ทำไม่ได้’ จริงหรือ?
      จากประสบการณ์ของผม การหลีกเลี่ยงความรับผิดชอบต่องานน่าจะต่างกันตามระดับ junior-middle-senior มากกว่า
      ยิ่ง senior ก็ยิ่งถือ ownership ของปัญหามากขึ้น
      (static analyzer ภาษา C ที่ผมทำเอง มีทั้งการ parse โค้ด C, สร้าง call graph, และคำนวณการใช้หน่วยความจำสแตกสูงสุดในกรณีเลวร้ายที่สุด)

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

  • แก่นจริง ๆ คือ 'ความหลงใหล' มากกว่าวิธีเรียน
    ถ้าแรงจูงใจอ่อน ไม่ว่าจะเรียนแบบไหนก็มีข้อจำกัดชัดเจน
    หัวข้อนี้ยังมีด้านที่คุยเชิงตัวเลขได้ยากด้วย
    การศึกษาแบบทางการช่วยสร้างพื้นฐานด้านแนวคิดสำคัญ (คณิตศาสตร์ ฮาร์ดแวร์ 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 (ที่ใช้ในอัลกอริทึมบีบอัดที่ทรงพลังที่สุด)
    แต่ทุกคนกลับวนอยู่กับหลักสูตรทั่วไปชุดเดิม
    ถึงอย่างนั้นก็ยังมีคนที่ก้าวออกไปนอกวงกลมนั้น
    คนแบบนั้นแหละคือโปรแกรมเมอร์ระดับท็อปของวงการ—รู้แม้กระทั่งอัลกอริทึมหายากที่เห็นกันในงานวิจัย และแสดงความสามารถที่ต่างออกไป
    คนเรียนเองก็เหมือนกัน; พวกเขาอาจมีช่องว่างในความรู้จากส่วนกลางที่ทุกคนเรียนเหมือนกัน จึงมักเริ่มต้นจากแรงขับภายในและความถ่อมตัว
    แต่สิ่งที่พวกเขามีคือวงกลมความรู้ที่ค่อย ๆ เติบโตอย่างเป็นธรรมชาติจากความหลงใหล
    และผมคิดว่าความหลงใหลนี่เองคือสัญญาณที่ดีที่สุดของผลงานทางวิศวกรรม

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

  • Linus Torvalds สร้าง Linux โดยเขียน MINIX ขึ้นใหม่ทั้งหมด Margaret Hamilton สร้างแนวคิดเรื่องความน่าเชื่อถือของซอฟต์แวร์สมัยใหม่ในโครงการ Apollo
    ทั้งสองคนนี้ต่างก็เป็นวิศวกรที่ผ่านการศึกษาอย่างเป็นทางการ
    การศึกษาแบบทางการเปิดโอกาสให้พัฒนาความเป็นผู้ใหญ่ทางคณิตศาสตร์และวิศวกรรม ซึ่งรวมถึงความสามารถด้าน 'การลงมือปฏิบัติ' ด้วย

    • ตอนที่ Torvalds เปิดตัว Linux เวอร์ชันแรกในปี 1991 เขาแทบยังไม่ได้รับการศึกษา CS อย่างจริงจังเลย

    • ผมก็เห็นด้วย
      ตอนปริญญาตรีเรายังมีงานให้เขียน OS แบบหลายโปรเซสด้วย 68K assembly ด้วยตัวเอง
      ประสบการณ์แบบนี้ช่วยให้เข้าถึงโครงสร้างและหลักการทำงานของ Linux kernel ได้ง่ายขึ้นมาก
      ถ้าไม่รู้ด้วยซ้ำว่า kernel คืออะไร ก็คงเริ่มต้นไม่ได้ตั้งแต่แรก

  • ช่วงนี้ผมกำลังพยายามเรียนรู้ปัญหาเชิง numerical analysis ที่ไม่เคยมีประสบการณ์มาก่อน (การทำ sparse LU solver) ด้วยตัวเอง
    สิ่งที่มีประโยชน์ที่สุดไม่ใช่การลองเขียนเองหรือรื้อโค้ดของ solver ที่มีอยู่ แต่เป็น lecture notes ของรายวิชาที่เคยสอนหัวข้อนี้
    เมื่อดูทั้งรายวิชา เราจะได้เห็นแนวคิดที่เกี่ยวข้องกันซึ่งก่อนหน้านี้เราไม่รู้มาก่อนด้วย
    ด้านอื่น ๆ ก็เหมือนกัน เอกสารประกอบการสอนจากมหาวิทยาลัยมักเป็นแหล่งข้อมูลคุณภาพสูงที่สุด
    ถ้าจะบอกว่าไม่จำเป็นต้องมีวิชาในมหาวิทยาลัย ก็อธิบายยากว่าทำไมแหล่งข้อมูลที่ดีที่สุดกลับเป็นของมหาวิทยาลัย
    หลายคนบอกว่าการลงมือสร้างเองดีที่สุดต่อการพัฒนาฝีมือ แต่โปรเจ็กต์ในมหาวิทยาลัยเองก็ให้คะแนนจาก 'การสร้างของจริง' อย่างจริงจังอยู่แล้ว

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

    • สรุปคือ ทฤษฎีสำคัญแน่นอน
      เพียงแต่ถ้าได้ลองสร้างอะไรสักอย่างก่อนแล้วค่อยไปเรียนทฤษฎี เราจะเข้าใจได้ชัดขึ้นว่าอินไซต์ที่แท้จริงคืออะไร