プログラミングでよく使う英単語のまとめ【随時更新】

# プログラミングでよく使う英単語のまとめ【随時更新】
随時追加、整理していきます。

名前をつけるときには、名詞、動詞の違い、複数形、過去形などに注意しましょう。
オブジェクト指向では、クラス名は名詞、メソッドは動詞とします。

英語は、原則としてアメリカ英語を優先します。
様々な命名方法がありますが、重要なことはプロジェクトで一貫することです。

## 使ってはいけない言葉

**get / set**
アクセサ (getter / setter) やプロパティによく使われている。
それ以外に使うと混乱を招くのでよくない。
get は軽量な処理と考えるので、中に重い処理は書いてはいけない。
単純な取得/設定以外で使いたくなったら他の言葉を考える。

```
load, save, commit, store, enable, disable,
fetch, register, configure, add, etc...
```

**check**
意味が広すぎて何をしているかわからない。
できるだけ別の言葉を使う。
具体的に何をしているかに分解して考えるとよい。
代わりによく使われるメソッド/プロパティ名は下記の通り。

```
isNull, isEmpty, isNullOrEmpty, isValid, canSave, canClose,
hasSaved, hasChanged, exists, contains, etc...
```

チェックマークをつける意味で check を使う場合は例外。
check 自体を避けたい場合は putCheckmark とする。

**change**
何をどう変更しているのかわからない。
check と同様に具体的な名前にできないか考えてみるとよい。
例外として isChanged のフラグを変更するための Change メソッドに使う場合がある。

**xxxManager / xxxController**
こういう名前をつけるとクラスが肥大しやすい。
単一責任の原則にのっとってクラスを設計するべし。
UNIX 哲学にも「Small is beautiful.」という考え方がある。

**xxxType, xxxData, xxxItem, xxxInfo**
冗長になりやすい。
Type, Data, Item, Info を取っても意味が通じないか検討してみる。



## 使わないほうがよい言葉

**compare**
比較する。
便利なときもあるが、比較した結果がどうなるか分かりにくいので他の動詞を検討する。
例外としてソートで使う Comparer や Comparator がある。

```
exists, contains, equals, isSmall, max, min, etc...
```

**toggle**
切り替える、入れ替える。
実行するたびに状態が切り替わるので、デバッグが大変になる。
便利なときもあるが、切り替えた状態がどうなるか分かりにくいので他の動詞を検討する。

```
turnOn, turnOff, switchOn, switchOff, etc...
```

**result**
返り値。
何も考えずに使えるが、具体的に何が帰ってきているのかわからない。
可能な限り具体的な変数名を使えないか検討する。

```
isSuccess, count, newId, items, mappedDto, etc...
```



## 使うのに注意が必要な言葉

**service**
サービスを提供するものは全てサービスと呼べる。
フレームワークで定義されているものと、独自で定義したものが混ざりやすい。
サービスだらけになると全体像をつかむのが困難になる。

**util / helper**
増殖、肥大化しやすい。
どこに入れるか迷う場合は一時的に使うが、そのまま使い続けられることが多い。
単機能なクラスに分割し、役割が明確な名前を付けるとよい。

```
CsvImporter, DateTimeFormatter, etc...
```



## 対になる言葉

**comment out / uncomment**
コメントにする、コメントを解除する。
comment out は into a comment の意味。
comment だけならコメントする、評するの意味になる。

**add / remove**
追加する、削除する。
リストなどに値を入れる場合などにも使われる。
特に、末尾に追加する場合は append、先頭に追加する場合は prepend を使う。
Add A to B で、A を B に加える。
Remove A from B で、B から A を取り除く。

**start / stop**
開始する、止める。名詞だと開始、停止。
静止状態から動き出す感じが start。
途中からでも使える。
バーコードや通信の符号で StartCode / StopCode という使い方をする。

**begin / end**
始める、終わる。
最初の一歩を踏み出す感じが begin。
始めにしか使えない。
C 言語では慣例的に、begin は包含、end は排他としている。

**first / last**
初め、終わり。
単純な並びの場合や数を数える場合は first を使う。
数えられない場合は beginning を使う。

**min / max**
最小、最大。

**top / last**
先頭、末尾。
順位やレベルを意識する場合は top を使う。

**head / tail**
頭・尾から転じて先頭・末尾。
ファイルの先頭や末尾を表すのに使う。

**header / footer**
ヘッダー、フッター。
本文を表す場合は text や body が使われる。

**top / bottom**
頂上、底辺。

**up / down**
上へ、下へ。

**horizontal / vertical**
水平の、垂直の。
スクロールバーの方向を表すのに使う。

**landscape / portrait**
横方向、縦方向。
印刷やスマホの画面の方向を表すのに使う。

**width / height / depth**
横幅、高さ、奥行。
業界によって LHW や WDH という表現がある。
L は length(長さ) のこと。

**upper case / lower case**
大文字、小文字。

**wide / narrow**
広い、狭いから転じて全角、半角。
full-width と half-width でも全角と半角。
two-byte character と one-byte character で 2 バイト文字と 1 バイト文字。

**under / over**
未満、超過。

**or under / and over**
以下、以上。
greater than とか not less than など多数の言い方がある。
省略語も多く、LE / GE が多く使われる。
LE は less than or equal, less or equal のこと。

**earlier / later**
前の、後ろの。
ソフトウェアのバージョンを表す場合に使う。
version 3.0 or later でバージョン3.0以降。

**go / back**
前へ、後ろへ。
異なる階層間の移動のイメージ。

**previous / next / current**
前の、次の、現在の。
同じ階層での横移動のイメージ。
動詞にする場合は、goNext, moveNext など。
current は現在の位置を表す場合などに使われる。

**forward / backward**
前方、後方。

**foreground / background**
前景、背景。
撮影などでは middle-ground で中景と表現する。

**push / pull**
入れる、引っ張る。
Git のコマンドで使われている。
git push と反対の動作は git pull ではなく git fetch となる。

**push / pop**
箱に入れる、中から取り出す。
皿を重ねるイメージ。
スタックに対して使う。

**enqueue / dequeue**
キューに追加する、キューから取り出す。
queue は待ち行列の意味。
※末尾は上上(ueue)で覚えておくとスペルに迷わない。

**before / after**
適用前、適用後。

**parent / child / children / sibling / self**
親、子、子供達、兄弟、自身。
XML や Tree の Node を示す場合などに。

**ancestors / descendants**
先祖、子孫。
たいてい複数形で用いる。
Git の履歴や Tree などに。

**do / undo / redo**
実行、取り消し、再実行。
電子カルテの do は ditto (前と同じ) の意味。

**open / close**
ファイルやソケットを開く、閉じる。

**commit / omit**
保持する、除外する。
git commit のコマンドで使われている。

**commit / rollback**
トランザクションを書き出す、取り消して巻き戻す。
データベースやメッセージキューなどで使われている。

**backup / restore**
データベースをバックアップする、復元する。

**create / delete / restore**
ファイルを作成する、削除する、復元する。

**connect / disconnect**
回線を接続する、切断する。
connection を略す場合は con ではなく conn とする。

**source / destination**
送り元、送り先。
略す場合は src, dst とすることが多い。

**input / output**
入力する、出力する。
デバイス(画面やキーボードなど)からの入出力。
ファイルなどの場合は変換がないときに使う。

**include / exclude**
含む、含まない。

**inclusive / exclusive**
含まれる、含まれない。
日付や範囲を表す場合に明示的に使う。
startInclusive、endExclusive。

**import / export**
取り込む、輸入する、インポート。
外に出す、輸出する、エクスポート。
内容を変更してから処理する場合に使う。

**explicit / implicit**
明示的な、暗黙的な。
ex- の語幹は out- なので、開放的。
迷ったら import / export の関係を思い出すとよい。

**lossy / lossless**
不可逆、可逆。

**encode / decode**
エンコード、デコード。
符号化する、複合する。

**encrypt / decrypt**
暗号化する、復号(解読)する。
日本語の問題だが、「暗号化する」の反対は「復号"化"する」ではないので注意。

**compress / decompress**
圧縮する、解凍する。
純粋な圧縮処理、ビット単位の処理にも使える。

**compress / extract**
圧縮してアーカイブする、解凍して取り出す。
複数ファイルの文脈で使われることが多い。

**zip / unzip**
ZIP圧縮する、ZIPを解凍する。

**pack / unpack**
バイナリデータを詰め込む、展開する。
ネットワークプロトコルなどで。

**download / upload**
ダウンロードする(サーバー→クライアント)、アップロードする(クライアント→サーバー)。

**request / response**
要求、希望、リクエスト。
返答、反応、レスポンス。
略す場合は req, rsp とすることが多い。

**request / respond**
リクエストする、返答する。

**ACK / NACK**
肯定応答、否定応答。
シリアルケーブルやソケットでの通信で使う。
ACK: ACKnowledgemen
NACK: Negative ACK

**fetch / post**
取得する、投稿する。
ネットワーク越しにデータを取ってくる場合は fetch が使える。
post の代わりに send でも可。

**serialize / deserialize**
シリアライズする、復元する。
シリアライズとはメモリ上にあるデータをファイル形式に変換する処理。

**read / write**
ファイルやポートを読み出す、書き込む。
read は読む行為そのものを指す。

**save / load**
保存する、読み込む。
読み出して取り込む(設定する)までが load。

**set / unset / reset**
設定する、解除する、初期位置に再設定する。

**allocate / deallocate**
リソースを確保する、リソースを解放する。
release も使える。

**check / uncheck**
チェックを入れる、チェックをはずす。

**lock / unlock**
ロックする、解除する。

**mount / unmount**
ストレージの接続、切り離し。
コンテナやVMでも使う。

**sync / async**
同期の、非同期の。
ここでの a- の接頭辞は否定の意味を持つ。

**attach / detach**
結びつける、切り離す。
データベースのファイルや外部プログラムのデバッグ時に使用されている。

**suspend / resume**
休止する、復帰する。

**enable / disable**
有効にする、無効にする。

**active / inactive**
有効な、無効な。

**activate / deactivate**
アクティブ化する、非アクティブ化する。

**show / hide**
表示する、非表示にする。

**visible / hidden**
表示の、非表示の。
hidden の方が invisible より物理的な感じ。

**valid / invalid**
有効な、無効な。
validation で検証の意味。

**collapse / expand**
折りたたむ、展開する。
ツリーを操作する場合に使う。

**zero padding / zero suppression**
ゼロ埋め、ゼロ抑制。
123 → 00123 が5桁のゼロパディング。
00123 → 123 がゼロサプレス。

**normal / abnormal**
正常、異常。
明確な基準があって、当てはまっているか。

**normal / error**
正常、異常。
正常(通常、普通)とそれに失敗したこと。

