تایپ ده انگشتی برای برنامهنویسها بیشتر دربارهٔ کلیدهایی است که دورههای معمولی تایپ از رویشان میگذرند: ارقام، کروشهها و پرانتزها، عملگرها و ترکیبهای Shift دور و برشان. برنامهنویسی که متن عادی را با 90 WPM تایپ میکند ممکن است در کد کند باشد، و کسی که متن را با 50 WPM تایپ میکند ممکن است در کد سریع باشد. ما این را وقتی دیدیم که در دوران آزمایش، فایلهای کد خودمان را در حالت متن دلخواه میچسباندیم. سرعتها نسبت به حالت کلمه یکسوم یا بیشتر پایین آمد، نقشهٔ حرارتی کلیدها روی ردیف اعداد و انگشت کوچک راست روشن شد، و کندترین جهشها روی توکنهایی بود که پرانتز یا کروشه داشتند.
چرا WPM متن عادی معیار ضعیفی برای تایپ کد است
کد از سه جهت با متن فرق دارد و آزمون تایپی که از کلمههای رایج انگلیسی ساخته شده هیچکدام را نمیسنجد.
اول، ترکیب نویسهها. ما شمردیم. در ده یادداشت اول این وبلاگ، از هر 100 نویسهٔ غیرفاصله حدود 93 حرف، 5 علامت نگارشی و 2 رقم است. در کد JavaScript ابزار خط فرمان npm، حروف به حدود 80 میرسند و نمادها به 19 بالا میروند. ماژولهای json و email در Python بین 80 تا 85 حرف دارند، و یکی از اسکریپتهای build فشردهٔ ما 64، با یکسوم نویسهها نماد. پس کد تقریباً سه تا هفت برابر متن ما نماد دارد. بیشتر آنها در ردیف بالا هستند یا Shift میخواهند، یعنی انگشت کوچک راست و دستدرازیهای ضعیفتر. آزمونهای کلمهٔ انگلیسی ما از 1,000 کلمهٔ رایج یک پیکرهٔ زیرنویس ساخته شدهاند؛ "{" جزو آنها نیست.
دوم، ریتم. متن در رشتههای طولانی تایپ میشود. کد در جهشهای کوتاه میان مکثهایی برای فکر کردن، پیمایش و خواندن تایپ میشود. داوطلبان پژوهش سال 2018 Dhakal و همکاران روی 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% ثابت بماند، با انگشتی که در ردیف اصلی درست زیر هر رقم است، بعد اعداد را با متن عادی ترکیب کنید.