わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

プログラミングの学習と学修

趣味でRubyしててもいいじゃないか - http://rubikitch.com/に移転しました経由です.

私が言いたいのは、「関数に分割して、関数を書く」能力のことだ。 PHP でいうのなら「ライブラリ」を作る能力だ。先程出した例でいうと、一口に歴史といっても、有力な説や年号を記憶する能力と、遺跡や文献を調査して歴史そのものを解明していく能力が別であるように、「関数を使う」能力と「関数を書く」能力は別だ。単に、関数呼出しを何百行も並べただけでは、プログラミングという行為は非常に苦痛だし、つまらない。一方、一つ一つの機能を、自然な形で関数に分割できると、プログラミングという行為は楽になるし、楽しくなる。後者の方が出来るようになったら、「プログラミングできる」と言えると思う。あとは気力さえ失わなければ、どこまでも歩いてゆけるはずだ。

http://d.hatena.ne.jp/scinfaxi/20080425/1209108271

「関数」を軸に据えるのなら,なるほどなのですが,「関数」にこだわらなければ,

  • 「関数を使う」能力と「関数を書く」能力は別だ

は,

  • 「人のコードをパクる」能力と,「自力でコードを書く」能力は別だ

とか

  • データベースで「SQL文を書く」能力と「テーブルを設計する」能力は別だ

とかにも置き換えられそうです.
いずれも,前者は「学習」してすぐに身に着きますし,すぐに忘れます.
しかし後者は,いったん身に着けば,少々ブランクがあってもほどなく回復できます.
とはいえその水準に辿り着くまでが大変なんだよなあと,演習科目で,学科の学生を見ていて思います*1
大学で学ぶ必要はないとしても,適切な師匠や情報に触れて,自分で考えながら体得していく,ということで,後者の能力に関する活動は「学修」と呼ぶべきですね.

*1:余談として,自分の担当している,1年後期向けのCプログラミング科目(座学)のことを.はじめのころは,配列,ポインタ,(自作)関数,構造体,前処理司令とライブラリ,の順で教えていました.前処理司令とライブラリがくっつくのは,「#include」があるからです.なのですが,2年前から,配列,ポインタ,(自作)関数,ライブラリ関数,構造体,前処理司令(#includeを除く),に切り替えました.関数は連続する授業で教えるほうが,連動して理解してくれるかなと思ったからです.なお,自作関数とライブラリ関数の違いは,関数を説明する最初に入れています.実際のところ,「関数の自作」とそれに関連すること(変数のスコープと記憶域期間)で1コマ,関数の再帰呼び出しで0.5コマ,ライブラリ関数の使い方と代表例を0.5コマとって,解説しています.