ความสนุกของการสร้างซอฟต์แวร์ของเล่น
(blog.jsbarretto.com)- การสร้าง Toy ซอฟต์แวร์ เป็นวิธีฟื้นคืน ความสนุก และความคิดสร้างสรรค์ที่เป็นแก่นแท้ของการพัฒนาซอฟต์แวร์
- ในยุคที่ ความสุขอันบริสุทธิ์ของการพัฒนาซอฟต์แวร์ กำลังเลือนหายไปเพราะ AI และการทำให้อุตสาหกรรมเป็นระบบ การทำโปรเจกต์ส่วนตัวอย่าง โปรแกรมของเล่นง่ายๆ สามารถเป็นจุดเริ่มต้นให้ได้ความรู้ที่ใช้ได้จริงในงานและความเข้าใจที่ลึกซึ้งขึ้น
- ซอฟต์แวร์ของเล่น ยึดตามกฎ 80:20 โดยทำฟังก์ชันให้ได้มากที่สุดด้วยโค้ดให้น้อยที่สุด และหัวใจสำคัญคือ หลีกเลี่ยงการออกแบบที่มากเกินไปหรือการหมกมุ่นกับความสมบูรณ์แบบ
- ประสบการณ์ของการลงมือสร้างด้วยตนเองโดยไม่พึ่งเครื่องมือ AI อย่าง LLM คือความสุขพื้นฐานของการเรียนรู้และการเติบโต
ทำไมเราควรสร้างโปรแกรมของเล่นให้มากขึ้น
- คำกล่าวของ Richard Feynman ว่า “สิ่งที่ฉันสร้างไม่ได้ คือสิ่งที่ฉันยังไม่เข้าใจ” → ประสบการณ์ของการลงมือสร้างบางอย่างด้วยตัวเองนำไปสู่ความเข้าใจที่ลึกซึ้ง
- ต่างจากคำแนะนำเดิมที่ว่า ‘อย่าสร้างวงล้อขึ้นมาใหม่’ ประสบการณ์ของการ ลองสร้างวงล้อด้วยตัวเอง สอนอะไรได้มากกว่าการอ่านหรือการเรียนรู้เชิงทฤษฎี
- ช่วงหลังมานี้ AI และการทำให้อุตสาหกรรมซอฟต์แวร์เป็นระบบกำลังคุกคาม ความสนุก และ ความเป็นช่างฝีมือ ของการพัฒนา
- การสร้างซอฟต์แวร์ของเล่นช่วยฟื้น ความสนุกง่ายๆ ที่ทำให้เราหลงใหลคอมพิวเตอร์อีกครั้ง
หลักการของโปรแกรมของเล่น: Keep it simple
- ซอฟต์แวร์ของเล่นยึดหลัก 80:20: ใช้ความพยายาม 20% เพื่อให้ได้ฟังก์ชัน 80%
- เป้าหมาย ไม่ใช่ผลิตภัณฑ์สุดท้าย แต่คือความเรียบง่ายและการลงมือสร้างหลักการสำคัญด้วยตัวเอง
- เน้นการระวัง การออกแบบโครงสร้างเกินความจำเป็น (over-engineering) และเขียนเฉพาะโค้ดที่จำเป็นจริงๆ
- แนะนำแนวทางที่ ปล่อยให้เส้นทางของโค้ดทั้งหมดอยู่ในสถานะยังไม่ถูก implement แล้วค่อยขยายการ implement ออกไปเมื่อจำเป็น
- แม้ระบบจะดูเล็ก แต่เมื่อได้ลองทำจริงก็มักพบว่าสามารถสร้างได้ง่ายกว่าที่คิด
ประโยชน์เพิ่มเติมของซอฟต์แวร์ของเล่น
- ความรู้ ที่ได้จากโปรเจกต์ของเล่นมักช่วยในการตามหาปัญหา แก้บั๊ก และป้องกันความผิดพลาดในงานจริงได้มากกว่าที่คาด
- การลองชนปัญหาด้วยตัวเองและสัมผัส ข้อจำกัด โดยตรงช่วยให้เกิดมุมมองเชิงลึกต่อธรรมชาติของซอฟต์แวร์ และอาจนำไปสู่การค้นพบวิธีแก้ปัญหาแบบใหม่ได้
ตัวอย่าง: รายการโปรเจกต์ซอฟต์แวร์ของเล่นหลากหลายแบบ
ผู้เขียนได้สรุป ประเภทของโปรเจกต์ของเล่น ที่เคยลงมือทำเองตลอด 15 ปีที่ผ่านมา พร้อมระดับความยากและเวลาที่คาดว่าจะใช้ โดยแต่ละโปรเจกต์มีคำอธิบายสั้นๆ และแหล่งอ้างอิงเพิ่มเติม
- Regex เอนจิน (ความยาก 4/10, 5 วัน) : แปลความ regular expression แบบ POSIX และระบุสตริงที่ตรงกัน ช่วยให้เข้าใจการทำงานภายในของ regex อย่างลึกซึ้ง
- x86 OS เคอร์เนล (ความยาก 7/10, 2 เดือน) : รวม CLI ไดรเวอร์อย่างง่าย เมมโมรีแมเนเจอร์ ฯลฯ และสามารถท้าทายตัวเองเพิ่มด้วย in-memory filesystem, ไฟล์ปฏิบัติการ ELF, GUI, process isolation เป็นต้น
- GameBoy/NES อีมูเลเตอร์ (ความยาก 6/10, 3 สัปดาห์) : เรียนรู้ชุดคำสั่งแบบง่ายและฮาร์ดแวร์ รวมถึงการทำ PPU, PSG และฟอร์แมตคาร์ทริดจ์ที่มีลักษณะเฉพาะ
- เกม GameBoy Advance (ความยาก 3/10, 2 สัปดาห์) : เกมง่ายๆ ที่อิงสไปรต์ ชุมชนพัฒนา GBA ยังมีความคึกคัก และเป็นโครงสร้างระบบที่ทำความเข้าใจได้ด้วยตัวคนเดียว
- เอนจินฟิสิกส์ 2D (ความยาก 5/10, 1 สัปดาห์) : กลศาสตร์นิวตันพื้นฐานและการจัดการการชนแบบง่าย สามารถต่อยอดไปสู่รูปร่างซับซ้อน ความเฉื่อย อัลกอริทึมการแก้ปัญหา soft body/ปฏิสัมพันธ์แบบผสมได้
- Dynamic Interpreter (ความยาก 4/10, 1~2 สัปดาห์) : tree-walking interpreter การสร้างภาษาของตัวเองให้ทั้งความสุขทางเทคนิคและความคิดสร้างสรรค์
- คอมไพเลอร์สาย C (ความยาก 8/10, 3 เดือน) : ออกแบบสถาปัตยกรรมที่รองรับระบบชนิดข้อมูลแบบง่าย สภาพแวดล้อมเป้าหมาย การเพิ่มประสิทธิภาพต่างๆ และแบ็กเอนด์หลายแบบ
- Text Editor (ความยาก 5/10, 2~4 สัปดาห์) : เริ่มจาก file I/O อย่างง่าย ใช้ UI toolkit อย่าง QT/GTK ได้ หรือเลือกแบบคอนโซล แล้วเพิ่มฟีเจอร์อย่าง unicode, syntax highlighting, multi-buffer, LSP
- Async Runtime (ความยาก 6/10, 1 สัปดาห์) : ในกรณีของ Rust คือการจัดการ task แบบ
impl Futureและการทำ concurrency พร้อมต่อยอดด้วยการปลุก I/O - Hash Map (ความยาก 4/10, 3~5 วัน) : เรียนรู้หลักการทำงานภายใน, closed/open addressing, กฎแบบ Robin Hood รวมถึงความเข้าใจเรื่องประสิทธิภาพและช่วงเวลาที่เหมาะสมในการใช้งาน
- Rasteriser / Texture Mapper (ความยาก 6/10, 2 สัปดาห์) : เรียนรู้โครงสร้างของ 3D graphics pipeline เวกเตอร์คณิตศาสตร์ Z-buffer และต่อยอดสู่ texture mapping กับอัลกอริทึม shading ได้
- การเรนเดอร์ Signed Distance Field (ความยาก 5/10, 3 วัน) : ทำความเข้าใจการแทนพื้นที่เชิงคณิตศาสตร์ การทำ visualization แบบง่าย รวมถึง shader และเวกเตอร์คณิตศาสตร์
- Voxel เอนจิน (ความยาก 5/10, 2 สัปดาห์) : หากมีประสบการณ์ด้าน 3D graphics หรือการพัฒนาเกมจะเข้าใจได้ง่าย และยังเพิ่มความท้าทายด้วย texture, procedural generation, network ฯลฯ ได้
- Threaded Virtual Machine (ความยาก 6/10, 1 สัปดาห์) : อินเทอร์พรีเตอร์ที่รวดเร็ว สร้างอินเทอร์พรีเตอร์ที่ optimize แล้วโดยไม่ต้องสร้างโค้ดแยกตามสถาปัตยกรรม และอาจได้ประสิทธิภาพใกล้เคียงคอมไพเลอร์
- GUI Toolkit (ความยาก 6/10, 2~3 สัปดาห์) : หลังมีประสบการณ์สร้างเครื่องมือ UI พื้นฐานแล้ว สามารถทำฟีเจอร์เชิงลึกอย่าง layout engine, text shaping, accessibility ได้ด้วยตัวเอง
- ตัวจำลองกลศาสตร์วงโคจร (ความยาก 6/10, 1 สัปดาห์) : สร้างโมเดลแรงโน้มถ่วงของนิวตันแบบง่าย ขยายไปสู่ปฏิสัมพันธ์ของหลายวัตถุท้องฟ้า อัลกอริทึมการอินทิเกรต การทำภาพ และการใช้ข้อมูลจาก NASA ได้
- Bitwise Challenge (ความยาก 3/10, 2~3 วัน) : เกมที่ถ่ายทอดสถานะได้ด้วยสถานะ 64 บิตเพียงอย่างเดียว เป็นการฝึกการจัดการสถานะเชิงสร้างสรรค์ และดูรายละเอียดกติกาเพิ่มเติมได้บน GitHub
- ECS เฟรมเวิร์ก (ความยาก 4/10, 1~2 สัปดาห์) : ลงมือสร้างโครงสร้าง Entity-Component-System เอง ผสานเข้ากับระบบชนิดข้อมูลของภาษา และปรับแต่งให้เหมาะกับข้อจำกัดและสมรรถนะสูง
- CHIP-8 อีมูเลเตอร์ (ความยาก 3/10, 3~6 วัน) : virtual machine แบบเรียบง่ายจากยุค 1970 สร้างได้รวดเร็ว และสามารถดูหรือรันแฟนเกมหลากหลายแบบได้
- Chess Engine (ความยาก 5/10, 2~5 วัน) : เริ่มจากกฎพื้นฐานแล้วค่อยๆ พัฒนา และการแพ้ให้กับเอนจินที่ตัวเองสร้างขึ้นคืออีกช่วงหนึ่งของการเติบโตของนักพัฒนา
- POSIX Shell (ความยาก 4/10, 3~5 วัน) : เข้าใจหลักการและข้อจำกัดของเชลล์แบบ POSIX อย่างลึกซึ้ง ผ่านการทำ compatibility กับภาษา Shell จริงและการพบกับลูกเล่นนับไม่ถ้วน
คำแนะนำเกี่ยวกับการใช้เครื่องมืออย่าง LLM
- เครื่องมือสมัยใหม่อย่าง LLM ก็มีประโยชน์ แต่ การเรียนรู้อย่างแท้จริง จะลึกซึ้งกว่าหากได้สำรวจด้วยตนเอง
- แทนที่จะดูโซลูชันที่มีอยู่แล้ว การ สำรวจพื้นที่ที่ยังไม่รู้และค้นหาคำตอบของตัวเอง ให้ความรู้สึกสำเร็จที่ลึกซึ้งกว่า
- หากทำโปรเจกต์ของเล่นโดยไม่มี LLM ช่วงแรกอาจรู้สึกไม่คุ้นและยาก แต่เมื่อเวลาผ่านไปจะสัมผัสได้ถึง ความสุขทางเทคนิคที่เป็นเอกลักษณ์และความภูมิใจในความสำเร็จสูงมาก
- หากเดินทางด้วยรถยนต์ คุณจะไม่สัมผัส ‘runner’s high’ แบบนักวิ่ง → ความสุขที่ลึกซึ้งเกิดจากประสบการณ์ตรง ไม่ใช่ทางลัด
3 ความคิดเห็น
เห็นด้วยกับการบอกให้ลองทำโดยไม่ใช้ LLM นะครับ ถ้าไม่ได้ต้องการพัฒนาอย่างรวดเร็ว การค่อยๆ ทำไปพร้อมกับทำความเข้าใจทีละอย่างด้วยตัวเองน่าจะทั้งสนุกและรู้สึกคุ้มค่ามากกว่า
อ๋อ หมายถึงโปรเจกต์เล่น ๆ นี่เองนะครับ แค่เห็นชื่อก็เผลอคิดไปว่าเป็นการทำซอฟต์แวร์ที่ใส่อยู่ในของเล่นซะอีก ฮ่าๆ
ความคิดเห็นบน Hacker News
สงสัยว่ามีใครใช้ LLM เหมือนเป็น search engine ไหม เมื่อก่อนเคยค้น Google ประมาณว่า “pros cons mysql mongodb” แล้วก็ต้องไล่อ่านทั้งเอกสารทางการ ฟอรั่ม บล็อก และ Stack Overflow กินเวลาเยอะมาก แต่เวลาที่ใช้ไปกับการอ่านและเรียนรู้ก็เป็นสิ่งที่ยินดีรับเสมอ ตอนนี้จะใส่พรอมป์ให้ LLM แบบเจาะจงขึ้น เช่น “ข้อดีข้อเสียของ mysql vs mongodb สำหรับเก็บรูปภาพ พร้อมลิงก์อ้างอิง” ทำให้จับประเด็นสำคัญได้เร็ว และมีลิงก์แนบมาด้วย เลยไม่ต้องพึ่งภาพหลอนของมันอย่างเดียว บางครั้งก็ขอแบบเฉพาะเจาะจง เช่น “ช่วยออกแบบ data schema สำหรับเก็บ metadata รูปภาพใน postgres อยากแยก X ไปไว้อีกตาราง” แต่จะใช้แบบนี้ก็ต่อเมื่อรู้ชัดเจนอยู่แล้วว่าผลลัพธ์ที่ต้องการควรออกมาเป็นแบบไหน ใช้แค่ตอนเสียดายเวลาพิมพ์ หรือเผลอลืมชื่อ type แบบเฉพาะ ๆ ชั่วคราว เช่น
intกับinteger/src/fooแล้วอธิบายว่าbarFeatureถูก implement ไว้อย่างไร ทีนี้ลองดูโปรเจ็กต์/src/bazแล้วอธิบายว่าทำไมแนวทางของ foo ถึงนำมาใช้กับ baz ได้ยาก” ใช้มันเพื่อแปลสิ่งที่มีอยู่แล้วให้เข้ากับไอเดียของตัวเอง ไม่ได้ใช้ให้สร้างอะไรใหม่ ๆ เพราะงานพัฒนาที่ใหม่จริงและท้าทายจริง ฉันยังสนุกกว่าถ้าได้เขียนเองหนึ่งในสิ่งที่ดีที่สุดต่อเส้นทางอาชีพที่ฉันเคยทำ คือการหยุดพัก 6 เดือนระหว่างงานแล้วทำโปรเจ็กต์ส่วนตัว ปกติมีโปรเจ็กต์ที่อยากเริ่มเยอะมาก แต่เพราะไม่มีข้อจำกัด ขอบเขตก็มักบานปลายจนสุดท้ายทำไม่เสร็จ เลยตัดสินใจว่าจะให้แต่ละโปรเจ็กต์แค่ 1 สัปดาห์เท่านั้น ทำได้แค่ไหนใน 1 สัปดาห์ก็เอาแค่นั้น การเริ่มจากศูนย์แล้วสร้างอะไรที่ใช้งานได้ภายใน 1 สัปดาห์ ไม่ว่าจะด้วยภาษาใหม่ framework ใหม่ หรือในโดเมนที่ไม่คุ้นเคย เป็นประสบการณ์ที่สร้างความมั่นใจอย่างมหาศาล และยังทำให้นึกได้อีกครั้งว่าทำไมเดิมทีถึงชอบการเขียนโปรแกรม ถ้ามีช่วงพักระหว่างงานสักหลายเดือน แทนที่จะเตรียมสัมภาษณ์แบบ Silicon Valley ลองไปทำ toy project ดู แล้วจะตกใจว่าจริง ๆ ตัวเองรู้มากขนาดไหนแล้ว
การทำซอฟต์แวร์เล่น ๆ คล้ายกับการซ่อมจักรยาน รถยนต์ หรือเรือ มันสนุก แต่การซ่อมจักรยานที่ต้องใช้ไปทำงานนั้นเครียด การสร้าง toy software สนุกก็จริง แต่พอถึงวันที่อยากใช้งานมันจริง ๆ ก็จะเริ่มเจอบั๊กทั้งหมด แล้วก็ไม่มีเวลาพอจะซ่อม นี่แหละคือภาวะกลืนไม่เข้าคายไม่ออก
แปลกใจที่มีความเห็นเชิงลบต่อ LLM เยอะมาก LLM ป้อนข้อมูลให้ถึงปาก ตอนเริ่มโปรเจ็กต์ใหม่ มันเป็นเรื่องปกติอยู่แล้วที่จะไม่ได้รู้ทุกอย่างตั้งแต่แรก การพยายามอย่างเต็มที่แล้วพัง จากนั้นค่อยไปศึกษา ทำความเข้าใจว่าทำไมมันถึงไม่เวิร์ก และปรับด้วยแนวทางใหม่ นั่นแหละคือการเรียนรู้จริง ถ้ารู้ทุกอย่างหมดแล้วแค่ทำตาม tutorial ก็จะไม่ได้สัมผัสข้อจำกัดของแต่ละวิธีหรือข้อดีข้อเสียจริง ๆ เช่น ลองทำ parser ด้วย regular expression แล้วค้นพบเองว่ามันรับมือ recursive expression ไม่ได้ แบบนี้เราจะได้เรียนรู้ทั้งโครงสร้างที่ซับซ้อนขึ้นและปัญหาเรื่อง time complexity ไปพร้อมกัน หรือถ้าลองเขียน optimizing compiler เองแล้วติดกับดักเทคนิค optimization สารพัด ก็จะเข้าใจว่าทำไม compiler จริงถึงถูกออกแบบแบบนั้น การได้ลองเขียน layout engine เองก็ทำให้สัมผัสได้แม้กระทั่งความยากของการจัดการแนวคิดอย่าง
widthประสบการณ์ที่เกิดจากการลองผิดลองถูกนั้นไม่มีอะไรดีไปกว่าอีกแล้ว ถึง LLM จะช่วยกันไม่ให้ทำพลาด แต่ก็หวังว่าจะไม่ทำให้พลาดโอกาสการเรียนรู้ที่สำคัญไปด้วยฉันเองก็ใช้เวลาหลายปี ทำโปรเจ็กต์ประหลาด ๆ นับไม่ถ้วนในคืนวันธรรมดาและวันหยุดสุดสัปดาห์เพื่อเรียน computer graphics ไม่ได้เงินสักบาท แต่สุดท้ายก็ทำให้ได้งานในฝัน ลิงก์ผลงานเด่น ๆ:
รู้สึกว่าวิญญาณของ “ความสนุกในการเขียนโปรแกรม” ที่บทความนี้เสนอจำเป็นมากจริง ๆ และยิ่งมีค่ามากขึ้นในยุค AI agent coding แต่รู้สึกว่าเวลาประมาณการของ toy project ที่ผู้เขียนเสนอไว้นั้นสั้นเกินไป ฉันอาจไม่ได้เร็วระดับเฉลี่ยก็จริง แต่ถึงอย่างนั้น ก็ยังคิดว่าโปรเจ็กต์ส่วนใหญ่ในลิสต์นั้น ถ้าทำวันละแค่ 2–3 ชั่วโมง ก็ไม่ได้จบในไม่กี่วันแน่ ๆ แค่การรีเสิร์ชก่อนเริ่มก็ใช้เวลาพอสมควรแล้ว ยกตัวอย่าง ไม่นานมานี้ฉันเปลี่ยนบล็อก Pelican ของตัวเองมาเป็น Odin static site generator ส่วนตัว ใช้เวลา 2 สัปดาห์ ทั้งที่ลงวันละแค่ 2–3 ชั่วโมงเอง และนั่นยังนับว่าเป็นโปรเจ็กต์ที่ง่ายกว่าหลายรายการในลิสต์นั้นด้วยซ้ำ
ฉันก็เห็นด้วยกับคำแนะนำที่ว่า “อย่าใช้ LLM กับโปรเจ็กต์แบบนี้” แต่ก็ไม่อยากให้ตีความแบบสุดโต่งเกินไป สิ่งที่น่าสนใจคือคำแนะนำเรื่องการรับความช่วยเหลือจาก AI ว่าควรทำอย่างไร ทำไมมันถึงให้ความรู้สึกต่างจากการขอความช่วยเหลือจากคน ถ้าตรงท้ายบล็อกเขียนว่า “ถ้าคุณมีเพื่อนที่เขียนโปรแกรมเก่ง อย่าไปขอความช่วยเหลือเด็ดขาด” มันก็คงฟังแปลก เพื่อนผู้เชี่ยวชาญเข้าใจบริบท และช่วยเราให้แก้ปัญหาได้ด้วยตัวเอง ฉันว่าแทบไม่มีใครเคยลองขอ AI แบบจริงจังว่า “อย่าแก้ปัญหาแทนฉัน แต่ช่วยชี้แนะเหมือนเพื่อนผู้เชี่ยวชาญ” แน่นอนว่าตอนนี้มันอาจยังทำไม่ได้ดีหรือทำได้ไม่ครบ แต่ในอีก 1–2 ปี วิธีแนะนำแบบนั้นอาจกลายเป็นเรื่องธรรมดามากก็ได้ เพราะงั้นการฝึกนิสัย “บอกให้ชัดว่าเราอยากได้ความช่วยเหลือแบบไหน” น่าจะเป็นเรื่องดี ไม่จำเป็นต้องมีอคติว่าต่อให้ทำอย่างไร LLM ก็จะให้แต่คำตอบผิด ๆ เท่านั้น
ต้องขอบคุณ vibe coding ที่ขับเคลื่อนด้วย Claude ทำให้ได้เริ่ม side project สนุก ๆ อีกครั้งหลังจากห่างหายไปนาน พอคุ้นกับเครื่องมือและกระบวนการแล้ว ช่วงไม่กี่สัปดาห์มานี้ก็ทำแอปได้อย่างรวดเร็วหลายตัว ทั้งแดชบอร์ดปฏิทิน/อากาศสำหรับครอบครัว แอปอ่าน Bluesky ที่ซ่อนโพสต์ที่อ่านแล้ว แดชบอร์ด PM ในบริษัทแบบ gamified Chrome extension ที่ซ่อนโพสต์ Reddit หลังเวลาที่กำหนด และแอปทดแทน WordPress plugin ที่ไม่มีคนดูแลแล้ว ช่วงแรกฉันโยนเรื่องต่าง ๆ เช่นการปรับปรุง UI ให้ Claude ทำเยอะมาก แต่ตอนนี้เริ่มเรียนรู้ที่จะพอใจกับความสมบูรณ์ราว 90% และหันไปโฟกัสที่ฟีเจอร์ของแอปใหม่แทนการขัดเกลาให้สุด
ลิสต์นี้น่าประทับใจมาก หลายโปรเจ็กต์ที่ผู้เขียนมองว่าง่าย สำหรับฉันน่าจะยากกว่านั้นมาก แต่ในแง่แรงบันดาลใจ มันได้ผลจริง ทำให้อยากกลับไปเริ่ม toy project ของตัวเองอีกครั้ง เพียงแต่ข้อสรุปเรื่องการใช้ LLM เพื่อการเรียนรู้นั้นมีความละเอียดอ่อนกว่านี้มาก เพราะมันต่างกันสุดขั้วตามวิธีใช้ ตัวอย่างเช่น ถ้าขอแบบ “ช่วยเขียนปัญหานี้ให้เลย” อันนั้นแย่ต่อการเรียนรู้ที่สุด แต่ถ้าขอว่า “ช่วยอธิบายโครงสร้างของ ELF ในระดับนามธรรมสูงสุด โดยเน้นที่ ‘ทำไม’” แบบนี้กลับเป็นตัวเร่งการเรียนรู้ที่ยอดเยี่ยมมาก ส่วนที่ว่าเราจะไม่ต้องทำรีเสิร์ชเองทุกครั้ง อาจเป็นข้อเสียก็จริง แต่ถ้ายังมีท่าทีใฝ่คิดจริง ๆ การสามารถตั้งคำถามตอบโต้แบบโสกราตีสได้ตลอดเวลาก็เป็นตัวเร่งการเรียนรู้ที่ทรงพลังมาก
โปรเจ็กต์ที่แนะนำไว้ที่นี่เป็นไอเดียที่ดีมากจริง ๆ แต่สำหรับฉันไม่มีอันไหนน่าสนใจเลย เวลาเป็นแบบนี้ก็อดสงสัยไม่ได้ว่าจริง ๆ แล้วฉันเคยชอบการเขียนโปรแกรมไหม