הקלדה עיוורת למתכנתים עוסקת בעיקר במקשים שקורס הקלדה רגיל מדלג עליהם: ספרות, סוגריים, אופרטורים וצירופי ה-Shift שסביבם. מתכנת שמקליד טקסט רגיל ב-90 WPM יכול להיות איטי בקוד, ומקליד של 50 WPM בטקסט יכול להיות מהיר בו. שמנו לב לזה כשהדבקנו את קובצי הקוד שלנו למצב טקסט מותאם במהלך הבדיקות. המהירויות ירדו בשליש ויותר לעומת מצב מילים, מפת החום לפי מקש נדלקה על שורת המספרים ועל הזרת הימנית, והפרצים האיטיים ביותר היו על אסימונים עם סוגריים.
למה WPM של טקסט רגיל הוא מדד גרוע להקלדת קוד
קוד שונה מטקסט בשלוש דרכים, ומבחן הקלדה שבנוי ממילים נפוצות באנגלית לא מודד אף אחת מהן.
הראשונה היא תמהיל התווים. ספרנו. בעשרת הפוסטים הראשונים בבלוג הזה, בערך 93 מכל 100 תווים שאינם רווח הם אותיות, 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 שונים הכי הרבה, אז תרגלו על שורות מהשפה שבה אתם משתמשים.
- מעטפת (shell) והמשונים. קו אנכי, לוכסן הפוך, טילדה, גרש הפוך, גג (caret), אמפרסנד, סולמית, דולר, שטרודל ומקש ה-. ה- והגרש ההפוך מפתיעים את רוב האנשים; קוד ב-snake_case משתמש ב-_ כל הזמן, ורוב המקלידים לוחצים עליו באצבע הלא נכונה.
כל סוג לוקח לרוב האנשים שבוע או שבועיים של מפגשים בני עשר דקות, כך שכל המסלול הוא חודשיים עד שלושה. זה לאט יותר מלימוד האותיות, כי מקשי הסימנים רחוקים יותר וההרגלים שאתם מחליפים ותיקים יותר.
מה משתבש, ממה שראינו בסטטיסטיקה לפי מקש: אנשים לומדים את הסימן באצבע הנכונה ואז חוזרים להרגל הישן תחת לחץ, כי התנועה הישנה מהירה יותר במשך כמה שבועות. הסטטיסטיקה מראה את זה כמקש שהמרווח שלו משתנה בפראות, מהיר כשמושיטים נכון ואיטי כשלא. הפתרון הוא להישאר על הסוג הזה עוד שבוע.
זוגות סוגריים וסגירה אוטומטית
עורכים סוגרים סוגריים אוטומטית, וזה מעלה שאלה הוגנת: למה ללמוד להקליד את הסוגר הסוגר?
שתי סיבות. סגירה אוטומטית אינה עקבית: היא פועלת במקומות מסוימים ולא באחרים, כמו טרמינל או חלון צ'אט. מקליד שסומך עליה מהסס בכל פעם כדי לבדוק אם היא פעלה, וההיסוס עולה יותר מההקשה. וההקלדה מעל סוגר שנסגר אוטומטית (לחיצה על ")" כשהעורך כבר הכניס אחד) היא בעצמה הקשה, כך שאתם מקלידים את הסוגר הסוגר בכל מקרה.
כשמדביקים כאן קוד למצב טקסט מותאם, הטקסט מפוצל לפי רווחים, כך שההזחה נעלמת וכל אסימון הופך למילה. זו מגבלה ונוחות בבת אחת: לא מקלידים ארבעה רווחים בתחילת כל שורת Python, וגם לא מתרגלים אותם. מצב קוד אמיתי, שמטפל בהזחה ובזוגות שנסגרים אוטומטית כמו שעורך עושה, נמצא ברשימה שלנו, והוא קשה יותר ממה שזה נשמע.
מהירות בקוד מול מהירות בטקסט
אין לנו מספיק תוצאות ממצב קוד כדי לפרסם אחוזונים, ואנחנו מעדיפים לחכות מאשר להמציא אותם. בריצות שלנו, המהירות בקוד על קטע מציאותי הייתה בסביבות חצי עד שני שלישים מהמהירות של אותו אדם בטקסט, והיחס משתפר יותר עם תרגול סימנים מאשר עם תרגול כללי.
המספר שכן עובר מתחום לתחום הוא הדיוק. מתכנת שמקליד טקסט בדיוק של 97% וקוד ב-90% סובל מבעיית סימנים, ומפת החום לפי מקש מראה בדיוק אילו סימנים. מתכנת ב-97% בשניהם פשוט צריך להקליד יותר קוד. שיטת הניקוד שלנו מסבירה איך הדיוק סופר שגיאות שתוקנו.
כנקודת ייחוס סטנדרטית, מבחן הפיסוק עם מספרים מופעלים הוא הקרוב ביותר לקוד מבין המצבים הרגילים שלנו. אין בו סוגריים מסולסלים, אבל הוא מכניס את מקש ה-Shift ואת שורת המספרים, ואצל רוב האנשים שם נמצא הפער.
בחירות מקלדת שעוזרות
עצות המקלדת שמתכנתים מקבלים עוסקות בעיקר במתגים, ורובן לא לעניין.
הפריסה חשובה יותר מהמתג. Dvorak מעבירה את הסוגריים למעלה לשורת המספרים ומזיזה את רוב סימני הפיסוק. Colemak ו-Workman משאירות את הסוגריים איפה ש-QWERTY שמה אותם, אבל שתיהן מזיזות את הנקודה-פסיק למקום שבו ב-QWERTY נמצא P, ומתכנתים בשפות ממשפחת C ירגישו את זה. במאמר על פריסות יש את הגרסה הארוכה.
שכבת סימנים עדיפה על מקלדת גדולה יותר. מקלדות מפוצלות וקומפקטיות רבות מאפשרות לשים סוגריים ואופרטורים מתחת לאצבעות שורת הבית, בשכבה שמוחזקת במקש אגודל. מכל שינויי החומרה שמתכנתים מתארים, זה השינוי שהיינו מנסים קודם, כי הוא אומר שלא תסתכלו למטה בשביל סימן אף פעם.
ISO מול ANSI. במקלדות ISO (בריטניה ורוב אירופה), המקש הנוסף ליד ה-Shift השמאלי ומקש ה-Enter הגבוה משנים את המקום של הלוכסן ההפוך והקו האנכי. אם מתרגלים על אחת ועובדים על השנייה, הזרת תחטיא. האמולציה שלנו כוללת את שתי הגרסאות של Colemak-DH מהסיבה הזו.
המתגים כמעט לא משנים את המהירות. מתגים ליניאריים, טקטיליים ומקליקים שונים בתחושה ובצליל, ויומן ההקשות לא יודע על איזה מהם לחצתם. המאמר שלנו על מקלדות מכניות עובר על המספרים.
צליל עוזר לחלק מהאנשים עם משוב: צליל השגיאה אומר לכם שסימן היה שגוי בלי להסתכל למטה. הפעילו אותו בזמן שאתם לומדים סימנים.
מפגש של עשר דקות למתכנתים
מה שהיינו עושים כל יום במשך החודשיים-שלושה שמסלול הסימנים לוקח:
- שתי דקות: מבחן מילים של 30 שניות כחימום, בדיוק של 97%.
- שש דקות: סוג הסימנים הנוכחי, על טקסט מותאם שהודבק מהקוד שלכם. עצרו בסימן הראשון לחזרה לאצבע הישנה.
- שתי דקות: קטע קוד אחד בשפה שבה אתם משתמשים הכי הרבה. אחר כך הסתכלו על מפת החום לפי מקש, לא על ה-WPM.
בימים שאין לכם עשר דקות, הקלידו את הסוגר הסוגר בעצמכם. זה ההרגל הקטן ביותר במאמר הזה, ובדרך כלל הראשון שמשתלם.
שאלות נפוצות
מהי מהירות הקלדה טובה למתכנתים?
כל דבר מכ-40 WPM ומעלה מספיק לעבודה, אם אתם מקלידים סימנים ומספרים בהקלדה עיוורת. מעבר לזה, צוואר הבקבוק הוא חשיבה, קריאה ומיומנות בעורך, לא מהירות האצבעות.
איך לומדים להקליד מספרים בהקלדה עיוורת?
תרגלו את שורת המספרים לבדה עד שהדיוק נשאר ב-95%, עם האצבע שנמצאת ישירות מתחת לכל ספרה בשורת הבית, ואז ערבבו מספרים לתוך טקסט רגיל.