LoginSignup
45
37

プログラマの数学

プログラマの数学という本があるらしい。

プログラマに必要な数学は引き算だけだと思っている。
だからまだ読んでいない。

計算機に数学は必要だと思っている。
だからプログラマには数学は必要ないというのが持論。

<この項は書きかけです。順次追記します。>

プログラマの英語

それはともかく、「プログラマの英語」について考えてみる。

前提としてプログラマは自然言語が話せる必要はないと思っている。自然言語の日本語も、自然言語の英語も話す必要はないと思っている。

プログラミングには、英単語に基づいた定義がいろいろある。そこで、プログラミング言語によって、知っていると便利な英単語はあるかもしれない。

国際英語

情報技術の国際会議に参加して、
フランス人はフランス語発音の英語を話す、
ドイツ人はドイツ語発音の英語を話す、
スペイン人はスペイン語発音の英語を話す、
イタリア人はイタリア語発音の英語を話す、
中国人は中国語発音の英語を話す。

それぞれ、
フランス人はフランス語の単語の混じった英語を話す、
ドイツ人はドイツ語の単語の混じった英語を話す、
スペイン人はスペイン語の単語の混じった英語を話す、
イタリア人はイタリア語の単語の混じった英語を話す、
中国人は中国語の単語の混じった英語を話す。

なぜ、日本人だけ日本語の混じった英語を話さないのだろうと不思議に思ったことがある。

ある国際会議で、先輩が、
日本語まじりの英語を話していて、誰も違和感のある顔をしていなかった。
日本人でも日本語交じりの英語を話す人がいた。

別に不思議でもなんでもない。

私はイギリス人と組んで、国際規格のエディタをしていた時、彼女から、「私が英語を担当するから、あなたは技術的なことを担当して。」と言われた、あの、技術的なことも、すべて英単語で書いているんですけどと思った。自分ではすべて英語でやりとりしているつもりだった。
私の書く英単語の羅列は、彼女にとっての英語ではないらしい。何も聞かれずに英語にしてる。意味は通じてる。

ま、それはそれで役割分担だからいいだろう。

アメリカ人からは、"for clarification"と言って英語で質問を受けた。ようは、英語で書いた内容が、複数の意味に取れる可能性がありそのうちのどれかを明確にしたい、背景とか文脈の記載がないので賛成すべき内容か、反対すべき内容かわかりにくいということらしい。

プログラミングに関する話題の場合は、
実際にプログラミング言語で例を書けば、
プログラミング言語だけでほとんど解決する。

それでも、プログラム例を書く時に、
その言語の英語での意味を知っていないと、
わかりにくい例を書いてしまうかもしれない。

変数とか、定数とか。

そこで、プログラマが最低限知っているとよさそうな英単語を、プログラミング言語ごとに整理してみようと思う。

ここでは単語について扱うが、自然言語の文法は扱わない。
単語の羅列で意味が通じることを表現しようとしている。

プログラミング言語が嬉しいのは、単語の羅列で仕事をしてくれることだから。

自然言語の文法は、歴史的な存在確率に依存しているから理解は難しい。
言語の理解を容易にするための仕組みとして発達してきた文法のはずが、
文法を振り回す人が、理解を困難にしているのかもしれない。知らんけど。

C言語編:最初の32 64 70 80 単語(例)

まずは、C言語編。
まず32単語記してみる。すぐに64語にする。
そして128語にする予定で追加中。
これは入れるべきという単語はコメント欄にお願いします。

発音は日本語読みでいいから、特に記さない。
変な読みをすれば、"for clarification"といって質問が出るかもしれないくらいだから。

M2583 ISO/IEC JTC1 SC22 WG14 C2X(9899) draft
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2583.pdf

から引用。[]書きはその章節番号。

主要 32語

1. main 主

5.1.2.1 Freestanding environment
1 In a freestanding environment (in which C program execution may take place without any benefit of an operating system), the name and type of the function called at program startup are implemen- tation-defined.

