コンピューター関連

category

プログラミングのススメ

現在、本学に限らず大多数の大学では、情報基礎(おそらく学問とは距離のある文部科学省製の学校用語?)等が必須科目として提供されています。一部大学では、非常に有意義な科目として実施しているかもしれません。この情報基礎等として提供されている科目では、概ね、情報処理をはじめとする計算機科学の分野を扱い、工学分野を直接担う計算科学は対象としていない科目のようです。つまり、テキスト上は、コンピューターやネットワークの基礎用語とその仕組み、n進法の数値の扱い方とその意義などを学び、市販のワープロソフト等の使い方や、特定のプログラミング言語で簡単なプログラムを作成する作業を、1年かけて行うものです。ワープロ等のアプリケーション実習は、使用ソフトの特徴を踏まえたインストラクターのような体系だった使用説明というよりは、あまり詳細なアプリケーションの説明を伴わず課題をこなすものです。プログラミング演習の内容は、プログラムができた頃の記述方法、構造コンセプトで教育されていて、現代のプログラミング言語の状況からは大きくかけ離れており、プログラミングの内容から、プログラムの発展の歴史やそのコンセプトの意図、各言語の構造、コンセプトなど特徴を体系だって説明していないと思います。小中学校で導入が始まっているプログラミングの実態は調べていませんが、少なくとも大学では、プログラミングの基礎も含めて創造的な効果をそこから期待するのは極めて難しく、得られるものは極めて限定的です。

そのような古典的プログラミング技法のみという残念な状況にさらに輪をかけるように、大多数の学生は真剣に対応せず、つまり、だれかのプログラムを写す等の対応で、プログラミングや計算機科学(数値科学)の知識をすぐに忘れ去ってしまいます。

どの授業でも共通ですが、問題点は明確で、そしてこの問題は教育の中で顕在化していますが、学生に興味を持たせられない授業、学生が興味を持てない体質、という二つの要因の相乗効果によるものと思います。もっとも、後者もまた上流の教育による結果ではあるのですが、それは、入試の審査の曖昧さによって、少なくとも高等教育機関では大きな混乱と、様々な問題を生み出しています。体系を忘れた学問の学習は大変非効率と思うのですが、それも含めたこれら話はまた別の機会があった時に。

ここでは、総合的にそんな残念な状況下におかれた学生の皆さんへの最初の提案です。

これまでの学校と同様な状況とは思いますが、何のために大学に入ったかという目的を考えて、単位が取れて就職さえできたらいいという路線に進むのか、貴重な今の身体状況の時代を将来へ向けての大きな資産として成長させるという路線に進むのか、を選択してみることです。

ここでは、後者の選択をした学生さんへの提案です。

プログラミングを勉強してみませんか。

実は、本研究室では数年前から実験的にプログラミングの思想影響を試しています。ただ当初は、上述したように、入試の曖昧さと同等の要因に起因して、そもそも成長路線を選ぶ学生さんがいなかったために構想倒れ、すなわち、スタートする学生がいませんでした。いや、本学の入試に対する盲目的な信頼というか、現実を見ないふりをしていたことが問題と認識したくなかったことが間違いでした。

そこで最近は、研究室として簡単な受け入れ品証作業を行い、すなわち、簡単な面談によるミスマッチを防ぐようにしました。その結果、今度はそもそも本研究室が想定するところの成長路線を選択する学生の少なさから、学生そのものが本研究室にはこなくなってしまいました。しかし、色々なトラブルは解消され、いろんな計画がコントロールしやすくなったことが大きなメリットとして得られましたが、プログラミングの効果を学生が少なくなったことで実験しにくくなりました。しかし、幸か不幸か、本研究室の共同作業をしている各大学から、複数の学生との交流があります。そのような学生にまで範囲を広げ、適合者を対象に簡単なプログラミングレクチャーを行うと、意外と簡単にプログラミングに傾倒します。ただ、これまでの経緯から、まだこの実験は始まったばかりで、しっかりとした成果は確認できていません。ただ、意図した効果の片鱗は初期の段階ではかなり顕著に感じ取れます。

