見出し画像

ナニイッテルカワカラナイ…

僕は文系人間だが工学部を出た、というのはこれまでに何度か書いた。
赤ん坊がどうやって言語を獲得するのかという言語学的、発達科学的な興味が高じ、人工知能の研究をするために電気工学科を選んだのだ。

得意な教科は国語、社会だったから、理数系はかすりもしない。
だから電気工学科に入るための数学、物理の勉強は面倒極まりなかった。
でもそんな僕にも、ひとつだけ理数系ぽい興味があった。
コンピューターのプログラミングだ。

僕は小学生の頃にポケコン(ポケットコンピューター)と出会った。
ポケコン、おもしろいのなんのって。
ちまちまとプログラムを打ち込んでRUN(実行)し、思いどおりに動いたときの感動といったらない。
ドハマりした。

中学生になって僕はポケコンからパソコンに進み、以来これまでに20台ほどのパソコンを使い潰しながら、いろんなプログラムを組んできた。
結婚以来、家でずっと使っている家計簿アプリも自分で作ったものだ。
おもに使うのはかみさんだから、使用感を聞いて何度も改良を重ねてきた。

以前記事にしたように「オイルショック」というモノポリーに似たPCゲームを作ったこともある。

その膨大なプログラムのごく一部、ゲーム盤面を準備する部分がこれ。

Public Sub Initialize()

On Error GoTo Err_Hand:

  Dim a As Byte, b As Byte

  For a = 1 To 4
    frmBoard.lblPiece(a).Visible = False
    frmBoard.lblPieceShadow(a).Visible = False
  Next a

  stcPlayer(0).tech = 1   'NowValueで所有者のない土地の計算を是正するため
  sngMarket = 1

  For a = 1 To bytMember
    stcPlayer(a).position = JAPAN
    frmBoard.lblPiece(a).Left = X_INI + OFFSET * (a-1) / (bytMember-1)
    frmBoard.lblPiece(a).Top = Y_INI
    frmBoard.lblPieceShadow(a).Left = (X_INI+15) + OFFSET * (a-1) / (bytMember-1)
    frmBoard.lblPieceShadow(a).Top = (Y_INI+15)
    frmBoard.lblPiece(a).ZOrder 1
    frmBoard.lblPieceShadow(a).ZOrder 1
    frmBoard.lblPiece(a).Visible = True
    frmBoard.lblPieceShadow(a).Visible = True
    frmBoard.lblPieceNote.Top = NOTE_Y_INI
    frmBoard.lblPieceNoteShadow.Top = NOTE_Y_INI-60

    stcPlayer(a).money = INIT_MONEY / bytMember
    frmBoard.lblMoney(a).Caption = Format(INIT_MONEY / bytMember, "#,##0;finish")
    frmBoard.lblMoney(a).Visible = True
    frmBoard.lblMoneyNote(a).Visible = True

    stcPlayer(a).intrial = False
    stcPlayer(a).finish = False
    stcPlayer(a).order = 1
    stcPlayer(a).tech = 1
    frmBoard.lblTrial(a).Visible = False
    frmBoard.lblTower(a).Visible = False
  Next a

  intCasino = 100
  frmBoard.lblMoney(Casino).Caption = intCasino
  frmBoard.lblMoney(Casino).Visible = True

  For a = 1 To 8
    For b = 0 To 1
      bytGroup(a, b) = 0
    Next b
  Next a

  For a = 1 To 40
    stcArea(a).owner = 0
    stcArea(a).fight = 0
    frmBoard.lblValue(a) = Format(stcArea(a).value, "#,###")
    frmBoard.lblPrivilege(a).Caption = ""
    frmBoard.lblPrivilegeShadow(a).Caption = ""
    For b = 1 To bytMember
      stcArea(a).appraisal(b) = 0
    Next b
  Next a

  For a = 1 To 2
    stcTel(a).owner = 0
  Next a

  bytOrder = bytMember

  bytCurrent = 1
  CurrentDisp

  frmBoard.lblPieceNote.Enabled = True
  frmBoard.lblPieceNoteShadow.Enabled = True
  frmBoard.lblWho(0).Enabled = True
  frmBoard.lblBandesu.Enabled = True
  frmBoard.imgDice(0).Enabled = True
  frmBoard.lblDiceCap.Enabled = True
  frmBoard.tmrDice.Enabled = True

Err_Hand:
  If Err.Number = 340 Then
    Resume Next
  End If

End Sub

(こういうの見るとクラクラする人は、見なかったことにして先へ)

会社では、社員が使うアプリやシステムをいくつも作った。
年表作成支援アプリ、レジ集計アプリ、顧客管理システム、販売管理システム、通販受注システム、営業提案書作成支援アプリなどだ。

文系人間だけど、とにかくプログラミングが好きなのだ。

プログラミングには論理的な思考、とくに数学的帰納法が必要になる。
数学が苦手なはずなのに、この帰納法だけは大好きだった。

$${\boxed{参考}}$$ 数学的帰納法
ある命題$${X}$$について、
・$${n=1}$$のとき$${X}$$が成り立つ
・$${n=k}$$のとき$${X}$$が成り立つとすると、$${n=k+1}$$のときも$${X}$$は成り立つ
これらを証明することにより、すべての自然数について$${X}$$が成り立つことが示される。

(こういうの見るとムカムカする人は、見なかったことにして先へ)

帰納法とは、いくつかの事実から共通点を見出して結論を導く論理手法。
たとえば「神戸は雨だ」「札幌は雨だ」「那覇は雨だ」という事実から「全国的に雨だ」という結論を導くような。
逆に、一般的な前提を個別の事例に適用する手法を演繹法という。
「全国的に雨だ」「神戸は日本の都市だ」から「神戸も雨だ」を導く。

例えるなら帰納法とは、板に小さな穴を開けて世界の一部を覗き、その板をずらしていけば最後は必ず世界全体を見られるよね、というようなこと。
ちょうどよい大きさの穴を見つけるのが僕には楽しかったのだ。
…チョットナニイッテルカジブンデモワカラナイ。

先日、僕はマーケティングよりブランディングが好きだと書いた。

実はその記事を書きながら、自分がなぜプログラミングが好きなのか、なぜ帰納法なのかに思い至り、今日のこの記事に繋がった。

誤解を恐れずいえば、マーケティングは「理想のゴールに向けてどんな手を打つか」すなわち演繹法であり、ブランディングは「今あるものをどう理想のゴールに近づけていくか」すなわち帰納法だ。

ブランディングに人生の大半を注ぎ込んできた僕は、まさに帰納法的思考で生きてきたといえる。
文系人間を自認しながら小学時代からプログラミングにドハマりする資質は十分にあったのかもしれない。

ゴメン、ヤッパリナニイッテルカワカラナイ…

(2023/5/19記)

サポートなどいただけるとは思っていませんが、万一したくてたまらなくなった場合は遠慮なさらずぜひどうぞ!