**regular / irregular**
規則的な、不規則的な。日常的な、非日常的な。
一定の繰り返しパターンがあり、そこに当てはまるか。
テレビ出演者のことをレギュラーと呼ぶが、毎回出演することから。

**general / special**
一般的な、特別な。
general は全体的、世間一般な感じ。

**ordinal / special**
平凡な、特別な。
ordinal は特筆すべきことがないネガティブな感じ。

**common / special**
共通の、固有の。
common settings で共通設定。

**common / personal**
共用の、個人の。

**common / uncommon**
ありふれた、ありふれていない。

**social / personal**
社会的な、個人的な。

**public / private**
公の、私的な。

**organization / individual**
組織、個人。

**available / unavailable**
利用可能、利用不可または入手可能、入手不可。

**success / failure**
成功、失敗。
success と error を使う場合も。
OK と NG は和製英語なため、工場くらいでしか通じない。

**good / bad**
よい、悪い。
より具体的に品質が劣化していることを指摘したければ poor が使える。
優、良、可、不可は excellent、good、fair、fail などが使われる。

**accept / refuse**
承諾する、拒否する。

**allow / deny**
許可する、拒否する。アラウ、ディナイと発音する。
ファイルシステムのパーミッションやネットワーク関連では失敗するとよく denied と言われる。

**host / guest**
ホスト、ゲスト。
客を招く側がホスト。サーバーの意味でも使われる。
客がゲスト。

**server / client / peer**
サーバー、クライアント、ピア。
サービスを提供する側がサーバー。
依頼する方がクライアント。
接続している相手のコンピュータのことはピア。

**provider / consumer**
供給者、消費者。
React の useContext などで使われる。

**provider / user**
提供者、使用者。
DICOM の SCP と SCU はサーバーとクライアントの意味で使われる。

**caller / callee**
発信者、受信者から転じて関数の呼び出し元と呼び出し先。
末尾が ee で終わると「された人」を表す。
employee (従業員)、examinee (被験者)など。

**duplicate / dedupe**
重複、重複排除。
dedupe は動詞で重複を排除する意味でも使われる。

**mutable / immutable**
可変の、不変の。
immutable は一度作成した変数の内容を変更できないこと。
mutable はその逆で変更できてしまうということ。

**built-in / plug-in**
組み込みの、プラグインの。
plug-in は付けはずしができる場合に使われる。

**on-premise / cloud**
premises で施設。on- をつけて、施設内で。つまり自社システム。
クラウドはインターネットを介したシステム一般のこと。クラウドサービスなど。

**monolith / microservices**
モノリス、マイクロサービス。
モノリスは一枚岩。ひとつのexe。
マイクロサービスは多数のサービスの集まり。

**subscribe / unsubscribe**
イベント購読する、イベント購読を解除する。
Pub-Subパターンなどで。

**haystack / needle**
干し草の山 / 針。
干し草の山から針を探すという諺から。
仮引数名に haystack と needle を使うことで、一目で伝わりやすい。
`int strings.Find(string haystack, string needle) { ... }`


## 似た意味の言葉 / ニュアンスの違い

**log in / log out**
**log on / log off**
**sign in / sign out / sign up / sign on**
log は航海日誌(log, logbook)が語源。転じて PC のログに記録すること。
log in は主に Linux で使われる。アカウントに入る。
log on は主に Windows で使われる。
sign は署名なので、PC がない時代から使われている。
sign in は主に Web で見かける。署名して入る。
sign up は申し込む場合。アカウントを作成する。
sign on は書類にサインする場合。
login, logon, signin は用法に違いはない。

**certification / authentication**
certification は権威をもった第三者が証明するイメージ。認証局による証明。
authentication は二者間での証明。パスワード認証など。本人確認。
日本語ではどちらも証明や認証となるので混乱する。

**authentication / authorization**
authentication は認証。ログインなどで使われる。AuthN と略される。
authorization は認可(承認)。ログイン後に、その操作が許可されているか確認するためのもの。AuthZ と略される。
あまりみないが AuthC や AuthR と略されることもある。
auth だけだと AuthN で使われることが多いが、文脈を読み込む必要がある。
ちなみに OAuth は authorization の方。
認証認可でセットで扱われることが多い。

**identify / identification / identifier / identity**
そのユーザーが本人か識別するのを identify。動詞。
識別する行為そのものは identification。identify の名詞形。識別、ID、身分証。
そのユーザーを特定するために用い情報を identifier。識別子。氏名、変数名など。
そのユーザーを特徴付けるあらゆる情報を identity。アイデンティティ、同一性。

**classify / classification / class**
classify は分類する。動詞。
classification は分類分け。classify の名詞形。
class は分類された区分。

**category / genre / group**
category は分類、種類、ジャンルのこと。
genre (ジャンル)というのは特に芸術やエンタメで使われるカテゴリのこと。
group は共通性を持つ集団。どのカテゴリに属しているグループか。

**kind / type**
kind は大まかな種類分けで用いられる。品種。
type は一般的な意味で種類を表す。より具体的な感じ。種類。

**class / rank**
class は階級、等級、層を表す。区切りはしっかりしているが、幅がある感じ。
rank は外部からの評価に対して使われる感じ。class より順位を意識させる。

**grade / level**
grade は等級や段階を表す。上下や優劣を表すが、幅がある感じ。
level は水準を表す。grade より具体的な感じ。

**region / realm / domain**
region は地方や地域を表す領域。
realm は領土や分野や部門を表す領域。
domain は活動範囲や分野を表す領域。
コードを折りたたむ領域を指定する場合は region を使う。
クラウドでサーバーが置いてある地域を表す場合は region を使う。
ログインサーバーで区切る領域を表す場合は realm を使う。
インターネットの住所、所有地を表す場合は domain を使う。
ビジネスでの専門分野やプログラム上での役割を表す場合は domain を使う。ドメイン駆動。

**config / setting / preference**
構成、ハードよりの設定、開発者が設定するものは config。
ソフト側の設定、ユーザーが変更できるものは setting。
ユーザーが設定するもので特に表示や挙動の好みの設定は preference。
基本は config と setting の使い分けで十分。

**initialize / set up**
初期化する。セットアップする。
どちらも一番初めに行う意味合いが強い。
setup は名詞だが、set up だと動詞。
終了の時に行うのは finalize。

**stop / end / finish / complete / terminate**
一時的な終了で、再開する可能性がある場合は stop。
明示的な終了で、再開しない場合は end。
予定や作業の完了で、最後までやり遂げるのが finish。
目標を達成して終わるのが complete。完璧な感じ。
行き止まりまでいって終わるのが terminate。締めくくる感じ。
terminate は強制終了や異常終了時にも使われる。

**stop / suspend / pause**
動いているものを止めるのが stop。再開する可能性がある。
一時停止の場合は suspend。一息ついた感じ。
一旦動きを止める場合は pause。いつでも動き出せる。

**stop / break / abort / quit / exit**
動いているものを止めるのが stop。意味が広い。
割って入って中断するのを break。
異常によって中断されるのが abort。
現在の状態から離れるのを quit。
出口から抜け出すのを exit。その場所から立ち去る。

**show / display**
表示するのは show。
人が見やすい場所に表示(展示)するのが display。

**calculate / compute**
数式を使った計算をするのが calculate。
難解な計算をするのが compute。行列やハッシュの計算など。

**expression / formula**
数式やプログラミングの評価式を表すのは expression。
公式を表すのは formula。
イコールを使う等式、方程式は equation。
不等式は inequality。

**update / upgrade**
最新のものにするのが update。
より優れたものに置き換えるのが upgrade。update より交換の意味が強い。
Windows Update はパッチを当てるだけ。
Windows 8 から 10 に変更するのは upgrade。
バージョンアップは和製英語。

**update / refresh**
最新のものを取得するのが update。
新たにするのが refresh。全体を更新するニュアンスがある。
画面の更新なら update より refresh がよい。
Windows では画面を更新する場合に Invalidate (無効化する)が使われるが、
描画領域を無効化することによって再描画を促すため。

**updated / changed / modified / revised**
情報を最新にした、更新したのが updated。
全面的に変更した場合は changed。
修正や改善した場合は modified。
書類の修正や改定、改版した場合は revised。

**adjust / adapt**
何かに合わせて調節するのが adjust。サイズをピッタリ合わせる。
周りの環境に合うように変更するのが adapt。コネクタの形に合わせるのがアダプター。

**fix / repair / restore / recover**
問題を解決する、元の状態に戻す、固定するのを fix。意味が広くいろいろ使える。
複雑な機械を専門知識のある人が修理するのを repair。比較的小さいものに使う。
元の状態に復元するのを restore。価値の高いものや大きなものに使う。バックアップから戻すときにも使う。
なんとか元の状態を取り戻す、復旧するのを recover。元通りでなくても回復すればよい。OS の上書きインストールなど。

**output / export**
そのまま出力するのが output。
変換して書き出すのが export。

**find / search for / look for / seek**
見つかるのを期待するのが find。
探してみるのが search。
look for は最も一般的な探すという意味だが、見つけるのが比較的カンタンな場合に使用する。
目に見えないモノを探すときは seek。

find は見つかるのが前提なので、探してみる場合は try をつける、または search for を使う。
失敗する可能性のあるメソッドに try をつけて、bool を返す用法がある。
try to find は冗長だし、困難なニュアンスがある。
`bool Find(object target)`
`bool TryFind(object target)`

search は目的語に場所を指定するのでメソッドにする場合は注意。
`bool Search(object place, object target)`
`bool SearchFor(object target)`

**search / retrieve**
検索するのが search。
検索して取ってくるのが retrieve。
search は候補を並べて評価する手法のときに用いる。

**toXXX / convertToXXX / XXX.parse / XXX.tryParse**
XXX に変換する。
メソッド名は動詞が原則だが、to は例外的に用いられる。
try がつく場合は変換を試み、論理値を返す。

**encode / decode / convert**
アナログからデジタルに変換するのが encode。
デジタルからアナログに戻すのが decode。
デジタルからデジタルに変換するのが convert。

**convert / transform / translate**
等価なものに変換するのが convert。摂氏華氏、ドル円など同じものに変わるイメージ。
組成が異なるものに組み替えるのが transform。形ががらりと変わったり、数式を変えるイメージ。
まったく別物に変換するのが translate。翻訳など別の何かに変わるイメージ。

**clear / delete**
中身だけ消すのが clear。
外側も含めてすべて削除するのが delete。

**erase / trash / delete**
消しゴムで消すのが erase。物理的でアナログな感じ。復元できない。
ゴミを捨てるのが trash(俗)。アナログな感じ。ゴミ箱がある。
削除するのが delete。デジタルな感じ。復元できる。
テープやメモリの消去には慣例的に erase が使われる。
erase した後には上書きできるイメージ。

**create / generate / make / build**
創造する、何もないところから生み出すのが create。
何かを変換して生成するのが generate。
材料を組み立てて作るのが build。
材料から作り出すのが make。
明示的にインスタンスを作るときは create を使うことが慣例。

