ในฐานะนักพัฒนามือใหม่ ฉันอ่านบทช่วยสอนที่คุณ (นักพัฒนา) เขียนให้ฉันอย่างไร
(anniemueller.com)- บทความที่ถ่ายทอด ความสับสนและอุปสรรคเวลามือใหม่อ่านบทช่วยสอนทางเทคนิค ที่นักพัฒนาเขียนไว้ด้วยอารมณ์ขัน
- คำศัพท์เฉพาะและตัวย่อ ที่นักพัฒนามักใช้ ฟังดูสำหรับมือใหม่เหมือน ‘ภาษาต่างดาว’ ที่ไม่มีบริบทใด ๆ เลย
- ขั้นตอนการติดตั้ง, พาธไฟล์, คำสั่งเทอร์มินัล ในบทช่วยสอนมักซับซ้อนเกินไปหรือถูกข้ามรายละเอียด จนทำความเข้าใจได้ยาก
- ผู้เขียนชี้ว่า คำอธิบายที่ดูเป็นเรื่องธรรมดาในมุมมองของนักพัฒนา อาจกลายเป็นอุปสรรคที่ทำให้มือใหม่ต้อง ค้นหาหลายชั่วโมงและลองผิดลองถูก
- บทความนี้เตือนนักพัฒนาที่เขียนบทช่วยสอนว่า ควรอธิบายให้เป็นมิตรและชัดเจนขึ้นจากมุมมองของผู้เริ่มต้น
ที่มาของบทความและประเด็นปัญหา
- ผู้เขียนเล่าประสบการณ์ในฐานะมือใหม่ที่ไม่ใช่นักพัฒนา ขณะอ่านบทช่วยสอนที่นักพัฒนาเป็นคนเขียน
- มีการเสียดสีสถานการณ์ที่ คำศัพท์ทางเทคนิคและชื่อเครื่องมือ ในบทช่วยสอนไม่ทำให้เข้าใจได้เลยว่าหมายถึงอะไร
- ตัวอย่างเช่น ใช้ ชื่อเทคนิคสมมติ อย่าง Hoobijag, Snarfus, Shamrock portal เพื่อเน้นว่าจากสายตามือใหม่ ทุกอย่างดูซับซ้อนไปหมด
แปลต้นฉบับ
“สวัสดี! ฉันเป็นนักพัฒนา ประสบการณ์ที่เกี่ยวข้องของฉันมีดังนี้: ฉันเขียนโค้ดด้วย Hoobijag และบางครั้งก็ใช้ jabbernocks ด้วย แล้วก็แน่นอนว่าฉันทำ ABCDE++++ ด้วย (แต่ไม่มีทางเป็น ABCDE+/^+ เด็ดขาด นั่นมันไร้สาระใช่ไหม? ฮ่าๆ!) และฉันชอบทำงานกับ Shoobababoo บางครั้งก็จัดการ kleptomitrons ด้วย ฉันได้ไปทำโค้ดเกี่ยวกับ Shoobaboo ที่ Company[1] แล้วนั่นก็พาฉันมาสู่ Snarfus เอาล่ะ มาเริ่มกันเลย!
เกี่ยวกับบทช่วยสอนนี้
ตอนแรกฉันเริ่มทำอะไรที่ง่ายมาก[2] ด้วย Snarfus แต่ยิ่งใช้ก็ยิ่งเห็นศักยภาพของมัน! chromus อาจจะพันกันนิดหน่อย แต่จริง ๆ แล้วมันใช้งานได้อเนกประสงค์มาก ดังนั้นฉันเลยเริ่ม argyling pintafore ด้วย quagmire แทน hoobastank! บ้าดีใช่ไหม ฉันรู้ แต่ก็พอใช้ได้ระดับหนึ่ง และจริง ๆ แล้วก็ค่อนข้างสนุก… จนกระทั่งเจออุปสรรคใหญ่: fisterfunk ไม่ยอมคุยกับ shamrock portal เลย แถมยังไม่ส่ง beep-boops ไปที่ Snarfus ด้วย! แน่นอนว่าคุณรู้ว่านั่นหมายความว่าอะไร[3]— ตอนนี้ทั้ง hoob-อุโมงค์ถูก gramelions อุดตันหมดแล้ว ยอมรับไม่ได้เลย
ฉันเกือบจะยอมแพ้อยู่แล้ว แต่แล้วฉันก็นึกออกว่า: ถ้าเชื่อม backside Snarfus stagnator เข้ากับ backside shamrock Klingon troglodyte emulater ก็ใช้ได้! ทุกอย่างเริ่ม beep-boops กับ ding-dongs แล้วในที่สุดก็เข้าสู่หัวข้อจริงของบทช่วยสอนนี้เสียที และฉันก็สามารถทำสิ่งง่าย ๆ ได้ในแบบที่ต้องการ! เจ๋งดีใช่ไหม[4]
ดังนั้นวิธีตั้งค่าก็คือ:
- ในเทอร์มินัล พิมพ์ ajkl;gawgor;iqeg;iJLkqen. wl;R aw;oeiga 4648664 arjarwgj;llj;ja fadgfgajkljl; wlj;sdjk;lfas
- ตอนนี้ไปที่ folder/hidden/deep/in/the/file/system/surprise!.file แล้วคัดลอกเนื้อหาไฟล์ ถ้ามันไม่ได้อยู่ตรงนั้น มันอาจจะอยู่ที่ library/library/library/llibrary/liiiiiibrarrrary/llllliiiiibrary/hidden/hidden/hiding/you can’t find me/hidden/nope/never/hahahahereiam.file
- กลับไปที่เทอร์มินัลอีกครั้ง วางเนื้อหาไฟล์ แล้วพิมพ์ 64A786AGR45JAR; rdja;jg [[]][[]][[]][[]]][()()()()()()()(){{}{}{}|{}{|}{}{|}{ ////////////////!! !!!! !! //// !!! agjlkargji;lwej;OI [ASRGASG[]ASGDASG[]EAEadgasg[]EAGE[edaga][]ahgr-0-0=-0-=0-=0=0-0=-0-=0=-0-=0=-0=-0!!!
- Boop![5]
- เปิด Snarfus แล้วอัปโหลดไฟล์ที่คุณเพิ่งสร้าง
- เพื่อความสนุก ถ้าคุณอยาก unsham chronostatiomatrix ก็สามารถรัน —()()(]]asdg a=-do —cd go cd stay —sususudododo baby shark—][] ได้ด้วย เป็นทางเลือก
- เสร็จ!
บอกฉันด้วยว่าเป็นอย่างไรบ้าง ฉันก็อยากรู้เหมือนกันว่ามีใครใช้วิธีนี้กับ GewGawGamma หรือ ometer2.7 ไหม”
คำอธิบายเชิงอรรถ
- ดูเหมือนจะเป็นบริษัทดัง แต่ฉันไม่รู้จัก
- ไม่ได้ง่ายเลยสักนิด
- ไม่รู้ว่าหมายความว่าอะไร
- มันก็ดูเจ๋งดี แต่ฉันก็ยังไม่เข้าใจอยู่ดี อย่างน้อยก็ดีใจที่คุณทำได้
- สามขั้นตอนแรกน่าจะต้องใช้เวลาประมาณ 7 ชั่วโมงกับการค้นหา 193 ครั้ง แต่พอไปถึง Boop! ได้แล้วจะสะใจมาก
ปิดท้าย
- “นี่เป็นแค่บทความเขียนเล่นสนุก ขอบคุณจากใจจริงถึงทุกคนที่แบ่งปันความรู้และเขียนบทช่วยสอนไว้”
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ขอแนะนำอย่างยิ่งให้ใช้วิธีให้ใครสักคนที่มีความรู้เพียงขั้นต่ำลองทำตามเอกสาร แล้วเรายืนดูเงียบๆ อยู่ข้างๆ โดยไม่ช่วยอะไรเลย แค่สังเกตเท่านั้น ระหว่างนั้นจะเห็นได้ว่าผู้ใช้ติดตรงไหนบ้าง มีส่วนไหนที่ผู้เขียนคุ้นเคยจนมองข้ามไปเอง หรือมีการตั้งค่าที่ตกหล่นอยู่หรือไม่ ถ้าผู้ใช้ไปถึงเป้าหมายได้โดยแทบไม่เครียด แสดงว่าเอกสารผ่าน แต่ถ้าไม่ผ่าน ก็ต้องบันทึกทุกจุดที่ล้มเหลวไว้ให้ครบ จากนั้นปรับปรุงทีละจุดแล้วทดสอบใหม่กับคนใหม่อีกครั้ง เคยเห็นแม้แต่เอกสารของบริษัทใหญ่ระดับ FAANG ก็ยังไม่ผ่านเกณฑ์นี้ จึงรู้สึกขอบคุณมากที่องค์กรของเราตั้งมาตรฐานไว้สูง การทำเอกสารแบบนี้ช่วยลดการประชุมซ้ำๆ คำขอซัพพอร์ต และวิดีโอคอลลงได้ และทำให้ผู้ใช้แก้ปัญหาได้ด้วยตัวเอง
ชื่อโพสต์ในบล็อกคือ "ฉันที่ไม่ใช่นักพัฒนา อ่าน tutorial ที่คุณซึ่งเป็นนักพัฒนาเขียน" แต่ชื่อบน HN ถูกเปลี่ยนเป็น "ฉันที่เป็นนักพัฒนามือใหม่..." ซึ่งนักพัฒนามือใหม่กับคนที่ไม่ใช่นักพัฒนาเป็นคนละอย่างกันโดยสิ้นเชิง เช่น สำหรับฝ่ายบุคคลหรือคนที่ไม่ได้มาจากสายนี้เลย คำศัพท์ภายในหรือแนวคิดพื้นฐานอาจแปลกใหม่ทั้งหมด ในกรณีแบบนี้ ถ้านักพัฒนาเขียนคำอธิบายแบบหลุดโลกเกินไป ก็สมควรถูกวิจารณ์ แต่ถ้าเป็นนักพัฒนามือใหม่ แม้มันจะยาก เขาก็ควรค้นหาคำศัพท์หรือแนวคิดใหม่ๆ เองได้ และเมื่อเวลาผ่านไปก็อาจอัปเดตเอกสารเพื่อคนใหม่ที่เข้ามาทีหลังได้ด้วย
cd ~/.snarfus(ถ้าไม่มีโฟลเดอร์ก็ให้สร้างขึ้นมา)ก็เพียงพอแล้ว ตอนสมัยติดตั้ง Debian เองก็เคยได้ประโยชน์มหาศาลจากคำอธิบายเล็กๆ แบบนี้tutorial ส่วนใหญ่จริงๆ แล้วไม่ได้เขียนสำหรับคนที่ไม่ใช่นักพัฒนา แต่ใกล้เคียงกับการแลกเปลี่ยนข้อมูลกันเองในหมู่นักพัฒนา มากกว่าเป็นเอกสารสำหรับกลุ่มความรู้เฉพาะคล้ายบทความวิชาการ ซึ่งแนวทางแบบนี้ก็ไม่ได้แย่ และยังช่วยให้กลับมาเปิดบันทึกเก่าของตัวเองได้ง่ายด้วย จึงมีคอร์สหรือหนังสือเรียนสำหรับผู้เริ่มต้นแยกออกมาต่างหาก ถ้า tutorial ทุกชิ้นต้องเริ่มจากอธิบายพื้นหลังทั้งหมดจนครบ 30,000 ตัวอักษรทุกครั้ง ก็คงไม่มีใครอ่านจนจบ ในทางกลับกัน ต่อให้ใส่บริบทเพิ่มมากขึ้น ก็อาจยังมีคนรู้สึกว่าไม่พออยู่ดี
นักเขียนด้านเทคนิคจำนวนมากไม่ตระหนักถึง 'คำสาปของความรู้' อย่างแท้จริง เคยมีประสบการณ์บริหารกิลด์ WoW(World of Warcraft) มาก่อน มีคน 40 คนรวมตัวกันเข้าดันเจียนพร้อมกันและต้องร่วมมือกันจัดการบอสหลายตัว ซึ่งความผิดพลาดเล็กน้อยเพียงครั้งเดียวอาจทำให้ทั้งทีมตายหมดได้ เพราะอย่างนั้นทุกคนจึงมารวมกันใน Teamspeak เพื่ออธิบายกลยุทธ์ล่วงหน้าให้ครบถ้วน บทเรียนสำคัญที่สุดตอนนั้นคือ "ให้สมมติว่าอีกฝ่ายไม่รู้ว่ากำลังพูดถึงอะไร" และ "สิ่งที่พูดไปแล้วก็ต้องพูดซ้ำอีก" คนส่วนใหญ่มักไม่ขัดจังหวะเพื่อถามแม้จะไม่รู้ ดังนั้นการคอยถามตัวเองว่า 'คำที่กำลังใช้อยู่นี้อีกฝ่ายรู้ไหม' หรือ 'เขาอาจไม่รู้แนวคิดนี้หรือเปล่า' แล้วสอดคำอธิบายเพิ่มเข้าไป จึงได้ผลอย่างมหาศาล ประสบการณ์การสื่อสารแบบนี้ใช้กับ technical communication ได้ตรงตัว และถ้าฝึกให้พ้นจาก 'คำสาปของความรู้' จนติดเป็นนิสัย ก็จะช่วยเพิ่มความเข้าใจของผู้อื่นได้มาก
หน้าโฮมโปรเจกต์จำนวนมากหรือ GitHub README หลายอันเขียนราวกับว่า "คนที่อ่านรู้อยู่แล้วทุกอย่าง" เวลาดูเอกสาร จึงอยากเห็นความใส่ใจมากขึ้นในเรื่องอย่าง 'ทำไมต้องใช้เครื่องมือนี้', 'มันแก้ปัญหาอะไร', 'ต่างจากเครื่องมือคล้ายกันอื่นๆ อย่างไร', 'ยังมีการใช้งานต่อเนื่องอยู่ไหม', 'มีข้อมูลพอให้ตัดสินใจเปรียบเทียบข้อดีข้อเสียได้เองหรือไม่' แค่ใช้เวลา 5 นาทีคิดว่า "ต่อให้เป็นมือใหม่ เขาจะสงสัยอะไรบ้าง" แล้วเขียนสิ่งนั้นลงไป ก็ช่วยให้เข้าถึงได้มากขึ้นมาก ต่อให้เป็นโปรเจกต์ที่ใช้เวลาหลายปีสร้างขึ้นมา ก็น่าเสียดายมากหากสุดท้ายเกิดสถานการณ์ที่ 'ผู้ใช้ล้มเลิกเพราะความยุ่งยาก โดยที่เจ้าของโปรเจกต์ไม่รู้ด้วยซ้ำว่าเขาเคยมาถึงตรงนี้แล้ว' และการเข้าใจบทบาทของเอกสารแต่ละประเภทก็สำคัญมากเช่นกัน https://diataxis.fr/ เป็นจุดเริ่มต้นที่ดี
สิ่งสำคัญที่สุดในการเขียนเอกสารคือการกำหนด 'ระดับความรู้ของผู้อ่านเป้าหมาย' ให้ชัด จะตั้ง baseline ไว้สูงหรือต่ำก็ได้ แต่ถ้าเนื้อหาเบี่ยงจาก baseline มากเกินไป ผู้อ่านบางส่วนต้องไม่พอใจแน่นอน ในสถานการณ์แบบนี้ จะเลือกแก้ตัวหรือจะหาทางแก้ปัญหาก็ได้ ความจริงแล้วเดี๋ยวนี้ไม่ว่าจะ AI, Google หรือหนังสือ ก็ใช้ค้นหาสิ่งต่างๆ ได้ทันที ถ้าอยากรู้ว่า 'Shoobababoo คืออะไร' หรือ 'ทำไมต้องใช้ quagmire' ก็แค่ค้นหา แน่นอนว่าในอุดมคติ เอกสารควรเขียนให้พึ่งพาตัวเองได้มากที่สุดโดยไม่ต้องอาศัยข้อมูลภายนอก แต่โลกความจริงไม่ได้มอบความใส่ใจแบบนั้นให้เสมอไป
หลักการที่เน้นย้ำมาตลอดในการเป็นเมนเทอร์คือ "สิ่งที่รู้ ควรแบ่งปัน" ถ้ารู้อะไรอยู่ก็ควรอธิบายให้ฟัง และถึงแม้ผู้ฟังจะรู้อยู่แล้ว ก็แค่ช่วยเพิ่มความมั่นใจ แต่ถ้าเขาไม่รู้ มันก็จะเป็นประโยชน์มาก บางครั้งมีคนบ่นว่ายืดยาวเกินไป แต่ถ้าบอกว่า "เผื่อมือใหม่ ลูกค้า หรือผู้จัดการอาจมาอ่าน เลยเขียนไว้สำหรับพวกเขา" คนส่วนใหญ่ก็มักเข้าใจ หลักการนี้ใช้ได้กับทุกด้านทั้งการพัฒนา การรายงาน และการบริหารคน
ไม่นานมานี้ลอง deploy แอปจาก Gitlab ไปยัง DigitalOcean Kubernetes พบว่าต้องไปใช้งานเครื่องมือ third-party 3-4 ตัวโดยไม่มีคำอธิบายเลยว่าแต่ละตัวทำอะไร และยังต้องกรอกชื่อหรือ path ที่จะพิมพ์ใน command line เองทั้งหมด ไม่มีคำอธิบายด้วยว่าอะไรคือค่ามาตรฐานหรือควรให้ตรงกับอะไร ทั้งที่ตัวเองก็มีทักษะ Docker ค่อนข้างดี แต่เอกสารของเครื่องมือเหล่านี้ไม่เป็นมิตรจนแทบรู้สึกว่าไม่มีเอกสารเลยน่าจะดีกว่า
เหตุผลหลักที่เลิกเขียนหนังสือแล้วหันมาทำเว็บไซต์ tutorial คือมันเปิดโอกาสให้คนจำนวนมากเข้าถึงได้ง่ายขึ้นด้วยเครื่องมือเชิงโต้ตอบหลากหลายแบบ (เช่น องค์ประกอบ
<abbr>) ถึงอย่างนั้นก็ยังหงุดหงิดที่คอนเทนต์บนเว็บทุกวันนี้ยังติดอยู่กับความสามารถแบบหนังสือกระดาษ ทั้งที่มีฟีเจอร์อย่างการคลิก การ hover การพับส่วนต่างๆ วิดีโอ หรือการตอบสนองของผู้ใช้มากมาย แต่กลับยังเต็มไปด้วยข้อความยาวเป็นกำแพงเหมือนเดิม แม้แต่ OP เองก็ยังใช้วิธีให้คลิกเชิงอรรถแล้วเลื่อนหน้าลงไปด้านล่าง ซึ่งให้ความรู้สึกว่าไม่ได้ใช้ศักยภาพของเว็บอย่างเต็มที่ที่จริง tutorial ส่วนใหญ่ไม่ได้มีปัญหาว่าเขียนให้คนที่ไม่ใช่นักพัฒนาหรือให้นักพัฒนา แต่เป็นการซ่อนขั้นตอนสำคัญหนึ่งหรือสองขั้นไว้หลัง "ข้อความยาวที่ไม่จำเป็น" มากกว่า สาเหตุใหญ่ที่สุดคือการเขียนให้เหมือนกำลังอธิบายกับคนอื่นนั้นยาก สิ่งที่รู้อยู่ในหัวของผู้เขียน ถ้าไม่เขียนออกมาเป็นคำพูด ผู้อ่านไม่มีทางรู้ได้ ควรเขียนในรูปแบบ "cookbook" มากกว่าคำว่า "tutorial" เพื่อให้เอาไปใช้หน้างานได้จริง และไม่ไร้ประโยชน์ทันทีเมื่อมีเวอร์ชันใหม่