クラス名・関数名によく使われる英単語

「理系は英語が苦手」という説がある。
真実かどうかは分からないけれど、プログラム書くのに英語は必要*1

たとえばandroid公式リファンレスが英語しかないMSDNも、言語選択を英語にすると日本語モードより多くページが出てくる*2。そのほかの場所でも、日本語ページは一部のみ、残りは英語だけ、ということがある。
本だと代表的な機能しか載ってないから、詳細を知りたいときに英語が読めないと困ってしまう*3。最低でも、クラス名、関数名ぐらいは訳せないと、どんな機能かが分からない。

というわけで、クラス名・関数名に多く使われている単語を調べてみようと思った。手集計…は到底無理なので、javadocリファレンスをプログラムでテキスト解析。
実験対象はJDK6のリファレンス*4。これはきちんと日本語の全訳があるのだけれど、代表的なリファレンスということで。

  • 対象はクラス名と関数名のみ。解説文や引数の名前は無視。
  • 関数名については同じ関数名は1回とみなす。たとえばwrite(String str) とwrite(char[] buf)は1個と数える。
  • 複数のクラスで同じ関数名が実装されていても1回とカウント。toString()やインターフェース関数のカウントが多くなりすぎたから。
  • フィールド、定数名はカウント外。「MODE_〜」などの接頭辞の頻度が増えすぎるから。
  • 複数形や過去分詞は別々のカウント(手抜き)。

つまり「getAccessibleKeyBindingCount」みたいなクラス・関数名をユニークに取り出して、それから単語に分割して数える仕組み。

やってみた結果(リストは長いので「続きを読む」に)。
難しい単語は上位98個にほとんどなかった。これは意外。「get〜」「set〜」「add〜」と一緒に使われる名詞が上位を埋め尽くしてる気もする。
100位以下だとnotificationとかcertificateとかの専門用語ぽい単語が多くなる。「serialize」が頻度1になってるし、数え方が悪いかもしれない。
ほかは「to」「at」の前置詞が思ったより上位なこと、「max」が78で「min」が30と開きがあることなど、色々。ちなみに「exception」とつくクラスは402個あるみたいです。全部暗記したら自慢できそう。

本来の目的、憶えた方が良さそうな単語を抜粋。

単語 カウント
attribute 158
context 158
factory 143
helper 130
handler 105
accessible 97
policy 97
tree 88
map 77

contextは「文脈」じゃなくウィンドウや呼び出しの親子関係とか。Beanにも多い。
factoryはデザインパターンのfactory。たぶん。
helperはなんとなく「ヘルパー」…あとで調べよう。
accessibleはOSのユーザー補助機能。なんでこんなに多いのか分からなかったんだけれど、GUI部品が「Accessible〜」というメソッドをたくさん持っているからの様子。
treeとmapはおそらくjava.utilやDB系。

関数名+クラス名で1万個以上あるのに、単語に分けると2500単語=暗記本1冊程度になるっていうのは、テクニカルライティングとしてすごいのかなーと。
大した情報にならなかったけど、「ほとんどは中学英語でも理解できる」ということで、あとは分からん単語を順次つぶしていけばなんとかなるのかなと思います。

集計がバグっていないことを祈りながら本日は終了したいとおもいます。

上位98単語(〜頻度70)

(全単語数は2467)

get 3700
set 1445
is 625
exception 432
create 409
type 317
listener 301
key 267
name 266
event 224
value 218
default 217
add 202
paint 199
to 192
remove 177
text 169
border 168
stream 165
attribute 158
context 158
write 157
bean 155
menu 155
data 154
row 149
size 149
object 148
factory 143
selection 143
read 142
file 139
class 138
component 136
input 132
icon 131
helper 130
image 127
info 124
model 124
path 124
element 122
pane 118
string 114
index 111
list 109
service 109
update 106
handler 105
count 104
for 102
focus 101
accessible 97
color 97
policy 97
action 96
format 96
source 96
editor 94
column 93
engine 93
layout 93
print 92
new 89
tree 88
line 87
parameter 86
button 85
table 85
all 84
frame 84
basic 81
node 80
error 79
supports 79
at 78
manager 78
max 78
supported 78
tab 78
document 77
map 77
method 77
mouse 77
property 77
time 77
background 76
change 76
drag 76
in 75
next 73
state 73
view 73
content 72
filter 71
server 71
start 71
output 70

99〜231(頻度〜30)

selected 69
insert 68
thread 68
window 67
bar 66
resource 66
as 65
holder 65
field 64
scroll 64
buffer 63
cell 63
current 63
listeners 62
provider 62
changed 61
end 61
invalid 61
has 60
location 60
mode 60
control 59
box 58
item 58
not 58
check 57
child 57
fire 57
popup 57
header 56
of 56
spec 56
system 56
bounds 55
job 55
metal 55
enabled 54
request 54
attributes 53
char 53
entry 53
length 53
socket 53
dyn 52
names 52
operations 52
position 52
array 51
id 51
notification 51
reader 51
xml 51
impl 50
visit 50
internal 49
abstract 47
and 47
code 47
instance 47
point 47
binding 46
certificate 46
offset 46
writer 46
multi 45
root 45
target 45
double 44
message 44
reference 43
result 43
visible 43
drop 42
from 42
last 42
open 42
style 42
byte 41
cert 41
font 41
parse 41
process 41
spi 41
adapter 40
character 40
group 40
by 39
float 39
long 39
width 39
connection 38
label 38
date 37
flavor 37
kit 37
number 37
seq 37
tool 37
client 36
desktop 36
first 36
separator 36
permission 35
relation 35
role 35
short 35
version 35
address 34
can 34
channel 34
combo 34
edit 34
no 34
on 34
local 33
namespace 33
page 33
parameters 33
store 33
any 32
metadata 32
renderer 32
sequence 32
user 32
children 31
auto 30
fault 30
height 30
init 30
java 30
maximum 30
min 30
register 30

*1:語彙が足りないと変数名つけるときに悩みます:)

*2:言語選択で「日本語」にしておくと、翻訳のあるページしかインデックスに出てこない

*3:最近はオープンソースが多いから、「リファレンスじゃなくソースを読むから大丈夫」という人もいるかもしれない:)

*4:http://docs.oracle.com/javase/jp/6/api/