프로그래머를 위한 터치 타이핑: 기호, 숫자, 그리고 중요한 속도

프로그래머를 위한 터치 타이핑은 대부분 일반 타자 강좌가 건너뛰는 키에 관한 거예요. 숫자, 괄호, 연산자, 그리고 그 주변의 Shift 조합이요. 산문을 90 WPM으로 치는 프로그래머가 코드는 느리게 칠 수 있고, 산문을 50 WPM으로 치는 사람이 코드는 빠르게 칠 수 있어요. 저희는 테스트 중에 저희 소스 파일을 사용자 지정 모드에 붙여 넣다가 이걸 알아차렸어요. 속도가 단어 모드보다 3분의 1 이상 떨어졌고, 키별 히트맵은 숫자 행과 오른손 새끼손가락 쪽에 불이 들어왔으며, 가장 느린 버스트는 괄호가 들어간 토큰에서 나왔어요.

산문 WPM이 코드 타자의 지표로 부족한 이유

코드는 세 가지 면에서 텍스트와 다르고, 흔한 영어 단어로 만든 타자 테스트는 그중 어느 것도 측정하지 못해요.

첫째는 문자 구성이에요. 직접 세어 봤어요. 이 블로그의 첫 열 개 글에서 공백이 아닌 문자 100개 중 약 93개가 글자, 5개가 문장 부호, 2개가 숫자였어요. npm 명령줄 도구의 JavaScript 소스에서는 글자가 약 80개로 줄고 기호가 19개로 늘어요. Python의 json과 email 모듈은 글자가 80~85개였고, 저희의 빽빽한 빌드 스크립트는 64개로 문자의 3분의 1이 기호였어요. 즉 코드에는 저희 산문보다 기호가 대략 3~7배 많아요. 그 대부분은 맨 윗줄에 있거나 Shift가 필요해서, 오른손 새끼손가락과 더 불편한 손 뻗기를 써야 해요. 저희 영어 단어 테스트는 자막 말뭉치에서 가장 흔한 단어 1,000개로 만들었는데, 거기에 "{"는 없어요.

둘째는 리듬이에요. 산문은 길게 이어서 쳐요. 코드는 생각하고, 스크롤하고, 읽느라 멈추는 사이사이에 짧게 끊어서 쳐요. 키 입력 1억 3,600만 회를 분석한 Dhakal 등의 2018년 연구에서 문장을 보고 옮겨 친 자원자들은 키 사이 간격이 평균 약 239 ms였어요. 프로그래머의 하루는 몇 초씩 이어지는 공백으로 가득하고, 짧은 구간 안의 버스트 속도가 어떤 평균보다 중요해요.

셋째는 에디터예요. 자동 완성, 스니펫, 키보드 단축키 덕분에 실제로 일하는 프로그래머는 화면에 보이는 문자 중 일부만 직접 쳐요. 어떤 타자 테스트도 이건 측정할 수 없고, 저희 테스트도 그런 척하지 않아요.

프로그래밍에서 타자 속도가 중요할까?

생각보다 덜 중요하고, 중요한 지점도 달라요. 프로그래머가 되기에 60 WPM이면 충분하냐고 묻는다면, 답은 예예요. 다만 단서가 있어요. 기호와 숫자를 칠 때 키보드를 내려다본다면, 코드를 칠 때의 속도는 60 WPM이 아니에요. 생각의 흐름을 끊지 않고 한 줄을 칠 수 있는 능력이 속도 자체보다 중요하고, 그 흐름을 끊는 게 바로 키보드를 내려다보는 행동이에요.

기호를 더 빨리 치는 방법, 그리고 아무도 그걸 가르치지 않는 이유

타자 포럼에서 계속 나오는 질문이 있어요. 글자는 터치 타이핑으로 꽤 빠르게 치는데, 코딩만 시작하면 기호, 숫자, 심지어 대문자까지 다시 눈으로 찾게 된다는 거예요. 그래서 글자를 익혔을 때처럼 키 몇 개씩 점진적으로 익히는 방법을 원해요.

기호가 어려운 이유 중 하나는 Shift예요. 저희가 센 npm 소스에서 기호 키 입력의 약 45%가 ( ) { } : $ 같은 Shift 문자였는데, 대문자를 하나도 세지 않아도 공백이 아닌 문자 100개 중 9개에 가까워요. 그러니 Shift 습관부터 고치세요. Shift는 그 문자를 치지 않는 손으로 누르세요. (와 )는 오른손이 맡는 9와 0에 있으니 왼쪽 Shift를, ! @ # $는 왼손 쪽에 있으니 오른쪽 Shift를 써요. 독학한 사람 대부분은 모든 경우에 왼쪽 Shift를 누르는데, 그러면 !를 칠 때 왼손 새끼손가락이 키 두 개를 동시에 눌러야 해요. @와 $가 들어간 줄을 하나 쳐 보면서 어느 새끼손가락이 움직이는지 보면 내 습관을 확인할 수 있어요.