仮訳「5.1.2.1 自立環境
1 (オペレーティングシステムの恩恵を受けずに C プログラムの実行を行う可能性がある)自立環境では、プログラムの起動時に呼び出す関数の名前と型は実装定義です。

OSEK OS, AUTOSAR OSなどのように、OSが起動する前に、C言語の関数を実行する場合は、mainでなくてもよい。
その後、startOSという関数でOSを起動したりする。
C言語が用意すべき関数の種類も少なくて良い。

5.1.2.2 Hosted environment
5.1.2.2.1 Program startup
1 The function called at program startup is named main.

仮訳「5.1.2.2 主催環境
5.1.2.2.1 プログラムの起動
1 プログラムの起動時に呼び出す関数の名前は main です。」

OSが主人(host)で、OSの起動後に主(main)関数を呼び出す。

Cプログラマは、mainという単語の意味を知っているだけでは役に立たない。C言語で定義している二つの環境で、一方はmainという名前であってもなくてもよく、一方ではOS起動後にmainを実行しなくてはいけない。

main関数とだけ言っていては、どちらの話しをしているのかわからない。Windows, macOS, Linux, Unixなどのhosted環境が前提であれば、省略してもよい。

2. print 印刷

7.8.1 Macros for format specifiers

p182.c
#include <inttypes.h> 
#include <wchar.h> 
int main(void)
{
  uintmax_t i = UINTMAX_MAX; // this type always exists 
  wprintf(L"The largest integer value is %020" PRIxMAX "\n", i); 
  return 0;
}

C言語の文法の本で、mainとprintf関数を使った例を最初に持ってくる場合がある。
mainもprintfも、C言語では例外中の例外の可変引数関数で、文法書としては好ましくない。C言語のほとんどすべての関数は引数が固定だ。
実用書としては最適。コンパイルして動かすのを確かめるのに、一番わかりやすい。

それはさておき、
printfは、print format関数。
wprintfは、wide character print format関数。

7.22.7 Multibyte/wide character conversion functions . . . . . . . . . . . . . . . . . 314

multibyte character, wide characterは、2バイト以上の文字を指す。

3. integer 整数

変数として宣言する時はint。
CPUの種類によって、intが16bitだったり、32bitだったりすることがある。
大切なのは、CPUのregisterの大きさをint宣言で使うことにより、registerより小さい変数を代入する場合には、
整数変換(integer conversion)という処理をCPUが行うことがあり、C言語としてもCPUの処理をそのまま利用する場合と、他のCPUとの整合性を取る上で、余分な処理をすることがあるかもしれない。

C言語の、なるべく速く、なるべく小さなソフトウェアが書けるようにするには、CPUの能力を最大限利用できることが望ましく、余分な処理を付け加えるのは好ましくない。

4. character 文字

[3.7.1] 1バイト文字。
文字型 charは、8bitの値を指す。
CPUによっては、符号なしが基本の場合と、符号付が基本の場合があるかもしれない。
CPUが符号付が基本だと、7bit文字として扱うかどうかは処理系(compiler)によるかもしれない。

5. long 長い

long integer, ビット数の多い整数を指す。
long doubleは、四倍精度浮動小数点128bit。

6. short 短い

short integer、ビット数の小さい整数を指す。

7. float 浮く

浮動小数点変数を指す。32bit.

8. double 倍

倍精度浮動小数点変数を指す。64bit.

9. signed 符号付

+, - の1ビットの符号ビットがある変数を指す。

10. unsigned 符号なし

+, - の符号ビットのない変数を指す。

11. void なし

関数の戻り値なしの宣言、引数なしの宣言などで使う。
ないことを指す。

freestanding環境であれば、void main(void)というstart up関数でもよい。

12. null 無効

voidとの違いは、定数を示す機能がある。NULLと書く。
変数に代入できる。voidはcastには使えるが、代入はできない。

voidとNULLの違いがわかればC言語プログラマと言ってもいいかも。

13. constant 定数

定数宣言ではconst。

14. include 含む