効果の片鱗って何でしょうか。それは、このプログラミングのススメ、の主題であり、現在文科省も進めている、初等教育におけるプログラミングを用いた教育導入の目的と同じものです。プログラミングを勉強するのではなく、プログラミングを知ることを通して、今の大学改革等で曖昧になってしまった、時代に左右されない普遍的な知識を学ぶことです。[文科省の考えなど]

 

# いや正直、今のプログラミング演習は、この施策で提供されているビデオ教材を流すだけのほうが効果があるんではないかと思っています。何といっても投資額が桁違いですから。こと、この審議会の内容は、これまで本研究室が目指していたものに近く、極めてよいコンセプトですが、これが実践の現場に至った時に、果たしてどこまで伝わるかが文科省を筆頭とする日本の学校システムの早急に改善しないといけない問題とは思います。今後の成り行きに注目です。

得られる効果とその理由は以下の通り。

  1. 現在のプログラミング言語を用いてプログラムを作成することで、構造化(またはオブジェクト化)とその効果を体感できる。
  2. 独習過程で、インターネット情報を活用する作業により、情報の探し方、接し方、派生的情報を活用することの効率的効果を体感し、知識欲の基礎を身に付け、好奇心を習得することができる。
  3. プログラミング作業を通して、常に自分の作業の影響が自分へとフィードバックすることにより、常に自分の行動や考え方の評価が行われ、問題認識能力が身につき、現代人から失われつつある改善意識が習得される。
  4. プログラミング作業におけるバグ取り作業を通じて、問題の切り分けという発想とその手順が身につき、問題解決能力とともに、体系だった思考パターンにより解決時間を安定的に短縮できる能力を習得できる。
  5. 実験や研究作業に直結できるので、容易な練習問題ではなく、実用の課題が避けられない課題として退治する必要があり、それまでのプログラミングの成功体験から、その壁の高さが見えているような感覚を体感でき、目標達成への意欲、挑戦心、忍耐力、持久力等が育成される。

そのほか派生的に、

  1. 高度情報機器が蔓延している現代社会で、それを司っているプログラムの働きを知ることで、機器、機械のブラックボックス化がなくり、透視力が身につく。
  2. 1つの完成品(に近いもの)を作成する場合、完成度が高くなるにつれて時間と手間がかかることを、机上で実感できる。

いずれも大きな効果を生むと思いますが、とりわけ、本研究室では、効果と理由の 1.に関する効果が重要であると学生に伝えることを軸足にしています。いわゆる事象のステレオタイプ化した受容性です。詳細は別記事で述べたいと思います。これによって、技術にとどまらず(いえ、実は技術は社会全体の手法ですので広義の技術の範疇にとどまりますが)社会のあらゆるものへの考え方が体系だって捉えることができるようになると考えています。

ちなみに、非常にストイックな環境でプログラムを作成するマイクロコントローラーの世界では、IoT時代を前に、従前からの人材不足と主力の引退が加速、顕在化しつつあり、プログラミングとハードウェアの両方を設計できる技術者は引く手数多、となりそうな気配です。まぁ、大企業ではベンダーに任せるでしょうから、実務的ではあるけれど、万が一の保険程度のサブスキルかもしれませんが、この記事の趣旨を理解していれば、大きな道標(廃語:道の途中にある、進度の参考になる位置情報等で、高速道路のキロポストのようなもの)となるでしょう。

準備としてのプログラミング環境構築や、ブートアップ後の作業の進め方の基本情報源は別記事で示した通りです。また、ブートアップ作業については、本研究室関係の学生に提供する用意があります。

オススメの書

CODE COMPLETE 第2版 上 、下  完全なプログラミングを目指して