기호는 따로 떼어 연습하기 어렵고, 연습 자체도 지루해요. 글자는 단어와 함께 나오고 괄호는 코드와 함께 나오는데, 무작위 코드는 재미가 없어요. 저희의 답은 실제 코드 줄로 기호를 한 종류씩 연습하는 거예요.

한 번에 한 종류씩

저희라면 이 순서로 하겠어요. 연습 페이지용으로 만들고 있는 기호 과정의 순서이기도 해요. 그 기능이 나오기 전까지는 실제 코드를 사용자 지정 모드에 붙여 넣어 기호를 한 종류씩 연습하고, 지금 종류가 정확도 95%에 이르기 전에는 다음 종류를 추가하지 않는 방식으로 똑같이 할 수 있어요.

  • 숫자. 홈 행 손가락이 위로 뻗어 치는 숫자 행이에요. 글자가 아닌 문자 중 가장 많이 쓰이고, 검지로 4, 5, 6, 7을 모두 치는 것처럼 거의 모든 사람이 나쁜 습관을 갖고 있어서 가장 먼저 해요. 숫자 테스트로 빠르게 확인할 수 있어요.
  • 쌍으로 익히는 괄호. ( )부터, 그다음 [ ], 그다음 { }. 하나만 치는 일이 거의 없어서 쌍으로 익혀요. 앞의 npm 소스에서 (는 6,195번, )는 6,194번 나와요. 여닫는 동작을 한 단위로 훈련해야 빨라져요. 대부분의 사람은 닫는 괄호에서 리듬이 깨져요.
  • 연산자. = + - * /와 꺾쇠괄호, 그리고 복합 형태(==, =>, +=, !=). 숫자 행과 오른손 문장 부호 키에 흩어져 있고, 몇 개는 같은 손으로 Shift를 눌러야 해서 그게 까다로운 부분이에요.
  • 따옴표와 문장 부호. ' " ; : , .로, 대부분 오른손 새끼손가락이 맡아요. 세미콜론과 콜론은 C 계열과 Python 사용자가 가장 다른 부분이니, 내가 쓰는 언어의 코드 줄로 연습하세요.
  • 셸과 나머지 기호. 파이프, 백슬래시, 물결표, 백틱, 캐럿, 앰퍼샌드, 해시, 달러, 골뱅이, 그리고 _ 키. _와 백틱은 대부분의 사람을 놀라게 해요. snake_case 코드는 _를 끊임없이 쓰는데, 대부분은 이걸 잘못된 손가락으로 쳐요.

종류마다 대부분의 사람은 10분씩 연습해서 1~2주가 걸리니, 전체 과정은 2~3개월이에요. 글자를 익히는 것보다 느린데, 기호 키가 더 멀리 있고 바꿔야 할 습관이 더 오래되었기 때문이에요.

키별 통계를 지켜보며 알게 된 흔한 실패가 있어요. 사람들은 올바른 손가락으로 기호를 익혔다가, 압박을 받으면 예전 방식으로 돌아가요. 몇 주 동안은 예전 동작이 더 빠르기 때문이에요. 통계에서는 이게 간격이 크게 들쭉날쭉한 키로 나타나요. 제대로 뻗으면 빠르고, 아니면 느려요. 해결책은 그 종류를 한 주 더 연습하는 거예요.

괄호 쌍과 자동 닫기

에디터가 괄호를 자동으로 닫아 주니 이런 질문이 나올 만해요. 왜 닫는 괄호를 치는 법을 배워야 할까?

이유는 두 가지예요. 자동 닫기는 일관적이지 않아요. 어떤 곳에서는 작동하고 터미널이나 채팅 창 같은 곳에서는 작동하지 않아요. 여기에 의존하는 사람은 작동했는지 확인하느라 매번 머뭇거리게 되고, 그 머뭇거림이 키 입력 한 번보다 비싸요. 그리고 자동으로 닫힌 괄호 위에 덮어 치는 것(에디터가 이미 넣은 ")"를 다시 누르는 것)도 키 입력이라서, 어느 쪽이든 닫는 괄호는 치게 돼요.

이 사이트의 사용자 지정 모드에 코드를 붙여 넣으면 텍스트가 공백 기준으로 나뉘어서, 들여쓰기가 사라지고 각 토큰이 하나의 단어가 돼요. 이건 한계이면서 동시에 편리한 점이에요. Python 줄마다 앞에 스페이스 네 개를 칠 필요가 없지만, 그 연습도 하지 못해요. 들여쓰기와 자동으로 닫히는 쌍을 에디터처럼 처리하는 제대로 된 코드 모드는 저희 할 일 목록에 있고, 생각보다 어려워요.