プログラムファイルに、他のプログラムファイルがそこにあるように機能させる。
#include <stdio.h>

15. define 定義

定数定義、マクロ定義など。
#define A B

16. enumarate 列挙

列挙型宣言は enum.

17. struct 構造

構造体宣言の場合はstruct.

18. union 結合

共用体宣言の場合はunion.

19. volatile 変わりやすい

外部入力のregisterのように、C言語プログラムで値を買えなくても、値が変わっている可能性のある変数に宣言する。この値に変更がないことを前提とした最適化を行わないことを処理系に指示するのに用いる。

20. continue 継続

繰り返しで、処理を続ける命令。

21. break 中断

繰り返しの途中で抜け出る命令。
多重繰り返しの場合に、どこに抜けるかが、
一目でわかるかどうかが可読性の勝負。

22. return 戻る

関数呼び出しから戻る場合に記述する命令。

23. goto 行く

go toを一語にした命令。
機械語のjump(jmp)に相当する。
プログラムの戻る方向へのgotoは好ましくなく、
プログラムの先に進むgotoは、時間短縮の場合に用いることがある。goto論争などは気にせずに、code completeを参考に。

code complete
51Sdan3jlwL.SL500.jpg

24. if もし

条件文の基本形。前処理で記述する場合は#ifと書く。

25 else それ以外

条件文が成立しなかった場合の命令。前処理で記述する場合は#else。

#elif は、 #else, #ifがあるものと同じ。

26. end 終わり

前処理の場合は、#endif。
どの#ifの終わりかがわかりにくいのがC言語前処理の課題かも。

27. for ために

繰り返し文の最初の文言。ifより綺麗に書ける。

28. switch 切り替え

他条件分岐。ifより綺麗に書ける。

29. case 場合

switch文の個々の分岐を表現するのに用いる。

30. default 規定値

switch文で、caseで示したもの以外すべてを代表する。

31. while 間

条件が続く繰り返し文。ifより綺麗に書ける。

32. do 実行

条件が続く繰り返し文の最初に記述し、whileまでの間を繰り返す。
ifより綺麗に書ける。

#主要64語

33. and そして

論理積
結果を1か0かを求める論理積(logical and)演算などで使う。bitwise がつくと、1ビットごとに論理積を求める。

34. or または

論理和
結果を1か0かを求める論理差(logical or)演算などで使う。bitwiseがつくと、1ビットごとの論理和を求める。

35. bit(binary digit)二進数(一桁)

[3.5] 二進数(一桁)をbitという。

36. byte(束)

[3.6] 実装依存のbitの束。
最初に普及したCPUは4004は、4bit CPUだった。
次に普及した、z80, 8080は8bit CPUだった。
主記憶(main memory)の単位は、8bitごとに番地(address)をつけることが普及し、CPUからの登録器(register)の読み書きも8bitごとだった。
この頃に、byteは8bitという習慣が身についた。

byteを7bitとか、6bitとかで操作しているシステムもあったかもしれない。
使ったことがないので省略する。

8bitで1byte

37. register 登録器

同時に演算する並列装置。4,8,16,32,64,128などがある。
浮動小数点演算装置(FPU: floating point unit)では80など。

38. memory 記憶

ICで値を保持する場合をmemory 記録という。
磁気などで値を保持する場合をdisk, disc 記録円盤という。

ICの記憶で、揮発性と不揮発性があり、不揮発性は電源を落としても値を保持する。揮発性は電源を落とすと値は消える。

39. bool 論理値

trueかfalseの値をとる変数をbool宣言できる。

英語(24)アンの部屋(人名から学ぶ数学:岩波数学辞典)
https://qiita.com/kaizen_nagoya/items/e02cbe23b96d5fb96aa1

40. True 真

C言語では整数の1。

41. false

C言語では整数の0。

42. bitwise ヒット単位の

1ビットごとの演算命令であることを示す。
ビットAND, ビット OR, shirtなど。

43. field 野

bit fieldで、2進数で1ビットごと代入できる方式。