**parameter / argument**
メソッドに定義してあるのが parameter。
メソッドに渡された値は argument。
仮引数(parameter)と実引数(argument)とも言われる。
話す上ではどちらでも通じる。

**property / attribute**
どちらも属性で用法に違いはない。
ただし、分野や製品によって使い分けられている。
オブジェクト指向のクラスの性質を表すのは property。
HTML のタグの属性は attribute。

**number / numeric**
数字、番号のことを表すのが number。
数字のこと、特に 10 進数を表すのが numeric。
numeric の方がより数学的な感じ。

**sum / total**
金額や合計、要約する、足し合わせたものが sum。
合計、全体の、特に総計を表すのが total。
小計は subtotal。

**max / limit**
単純な最大値を表すのが max。
超えたらダメな値を表すのが limit。
リーダブルコードによると限界値を含める場合は min / max がよいとされている。
first / last と begin / end の使い分けにも言及されている。

**limits / bounds / range**
境界、制限範囲、制限区域が limits。制限の意味が強い。
限界内、境界線が bounds。より数学的な感じ。境界を示している。
値が変動する幅、上限下限のある範囲が range。範囲を示している。
limits と bounds は複数形で用いられる。
bounds check で境界チェック。

**top / peak / spike**
頂上、てっぺん、先端が top。
山脈の中のひとつの頂上が peak。
折れ線グラフなどの尖りは spike。
迷ったら top を使えば間違いない。

**exclude / ignore**
排除する、締め出す、考慮しないのが exclude。
無視する、気がつかないフリをするのが ignore。

**state / status**
状態や状況を意味するのが state。
状態という言葉を意味するのが status。
ゲームのキャラの status で、毒という state にあると考えるとよい。

**locale / local**
アプリケーションを使用する国や地域、言語の設定などを表すのが locale。
LAN(Local Area Network)からわかるように、地元やそのコンピュータ自身を表すのが local。
ロ<b>ケ</b>ール(aを強調)と<b>ロ</b>ーカル(oを強調)。

**letter / text / character**
a とか b とかの文字自体のことは letter。
文字列や本文のことは text。
記号や文字のことは character。
集合的にアルファベット全体、文字全体を指す場合もある。

**title / caption**
本や記事の見出し、題名、表題が title。
短い説明文、ページの見出しが caption。

**theme / subject / topic**
特定の話題を表すのが theme。subject より感覚的な感じ。
主題、議題、大きな項目を表すのが subject。
小さな話題を表すのが topic。subject の下にぶら下がる感じ。

**summarize / brief**
内容全体を簡潔にまとめるのが summarize。レポートや記事などの長い内容に使う。
重要な情報を端的に伝えるのが brief。ミーティングやプロジェクトの要点に使う。

**issue / problem**
問題、論点、争点、話し合うべきことを issue。
困難を引き起こす問題で、解決が必要なのを problem。

**common / shared**
持ち主がいない多数が利用できる共有が common。
持ち主がいて分け与える意味での共有が shared。
共通設定は common、共有フォルダは shared を使う。

**individual / personal**
多くの人々に対しての個人が individual。個別の。
人数に関係なく、他の誰でもない、その個人を表すのが personal。個人的な。
個人を特定しない従業員一人ひとりを表す個人などは individual を使えば良い。

**just / only**
何かを基準にして、ちょうど、たった今を表すのが just。
絶対的な意味で、唯一の、たったひとつのモノをあわらすのが only。

**within / inside of / less than**
within は時間、距離、範囲を意味する以内。感覚的な感じ。
within 3 sec で 3 秒以内。in 3 sec だと 3 秒後。
inside of は具体的な場所を示す。
less than は数字全般で使える。未満。以下なら or less。

**validate / verify**
要求を満たしているか、正しいのか確認するのは validate。入力チェックなどに。
工程の一部として組み込まれているチェックやテストが verify。より限定的な感じ。
CD/DVD の書き込み工程の最後に verify がある。
日本語にするとどちらも検証するとなる。

**permit / allow / accept / grant**
法律や公式、免許で許可するのが permit。違反すると罰がある、硬いイメージ。
人が何かをするのを許可するのが allow。口語的な感じ。立場が上で偉そう。
要求を受け入れ承認するのが accept。立場は関係ない。
許しを与えられるのが grant。支給や付与されるイメージ。

**permission / privilege / authority**
permittionは原則禁止されているものの許可。ファイルアクセス権限のプロパティ。
privilegeは特別な許可、特権。ユーザー権限のプロパティ。
authorityはその行為を行うことを許されている権限。広い意味での権限。

**memo / note**
業務で記録するのは memo。
メモ書き、記録として残しておくのが note。
英語と日本語ではメモとノートのニュアンスが異なる。

**remark / note / comment**
ちょっとした備考や注釈の場合は remark。
一般的な備考の場合は note。気づきを与える。
コメントする、意見を述べるのが comment。

**notice / caution / warning**
大切なことが書いてあるから読んでほしいのが notice。
注意や警告は caution。
絶対にしてはいけないのが warning。
コンパイラで warning はありふれているが、実際は強い警告の意味がある。

**table / figure**
table はデータを見やすく表にしたもの。
figure はデータを図にしたもの。
論文でよく登場する表現。

**plot / graph**
plot はグラフに書き出されたもの。概念的な感じ。
graph はグラフや図表、図式など。数学的な感じ。

**chart / diagram**
chart は物事をわかりやすく図示したもの。棒グラフ、天気図。
diagram は流れや関係性、意図を図示したもの。ネットワーク図、フローチャート、ベン図。
chart は graph と diagram も含む、日本語で言う「図」という表現。
diagram も広義では「図」といえるが、より概念的、抽象的な感じ。

**save / register / apply / entry / enroll**
save は保存する意味で登録する。反対語の load と対で使うとよい。
register は一般的な意味での登録する。何にでも使える。
apply は審査が必要な申請に登録する。申請する。ルールに沿って適用するイメージ。
entry は入力する。書きっぱなしのイメージ。
enroll は入会する、入学する、入隊する。

**supplement /complement**
補完する、足りないものを補うのが supplement。
２つのものを合わせて補完するのが complement。
complement は相互の意味が強く、相手が必要。
「2 の補数」は「Two's complement」となる。

**correct / right**
明確な基準があって正しい場合は correct。
道徳的に正しい、判断や意見が正しい場合は right。

**autocomplete / autocorrect / suggest**
入力途中のものを補完してくれるのが autocomplete。
入力が終わったものを正しくするのが autocorrect。
入力をもとに何かを提案するのが suggest。
日本語の補完は足りない箇所を補って完全にすること。
補間は数値の間の値を計算して補うこと。

**need / require**
主観的にみて必要しているのが need。
客観的にみて必要であるのが require。
need は口語的。
require のほうが堅い言い方で、規則で求められる場合に使う。

**parallel / concurrency**
1つの問題を並列化して素早く処理するのが parallel。物理的に同時に実行されるイメージ。
複数の手続きを並行して実行するのが concurrency。交互に進めてもよいイメージ。
非同期プログラミングを表すのは concurrency が正しい。

**acronym / bacronym / abbreviation**
頭文字をつなげて読むようになった言葉は acronym。(ZIP, NaN)
頭文字や各単語の文字を無理やり当てはめた言葉は bacronym または backronym。(GCC)
省略された言葉は abbreviation。(Feb., Mon., Dr.)

**overlapping / overlapped**
どちらも重複したの意味だが、overlapping の方が現在も重複していることを強調できる。
overlapped だと過去に重複していたが、すでに解決した場合でも当てはまる。

**amount / quantity**
抽象的、概念的な量を表すのが amount。お金や水など。
物質的な量を表すのが quantity。数えられるもの。
実際の数を表すのは number。

