guntamania

人にプログラミングを教える

[2019-07-16 Tue]

人にプログラミングを教えようというわけ。

しかしいざ教えると何を教えるべきか非常に思案する。 まずはFizzBuzz問題を解ける程度のロジックを身に着けてからか、 いや、最近のプログラミングはWebAPI をさっくり叩いてから始まるのだからそんなものは必要ないだろう、 しかし、それをするにも最低限ロジック組めないと話にならない等‥ 結構堂々巡りしてしまう。

たとえば、IF文を教えるとする。Javascriptでやってみるとして

var i = 0;
if (i === 0) {
  alert("これは0");
} else {
  alert("これは1");
}

となると思うんだけど、まず var とは何なのか。 イコールが3つ連なっているのはなぜか。 ダブルクオーテーションは何なのか。 というかそもそもこのプログラムに何の意味があるのか。

IF文ひとつとっても結構詰まってしまうというか、 前提知識が色々と必要になってくる。 普段なにげなくやっていることだが、 それだけに結構根気が必要になってくる感じだ。

あまり時間をかけず、10時間程度で入門するには‥

以下のgitで目下思案中だ。

せっかく人に教えるのだから、知見をためていきたいと考えている。

Ruby入門

IF文を駆逐する

[2019-07-19 Fri]

IF文の話を書いたけど、最近のモダンなプログラミング言語って明らかにIF文を駆逐しにきている気がする。 昔のプログラムってもっとIF文だらけだった気がするんだけど。

if (null != nameStr && nameStr != "") {
  if (isWithDoctor()) {
    nameStr += DOCTOR_TITLE;
  } else if (isWithMr()) {
    nameStr += MR_TITLE;
  } else if (isWithMs()) {
    nameStr += MS_TITLE;
  }
} 

モダンなプログラミングでももちろんIF文で書くこともできる。 ただ、やはり流れは追いにくくなる。 単なる null チェックなのか、フラグを監視しているのか、値を比較しているのか。 可読性を相当に失ってしまうので、 モダンな言語を扱えるのならば、IF文はできる限り書かないべきだとは思う。

nameStr = nameStr?.takeIf{ it != "" }?.let{
  when {
    isWithDoctor() -> DOCTOR_TITLE
    isWithMr() -> MR_TITLE
    isWithMs() -> MS_TITLE
    else -> ""
  } + it
}

しかし、この話って初学者には難しい。 条件文と繰返し文があれば、理論的にはどのプログラムも等価に書ける。 そうすると、やはり初めのうちは単純な条件文と繰返し文で ガリガリ書いていくべきだと思うのだ。

IF文より前に、繰返し文はFOR文やWHILE文を書かなくなった。

for (int i = 0; i <= arr.length; i++) {
  someProcess(arr[i]);  // エラー発生!
}

こっちのほうがむしろ初心者殺しかもしれない。 繰返し文を書くのに値の範囲を意識しないといけないなんて! なので、こちらは EACH 文を先に学ぶべきかもしれない。

for (int value : arr) {
  someProcess(value);
}

夜と霧と現代

[2019-07-29 Mon]

夜と霧を週末に読了した。

今まで強制収容所の事について、史実的なことは大まかに知ってはいたものの、 実際の経験者によるノンフィクションは初めて読んだのだった。 やはり経験者の語る強制収容所の体験は筆舌に尽くしがたいものであった。

数々の蛮行、サディスティックな虐待等を別にして、心理的側面からいうと、現代の日本人、特にサラリーマンにも通じるものがあるのではないかと思った。 程度は違えど、将校やカポーからの理不尽な暴力に耐え目立たぬように群衆に紛れていく姿が、現代の社畜と揶揄される人々と重なったのだ。

以前の僕の職場はいわゆるホワイトであった。

有給休暇消化率も高く、残業時間も概ね36協定の範囲内だったし、残業手当も全額支払われた。 にもかかわらず、やはり日常の業務で頭を悩ませていたのは上司の理不尽な要求であった。 ときは理屈すら凌駕し、賽の河原を積むような業務を命令されることもしばしばだった。

そこまでいかずとも、出社時間や休憩時間を決められた上、退社時間も自分でコントロールできず、勤務しているサラリーマンは多いのではないだろうか。 恐らく多くの社会人はは感情や情熱を殺し、業務を遂行していることだろう。

これはサラリーマンをしている日本人の、共通の悩みではないだろうか。 会社によって生活・人生をコントロールできなくなってしまう点においては、 強制収容所での体験と一致するところがあるかもしれない。

これを解決するのは、本書によると、生きることへどのような意味を見出すかということになる。

理不尽な要求に耐える苦しみこそが組織への貢献を意味し、それが生きる意味なのだと考えてもいいし、 全く仕事とは関係ない、家族を守り育てることに意味を見出す人もいるだろう。

自由なはずの我々でさえこのように自問しなければならないと気づかせてくれるのが 本書が名作だと云われる所以なのかもしれない、と思った。

Emacsのツリー表示

[2019-07-31 Wed]

Emacsのツリー表示をどうしようかずっと考えていた。

../../data/screenshot-20190731-094818.png

そうそう、こういうのがほしかったんじゃよ‥ treemacs というのか。

treemacs | GitHub

以前は emacs-neotree というのもあったよう。 残念ながらこっちは更新が止まっているようだ。 スクリーンキャプチャとか Qiita みてると良さげだったんだけどなあ。

emacs-neotree | GitHub

emacsの歴史的にはSpeedBarというものがあってじゃな。 これはフレーム毎分離してしまうんで、明らかに扱いづらかった。 OSの機能でも直接叩いているのかな? とにかく、機能自体がEmacsの仕組みを超えてしまっているので、ちょっと使いづらい。

SpeedBar | EmacsWiki

僕が使っているのは、m2ym氏のdirex。

direx-el | GitHub

これも素晴らしく、かなりミニマルな動作なのでバッファ移動だけで十分だい、と意固地なEmacs使いも納得してもらえる作りになっていた。 かといって、ミニマルすぎず、pop-winと連携させればかなり便利に動いてくれた。 ただ、ディレクトリの常駐表示ができずに、そこが困りポイントだった。

特に普段触らないようなプロジェクトだと、全体像を把握するまでは、サイドバーチックにディレクトリ構造を開いていてほしいのだ。 そのあたりを解決してくれた。

少し使ってみたけど、これは良いな。 ざっくりデメリットは、ちょっと動作が重いかもしれないのと、アイコンが好みでないな。 treemacs-icons-dired 導入するより、アスキーでアイコン類は表してくれたほうがいいかも。