2018年12月28日金曜日

プログラミング教育の欠点(1)

Juliaプログラミングの練習のため(なのか認知症予防のためなのか…)に,Bogumił KamińskiJulia Express を訳している。MITライセンスなのでわりと自由に利用できそうである。この記事には こJulia Expressから派生して修正した部分があるので,MITライセンスが適用されるものとする。

Julia Express の図1に,数値型の階層図があるので,それを再現すべく TikZ のコードを自力で書いてみた。ところで,上記で示したGit Hubのページには TeXソースが載っているので,自分で再現する必要は全くなかったのであることに,今ごろ気がついた。 しかし,それはそれで TikZ の練習になったのでよしとしよう。

#体系的な学習がなされていない例
\begin{tikzpicture}
[every node/.style={thick, minimum width=1.2cm, minimum height=0.5cm,
draw=black, top color=gray!0, bottom color=gray!15, rounded corners, align=center}]
\draw[help lines, step=0.5cm, color=gray!5] (0,0) grid (15.5,10);
\node at (5.75,9) (N) {\tt Number};
\node at (4,7.5) (L) {\tt Complex\{T:$<$Real\}};
\node at (7.5,7.5) (M) {\tt Real};
\node at (1.75,6) (H) {\tt Irrational\{sym\}};
\node at (5.75,6) (I) {\tt Rational\{T:$<$Integer\}};
\node at (9,6) (J) {\tt Integer};
\node at (14,6) (K) {\tt AbstractFloat};
\node at (6,4) (C) {\tt Bool};
\node at (8,4) (D) {\tt Signed};
\node at (10,4) (E) {\tt Unsigned};
\node at (12,4) (F) {\tt BigInt};
\node at (14,4) (G) {\tt Float16\\ \tt Float32\\ \tt Float64\\ \tt BigFloat};
\node at (8,2) (A) {\tt Int8\\ \tt Int16\\ \tt Int32\\ \tt Int64\\ \tt Int128};
\node at (10,2) (B) {\tt UInt8\\ \tt UInt16\\ \tt UInt32\\ \tt UInt64\\ \tt UInt128};
\draw (N) -- (L);
\draw (N) -- (M);
\draw (M) -- (H);
\draw (M) -- (I);
\draw (M) -- (J);
\draw (M) -- (K);
\draw (J) -- (C);
\draw (J) -- (D);
\draw (J) -- (E);
\draw (J) -- (F);
\draw (K) -- (G);
\draw (D) -- (A);
\draw (E) -- (B);
\end{tikzpicture}
背景にグリッドをおき,左下を原点としcmを単位とする座標系上に,目分量で読み取ったノードを配置したのだが,これは TikZ の階層図における木構造の概念を私がまったく理解していなかったためである。あるいは,フォントスタイルの一括指定ができていないので無駄なコードを書いている,などなど。残念!しかし,集中すれば1日でできる仕事だ。

プログラミング教育において,体系的な学習が欠落しても,別の代替方法で無理やり実現できることは普通によくあることなので,よほど注意しないといけない。この場合もだらだらした試行錯誤によって座標を調整した(もちろんその手の作業が必要な場合もあるが)。よほど十分に吟味された教材と方法と教員へのトレーニングを準備しないと,主体的というふれこみでバトンを渡された学習者が無駄な作業を繰り返し,それが習慣化されてしまう心配がある。そう,プログラミング教育は,そのほとんどの時間で論理的思考なんかを育まないのである。ゲームと同じで無限の試行錯誤が結果を導くのだ。論理的思考のかわりに獲得できるのは,ブラック企業での単純反復労働作業に適応できる忍耐力だろう。

注意点:
(1) 最初はノードの説明文の量によって複数のスタイルが必要なのかと思ったが, minimum width とか minimum height でフレキシブルに対応できた。
(2) ノードの背景に色のグラデーション=gradientをつけるのがわからなかったが,2つの色 top color とbottom color を指定して解決した。left color とright color でも可能。
(3) ノードのテキストに改行が必要な場合,\\ だけでは対応できず,tikzpictureのオプションに align=center(あるいはleft とか right とか)をつけると解決した。
(4) sibling distance に加えて level distance というものがあった。

0 件のコメント: