พิมพ์สัมผัสสำหรับโปรแกรมเมอร์: สัญลักษณ์ ตัวเลข และความเร็วที่สำคัญ

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

ทำไม WPM จากการพิมพ์ข้อความจึงเป็นตัวแทนที่แย่ของการพิมพ์โค้ด

โค้ดต่างจากข้อความอยู่สามด้าน และแบบทดสอบการพิมพ์ที่สร้างจากคำภาษาอังกฤษที่ใช้บ่อยไม่ได้วัดด้านใดเลย

ด้านแรกคือส่วนผสมของอักขระ เรานับดูแล้ว ในบทความสิบชิ้นแรกของบล็อกนี้ ทุก 100 อักขระที่ไม่ใช่เว้นวรรค มีตัวอักษรราว 93 ตัว เครื่องหมายวรรคตอน 5 ตัว และตัวเลข 2 ตัว ในซอร์สโค้ด JavaScript ของเครื่องมือบรรทัดคำสั่งของ npm ตัวอักษรลดลงเหลือราว 80 และสัญลักษณ์เพิ่มขึ้นเป็น 19 โมดูล json และ email ของ Python ออกมาที่ตัวอักษร 80 ถึง 85 และสคริปต์บิลด์ที่แน่นเป็นพิเศษของเราอยู่ที่ 64 โดยหนึ่งในสามของอักขระเป็นสัญลักษณ์ ดังนั้นโค้ดจึงมีสัญลักษณ์มากกว่าข้อความของเราราวสามถึงเจ็ดเท่า ส่วนใหญ่อยู่ที่แถวบนสุดหรือต้องกด Shift ซึ่งหมายถึงนิ้วก้อยขวาและการเอื้อมที่ยากกว่า แบบทดสอบคำภาษาอังกฤษ ของเราสร้างจากคำที่ใช้บ่อยที่สุด 1,000 คำในคลังคำบรรยายภาพยนตร์ และ "{" ไม่ได้อยู่ในนั้น

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

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

ความเร็วในการพิมพ์สำคัญต่อการเขียนโปรแกรมไหม?

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

วิธีพิมพ์สัญลักษณ์ให้เร็วขึ้น และทำไมไม่มีใครสอน

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

ส่วนหนึ่งที่ทำให้สัญลักษณ์ยากคือ Shift ในซอร์สโค้ด npm ที่เรานับ ราว 45% ของการกดแป้นสัญลักษณ์เป็นอักขระที่ต้องกด Shift เช่น ( ) { } : และ $ ใกล้เคียง 9 ในทุก 100 อักขระที่ไม่ใช่เว้นวรรค ก่อนจะนับตัวพิมพ์ใหญ่สักตัว ดังนั้นแก้นิสัยการกด Shift ก่อน: กด Shift ด้วยมือที่ไม่ได้พิมพ์อักขระนั้น ( และ ) อยู่บนปุ่ม 9 และ 0 ของมือขวา จึงใช้ Shift ซ้าย ส่วน ! @ # $ อยู่ฝั่งมือซ้าย จึงใช้ Shift ขวา คนที่หัดพิมพ์เองส่วนใหญ่กด Shift ซ้ายกับทุกอย่าง และสำหรับ ! นั่นหมายถึงให้นิ้วก้อยซ้ายกดสองปุ่มพร้อมกัน ตรวจนิสัยของคุณเองด้วยการพิมพ์บรรทัดที่มี @ และ $ แล้วดูว่านิ้วก้อยข้างไหนขยับ

สัญลักษณ์ฝึกแยกเดี่ยวได้ยาก และฝึกแล้วก็น่าเบื่อ: ตัวอักษรมากับคำ วงเล็บมากับโค้ด และโค้ดแบบสุ่มก็ไม่น่าสนใจ คำตอบของเราคือฝึกสัญลักษณ์บนบรรทัดโค้ดจริง ทีละกลุ่ม

ทีละกลุ่ม

นี่คือลำดับที่เราจะใช้ และเป็นลำดับของชุดฝึกสัญลักษณ์ที่เรากำลังสร้างสำหรับหน้าฝึกซ้อม ระหว่างที่ยังไม่เปิดใช้ คุณทำแบบเดียวกันได้โดยวางโค้ดจริงลงในโหมดข้อความกำหนดเอง ทีละกลุ่มสัญลักษณ์ และไม่เพิ่มกลุ่มถัดไปจนกว่ากลุ่มปัจจุบันจะได้ความแม่นยำ 95%:

  • ตัวเลข: แถวตัวเลข โดยใช้นิ้วจากแป้นเหย้าเอื้อมขึ้นไป กลุ่มนี้มาก่อนเพราะเป็นกลุ่มที่ไม่ใช่ตัวอักษรที่ใช้มากที่สุด และเพราะแทบทุกคนมีนิสัยไม่ดีตรงนี้ เช่นใช้นิ้วชี้กด 4, 5, 6 และ 7 แบบทดสอบตัวเลข ใช้ตรวจได้อย่างรวดเร็ว
  • วงเล็บเป็นคู่: ( ) ก่อน แล้ว [ ] แล้ว { } ฝึกเป็นคู่เพราะคุณแทบไม่เคยพิมพ์ตัวหนึ่งโดยไม่มีอีกตัว: ในซอร์สโค้ด npm นั้น ( ปรากฏ 6,195 ครั้ง และ ) 6,194 ครั้ง การฝึกการเปิด-ปิดเป็นหน่วยเดียวคือสิ่งที่ทำให้มันเร็ว วงเล็บปิดคือจุดที่จังหวะของคนส่วนใหญ่สะดุด
  • ตัวดำเนินการ: = + - * / และวงเล็บมุม รวมถึงรูปแบบผสม (==, =>, +=, !=) พวกนี้กระจายอยู่ทั่วแถวตัวเลขและปุ่มเครื่องหมายวรรคตอนฝั่งมือขวา และหลายตัวต้องกด Shift ด้วยมือเดียวกัน ซึ่งเป็นส่วนที่ไม่สะดวก
  • เครื่องหมายคำพูดและวรรคตอน: ' " ; : , . โดยนิ้วก้อยขวาทำงานเป็นส่วนใหญ่ เซมิโคลอนและโคลอนคือจุดที่คนเขียนภาษาตระกูล C กับ Python ต่างกันมากที่สุด จึงควรฝึกกับบรรทัดจากภาษาที่คุณใช้
  • เชลล์และตัวแปลกๆ: ไปป์ แบ็กสแลช ทิลเดอ แบ็กทิก แคเรต แอมเพอร์แซนด์ แฮช ดอลลาร์ แอ็ต และปุ่ม _ ตัว _ และแบ็กทิกทำให้คนส่วนใหญ่ประหลาดใจ โค้ดแบบ snake_case ใช้ _ ตลอดเวลา และคนพิมพ์ส่วนใหญ่กดมันด้วยนิ้วที่ผิด

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

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

วงเล็บคู่และการปิดวงเล็บอัตโนมัติ

โปรแกรมแก้ไขโค้ดปิดวงเล็บให้อัตโนมัติ ซึ่งทำให้เกิดคำถามที่สมเหตุสมผล: ทำไมต้องหัดพิมพ์วงเล็บปิด?

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

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

ความเร็วพิมพ์โค้ดเทียบกับข้อความ

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

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

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

การเลือกคีย์บอร์ดที่ช่วยได้

คำแนะนำเรื่องคีย์บอร์ดที่โปรแกรมเมอร์ได้รับส่วนใหญ่เป็นเรื่องสวิตช์ และส่วนใหญ่ไม่ตรงประเด็น

เลย์เอาต์สำคัญกว่าสวิตช์ Dvorak ย้ายวงเล็บขึ้นไปที่แถวตัวเลขและย้ายเครื่องหมายวรรคตอนส่วนใหญ่ Colemak และ Workman คงวงเล็บไว้ที่เดิมแบบ QWERTY แต่ทั้งสองย้ายเซมิโคลอนไปไว้ที่ตำแหน่ง P ของ QWERTY ซึ่งโปรแกรมเมอร์ภาษาตระกูล C จะรู้สึกได้ บทความเรื่องเลย์เอาต์ มีฉบับยาว

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

ISO กับ ANSI: บนคีย์บอร์ด ISO (สหราชอาณาจักรและยุโรปส่วนใหญ่) ปุ่มที่เพิ่มมาข้าง Shift ซ้ายและปุ่ม Enter ทรงสูงเปลี่ยนตำแหน่งของแบ็กสแลชและไปป์ ถ้าคุณฝึกบนแบบหนึ่งแต่ทำงานบนอีกแบบ นิ้วก้อยของคุณจะพลาด ด้วยเหตุนี้การจำลองเลย์เอาต์ของเราจึงมี Colemak-DH ทั้งสองแบบ

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

เสียงช่วยบางคนในเรื่องการรับรู้ผลตอบกลับ: เสียงเตือนข้อผิดพลาดบอกคุณว่าสัญลักษณ์ผิดโดยไม่ต้องก้มมอง เปิดมันไว้ระหว่างฝึกสัญลักษณ์

การฝึกสิบนาทีสำหรับโปรแกรมเมอร์

สิ่งที่เราจะทำทุกวันตลอดสองถึงสามเดือนที่ชุดฝึกสัญลักษณ์ใช้:

  • สองนาที: แบบทดสอบคำ 30 วินาทีเพื่ออุ่นเครื่อง ความแม่นยำ 97%
  • หกนาที: กลุ่มสัญลักษณ์ปัจจุบัน บนข้อความกำหนดเองที่วางมาจากโค้ดของคุณเอง หยุดทันทีที่เริ่มกลับไปใช้นิ้วแบบเดิม
  • สองนาที: ตัวอย่างโค้ดหนึ่งชิ้นในภาษาที่คุณใช้มากที่สุด ดูฮีตแมปรายปุ่มหลังจากนั้น ไม่ใช่ WPM

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

คำถามที่พบบ่อย

ความเร็วในการพิมพ์ที่ดีสำหรับโปรแกรมเมอร์คือเท่าไร?

ตั้งแต่ราว 40 WPM ขึ้นไปก็ใช้ทำงานได้ ถ้าคุณพิมพ์สัมผัสสัญลักษณ์และตัวเลขได้ เกินจากนั้น คอขวดคือการคิด การอ่าน และทักษะการใช้โปรแกรมแก้ไขโค้ด ไม่ใช่ความเร็วของนิ้ว

จะหัดพิมพ์สัมผัสตัวเลขได้อย่างไร?

ฝึกแถวตัวเลขแยกเดี่ยวจนความแม่นยำคงที่ที่ 95% โดยใช้นิ้วที่อยู่ใต้ตัวเลขแต่ละตัวบนแป้นเหย้า แล้วค่อยผสมตัวเลขเข้ากับข้อความปกติ

แหล่งที่มา