코드 속도와 산문 속도

백분위를 발표할 만큼 코드 모드 결과가 충분하지 않고, 저희는 숫자를 지어내느니 기다리는 쪽을 택해요. 저희가 직접 해 본 바로는 현실적인 코드 조각을 칠 때의 속도가 같은 사람의 산문 속도의 절반에서 3분의 2 정도였고, 그 비율은 일반 연습보다 기호 연습으로 더 많이 좋아졌어요.

그대로 옮겨 가는 숫자는 정확도예요. 산문은 정확도 97%, 코드는 90%로 치는 프로그래머라면 기호에 문제가 있는 거고, 키별 히트맵이 정확히 어떤 기호인지 보여 줘요. 둘 다 97%라면 코드를 더 많이 치기만 하면 돼요. 점수 계산 방식에서 고친 오타가 정확도에 어떻게 계산되는지 설명해요.

표준 기준으로는 숫자를 켠 문장 부호 테스트가 저희 일반 모드 중 코드에 가장 가까워요. 중괄호는 없지만 Shift 키와 숫자 행이 들어가고, 대부분의 사람에게 부족한 부분이 바로 그거예요.

도움이 되는 키보드 선택

프로그래머가 듣는 키보드 조언은 대부분 스위치에 관한 것이고, 대부분 핵심에서 벗어나 있어요.

스위치보다 자판 배열이 더 중요해요. Dvorak은 괄호를 숫자 행으로 올리고 문장 부호 대부분의 위치를 옮겨요. Colemak과 Workman은 괄호를 QWERTY와 같은 자리에 두지만, 둘 다 세미콜론을 QWERTY의 P 자리로 옮겨서 C 계열 프로그래머는 체감하게 될 거예요. 자세한 내용은 자판 배열 글에 있어요.

더 큰 키보드보다 기호 레이어가 나아요. 많은 분리형·소형 키보드에서는 엄지 키를 누르고 있는 동안 작동하는 레이어에 괄호와 연산자를 홈 행 손가락 아래로 배치할 수 있어요. 프로그래머들이 이야기하는 하드웨어 변경 중에서 저희가 가장 먼저 시도해 볼 건 이거예요. 기호를 치려고 키보드를 내려다볼 일이 다시는 없어지니까요.

ISO와 ANSI. ISO 키보드(영국과 유럽 대부분)에서는 왼쪽 Shift 옆의 추가 키와 세로로 긴 Enter 키 때문에 백슬래시와 파이프의 위치가 달라져요. 한쪽에서 연습하고 다른 쪽에서 일하면 새끼손가락이 빗나갈 거예요. 그래서 저희 에뮬레이션은 Colemak-DH를 두 가지 버전으로 모두 제공해요.

스위치는 속도에 거의 영향이 없어요. 리니어, 택타일, 클릭 스위치는 느낌과 소리가 다르지만, 키 입력 로그는 어떤 스위치를 눌렀는지 몰라요. 기계식 키보드 글에서 숫자를 살펴봐요.

소리는 어떤 사람에게 피드백으로 도움이 돼요. 오타음이 나면 키보드를 내려다보지 않아도 기호가 틀렸다는 걸 알 수 있어요. 기호를 익히는 동안 켜 두세요.

프로그래머를 위한 10분 연습

기호 과정에 걸리는 2~3개월 동안 저희라면 매일 이렇게 하겠어요.

  • 2분: 준비 운동으로 30초 단어 테스트, 정확도 97%.
  • 6분: 지금 익히는 기호 종류를 내 코드에서 붙여 넣은 사용자 지정 텍스트로. 예전 손가락으로 돌아가는 기미가 보이면 바로 멈추세요.
  • 2분: 가장 많이 쓰는 언어로 된 코드 조각 하나. 끝난 뒤에는 WPM이 아니라 키별 히트맵을 보세요.

10분이 없는 날에는 닫는 괄호를 직접 치세요. 이 글에서 가장 작은 습관이고, 대개 가장 먼저 효과가 나타나요.

자주 묻는 질문

프로그래머에게 좋은 타자 속도는?

기호와 숫자를 터치 타이핑으로 칠 수 있다면 약 40 WPM 이상이면 충분해요. 그 이상에서는 손가락 속도가 아니라 생각, 읽기, 에디터 활용 능력이 병목이에요.

숫자를 터치 타이핑으로 치는 법은 어떻게 배우나요?

각 숫자 바로 아래 홈 행에 있는 손가락을 써서, 정확도가 95%로 유지될 때까지 숫자 행만 따로 연습하세요. 그다음 일반 텍스트에 숫자를 섞어 연습하세요.

출처