44. type 型

型宣言は typedefは、type definition, type defineの短縮名

45. header 見出し

header fileで、宣言文などを集めた拡張子.hのファイル。

46. file 紙挟み

複数の文字列を記載した紙を束ねたもの。
電子的には、ファイル名で管理する。

47. preporcessing 前処理

include, defineなどの処理をコンパイル前に実行すること。

48. comment 注釈

プログラマの覚えとして命令(機械語)にしない文字列。
1行用 //
任意行用 /* */

p61.c
"a//b" // four-character string literal
#include "//e" // undefined behavior
// */  // comment, not syntax error
f = g/**//h;  // equivalent to f = g / h;
//\ 
i(); // part of a two-line comment
/\
/ j(); // part of a two-line comment
#define glue(x,y) x##y 
glue(/,/) k();
/*//*/ l();
m = n//**/o
+ p;
#define glue(x,y) x##y
glue(/,/) k(); // syntax error, not comment 
/*//*/ l(); // equivalent to l();
m = n//**/o
+ p; // equivalent to m = n + p;

STARC RTL設計スタイルガイド verily-HDL編では、
//コメントを推奨している。

RTL設計スタイルガイド Verilog HDL編(System Verilog対応版)
https://qiita.com/kaizen_nagoya/items/4c02f1575db1f28310a7

49. cast 配役

ある型の変数を別の型の変数に変換すること。

50. format 形式

printfのfがformat。
typeの型は、変数の宣言の種類。
formatは、入力、出力の形式で、どういう型の変数がいくつ、どんな順番でならんでいるかなどを指す。

51. comma ,

演算子として利用する場合は、一行に複数の演算をする場合に、,で区切り、前と後は別の演算であることを示す。
引数の並び、定数の並びなどの区切り文字として使うこともある。

52. semicolon ;

プログラムの行の終わりを示す。
include, defineなどの終わりには置かない。

53. freestanding 自律

C言語が想定する二つの種類の処理系・環境の一つ。
OSの支援を受けずに開始する場合。
C言語で規定する一部の関数だけを利用する。

54. hosted 主催

OSが起動してからmain関数を実行する処理系・環境を。
C言語で規定しているすべての内容を利用する。

55. compile 編纂

fileと似た概念であるが、前後入れ替えたり編み直すみたいな感じ。
C言語では、機械語に変換することを指す。

56. link 連携

複数の機械語のファイルから、一つの実行ファイルを作成することを指す。

57. error 誤り

compile error, link errorなどで使う。
どちらで発生した誤りかを示すとよい。

58. make 作成

makeはコマンドで、compile, linkの順番を指定する。
makefileは、compile, linkの手順を書いたファイル。
makeだけを実行するとmakefileという名前のファイルの記述おw実行する。

ソースコードAを示し、
A make compile error.
like this.
としてエラー出力を示す場合に、makeを使うとよいかどうかは識者の意見をまつ。

59. macro 巨視

文字列の置き換え前処理をmacroという。
#defineなど。
関数型マクロは、関数とまぎらわしく、かつ関数と同じ振る舞いをしないあたりが危険かも。

60. undefined 未定義

前処理の場合は、#undef。
C言語の未定義は、計算機の発展、コンパイラの発展を阻害しないために、敢えて定義しないことを決めている積極的な規定。

「自動車の故障診断に関連するプログラマーになりたての方が参照するとよさそうな情報」の読み方
https://qiita.com/kaizen_nagoya/items/0c6b8373f93ce52def33

61. unspecified 未規定

C言語の未規定は、実現方法が2つ以上あるうちのどれにするかを規定しないことを指す。これも、計算機の発展、コンパイラの発展を阻害しないために、敢えて定義しないことを決めている積極的な規定。

62. locale 場所

C言語の地域による文字コード、通貨、年月日表示、時刻表示などの設定。

63. implementation 実装

