Gõ 10 ngón cho lập trình viên chủ yếu là chuyện những phím mà một khóa học gõ phím thông thường bỏ qua: chữ số, dấu ngoặc, toán tử và các tổ hợp Shift quanh chúng. Một lập trình viên gõ văn xuôi được 90 WPM vẫn có thể gõ code chậm, và một người gõ văn xuôi 50 WPM lại có thể gõ code nhanh. Chúng tôi nhận ra điều này khi dán chính mã nguồn của mình vào chế độ tùy chỉnh trong lúc thử nghiệm. Tốc độ giảm một phần ba hoặc hơn so với chế độ từ, bản đồ nhiệt theo từng phím sáng rực ở hàng số và ngón út phải, và những lần bứt tốc chậm nhất rơi vào các token có dấu ngoặc.
Vì sao WPM văn xuôi là thước đo kém cho việc gõ code
Code khác văn bản ở ba điểm, và một bài kiểm tra gõ phím dựng từ các từ tiếng Anh thông dụng không đo được điểm nào trong số đó.
Thứ nhất là thành phần ký tự. Chúng tôi đã đếm. Trong mười bài viết đầu tiên trên blog này, cứ 100 ký tự không phải dấu cách thì khoảng 93 là chữ cái, 5 là dấu câu và 2 là chữ số. Trong mã nguồn JavaScript của công cụ dòng lệnh npm, chữ cái giảm xuống khoảng 80 và ký hiệu tăng lên 19. Các module json và email của Python có 80 đến 85 chữ cái, và một script build dày đặc của chúng tôi chỉ có 64, với một phần ba số ký tự là ký hiệu. Như vậy code có số ký hiệu nhiều gấp khoảng ba đến bảy lần văn xuôi của chúng tôi. Phần lớn chúng nằm ở hàng trên cùng hoặc cần Shift, nghĩa là dồn cho ngón út phải và những lần với yếu hơn. Các bài kiểm tra từ tiếng Anh của chúng tôi được dựng từ 1.000 từ thông dụng nhất trong một kho phụ đề; "{" không nằm trong số đó.
Thứ hai là nhịp điệu. Văn xuôi được gõ thành những chuỗi dài. Code được gõ thành những đợt ngắn xen giữa các quãng dừng để suy nghĩ, cuộn trang và đọc. Các tình nguyện viên trong nghiên cứu năm 2018 của Dhakal và cộng sự trên 136 triệu lần gõ phím, những người chép lại câu văn, trung bình mất khoảng 239 ms giữa hai phím. Một ngày của lập trình viên đầy những quãng nghỉ kéo dài vài giây, và tốc độ bứt tốc trong các chuỗi ngắn quan trọng hơn bất kỳ con số trung bình nào.
Thứ ba là trình soạn thảo. Tự động hoàn thành, snippet và phím tắt khiến một lập trình viên đang làm việc chỉ gõ một phần nhỏ số ký tự trên màn hình. Không bài kiểm tra gõ phím nào đo được điều đó, và bài của chúng tôi cũng không giả vờ đo được.
Tốc độ gõ phím có quan trọng với lập trình không?
Ít hơn mọi người nghĩ, và ở một chỗ khác. Khi có người hỏi 60 WPM có đủ để làm lập trình viên không, câu trả lời là có, kèm một lưu ý: nếu bạn phải nhìn xuống để tìm ký hiệu và số, thì 60 WPM không phải tốc độ bạn gõ code. Gõ được một dòng mà không đứt mạch suy nghĩ quan trọng hơn tốc độ thô, và nhìn xuống bàn phím chính là thứ làm đứt mạch đó.
Cách gõ ký hiệu nhanh hơn, và vì sao không ai dạy điều này
Một câu hỏi xuất hiện đi xuất hiện lại trên các diễn đàn gõ phím: ai đó gõ 10 ngón các chữ cái với tốc độ khá, nhưng hễ bắt đầu viết code là lại quay về mò tìm ký hiệu, số và thậm chí cả chữ hoa, và họ muốn một cách học dần dần những phím đó, giống như đã học chữ cái, mỗi lần vài phím.
Một phần khiến ký hiệu khó là Shift. Trong mã nguồn npm mà chúng tôi đếm, khoảng 45% số lần gõ ký hiệu là ký tự cần Shift như ( ) { } : và $, gần 9 trên mỗi 100 ký tự không phải dấu cách, chưa tính một chữ hoa nào. Vì vậy hãy sửa thói quen dùng Shift trước: nhấn Shift bằng bàn tay không gõ ký tự đó. ( và ) nằm trên phím 9 và 0 của tay phải, nên dùng Shift trái; ! @ # $ nằm bên tay trái, nên dùng Shift phải. Phần lớn người tự học gõ giữ Shift trái cho mọi thứ, và với ! thì điều đó bắt ngón út trái nhấn hai phím cùng lúc. Hãy kiểm tra thói quen của chính bạn bằng cách gõ một dòng có @ và $ rồi xem ngón út nào di chuyển.
Ký hiệu khó luyện riêng lẻ và luyện kiểu nào cũng chán: chữ cái đi kèm từ, dấu ngoặc đi kèm code, mà code ngẫu nhiên thì chẳng thú vị gì. Câu trả lời của chúng tôi là luyện ký hiệu trên những dòng code thật, mỗi lần một nhóm.
Mỗi lần một nhóm
Đây là thứ tự chúng tôi sẽ dùng, và cũng là thứ tự của lộ trình ký hiệu mà chúng tôi đang xây dựng cho trang luyện tập. Trong lúc chờ nó ra mắt, bạn có thể làm điều tương tự bằng cách dán code thật vào chế độ tùy chỉnh, mỗi lần một nhóm ký hiệu, và không thêm nhóm tiếp theo cho đến khi nhóm hiện tại đạt độ chính xác 95%:
- Chữ số. Hàng số, với các ngón trên hàng cơ sở với lên. Nhóm này đi đầu vì đây là nhóm ngoài chữ cái được dùng nhiều nhất và vì gần như ai cũng có thói quen xấu ở đây, chẳng hạn ngón trỏ gõ cả 4, 5, 6 và 7. Bài kiểm tra số là cách kiểm tra nhanh.
- Dấu ngoặc theo cặp. ( ) trước, rồi [ ], rồi { }. Theo cặp, vì bạn gần như không bao giờ gõ cái này mà không gõ cái kia: trong mã nguồn npm đó, ( xuất hiện 6.195 lần và ) 6.194 lần. Luyện động tác mở và đóng như một đơn vị chính là điều làm nó nhanh. Dấu ngoặc đóng là chỗ nhịp gõ của phần lớn mọi người bị đứt.
- Toán tử. = + - * / và dấu ngoặc góc (< >), cùng các dạng ghép (==, =>, +=, !=). Chúng rải khắp hàng số và các phím dấu câu bên tay phải, và một số cần Shift trên cùng một tay, đó là phần khó chịu.
- Dấu nháy và dấu câu. ' " ; : , . với ngón út phải làm phần lớn công việc. Dấu chấm phẩy và dấu hai chấm là chỗ người gõ họ ngôn ngữ C và người gõ Python khác nhau nhiều nhất, nên hãy luyện trên những dòng code của ngôn ngữ bạn dùng.
- Shell và các ký hiệu lẻ. Dấu gạch đứng, dấu gạch chéo ngược, dấu ngã, dấu backtick, dấu mũ, dấu và (&), dấu thăng, dấu đô la, dấu a còng và phím _. Dấu _ và backtick làm phần lớn mọi người bất ngờ; code kiểu snake_case dùng _ liên tục, và phần lớn người gõ nhấn nó bằng sai ngón.
Mỗi nhóm thường mất một đến hai tuần với các buổi mười phút, nên toàn bộ lộ trình kéo dài hai đến ba tháng. Như vậy chậm hơn học chữ cái, vì các phím ký hiệu nằm xa hơn và những thói quen bạn đang thay thế đã cũ hơn.
Điều thường hỏng, qua việc theo dõi thống kê từng phím: mọi người học ký hiệu bằng đúng ngón rồi quay lại thói quen cũ khi bị áp lực, vì động tác cũ nhanh hơn trong vài tuần. Thống kê thể hiện điều này qua một phím có khoảng thời gian dao động dữ dội, nhanh khi bạn với đúng và chậm khi không. Cách sửa là ở lại với nhóm đó thêm một tuần.
Cặp dấu ngoặc và tự động đóng ngoặc
Trình soạn thảo tự động đóng ngoặc, và điều đó dẫn đến một câu hỏi hợp lý: tại sao phải học gõ dấu ngoặc đóng?
Có hai lý do. Tự động đóng ngoặc không nhất quán: nó hoạt động ở chỗ này nhưng không ở chỗ khác, như terminal hay cửa sổ trò chuyện. Người gõ dựa vào nó sẽ khựng lại mỗi lần để xem nó đã chạy chưa, và cái khựng đó tốn hơn một lần gõ phím. Hơn nữa, gõ đè lên một dấu ngoặc được tự động đóng (nhấn ")" khi trình soạn thảo đã chèn sẵn một dấu) bản thân nó cũng là một lần gõ phím, nên kiểu gì bạn cũng gõ dấu ngoặc đóng.
Khi bạn dán code vào chế độ tùy chỉnh ở đây, văn bản được tách theo khoảng trắng, nên phần thụt đầu dòng biến mất và mỗi token trở thành một từ. Đó vừa là hạn chế vừa là tiện lợi: bạn không phải gõ bốn dấu cách ở đầu mỗi dòng Python, nhưng cũng không được luyện chúng. Một chế độ code đúng nghĩa xử lý thụt đầu dòng và cặp ngoặc tự đóng giống như trình soạn thảo đang nằm trong danh sách của chúng tôi, và nó khó hơn ta tưởng.
Tốc độ gõ code so với văn xuôi
Chúng tôi chưa có đủ kết quả ở chế độ code để công bố phân vị, và chúng tôi thà chờ còn hơn bịa ra. Trong các lượt gõ của chính chúng tôi, tốc độ gõ code trên một đoạn code thực tế vào khoảng một nửa đến hai phần ba tốc độ gõ văn xuôi của cùng người đó, và tỷ lệ này cải thiện nhờ luyện ký hiệu nhiều hơn là nhờ luyện chung chung.
Con số chuyển đổi được là độ chính xác. Một lập trình viên gõ văn xuôi với độ chính xác 97% và gõ code ở 90% có vấn đề với ký hiệu, và bản đồ nhiệt theo từng phím cho thấy chính xác là ký hiệu nào. Một lập trình viên đạt 97% ở cả hai thì chỉ cần gõ code nhiều hơn. Phương pháp tính điểm của chúng tôi giải thích độ chính xác tính các lỗi đã sửa như thế nào.
Để có một mốc chuẩn, bài kiểm tra dấu câu có bật số là chế độ gần với code nhất trong các chế độ thường của chúng tôi. Nó không có dấu ngoặc nhọn, nhưng có phím Shift và hàng số, và với phần lớn mọi người đó chính là khoảng cách.
Những lựa chọn bàn phím có ích
Lời khuyên về bàn phím mà lập trình viên nhận được chủ yếu xoay quanh switch, và phần lớn là lạc đề.
Bố cục quan trọng hơn switch. Dvorak đưa dấu ngoặc lên hàng số và dời phần lớn dấu câu. Colemak và Workman giữ dấu ngoặc ở chỗ QWERTY đặt chúng, nhưng cả hai đều dời dấu chấm phẩy đến chỗ QWERTY đặt P, điều mà lập trình viên họ ngôn ngữ C sẽ cảm nhận rõ. Bài viết về bố cục bàn phím có phiên bản dài.
Một lớp ký hiệu tốt hơn một bàn phím to hơn. Nhiều bàn phím tách đôi và bàn phím nhỏ gọn cho phép bạn đặt dấu ngoặc và toán tử dưới các ngón trên hàng cơ sở, trên một lớp được giữ bằng phím ngón cái. Trong tất cả những thay đổi phần cứng mà lập trình viên kể lại, đây là thứ chúng tôi sẽ thử đầu tiên, vì nó nghĩa là bạn không bao giờ phải nhìn xuống tìm ký hiệu nữa.
ISO và ANSI. Trên bàn phím ISO (Anh và phần lớn châu Âu), phím thừa cạnh Shift trái và phím Enter cao làm thay đổi vị trí của dấu gạch chéo ngược và dấu gạch đứng. Nếu bạn luyện trên loại này và làm việc trên loại kia, ngón út của bạn sẽ gõ trượt. Vì lý do đó, phần giả lập bố cục của chúng tôi có cả hai biến thể của Colemak-DH.
Switch hầu như không ảnh hưởng đến tốc độ. Switch linear, tactile và clicky khác nhau về cảm giác và âm thanh, và nhật ký gõ phím không biết bạn đã nhấn loại nào. Bài viết về bàn phím cơ của chúng tôi đi qua các con số.
Âm thanh giúp một số người nhận phản hồi: âm báo lỗi cho bạn biết một ký hiệu bị gõ sai mà không cần nhìn xuống. Hãy bật nó lên khi học ký hiệu.
Một buổi luyện mười phút cho lập trình viên
Những gì chúng tôi sẽ làm mỗi ngày trong hai hoặc ba tháng của lộ trình ký hiệu:
- Hai phút: một bài kiểm tra từ 30 giây để khởi động, độ chính xác 97%.
- Sáu phút: nhóm ký hiệu hiện tại, trên văn bản tùy chỉnh dán từ code của chính bạn. Dừng lại ngay khi có dấu hiệu quay về ngón cũ.
- Hai phút: một đoạn code bằng ngôn ngữ bạn dùng nhiều nhất. Sau đó xem bản đồ nhiệt theo từng phím, không phải WPM.
Vào những ngày không có mười phút, hãy tự gõ dấu ngoặc đóng. Đó là thói quen nhỏ nhất trong bài viết này và thường là thói quen đầu tiên mang lại kết quả.
Câu hỏi thường gặp
Tốc độ gõ phím bao nhiêu là tốt cho lập trình viên?
Từ khoảng 40 WPM trở lên là dùng được nếu bạn gõ 10 ngón cả ký hiệu và số. Vượt qua mức đó, điểm nghẽn là suy nghĩ, đọc và kỹ năng dùng trình soạn thảo, không phải tốc độ ngón tay.
Làm sao để học gõ 10 ngón các phím số?
Luyện riêng hàng số cho đến khi độ chính xác giữ được ở 95%, dùng ngón nằm ngay bên dưới mỗi chữ số trên hàng cơ sở, sau đó trộn số vào văn bản bình thường.