**sex / gender**
生物学的な性別を表すのが sex。>>[ISO/IEC 5218](https://en.wikipedia.org/wiki/ISO/IEC_5218)
社会的な性別を表すのが gender。

**hotfix / patch**
本番緊急の即席修正を表すのが hotfix。
公式アップデートのような部分更新を表すのが patch。



## 間違いやすい言葉

**programming**
m は 2 つ必要。
programing という言い方もあるが少数派。

**license(us) / licence(uk)**
license の方が多数派。
lisence や lisense は間違い。
ライセンスを与えるものを licenser。
ライセンスを受けるものを licensee。

**canceled(us) / cancelled(uk)**
近年は canceled がよく使われるようになった。
歴史的には cancelled の方が古い。
名詞形は cancellation しかない。

**complement / compliment**
complement は補完。
compliment は賛辞。

**collect / correct**
collect は集める、コレクションする。
correct は正しい、訂正する。

**cache / cash**
cache はメモリなどのキャッシュ。
cash は現金。

**clash / crash / crush**
clash はぶつかる、対立する。ダメージは少ない。
crash は衝突する。大きなダメージが有る。
crush は潰す、砕く。粉々にする。

アルファベット順に並べたとき、壊れ方が段々と大きくなる。
PCが壊れる(kowaReRu)のは crash と覚える。
果汁を絞る(shiboRU)のは crush と覚える。

ハードウェアが壊れる、処理に失敗する場合は crash より fail の方がより明確。

**option / choice / selection**
option は選択肢、何か物があってそれに付随する選択。
choice は自由な選択、主観的な感じ。
selection は厳選した選択、最適な選択、フォーマルな感じ。

**margin / padding**
margin は余白、欄外、マージンなど上下左右の印刷されない領域を示す、つまり外側の余白。
padding は埋める、付け足す、詰め物を意味する、つまり内側の余白。

**register**
register で登録する。
resist は抵抗する。shield の s と覚えるとよい。
regist と略すのは間違い。
reg と略すと Windows の registry を指すことが多い。

**raise**
raiseEvent でイベントを励起(起動)する。
trigger はデータベースで使われているのでイベントには適さない。
run や do は使わない。

**disk / disc**
disk は diskette の略で、ケース入りの磁気ディスクのことを指す。
disc は特に円盤を意味し、剥き出しの光学ディスクを指す。

**directory / folder**
directory は Linux 系で使われる、ディスク上の保存場所を指す。
folder は Windows 系で使われる、階層構造を指す。(directory を含む)
Windows のコントロールパネルなどはディレクトリではないがフォルダとなる。

**index / indexes / indices**
発音はインデックスイズ (indexes) とインディシィーズ (indices)。
indexes は本やデータベースで索引を意味する場合。
indices は数学や統計で指数とか指標を意味する場合。
プログラミングの配列の添字を複数形にする場合は indices を使う。

**act / action / behavior**
act は動詞だが、名詞だと行為。
短時間で終わるひとつだけの行為を指す場合が多い。
また結果に焦点があてられていて、終わった行為を指すことが多い。
action は手順が必要な一連の行動。
集団で行う場合にも使用する。
behavior は action も含めた広い意味での行動を表す。
behavior は態度として使われる方が頻出する。

**principle / principal**
principle は原理、原則。
principal は主体、主役。

**sensitive / sensible**
sensitive は配慮が必要な機微情報。
sensible は分別のある、思慮深い。

**crypto / crypt**
crypto は暗号。
crypt で止めると地下納骨堂。

**root / route**
root は根本とか根幹。ディレクトリのルート。
route は道筋。ネットワークルーティング。

**svr / srv**
server を略す場合は svr を使うのが一般的。
srv だと service を連想する。
DNSのSRVレコードはSERVICEレコードの略。

**Reference Value**
参考値、基準値。
判断の基準に使う参考値のこと。
医者は正常値/異常値という言葉を嫌うため、基準値を使う。
オブジェクトやメモリの reference (参照)とは関係ない。

**Regular Value**
幾何学系では正則値。
regular (正則)とは規則に従っていること。

**Standard Value**
一般的なという意味で標準値。
規格内という意味で規格値とも。

**通常値 / 正常値**
通常値は平常値と言い換えたほうがわかりやすい。
平常値 (Usual Value) は、普段どおりの値。Usual は頻度を表す。
正常値 (Normal Value) は、何も問題がない範囲の値。
正常値 (Normal Value) より正常範囲 (Normal Range)で用いられることが多い。

**デフォルト値 / 規定値**
デフォルト値 (default value) は、工場出荷時などの初期設定値のこと。
規定値 (control value, minimal required value) は、製品の規格を定めた値。

**正則化 / 正規化**
正則化 (regularization) は、統計や機械学習において、パラメータに罰則をかけ過学習を防ぐ手法。
正規化 (normalization) は、一定の規則に従いデータを利用しやすくすること。
データベースの正規化やベクトルの正規化がある。

**行(ROW) / 列(COLUMN)**
行は旁(つくり)の上が横に平行なので、横に伸びるイメージ。EXCELで行を選択すると横一列が選択される。
列は旁(つくり)が縦に平行なので、縦に伸びるイメージ。EXCELで列を選択すると縦一列が選択される。
数学の座標は(x, y)で表すことが多いが、プログラミングの表は(row, column)で表すことが多い。
CSVファイルなどをループで処理するときを基準に考えるとi行目のj番目とするのが処理しやすい。

**normalization / canonicalization**
どちらも正規化を表す。
normalization よりもう少し複雑な正規化を canonicalization と呼ぶ。

**regression / degrade**
手戻り (regression)。
デグレは劣化 (degrade) だが、リグレッションの意味で和製英語となっている。







## 間違いやすい読み方
そもそもカタカナで表記しているので正しくない。
日本人の英語の発音がダメなのはローマ字とカタカナのせいではないか。
アルファベットの読み方の他に、アルファベットの発音も教えるべき。
特に r は日本語にはない発音だが、発音できれば聞き取れるようになる。

**data**
データ、ダータ。
データが多数派。

**done**
ダン。

**align**
アライン。

**horizontal / horizon**
ホリゾンタル、ホライゾン。

**radius / relative / relation**
レイディアス、リラティブ、リレイション。

**temporary**
テンポレェリィ。
カタカナでテンポラリーと書くので勘違いしがち。

**false**
フォルス。
ファルスと読むと phallus で男根の意味。

**tip**
ティップ。
チップだと chip になる。

**null**
ナル。
ヌルで和製英語化している。

**ping**
ピン。グは聞こえないけど ng で発音している。
丁寧に言うと g を強調してグになることもある。
ピングで和製英語化している。

**JPEG / GIF / PNG / WebP**
**MPEG / WebM**
ジェイペグ、ジフ、ピング、ウェッピー。(静止画)
エムペグ、ウェブエム。(動画)

**repository / Git / TortoiseGit / Mercurial**
リポジトリ、ギット、トータスギット、マーキュリアル。(バージョン管理)
レポジトリだと違和感がある。

**nginx**
engine x (エンジン エックス)。(httpd)

**Xeon**
ジーオン。(CPU)

**Ubuntu**
|oǒ'boǒntoō|
ウブンツ、ウブントゥ、ウブンチュ。(Linux)
ズールー語の発音を聞くとウブンツ。

**GNOME**
グノーム。(Linux)
英語読みだとノームだが、グノームと発音するのが正しい。

**Kubernetes (K8s)**
クバネティス、クーベルネテス。

**awesome**
オーサム。
オウサムではないので注意。
awe (畏怖) + some。

**schema**
スキーマまたはシェーマ。
スキーマはデータベースの論理構造を指すことが多い。
シェーマはドイツ語読みで、医療系で図を指す事が多い。





## 頻出単語

**log**
記録、ログを取る。
名詞と動詞が同じ。

**emit**
ログをファイルに出力する。

**flush**
バッファの内容を出力してクリアする

**fetch**
ネットワークからデータを取得すること。
CPU がメモリからデータを取得する場合にも使う。

**retrieve**
データを探して取得すること。
検索の意味でも使われる。

**stack**
積み重ね、積み重ねる。
名詞と動詞が同じ。

**token**
トークン、しるし、証拠。
字句解析の場合は、分解できない最小単位のこと。
ネットワークなどの場合は、送信権をやり取りするデータのこと。

**credential**
ユーザーIDとパスワードのこと。

**optimize**
最適化する。

**normalize**
正規化する。

**NDA / Non-Disclosure Agreement**
秘密保持契約
closure は close から変化して、締め切りを意味する。
disclosure は否定形だから、閉鎖の反対で、公開する。
non-disclosure は更に否定だから、秘密にする。

**cheat sheet**
虎の巻。使い方を 1 ページにまとめたもの。

**usage**
使用方法、使い方。

**unknown**
未知の、正体不明の。
`unknown error, something happened.`

**misc / miscellaneous**
雑多な、多方面の。

**TOC / table of contents**
目次。

**description**
説明。

**recommend**
推奨する。

**features**
特徴、機能。
たいてい複数形で用いる。

**via**
～によって、～を経由して。

**required**
必須の。

**reserved**
予約された。

**verbose**
冗長な。詳細な。
`-v`としてログ出力オプションで情報を増やす場合に使われる。
`-V`だとバージョンを指す場合が多い。

**diversity**
多様性。

**PoC: Proof of Concept**
プロトタイプを作って検証すること。

**ecosystem**
エコシステム。
生態系から転じて複数の企業・ソフトウェアが協力・連携してマーケットを育てる手法。

**omni-channel**
オムニチャネル。複数の販売形態を持つこと。
App Store だけでなく、自社ダウンロード販売、店舗 USB 販売など。

**full stack**
上から下まで全部。
full stack developer / engineer は、インフラからシステム開発、データベース、フロントエンドまですべて出来る人材。
full stack framework は、必要な機能を全て備えたフレームワーク。

**DevOps**
開発(Development)と運用(Operations)をくっつけた造語。
開発チームと運用チームが協力して、継続的な開発、継続的なデプロイを迅速に行う手法。
チームの対立構造を解消することを目的としている。






## 関係のある言葉

### データの呼び出しと登録について
フォーム上にデータを呼び出すのを `Load`。
フォーム上のデータを保存するのを `Save`。
ファイルや Stream から読み込むのを `Read`。
ファイルや Stream に書き込むのを `Write`。
サーバーからデータを取得するのを `Fetch`。
サーバーへデータを送るのを `Send`。
データを検索するのは `Retrieve`。
データを登録するのは `Register`。
データベースで SELECT を実行するのを `ExecuteQuery`。
データベースで INSERT, UPDATE, DELETE を実行するのを `ExecuteNoneQuery`。

以下は一例。

検索ボタンで `Search` する。
結果をサーバーから `Fetch` する。
クライアントはサーバーへ `Request` する。
サーバーはデータベースへ `Retrieve` する。
データベースは SELECT 文を `ExecuteQuery` する。
サーバーはクライアントへ `Respond` する。
検索結果をリストへ `Add` して表示を `Refresh` する。

リストから `Select` する。
選択されたキーから画面へデータを `Load` する。
結果をサーバーから `Fetch` する。
クライアントはサーバーへ `Request` する。
サーバーはデータベースへ `Retrieve` する。
データベースは SELECT 文を `ExecuteQuery` する。
サーバーはクライアントへ `Respond` する。
結果を画面に `Set` する。

必要があればデータを書き換える。
入力チェックで `Validate` して、`CanSave` で保存できるか確認して `Save` する。
もしくは `TrySave` して保存を試みる。

データを `Save` する。
データを画面から `Get` する。
データをサーバーへ `Send` する。
クライアントはサーバーへ `Request` する。
サーバーはデータベースへ `Register` する。
データベースは INSERT, UPDATE, DELETE 文を `ExecuteNoneQuery` する。
サーバーはクライアントへ `Respond` する。

必要があれば画面を `Clear` する。

### 式、値、変数について

**syntax / statement / expression / operator / signature**
syntax は構文。構文は statement と expression からなる。
statement は文。if 文, for 文, 関数呼び出し文など。
expression は評価される式。
operator は演算子。
signature は関数の型情報であり、メソッド名、パラメータ、戻り値の型をあわせて表現したもの。
プログラミング言語によって定義が異なる。

**prefix / suffix / affix**
接頭辞、接尾辞、接辞。
disconnect の dis- や restart の re- が接頭辞。
player の -er や nullable の -able が接尾辞。
suffix の代わりに postfix でも意味は通じるがあまり使われない。
affix は添付する、添えるの意味があり、prefix と suffix をまとめて表現するときに使う。

**prefix notation / infix notation / postfix notation**
前置記法、中置記法、後置記法。
ポーランド記法(+AB)、普通の数式(A+B)、逆ポーランド記法(AB+)。
コンピューターで数式を処理する場合はスタックを用いた逆ポーランド記法がよく使われる。

**create / destroy**
インスタンスを作成する、インスタンスを破棄する。

**allocate / free**
メモリを割り当てる、メモリを開放する。

**inheritance / override / overload**
継承。上書き。多重定義。

**delimiter / separator**
区切り文字。
delimiter は意味が広く、カンマ以外にもクォートやカッコも含む。
separator はカンマなど分割するもののみを言う。

**type**
型、データ型。
文脈によっては種類を意味するので注意が必要。
ハンガリアン記法が二種類できたのは文脈による意味の取り違えが原因。

**dynamic / static**
dynamic (動的)は必要に応じて、随時処理を行うこと。
static (静的)は事前に必要な処理をしておくこと。
dynamic library は動作中に DLL をロードする。
static library は予め LIB をリンクしてコンパイルする。
ルーティングの dynamic route は自動で追加され、
static route は予め手動で設定しておく。
static 変数は言語によって定義が異なるが、メモリ上に予め領域を確保しておく。

**increment / decrement**
増量、減量。
プログラムでは i++ と i-- のこと。

**Initial Value / Initialized Value**
初期値、初期化値。
プログラムの初めや、コンストラクタで初期化される値。
または変数と同時に宣言される値。
初期値はなるべく入れたほうが予期せぬトラブルを減らせる。

初期値を英訳すると、Initial Value, Default Value, Start Value となる。
しかしプログラミングで初期値といえば、変数宣言時の初期化を指すことが多い。

**Default Value**
何も設定しなかった時の値、転じてデフォルト値。
工場出荷時の設定などの値。
初期値の意味で使われることもあるが、厳密には違う。>>[ここの説明がわかりやすい](https://wa3.i-3-i.info/word1184.html)
引数を省略した場合の値、その場合は Optional Value とも。

default のみだと怠慢や無作為を意味する。
日本語でデフォと略して言う場合は、普通などという意味で使われる。

**Start Value / Starting Value**
開始値、初期値。
処理を開始するときの初値など。

**Current Value**
現在値。

**Original Value**
元値。
変更前の値。

**Parameter / Argument**
引数。
区別するなら parameter は仮引数、argument は実引数。

**Return Value / Returned Value**
戻り値。
ret, retval と略されることが多い。

**Result Value**
結果値。
res, rslt と略される事が多い。
res と書かれると response と迷うので略さないほうが良い。

**Var(Variable)**
変数。

**Const(Constant)**
定数。

**Literal**
リテラル。直接記述された値のこと。
変数と反対の意味。
`int x = 10;`
`String str = "abc";`
10 を数値リテラル、`"abc"` を文字列リテラルという。

**Primitive Data Type**
プリミティブ型。基本型。組み込み型。
プログラミング言語で最初から用意されている変数の型のこと。

```
bool, char, int, short, long, double, float, unsigned char,
Boolean, Int32, String, Decimal...
```

**declare / define**
変数や関数を定義すること。

**null / nil**
存在しないこと。ヌル。
英語読みだとナルだが、あまり聞かない。

**void**
空。
ヌルと似たような意味。




### 数値表現

**digit**
桁。
アラビア数字を表す場合もある。

**binary number**
2 進数。
先頭に `0b-` をつけて表現する。`0b10` で 2 を表す。

**octal number**
8 進数。
現在ではまず使われない。
メインフレームの時代(1word = 24bit)によく使われていた。
先頭に `0-` をつけて表現する。`010` で 8 を表す。

**decimal number**
10 進数。

**hexadecimal number**
16 進数。
先頭に `0x-` をつけて表現する。`0x10` で 16 を表す。
0xFF、FFH、0xFFH など表現方法はいくつかある。
RGB の値としてよく見かける。

**even / odd**
偶数、奇数。
名詞または形容詞として用いる。

**integer part / fractional part**
整数部と小数部。
integral part / decimal part とも。




### 真偽値

**true / false**
真、偽。
トゥルー、フォルスと発音する。
言語による違いも大きいが、通常は 0 以外が true、0 が false。

比較する場合は `if (a == false)` や `if (a == 0)` など偽値と比較するとよい。
真値のバリエーションが多く、偽値と比較するとミスが少ないためか。

プログラムの終了ステータス(Exit Status, Return Code)は、0 が通常終了、それ以外がエラーコードを表す。
ただし、Linux のファイル記述子、ファイルハンドルに限り、取得に失敗すると-1 になる。
なので、比較する場合は関数化しておくと混乱が少ない。
`bool FileDescriptor::isOpened() { return (fd != -1); }`

**isXXX / canXXX / hasXXX**
状態を判定する場合。
is-<形容詞>、can-<動詞>、has-<過去分詞> とする。
isSaved、isNull、isNumber、canSave、hasConnected など。
isXXX は動詞から始まるが、例外的に真偽値を表す変数名としてもよく使う。

hasChanged は能動的(active)に変わった場合、isChanged は受動的(passive)に変わった場合という違いがある。

**exists**
ファイルなどが物理的に存在するか。
三単現の s をつける。

**contains**
リストなどに含まれているか。
三単現の s をつける。

**equals**
等しいか。
三単現の s をつける。



### 型について

**float**
浮動小数点数のこと。
floating point number から。

**double**
倍精度浮動小数点数。
double precision floating point number から。

**string**
文字列のこと。
ひと続きのという意味。
character strings から。



### Memory

#### RAM
**RAM (Random Access read/write Memory)**

**stack-based memory**
スタック領域。静的メモリ領域とも。
スコープを抜けると自動で開放される。

**heap memory**
ヒープ領域。動的メモリ領域とも。
heap は、山積みを意味する。
new や malloc した場合はこちらに確保される。
delete や free のし忘れでメモリリークを起こしやすい。
またフラグメンテーションも起こしやすい。

#### ROM
**ROM (random access Read Only Memory)**
組み込みで書き込みを行うメモリ領域。
BIOS やファームウェアが書き込まれている。
必要な ROM の容量は program + const + data となる。
必要 RAM 容量は data + bss で計算できる。

※何故か日本では Android スマホの内蔵ストレージ容量が ROM と書かれていることがある。
たしかに Flash メモリは EEPROM だが、ROM だけ書かれると意味が違う。

**VECT section (Vector)**
割り込みベクターテーブルが書き込まれる領域。
すべてのコンピュータはリセットベクタから開始される。

**Program section**
プログラムが格納される場所。
text 領域とも。

**Const section**
定数が格納される場所。
rodata (read only data) 領域とも。

**Data section**
初期値ありのグローバル変数が格納される場所。

**BSS section (Block Started by Symbol)**
初期値なしのグルーバル変数が格納される場所。



#### メモリ用語の対比
**ROM (read only memory) - RWM (read write memory)**
**RAM (random access read/write memory) - SAM (sequential access read/write memory)**
一般的に RAM と言った場合は RWM に分類される RAM を指している。
ROM は ROM (Read Only Memory) の中の random access Read Only Memory のことを指す。



### 単位

**b / bit** : binary digit
**B / Byte** : 1byte = 8bit
**KB / KiB** : kilo byte (10^3) / kibi byte (2^10)
**MB / MiB** : mega byte (10^6) / mebi byte (2^20)
**GB / GiB** : giga byte (10^9) / gibi byte (2^30)

**MSB** : Most Significant Bit (最上位ビット)
**LSB** : Least Significant Bit (最下位ビット)
MSBit / MSByte などと bit か Byte を明示する場合もある。

**bps** : bits per second (ビット毎秒)
**B/s** : bytes per second、1B/s = 8bps

**sec** : second (秒)
**ms**  : millisecond (ミリ秒)、1sec = 1000msec
**us**  : microsecond (マイクロ秒)、1msec = 1000us
**ns**  : nanosecond (ナノ秒)、1us = 1000ns

**Hz**  : Hertz (周波数)、1MHz = 1us 周期
組み込みの周期計算は厳密に 2 の冪乗(べきじょう)で計算しないとズレる。
1MHz = 1,048,576Hz = 2^20Hz

**dB**  : decibel (デシベル)
**px**  : pixel (画素数)、picture element
**bpp** : bits per pixel (色深度)



### 記号

`!` exclamation mark
`"` double quote, double quotation mark
`#` hash, number, pound
`$` dollar
`%` percent
`&` ampersand
`'` single quote, apostrophe
`()` paren, parenthesis, round brackets
`-` hyphen, minus, dash, bar
`=` equal
`^` caret, hat, up arrow
`~` tilde
`\` yen
`|` pipe, vertical bar

`@` at mark
`` ` `` back quote
`[]` brackets, square brackets
`{}` braces, curly brackets

`;` semicolon
`+` plus
`:` colon
`*` asterisk, star

`,` comma
`.` dot, period, point
`<>` angle brackets
`/` slash
`?` question mark
`\` backslash
`_` underscore, underbar, underline



### ギリシャ文字

**Α α** alpha アルファ
**Β β** beta ベータ
**Γ γ** gamma ガンマ
**Δ δ** delta デルタ
**Ε ε** epsilon イプシロン
**Ζ ζ** zeta ゼータ
**Η η** eta イータ
**Θ θ** theta シータ
**Ι ι** iota イオタ
**Κ κ** kappa カッパ
**Λ λ** lambda ラムダ
**Μ μ** mu ミュー
**Ν ν** nu ニュー
**Ξ ξ** xi クシー
**Ο ο** omicron オミクロン
**Π π** pi パイ
**Ρ ρ** rho ロー
**Σ σ** sigma シグマ
**Τ τ** tau タウ
**Υ υ** upsilon ウプシロン
**Φ φ** phi ファイ
**Χ χ** chi カイ
**Ψ ψ** psi プサイ
**Ω ω** omega オメガ




### 日付の表現

**date_created**: よく使われる
**created_date**: こっちもよく使われる
**creation_date**: あまり使われない
**created**: DateTime 型であればよいが、名前だけでは bool と判別が付かない

on と at でタイムスタンプを表すのは rails で使われている用法。
とてもわかりやすく、データベースの列名でもよく使われる。
**created_on**: 作成日
**created_at**: 作成日時
**updated_at**: 更新日時

**created_datetime**: DateTime 型, TimeStamp 型, `YYYY-MM-DD HH:mm:SS`
**created_date**: date 型, `YYYY-MM-DD`

ユニックス時間、エポック時間と言って、1970-01-01 からの秒数で表現する方法もあるが、アンチパターンと言われている。
int 型で 32bit だと 2038 年問題となるので注意。

```csharp
public static long ToUnixTime(this DateTime date)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return Convert.ToInt64((date.ToUniversalTime() - epoch).TotalSeconds);
}
```

狭いスコープで、日付を文字列で保持する場合、変数名でどのような形式か明示できる。

```csharp
var yyyyMMdd = DateTime.Now.ToString("yyyyMMdd");
var HHmmssfff = DateTime.Now.ToString("HHmmssfff");
```

### データベース関連
データベース関連のキーワードはすべて大文字で記すべし。
`SELECT t.name FROM table t;`

大文字小文字を区別する/しないデータベースがあるので、テーブル名、列名などは全て小文字で書く。
逆にすべて大文字で書く文化もあるが、キーワードと区別がつかないので読みにくい。
データベースによっては `Users` とキャメルケースで書く場合もある。

テーブル名は複数形にする場合が多い。
テーブルが行の集まりなので複数形とするのが自然な捉え方となる。
複数形を使用していると、SELECT句で`[複数形].[列名]`となり、違和感があるので別名定義が必要。
クラスにマッピングする場合も、プログラムコード中だと複数形だと配列やリストのような命名になるので、単数形とする必要がある。

テーブル名を単数形にする文化もある。
テーブルはコンテナなので単数形とするべきと考えられる。
この場合はクラス名とイコールになるので機械的に作業がしやすくなる。

テーブル名に `mst_, trn_, tbl_, m_, t_` などを付けるときは一貫性を持たせる。
そもそも冗長となるのでいらない。
例えば、マスタとして作ったけど更新が頻繁にあれば、それはもうマスタではないので `mst_` となっていたら混乱のもと。

`_` (アンダースコア)区切りはふたつ程度までがちょうどよい。

外部キーのフィールドはすべて `_id` で終わる名前にする。
UUID/GUID を使う場合は `_uid` や `_uuid` とする場合もある。
列名に `_id, _code, _type, _cd, _kbn, _sbt, _flg` など付けるときは一貫性を持たせる。
`_kbn, _sbt` は英語ではなくローマ字読みなので使わない。
必ず付ける、略さない、混在させないなど。
具体的には下記を混同させてはいけない。

```
_cd : _code
_typ : _type
_kbn : _kubun
_sbt : _shubetu
_flg : _flag
```

`delete_flag` とした場合、FALSE が削除済みなのか、TRUE が削除済みなのかわかりにくい。
`delete_flag` ではなく `is_deleted` とすべきだが、プロパティへのマッピングを考えると `deleted` がよい。
`_flag` は曖昧で冗長なので使わない。

`_id` は主キーや一意に識別できる番号に付ける。`int` または `bigint` が望ましい。
他のテーブルとリレーションするための id 列同士はなるべく同名にしておくことが望ましい。

`_code` は意味のある記号や番号、コード体系化されているものに使用する。
`int` が混じると混乱するので `text` に統一したい。

`_seq` は連番に使用する。
`_number, _no` は数字に使用する。
`_num` は特に個数に使用する。

郵便番号 (`postal_code, post_code, zip_code`) は日本語では番号だが、実態は規則性のあるコードとなる。
顧客番号の場合は `customer_number` だと数字だが、`customer_code` は数字以外もありえる。
ただし、業務での呼び名で～コードや～番号となっている場合は合わせた方がよい場合もある。

並び替えをするための列で `sort_number` より、`asc_order` だと意味が明確に伝わる。
特に処理の優先順位を決めるための列は `priority` とする。

限界値を含める場合や範囲を表す場合には `min_` と `max_` を用いる。
範囲を表す場合は `first_` と `last_` を用いる。
包含排他的な範囲を表す場合は `begin_` (begin 含む)と `end_` (end 含まない)を用いる。
`begin_` は `start_` とも置き換えが可能。
包含排他にしておくと、`09:00` ～ `10:00` という指定で、`09:59` とする必要がなくなる。

`created_at` で作成日時(TIMESTAMP)を表す。
`created_by` で作成ユーザー(ID)を表す。 

#### SQL
SQL はエスキューエルまたはシークェルと読む。
元になったデータベース言語が SEQUEL (Structured English Query Language)。

an SQL (アン エス キュー エル)
a SQL (ア シークェル)

#### SQL文例

```sql
    SELECT t.name FROM table_name t WHERE t.id = '1';
    SELECT t.name FROM table_name t ORDER BY t.id DESC;
    SELECT COUNT(t.day) FROM table_name t WHERE t.year = '2015' GROUP BY t.month HAVING t.month LIKE 'J%';

    UPDATE table_name SET code = 'aaa' WHERE id = '1';
    INSERT INTO table_name (id, code) VALUES ('1', 'aaa');
    INSERT INTO table_name VALUES ('1', 'aaa');
    INSERT INTO table_name (id, code) SELECT t.id, t.code FROM table_name2 t;
    INSERT INTO table_name SELECT * FROM table_name2;
    DELETE FROM table_name WHERE id = '1';
```


#### キーワード

**TABLE** : テーブル、表
**ROW**   : ロー、行
**COLUMN**: カラム、列
**SELECT**: セレクト、選択
**UPDATE**: アップデート、更新
**INSERT**: インサート、挿入
**DELETE**: デリート、削除
**UPSERT**: アップサート、update or insert の意味
**CREATE**: クリエート、表を作る
**DROP**  : ドロップ、表を削除する
**INDEX** : インデックス、索引
**PARTITION**  : パーティション、分割
**PRIMARY KEY**: 主キー、NOT NULL 制約、1つだけ
**UNIQUE KEY** : ユニークキー、いくつでも作れる
**ASC**   : Ascending、昇順
**DESC**  : Descending、降順



#### よく使う言葉

**contact** 連絡先
**full_name** 氏名
**first_name** 名前
**middle_name** ミドルネーム
**last_name** 名字
**honorific** 敬称
**nickname** ニックネーム
**job_title** 肩書
**phone** 電話番号、日本では tel が一般的でなぜか tell とも
**cell** 携帯電話、日本では mobile が一般的
**fax** ファクシミリ (facsimile)
**mail** メールアドレス、e-mail とも
**web** Web サイト、ホームページ、url を使っても良い
**address1** 住所 1
**address2** 住所 2(何故かわかれていることが多い)
**postal_code** 郵便番号
**country** 国

**tenant** テナント

**user** ユーザー
**loginname** ログイン名(ログインID)
**password** パスワード
**display_name** ユーザー名(表示名)
**expiration_date** 有効期限

**permission** 許可

**patient** 患者
**patient_code** 患者コード
**patient_name** 患者名
**patient_name_katakana** 患者名(カナ)
**birth_date** 生年月日、誕生日 (birthday) ではないので注意
**sex_code** 性別、ISO 5218 や DICOM規格 を参照のこと
**job_role** 職業
**note** 備考、remarks とも

**customer** 顧客、取引先
**employer** 雇用主
**employee** 従業員
**quantity** 数量
**order** 注文

order というテーブル名を使いたいときは気をつける。
ORDER BY の予約語なので `[order]` としなければならない。
複数形の `orders` にしておくと括弧は不要。




### 段組み

**title** 題名
**subtitle** 副題

**caption** 短い説明、主に画像の説明

**part** 部
**chapter** 章
**section** 節
**subsection** 項
**paragraph** 段落
**sentence** 文
**word** 語

### 配列やリスト構造、文字列など
**clear / add / remove / append / prepend / insert**
**trim / split / compare / replace**

[0]から始まる配列
zero-based (ゼロから始まる) or index origin = 0

[1]から始まる配列
one-based (1 から始まる)

### ネットワーク関連
**listen / accept / send / receive**
**local / remote**

**ping**
ピング。英語だとピンだが、あまり聞かない。

**TTL**
time to live。
パケットの生存期間(ホップ数)、または DNS の有効期間(秒)。

### イベント

**Click / Clicking / Clicked / OnClick**
例えばクリックされたイベントの発生は `Clicked` とする。
時制を表す場合は、`-ing` または `-ed` とする。
クラス内部のイベントは `OnClick` に記述する。

**call / invoke**
ただ単に呼びだすのを call。直接的な感じ。
別スレッド、別コンテキストの処理を呼びだすのを invoke。お願いする感じ。

**delegate / dispatch**
処理を委譲するのが delegate。代理に任せる感じ。アプリケーション内のイベントで使われる。
タスクを割り振るのが dispatch。即実行する感じ。マルチタスク OS がプロセスを実行する際に使われる。

### 図形

**point / x / y / offset**
座標、X 軸, y 軸、相対的な位置。
画面の左上が (0, 0) となる。
offset は引き算するという意味がある。

**size / width / height**
大きさ、幅、高さ。
ウィッズ(ウィドス)とハイトと発音する。
発音は諸説あるが、些細な違いなので許容すべし。
「昔」を意味する「かつて」を口語で「かって」と発音するようなもの。

**top / middle / bottom**
**left / center /right**

**front / middle / back**
**front / center/ side / rear**

**fill**
塗りつぶす。

**depth**
色深度。
32bit カラー、16bit カラーなどのこと。



## 省略した言葉
スコープがごく狭い範囲でしか省略語、省略形は使ってはいけない。
どうしても使いたいときは、なるべく長めの略語の方が読みやすい(推測しやすい)。
可能なら対となる言葉とともに使って、単独での省略は避ける。
混乱するような省略はしてはいけない。
それでも使わなければならないときはコメントで意図を説明する。

問題ない例としては、次のようなパターンが考えられる。
1画面内に収まっている短いメソッドがあり、長さを連想させるメソッド名だったとする。
内部で w と h が両方使われていた場合は、width と height だと推測できるし、宣言自体も目に入る。
そうでない場合は、宣言元まで確認してそれが正しいかどうかを読み解く必要が出てくるのでよくない。

**i**    : integer (整数) / i, j, k
**n**    : natural number (自然数) / n, m

**b**    : boolean, byte, bit
**bln**  : boolean
**byt**  : byte
**c**    : char
**ch**   : char
**s**    : string
**str**  : string
**i**    : integer
**int**  : integer
**sht**  : short
**l**    : long
**lng**  : long
**f**    : float
**flt**  : float
**sng**  : single
**d**    : double
**dbl**  : double
**dec**  : decimal

**u**    : unsigned
**uchar**: unsigned char

**o**    : object
**obj**  : object
**cls**  : class
**enm**  : enum
**dte**  : date
**rng**  : range

**prc**  : procedure, process
**proc** : procedure, process
**sub**  : sub procedure
**f**    : function
**fn**    : function
**fnc**  : function
**func** : function

**p**    : pointer (ポインタ)
**ptr**  : pointer
**g**    : global
**t**    : type
**e**    : event
**e**    : error
**err**  : error
**ex**   : exception
**iter** : iterator

**prop** : property
**attr** : attribute
**conf** : configuration
**pref** : preference

**args**   : arguments
**params** : parameters

**stat**  : status
**stat**  : statistics (netstatはこっち)
**stats** : status
**stats** : statistics

**ln**   : length (配列の長さ)
**len**  : length
**cnt**  : count
**num**  : number
**buf**  : buffer (一時的な文字配列)
**mem**  : memory

**app**  : application
**doc**  : document
**ext**  : extension
**txt**  : text
**tmp**  : temporary

**conn** : connection
**addr** : address

**dst**  : destination
**dest** : destination
**src**  : source

**cli**  : client
**svr**  : server
**cl**   : client
**sv**   : server

**srv**  : service
**svc**  : service

**h**    : handle
**fh**   : file handle
**fd**   : file descriptor

**min**  : minimum
**max**  : maximum
**add**  : add (足す), addition (加算)
**sub**  : subtract (引く), subtraction (減算)
**div**  : divide (割る), division (除算)
**mul**  : multiply (掛ける), multiplication (乗算)
**sum**  : sum (合計する, 合計)
**avg**  : average (平均)

**qty**  : quantity (個数)
**tot**  : total (総計)
**ttl**  : total

**EQ**   : equal (`=`、等しい)
**NE**   : not equal (`!=`、`<>`、等しくない)
**GT**   : greater than (`>`、より大きい、超過)
**GE**   : greater equal (`>=`、以上)
**LT**   : less than (`<`、より小さい、未満)
**LE**   : less equal (`<=`、以下)
**TL**   : total

**EQU**  : equal
**NEQ**  : not equal
**GTR**  : greater than
**GEQ**  : greater equal
**LSS**  : less than
**LEQ**  : less equal

**init** : initialize
**exec** : execute
**eval** : evaluate
**sync** : synchronous
**prev** : previous
**curt** : current

**w**    : width
**h**    : height
**sz**   : size
**pt**   : point
**pos**  : position
**img**  : image
**fig**  : figure
**pct**  : picture
**bg**   : background
**fg**   : foreground
**mid**  : middle
**nav**  : navigation

**rq**   : request
**req**  : request
**rsp**  : response

**std**  : standard
**cfg**  : config
**conf** : config

**sec**  : seconds (secs とはしない)
**min**  : minutes
**hrs**  : hours
**ss**   : seconds
**mm**   : minutes
**hh**   : hours
**dd**   : days
**MM**   : months
**yyyy** : years

**U(Su)**: Sunday
**M**    : Monday
**T**    : Tuesday
**W**    : Wednesday
**R(Th)**: Thursday
**F**    : Friday
**S**    : Saturday

**Sun**  : Sunday
**Mon**  : Monday
**Tue**  : Tuesday
**Wed**  : Wednesday
**Thu**  : Thursday
**Fri**  : Friday
**Sat**  : Saturday
**DOW**  : Day of the week (曜日)

**Jan**  : January
**Feb**  : February
**Mar**  : March
**Apr**  : April
**May**  : May
**Jun**  : June
**Jul**  : July
**Aug**  : August
**Sep**  : September
**Oct**  : October
**Nov**  : November
**Dec**  : December

**E**    : Electromotive force (電圧)
**I**    : Intensity of electric current (電流)
**R**    : Resistance (抵抗 ohm、Ω)、E=RI

**f**    : frequency
**A**    : Ampere (アンペア)
**V**    : Volt (ボルト)
**W**    : Watt (ワット)
**T**    : temperature (温度)
**TEMP** : temperature (温度)

## MSのシステムハンガリアンでよく使われている省略形

**addr** : IPAddress
**ani**  : Animation
**bmp**  : Bitmap
**btn**  : Button
**bdn**  : BindingNavigator
**bds**  : BindingSource
**cal**  : Calendar
**ckl**  : CheckedListBox
**ctl**  : Control
**ctr**  : Control
**chk**  : CheckBox
**chklst** : CheckBoxList
**clp**  : Clipboard
**cbo**  : ComboBox (発音重視)
**cmb**  : ComboBox
**cmd**  : Command
**cdr**  : MonthCalendar
**dlg**  : Dialog
**doc**  : Document
**dtp**  : DateTimePicker
**flp**  : FlowLayoutPanel
**frm**  : Form
**gra**  : Graph
**grp**  : GroupBox
**hsb**  : HorizontalScrollbar
**icn**  : Icon
**ico**  : Icon
**il**   : ImageList
**img**  : Image
**imgbtn** : ImageButton
**lbl**  : Label
**lin**  : Line
**llb**  : LinkLabel
**lv**   : ListView
**lvw**  : ListView
**lst**  : ListBox
**nud**  : NumericUpDown
**mdi**  : MDIChildForm
**mnu**  : Menu
**mtx**  : MaskedTextBox
**mtxt** : MaskedTextBox
**nti**  : NotifyIcon
**opt**  : OptionButton
**pic**  : PictureBox
**pnl**  : Panel
**prg**  : ProgressBar
**prg**  : PropertyGrid
**rdo**  : RadioButton
**rpt**  : Report
**rpv**  : ReportViewer
**rtx**  : RichTextBox
**rtxt** : RichTextBox
**shp**  : Shape
**spl**  : Splitter
**spl**  : SplitContainer
**spt**  : Splitter
**spn**  : Spin
**tgl**  : ToggleButton
**tlp**  : TableLayoutPanel
**tip**  : ToolTip
**trb**  : TrackBar
**txt**  : TextBox
**tmr**  : Timer
**tvw**  : TreeView
**ud**   : UpDown
**vsb**  : VerticalScrollbar
**wbs**  : WebBrowser

**tab**  : TabControl
**tp**   : TabPage
**pag**  : TabPage

**tabc** : TabControl
**tab**  : TabPage
**tpg**  : TabPage

**cms**  : ContextMenuStrip
**mns**  : MenuStrip
**ssr**  : StatusStrip
**tsr**  : ToolStrip
**tsc**  : ToolStripContainer

**dg**   : DataGrid
**dgv**  : DataGridView
**ds**   : DataSource
**ds**   : DataSet
**dt**   : DataTable
**dr**   : DataRow

**grd**  : DataGridView, DataGrid
**dgview** : DataGridView
**dts**  : DataSet
**data** : DataSet
**tbl**  : Table
**row**  : Row
**rows** : Rows
**col**  : Column
**cols** : Columns
**fld**  : Field
**flds** : Fields

**db**   : Database
**conn** : Connection
**trans**: Transaction
**ole**  : OLEContainer
**sql**  : SQLStatement
**qry**  : Query

**id**   : ID, Identifier
**cd**   : Code
**idx**  : Index
**mcr**  : Macro
**snp**  : Snapshot
**trn**  : Transaction
**txn**  : Transaction

## 名詞を作る接尾辞

**-ance** : instance, resistance, impedance
**-ence** : existence, silence
**-ency** : dependency

**-ty**   : difficulty
**-ity**  : ability, reality
**-ion**  : destruction

**-ment** : development
**-ness** : thickness, darkness
**-th**   : growth
**-ship** : ownership, frendship

**-or**   : selector
**-er**   : player
**-eer**  : engineer

**-age**  : usage
**-let**  : leaflet, commandlet


## メタ構文変数
サンプルプログラムなどで特に意味のない変数名に使われる。
何者でもないものを意味する記号。

**foo, bar, baz, qux, quux, ...**
foobar と合わせて呼ぶこともある。

**hoge, piyo, hogera, hogehoge, ...**
hoge と piyo の掛け合わせもある。

**unko, chinko**
一部に熱狂的な支持者がいる。

**spam, ham, eggs**
Python でよく使われる。

**Alice, Bob, Charlie, Dave, Eve, Ivan, ...**
プロトコルや暗号の説明でよく使われる人名。
Alice は本人や当事者。
Bob は相手。
Charlie は第三の当事者。
Dave は第四の当事者。
Eve は盗聴者 (eavesdropper) など。
Isaac はプロバイダ (ISP)。
Justin は司法。

**山田太郎, John Smith, Hans Schmidt, ...**
一般的な名前。

**名無しの権兵衛, 何野某, John Doe, Jane Doe, ...**
身元不明の名前。



## ダミー情報

**example.com / example.net / example.org**
RFC 2606 で予約されているドキュメント用ダミードメイン。
トップレベルドメインとして `.example, .test, .invalid` なども使える。

**example.local / example.internal**
ローカル用ドメイン。

**user@example.com**
テスト用のメールアドレス。
ダミードメインなので、ユーザー名は任意。
返信不可の場合は `no-reply@sample.invalid` など。

**192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24**
RFC 5737 で定義されているドキュメント用ネットワークIPv4アドレス。
このセグメントに属しているアドレスなら何でもよい。

**Example Inc. / Contoso Ltd. / Acme Corp.**
ダミーの社名。

**03-1234-5678, 090-1234-5678**
よくダミーの電話番号で使われる。

**+1 555-010x**
アメリカでは 555 から始まる電話番号が使われる。
国際電話のダミーなどに。

**東京都千代田区千代田1-1**
皇居の住所をもじった架空住所。

**1234 Elm St, Springfield, ZZ 99999**
海外の架空住所の定番。

**4111 1111 1111 1111**
VISA公式のテスト用クレジットカード番号。
Luhn 検査 OK／実課金不可。

**5555 5555 5555 4444**
こちらはマスターカード。

**lorem ipsum**
WEBのダミーテキストでよく使われている。

```
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
```

**イーハトーヴォ**
宮沢賢治の『ポラーノの広場』の一説。
Mac のフォントを確認するときのダミーテキストに用いられている。

```
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
```



## リリース、ライフサイクル

**alpha release, alpha version**
α版。開発初期や試作段階にあるソフトウェア。
動作が不安定だったり、予期せぬトラブルがつきもの。

**beta release, beta version**
β版。評価版。開発途中にあるソフトウェア。

**nightly build**
毎日の成果を反映した最新の状態。
開発者が最新の機能を試すために利用する。

**canary**
カナリアリリース。
一部のユーザーへ先行公開するリリース(デプロイ)方法。
坑道でのガス事故を防ぐカナリアが由来。

**stable / devel**
安定版、開発版。
製品への明確な基準がない OSS でよく使われている。
安定版はテストなどを通しているので安心して使える。

**CTP (Community Technology Preview)**
β版と同じ。ただし、対象を限定している。
Microsoft がよく使う表現。

**EA (Early Access)**
早期アクセスまたは早期プレビュー。CTPと同じ。

**RC (Release Candidate)**
リリース候補版。試用版。β版より更に製品に近づいた状態。
版が進むと RC1, RC2, ... と増えていく。

**RTM (Release To Manufacturing)**
ゴールデンマスタ。製品出荷版。製造ラインに載せるための最終段階。

**GA (General Availability)**
正規版。

**SR (Service Release)**
サービスリリース。製品後に提供される更新プログラム。

**ER (Emergency Release)**
緊急リリース。重大なバグやセキュリティーホール対策などの更新プログラム。

**GM (Gold Master)**
ゴールデンマスタ。モバイルアプリ界隈で使われている。

**LTS (Long-Term Support)**
長期サポート版。

**STS (Shot-Term Support)**
短期サポート版。

**EOL (End-of-Life) / EOS (End-of-Support)**
サポート切れ。

**rolling release**
ローリングリリース。
常時最新を小刻みに配信する方法。


**SaaS (Software as a Service)**
Web アプリケーションを提供すること。ネットを通してオンラインでソフトウェアを実行できる。

**PaaS（Platform as a Service）**
Web アプリケーションの実行基盤を提供すること。
GAE (Google App Engine)、Microsoft Azule、AWS (Amazon Web Services) など。



## 俗語 / スラング
[InternetSlang.com](http://internetslang.com/)

**XD** : (笑)
**XXD** : (爆)
**LOL (Laughing Out Loud)** : (爆)
**ROFL (Rolling on the Floor Laughing)** : (核爆)
**LMAO (Laughing My Ass Off)** : (藁), ワラタ, クソワラタ
**haha** : w
**hehe** : haha より得意げだったり、照れたり
**ayy, ayy lmao** : w
**ayyyyyy** : www
**LOLOLOL** : www
**lolz**: ﾜﾗ(少し嘲笑が入る)

**hakspek, leet**
同じ発音の数字や記号に置き換えた表現を hakspek と称する。
より隠語的な表現をする場合は 1337 を使う。
1337 → l33t → leet

**k8s**
Numeronym(数略語) という省略方法。
k + 8文字 + s で kubernetes のこと。
他に有名なのはいくつかある。
sk8r: skater
l10n: localization
g11n: globalization
v12n: virtualization
p13n: personalization
c14n: canonicalization
i18n: internationalization
143: i love you

**2U, 4U**
to you, for you の略。あなたへ。

**thx**
Thanks の略。ありがとう。

**pls, plz**
please の略。お願いします。

**NP**
No Problem の略。問題ないよ。
分かりにくいのでまず略さない。

**GJ**
Good Job。よくやった。
ネトゲ用語なので、ネイティブは略さない。

**WIP (Work In Progress)**
未完成、未解決なもの。
中途半端なもののコミットメッセージに残す。

**LGTM (Looks Good To Me)**
レビュー承認の定番コメント。

**IMO (In My Opinion)**
個人的には。
自分ならこうするけどってときに使う。

**NITS (nitpick)**
重箱のすみをつつく。
些細な指摘のときに使う。

**RTFM (Read The Fucking Manual)**
マニュアル読め。ヘルプくらい見ろ。
派生がたくさんある。>>[WikipediaのRTFMを参照](https://en.wikipedia.org/wiki/RTFM)

**JFGI (Just Fucking Google It)**
ググれかす (ggrks) の意味。
グーグルで検索しないで聞く人に対して使う。
J をとって FGI とも。
これも派生が多い。

**R.I.P (Requiescat in Pace / Rest in Peace)**
安らかに眠れ、冥福を祈るの意味。
墓とかに R.i.p と刻まれる。
RIP と書いても通じる。
使われていないコードを消す時のコメントなどに。

**cf. (confer)**
………を参照。………と比較。
関連項目として挙げる場合は see also を使う。

**e.g. (exempli gratia)**
例えば (for example)。
日本では ex と書かれることもあるが、e.g. を使うのが正しい。
また ex で始まる語は多いので略語としては適さない。

**i.e. (id est)**
すなわち、つまり、いわゆる。

**a.k.a. (also known as)**
………と知られる、またの名を、別名。
AKA とも書かれる。

**N/A (not available, not applicable)**
利用できない、該当なし。
NA とも書かれる。

**w/, w/o**
with と without のこと。

**TL;DR (too long; didn't read)**
長過ぎるから読まなかった。長すぎ。長文うざい。
自分で書いた文章の頭につけて、長文注意の意味でも使う。
Qiita でもたまに目にするが、キャプションにつけて要約を表すことも。

`;`(semicolon)
「だから」「すなわち」「そして」にあたる so や i.e. や and を意味する。
TL;DR では、長すぎる「から」読まなかった。
ピリオドとカンマの中間くらい。

`:`(colon)
左側を具体的に説明する場合に使う。
イコールに近い。

**ETA (Estimated Time of Arrival)**
完了見込み。



## 記法について

### CamelCase, InterCaps
キャメルケース。
文字の起伏がラクダのコブのように見えることから。
主にオブジェクト指向言語で使われる。

**PascalCase / UpperCamelCase**
先頭を大文字から始める。

**camelCase / lowerCamelCase**
先頭を小文字から始める。

### snake_case
スネークケース。
C, Perl, SQL などで使われる。

**snake_case / SNAKE_CASE**
区切りをアンダースコアで表現する。
C 言語などでは定数を表す場合は全て大文字で書くのが慣例。

### chain-case
チェインケース。
PowerShell などで使われる。

**chain-case / Chain-Case**
区切りをハイフンで表現する。

### ハンガリアン
考案者の出身地にちなんで命名。
名前に情報を追加して書く記法。

元々はアプリケーション ハンガリアンとして考案された。
本来は意味を表すプレフィックスを付け、間違ったコードを発見しやすくするもの。

```csharp
    int rpX; // 相対座標 Relative Position
    int apY; // 絶対座標 Absolute Position
    var point = new Point(rpX, apY); // rpとapが使われているので間違いだと気づく
```

型情報を付与するのがシステム ハンガリアン。
論文中の type を種類ではなく型情報と誤解し、コンパイラの型情報が十分でなかった C 言語において広まった。

```cpp
    bool bFlag; // 論理型
    char chChar; // 文字型
    char[] sString, szString; // 文字列型, ゼロ終端文字列型
    int iInteger; // 整数型
    int* pPointer; // ポインタ型
    int (*fnFunction)(void); // 関数ポインタ
    int hFileHandle; // ハンドル型
```

しっかりした型付け言語が登場して、使われなくなってきたが、たまにどこかで使われている。
Android で Google のガイドラインに載ってたりする。

```java
    private int mMember { get; set; }
    public static int sStatic { get; set; }
```



## アクセサは不要という流れ
アクセサ (getter / setter) とは、Java 言語における、隠匿されたフィールドにアクセスするための getXXX / setXXX というメソッドのこと。
JavaBeans においては、getter / setter を強制するという言語仕様があった。
アクセサがあまりにも冗長なので廃れた。

~~Java SE 7 から property が使える。~~
Java SE 7 で property の構文がドラフトになっていたが却下された。
`public property String name;`

C# では Java のアクセサより洗練されたプロパティという仕組みがある。
C# の言語バージョンが進むにつれ、より洗練されていった。
`public string Name { get; private set; } = 0;`

Ruby は言語仕様としてアクセサ (attr_accessor) を簡単に定義できる。
`attr_accessor :name, :price`

新しく登場した言語である Kotlin や Swift ではフィールドは宣言できず、全てプロパティとなる。
`public var name : String`

### カプセル化
オブジェクト内の振る舞いやデータを隠匿するカプセル化という考え方がある。
多数のアクセサやプロパティを設けることにより、誰でも自由にデータを変更できるとカプセル化の原則に反してしまう。
必要のない情報は公開しないようにする。

言語によっては、フィールドを public にできるのでプロパティの代わりに利用されることがあるが、よくない設計である。
簡潔に書けるからといって、フィールドを public にしてはいけない。(最近の Visual Studio では警告が出るようになったらしい)

### デメテルの法則(LoD: Law of Demeter)、最小知識の原則(PLK: Principle of least knowledge)
「知らないヤツには話しかけない(Don't Talk to Strangers!)」とも。
アクセサやプロパティで他のクラスを参照できてしまうと、余計な依存関係が生まれてしまう。
直接参照する必要のないクラスは隠匿しておくのがよい。

### 求めるな、命じよ(TdA: Tell, don't ask.)
オブジェクト指向における重要な設計指針のひとつ。
関数型言語では、データを取得してから、何らかの処理をしてデータを戻すという手順をとる。
オブジェクト指向では、データを持つクラスに命じるだけで済む。
この原則を守ることにより、データを取得する必要が最小限となる。






## 翻訳サイト
よく使う翻訳サイトは下記の通り。

[英辞郎(アルク)](http://www.alc.co.jp/)
多数の結果が引っかかるので探しやすい。

[Google翻訳](https://translate.google.co.jp/?hl=ja)
URL を渡せばサイトを丸ごと翻訳も可能。

[Google](https://www.google.co.jp/)
細かいニュアンスなんかを調べるときは「"XXX" 翻訳」で検索する。
似た意味の言葉で迷ったら「"XXX" "YYY" 違い」などとする。

[Dictionary.com](http://dictionary.reference.com/)
英語の語源なんかも調べられる。

[Wiktionary(en)](https://en.wiktionary.org/)
意味、由来、用法、関連語などが調べられる。

[GitHub](https://github.com/)
オープンソースなコードを検索できる。
その単語がどのような使い方をされているか実例を見たい時に。

## 参考にしたサイト

### お気に入りの記事
[きれいなソースコードを書くために必要な、たったひとつの単純な事](http://d.hatena.ne.jp/r-west/20090510/1241962864)
鉄の意志、超重要。

### Qiita
[ネイティブと働いて分かった英語コミットメッセージの頻出動詞10つ](http://qiita.com/gogotanaka/items/b65e1b081fa976e5d754)
[プログラマなのに知らなかったら恥ずかしい英単語集](http://qiita.com/usatie/items/b41adf8114188406d2b8)
[英語コミットコメントに使えるオシャレフレーズ集](http://qiita.com/ken_c_lo/items/4cb49f0fb74e8778804d)
[ggrksと英語でコメントしたい時](http://qiita.com/modal_soul/items/77c98756cd03b2ca1aaa)
[ネイティブと働いて分かった英語コミットメッセージの頻出動詞10つ](http://qiita.com/gogotanaka/items/b65e1b081fa976e5d754#comment-645bc0515a349fcd206e)
[Naming -名前付け-](https://qiita.com/Koki_jp/items/f3d3e824f98d182d4100)
[日本人が間違いやすいコーディング上の英語](http://qiita.com/sue738/items/9754b3cad13272bd3d39)
[技術記事読んだ時の英単語メモ①](http://qiita.com/shohhei1126/items/18188d361ebd6da2bdba)
[クラスの命名のアンチパターン](http://qiita.com/magicant/items/8134edf969f9629fa66e)
[よりよいネーミングを目指して](https://qiita.com/takasek/items/693c57dc9ddc6c1eb1ba)
[コンピュータ業界でよく出る英語](https://qiita.com/tfutada/items/d1b17cd4008876c17bf4)
[IT企業で英語を使う時の３つのポイント](https://qiita.com/ymknsg/items/3bdbbebf840e073aab29)
["a SQL" と "an SQL" どちらが正しいか？](https://qiita.com/ksugimori/items/a09a48984f4d77af1b99)
[IT英単語の発音とスペル](https://qiita.com/bezeklik/items/ad32492b5c247399dca9)
[多忙なプログラマーのための軽トラな英語リスニング&スピーキング](https://qiita.com/tfutada/items/91d727ef435c18fb8dba)
[フォニックスで英語発音は良くなる](http://xn--obkh275uja6547dgoj.com/fonikkusu_eigohatuon/)

### それ以外
[関数名によく使われる英単語の意味とニュアンス](http://php-archive.net/php/words-in-function-names/)
[今更聞けないIT英語](http://ascii.jp/elem/000/000/061/61358/)
[「よりよいコードを求めて命名について頭をひねる会」のログ](http://y-anz-m.blogspot.jp/2012/11/blog-post.html)
[INFO: Object Hungarian Notation Naming Conventions for VB](https://support.microsoft.com/en-us/help/173738/info-object-hungarian-notation-naming-conventions-for-vb)
[機械学習に出てくる数式で読めないギリシャ文字チートシート](https://qiita.com/kaeken1jp/items/07e8b9c3025bb9dfc014)
[LOL - Wikipedia](https://en.wikipedia.org/wiki/LOL)