C言語のコンパイラを指す。
C言語のコンパイラごとに、定義した方がよいことがある。
例えば、対象のCPUの特別な機能を使えるようにするのに、
機械語のライブラリを作ったり、新たな関数定義をしたり、
その機能によって実現方法はいろいろ考えることができる。

CPU、コンパイラの発展を阻害しないための積極的な規定を、
implementation definedという。

64. environment 環境

C言語を実行するOSは、C言語から見れば環境である。
hostedとfreestandingの2種類がある。

主要128語(途中)

65. escape 逃れる

ある状態から別の状態になることを指す。
escape sequence: 制御文字列

66. sequence 列

escape sequence: 制御文字列
sequence point: 副作用完了点

67. function 関数

数学の関数は、引数を持って、値を返すのを主作用とするもの。
C言語の関数でも、同じ意味で使うことがある。
値を返さないC言語関数は、主作用はなにもせず、副作用として必要な処理を行う関数である。

68. name 名前

69. space 空間

name spaceで変数、関数、定数などの名前空間を指す。

70. pragmatic 実用的な

#pragma前処理で、処理系の実用的な定義を可能にする仕組み。

71. access 接続

[3.1] メモリを読んだり、書いたりすること。

72. alignment 整列

[3.2] 大きさを合わせること。

73. argument 議論

[3.3] 関数の引数。

74. behavior 振る舞い

75. value 値

[3.19]

76. signal 信号

ヘッダファイル名はsignal.h

77. limit 制限

ヘッダファイル名はlimits.h

78. mathematics 数学

ヘッダファイル名はmath.h

79. assert 主張

ヘッダファイル名はassert.h

80. jump 飛ぶ

ヘッダファイル名はsetjump.h
機械語の短縮名はjmpのことがある。

#番外編

1. CPU(Central processing unit) 中央処理装置

IC一つで機能するものをCPUという習慣がある。

単語の元々の意味からは、IC一つでなくてはいけないという制約はない。CPU ICという単語から、CPUと言ったら、IC一つのCPUという慣習がある。

2. IC(Integrated Circuit) 集積回路

ICは、連続(analog)であるか離散(digital)であるかを問わない。現象としても、連続が本質の現象もあれば、離散で捉えた方がわかりやすい現象もある。

原子の電子の数、軌道などは離散で考える場合がある。

3. ISO(International Organization for standard) 国際標準化機構

英語の頭文字の順番でない用語は、短縮名(short name)ということがある。

4. IEC (international Electrotechnical Commission) 国際電気標準会議

5. JTC1(Joint technical Committee one) 合同技術委員会1

情報技術は、ISOとIECの合同技術委員会で審議している。

あとがき

Pat Transerという機械翻訳ソフトの試作の段階の事業に参加したことがある。
その当時は、最先端を行っていた。

今では、統計と確率による機械学習のソフトに肩を並べられてしまった。
語源研究、文法解析の敗北は認めたくない。

そうはいっても、三浦言語学の研究者と一緒に仕事をしていて、
話し手と聞き手の関係から意味を解読することに集中していて、
文法から意味を解読することはなかった。

名古屋市の姉妹都市との友好関係を示すためのスペイン語の通訳ボランティア向けスペイン語研修の際に、品詞や変化形を気にせずに、必要なことは単語の羅列で通じるということを教わったことがある。

通訳ボランティアとして友好行事に参加した。
語彙がすべての戦いだったような気がする。

参考資料(reference)

[C][C++]の国際規格案の例題をコンパイルするときの課題7つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a

英語(1) プログラマが知っているとよい英単語の語源
https://qiita.com/kaizen_nagoya/items/9de6d47c47e2c211222b

データサイエンティストの気づき!「勉強だけして仕事に役立てない人。大嫌い!!」『それ自分かも?』ってなった!!!

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>

文書履歴(document history)

ver. 0.01 初稿 32単語 20210604 午後
ver. 0.02 64単語 20210604 夜
ver. 0.03 70語 20210606
ver. 0.04 80語 20210607
ver. 0.05 加筆 20220918
ver. 0.06 ありがとう追記 20230502

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

45
37
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
37